Spade

Mini Shell

Directory:~$ /home/lmsyaran/public_html/joomla4/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/public_html/joomla4/com_notifly.tar

access.xml000064400000004261151160724640006540 0ustar00<?xml
version="1.0" encoding="utf-8" ?>
<access component="com_notifly">
	<section name="component">
		<action name="core.admin" title="JACTION_ADMIN"
description="JACTION_ADMIN_COMPONENT_DESC" />
		<action name="core.options"
title="JACTION_OPTIONS"
description="JACTION_OPTIONS_COMPONENT_DESC" />
		<action name="core.manage" title="JACTION_MANAGE"
description="JACTION_MANAGE_COMPONENT_DESC" />
		<action name="core.create" title="JACTION_CREATE"
description="JACTION_CREATE_COMPONENT_DESC" />
		<action name="core.delete" title="JACTION_DELETE"
description="JACTION_DELETE_COMPONENT_DESC" />
		<action name="core.edit" title="JACTION_EDIT"
description="JACTION_EDIT_COMPONENT_DESC" />
		<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="JACTION_EDITSTATE_COMPONENT_DESC" />
		<action name="core.edit.own"
title="JACTION_EDITOWN"
description="JACTION_EDITOWN_COMPONENT_DESC" />
		<action name="core.edit.value"
title="JACTION_EDITVALUE"
description="JACTION_EDITVALUE_COMPONENT_DESC" />
	</section>
	<section name="event">
		<action name="core.delete" title="JACTION_DELETE"
description="COM_CATEGORIES_ACCESS_DELETE_DESC" />
		<action name="core.edit" title="JACTION_EDIT"
description="COM_CATEGORIES_ACCESS_EDIT_DESC" />
		<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="COM_CATEGORIES_ACCESS_EDITSTATE_DESC" />
	</section>
	<section name="integration">
		<action name="core.edit" title="JACTION_EDIT"
description="COM_NOTIFLY_ACCESS_EDIT_DESC" />
		<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="COM_NOTIFLY_ACCESS_EDITSTATE_DESC" />
	</section>
	<section name="template">
		<action name="core.create" title="JACTION_CREATE"
description="COM_FIELDS_GROUP_PERMISSION_CREATE_DESC" />
		<action name="core.delete" title="JACTION_DELETE"
description="COM_FIELDS_GROUP_PERMISSION_DELETE_DESC" />
		<action name="core.edit" title="JACTION_EDIT"
description="COM_FIELDS_GROUP_PERMISSION_EDIT_DESC" />
		<action name="core.edit.state"
title="JACTION_EDITSTATE"
description="COM_FIELDS_GROUP_PERMISSION_EDITSTATE_DESC" />
		<action name="core.edit.value"
title="JACTION_EDITVALUE"
description="COM_FIELDS_GROUP_PERMISSION_EDITVALUE_DESC" />
	</section>
</access>
config.xml000064400000014172151160724640006546 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<config>
	<fieldset
		name="common"
		label="COM_NOTIFLY_CONFIG_COMMON_LABEL"
		description="COM_NOTIFLY_CONFIG_COMMON_DESC"
	>

		<field 
            name="username" 
            type="text" 
            default="" 
            size="30"
            label="COM_NOTIFLY_CONFIG_USER_NAME_LABEL"
            description ="COM_NOTIFLY_CONFIG_USER_NAME_DESC" 
        />

        <field 
            name="key" 
            type="text" 
            default="" 
            size="30"
            class="input-large"
            label="COM_NOTIFLY_CONFIG_USER_KEY_LABEL"
            description ="COM_NOTIFLY_CONFIG_USER_KEY_DESC" 
        />
		

	</fieldset>

	<fieldset name="design">

		<field name="notifly_random" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFLY_RANDOM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFLY_RANDOM_DESC"
default="1">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notifly_loop" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFLY_LOOP_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFLY_LOOP_DESC"
default="1">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="hide_mobile" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_MOBILE_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_MOBILE_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="hide_desktop" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_DESKTOP_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_DESKTOP_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="hide_user" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_USER_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_USER_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>
			
		<field name="allow_close" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_ALLOW_CLOSE_LABEL"
description="COM_NOTIFLY_DESIGN_ALLOW_CLOSE_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notify_delay_random" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_DELAY_RANDOM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_DELAY_RANDOM_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notify_newtab" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_NEWTAB_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_NEWTAB_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notify_box_link" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_BOXLINK_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_BOXLINK_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notify_max" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_DESC"
default="0">
			<option	value="1">JYES</option>
			<option	value="0">JNO</option>
		</field>

		<field name="notify_max_item" type="number"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_ITEM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_ITEM_DESC"
default="120" showon="notify_max:1" />

		<field name="notify_max_time" type="number"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_TIME_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_TIME_DESC"
default="60" showon="notify_max:1" />

	</fieldset>

	<fieldset name="behavior">

		<field name="initial_delay" type="number"
label="COM_NOTIFLY_BEHAVIOR_INITIAL_DELAY_LABEL"
description="COM_NOTIFLY_BEHAVIOR_INITIAL_DELAY_DESC"
default="5" />

		<field name="max_bypage" type="number"
label="COM_NOTIFLY_BEHAVIOR_MAX_BYPAGE_LABEL"
description="COM_NOTIFLY_BEHAVIOR_MAX_BYPAGE_DESC"
default="5" />

		<field name="display_time" type="number"
label="COM_NOTIFLY_BEHAVIOR_DISPLAY_TIME_LABEL"
description="COM_NOTIFLY_BEHAVIOR_DISPLAY_TIME_DESC"
default="4" />

		<field name="delay_time" type="number"
label="COM_NOTIFLY_BEHAVIOR_DELAY_TIME_LABEL"
description="COM_NOTIFLY_BEHAVIOR_DELAY_TIME_DESC"
default="12" />
		
		<field name="expire_cookie" type="number"
label="COM_NOTIFLY_BEHAVIOR_EXPIRE_COOKIE_LABEL"
description="COM_NOTIFLY_BEHAVIOR_EXPIRE_COOKIE_DESC"
default="48" />

		<field name="box_position" type="list"
label="COM_NOTIFLY_BEHAVIOR_BOX_POSITION_LABEL"
description="COM_NOTIFLY_BEHAVIOR_BOX_POSITION_DESC"
default="bottom_left">
			<option value="bottom_left">Bottom left</option>
			<option value="bottom_right">Bottom right</option>
			<option value="top_left">Top left</option>
			<option value="top_right">Top right</option>
			<option value="top_center">Top center</option>
			<option value="bottom_center">Bottom
center</option>
			<option value="bottom_left_horizontal">Bottom left -
Slide In</option>
			<option value="bottom_right_horizontal">Bottom right -
Slide In</option>
			<option value="top_left_horizontal">Top left - Slide
In</option>
			<option value="top_right_horizontal">Top right - Slide
In</option>

		</field>

		<field name="mobile_position" type="list"
label="COM_NOTIFLY_BEHAVIOR_MOBILE_POSITION_LABEL"
description="COM_NOTIFLY_BEHAVIOR_MOBILE_POSITION_LABEL"
default="bottom_left">
			<option value="top">Top</option>
			<option value="bottom">Bottom</option>
		</field>

		<field name="wrapper_width" type="text"
label="COM_NOTIFLY_BEHAVIOR_WRAPPER_WIDTH_LABEL"
description="COM_NOTIFLY_BEHAVIOR_WRAPPER_WIDTH_LABEL"
default="300px" />

		<field name="enable_hitcounter" type="radio"
class="btn-group"
label="COM_NOTIFLY_BEHAVIOR_ENABLE_HITCOUNTER_LABEL"
description="COM_NOTIFLY_BEHAVIOR_ENABLE_HITCOUNTER_DESC"
default="1">
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>


	</fieldset>

	<fieldset
		name="permissions"
		label="JCONFIG_PERMISSIONS_LABEL"
		description="JCONFIG_PERMISSIONS_DESC"
	>

		<field
			name="rules"
			type="rules"
			label="JCONFIG_PERMISSIONS_LABEL"
			validate="rules"
			filter="rules"
			component="com_notifly"
			section="component"
		/>
	</fieldset>
</config>
controller.php000064400000004011151160724640007442 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

// Autoload Composer
require __DIR__ . '/vendor/autoload.php';

/**
 * Component Controller
 *
 * @since  1.5
 */
class NotiflyController extends JControllerLegacy
{
	/**
	 * The default view.
	 *
	 * @var    string
	 * @since  1.6
	 */
	protected $default_view = 'dashboard';

	/**
	 * Method to display a view.
	 *
	 * @param   boolean  $cachable   If true, the view output will be cached
	 * @param   array    $urlparams  An array of safe URL parameters and their
variable types, for valid values see {@link JFilterInput::clean()}.
	 *
	 * @return  NotiflyController  This object to support chaining.
	 *
	 * @since   1.5
	 */
	public function display($cachable = false, $urlparams = array())
	{
		JHtml::_('script', 'com_notifly/admin-notifly.js',
array('version' => 'auto', 'relative'
=> true));
		// JHtml::_('stylesheet',
'com_notifly/admin-notifly.css', array('version' =>
'auto', 'relative' => true));
		JHtml::_('stylesheet',
'com_notifly/notifly-admin.css', array('version' =>
'auto', 'relative' => true));
		// JFactory::getDocument()->addStyleSheet( JUri::root().
'/media/com_notifly/css/notifly-admin.css');

		// $view   = $this->input->get('view',
'articles');
		// $layout = $this->input->get('layout',
'articles');
		// $id     = $this->input->getInt('id');

		// // Check for edit form.
		// if ($view == 'article' && $layout ==
'edit' &&
!$this->checkEditId('com_notifly.edit.article', $id))
		// {
		// 	// Somehow the person just went to the form - we don't allow
that.
		//
	$this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID',
$id));
		// 	$this->setMessage($this->getError(), 'error');
		//
	$this->setRedirect(JRoute::_('index.php?option=com_notifly&view=articles',
false));

		// 	return false;
		// }
		
		return parent::display();
	}
}
controllers/design.php000064400000005733151160724640011112 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Utilities\ArrayHelper;

/**
 * Design controller class.
 *
 * @since  1.6
 */
class NotiflyControllerDesign extends JControllerAdmin {

	function __construct () {

		parent::__construct();

		$this->registerTask("apply", "save");
		$this->registerTask("save", "save");

		$this->_model = $this->getModel("Design");
		$this->app = JFactory::getApplication();

	}

	function cancel() {
		$this->setRedirect('index.php?option=com_notifly');
	}


	function save () {

		// Check for request forgeries.
		if (!JSession::checkToken())
		{
			$this->app->enqueueMessage(JText::_('JINVALID_TOKEN'));
			$this->setRedirect('index.php?option=com_notifly&view=design');
		}

		$form   = $this->_model->getForm();
		$data   = $this->input->get('jform', array(),
'array');
		$id     = $this->input->getInt('id');
		$option = $this->input->get('com_notifly');
		$task = $this->input->get('task','apply');

		// Check if the user is authorized to do this.
		if (!JFactory::getUser()->authorise('core.admin', $option))
		{
			$this->app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'));
			$this->setRedirect('index.php?option=com_notifly&view=design');
		}

		// Validate the posted data.
		$return = $this->_model->validate($form, $data);

		// Check for validation errors.
		if ($return === false)
		{
			/*
			 * The validate method enqueued all messages for us, so we just need to
redirect back.
			 */

			// Save the data in the session.
			$this->app->setUserState('com_notifly.design.global.data',
$data);

			// Redirect back to the edit screen.
			$this->app->redirect(JRoute::_('index.php?option=com_notifly&view=design'
. $redirect, false));
		}

		// Attempt to save the configuration.
		$data = array(
			'params' => $return,
			'id'     => $id,
			'option' => $option
		);

		try
		{
			$this->_model->save($data);
		}
		catch (RuntimeException $e)
		{
			// Save the data in the session.
			$this->app->setUserState('com_notifly.design.global.data',
$data);

			// Save failed, go back to the screen and display a notice.
			$this->app->enqueueMessage(JText::sprintf('JERROR_SAVE_FAILED',
$e->getMessage()), 'error');
			$this->app->redirect(JRoute::_('index.php?option=com_notifly&view=design'
. $redirect, false));
		}

		// Set the redirect based on the task.
		switch ($task)
		{
			case 'apply':
				$this->app->enqueueMessage(JText::_('COM_COM_NOTIFLY_CONFIG_SAVED_SUCCESSFULLY'));
				$this->app->redirect(JRoute::_('index.php?option=com_notifly&view=design',
false));

				break;

			case 'save':
			default:
				$redirect = 'index.php?option=com_notifly';
				$this->app->enqueueMessage(JText::_('COM_COM_NOTIFLY_CONFIG_SAVED_SUCCESSFULLY'));
				$this->app->redirect(JRoute::_($redirect, false));

				break;
		}

		return true;
	}
}
controllers/event.php000064400000006513151160724640010757 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Utilities\ArrayHelper;

/**
 * Controller for a single contact
 *
 * @since  1.6
 */
class NotiflyControllerEvent extends JControllerForm
{
	/**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		$allow = JFactory::getUser()->authorise('core.create',
$this->option . '.events');

		if ($allow === null)
		{
			// In the absense of better information, revert to the component
permissions.
			return parent::allowAdd($data);
		}

		return $allow;
	}

	/**
	 * Method override to check if you can edit an existing record.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		$recordId = (int) isset($data[$key]) ? $data[$key] : 0;

		// Since there is no asset tracking, fallback to the component
permissions.
		if (!$recordId)
		{
			return parent::allowEdit($data, $key);
		}

		// Get the item.
		$item = $this->getModel()->getItem($recordId);

		// Since there is no item, return false.
		if (empty($item))
		{
			return false;
		}

		$user = JFactory::getUser();

		// Check if can edit own core.edit.own.
		$canEditOwn = $user->authorise('core.edit', $this->option
. '.events');

		// Check the events core.edit permissions.
		return $canEditOwn;
	}

	/**
	 * Method to toggle the featured setting of a list of articles.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	public function delete()
	{
		// Check for request forgeries
		JSession::checkToken('get') or
jexit(JText::_('JINVALID_TOKEN'));

		$user = JFactory::getUser();
		$ids  = $this->input->get('cid', array(),
'array');

		// Access checks.
		foreach ($ids as $i => $id)
		{
			if (!$user->authorise('core.delete',
'com_notifly.event'))
			{
				// Prune items that you can't delete.
				unset($ids[$i]);
				JError::raiseNotice(403,
JText::_('JERROR_CORE_DELETE_NOT_PERMITTED'));
			}
		}

		if (empty($ids))
		{
			JError::raiseWarning(500,
JText::_('JERROR_NO_ITEMS_SELECTED'));
		}
		else
		{
			// Get the model.
			/** @var ContentModelFeature $model */
			$model = $this->getModel();

			// Remove the items.
			if (!$model->delete($ids, 0))
			{
				JError::raiseWarning(500, $model->getError());
			}
		}

		
		$this->setRedirect(
			\JRoute::_(
				'index.php?option=' . $this->option .
'&view=' . $this->view_list
				. $this->getRedirectToListAppend(), false
			)
			,
			JText::_('COM_NOTIFLY_COMPLETE')
		);

		return true;
	}

	/**
	 * Proxy for getModel.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  The array of possible config values.
Optional.
	 *
	 * @return  JModelLegacy
	 *
	 * @since   1.6
	 */
	public function getModel($name = 'Event', $prefix =
'NotiflyModel', $config = array('ignore_request' =>
true))
	{
		return parent::getModel($name, $prefix, $config);
	}
}
controllers/integrations.php000064400000004300151160724640012334
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Utilities\ArrayHelper;

/**
 * Integration controller class.
 *
 * @since  1.6
 */
class NotiflyControllerIntegrations extends JControllerAdmin
{
	public function enable(){
		// Check for request forgeries
		JSession::checkToken('get') or
jexit(JText::_('JINVALID_TOKEN'));

		$user   = JFactory::getUser();
		$ids    = $this->input->get('ids', array(),
'array');
		$values = array('enable' => 1, 'disable' => 0);
		$task   = $this->getTask();
		$value  = ArrayHelper::getValue($values, $task, 0, 'int');
		$message = false;
		// Access checks.
		foreach ($ids as $i => $id)
		{
			if (!$user->authorise('core.edit.state',
'com_notifly.Integrations.' . (int) $id))
			{
				// Prune items that you can't change.
				unset($ids[$i]);
				JError::raiseNotice(403,
JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
			}
		}

		if (empty($ids))
		{
			JError::raiseWarning(500,
JText::_('JERROR_NO_ITEMS_SELECTED'));
		}
		else
		{
			// Get the model.
			/** @var NotiflyModelIntegrations $model */
			$model = $this->getModel();

			// Publish the items.
			if (!$model->enable($ids, $value))
			{
				$message = new Exception($model->getError());
			}

			if ($value == 1)
			{
				$message = JText::plural('COM_NOTIFLY_N_ITEMS_ENABLED',
count($ids));
			}
			else
			{
				$message = JText::plural('COM_NOTIFLY_N_ITEMS_DISABLED',
count($ids));
			}

			$this->setRedirect(JRoute::_('index.php?option=com_notifly&view=integrations',
false), $message);
			
			return true;
		}
		
	}
	/**
	 * Proxy for getModel.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  The array of possible config values.
Optional.
	 *
	 * @return  JModelLegacy
	 *
	 * @since   1.6
	 */
	public function getModel($name = 'Integrations', $prefix =
'NotiflyModel', $config = array('ignore_request' =>
true))
	{
		return parent::getModel($name, $prefix, $config);
	}
}
controllers/template.php000064400000007127151160724640011453
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Utilities\ArrayHelper;

/**
 * Controller for a single contact
 *
 * @since  1.6
 */
class NotiflyControllerTemplate extends JControllerForm
{
	/**
	 * Method override to check if you can add a new record.
	 *
	 * @param   array  $data  An array of input data.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowAdd($data = array())
	{
		$allow = JFactory::getUser()->authorise('core.create',
$this->option . '.templates');

		if ($allow === null)
		{
			// In the absense of better information, revert to the component
permissions.
			return parent::allowAdd($data);
		}

		return $allow;
	}

	/**
	 * Method override to check if you can edit an existing record.
	 *
	 * @param   array   $data  An array of input data.
	 * @param   string  $key   The name of the key for the primary key.
	 *
	 * @return  boolean
	 *
	 * @since   1.6
	 */
	protected function allowEdit($data = array(), $key = 'id')
	{
		$recordId = (int) isset($data[$key]) ? $data[$key] : 0;

		// Since there is no asset tracking, fallback to the component
permissions.
		if (!$recordId)
		{
			return parent::allowEdit($data, $key);
		}

		// Get the item.
		$item = $this->getModel()->getItem($recordId);

		// Since there is no item, return false.
		if (empty($item))
		{
			return false;
		}

		$user = JFactory::getUser();

		// Check if can edit own core.edit.own.
		$canEditOwn = $user->authorise('core.edit', $this->option
. '.templates');

		// Check the templates core.edit permissions.
		return $canEditOwn;
	}

	/**
	 * Method to toggle the featured setting of a list of articles.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	public function update()
	{
		// Check for request forgeries
		// JSession::checkToken() or jexit(JText::_('JINVALID_TOKEN'));

		$user   = JFactory::getUser();
		$ids    = $this->input->get('ids', array(),
'array');
		$values = array('enable' => 1, 'disable' => 0);
		$task   = $this->getTask();
		$value  = ArrayHelper::getValue($values, $task, 0, 'int');
		$message = false;
		// Access checks.
		foreach ($ids as $i => $id)
		{
			if (!$user->authorise('core.edit.state',
'com_notifly.templates.' . (int) $id))
			{
				// Prune items that you can't change.
				unset($ids[$i]);
				JError::raiseNotice(403,
JText::_('JLIB_APPLICATION_ERROR_EDITSTATE_NOT_PERMITTED'));
			}
		}

		if (empty($ids))
		{
			JError::raiseWarning(500,
JText::_('JERROR_NO_ITEMS_SELECTED'));
		}
		else
		{
			// Get the model.
			/** @var ContentModelArticle $model */
			$model = $this->getModel();

			// Publish the items.
			if (!$model->update($ids, $value))
			{
				$message = new Exception($model->getError());
			}

			if ($value == 1)
			{
				$message = JText::plural('COM_NOTIFLY_N_ITEMS_ENABLED',
count($ids));
			}
			else
			{
				$message = JText::plural('COM_NOTIFLY_N_ITEMS_DISABLED',
count($ids));
			}
			echo new JResponseJson($message);
		}

		JFactory::getApplication()->close();
	}

	/**
	 * Proxy for getModel.
	 *
	 * @param   string  $name    The model name. Optional.
	 * @param   string  $prefix  The class prefix. Optional.
	 * @param   array   $config  The array of possible config values.
Optional.
	 *
	 * @return  JModelLegacy
	 *
	 * @since   1.6
	 */
	public function getModel($name = 'Template', $prefix =
'NotiflyModel', $config = array('ignore_request' =>
true))
	{
		return parent::getModel($name, $prefix, $config);
	}
}
helpers/events.php000064400000002504151160724640010232 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Notifly component helper.
 *
 * @since  1.6
 */
class NotiflyEventsHelper
{

	public static function getList($random = false)
	{
		$events = NotiflyEventsHelper::getEvents($random);
		$results = [];
		foreach ($events as $key => $event) {
			$item = [];
			$item['message'] =
NotiflyMessageHelper::parseMessage($event->message, $event);
			$item['image'] = $event->image_url;
			$item['url'] = $event->url;
			$results[] = $item;
		}
		// print_r($results);die;

		return $results;
	}

	public static function getEvents($random = false)
	{
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->select("a.*, m.message")
			  ->from('#__notifly_events as a')			  
			  ->join('LEFT', '#__notifly_templates AS m ON m.id =
a.template_id')
			  ->where($db->quoteName('a.published') . ' =
1');
		if($random){
			$query->order('rand() DESC');
		}else{
			$query->order($db->quoteName('a.id') . '
DESC');
		}

		// get the setLimit form config
		$query->setLimit('20');
		$db->setQuery($query);
		$result = $db->loadObjectList();
		return $result;
	}

}
helpers/message.php000064400000011654151160724640010360 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Notifly component helper.
 *
 * @since  1.6
 */
class NotiflyMessageHelper
{
	/**
	 * Returns valid contexts
 	 * @param   time of action
	 *
	 * @return  array

	 *
	 * @since   1.0.0
	 */
	public static function parseMessage($msg, $event)
	{
		$title = isset($event->title) && !empty($event->title) ?
$event->title : JText::_('COM_NOTIFLY_MESSAGE_TITLE');
		$url = isset($event->url) && !empty($event->url) ?
JRoute::_($event->url) : Juri::root();

		$m = new Mustache_Engine;
		$data = array(
			'name' => isset($event->name) &&
!empty($event->name) ? $event->name :
JText::_('COM_NOTIFLY_MESSAGE_SOMEONE'),
			'city' => isset($event->city) &&
!empty($event->city) ? $event->city :
JText::_('COM_NOTIFLY_MESSAGE_CITY_UNKNOWN'),
			'province' => isset($event->province) &&
!empty($event->province) ? $event->province :
JText::_('COM_NOTIFLY_MESSAGE_PROVINCE_UNKNOWN'),
			'country' => isset($event->country) &&
!empty($event->country) ? $event->country :
JText::_('COM_NOTIFLY_MESSAGE_COUNTRY_UNKNOWN'),
			'title' => $title,
			'url' => $url,
			'title_with_link' =>
'['.$title.']('.$url.')', //'<a
href="'.$url.'">'.$title.'</a>',
			'time_ago' => isset($event->created) &&
!empty($event->created) ?
NotiflyMessageHelper::getFormatedTime($event->created) :
JText::_('COM_NOTIFLY_MESSAGE_CREATED')
		);	

		return $m->render($msg, $data);
	}

	/**
	 * Returns valid contexts
 	 * @param   ip
	 *
	 * @return  array

	 *
	 * @since   1.0.0
	 */
	public static function getLocation($ip)
	{
		//
http://api.db-ip.com/v2/e9a901d2b1df53e77ab70dc79a74d11558d3bdb9/61.6.1.39
		// http://freegeoip.net/json/?q=119.148.0.0
		
		try {
			// Set up custom headers for a single request.
			$headers = array('Accept' => 'application/json');
			$http = JHttpFactory::getHttp();
			
			// In this case, the Accept header in $headers will override the options
header.
			$response = $http->get('http://freegeoip.net/json/' . $ip,
$headers);
			if($response->code == '200'){
				$data = json_decode($response->body, true);
				return $data;
			}
		} catch (Exception $e) {
			// Add a message to the message queue
			JFactory::getApplication()->enqueueMessage(JText::_('COM_NOTIFLY_ERROR_LOCATION'),
'error');
		}
	}


	/**
	 * Get either a Gravatar URL or complete image tag for a specified email
address.
	 *
	 * @param string $email The email address
	 * @param string $s Size in pixels, defaults to 80px [ 1 - 2048 ]
	 * @param string $d Default imageset to use [ 404 | mm | identicon |
monsterid | wavatar ]
	 * @param string $r Maximum rating (inclusive) [ g | pg | r | x ]
	 * @param boole $img True to return a complete IMG tag False for just the
URL
	 * @param array $atts Optional, additional key/value attributes to include
in the IMG tag
	 * @return String containing either just a URL or a complete image tag
	 * @source https://gravatar.com/site/implement/images/php/
	 */
	public static function getGravater( $email, $s = 80, $d = 'mm',
$r = 'g', $img = false, $atts = array() ) {
	    $url = 'https://www.gravatar.com/avatar/';
	    $url .= md5( strtolower( trim( $email ) ) );
	    $url .= "?s=$s&d=$d&r=$r";
	    if ( $img ) {
	        $url = '<img src="' . $url . '"';
	        foreach ( $atts as $key => $val )
	            $url .= ' ' . $key . '="' . $val .
'"';
	        $url .= ' />';
	    }
	    return $url;
	}

	public static function getRealIpAddr()
	{
	    if (!empty($_SERVER['HTTP_CLIENT_IP']))   //check ip from
share internet
	    {
	      $ip=$_SERVER['HTTP_CLIENT_IP'];
	    }
	    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))   //to
check ip is pass from proxy
	    {
	      $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
	    }
	    else
	    {
	      $ip=$_SERVER['REMOTE_ADDR'];
	    }
	    return $ip;
	}
	
	//https://stackoverflow.com/questions/1416697/converting-timestamp-to-time-ago-in-php-e-g-1-day-ago-2-days-ago
	public static function getFormatedTime($datetime, $full = false) 
	{
		$zone = JFactory::getConfig()->get('offset');
		$now = JFactory::getDate( 'now' , $zone );
	    $ago = JFactory::getDate( $datetime , $zone );
	    $diff = $now->diff($ago);

	    $diff->w = floor($diff->d / 7);
	    $diff->d -= $diff->w * 7;

	    $string = array(
	        'y' => 'year',
	        'm' => 'month',
	        'w' => 'week',
	        'd' => 'day',
	        'h' => 'hour',
	        'i' => 'minute',
	        's' => 'second',
	    );
	    foreach ($string as $k => &$v) {
	        if ($diff->$k) {
	            $v = $diff->$k . ' ' . $v . ($diff->$k > 1
? 's' : '');
	        } else {
	            unset($string[$k]);
	        }
	    }

	    if (!$full) $string = array_slice($string, 0, 1);
	    return $string ? implode(', ', $string) . ' '.
JText::_('COM_NOTIFLY_MESSAGE_AGO') :
JText::_('COM_NOTIFLY_MESSAGE_NOW');
	}



}
helpers/notifly.php000064400000011026151160724640010411 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Notifly component helper.
 *
 * @since  1.6
 */
class NotiflyHelper extends JHelperContent
{
	public static $extension = 'com_notifly';

	/**
	 * Configure the Linkbar.
	 *
	 * @param   string  $vName  The name of the active view.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	public static function addSubmenu($vName)
	{
		JHtmlSidebar::addEntry(
			JText::_('COM_NOTIFLY_SUBMENU_DASHBOARD'),
			'index.php?option=com_notifly&view=dashboard',
			$vName == 'dashboard'
		);
		JHtmlSidebar::addEntry(
			JText::_('COM_NOTIFLY_SUBMENU_TEMPLATES'),
			'index.php?option=com_notifly&view=templates',
			$vName == 'templates'
		);

		JHtmlSidebar::addEntry(
			JText::_('COM_NOTIFLY_SUBMENU_INTEGRATIONS'),
			'index.php?option=com_notifly&view=integrations',
			$vName == 'integrations'
		);

		JHtmlSidebar::addEntry(
			JText::_('COM_NOTIFLY_SUBMENU_EVENTS'),
			'index.php?option=com_notifly&view=events',
			$vName == 'events'
		);

		JHtmlSidebar::addEntry(
			JText::_('COM_NOTIFLY_SUBMENU_DESIGN'),
			'index.php?option=com_notifly&view=design',
			$vName == 'design'
		);
	}

	/**
	 * Applies the content tag filters to arbitrary text as per settings for
current user group
	 *
	 * @param   text  $text  The string to filter
	 *
	 * @return  string  The filtered string
	 *
	 * @deprecated  4.0  Use JComponentHelper::filterText() instead.
	 */
	public static function filterText($text)
	{
		try
		{
			JLog::add(
				sprintf('%s() is deprecated. Use JComponentHelper::filterText()
instead', __METHOD__),
				JLog::WARNING,
				'deprecated'
			);
		}
		catch (RuntimeException $exception)
		{
			// Informational log only
		}

		return JComponentHelper::filterText($text);
	}

	/**
	 * Returns valid contexts
	 *
	 * @return  array
	 *
	 * @since   3.7.0
	 */
	public static function getContexts()
	{
		JFactory::getLanguage()->load('com_notifly',
JPATH_ADMINISTRATOR);

		$contexts = array(
			'com_notifly.template'    =>
JText::_('COM_NOTIFLY_SUBMENU_TEMPLATES'),
			'com_notifly.integration' =>
JText::_('COM_NOTIFLY_SUBMENU_INTEGRATIONS')
		);

		return $contexts;
	}

	/**
	 * Returns all notifly group plugins list
	 *
	 * @return  object
	 *
	 * @since   1.0.0
	 */
	public static function getGroupPlugins()
	{
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->select("*")
			  ->from('#__extensions')
			  ->where($db->quoteName('type') . ' = ' .
$db->quote('plugin'))
			  ->where($db->quoteName('folder') . ' = ' .
$db->quote('notifly'))
			  ->setLimit('20');
		$db->setQuery($query);
		$result = $db->loadObjectList();

		return $result;
	}

	/*
	* to get update info
	* use layout to get alert structure
	*/

	public static function getUpdateStatus(){

		$update = self::checkUpdate();
		
		// if(isset($update->update_id) && $update->update_id)
		// {
		// 	$credentials = self::hasCredentials();
		// 	// Instantiate a new JLayoutFile instance and render the layout
		// 	$layout = new JLayoutFile('toolbar.update');
		// 	return $layout->render(array('info' => $update,
'credentials' => $credentials));		
		// }

		return $update;
	}

	/*
	* to get update info
	* use layout to get alert structure
	*/

	public static function checkUpdate(){
		// Get a database object.
		$return = [];
		$db = JFactory::getDbo();

		// get extensionid
		$query = $db->getQuery(true)
					->select('*')
					->from('#__extensions')
					->where($db->quoteName('type') . ' = ' .
$db->quote('package'))
					->where($db->quoteName('element') . ' = ' .
$db->quote('pkg_notifly'));

		$db->setQuery($query);
		
		$result1 = $db->loadObject();
		$extensionid = $result1->extension_id;

		$manifest_cache 	= json_decode($result1->manifest_cache);
		$return['old'] 		= $manifest_cache->version;

		// get update_site_id
		$query = $db->getQuery(true)
					->select('*')
					->from('#__updates')
					->where($db->quoteName('extension_id') . ' =
' . $db->quote($extensionid))
					->where($db->quoteName('element') . ' = ' .
$db->quote('pkg_notifly'))
					->where($db->quoteName('type') . ' = ' .
$db->quote('package'));
		$db->setQuery($query);
		
		$return2 = $db->loadObject();
		$return['new'] 	= (isset($return2->version) ?
$return2->version : $manifest_cache->version);

		return $return;
		
	}

	public static function showWarning()
	{
		$layout = new JLayoutFile('notifly.warning');
		return $layout->render();
	}
}
models/dashboard.php000064400000001530151160724640010474 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelDashboard extends JModelItem
{
	/**
	 * Returns a Table object, always creating it.
	 *
	 * @param   string  $type    The table type to instantiate
	 * @param   string  $prefix  A prefix for the table class name. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JTable	A database object
	 *
	 * @since   1.6
	 */
	public function getTable($type = 'Dashboard', $prefix =
'NotiflyTable', $config = array())
	{
		return JTable::getInstance($type, $prefix, $config);
	}
}
models/design.php000064400000005316151160724640010024 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelDesign extends JModelForm
{

	/**
	 * Method to get a form object.
	 *
	 * @param   array    $data      Data for the form.
	 * @param   boolean  $loadData  True if the form is to load its own data
(default case), false if not.
	 *
	 * @return  mixed  A JForm object on success, false on failure
	 *
	 * @since	1.0.0
	 */
	public function getForm($data = array(), $loadData = true)
	{
		$form = $this->loadForm('com_notifly.design',
'design', array('control' => 'jform',
'load_data' => $loadData));
		
		if (empty($form))
		{
			return false;
		}

		return $form;
	}

	/**
	 * Get the component information.
	 *
	 * @return	object
	 *
	 * @since	1.0.0
	 */
	public function getComponent()
	{
		$state = $this->getState();
		$option = 'com_notifly';
		// Load common and local language files.
		$lang = JFactory::getLanguage();
		$lang->load($option, JPATH_BASE, null, false, true)
		|| $lang->load($option, JPATH_BASE .
"/components/com_notifly", null, false, true);

		$result = JComponentHelper::getComponent($option);
		
		return $result;
	}

	/**
	 * Method to save the configuration data.
	 *
	 * @param   array  $data  An array containing all global design data.
	 *
	 * @return  boolean  True on success, false on failure.
	 *
	 * @since	1.0.0
	 * @throws  RuntimeException
	 */
	public function save($data)
	{
		$table	= JTable::getInstance('extension');

		// Load the previous Data
		if (!$table->load($data['id']))
		{
			throw new RuntimeException($table->getError());
		}

		unset($data['id']);

		// Bind the data.
		if (!$table->bind($data))
		{
			throw new RuntimeException($table->getError());
		}

		// Check the data.
		if (!$table->check())
		{
			throw new RuntimeException($table->getError());
		}

		// Store the data.
		if (!$table->store())
		{
			throw new RuntimeException($table->getError());
		}

		$this->cleanCache();
		return true;
	}

	/**
	 * Custom clean cache method, plugins are cached in 2 places for different
clients.
	 *
	 * @param   string   $group      Cache group name.
	 * @param   integer  $client_id  Application client id.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function cleanCache($group = null, $client_id = 0)
	{
		parent::cleanCache('_system', 0);
		parent::cleanCache('_system', 1);
		parent::cleanCache('com_notifly');
	}

	public static function getConfigs(){
		$comInfo = JComponentHelper::getComponent('com_notifly');
		return $comInfo->params;
	}
}
models/event.php000064400000024436151160724640007700 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;
use Joomla\String\StringHelper;

JLoader::register('NotiflyHelper', JPATH_ADMINISTRATOR .
'/components/com_notifly/helpers/notifly.php');

/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelEvent extends JModelAdmin
{
	/**
	 * The prefix to use with controller messages.
	 *
	 * @var    string
	 * @since  1.6
	 */
	protected $text_prefix = 'COM_NOTIFLY';

	/**
	 * The type alias for this content type (for example,
'com_notifly.event').
	 *
	 * @var    string
	 * @since  3.2
	 */
	public $typeAlias = 'com_notifly.event';

	/**
	 * The context used for the associations table
	 *
	 * @var    string
	 * @since  3.4.4
	 */
	protected $associationsContext = 'com_notifly.item';

	/**
	 * Method to test whether a record can be deleted.
	 *
	 * @param   object  $record  A record object.
	 *
	 * @return  boolean  True if allowed to delete the record. Defaults to the
permission set in the component.
	 *
	 * @since   1.6
	 */
	protected function canDelete($record)
	{
		if (!empty($record->id))
		{
			if ($record->state != -2)
			{
				return false;
			}

			return JFactory::getUser()->authorise('core.delete',
'com_notifly.event.' . (int) $record->id);
		}

		return false;
	}

	/**
	 * Method to test whether a record can have its state edited.
	 *
	 * @param   object  $record  A record object.
	 *
	 * @return  boolean  True if allowed to change the state of the record.
Defaults to the permission set in the component.
	 *
	 * @since   1.6
	 */
	protected function canEditState($record)
	{
		$user = JFactory::getUser();

		// Check for existing event.
		if (!empty($record->id))
		{
			return $user->authorise('core.edit.state',
'com_notifly.event.' . (int) $record->id);
		}

		// Default to component settings if neither event nor category known.
		return parent::canEditState($record);
	}

	/**
	 * Prepare and sanitise the table data prior to saving.
	 *
	 * @param   JTable  $table  A JTable object.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function prepareTable($table)
	{
		// Set the publish date to now
		if ($table->state == 1 && (int) $table->publish_up == 0)
		{
			$table->publish_up = JFactory::getDate()->toSql();
		}

		if ($table->state == 1 && intval($table->publish_down) ==
0)
		{
			$table->publish_down = $this->getDbo()->getNullDate();
		}

		// Increment the content version number.
		$table->version++;


	}

	/**
	 * Returns a Table object, always creating it.
	 *
	 * @param   string  $type    The table type to instantiate
	 * @param   string  $prefix  A prefix for the table class name. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JTable    A database object
	 */
	public function getTable($type = 'Event', $prefix =
'NotiflyTable', $config = array())
	{
		return JTable::getInstance($type, $prefix, $config);
	}

	/**
	 * Method to get a single record.
	 *
	 * @param   integer  $pk  The id of the primary key.
	 *
	 * @return  mixed  Object on success, false on failure.
	 */
	public function getItem($pk = null)
	{
		if ($item = parent::getItem($pk))
		{
			$template = $this->getTemplateInfo($item->template_id);
			$item->template = $template->name;
			// Convert the params field to an array.
			$registry = new Registry($item->attribs);
			$item->attribs = $registry->toArray();

		}

		return $item;
	}

	public function getTemplateInfo($extension_id){
		$db = JFactory::getDBO();
		$sql = "SELECT * from `#__notifly_templates` WHERE `id` =
'".$extension_id."'";
		$db->setQuery($sql);
		return $db->loadObject();
	}

	/**
	 * Method to get the record form.
	 *
	 * @param   array    $data      Data for the form.
	 * @param   boolean  $loadData  True if the form is to load its own data
(default case), false if not.
	 *
	 * @return  JForm|boolean  A JForm object on success, false on failure
	 *
	 * @since   1.6
	 */
	public function getForm($data = array(), $loadData = true)
	{
		// Get the form.
		$form = $this->loadForm('com_notifly.event',
'event', array('control' => 'jform',
'load_data' => $loadData));

		if (empty($form))
		{
			return false;
		}

		$jinput = JFactory::getApplication()->input;

		/*
		 * The front end calls this model and uses a_id to avoid id clashes so we
need to check for that first.
		 * The back end uses id so we use that the rest of the time and set it to
0 by default.
		 */
		$id = $jinput->get('a_id', $jinput->get('id',
0));
		$user = JFactory::getUser();

		// Check for existing event.
		// Modify the form based on Edit State access controls.
		if ($id != 0 &&
(!$user->authorise('core.edit.state',
'com_notifly.event.' . (int) $id))
			|| ($id == 0 &&
!$user->authorise('core.edit.state',
'com_notifly')))
		{
			// Disable fields for display.
			$form->setFieldAttribute('ordering', 'disabled',
'true');
			$form->setFieldAttribute('publish_up',
'disabled', 'true');
			$form->setFieldAttribute('publish_down',
'disabled', 'true');
			$form->setFieldAttribute('state', 'disabled',
'true');

			// Disable fields while saving.
			// The controller has already verified this is an event you can edit.
			$form->setFieldAttribute('ordering', 'filter',
'unset');
			$form->setFieldAttribute('publish_up', 'filter',
'unset');
			$form->setFieldAttribute('publish_down',
'filter', 'unset');
			$form->setFieldAttribute('state', 'filter',
'unset');
		}

		return $form;
	}

	/**
	 * Method to get the data that should be injected in the form.
	 *
	 * @return  mixed  The data for the form.
	 *
	 * @since   1.6
	 */
	protected function loadFormData()
	{
		// Check the session for previously entered form data.
		$app  = JFactory::getApplication();
		$data = $app->getUserState('com_notifly.edit.event.data',
array());

		if (empty($data))
		{
			$data = $this->getItem();

			// Pre-select some filters (Status, Category, Language, Access) in edit
form if those have been selected in Article Manager: Articles
			if ($this->getState('event.id') == 0)
			{
				$filters = (array)
$app->getUserState('com_notifly.templates.filter');
				$data->set(
					'state',
					$app->input->getInt(
						'state',
						((isset($filters['published']) &&
$filters['published'] !== '') ?
$filters['published'] : null)
					)
				);
				$data->set('language',
$app->input->getString('language',
(!empty($filters['language']) ? $filters['language'] :
null)));
				$data->set('access',
					$app->input->getInt('access',
(!empty($filters['access']) ? $filters['access'] :
JFactory::getConfig()->get('access')))
				);
			}
		}

		// If there are params fieldsets in the form it will fail with a registry
object
		if (isset($data->params) && $data->params instanceof
Registry)
		{
			$data->params = $data->params->toArray();
		}

		$this->preprocessData('com_notifly.event', $data);

		return $data;
	}

	/**
	 * Method to validate the form data.
	 *
	 * @param   JForm   $form   The form to validate against.
	 * @param   array   $data   The data to validate.
	 * @param   string  $group  The name of the field group to validate.
	 *
	 * @return  array|boolean  Array of filtered data if valid, false
otherwise.
	 *
	 * @see     JFormRule
	 * @see     JFilterInput
	 * @since   3.7.0
	 */
	public function validate($form, $data, $group = null)
	{
		return parent::validate($form, $data, $group);
	}

	/**
	 * Method to save the form data.
	 *
	 * @param   array  $data  The form data.
	 *
	 * @return  boolean  True on success.
	 *
	 * @since   1.6
	 */
	public function save($data)
	{
		$input  = JFactory::getApplication()->input;
		$filter = JFilterInput::getInstance();

		// print_r($data);die;
		// // Automatic handling of alias for empty fields
		if (in_array($input->get('task'), array('apply',
'save', 'save2new')) &&
(!isset($data['id']) || (int) $data['id'] == 0))
		{
			if ($data['alias'] == null)
			{
				if (JFactory::getConfig()->get('unicodeslugs') == 1)
				{
					$data['alias'] =
JFilterOutput::stringURLUnicodeSlug($data['name']);
				}
				else
				{
					$data['alias'] =
JFilterOutput::stringURLSafe($data['name']);
				}

				$table = JTable::getInstance('Event',
'NotiflyTable');

				if ($table->load(array('alias' =>
$data['alias'], 'extension_id' =>
$data['extension_id'])))
				{
					$msg = JText::_('COM_NOTIFLY_SAVE_WARNING');
				}

				list($name, $alias) =
$this->generateNewTitle($data['extension_id'],
$data['alias'], $data['name']);
				$data['alias'] = $alias;
				$data['name'] = $name;

				if (isset($msg))
				{
					JFactory::getApplication()->enqueueMessage($msg,
'warning');
				}
			}
		}

		return parent::save($data);
	}

	/**
	 * Method to change the title & alias.
	 *
	 * @param   integer  $category_id  The id of the category.
	 * @param   string   $alias        The alias.
	 * @param   string   $title        The title.
	 *
	 * @return	array  Contains the modified title and alias.
	 *
	 * @since	1.7
	 */
	protected function generateNewTitle($extension_id, $alias, $title)
	{
		// Alter the title & alias
		$table = $this->getTable();

		while ($table->load(array('alias' => $alias,
'extension_id' => $extension_id)))
		{
			$title = StringHelper::increment($title);
			$alias = StringHelper::increment($alias, 'dash');
			$alias = str_replace("-", "_", $alias);
		}

		return array($title, $alias);
	}

	/**
	 * Custom clean the cache of com_notifly and content modules
	 *
	 * @param   string   $group      The cache group
	 * @param   integer  $client_id  The ID of the client
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function cleanCache($group = null, $client_id = 0)
	{
		parent::cleanCache('com_notifly');
	}

	/**
	 * Void hit function for pagebreak when editing content from frontend
	 *
	 * @return  void
	 *
	 * @since   3.6.0
	 */
	public function hit()
	{
		return;
	}

	/**
	 * Delete #__content_frontpage items if the deleted articles was featured
	 *
	 * @param   object  &$pks  The primary key related to the contents
that was deleted.
	 *
	 * @return  boolean
	 *
	 * @since   3.7.0
	 */
	public function delete(&$pks)
	{
		$db = JFactory::getDbo();
		$query = $db->getQuery(true)
			->delete($db->quoteName('#__notifly_events'))
			->where('id IN (' . implode(',', $pks) .
')');
		$db->setQuery($query);
		return $db->execute();
	}
}
models/events.php000064400000014502151160724640010054 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelEvents extends JModelList
{
	/**
	 * Constructor.
	 *
	 * @param   array  $config  An optional associative array of configuration
settings.
	 *
	 * @since   1.6
	 * @see     JControllerLegacy
	 */
	public function __construct($config = array())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array(
				'id', 'a.id',
				'template_id', 'a.template_id',
				'extension_id', 'a.extension_id',
				'url', 'a.url',
				'image_url', 'a.image_url',
				'title', 'a.title',
				'message', 't.message',
				'name', 'a.name',
				'email', 'a.email',
				'ip', 'a.ip',
				'city', 'a.city',
				'state', 'a.state',
				'country', 'a.country',
				'created', 'a.created',
				'checked_out', 'a.checked_out',
				'checked_out_time', 'a.checked_out_time',
				'state', 'a.state',
				'access', 'a.access', 'access_level',
				'ordering', 'a.ordering',
			);
		}

		parent::__construct($config);
	}

	/**
	 * Method to auto-populate the model state.
	 *
	 * Note. Calling getState in this method will result in recursion.
	 *
	 * @param   string  $ordering   An optional ordering field.
	 * @param   string  $direction  An optional direction (asc|desc).
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function populateState($ordering = 'a.id', $direction
= 'desc')
	{
		$app = JFactory::getApplication();

		// Adjust the context to support modal layouts.
		if ($layout = $app->input->get('layout'))
		{
			$this->context .= '.' . $layout;
		}

		$search = $this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search');
		$this->setState('filter.search', $search);

		$published = $this->getUserStateFromRequest($this->context .
'.filter.published', 'filter_published', '');
		$this->setState('filter.published', $published);

		$formSubmited =
$app->input->post->get('form_submited');

		$access     = $this->getUserStateFromRequest($this->context .
'.filter.access', 'filter_access');

		// $extension_id = $app->input->post->get('');
		$extension_id = $this->getUserStateFromRequest($this->context .
'.filter.extension_id', 'filter_extension_id');

		if ($formSubmited)
		{
			$access = $app->input->post->get('access');
			$this->setState('filter.access', $access);
		}

		// List state information.
		parent::populateState($ordering, $direction);
	}

	/**
	 * Method to get a store id based on model configuration state.
	 *
	 * This is necessary because the model is used by the component and
	 * different modules that might need different sets of data or different
	 * ordering requirements.
	 *
	 * @param   string  $id  A prefix for the store id.
	 *
	 * @return  string  A store id.
	 *
	 * @since   1.6
	 */
	protected function getStoreId($id = '')
	{
		// Compile the store id.
		$id .= ':' . $this->getState('filter.search');
		$id .= ':' .
serialize($this->getState('filter.access'));
		$id .= ':' .
serialize($this->getState('filter.access'));
		$id .= ':' .
serialize($this->getState('filter.extension_id'));
		$id .= ':' . $this->getState('filter.published');

		return parent::getStoreId($id);
	}

	/**
	 * Build an SQL query to load the list data.
	 *
	 * @return  JDatabaseQuery
	 *
	 * @since   1.6
	 */
	protected function getListQuery()
	{
		// Create a new query object.
		$db    = $this->getDbo();
		$query = $db->getQuery(true);
		$user  = JFactory::getUser();

		// Select the required fields from the table.
		$query->select(
			$this->getState(
				'list.select',
				'a.*')
		);
		$query->from('#__notifly_events AS a');

		// Join over the extensions.
		$query->select('t.name AS template, t.message')
			->join('LEFT', '#__notifly_templates AS t ON t.id =
a.template_id');

		$query->select('ex.element AS integration')
			->join('LEFT', '#__extensions AS ex ON ex.extension_id
= a.extension_id')
			->where('ex.type="plugin" and
ex.folder="notifly"');

		// Join over the asset groups.
		$query->select('ag.title AS access_level')
			->join('LEFT', '#__viewlevels AS ag ON ag.id =
a.access');

		// show only the items enabled
		$query->where('ex.enabled = 1');
		
		// Filter by access level.
		$extension_id = $this->getState('filter.extension_id');
		if ($extension_id)
		{
			$query->where('ex.element = ' .
$db->quote($extension_id));
		}
		
		$access = $this->getState('filter.access');
		if (is_numeric($access))
		{
			$query->where('a.access = ' . (int) $access);
		}
		elseif (is_array($access))
		{
			$access = ArrayHelper::toInteger($access);
			$access = implode(',', $access);
			$query->where('a.access IN (' . $access . ')');
		}

		// Filter by access level on categories.
		if (!$user->authorise('core.admin'))
		{
			$groups = implode(',', $user->getAuthorisedViewLevels());
			$query->where('a.access IN (' . $groups . ')');
			$query->where('c.access IN (' . $groups . ')');
		}

		// Filter by search in title.
		$search = $this->getState('filter.search');
		
		// if (!empty($search))
		// {
		// 	if (stripos($search, 'id:') === 0)
		// 	{
		// 		$query->where('a.id = ' . (int) substr($search, 3));
		// 	}
		// 	else
		// 	{
		// 		$search = $db->quote('%' . str_replace(' ',
'%', $db->escape(trim($search), true) . '%'));
		// 		$query->where('(a.name LIKE ' . $search . ' OR
a.alias LIKE ' . $search . ')');
		// 	}
		// }

		// Add the list ordering clause.
		$orderCol  = $this->state->get('list.ordering',
'a.id');
		$orderDirn = $this->state->get('list.direction',
'DESC');

		$query->order($db->escape($orderCol) . ' ' .
$db->escape($orderDirn));
		// echo $query->__toString();die;
		return $query;
	}

	/**
	 * Method to get a list of articles.
	 * Overridden to add a check for access levels.
	 *
	 * @return  mixed  An array of data items on success, false on failure.
	 *
	 * @since   1.6.1
	 */
	public function getItems()
	{
		$items = parent::getItems();

		if (JFactory::getApplication()->isClient('site'))
		{
			$groups = JFactory::getUser()->getAuthorisedViewLevels();

			foreach (array_keys($items) as $x)
			{
				// Check the access level. Remove articles the user shouldn't see
				if (!in_array($items[$x]->access, $groups))
				{
					unset($items[$x]);
				}
			}
		}

		return $items;
	}
}
models/forms/design.xml000064400000013116151160724640011160
0ustar00<?xml version="1.0" encoding="utf-8"?>
<form>
	<fields>
		<fieldset name="design">

			<field name="notifly_random" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFLY_RANDOM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFLY_RANDOM_DESC"
default="1">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="notifly_loop" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFLY_LOOP_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFLY_LOOP_DESC"
default="1">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="allow_close" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_ALLOW_CLOSE_LABEL"
description="COM_NOTIFLY_DESIGN_ALLOW_CLOSE_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="enable_hitcounter" type="radio"
class="btn-group"
label="COM_NOTIFLY_BEHAVIOR_ENABLE_HITCOUNTER_LABEL"
description="COM_NOTIFLY_BEHAVIOR_ENABLE_HITCOUNTER_DESC"
default="1">
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>

			<field name="hide_mobile" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_MOBILE_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_MOBILE_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="hide_desktop" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_DESKTOP_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_DESKTOP_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="hide_user" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_HIDE_USER_LABEL"
description="COM_NOTIFLY_DESIGN_HIDE_USER_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>



			<!-- <field name="notify_delay_random"
type="radio" class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_DELAY_RANDOM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_DELAY_RANDOM_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field> -->

			<!-- <field name="notify_newtab" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_NEWTAB_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_NEWTAB_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="notify_box_link" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_BOXLINK_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_BOXLINK_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field> -->

			<!-- <field name="notify_max" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_DESC"
default="0">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

			<field name="notify_max_item" type="number"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_ITEM_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_ITEM_DESC"
default="120" showon="notify_max:1" />

			<field name="notify_max_time" type="number"
label="COM_NOTIFLY_DESIGN_NOTIFY_MAX_TIME_LABEL"
description="COM_NOTIFLY_DESIGN_NOTIFY_MAX_TIME_DESC"
default="60" showon="notify_max:1" /> -->

			<field name="show_branding" type="radio"
class="btn-group"
label="COM_NOTIFLY_DESIGN_SHOW_BRANDING_LABEL"
description="COM_NOTIFLY_DESIGN_SHOW_BRANDING_DESC"
default="1">
				<option	value="1">JYES</option>
				<option	value="0">JNO</option>
			</field>

		</fieldset>

		<fieldset name="behavior">

			<field name="initial_delay" type="number"
label="COM_NOTIFLY_BEHAVIOR_INITIAL_DELAY_LABEL"
description="COM_NOTIFLY_BEHAVIOR_INITIAL_DELAY_DESC"
default="5" />

			<field name="max_bypage" type="number"
label="COM_NOTIFLY_BEHAVIOR_MAX_BYPAGE_LABEL"
description="COM_NOTIFLY_BEHAVIOR_MAX_BYPAGE_DESC"
default="5" />

			<field name="display_time" type="number"
label="COM_NOTIFLY_BEHAVIOR_DISPLAY_TIME_LABEL"
description="COM_NOTIFLY_BEHAVIOR_DISPLAY_TIME_DESC"
default="4" />

			<field name="delay_time" type="number"
label="COM_NOTIFLY_BEHAVIOR_DELAY_TIME_LABEL"
description="COM_NOTIFLY_BEHAVIOR_DELAY_TIME_DESC"
default="12" />
			
			<field name="expire_cookie" type="number"
label="COM_NOTIFLY_BEHAVIOR_EXPIRE_COOKIE_LABEL"
description="COM_NOTIFLY_BEHAVIOR_EXPIRE_COOKIE_DESC"
default="48" />
			
			<field name="wrapper_width" type="text"
label="COM_NOTIFLY_BEHAVIOR_WRAPPER_WIDTH_LABEL"
description="COM_NOTIFLY_BEHAVIOR_WRAPPER_WIDTH_LABEL"
default="300px" />
			
			<!-- <field name="box_position" type="list"
label="COM_NOTIFLY_BEHAVIOR_BOX_POSITION_LABEL"
description="COM_NOTIFLY_BEHAVIOR_BOX_POSITION_DESC"
default="bottom_left">
				<option value="bottom_left">Bottom left</option>
				<option value="bottom_right">Bottom
right</option>
				<option value="top_left">Top left</option>
				<option value="top_right">Top right</option>
				<option value="top_center">Top center</option>
				<option value="bottom_center">Bottom
center</option>
				<option value="bottom_left_horizontal">Bottom left -
Slide In</option>
				<option value="bottom_right_horizontal">Bottom right -
Slide In</option>
				<option value="top_left_horizontal">Top left - Slide
In</option>
				<option value="top_right_horizontal">Top right - Slide
In</option>

			</field>

			<field name="mobile_position" type="list"
label="COM_NOTIFLY_BEHAVIOR_MOBILE_POSITION_LABEL"
description="COM_NOTIFLY_BEHAVIOR_MOBILE_POSITION_LABEL"
default="bottom_left">
				<option value="top">Top</option>
				<option value="bottom">Bottom</option>
			</field> -->



		</fieldset>
	</fields>

</form>
models/forms/event.xml000064400000007611151160724640011033 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<form>
	<fieldset>
		<field 
			name="id" 
			type="text" 
			label="JGLOBAL_FIELD_ID_LABEL"
			description="JGLOBAL_FIELD_ID_DESC" 
			class="readonly" 
			size="10" 
			default="0"
			readonly="true" 
		/>

		<field 
			name="template_id" 
			type="hidden" 
		/>

		<field 
			name="extension_id" 
			type="hidden" 
		/>

		<field 
			name="template"
			type="text"
			label="COM_NOTIFLY_FIELD_TEMPLATE_LABEL"
			description="COM_NOTIFLY_FIELD_TEMPLATE_DESC"
			class="input-xxlarge input-large-text"
			readonly="readonly"
			size="40"
		/>
		
		<field 
			name="title" 
			type="text" 
			label="JGLOBAL_TITLE"
			description="JFIELD_TITLE_DESC"
			class="input-xxlarge input-large-text"
			size="40"
			required="true" 
		/>


		<field 
			name="name" 
			type="text" 
			label="JGLOBAL_NAME"
			description="JFIELD_NAME_DESC"
			class="input-xxlarge input-large-text"
			size="40"
			required="true" 
		/>

		<field 
			name="email" 
			type="email" 
			label="JGLOBAL_EMAIL"
			description="JFIELD_EMAIL_DESC"
			class="input-xxlarge input-large-text"
			size="40"
			required="true" 
		/>

		<field 
			name="url" 
			type="text" 
			readonly="true"
			label="COM_NOTIFLY_FIELD_URL_LABEL"
			description="COM_NOTIFLY_FIELD_URL_DESC"
		/>

		<field 
			name="image_url" 
			type="text" 
			readonly="true"
			label="COM_NOTIFLY_FIELD_IMAGE_URL_LABEL"
			description="COM_NOTIFLY_FIELD_IMAGE_URL_DESC"
		/>


		<field 
			name="ip" 
			type="text" 
			readonly="true"
		/>
		
		<field 
			name="city" 
			type="city" 
			label="COM_NOTIFLY_FIELD_CITY_LABEL"
			description="COM_NOTIFLY_FIELD_CITY_DESC"
		/>
		
		<field 
			name="state" 
			type="state" 
			label="COM_NOTIFLY_FIELD_STATE_LABEL"
			description="COM_NOTIFLY_FIELD_STATE_DESC"
		/>
		
		<field 
			name="country" 
			type="country" 
			label="COM_NOTIFLY_FIELD_COUNTRY_LABEL"
			description="COM_NOTIFLY_FIELD_COUNTRY_DESC"
		/>
		
		<field 
			name="published" 
			type="published" 
			label="COM_NOTIFLY_FIELD_PUBLISHED_LABEL"
			description="COM_NOTIFLY_FIELD_PUBLISHED_DESC"
		/>

		<field 
			name="created" 
			type="text" 
			label="COM_NOTIFLY_FIELD_CREATED_LABEL"
			description="COM_NOTIFLY_FIELD_CREATED_DESC"
			readonly="true"
		/>



		<field 
			name="checked_out" 
			type="hidden" 
			filter="unset" 
		/>

		<field 
			name="checked_out_time" 
			type="hidden" 
			filter="unset" 
		/>

		<field 
			name="publish_up"
			type="calendar"
			label="COM_NOTIFLY_FIELD_PUBLISH_UP_LABEL"
			description="COM_NOTIFLY_FIELD_PUBLISH_UP_DESC"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc" 
		/>

		<field 
			name="publish_down"
			type="calendar"
			label="COM_NOTIFLY_FIELD_PUBLISH_DOWN_LABEL"
			description="COM_NOTIFLY_FIELD_PUBLISH_DOWN_DESC"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc" 
		/>

		<field
			name="version" 
			type="text" 
			label="COM_NOTIFLY_FIELD_VERSION_LABEL" 
			description="COM_NOTIFLY_FIELD_VERSION_DESC"
			size="6" 
			class="readonly"
			readonly="true" 
			filter="unset" 
		/>

		<field 
			name="access" 
			type="accesslevel" 
			label="JFIELD_ACCESS_LABEL"
			description="JFIELD_ACCESS_DESC" 
			size="1" 
		/>

		<field 
			name="hits" 
			type="text" 
			label="JGLOBAL_HITS"
			description="COM_NOTIFLY_FIELD_HITS_DESC" 
			class="readonly" 
			size="6"
			readonly="true" 
			filter="unset" 
		/>

		<field 
			name="attribs" 
			type="text" 
			filter="unset" 
		/>

		<field 
			name="params" 
			type="text" 
			filter="unset" 
		/>

		<field 
			name="language" 
			type="contentlanguage" 
			label="JFIELD_LANGUAGE_LABEL"
			description="COM_NOTIFLY_FIELD_LANGUAGE_DESC"
			>
			<option value="*">JALL</option>
		</field>

		<field 
			name="rules" 
			type="rules" 
			label="JFIELD_RULES_LABEL"
			translate_label="false" 
			filter="rules"
			component="com_notifly" 
			section="article" 
			validate="rules"
		/>

	</fieldset>

</form>
models/forms/filter_events.xml000064400000001011151160724640012547
0ustar00<?xml version="1.0" encoding="utf-8"?>
<form>
	<fields name="filter">
		<field
			name="search"
			type="text"
			label="COM_NOTIFLY_FILTER_SEARCH_LABEL"
			description="COM_NOTIFLY_FILTER_SEARCH_DESC"
			hint="JSEARCH_FILTER"
		/>

		<field name="extension_id" type="plugins"
folder="notifly"
			label="COM_NOTIFLY_FILTER_EXTENSION_LABEL"
			description="COM_NOTIFLY_FILTER_EXTENSION_DESC"
			onchange="this.form.submit();"
			filter="cmd">
			<option value="">COM_NOTIFLY_SHOW_ALL</option>
		</field>
	</fields>
</form>models/forms/filter_template.xml000064400000011233151160724640013065
0ustar00<?xml version="1.0" encoding="utf-8"?>
<form>
	<fields name="filter">
		<field
			name="search"
			type="text"
			label="COM_NOTIFLY_FILTER_SEARCH_LABEL"
			description="COM_NOTIFLY_FILTER_SEARCH_DESC"
			hint="JSEARCH_FILTER"
		/>

		<field
			name="published"
			type="status"
			label="COM_NOTIFLY_FILTER_PUBLISHED"
			description="COM_NOTIFLY_FILTER_PUBLISHED_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_PUBLISHED</option>
		</field>

		<field
			name="category_id"
			type="category"
			label="JOPTION_FILTER_CATEGORY"
			description="JOPTION_FILTER_CATEGORY_DESC"
			multiple="true"
			class="multipleCategories"
			extension="com_notifly"
			onchange="this.form.submit();"
			published="0,1,2"
		/>

		<field
			name="access"
			type="accesslevel"
			label="JOPTION_FILTER_ACCESS"
			description="JOPTION_FILTER_ACCESS_DESC"
			multiple="true"
			class="multipleAccessLevels"
			onchange="this.form.submit();"
		/>

		<field
			name="author_id"
			type="author"
			label="COM_NOTIFLY_FILTER_AUTHOR"
			description="COM_NOTIFLY_FILTER_AUTHOR_DESC"
			multiple="true"
			class="multipleAuthors"
			onchange="this.form.submit();"
		/>

		<field
			name="language"
			type="contentlanguage"
			label="JOPTION_FILTER_LANGUAGE"
			description="JOPTION_FILTER_LANGUAGE_DESC"
			onchange="this.form.submit();"
			>
			<option value="">JOPTION_SELECT_LANGUAGE</option>
			<option value="*">JALL</option>
		</field>

		<field
			name="tag"
			type="tag"
			label="JOPTION_FILTER_TAG"
			description="JOPTION_FILTER_TAG_DESC"
			multiple="true"
			class="multipleTags"
			mode="nested"
			onchange="this.form.submit();"
		/>

		<field
			name="level"
			type="integer"
			label="JOPTION_FILTER_LEVEL"
			description="JOPTION_FILTER_LEVEL_DESC"
			first="1"
			last="10"
			step="1"
			languages="*"
			onchange="this.form.submit();"
			>
			<option
value="">JOPTION_SELECT_MAX_LEVELS</option>
			</field>
		<input type="hidden" name="form_submited"
value="1"/>
	</fields>

	<fields name="list">
		<field
			name="fullordering"
			type="list"
			label="COM_NOTIFLY_LIST_FULL_ORDERING"
			description="COM_NOTIFLY_LIST_FULL_ORDERING_DESC"
			onchange="this.form.submit();"
			default="a.id DESC"
			>
			<option value="">JGLOBAL_SORT_BY</option>
			<option value="a.ordering
ASC">JGRID_HEADING_ORDERING_ASC</option>
			<option value="a.ordering
DESC">JGRID_HEADING_ORDERING_DESC</option>
			<option value="a.state ASC">JSTATUS_ASC</option>
			<option value="a.state DESC">JSTATUS_DESC</option>
			<option value="a.featured
ASC">JFEATURED_ASC</option>
			<option value="a.featured
DESC">JFEATURED_DESC</option>
			<option value="a.title
ASC">JGLOBAL_TITLE_ASC</option>
			<option value="a.title
DESC">JGLOBAL_TITLE_DESC</option>
			<option value="category_title
ASC">JCATEGORY_ASC</option>
			<option value="category_title
DESC">JCATEGORY_DESC</option>
			<option value="a.access
ASC">JGRID_HEADING_ACCESS_ASC</option>
			<option value="a.access
DESC">JGRID_HEADING_ACCESS_DESC</option>
			<option value="association ASC"
requires="associations">JASSOCIATIONS_ASC</option>
			<option value="association DESC"
requires="associations">JASSOCIATIONS_DESC</option>
			<option value="a.created_by
ASC">JAUTHOR_ASC</option>
			<option value="a.created_by
DESC">JAUTHOR_DESC</option>
			<option value="language
ASC">JGRID_HEADING_LANGUAGE_ASC</option>
			<option value="language
DESC">JGRID_HEADING_LANGUAGE_DESC</option>
			<option value="a.created ASC">JDATE_ASC</option>
			<option value="a.created DESC">JDATE_DESC</option>
			<option value="a.modified
ASC">COM_NOTIFLY_MODIFIED_ASC</option>
			<option value="a.modified
DESC">COM_NOTIFLY_MODIFIED_DESC</option>
			<option value="a.publish_up
ASC">COM_NOTIFLY_PUBLISH_UP_ASC</option>
			<option value="a.publish_up
DESC">COM_NOTIFLY_PUBLISH_UP_DESC</option>
			<option value="a.publish_down
ASC">COM_NOTIFLY_PUBLISH_DOWN_ASC</option>
			<option value="a.publish_down
DESC">COM_NOTIFLY_PUBLISH_DOWN_DESC</option>
			<option value="a.hits
ASC">JGLOBAL_HITS_ASC</option>
			<option value="a.hits
DESC">JGLOBAL_HITS_DESC</option>
			<option value="rating_count ASC"
requires="vote">JGLOBAL_VOTES_ASC</option>
			<option value="rating_count DESC"
requires="vote">JGLOBAL_VOTES_DESC</option>
			<option value="rating ASC"
requires="vote">JGLOBAL_RATINGS_ASC</option>
			<option value="rating DESC"
requires="vote">JGLOBAL_RATINGS_DESC</option>
			<option value="a.id
ASC">JGRID_HEADING_ID_ASC</option>
			<option value="a.id
DESC">JGRID_HEADING_ID_DESC</option>
		</field>

		<field
			name="limit"
			type="limitbox"
			label="COM_NOTIFLY_LIST_LIMIT"
			description="COM_NOTIFLY_LIST_LIMIT_DESC"
			class="input-mini"
			default="25"
			onchange="this.form.submit();"
		/>
	</fields>
</form>
models/forms/template.xml000064400000010520151160724640011516
0ustar00<?xml version="1.0" encoding="utf-8"?>
<form>
	<fieldset
addfieldpath="/administrator/components/com_categories/models/fields"
>
		<field 
			name="id" 
			type="text" 
			label="JGLOBAL_FIELD_ID_LABEL"
			description="JGLOBAL_FIELD_ID_DESC" 
			class="readonly" 
			size="10" 
			default="0"
			readonly="true" 
		/>

		<field 
			name="asset_id" 
			type="hidden" 
			filter="unset" 
		/>

		<field
		    name="extension_id"
		    type="sql"
		    label="COM_NOTIFLY_FIELD_EXTENSION_ID_LABEL"
		    readonly="true"
		    query="SELECT extension_id, name FROM `#__extensions` WHERE
`type` = 'plugin' AND `folder` = 'notifly'"
		    key_field="extension_id"
		    value_field="name"
		    required="true"
		    />

		<field 
			name="name" 
			type="text" 
			label="JGLOBAL_TITLE"
			description="JFIELD_TITLE_DESC"
			class="input-xxlarge input-large-text"
			size="40"
			required="true" 
		/>

		<field 
			name="alias" 
			type="text" 
			readonly="true"
			label="COM_NOTIFLY_FIELD_ALIAS_LABEL"
			description="COM_NOTIFLY_FIELD_ALIAS_DESC"
			hint="JFIELD_ALIAS_PLACEHOLDER"
			size="40" 
		/>

		<field 
			name="message" 
			type="textarea"
			label="COM_NOTIFLY_FIELD_MESSAGE_LABEL" 
			description="COM_NOTIFLY_FIELD_MESSAGE_DESC"
			filter="JComponentHelper::filterText"
			buttons="false" 
			height="100"
			rows="3"
			class="input-xxlarge input-large-text"
		/>
		
		<field 
			name="markdown" 
			type="radio"
			label="COM_NOTIFLY_FIELD_MARKDOWN_LABEL" 
			description="COM_NOTIFLY_FIELD_MARKDOWN_DESC"
			class="btn-group"
			>
			<option value="1">JYES</option>
			<option value="0">JNO</option>
		</field>
		
		<field 
			name="image_disable" 
			type="radio"
			label="COM_NOTIFLY_FIELD_IMAGE_DISABLE_LABEL" 
			description="COM_NOTIFLY_FIELD_IMAGE_DISABLE_DESC"
			class="btn-group"
			default="0"
			>
			<option value="1">JYES</option>
			<option value="0">JNO</option>
		</field>

		<field 
			name="avatar" 
			type="radio"
			label="COM_NOTIFLY_FIELD_AVATAR_LABEL" 
			description="COM_NOTIFLY_FIELD_AVATAR_DESC"
			class="btn-group"
			default="1"
			showon="image_disable:0"
			>
			<option value="1">JYES</option>
			<option value="0">JNO</option>
		</field>

		<field 
			name="image_url" 
			type="media" 
			class="input-xlarge"
			label="COM_NOTIFLY_FIELD_IMAGE_URL_LABEL"
			description="COM_NOTIFLY_FIELD_IMAGE_URL_DESC"
			showon="image_disable:0[AND]avatar:0"
		/>

		<field 
			name="state" 
			type="hidden" 
			default="1"
		/>
		
		<field 
			name="created" 
			type="calendar" 
			label="COM_NOTIFLY_FIELD_CREATED_LABEL"
			description="COM_NOTIFLY_FIELD_CREATED_DESC"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc" 
		/>


		<field 
			name="checked_out" 
			type="hidden" 
			filter="unset" 
		/>

		<field 
			name="checked_out_time" 
			type="hidden" 
			filter="unset" 
		/>

		<field 
			name="publish_up"
			type="calendar"
			label="COM_NOTIFLY_FIELD_PUBLISH_UP_LABEL"
			description="COM_NOTIFLY_FIELD_PUBLISH_UP_DESC"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc" 
		/>

		<field 
			name="publish_down"
			type="calendar"
			label="COM_NOTIFLY_FIELD_PUBLISH_DOWN_LABEL"
			description="COM_NOTIFLY_FIELD_PUBLISH_DOWN_DESC"
			translateformat="true"
			showtime="true"
			size="22"
			filter="user_utc" 
		/>

		<field
			name="version" 
			type="text" 
			label="COM_NOTIFLY_FIELD_VERSION_LABEL" 
			description="COM_NOTIFLY_FIELD_VERSION_DESC"
			size="6" 
			class="readonly"
			readonly="true" 
			filter="unset" 
		/>

		<field 
			name="ordering" 
			type="text" 
			label="JFIELD_ORDERING_LABEL"
			description="JFIELD_ORDERING_DESC" 
			size="6"
			default="0" 
		/>

		<field 
			name="access" 
			type="accesslevel" 
			label="JFIELD_ACCESS_LABEL"
			description="JFIELD_ACCESS_DESC" 
			size="1" 
		/>

		<field 
			name="hits" 
			type="text" 
			label="JGLOBAL_HITS"
			description="COM_NOTIFLY_FIELD_HITS_DESC" 
			class="readonly" 
			size="6"
			readonly="true" 
			filter="unset" 
		/>

		<field 
			name="language" 
			type="contentlanguage" 
			label="JFIELD_LANGUAGE_LABEL"
			description="COM_NOTIFLY_FIELD_LANGUAGE_DESC"
			>
			<option value="*">JALL</option>
		</field>

		<field 
			name="rules" 
			type="rules" 
			label="JFIELD_RULES_LABEL"
			translate_label="false" 
			filter="rules"
			component="com_notifly" 
			section="article" 
			validate="rules"
		/>

	</fieldset>

</form>
models/integrations.php000064400000015710151160724640011260
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
use Joomla\Utilities\ArrayHelper;

/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelIntegrations extends JModelList
{
	/**
	 * Constructor.
	 *
	 * @param   array  $config  An optional associative array of configuration
settings.
	 *
	 * @since   1.6
	 * @see     JControllerLegacy
	 */
	public function __construct($config = array())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array(
				'extension_id', 'a.extension_id',
				'name', 'a.name',
				'element', 'a.element',
				'enabled', 'a.enabled',
				'checked_out', 'a.checked_out',
				'checked_out_time', 'a.checked_out_time',
				'state', 'a.state',
				'access', 'a.access', 'access_level',
				'ordering', 'a.ordering',
			);
		}

		parent::__construct($config);
	}

	/**
	 * Method to auto-populate the model state.
	 *
	 * Note. Calling getState in this method will result in recursion.
	 *
	 * @param   string  $ordering   An optional ordering field.
	 * @param   string  $direction  An optional direction (asc|desc).
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function populateState($ordering = 'a.extension_id',
$direction = 'desc')
	{
		$app = JFactory::getApplication();

		// Adjust the context to support modal layouts.
		if ($layout = $app->input->get('layout'))
		{
			$this->context .= '.' . $layout;
		}

		$search = $this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search');
		$this->setState('filter.search', $search);

		$published = $this->getUserStateFromRequest($this->context .
'.filter.published', 'filter_published', '');
		$this->setState('filter.published', $published);

		$formSubmited =
$app->input->post->get('form_submited');

		$access     = $this->getUserStateFromRequest($this->context .
'.filter.access', 'filter_access');

		if ($formSubmited)
		{
			$access = $app->input->post->get('access');
			$this->setState('filter.access', $access);
		}

		// List state information.
		parent::populateState($ordering, $direction);
	}

	/**
	 * Method to get a store id based on model configuration state.
	 *
	 * This is necessary because the model is used by the component and
	 * different modules that might need different sets of data or different
	 * ordering requirements.
	 *
	 * @param   string  $id  A prefix for the store id.
	 *
	 * @return  string  A store id.
	 *
	 * @since   1.6
	 */
	protected function getStoreId($id = '')
	{
		// Compile the store id.
		$id .= ':' . $this->getState('filter.search');
		$id .= ':' .
serialize($this->getState('filter.access'));
		$id .= ':' . $this->getState('filter.published');

		return parent::getStoreId($id);
	}

	/**
	 * Build an SQL query to load the list data.
	 *
	 * @return  JDatabaseQuery
	 *
	 * @since   1.6
	 */
	protected function getListQuery()
	{
		// Create a new query object.
		$db    = $this->getDbo();
		$query = $db->getQuery(true);
		$user  = JFactory::getUser();

		// Select the required fields from the table.
		$query->select(
			$this->getState(
				'list.select',
				'DISTINCT a.extension_id, a.name, a.element, a.enabled,
a.checked_out_time' .
				', a.state, a.access, a.ordering' .
				', a.params, a.custom_data')
		);
		$query->from('#__extensions AS a');

		// Join over the asset groups.
		$query->select('ag.title AS access_level')
			->join('LEFT', '#__viewlevels AS ag ON ag.id =
a.access');

		// Filter by access level.
		$access = $this->getState('filter.access');
		if (is_numeric($access))
		{
			$query->where('a.access = ' . (int) $access);
		}
		elseif (is_array($access))
		{
			$access = ArrayHelper::toInteger($access);
			$access = implode(',', $access);
			$query->where('a.access IN (' . $access . ')');
		}

		// Filter by access level on categories.
		if (!$user->authorise('core.admin'))
		{
			$groups = implode(',', $user->getAuthorisedViewLevels());
			$query->where('a.access IN (' . $groups . ')');
			$query->where('c.access IN (' . $groups . ')');
		}

		// Filter by published state
		$published = $this->getState('filter.published');

		if (is_numeric($published))
		{
			$query->where('a.state = ' . (int) $published);
		}
		elseif ($published === '')
		{
			$query->where('(a.state = 0 OR a.state = 1)');
		}

		// Filter by search in title.
		$search = $this->getState('filter.search');

		if (!empty($search))
		{
			if (stripos($search, 'id:') === 0)
			{
				$query->where('a.extension_id = ' . (int) substr($search,
3));
			}
			else
			{
				$search = $db->quote('%' . str_replace(' ',
'%', $db->escape(trim($search), true) . '%'));
				$query->where('(a.name LIKE ' . $search . ' OR
a.element LIKE ' . $search . ')');
			}
		}

		// Add the list ordering clause.
		$orderCol  = $this->state->get('list.ordering',
'a.extension_id');
		$orderDirn = $this->state->get('list.direction',
'DESC');

		$query->where('a.type = "plugin"');
		$query->where('a.folder = "notifly"');

		$query->order($db->escape($orderCol) . ' ' .
$db->escape($orderDirn));
		// echo $query->__toString();die;
		return $query;
	}

	/**
	 * Method to get a list of articles.
	 * Overridden to add a check for access levels.
	 *
	 * @return  mixed  An array of data items on success, false on failure.
	 *
	 * @since   1.6.1
	 */
	public function getItems()
	{
		$items = parent::getItems();

		if (JFactory::getApplication()->isClient('site'))
		{
			$groups = JFactory::getUser()->getAuthorisedViewLevels();

			foreach (array_keys($items) as $x)
			{
				// Check the access level. Remove articles the user shouldn't see
				if (!in_array($items[$x]->access, $groups))
				{
					unset($items[$x]);
				}
			}
		}

		return $items;
	}

	/**
	 * Method to toggle the enable state of template
	 *
	 * @param   array    $pks    The ids of the items to toggle.
	 * @param   integer  $value  The value to toggle to.
	 *
	 * @return  boolean  True on success.
	 */
	public function enable($pks, $value = 0)
	{
		// Sanitize the ids.
		$pks = (array) $pks;
		$pks = ArrayHelper::toInteger($pks);

		if (empty($pks))
		{
			$this->setError(JText::_('COM_NOTIFLY_NO_ITEM_SELECTED'));

			return false;
		}

		try
		{
			$db = $this->getDbo();
			$query = $db->getQuery(true)
				->update($db->quoteName('#__extensions'))
				->set('enabled = ' . (int) $value)
				->where('extension_id IN (' . implode(',', $pks)
. ')');
			// echo $query->__toString();die;
			$db->setQuery($query);
			$db->execute();

		}
		catch (Exception $e)
		{
			$this->setError($e->getMessage());

			return false;
		}

		$this->cleanCache();

		return true;
	}

	/**
	 * Custom clean the cache of com_content and content modules
	 *
	 * @param   string   $group      The cache group
	 * @param   integer  $client_id  The ID of the client
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function cleanCache($group = null, $client_id = 0)
	{
		parent::cleanCache('com_notifly');
	}
}
models/template.php000064400000023577151160724640010377 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Registry\Registry;
use Joomla\Utilities\ArrayHelper;
use Joomla\String\StringHelper;

JLoader::register('NotiflyHelper', JPATH_ADMINISTRATOR .
'/components/com_notifly/helpers/notifly.php');

/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelTemplate extends JModelAdmin
{
	/**
	 * The prefix to use with controller messages.
	 *
	 * @var    string
	 * @since  1.6
	 */
	protected $text_prefix = 'COM_NOTIFLY';

	/**
	 * The type alias for this content type (for example,
'com_notifly.template').
	 *
	 * @var    string
	 * @since  3.2
	 */
	public $typeAlias = 'com_notifly.template';

	/**
	 * The context used for the associations table
	 *
	 * @var    string
	 * @since  3.4.4
	 */
	protected $associationsContext = 'com_notifly.item';

	/**
	 * Method to test whether a record can be deleted.
	 *
	 * @param   object  $record  A record object.
	 *
	 * @return  boolean  True if allowed to delete the record. Defaults to the
permission set in the component.
	 *
	 * @since   1.6
	 */
	protected function canDelete($record)
	{
		if (!empty($record->id))
		{
			if ($record->state != -2)
			{
				return false;
			}

			return JFactory::getUser()->authorise('core.delete',
'com_notifly.template.' . (int) $record->id);
		}

		return false;
	}

	/**
	 * Method to test whether a record can have its state edited.
	 *
	 * @param   object  $record  A record object.
	 *
	 * @return  boolean  True if allowed to change the state of the record.
Defaults to the permission set in the component.
	 *
	 * @since   1.6
	 */
	protected function canEditState($record)
	{
		$user = JFactory::getUser();

		// Check for existing template.
		if (!empty($record->id))
		{
			return $user->authorise('core.edit.state',
'com_notifly.template.' . (int) $record->id);
		}

		// Default to component settings if neither template nor category known.
		return parent::canEditState($record);
	}

	/**
	 * Prepare and sanitise the table data prior to saving.
	 *
	 * @param   JTable  $table  A JTable object.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function prepareTable($table)
	{
		// Set the publish date to now
		if ($table->state == 1 && (int) $table->publish_up == 0)
		{
			$table->publish_up = JFactory::getDate()->toSql();
		}

		if ($table->state == 1 && intval($table->publish_down) ==
0)
		{
			$table->publish_down = $this->getDbo()->getNullDate();
		}

		// Increment the content version number.
		$table->version++;


	}

	/**
	 * Returns a Table object, always creating it.
	 *
	 * @param   string  $type    The table type to instantiate
	 * @param   string  $prefix  A prefix for the table class name. Optional.
	 * @param   array   $config  Configuration array for model. Optional.
	 *
	 * @return  JTable    A database object
	 */
	public function getTable($type = 'Template', $prefix =
'NotiflyTable', $config = array())
	{
		return JTable::getInstance($type, $prefix, $config);
	}

	/**
	 * Method to get a single record.
	 *
	 * @param   integer  $pk  The id of the primary key.
	 *
	 * @return  mixed  Object on success, false on failure.
	 */
	public function getItem($pk = null)
	{
		if ($item = parent::getItem($pk))
		{
			// Convert the params field to an array.
			$registry = new Registry($item->attribs);
			$item->attribs = $registry->toArray();

		}

		return $item;
	}

	/**
	 * Method to get the record form.
	 *
	 * @param   array    $data      Data for the form.
	 * @param   boolean  $loadData  True if the form is to load its own data
(default case), false if not.
	 *
	 * @return  JForm|boolean  A JForm object on success, false on failure
	 *
	 * @since   1.6
	 */
	public function getForm($data = array(), $loadData = true)
	{
		// Get the form.
		$form = $this->loadForm('com_notifly.template',
'template', array('control' => 'jform',
'load_data' => $loadData));

		if (empty($form))
		{
			return false;
		}

		$jinput = JFactory::getApplication()->input;

		/*
		 * The front end calls this model and uses a_id to avoid id clashes so we
need to check for that first.
		 * The back end uses id so we use that the rest of the time and set it to
0 by default.
		 */
		$id = $jinput->get('a_id', $jinput->get('id',
0));
		$user = JFactory::getUser();

		// Check for existing template.
		// Modify the form based on Edit State access controls.
		if ($id != 0 &&
(!$user->authorise('core.edit.state',
'com_notifly.template.' . (int) $id))
			|| ($id == 0 &&
!$user->authorise('core.edit.state',
'com_notifly')))
		{
			// Disable fields for display.
			$form->setFieldAttribute('ordering', 'disabled',
'true');
			$form->setFieldAttribute('publish_up',
'disabled', 'true');
			$form->setFieldAttribute('publish_down',
'disabled', 'true');
			$form->setFieldAttribute('state', 'disabled',
'true');

			// Disable fields while saving.
			// The controller has already verified this is an template you can edit.
			$form->setFieldAttribute('ordering', 'filter',
'unset');
			$form->setFieldAttribute('publish_up', 'filter',
'unset');
			$form->setFieldAttribute('publish_down',
'filter', 'unset');
			$form->setFieldAttribute('state', 'filter',
'unset');
		}

		return $form;
	}

	/**
	 * Method to get the data that should be injected in the form.
	 *
	 * @return  mixed  The data for the form.
	 *
	 * @since   1.6
	 */
	protected function loadFormData()
	{
		// Check the session for previously entered form data.
		$app  = JFactory::getApplication();
		$data = $app->getUserState('com_notifly.edit.template.data',
array());

		if (empty($data))
		{
			$data = $this->getItem();

			// Pre-select some filters (Status, Category, Language, Access) in edit
form if those have been selected in Article Manager: Articles
			if ($this->getState('template.id') == 0)
			{
				$filters = (array)
$app->getUserState('com_notifly.templates.filter');
				$data->set(
					'state',
					$app->input->getInt(
						'state',
						((isset($filters['published']) &&
$filters['published'] !== '') ?
$filters['published'] : null)
					)
				);
				$data->set('language',
$app->input->getString('language',
(!empty($filters['language']) ? $filters['language'] :
null)));
				$data->set('access',
					$app->input->getInt('access',
(!empty($filters['access']) ? $filters['access'] :
JFactory::getConfig()->get('access')))
				);
			}
		}

		// If there are params fieldsets in the form it will fail with a registry
object
		if (isset($data->params) && $data->params instanceof
Registry)
		{
			$data->params = $data->params->toArray();
		}

		$this->preprocessData('com_notifly.template', $data);

		return $data;
	}

	/**
	 * Method to validate the form data.
	 *
	 * @param   JForm   $form   The form to validate against.
	 * @param   array   $data   The data to validate.
	 * @param   string  $group  The name of the field group to validate.
	 *
	 * @return  array|boolean  Array of filtered data if valid, false
otherwise.
	 *
	 * @see     JFormRule
	 * @see     JFilterInput
	 * @since   3.7.0
	 */
	public function validate($form, $data, $group = null)
	{
		return parent::validate($form, $data, $group);
	}

	/**
	 * Method to save the form data.
	 *
	 * @param   array  $data  The form data.
	 *
	 * @return  boolean  True on success.
	 *
	 * @since   1.6
	 */
	public function save($data)
	{
		$input  = JFactory::getApplication()->input;
		$filter = JFilterInput::getInstance();

		// print_r($data);die;
		// // Automatic handling of alias for empty fields
		if (in_array($input->get('task'), array('apply',
'save', 'save2new')) &&
(!isset($data['id']) || (int) $data['id'] == 0))
		{
			if ($data['alias'] == null)
			{
				if (JFactory::getConfig()->get('unicodeslugs') == 1)
				{
					$data['alias'] =
JFilterOutput::stringURLUnicodeSlug($data['name']);
				}
				else
				{
					$data['alias'] =
JFilterOutput::stringURLSafe($data['name']);
				}

				$table = JTable::getInstance('Template',
'NotiflyTable');

				if ($table->load(array('alias' =>
$data['alias'], 'extension_id' =>
$data['extension_id'])))
				{
					$msg = JText::_('COM_NOTIFLY_SAVE_WARNING');
				}

				list($name, $alias) =
$this->generateNewTitle($data['extension_id'],
$data['alias'], $data['name']);
				$data['alias'] = $alias;
				$data['name'] = $name;

				if (isset($msg))
				{
					JFactory::getApplication()->enqueueMessage($msg,
'warning');
				}
			}
		}

		return parent::save($data);
	}

	/**
	 * Method to change the title & alias.
	 *
	 * @param   integer  $category_id  The id of the category.
	 * @param   string   $alias        The alias.
	 * @param   string   $title        The title.
	 *
	 * @return	array  Contains the modified title and alias.
	 *
	 * @since	1.7
	 */
	protected function generateNewTitle($extension_id, $alias, $title)
	{
		// Alter the title & alias
		$table = $this->getTable();

		while ($table->load(array('alias' => $alias,
'extension_id' => $extension_id)))
		{
			$title = StringHelper::increment($title);
			$alias = StringHelper::increment($alias, 'dash');
			$alias = str_replace("-", "_", $alias);
		}

		return array($title, $alias);
	}

	/**
	 * Custom clean the cache of com_notifly and content modules
	 *
	 * @param   string   $group      The cache group
	 * @param   integer  $client_id  The ID of the client
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function cleanCache($group = null, $client_id = 0)
	{
		parent::cleanCache('com_notifly');
	}

	/**
	 * Void hit function for pagebreak when editing content from frontend
	 *
	 * @return  void
	 *
	 * @since   3.6.0
	 */
	public function hit()
	{
		return;
	}

	/**
	 * Delete #__content_frontpage items if the deleted templates was featured
	 *
	 * @param   object  &$pks  The primary key related to the contents
that was deleted.
	 *
	 * @return  boolean
	 *
	 * @since   3.7.0
	 */
	public function delete(&$pks)
	{
		$return = parent::delete($pks);
		return $return;
	}
}
models/templates.php000064400000016701151160724640010551 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
use Joomla\Utilities\ArrayHelper;

/**
 * Feature model.
 *
 * @since  1.6
 */
class NotiflyModelTemplates extends JModelList
{
	/**
	 * Constructor.
	 *
	 * @param   array  $config  An optional associative array of configuration
settings.
	 *
	 * @since   1.6
	 * @see     JControllerLegacy
	 */
	public function __construct($config = array())
	{
		if (empty($config['filter_fields']))
		{
			$config['filter_fields'] = array(
				'id', 'a.id',
				'extension_id', 'a.extension_id',
				'name', 'a.name',
				'alias', 'a.alias',
				'message', 'a.message',
				'markdown', 'a.markdown',
				'avatar', 'a.avatar',
				'image_disable', 'a.image_disable',
				'image_url', 'a.image_url',
				'language', 'a.language',
				'created', 'a.created',
				'published', 'a.published',
				'state', 'a.state',
				'checked_out', 'a.checked_out',
				'checked_out_time', 'a.checked_out_time',
				'state', 'a.state',
				'access', 'a.access', 'access_level',
				'ordering', 'a.ordering',
			);
		}

		parent::__construct($config);
	}

	/**
	 * Method to auto-populate the model state.
	 *
	 * Note. Calling getState in this method will result in recursion.
	 *
	 * @param   string  $ordering   An optional ordering field.
	 * @param   string  $direction  An optional direction (asc|desc).
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function populateState($ordering = 'a.id', $direction
= 'desc')
	{
		$app = JFactory::getApplication();

		// Adjust the context to support modal layouts.
		if ($layout = $app->input->get('layout'))
		{
			$this->context .= '.' . $layout;
		}

		$search = $this->getUserStateFromRequest($this->context .
'.filter.search', 'filter_search');
		$this->setState('filter.search', $search);

		$published = $this->getUserStateFromRequest($this->context .
'.filter.published', 'filter_published', '');
		$this->setState('filter.published', $published);

		$formSubmited =
$app->input->post->get('form_submited');

		$access     = $this->getUserStateFromRequest($this->context .
'.filter.access', 'filter_access');

		if ($formSubmited)
		{
			$access = $app->input->post->get('access');
			$this->setState('filter.access', $access);
		}

		// List state information.
		parent::populateState($ordering, $direction);
	}

	/**
	 * Method to get a store id based on model configuration state.
	 *
	 * This is necessary because the model is used by the component and
	 * different modules that might need different sets of data or different
	 * ordering requirements.
	 *
	 * @param   string  $id  A prefix for the store id.
	 *
	 * @return  string  A store id.
	 *
	 * @since   1.6
	 */
	protected function getStoreId($id = '')
	{
		// Compile the store id.
		$id .= ':' . $this->getState('filter.search');
		$id .= ':' .
serialize($this->getState('filter.access'));
		$id .= ':' . $this->getState('filter.published');

		return parent::getStoreId($id);
	}

	/**
	 * Build an SQL query to load the list data.
	 *
	 * @return  JDatabaseQuery
	 *
	 * @since   1.6
	 */
	protected function getListQuery()
	{
		// Create a new query object.
		$db    = $this->getDbo();
		$query = $db->getQuery(true);
		$user  = JFactory::getUser();

		// Select the required fields from the table.
		$query->select(
			$this->getState(
				'list.select',
				'DISTINCT a.id, a.extension_id, a.name, a.alias, a.message '
.
				', a.markdown, a.avatar, a.image_disable, a.image_url ' .
				', a.checked_out_time, a.state, a.access, a.ordering' .
				', a.created, a.params')
		);
		$query->from('#__notifly_templates AS a');

		// Join over the extensions.
		$query->select('ex.element AS source')
			->join('LEFT', '#__extensions AS ex ON ex.extension_id
= a.extension_id');
			// ->where('ex.type="plugin" and
ex.folder="notifly"');

		// Join over the asset groups.
		$query->select('ag.title AS access_level')
			->join('LEFT', '#__viewlevels AS ag ON ag.id =
a.access');

		// Filter by access level.
		$access = $this->getState('filter.access');
		if (is_numeric($access))
		{
			$query->where('a.access = ' . (int) $access);
		}
		elseif (is_array($access))
		{
			$access = ArrayHelper::toInteger($access);
			$access = implode(',', $access);
			$query->where('a.access IN (' . $access . ')');
		}

		// Filter by access level on categories.
		if (!$user->authorise('core.admin'))
		{
			$groups = implode(',', $user->getAuthorisedViewLevels());
			$query->where('a.access IN (' . $groups . ')');
			$query->where('c.access IN (' . $groups . ')');
		}

		// show only the items enabled
		$query->where('ex.enabled = 1');

		// Filter by published state
		$published = $this->getState('filter.published');

		if (is_numeric($published))
		{
			$query->where('a.state = ' . (int) $published);
		}
		elseif ($published === '')
		{
			$query->where('(a.state = 0 OR a.state = 1)');
		}

		// Filter by search in title.
		$search = $this->getState('filter.search');

		if (!empty($search))
		{
			if (stripos($search, 'id:') === 0)
			{
				$query->where('a.id = ' . (int) substr($search, 3));
			}
			else
			{
				$search = $db->quote('%' . str_replace(' ',
'%', $db->escape(trim($search), true) . '%'));
				$query->where('(a.name LIKE ' . $search . ' OR
a.alias LIKE ' . $search . ')');
			}
		}

		// Add the list ordering clause.
		$orderCol  = $this->state->get('list.ordering',
'a.id');
		$orderDirn = $this->state->get('list.direction',
'DESC');

		$query->order($db->escape($orderCol) . ' ' .
$db->escape($orderDirn));
		// echo $query->__toString();die;
		return $query;
	}

	/**
	 * Method to get a list of articles.
	 * Overridden to add a check for access levels.
	 *
	 * @return  mixed  An array of data items on success, false on failure.
	 *
	 * @since   1.6.1
	 */
	public function getItems()
	{
		$items = parent::getItems();

		if (JFactory::getApplication()->isClient('site'))
		{
			$groups = JFactory::getUser()->getAuthorisedViewLevels();

			foreach (array_keys($items) as $x)
			{
				// Check the access level. Remove articles the user shouldn't see
				if (!in_array($items[$x]->access, $groups))
				{
					unset($items[$x]);
				}
			}
		}

		return $items;
	}

	/**
	 * Method to toggle the enable state of template
	 *
	 * @param   array    $pks    The ids of the items to toggle.
	 * @param   integer  $value  The value to toggle to.
	 *
	 * @return  boolean  True on success.
	 */
	public function update($pks, $value = 0)
	{
		// Sanitize the ids.
		$pks = (array) $pks;
		$pks = ArrayHelper::toInteger($pks);

		if (empty($pks))
		{
			$this->setError(JText::_('COM_NOTIFLY_NO_ITEM_SELECTED'));

			return false;
		}

		$table = $this->getTable('Template',
'NotiflyTable');

		try
		{
			$db = $this->getDbo();
			$query = $db->getQuery(true)
				->update($db->quoteName('#__notifly_templates'))
				->set('state = ' . (int) $value)
				->where('id IN (' . implode(',', $pks) .
')');
			$db->setQuery($query);
			$db->execute();

		}
		catch (Exception $e)
		{
			$this->setError($e->getMessage());

			return false;
		}

		$this->cleanCache();

		return true;
	}

	/**
	 * Custom clean the cache of com_content and content modules
	 *
	 * @param   string   $group      The cache group
	 * @param   integer  $client_id  The ID of the client
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function cleanCache($group = null, $client_id = 0)
	{
		parent::cleanCache('com_notifly');
	}
}
notifly.php000064400000001252151160724640006747 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
JHtml::_('behavior.tabstate');

if (!JFactory::getUser()->authorise('core.manage',
'com_notifly'))
{
	throw new
JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'),
403);
}

JLoader::register('NotiflyHelper', __DIR__ .
'/helpers/notifly.php');

$controller = JControllerLegacy::getInstance('Notifly');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
notifly.xml000064400000003502151160724640006760 0ustar00<?xml
version="1.0" encoding="utf-8"?>
<extension type="component" version="3.1"
method="upgrade">
	<name>com_notifly</name>
	<author>ThemeXpert</author>
	<creationDate>October 2017</creationDate>
	<copyright>(C) 2010 - 2017 ThemeXpert. All rights
reserved.</copyright>
	<license>GNU General Public License version 2 or later; see
LICENSE.txt</license>
	<authorEmail>info@themexpert.com</authorEmail>
	<authorUrl>www.themexpert.com</authorUrl>
	<version>1.0.0</version>
	<description>COM_NOTIFLY_XML_DESCRIPTION</description>

	<install>
		<sql>
			<file charset="utf8"
driver="mysql">sql/install.mysql.utf8.sql</file>
		</sql>
	</install>
	<uninstall> <!-- Runs on uninstall -->
        <sql>
            <file driver="mysql"
charset="utf8">sql/uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>


	<files folder="site">
		<filename>notifly.php</filename>
	</files>

	<media destination="com_notifly" folder="media">
        <folder>css</folder>
        <folder>fonts</folder>
        <folder>images</folder>
        <folder>js</folder>
        <folder>less</folder>
    </media>
	
	<languages folder="site">
		<language
tag="en-GB">language/en-GB.com_notifly.ini</language>
	</languages>
	
	<administration>
		<menu img="class:notifly">com_notifly</menu>
		<files folder="admin">
			<filename>access.xml</filename>
			<filename>config.xml</filename>
			<filename>notifly.php</filename>
			<filename>controller.php</filename>
			<folder>controllers</folder>
			<folder>helpers</folder>
			<folder>models</folder>
			<folder>sql</folder>
			<folder>tables</folder>
			<folder>vendor</folder>
			<folder>views</folder>
		</files>
		<languages folder="admin">
			<language
tag="en-GB">language/en-GB.com_notifly.ini</language>
			<language
tag="en-GB">language/en-GB.com_notifly.sys.ini</language>
		</languages>
	</administration>
</extension>


sql/install.mysql.utf8.sql000064400000006625151160724640011602 0ustar00--
-- Table structure for table `#__notifly_templates`
--

CREATE TABLE IF NOT EXISTS `#__notifly_templates` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `asset_id` int(11) NOT NULL,
  `extension_id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL DEFAULT '',
  `alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
DEFAULT '',
  `message` text,
  `markdown` tinyint(3) NOT NULL DEFAULT 0,
  `avatar` tinyint(3) NOT NULL DEFAULT 1,
  `image_disable` tinyint(3) NOT NULL DEFAULT 0,
  `image_url` varchar(255) DEFAULT NULL,
  `state` TINYINT NULL DEFAULT NULL,
  `published` tinyint(1) NOT NULL DEFAULT 0,
  `checked_out` int(10) unsigned NOT NULL DEFAULT 0,
  `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00
00:00:00',
  `ordering` int(11) NOT NULL DEFAULT 0,
  `attribs` text NOT NULL,
  `params` text NOT NULL,
  `access` int(10) unsigned NOT NULL DEFAULT 0,
  `language` char(7) NOT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable
linkages to external data sets.',
  `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `version` int(10) unsigned NOT NULL DEFAULT 1,
  `hits` int(10) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_access` (`access`),
  KEY `idx_checkout` (`checked_out`),
  KEY `idx_state` (`published`),
  KEY `idx_language` (`language`),
  KEY `idx_xreference` (`xreference`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;

--
-- Table structure for table `#__notifly_events`
--

CREATE TABLE IF NOT EXISTS `#__notifly_events` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `template_id` int(11) NOT NULL,
  `extension_id` int(11) NOT NULL,
  `url` varchar(255) NOT NULL DEFAULT '',
  `image_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT
NULL DEFAULT '',
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL
DEFAULT '',
  `name` varchar(255) NOT NULL DEFAULT '',
  `email` varchar(255) NOT NULL DEFAULT '',
  `ip` varchar(255) NOT NULL DEFAULT '',
  `city` varchar(255) DEFAULT NULL,
  `state` varchar(100) DEFAULT NULL,
  `country` varchar(255) NOT NULL DEFAULT '',
  `published` tinyint(1) NOT NULL DEFAULT 0,
  `checked_out` int(10) unsigned NOT NULL DEFAULT 0,
  `checked_out_time` datetime NOT NULL DEFAULT '0000-00-00
00:00:00',
  `attribs` text NOT NULL,
  `params` text NOT NULL,
  `access` int(10) unsigned NOT NULL DEFAULT 0,
  `language` char(7) NOT NULL,
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `xreference` varchar(50) NOT NULL COMMENT 'A reference to enable
linkages to external data sets.',
  `publish_up` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `publish_down` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `version` int(10) unsigned NOT NULL DEFAULT 1,
  `hits` int(10) unsigned NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_access` (`access`),
  KEY `idx_checkout` (`checked_out`),
  KEY `idx_state` (`published`),
  KEY `idx_language` (`language`),
  KEY `idx_xreference` (`xreference`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS `#__notifly_logs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `view` int(11) NOT NULL,
  `click` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
sql/uninstall.mysql.utf8.sql000064400000000134151160724640012132 0ustar00--
DROP TABLE IF EXISTS `#__notifly_templates`;
-- DROP TABLE IF EXISTS
`#__notifly_events`;tables/event.php000064400000001105151160724640007653
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Featured Table class.
 *
 * @since  1.6
 */
class NotiflyTableEvent extends JTable
{
	/**
	 * Constructor
	 *
	 * @param   JDatabaseDriver  &$db  Database connector object
	 *
	 * @since   1.6
	 */
	public function __construct(&$db)
	{
		parent::__construct('#__notifly_events', 'id', $db);
	}
}
tables/integration.php000064400000001120151160724640011052 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Featured Table class.
 *
 * @since  1.6
 */
class NotiflyTableIntegration extends JTable
{
	/**
	 * Constructor
	 *
	 * @param   JDatabaseDriver  &$db  Database connector object
	 *
	 * @since   1.6
	 */
	public function __construct(&$db)
	{
		parent::__construct('#__notifly_integration', 'id',
$db);
	}
}
tables/template.php000064400000001113151160724640010344 0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Featured Table class.
 *
 * @since  1.6
 */
class NotiflyTableTemplate extends JTable
{
	/**
	 * Constructor
	 *
	 * @param   JDatabaseDriver  &$db  Database connector object
	 *
	 * @since   1.6
	 */
	public function __construct(&$db)
	{
		parent::__construct('#__notifly_templates', 'id',
$db);
	}
}
vendor/autoload.php000064400000000262151160724640010370 0ustar00<?php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInite0401e0cf23104da8b9f00dbd98b4070::getLoader();
vendor/composer/autoload_classmap.php000064400000000223151160724640014077
0ustar00<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
);
vendor/composer/autoload_namespaces.php000064400000000325151160724640014416
0ustar00<?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Mustache' => array($vendorDir .
'/mustache/mustache/src'),
);
vendor/composer/autoload_psr4.php000064400000000217151160724640013167
0ustar00<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
);
vendor/composer/autoload_real.php000064400000003342151160724640013224
0ustar00<?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInite0401e0cf23104da8b9f00dbd98b4070
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

       
spl_autoload_register(array('ComposerAutoloaderInite0401e0cf23104da8b9f00dbd98b4070',
'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader();
       
spl_autoload_unregister(array('ComposerAutoloaderInite0401e0cf23104da8b9f00dbd98b4070',
'loadClassLoader'));

        $useStaticLoader = PHP_VERSION_ID >= 50600 &&
!defined('HHVM_VERSION') &&
(!function_exists('zend_loader_file_encoded') ||
!zend_loader_file_encoded());
        if ($useStaticLoader) {
            require_once __DIR__ . '/autoload_static.php';

           
call_user_func(\Composer\Autoload\ComposerStaticInite0401e0cf23104da8b9f00dbd98b4070::getInitializer($loader));
        } else {
            $map = require __DIR__ . '/autoload_namespaces.php';
            foreach ($map as $namespace => $path) {
                $loader->set($namespace, $path);
            }

            $map = require __DIR__ . '/autoload_psr4.php';
            foreach ($map as $namespace => $path) {
                $loader->setPsr4($namespace, $path);
            }

            $classMap = require __DIR__ .
'/autoload_classmap.php';
            if ($classMap) {
                $loader->addClassMap($classMap);
            }
        }

        $loader->register(true);

        return $loader;
    }
}
vendor/composer/autoload_static.php000064400000001200151160724640013557
0ustar00<?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInite0401e0cf23104da8b9f00dbd98b4070
{
    public static $prefixesPsr0 = array (
        'M' => 
        array (
            'Mustache' => 
            array (
                0 => __DIR__ . '/..' .
'/mustache/mustache/src',
            ),
        ),
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixesPsr0 =
ComposerStaticInite0401e0cf23104da8b9f00dbd98b4070::$prefixesPsr0;

        }, null, ClassLoader::class);
    }
}
vendor/composer/ClassLoader.php000064400000032223151160724640012605
0ustar00<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component',
__DIR__.'/component');
 *     $loader->add('Symfony',          
__DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for
instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @see    http://www.php-fig.org/psr/psr-0/
 * @see    http://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    // PSR-4
    private $prefixLengthsPsr4 = array();
    private $prefixDirsPsr4 = array();
    private $fallbackDirsPsr4 = array();

    // PSR-0
    private $prefixesPsr0 = array();
    private $fallbackDirsPsr0 = array();

    private $useIncludePath = false;
    private $classMap = array();
    private $classMapAuthoritative = false;
    private $missingClasses = array();
    private $apcuPrefix;

    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge',
$this->prefixesPsr0);
        }

        return array();
    }

    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param array $classMap Class to filename map
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap,
$classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string       $prefix  The prefix
     * @param array|string $paths   The PSR-0 root directories
     * @param bool         $prepend Whether to prepend the directories
     */
    public function add($prefix, $paths, $prepend = false)
    {
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    (array) $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    (array) $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = (array) $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                (array) $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                (array) $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this
namespace.
     *
     * @param string       $prefix  The prefix/namespace, with trailing
'\\'
     * @param array|string $paths   The PSR-4 base directories
     * @param bool         $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    (array) $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    (array) $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4
prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                (array) $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                (array) $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string       $prefix The prefix
     * @param array|string $paths  The PSR-0 base directories
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string       $prefix The prefix/namespace, with trailing
'\\'
     * @param array|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4
prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to
check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the
extension is enabled.
     *
     * @param string|null $apcuPrefix
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch')
&& filter_var(ini_get('apc.enabled'),
FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true,
$prepend);
    }

    /**
     * Unregisters this instance as an autoloader.
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return bool|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            includeFile($file);

            return true;
        }
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative ||
isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class,
'.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\',
DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\'))
{
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR .
substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR .
$logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_',
DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_',
DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs)
{
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR
. $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR .
$logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file =
stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }
}

/**
 * Scope isolated include.
 *
 * Prevents access to $this/self from included files.
 */
function includeFile($file)
{
    include $file;
}
vendor/composer/installed.json000064400000002776151160724640012564
0ustar00[
    {
        "name": "mustache/mustache",
        "version": "v2.12.0",
        "version_normalized": "2.12.0.0",
        "source": {
            "type": "git",
            "url":
"https://github.com/bobthecow/mustache.php.git",
            "reference":
"fe8fe72e9d580591854de404cc59a1b83ca4d19e"
        },
        "dist": {
            "type": "zip",
            "url":
"https://api.github.com/repos/bobthecow/mustache.php/zipball/fe8fe72e9d580591854de404cc59a1b83ca4d19e",
            "reference":
"fe8fe72e9d580591854de404cc59a1b83ca4d19e",
            "shasum": ""
        },
        "require": {
            "php": ">=5.2.4"
        },
        "require-dev": {
            "friendsofphp/php-cs-fixer": "~1.11",
            "phpunit/phpunit": "~3.7|~4.0|~5.0"
        },
        "time": "2017-07-11T12:54:05+00:00",
        "type": "library",
        "installation-source": "dist",
        "autoload": {
            "psr-0": {
                "Mustache": "src/"
            }
        },
        "notification-url":
"https://packagist.org/downloads/",
        "license": [
            "MIT"
        ],
        "authors": [
            {
                "name": "Justin Hileman",
                "email": "justin@justinhileman.info",
                "homepage": "http://justinhileman.com"
            }
        ],
        "description": "A Mustache implementation in
PHP.",
        "homepage":
"https://github.com/bobthecow/mustache.php",
        "keywords": [
            "mustache",
            "templating"
        ]
    }
]
vendor/composer/LICENSE000064400000002056151160724640010706 0ustar00
Copyright (c) Nils Adermann, Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a
copy
of this software and associated documentation files (the
"Software"), to deal
in the Software without restriction, including without limitation the
rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

vendor/mustache/mustache/bin/build_bootstrap.php000064400000012473151160724640016155
0ustar00#!/usr/bin/env php
<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2015 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A shell script to create a single-file class cache of the entire
Mustache
 * library.
 *
 *     $ bin/build_bootstrap.php
 *
 * ... will create a `mustache.php` bootstrap file in the project
directory,
 * containing all Mustache library classes. This file can then be included
in
 * your project, rather than requiring the Mustache Autoloader.
 */
$baseDir = realpath(dirname(__FILE__) . '/..');

require $baseDir . '/src/Mustache/Autoloader.php';
Mustache_Autoloader::register();

// delete the old file
$file = $baseDir . '/mustache.php';
if (file_exists($file)) {
    unlink($file);
}

// and load the new one
SymfonyClassCollectionLoader::load(array(
    'Mustache_Engine',
    'Mustache_Cache',
    'Mustache_Cache_AbstractCache',
    'Mustache_Cache_FilesystemCache',
    'Mustache_Cache_NoopCache',
    'Mustache_Compiler',
    'Mustache_Context',
    'Mustache_Exception',
    'Mustache_Exception_InvalidArgumentException',
    'Mustache_Exception_LogicException',
    'Mustache_Exception_RuntimeException',
    'Mustache_Exception_SyntaxException',
    'Mustache_Exception_UnknownFilterException',
    'Mustache_Exception_UnknownHelperException',
    'Mustache_Exception_UnknownTemplateException',
    'Mustache_HelperCollection',
    'Mustache_LambdaHelper',
    'Mustache_Loader',
    'Mustache_Loader_ArrayLoader',
    'Mustache_Loader_CascadingLoader',
    'Mustache_Loader_FilesystemLoader',
    'Mustache_Loader_InlineLoader',
    'Mustache_Loader_MutableLoader',
    'Mustache_Loader_StringLoader',
    'Mustache_Logger',
    'Mustache_Logger_AbstractLogger',
    'Mustache_Logger_StreamLogger',
    'Mustache_Parser',
    'Mustache_Template',
    'Mustache_Tokenizer',
), dirname($file), basename($file, '.php'));

/**
 * SymfonyClassCollectionLoader.
 *
 * Based heavily on the Symfony ClassCollectionLoader component, with all
 * the unnecessary bits removed.
 *
 * @license http://www.opensource.org/licenses/MIT
 * @author Fabien Potencier <fabien@symfony.com>
 */
class SymfonyClassCollectionLoader
{
    private static $loaded;

    const HEADER = <<<'EOS'
<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-%d Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
EOS;

    /**
     * Loads a list of classes and caches them in one big file.
     *
     * @param array  $classes   An array of classes to load
     * @param string $cacheDir  A cache directory
     * @param string $name      The cache name prefix
     * @param string $extension File extension of the resulting file
     *
     * @throws InvalidArgumentException When class can't be loaded
     */
    public static function load(array $classes, $cacheDir, $name,
$extension = '.php')
    {
        // each $name can only be loaded once per PHP process
        if (isset(self::$loaded[$name])) {
            return;
        }

        self::$loaded[$name] = true;

        $content = '';
        foreach ($classes as $class) {
            if (!class_exists($class) && !interface_exists($class)
&& (!function_exists('trait_exists') ||
!trait_exists($class))) {
                throw new InvalidArgumentException(sprintf('Unable to
load class "%s"', $class));
            }

            $r = new ReflectionClass($class);
            $content .= preg_replace(array('/^\s*<\?php/',
'/\?>\s*$/'), '',
file_get_contents($r->getFileName()));
        }

        $cache  = $cacheDir . '/' . $name . $extension;
        $header = sprintf(self::HEADER, strftime('%Y'));
        self::writeCacheFile($cache, $header .
substr(self::stripComments('<?php ' . $content), 5));
    }

    /**
     * Writes a cache file.
     *
     * @param string $file    Filename
     * @param string $content Temporary file content
     *
     * @throws RuntimeException when a cache file cannot be written
     */
    private static function writeCacheFile($file, $content)
    {
        $tmpFile = tempnam(dirname($file), basename($file));
        if (false !== @file_put_contents($tmpFile, $content) &&
@rename($tmpFile, $file)) {
            chmod($file, 0666 & ~umask());

            return;
        }

        throw new RuntimeException(sprintf('Failed to write cache file
"%s".', $file));
    }

    /**
     * Removes comments from a PHP source string.
     *
     * We don't use the PHP php_strip_whitespace() function
     * as we want the content to be readable and well-formatted.
     *
     * @param string $source A PHP string
     *
     * @return string The PHP string with the comments removed
     */
    private static function stripComments($source)
    {
        if (!function_exists('token_get_all')) {
            return $source;
        }

        $output = '';
        foreach (token_get_all($source) as $token) {
            if (is_string($token)) {
                $output .= $token;
            } elseif (!in_array($token[0], array(T_COMMENT,
T_DOC_COMMENT))) {
                $output .= $token[1];
            }
        }

        // replace multiple new lines with a single newline
        $output = preg_replace(array('/\s+$/Sm',
'/\n+/S'), "\n", $output);

        return $output;
    }
}
vendor/mustache/mustache/composer.json000064400000001221151160724640014207
0ustar00{
    "name": "mustache/mustache",
    "description": "A Mustache implementation in PHP.",
    "keywords": ["templating", "mustache"],
    "homepage":
"https://github.com/bobthecow/mustache.php",
    "type": "library",
    "license": "MIT",
    "authors": [
        {
            "name": "Justin Hileman",
            "email": "justin@justinhileman.info",
            "homepage": "http://justinhileman.com"
        }
    ],
    "require": {
        "php": ">=5.2.4"
    },
    "require-dev": {
        "phpunit/phpunit": "~3.7|~4.0|~5.0",
        "friendsofphp/php-cs-fixer": "~1.11"
    },
    "autoload": {
        "psr-0": { "Mustache": "src/" }
    }
}
vendor/mustache/mustache/CONTRIBUTING.md000064400000003467151160724640013734
0ustar00# Contributions welcome!


### Here's a quick guide:

 1. [Fork the repo on GitHub](https://github.com/bobthecow/mustache.php).

 2. Update submodules: `git submodule update --init`

 3. Run the test suite. We only take pull requests with passing tests, and
it's great to know that you have a clean slate. Make sure you have
PHPUnit 3.5+, then run `phpunit` from the project directory.

 4. Add tests for your change. Only refactoring and documentation changes
require no new tests. If you are adding functionality or fixing a bug, add
a test!

 5. Make the tests pass.

 6. Push your fork to GitHub and submit a pull request against the `dev`
branch.


### You can do some things to increase the chance that your pull request is
accepted the first time:

 * Submit one pull request per fix or feature.
 * To help with that, do all your work in a feature branch (e.g.
`feature/my-alsome-feature`).
 * Follow the conventions you see used in the project.
 * Use `phpcs --standard=PSR2` to check your changes against the coding
standard.
 * Write tests that fail without your code, and pass with it.
 * Don't bump version numbers. Those will be updated — per
[semver](http://semver.org) — once your change is merged into `master`.
 * Update any documentation: docblocks, README, examples, etc.
 * ... Don't update the wiki until your change is merged and released,
but make a note in your pull request so we don't forget.


### Mustache.php follows the PSR-* coding standards:

 * [PSR-0: Class and file naming
conventions](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md)
 * [PSR-1: Basic coding
standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
 * [PSR-2: Coding style
guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
vendor/mustache/mustache/LICENSE000064400000002076151160724640012503
0ustar00The MIT License (MIT)

Copyright (c) 2010-2015 Justin Hileman

Permission is hereby granted, free of charge, to any person obtaining a
copy
of this software and associated documentation files (the
"Software"), to deal
in the Software without restriction, including without limitation the
rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE
OR OTHER DEALINGS IN THE SOFTWARE.
vendor/mustache/mustache/phpunit.xml.dist000064400000001046151160724640014645
0ustar00<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false" colors="true"
bootstrap="./test/bootstrap.php">
	<testsuite name="Mustache">
		<directory suffix="Test.php">./test</directory>
		<exclude>./test/Mustache/Test/FiveThree</exclude>
	</testsuite>

	<testsuite name="Mustache FiveThree">
		<directory suffix="Test.php" phpVersion="5.3.0"
phpVersionOperator=">=">./test/Mustache/Test/FiveThree</directory>
	</testsuite>

	<filter>
		<whitelist>
			<directory
suffix=".php">./src/Mustache</directory>
		</whitelist>
	</filter>
</phpunit>vendor/mustache/mustache/README.md000064400000003402151160724640012747
0ustar00Mustache.php
============

A [Mustache](http://mustache.github.com/) implementation in PHP.

[![Package
version](http://img.shields.io/packagist/v/mustache/mustache.svg?style=flat-square)](https://packagist.org/packages/mustache/mustache)
[![Build
status](http://img.shields.io/travis/bobthecow/mustache.php/dev.svg?style=flat-square)](http://travis-ci.org/bobthecow/mustache.php)
[![StyleCI](https://styleci.io/repos/569670/shield)](https://styleci.io/repos/569670)
[![Monthly
downloads](http://img.shields.io/packagist/dm/mustache/mustache.svg?style=flat-square)](https://packagist.org/packages/mustache/mustache)


Usage
-----

A quick example:

```php
<?php
$m = new Mustache_Engine;
echo $m->render('Hello {{planet}}', array('planet'
=> 'World!')); // "Hello World!"
```


And a more in-depth example -- this is the canonical Mustache template:

```html+jinja
Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}
```


Create a view "context" object -- which could also be an
associative array, but those don't do functions quite as well:

```php
<?php
class Chris {
    public $name  = "Chris";
    public $value = 10000;

    public function taxed_value() {
        return $this->value - ($this->value * 0.4);
    }

    public $in_ca = true;
}
```


And render it:

```php
<?php
$m = new Mustache_Engine;
$chris = new Chris;
echo $m->render($template, $chris);
```


And That's Not All!
-------------------

Read [the Mustache.php
documentation](https://github.com/bobthecow/mustache.php/wiki/Home) for
more information.


See Also
--------

 * [Readme for the Ruby Mustache
implementation](http://github.com/defunkt/mustache/blob/master/README.md).
 * [mustache(5)](http://mustache.github.com/mustache.5.html) man page.
vendor/mustache/mustache/src/Mustache/Autoloader.php000064400000004031151160724640016637
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache class autoloader.
 */
class Mustache_Autoloader
{
    private $baseDir;

    /**
     * An array where the key is the baseDir and the key is an instance of
this
     * class.
     *
     * @var array
     */
    private static $instances;

    /**
     * Autoloader constructor.
     *
     * @param string $baseDir Mustache library base directory (default:
dirname(__FILE__).'/..')
     */
    public function __construct($baseDir = null)
    {
        if ($baseDir === null) {
            $baseDir = dirname(__FILE__) . '/..';
        }

        // realpath doesn't always work, for example, with stream URIs
        $realDir = realpath($baseDir);
        if (is_dir($realDir)) {
            $this->baseDir = $realDir;
        } else {
            $this->baseDir = $baseDir;
        }
    }

    /**
     * Register a new instance as an SPL autoloader.
     *
     * @param string $baseDir Mustache library base directory (default:
dirname(__FILE__).'/..')
     *
     * @return Mustache_Autoloader Registered Autoloader instance
     */
    public static function register($baseDir = null)
    {
        $key = $baseDir ? $baseDir : 0;

        if (!isset(self::$instances[$key])) {
            self::$instances[$key] = new self($baseDir);
        }

        $loader = self::$instances[$key];
        spl_autoload_register(array($loader, 'autoload'));

        return $loader;
    }

    /**
     * Autoload Mustache classes.
     *
     * @param string $class
     */
    public function autoload($class)
    {
        if ($class[0] === '\\') {
            $class = substr($class, 1);
        }

        if (strpos($class, 'Mustache') !== 0) {
            return;
        }

        $file = sprintf('%s/%s.php', $this->baseDir,
str_replace('_', '/', $class));
        if (is_file($file)) {
            require $file;
        }
    }
}
vendor/mustache/mustache/src/Mustache/Cache/AbstractCache.php000064400000002741151160724640020240
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Abstract Mustache Cache class.
 *
 * Provides logging support to child implementations.
 *
 * @abstract
 */
abstract class Mustache_Cache_AbstractCache implements Mustache_Cache
{
    private $logger = null;

    /**
     * Get the current logger instance.
     *
     * @return Mustache_Logger|Psr\Log\LoggerInterface
     */
    public function getLogger()
    {
        return $this->logger;
    }

    /**
     * Set a logger instance.
     *
     * @param Mustache_Logger|Psr\Log\LoggerInterface $logger
     */
    public function setLogger($logger = null)
    {
        if ($logger !== null && !($logger instanceof
Mustache_Logger || is_a($logger, 'Psr\\Log\\LoggerInterface'))) {
            throw new
Mustache_Exception_InvalidArgumentException('Expected an instance of
Mustache_Logger or Psr\\Log\\LoggerInterface.');
        }

        $this->logger = $logger;
    }

    /**
     * Add a log record if logging is enabled.
     *
     * @param int    $level   The logging level
     * @param string $message The log message
     * @param array  $context The log context
     */
    protected function log($level, $message, array $context = array())
    {
        if (isset($this->logger)) {
            $this->logger->log($level, $message, $context);
        }
    }
}
vendor/mustache/mustache/src/Mustache/Cache/FilesystemCache.php000064400000010550151160724640020616
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Cache filesystem implementation.
 *
 * A FilesystemCache instance caches Mustache Template classes from the
filesystem by name:
 *
 *     $cache = new
Mustache_Cache_FilesystemCache(dirname(__FILE__).'/cache');
 *     $cache->cache($className, $compiledSource);
 *
 * The FilesystemCache benefits from any opcode caching that may be setup
in your environment. So do that, k?
 */
class Mustache_Cache_FilesystemCache extends Mustache_Cache_AbstractCache
{
    private $baseDir;
    private $fileMode;

    /**
     * Filesystem cache constructor.
     *
     * @param string $baseDir  Directory for compiled templates
     * @param int    $fileMode Override default permissions for cache
files. Defaults to using the system-defined umask
     */
    public function __construct($baseDir, $fileMode = null)
    {
        $this->baseDir = $baseDir;
        $this->fileMode = $fileMode;
    }

    /**
     * Load the class from cache using `require_once`.
     *
     * @param string $key
     *
     * @return bool
     */
    public function load($key)
    {
        $fileName = $this->getCacheFilename($key);
        if (!is_file($fileName)) {
            return false;
        }

        require_once $fileName;

        return true;
    }

    /**
     * Cache and load the compiled class.
     *
     * @param string $key
     * @param string $value
     */
    public function cache($key, $value)
    {
        $fileName = $this->getCacheFilename($key);

        $this->log(
            Mustache_Logger::DEBUG,
            'Writing to template cache: "{fileName}"',
            array('fileName' => $fileName)
        );

        $this->writeFile($fileName, $value);
        $this->load($key);
    }

    /**
     * Build the cache filename.
     * Subclasses should override for custom cache directory structures.
     *
     * @param string $name
     *
     * @return string
     */
    protected function getCacheFilename($name)
    {
        return sprintf('%s/%s.php', $this->baseDir, $name);
    }

    /**
     * Create cache directory.
     *
     * @throws Mustache_Exception_RuntimeException If unable to create
directory
     *
     * @param string $fileName
     *
     * @return string
     */
    private function buildDirectoryForFilename($fileName)
    {
        $dirName = dirname($fileName);
        if (!is_dir($dirName)) {
            $this->log(
                Mustache_Logger::INFO,
                'Creating Mustache template cache directory:
"{dirName}"',
                array('dirName' => $dirName)
            );

            @mkdir($dirName, 0777, true);
            // @codeCoverageIgnoreStart
            if (!is_dir($dirName)) {
                throw new
Mustache_Exception_RuntimeException(sprintf('Failed to create cache
directory "%s".', $dirName));
            }
            // @codeCoverageIgnoreEnd
        }

        return $dirName;
    }

    /**
     * Write cache file.
     *
     * @throws Mustache_Exception_RuntimeException If unable to write file
     *
     * @param string $fileName
     * @param string $value
     */
    private function writeFile($fileName, $value)
    {
        $dirName = $this->buildDirectoryForFilename($fileName);

        $this->log(
            Mustache_Logger::DEBUG,
            'Caching compiled template to
"{fileName}"',
            array('fileName' => $fileName)
        );

        $tempFile = tempnam($dirName, basename($fileName));
        if (false !== @file_put_contents($tempFile, $value)) {
            if (@rename($tempFile, $fileName)) {
                $mode = isset($this->fileMode) ? $this->fileMode :
(0666 & ~umask());
                @chmod($fileName, $mode);

                return;
            }

            // @codeCoverageIgnoreStart
            $this->log(
                Mustache_Logger::ERROR,
                'Unable to rename Mustache temp cache file:
"{tempName}" -> "{fileName}"',
                array('tempName' => $tempFile,
'fileName' => $fileName)
            );
            // @codeCoverageIgnoreEnd
        }

        // @codeCoverageIgnoreStart
        throw new Mustache_Exception_RuntimeException(sprintf('Failed
to write cache file "%s".', $fileName));
        // @codeCoverageIgnoreEnd
    }
}
vendor/mustache/mustache/src/Mustache/Cache/NoopCache.php000064400000002101151160724640017376
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Cache in-memory implementation.
 *
 * The in-memory cache is used for uncached lambda section templates.
It's also useful during development, but is not
 * recommended for production use.
 */
class Mustache_Cache_NoopCache extends Mustache_Cache_AbstractCache
{
    /**
     * Loads nothing. Move along.
     *
     * @param string $key
     *
     * @return bool
     */
    public function load($key)
    {
        return false;
    }

    /**
     * Loads the compiled Mustache Template class without caching.
     *
     * @param string $key
     * @param string $value
     */
    public function cache($key, $value)
    {
        $this->log(
            Mustache_Logger::WARNING,
            'Template cache disabled, evaluating
"{className}" class at runtime',
            array('className' => $key)
        );
        eval('?>' . $value);
    }
}
vendor/mustache/mustache/src/Mustache/Cache.php000064400000001377151160724640015555
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Cache interface.
 *
 * Interface for caching and loading Mustache_Template classes
 * generated by the Mustache_Compiler.
 */
interface Mustache_Cache
{
    /**
     * Load a compiled Mustache_Template class from cache.
     *
     * @param string $key
     *
     * @return bool indicates successfully class load
     */
    public function load($key);

    /**
     * Cache and load a compiled Mustache_Template class.
     *
     * @param string $key
     * @param string $value
     */
    public function cache($key, $value);
}
vendor/mustache/mustache/src/Mustache/Compiler.php000064400000054174151160724640016327
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Compiler class.
 *
 * This class is responsible for turning a Mustache token parse tree into
normal PHP source code.
 */
class Mustache_Compiler
{
    private $pragmas;
    private $defaultPragmas = array();
    private $sections;
    private $blocks;
    private $source;
    private $indentNextLine;
    private $customEscape;
    private $entityFlags;
    private $charset;
    private $strictCallables;

    /**
     * Compile a Mustache token parse tree into PHP source code.
     *
     * @param string $source          Mustache Template source code
     * @param string $tree            Parse tree of Mustache tokens
     * @param string $name            Mustache Template class name
     * @param bool   $customEscape    (default: false)
     * @param string $charset         (default: 'UTF-8')
     * @param bool   $strictCallables (default: false)
     * @param int    $entityFlags     (default: ENT_COMPAT)
     *
     * @return string Generated PHP source code
     */
    public function compile($source, array $tree, $name, $customEscape =
false, $charset = 'UTF-8', $strictCallables = false, $entityFlags
= ENT_COMPAT)
    {
        $this->pragmas         = $this->defaultPragmas;
        $this->sections        = array();
        $this->blocks          = array();
        $this->source          = $source;
        $this->indentNextLine  = true;
        $this->customEscape    = $customEscape;
        $this->entityFlags     = $entityFlags;
        $this->charset         = $charset;
        $this->strictCallables = $strictCallables;

        return $this->writeCode($tree, $name);
    }

    /**
     * Enable pragmas across all templates, regardless of the presence of
pragma
     * tags in the individual templates.
     *
     * @internal Users should set global pragmas in Mustache_Engine, not
here :)
     *
     * @param string[] $pragmas
     */
    public function setPragmas(array $pragmas)
    {
        $this->pragmas = array();
        foreach ($pragmas as $pragma) {
            $this->pragmas[$pragma] = true;
        }
        $this->defaultPragmas = $this->pragmas;
    }

    /**
     * Helper function for walking the Mustache token parse tree.
     *
     * @throws Mustache_Exception_SyntaxException upon encountering unknown
token types
     *
     * @param array $tree  Parse tree of Mustache tokens
     * @param int   $level (default: 0)
     *
     * @return string Generated PHP source code
     */
    private function walk(array $tree, $level = 0)
    {
        $code = '';
        $level++;
        foreach ($tree as $node) {
            switch ($node[Mustache_Tokenizer::TYPE]) {
                case Mustache_Tokenizer::T_PRAGMA:
                    $this->pragmas[$node[Mustache_Tokenizer::NAME]] =
true;
                    break;

                case Mustache_Tokenizer::T_SECTION:
                    $code .= $this->section(
                        $node[Mustache_Tokenizer::NODES],
                        $node[Mustache_Tokenizer::NAME],
                        isset($node[Mustache_Tokenizer::FILTERS]) ?
$node[Mustache_Tokenizer::FILTERS] : array(),
                        $node[Mustache_Tokenizer::INDEX],
                        $node[Mustache_Tokenizer::END],
                        $node[Mustache_Tokenizer::OTAG],
                        $node[Mustache_Tokenizer::CTAG],
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_INVERTED:
                    $code .= $this->invertedSection(
                        $node[Mustache_Tokenizer::NODES],
                        $node[Mustache_Tokenizer::NAME],
                        isset($node[Mustache_Tokenizer::FILTERS]) ?
$node[Mustache_Tokenizer::FILTERS] : array(),
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_PARTIAL:
                    $code .= $this->partial(
                        $node[Mustache_Tokenizer::NAME],
                        isset($node[Mustache_Tokenizer::INDENT]) ?
$node[Mustache_Tokenizer::INDENT] : '',
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_PARENT:
                    $code .= $this->parent(
                        $node[Mustache_Tokenizer::NAME],
                        isset($node[Mustache_Tokenizer::INDENT]) ?
$node[Mustache_Tokenizer::INDENT] : '',
                        $node[Mustache_Tokenizer::NODES],
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_BLOCK_ARG:
                    $code .= $this->blockArg(
                        $node[Mustache_Tokenizer::NODES],
                        $node[Mustache_Tokenizer::NAME],
                        $node[Mustache_Tokenizer::INDEX],
                        $node[Mustache_Tokenizer::END],
                        $node[Mustache_Tokenizer::OTAG],
                        $node[Mustache_Tokenizer::CTAG],
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_BLOCK_VAR:
                    $code .= $this->blockVar(
                        $node[Mustache_Tokenizer::NODES],
                        $node[Mustache_Tokenizer::NAME],
                        $node[Mustache_Tokenizer::INDEX],
                        $node[Mustache_Tokenizer::END],
                        $node[Mustache_Tokenizer::OTAG],
                        $node[Mustache_Tokenizer::CTAG],
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_COMMENT:
                    break;

                case Mustache_Tokenizer::T_ESCAPED:
                case Mustache_Tokenizer::T_UNESCAPED:
                case Mustache_Tokenizer::T_UNESCAPED_2:
                    $code .= $this->variable(
                        $node[Mustache_Tokenizer::NAME],
                        isset($node[Mustache_Tokenizer::FILTERS]) ?
$node[Mustache_Tokenizer::FILTERS] : array(),
                        $node[Mustache_Tokenizer::TYPE] ===
Mustache_Tokenizer::T_ESCAPED,
                        $level
                    );
                    break;

                case Mustache_Tokenizer::T_TEXT:
                    $code .=
$this->text($node[Mustache_Tokenizer::VALUE], $level);
                    break;

                default:
                    throw new
Mustache_Exception_SyntaxException(sprintf('Unknown token type:
%s', $node[Mustache_Tokenizer::TYPE]), $node);
            }
        }

        return $code;
    }

    const KLASS = '<?php

        class %s extends Mustache_Template
        {
            private $lambdaHelper;%s

            public function renderInternal(Mustache_Context $context,
$indent = \'\')
            {
                $this->lambdaHelper = new
Mustache_LambdaHelper($this->mustache, $context);
                $buffer = \'\';
        %s

                return $buffer;
            }
        %s
        %s
        }';

    const KLASS_NO_LAMBDAS = '<?php

        class %s extends Mustache_Template
        {%s
            public function renderInternal(Mustache_Context $context,
$indent = \'\')
            {
                $buffer = \'\';
        %s

                return $buffer;
            }
        }';

    const STRICT_CALLABLE = 'protected $strictCallables = true;';

    /**
     * Generate Mustache Template class PHP source.
     *
     * @param array  $tree Parse tree of Mustache tokens
     * @param string $name Mustache Template class name
     *
     * @return string Generated PHP source code
     */
    private function writeCode($tree, $name)
    {
        $code     = $this->walk($tree);
        $sections = implode("\n", $this->sections);
        $blocks   = implode("\n", $this->blocks);
        $klass    = empty($this->sections) &&
empty($this->blocks) ? self::KLASS_NO_LAMBDAS : self::KLASS;

        $callable = $this->strictCallables ?
$this->prepare(self::STRICT_CALLABLE) : '';

        return sprintf($this->prepare($klass, 0, false, true), $name,
$callable, $code, $sections, $blocks);
    }

    const BLOCK_VAR = '
        $blockFunction = $context->findInBlock(%s);
        if (is_callable($blockFunction)) {
            $buffer .= call_user_func($blockFunction, $context);
        %s}
    ';

    const BLOCK_VAR_ELSE = '} else {%s';

    /**
     * Generate Mustache Template inheritance block variable PHP source.
     *
     * @param array  $nodes Array of child tokens
     * @param string $id    Section name
     * @param int    $start Section start offset
     * @param int    $end   Section end offset
     * @param string $otag  Current Mustache opening tag
     * @param string $ctag  Current Mustache closing tag
     * @param int    $level
     *
     * @return string Generated PHP source code
     */
    private function blockVar($nodes, $id, $start, $end, $otag, $ctag,
$level)
    {
        $id = var_export($id, true);

        $else = $this->walk($nodes, $level);
        if ($else !== '') {
            $else = sprintf($this->prepare(self::BLOCK_VAR_ELSE, $level
+ 1, false, true), $else);
        }

        return sprintf($this->prepare(self::BLOCK_VAR, $level), $id,
$else);
    }

    const BLOCK_ARG = '%s => array($this,
\'block%s\'),';

    /**
     * Generate Mustache Template inheritance block argument PHP source.
     *
     * @param array  $nodes Array of child tokens
     * @param string $id    Section name
     * @param int    $start Section start offset
     * @param int    $end   Section end offset
     * @param string $otag  Current Mustache opening tag
     * @param string $ctag  Current Mustache closing tag
     * @param int    $level
     *
     * @return string Generated PHP source code
     */
    private function blockArg($nodes, $id, $start, $end, $otag, $ctag,
$level)
    {
        $key = $this->block($nodes);
        $keystr = var_export($key, true);
        $id = var_export($id, true);

        return sprintf($this->prepare(self::BLOCK_ARG, $level), $id,
$key);
    }

    const BLOCK_FUNCTION = '
        public function block%s($context)
        {
            $indent = $buffer = \'\';%s

            return $buffer;
        }
    ';

    /**
     * Generate Mustache Template inheritance block function PHP source.
     *
     * @param array $nodes Array of child tokens
     *
     * @return string key of new block function
     */
    private function block($nodes)
    {
        $code = $this->walk($nodes, 0);
        $key = ucfirst(md5($code));

        if (!isset($this->blocks[$key])) {
            $this->blocks[$key] =
sprintf($this->prepare(self::BLOCK_FUNCTION, 0), $key, $code);
        }

        return $key;
    }

    const SECTION_CALL = '
        // %s section
        $value = $context->%s(%s);%s
        $buffer .= $this->section%s($context, $indent, $value);
    ';

    const SECTION = '
        private function section%s(Mustache_Context $context, $indent,
$value)
        {
            $buffer = \'\';

            if (%s) {
                $source = %s;
                $result = call_user_func($value, $source, %s);
                if (strpos($result, \'{{\') === false) {
                    $buffer .= $result;
                } else {
                    $buffer .= $this->mustache
                        ->loadLambda((string) $result%s)
                        ->renderInternal($context);
                }
            } elseif (!empty($value)) {
                $values = $this->isIterable($value) ? $value :
array($value);
                foreach ($values as $value) {
                    $context->push($value);
                    %s
                    $context->pop();
                }
            }

            return $buffer;
        }
    ';

    /**
     * Generate Mustache Template section PHP source.
     *
     * @param array    $nodes   Array of child tokens
     * @param string   $id      Section name
     * @param string[] $filters Array of filters
     * @param int      $start   Section start offset
     * @param int      $end     Section end offset
     * @param string   $otag    Current Mustache opening tag
     * @param string   $ctag    Current Mustache closing tag
     * @param int      $level
     *
     * @return string Generated section PHP source code
     */
    private function section($nodes, $id, $filters, $start, $end, $otag,
$ctag, $level)
    {
        $source   = var_export(substr($this->source, $start, $end -
$start), true);
        $callable = $this->getCallable();

        if ($otag !== '{{' || $ctag !== '}}') {
            $delimTag = var_export(sprintf('{{= %s %s =}}',
$otag, $ctag), true);
            $helper =
sprintf('$this->lambdaHelper->withDelimiters(%s)',
$delimTag);
            $delims = ', ' . $delimTag;
        } else {
            $helper = '$this->lambdaHelper';
            $delims = '';
        }

        $key = ucfirst(md5($delims . "\n" . $source));

        if (!isset($this->sections[$key])) {
            $this->sections[$key] =
sprintf($this->prepare(self::SECTION), $key, $callable, $source,
$helper, $delims, $this->walk($nodes, 2));
        }

        $method  = $this->getFindMethod($id);
        $id      = var_export($id, true);
        $filters = $this->getFilters($filters, $level);

        return sprintf($this->prepare(self::SECTION_CALL, $level), $id,
$method, $id, $filters, $key);
    }

    const INVERTED_SECTION = '
        // %s inverted section
        $value = $context->%s(%s);%s
        if (empty($value)) {
            %s
        }
    ';

    /**
     * Generate Mustache Template inverted section PHP source.
     *
     * @param array    $nodes   Array of child tokens
     * @param string   $id      Section name
     * @param string[] $filters Array of filters
     * @param int      $level
     *
     * @return string Generated inverted section PHP source code
     */
    private function invertedSection($nodes, $id, $filters, $level)
    {
        $method  = $this->getFindMethod($id);
        $id      = var_export($id, true);
        $filters = $this->getFilters($filters, $level);

        return sprintf($this->prepare(self::INVERTED_SECTION, $level),
$id, $method, $id, $filters, $this->walk($nodes, $level));
    }

    const PARTIAL_INDENT = ', $indent . %s';
    const PARTIAL = '
        if ($partial = $this->mustache->loadPartial(%s)) {
            $buffer .= $partial->renderInternal($context%s);
        }
    ';

    /**
     * Generate Mustache Template partial call PHP source.
     *
     * @param string $id     Partial name
     * @param string $indent Whitespace indent to apply to partial
     * @param int    $level
     *
     * @return string Generated partial call PHP source code
     */
    private function partial($id, $indent, $level)
    {
        if ($indent !== '') {
            $indentParam = sprintf(self::PARTIAL_INDENT,
var_export($indent, true));
        } else {
            $indentParam = '';
        }

        return sprintf(
            $this->prepare(self::PARTIAL, $level),
            var_export($id, true),
            $indentParam
        );
    }

    const PARENT = '
        if ($parent = $this->mustache->loadPartial(%s)) {
            $context->pushBlockContext(array(%s
            ));
            $buffer .= $parent->renderInternal($context, $indent);
            $context->popBlockContext();
        }
    ';

    const PARENT_NO_CONTEXT = '
        if ($parent = $this->mustache->loadPartial(%s)) {
            $buffer .= $parent->renderInternal($context, $indent);
        }
    ';

    /**
     * Generate Mustache Template inheritance parent call PHP source.
     *
     * @param string $id       Parent tag name
     * @param string $indent   Whitespace indent to apply to parent
     * @param array  $children Child nodes
     * @param int    $level
     *
     * @return string Generated PHP source code
     */
    private function parent($id, $indent, array $children, $level)
    {
        $realChildren = array_filter($children, array(__CLASS__,
'onlyBlockArgs'));

        if (empty($realChildren)) {
            return sprintf($this->prepare(self::PARENT_NO_CONTEXT,
$level), var_export($id, true));
        }

        return sprintf(
            $this->prepare(self::PARENT, $level),
            var_export($id, true),
            $this->walk($realChildren, $level + 1)
        );
    }

    /**
     * Helper method for filtering out non-block-arg tokens.
     *
     * @param array $node
     *
     * @return bool True if $node is a block arg token
     */
    private static function onlyBlockArgs(array $node)
    {
        return $node[Mustache_Tokenizer::TYPE] ===
Mustache_Tokenizer::T_BLOCK_ARG;
    }

    const VARIABLE = '
        $value = $this->resolveValue($context->%s(%s), $context);%s
        $buffer .= %s%s;
    ';

    /**
     * Generate Mustache Template variable interpolation PHP source.
     *
     * @param string   $id      Variable name
     * @param string[] $filters Array of filters
     * @param bool     $escape  Escape the variable value for output?
     * @param int      $level
     *
     * @return string Generated variable interpolation PHP source
     */
    private function variable($id, $filters, $escape, $level)
    {
        $method  = $this->getFindMethod($id);
        $id      = ($method !== 'last') ? var_export($id, true) :
'';
        $filters = $this->getFilters($filters, $level);
        $value   = $escape ? $this->getEscape() : '$value';

        return sprintf($this->prepare(self::VARIABLE, $level), $method,
$id, $filters, $this->flushIndent(), $value);
    }

    const FILTER = '
        $filter = $context->%s(%s);
        if (!(%s)) {
            throw new Mustache_Exception_UnknownFilterException(%s);
        }
        $value = call_user_func($filter, $value);%s
    ';

    /**
     * Generate Mustache Template variable filtering PHP source.
     *
     * @param string[] $filters Array of filters
     * @param int      $level
     *
     * @return string Generated filter PHP source
     */
    private function getFilters(array $filters, $level)
    {
        if (empty($filters)) {
            return '';
        }

        $name     = array_shift($filters);
        $method   = $this->getFindMethod($name);
        $filter   = ($method !== 'last') ? var_export($name,
true) : '';
        $callable = $this->getCallable('$filter');
        $msg      = var_export($name, true);

        return sprintf($this->prepare(self::FILTER, $level), $method,
$filter, $callable, $msg, $this->getFilters($filters, $level));
    }

    const LINE = '$buffer .= "\n";';
    const TEXT = '$buffer .= %s%s;';

    /**
     * Generate Mustache Template output Buffer call PHP source.
     *
     * @param string $text
     * @param int    $level
     *
     * @return string Generated output Buffer call PHP source
     */
    private function text($text, $level)
    {
        $indentNextLine = (substr($text, -1) === "\n");
        $code = sprintf($this->prepare(self::TEXT, $level),
$this->flushIndent(), var_export($text, true));
        $this->indentNextLine = $indentNextLine;

        return $code;
    }

    /**
     * Prepare PHP source code snippet for output.
     *
     * @param string $text
     * @param int    $bonus          Additional indent level (default: 0)
     * @param bool   $prependNewline Prepend a newline to the snippet?
(default: true)
     * @param bool   $appendNewline  Append a newline to the snippet?
(default: false)
     *
     * @return string PHP source code snippet
     */
    private function prepare($text, $bonus = 0, $prependNewline = true,
$appendNewline = false)
    {
        $text = ($prependNewline ? "\n" : '') .
trim($text);
        if ($prependNewline) {
            $bonus++;
        }
        if ($appendNewline) {
            $text .= "\n";
        }

        return preg_replace("/\n( {8})?/", "\n" .
str_repeat(' ', $bonus * 4), $text);
    }

    const DEFAULT_ESCAPE = 'htmlspecialchars(%s, %s, %s)';
    const CUSTOM_ESCAPE  =
'call_user_func($this->mustache->getEscape(), %s)';

    /**
     * Get the current escaper.
     *
     * @param string $value (default: '$value')
     *
     * @return string Either a custom callback, or an inline call to
`htmlspecialchars`
     */
    private function getEscape($value = '$value')
    {
        if ($this->customEscape) {
            return sprintf(self::CUSTOM_ESCAPE, $value);
        }

        return sprintf(self::DEFAULT_ESCAPE, $value,
var_export($this->entityFlags, true), var_export($this->charset,
true));
    }

    /**
     * Select the appropriate Context `find` method for a given $id.
     *
     * The return value will be one of `find`, `findDot`, `findAnchoredDot`
or `last`.
     *
     * @see Mustache_Context::find
     * @see Mustache_Context::findDot
     * @see Mustache_Context::last
     *
     * @param string $id Variable name
     *
     * @return string `find` method name
     */
    private function getFindMethod($id)
    {
        if ($id === '.') {
            return 'last';
        }

        if (isset($this->pragmas[Mustache_Engine::PRAGMA_ANCHORED_DOT])
&& $this->pragmas[Mustache_Engine::PRAGMA_ANCHORED_DOT]) {
            if (substr($id, 0, 1) === '.') {
                return 'findAnchoredDot';
            }
        }

        if (strpos($id, '.') === false) {
            return 'find';
        }

        return 'findDot';
    }

    const IS_CALLABLE        = '!is_string(%s) &&
is_callable(%s)';
    const STRICT_IS_CALLABLE = 'is_object(%s) &&
is_callable(%s)';

    /**
     * Helper function to compile strict vs lax "is callable"
logic.
     *
     * @param string $variable (default: '$value')
     *
     * @return string "is callable" logic
     */
    private function getCallable($variable = '$value')
    {
        $tpl = $this->strictCallables ? self::STRICT_IS_CALLABLE :
self::IS_CALLABLE;

        return sprintf($tpl, $variable, $variable);
    }

    const LINE_INDENT = '$indent . ';

    /**
     * Get the current $indent prefix to write to the buffer.
     *
     * @return string "$indent . " or ""
     */
    private function flushIndent()
    {
        if (!$this->indentNextLine) {
            return '';
        }

        $this->indentNextLine = false;

        return self::LINE_INDENT;
    }
}
vendor/mustache/mustache/src/Mustache/Context.php000064400000015361151160724640016174
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template rendering Context.
 */
class Mustache_Context
{
    private $stack      = array();
    private $blockStack = array();

    /**
     * Mustache rendering Context constructor.
     *
     * @param mixed $context Default rendering context (default: null)
     */
    public function __construct($context = null)
    {
        if ($context !== null) {
            $this->stack = array($context);
        }
    }

    /**
     * Push a new Context frame onto the stack.
     *
     * @param mixed $value Object or array to use for context
     */
    public function push($value)
    {
        array_push($this->stack, $value);
    }

    /**
     * Push a new Context frame onto the block context stack.
     *
     * @param mixed $value Object or array to use for block context
     */
    public function pushBlockContext($value)
    {
        array_push($this->blockStack, $value);
    }

    /**
     * Pop the last Context frame from the stack.
     *
     * @return mixed Last Context frame (object or array)
     */
    public function pop()
    {
        return array_pop($this->stack);
    }

    /**
     * Pop the last block Context frame from the stack.
     *
     * @return mixed Last block Context frame (object or array)
     */
    public function popBlockContext()
    {
        return array_pop($this->blockStack);
    }

    /**
     * Get the last Context frame.
     *
     * @return mixed Last Context frame (object or array)
     */
    public function last()
    {
        return end($this->stack);
    }

    /**
     * Find a variable in the Context stack.
     *
     * Starting with the last Context frame (the context of the innermost
section), and working back to the top-level
     * rendering context, look for a variable with the given name:
     *
     *  * If the Context frame is an associative array which contains the
key $id, returns the value of that element.
     *  * If the Context frame is an object, this will check first for a
public method, then a public property named
     *    $id. Failing both of these, it will try `__isset` and `__get`
magic methods.
     *  * If a value named $id is not found in any Context frame, returns
an empty string.
     *
     * @param string $id Variable name
     *
     * @return mixed Variable value, or '' if not found
     */
    public function find($id)
    {
        return $this->findVariableInStack($id, $this->stack);
    }

    /**
     * Find a 'dot notation' variable in the Context stack.
     *
     * Note that dot notation traversal bubbles through scope differently
than the regular find method. After finding
     * the initial chunk of the dotted name, each subsequent chunk is
searched for only within the value of the previous
     * result. For example, given the following context stack:
     *
     *     $data = array(
     *         'name' => 'Fred',
     *         'child' => array(
     *             'name' => 'Bob'
     *         ),
     *     );
     *
     * ... and the Mustache following template:
     *
     *     {{ child.name }}
     *
     * ... the `name` value is only searched for within the `child` value
of the global Context, not within parent
     * Context frames.
     *
     * @param string $id Dotted variable selector
     *
     * @return mixed Variable value, or '' if not found
     */
    public function findDot($id)
    {
        $chunks = explode('.', $id);
        $first  = array_shift($chunks);
        $value  = $this->findVariableInStack($first, $this->stack);

        foreach ($chunks as $chunk) {
            if ($value === '') {
                return $value;
            }

            $value = $this->findVariableInStack($chunk, array($value));
        }

        return $value;
    }

    /**
     * Find an 'anchored dot notation' variable in the Context
stack.
     *
     * This is the same as findDot(), except it looks in the top of the
context
     * stack for the first value, rather than searching the whole context
stack
     * and starting from there.
     *
     * @see Mustache_Context::findDot
     *
     * @throws Mustache_Exception_InvalidArgumentException if given an
invalid anchored dot $id
     *
     * @param string $id Dotted variable selector
     *
     * @return mixed Variable value, or '' if not found
     */
    public function findAnchoredDot($id)
    {
        $chunks = explode('.', $id);
        $first  = array_shift($chunks);
        if ($first !== '') {
            throw new
Mustache_Exception_InvalidArgumentException(sprintf('Unexpected id for
findAnchoredDot: %s', $id));
        }

        $value  = $this->last();

        foreach ($chunks as $chunk) {
            if ($value === '') {
                return $value;
            }

            $value = $this->findVariableInStack($chunk, array($value));
        }

        return $value;
    }

    /**
     * Find an argument in the block context stack.
     *
     * @param string $id
     *
     * @return mixed Variable value, or '' if not found
     */
    public function findInBlock($id)
    {
        foreach ($this->blockStack as $context) {
            if (array_key_exists($id, $context)) {
                return $context[$id];
            }
        }

        return '';
    }

    /**
     * Helper function to find a variable in the Context stack.
     *
     * @see Mustache_Context::find
     *
     * @param string $id    Variable name
     * @param array  $stack Context stack
     *
     * @return mixed Variable value, or '' if not found
     */
    private function findVariableInStack($id, array $stack)
    {
        for ($i = count($stack) - 1; $i >= 0; $i--) {
            $frame = &$stack[$i];

            switch (gettype($frame)) {
                case 'object':
                    if (!($frame instanceof Closure)) {
                        // Note that is_callable() *will not work here*
                        // See
https://github.com/bobthecow/mustache.php/wiki/Magic-Methods
                        if (method_exists($frame, $id)) {
                            return $frame->$id();
                        }

                        if (isset($frame->$id)) {
                            return $frame->$id;
                        }

                        if ($frame instanceof ArrayAccess &&
isset($frame[$id])) {
                            return $frame[$id];
                        }
                    }
                    break;

                case 'array':
                    if (array_key_exists($id, $frame)) {
                        return $frame[$id];
                    }
                    break;
            }
        }

        return '';
    }
}
vendor/mustache/mustache/src/Mustache/Engine.php000064400000061770151160724640015762
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A Mustache implementation in PHP.
 *
 * {@link http://defunkt.github.com/mustache}
 *
 * Mustache is a framework-agnostic logic-less templating language. It
enforces separation of view
 * logic from template files. In fact, it is not even possible to embed
logic in the template.
 *
 * This is very, very rad.
 *
 * @author Justin Hileman {@link http://justinhileman.com}
 */
class Mustache_Engine
{
    const VERSION        = '2.12.0';
    const SPEC_VERSION   = '1.1.2';

    const PRAGMA_FILTERS      = 'FILTERS';
    const PRAGMA_BLOCKS       = 'BLOCKS';
    const PRAGMA_ANCHORED_DOT = 'ANCHORED-DOT';

    // Known pragmas
    private static $knownPragmas = array(
        self::PRAGMA_FILTERS      => true,
        self::PRAGMA_BLOCKS       => true,
        self::PRAGMA_ANCHORED_DOT => true,
    );

    // Template cache
    private $templates = array();

    // Environment
    private $templateClassPrefix = '__Mustache_';
    private $cache;
    private $lambdaCache;
    private $cacheLambdaTemplates = false;
    private $loader;
    private $partialsLoader;
    private $helpers;
    private $escape;
    private $entityFlags = ENT_COMPAT;
    private $charset = 'UTF-8';
    private $logger;
    private $strictCallables = false;
    private $pragmas = array();
    private $delimiters;

    // Services
    private $tokenizer;
    private $parser;
    private $compiler;

    /**
     * Mustache class constructor.
     *
     * Passing an $options array allows overriding certain Mustache options
during instantiation:
     *
     *     $options = array(
     *         // The class prefix for compiled templates. Defaults to
'__Mustache_'.
     *         'template_class_prefix' =>
'__MyTemplates_',
     *
     *         // A Mustache cache instance or a cache directory string for
compiled templates.
     *         // Mustache will not cache templates unless this is set.
     *         'cache' =>
dirname(__FILE__).'/tmp/cache/mustache',
     *
     *         // Override default permissions for cache files. Defaults to
using the system-defined umask. It is
     *         // *strongly* recommended that you configure your umask
properly rather than overriding permissions here.
     *         'cache_file_mode' => 0666,
     *
     *         // Optionally, enable caching for lambda section templates.
This is generally not recommended, as lambda
     *         // sections are often too dynamic to benefit from caching.
     *         'cache_lambda_templates' => true,
     *
     *         // Customize the tag delimiters used by this engine
instance. Note that overriding here changes the
     *         // delimiters used to parse all templates and partials
loaded by this instance. To override just for a
     *         // single template, use an inline "change
delimiters" tag at the start of the template file:
     *         //
     *         //     {{=<% %>=}}
     *         //
     *         'delimiters' => '<% %>',
     *
     *         // A Mustache template loader instance. Uses a StringLoader
if not specified.
     *         'loader' => new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'),
     *
     *         // A Mustache loader instance for partials.
     *         'partials_loader' => new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views/partials'),
     *
     *         // An array of Mustache partials. Useful for quick-and-dirty
string template loading, but not as
     *         // efficient or lazy as a Filesystem (or database) loader.
     *         'partials' => array('foo' =>
file_get_contents(dirname(__FILE__).'/views/partials/foo.mustache')),
     *
     *         // An array of 'helpers'. Helpers can be global
variables or objects, closures (e.g. for higher order
     *         // sections), or any other valid Mustache context value.
They will be prepended to the context stack,
     *         // so they will be available in any template loaded by this
Mustache instance.
     *         'helpers' => array('i18n' =>
function ($text) {
     *             // do something translatey here...
     *         }),
     *
     *         // An 'escape' callback, responsible for escaping
double-mustache variables.
     *         'escape' => function ($value) {
     *             return htmlspecialchars($buffer, ENT_COMPAT,
'UTF-8');
     *         },
     *
     *         // Type argument for `htmlspecialchars`.  Defaults to
ENT_COMPAT.  You may prefer ENT_QUOTES.
     *         'entity_flags' => ENT_QUOTES,
     *
     *         // Character set for `htmlspecialchars`. Defaults to
'UTF-8'. Use 'UTF-8'.
     *         'charset' => 'ISO-8859-1',
     *
     *         // A Mustache Logger instance. No logging will occur unless
this is set. Using a PSR-3 compatible
     *         // logging library -- such as Monolog -- is highly
recommended. A simple stream logger implementation is
     *         // available as well:
     *         'logger' => new
Mustache_Logger_StreamLogger('php://stderr'),
     *
     *         // Only treat Closure instances and invokable classes as
callable. If true, values like
     *         // `array('ClassName', 'methodName')`
and `array($classInstance, 'methodName')`, which are
traditionally
     *         // "callable" in PHP, are not called to resolve
variables for interpolation or section contexts. This
     *         // helps protect against arbitrary code execution when user
input is passed directly into the template.
     *         // This currently defaults to false, but will default to
true in v3.0.
     *         'strict_callables' => true,
     *
     *         // Enable pragmas across all templates, regardless of the
presence of pragma tags in the individual
     *         // templates.
     *         'pragmas' => [Mustache_Engine::PRAGMA_FILTERS],
     *     );
     *
     * @throws Mustache_Exception_InvalidArgumentException If `escape`
option is not callable
     *
     * @param array $options (default: array())
     */
    public function __construct(array $options = array())
    {
        if (isset($options['template_class_prefix'])) {
            if ((string) $options['template_class_prefix'] ===
'') {
                throw new
Mustache_Exception_InvalidArgumentException('Mustache Constructor
"template_class_prefix" must not be empty');
            }

            $this->templateClassPrefix =
$options['template_class_prefix'];
        }

        if (isset($options['cache'])) {
            $cache = $options['cache'];

            if (is_string($cache)) {
                $mode  = isset($options['cache_file_mode']) ?
$options['cache_file_mode'] : null;
                $cache = new Mustache_Cache_FilesystemCache($cache, $mode);
            }

            $this->setCache($cache);
        }

        if (isset($options['cache_lambda_templates'])) {
            $this->cacheLambdaTemplates = (bool)
$options['cache_lambda_templates'];
        }

        if (isset($options['loader'])) {
            $this->setLoader($options['loader']);
        }

        if (isset($options['partials_loader'])) {
           
$this->setPartialsLoader($options['partials_loader']);
        }

        if (isset($options['partials'])) {
            $this->setPartials($options['partials']);
        }

        if (isset($options['helpers'])) {
            $this->setHelpers($options['helpers']);
        }

        if (isset($options['escape'])) {
            if (!is_callable($options['escape'])) {
                throw new
Mustache_Exception_InvalidArgumentException('Mustache Constructor
"escape" option must be callable');
            }

            $this->escape = $options['escape'];
        }

        if (isset($options['entity_flags'])) {
            $this->entityFlags = $options['entity_flags'];
        }

        if (isset($options['charset'])) {
            $this->charset = $options['charset'];
        }

        if (isset($options['logger'])) {
            $this->setLogger($options['logger']);
        }

        if (isset($options['strict_callables'])) {
            $this->strictCallables =
$options['strict_callables'];
        }

        if (isset($options['delimiters'])) {
            $this->delimiters = $options['delimiters'];
        }

        if (isset($options['pragmas'])) {
            foreach ($options['pragmas'] as $pragma) {
                if (!isset(self::$knownPragmas[$pragma])) {
                    throw new
Mustache_Exception_InvalidArgumentException(sprintf('Unknown pragma:
"%s".', $pragma));
                }
                $this->pragmas[$pragma] = true;
            }
        }
    }

    /**
     * Shortcut 'render' invocation.
     *
     * Equivalent to calling
`$mustache->loadTemplate($template)->render($context);`
     *
     * @see Mustache_Engine::loadTemplate
     * @see Mustache_Template::render
     *
     * @param string $template
     * @param mixed  $context  (default: array())
     *
     * @return string Rendered template
     */
    public function render($template, $context = array())
    {
        return $this->loadTemplate($template)->render($context);
    }

    /**
     * Get the current Mustache escape callback.
     *
     * @return callable|null
     */
    public function getEscape()
    {
        return $this->escape;
    }

    /**
     * Get the current Mustache entitity type to escape.
     *
     * @return int
     */
    public function getEntityFlags()
    {
        return $this->entityFlags;
    }

    /**
     * Get the current Mustache character set.
     *
     * @return string
     */
    public function getCharset()
    {
        return $this->charset;
    }

    /**
     * Get the current globally enabled pragmas.
     *
     * @return array
     */
    public function getPragmas()
    {
        return array_keys($this->pragmas);
    }

    /**
     * Set the Mustache template Loader instance.
     *
     * @param Mustache_Loader $loader
     */
    public function setLoader(Mustache_Loader $loader)
    {
        $this->loader = $loader;
    }

    /**
     * Get the current Mustache template Loader instance.
     *
     * If no Loader instance has been explicitly specified, this method
will instantiate and return
     * a StringLoader instance.
     *
     * @return Mustache_Loader
     */
    public function getLoader()
    {
        if (!isset($this->loader)) {
            $this->loader = new Mustache_Loader_StringLoader();
        }

        return $this->loader;
    }

    /**
     * Set the Mustache partials Loader instance.
     *
     * @param Mustache_Loader $partialsLoader
     */
    public function setPartialsLoader(Mustache_Loader $partialsLoader)
    {
        $this->partialsLoader = $partialsLoader;
    }

    /**
     * Get the current Mustache partials Loader instance.
     *
     * If no Loader instance has been explicitly specified, this method
will instantiate and return
     * an ArrayLoader instance.
     *
     * @return Mustache_Loader
     */
    public function getPartialsLoader()
    {
        if (!isset($this->partialsLoader)) {
            $this->partialsLoader = new Mustache_Loader_ArrayLoader();
        }

        return $this->partialsLoader;
    }

    /**
     * Set partials for the current partials Loader instance.
     *
     * @throws Mustache_Exception_RuntimeException If the current Loader
instance is immutable
     *
     * @param array $partials (default: array())
     */
    public function setPartials(array $partials = array())
    {
        if (!isset($this->partialsLoader)) {
            $this->partialsLoader = new Mustache_Loader_ArrayLoader();
        }

        if (!$this->partialsLoader instanceof
Mustache_Loader_MutableLoader) {
            throw new Mustache_Exception_RuntimeException('Unable to
set partials on an immutable Mustache Loader instance');
        }

        $this->partialsLoader->setTemplates($partials);
    }

    /**
     * Set an array of Mustache helpers.
     *
     * An array of 'helpers'. Helpers can be global variables or
objects, closures (e.g. for higher order sections), or
     * any other valid Mustache context value. They will be prepended to
the context stack, so they will be available in
     * any template loaded by this Mustache instance.
     *
     * @throws Mustache_Exception_InvalidArgumentException if $helpers is
not an array or Traversable
     *
     * @param array|Traversable $helpers
     */
    public function setHelpers($helpers)
    {
        if (!is_array($helpers) && !$helpers instanceof
Traversable) {
            throw new
Mustache_Exception_InvalidArgumentException('setHelpers expects an
array of helpers');
        }

        $this->getHelpers()->clear();

        foreach ($helpers as $name => $helper) {
            $this->addHelper($name, $helper);
        }
    }

    /**
     * Get the current set of Mustache helpers.
     *
     * @see Mustache_Engine::setHelpers
     *
     * @return Mustache_HelperCollection
     */
    public function getHelpers()
    {
        if (!isset($this->helpers)) {
            $this->helpers = new Mustache_HelperCollection();
        }

        return $this->helpers;
    }

    /**
     * Add a new Mustache helper.
     *
     * @see Mustache_Engine::setHelpers
     *
     * @param string $name
     * @param mixed  $helper
     */
    public function addHelper($name, $helper)
    {
        $this->getHelpers()->add($name, $helper);
    }

    /**
     * Get a Mustache helper by name.
     *
     * @see Mustache_Engine::setHelpers
     *
     * @param string $name
     *
     * @return mixed Helper
     */
    public function getHelper($name)
    {
        return $this->getHelpers()->get($name);
    }

    /**
     * Check whether this Mustache instance has a helper.
     *
     * @see Mustache_Engine::setHelpers
     *
     * @param string $name
     *
     * @return bool True if the helper is present
     */
    public function hasHelper($name)
    {
        return $this->getHelpers()->has($name);
    }

    /**
     * Remove a helper by name.
     *
     * @see Mustache_Engine::setHelpers
     *
     * @param string $name
     */
    public function removeHelper($name)
    {
        $this->getHelpers()->remove($name);
    }

    /**
     * Set the Mustache Logger instance.
     *
     * @throws Mustache_Exception_InvalidArgumentException If logger is not
an instance of Mustache_Logger or Psr\Log\LoggerInterface
     *
     * @param Mustache_Logger|Psr\Log\LoggerInterface $logger
     */
    public function setLogger($logger = null)
    {
        if ($logger !== null && !($logger instanceof
Mustache_Logger || is_a($logger, 'Psr\\Log\\LoggerInterface'))) {
            throw new
Mustache_Exception_InvalidArgumentException('Expected an instance of
Mustache_Logger or Psr\\Log\\LoggerInterface.');
        }

        if ($this->getCache()->getLogger() === null) {
            $this->getCache()->setLogger($logger);
        }

        $this->logger = $logger;
    }

    /**
     * Get the current Mustache Logger instance.
     *
     * @return Mustache_Logger|Psr\Log\LoggerInterface
     */
    public function getLogger()
    {
        return $this->logger;
    }

    /**
     * Set the Mustache Tokenizer instance.
     *
     * @param Mustache_Tokenizer $tokenizer
     */
    public function setTokenizer(Mustache_Tokenizer $tokenizer)
    {
        $this->tokenizer = $tokenizer;
    }

    /**
     * Get the current Mustache Tokenizer instance.
     *
     * If no Tokenizer instance has been explicitly specified, this method
will instantiate and return a new one.
     *
     * @return Mustache_Tokenizer
     */
    public function getTokenizer()
    {
        if (!isset($this->tokenizer)) {
            $this->tokenizer = new Mustache_Tokenizer();
        }

        return $this->tokenizer;
    }

    /**
     * Set the Mustache Parser instance.
     *
     * @param Mustache_Parser $parser
     */
    public function setParser(Mustache_Parser $parser)
    {
        $this->parser = $parser;
    }

    /**
     * Get the current Mustache Parser instance.
     *
     * If no Parser instance has been explicitly specified, this method
will instantiate and return a new one.
     *
     * @return Mustache_Parser
     */
    public function getParser()
    {
        if (!isset($this->parser)) {
            $this->parser = new Mustache_Parser();
        }

        return $this->parser;
    }

    /**
     * Set the Mustache Compiler instance.
     *
     * @param Mustache_Compiler $compiler
     */
    public function setCompiler(Mustache_Compiler $compiler)
    {
        $this->compiler = $compiler;
    }

    /**
     * Get the current Mustache Compiler instance.
     *
     * If no Compiler instance has been explicitly specified, this method
will instantiate and return a new one.
     *
     * @return Mustache_Compiler
     */
    public function getCompiler()
    {
        if (!isset($this->compiler)) {
            $this->compiler = new Mustache_Compiler();
        }

        return $this->compiler;
    }

    /**
     * Set the Mustache Cache instance.
     *
     * @param Mustache_Cache $cache
     */
    public function setCache(Mustache_Cache $cache)
    {
        if (isset($this->logger) && $cache->getLogger() ===
null) {
            $cache->setLogger($this->getLogger());
        }

        $this->cache = $cache;
    }

    /**
     * Get the current Mustache Cache instance.
     *
     * If no Cache instance has been explicitly specified, this method will
instantiate and return a new one.
     *
     * @return Mustache_Cache
     */
    public function getCache()
    {
        if (!isset($this->cache)) {
            $this->setCache(new Mustache_Cache_NoopCache());
        }

        return $this->cache;
    }

    /**
     * Get the current Lambda Cache instance.
     *
     * If 'cache_lambda_templates' is enabled, this is the
default cache instance. Otherwise, it is a NoopCache.
     *
     * @see Mustache_Engine::getCache
     *
     * @return Mustache_Cache
     */
    protected function getLambdaCache()
    {
        if ($this->cacheLambdaTemplates) {
            return $this->getCache();
        }

        if (!isset($this->lambdaCache)) {
            $this->lambdaCache = new Mustache_Cache_NoopCache();
        }

        return $this->lambdaCache;
    }

    /**
     * Helper method to generate a Mustache template class.
     *
     * This method must be updated any time options are added which make it
so
     * the same template could be parsed and compiled multiple different
ways.
     *
     * @param string|Mustache_Source $source
     *
     * @return string Mustache Template class name
     */
    public function getTemplateClassName($source)
    {
        // For the most part, adding a new option here should do the trick.
        //
        // Pick a value here which is unique for each possible way the
template
        // could be compiled... but not necessarily unique per option
value. See
        // escape below, which only needs to differentiate between
'custom' and
        // 'default' escapes.
        //
        // Keep this list in alphabetical order :)
        $chunks = array(
            'charset'         => $this->charset,
            'delimiters'      => $this->delimiters ?
$this->delimiters : '{{ }}',
            'entityFlags'     => $this->entityFlags,
            'escape'          => isset($this->escape) ?
'custom' : 'default',
            'key'             => ($source instanceof
Mustache_Source) ? $source->getKey() : 'source',
            'pragmas'         => $this->getPragmas(),
            'strictCallables' => $this->strictCallables,
            'version'         => self::VERSION,
        );

        $key = json_encode($chunks);

        // Template Source instances have already provided their own source
key. For strings, just include the whole
        // source string in the md5 hash.
        if (!$source instanceof Mustache_Source) {
            $key .= "\n" . $source;
        }

        return $this->templateClassPrefix . md5($key);
    }

    /**
     * Load a Mustache Template by name.
     *
     * @param string $name
     *
     * @return Mustache_Template
     */
    public function loadTemplate($name)
    {
        return $this->loadSource($this->getLoader()->load($name));
    }

    /**
     * Load a Mustache partial Template by name.
     *
     * This is a helper method used internally by Template instances for
loading partial templates. You can most likely
     * ignore it completely.
     *
     * @param string $name
     *
     * @return Mustache_Template
     */
    public function loadPartial($name)
    {
        try {
            if (isset($this->partialsLoader)) {
                $loader = $this->partialsLoader;
            } elseif (isset($this->loader) && !$this->loader
instanceof Mustache_Loader_StringLoader) {
                $loader = $this->loader;
            } else {
                throw new
Mustache_Exception_UnknownTemplateException($name);
            }

            return $this->loadSource($loader->load($name));
        } catch (Mustache_Exception_UnknownTemplateException $e) {
            // If the named partial cannot be found, log then return null.
            $this->log(
                Mustache_Logger::WARNING,
                'Partial not found: "{name}"',
                array('name' => $e->getTemplateName())
            );
        }
    }

    /**
     * Load a Mustache lambda Template by source.
     *
     * This is a helper method used by Template instances to generate
subtemplates for Lambda sections. You can most
     * likely ignore it completely.
     *
     * @param string $source
     * @param string $delims (default: null)
     *
     * @return Mustache_Template
     */
    public function loadLambda($source, $delims = null)
    {
        if ($delims !== null) {
            $source = $delims . "\n" . $source;
        }

        return $this->loadSource($source, $this->getLambdaCache());
    }

    /**
     * Instantiate and return a Mustache Template instance by source.
     *
     * Optionally provide a Mustache_Cache instance. This is used
internally by Mustache_Engine::loadLambda to respect
     * the 'cache_lambda_templates' configuration option.
     *
     * @see Mustache_Engine::loadTemplate
     * @see Mustache_Engine::loadPartial
     * @see Mustache_Engine::loadLambda
     *
     * @param string|Mustache_Source $source
     * @param Mustache_Cache         $cache  (default: null)
     *
     * @return Mustache_Template
     */
    private function loadSource($source, Mustache_Cache $cache = null)
    {
        $className = $this->getTemplateClassName($source);

        if (!isset($this->templates[$className])) {
            if ($cache === null) {
                $cache = $this->getCache();
            }

            if (!class_exists($className, false)) {
                if (!$cache->load($className)) {
                    $compiled = $this->compile($source);
                    $cache->cache($className, $compiled);
                }
            }

            $this->log(
                Mustache_Logger::DEBUG,
                'Instantiating template:
"{className}"',
                array('className' => $className)
            );

            $this->templates[$className] = new $className($this);
        }

        return $this->templates[$className];
    }

    /**
     * Helper method to tokenize a Mustache template.
     *
     * @see Mustache_Tokenizer::scan
     *
     * @param string $source
     *
     * @return array Tokens
     */
    private function tokenize($source)
    {
        return $this->getTokenizer()->scan($source,
$this->delimiters);
    }

    /**
     * Helper method to parse a Mustache template.
     *
     * @see Mustache_Parser::parse
     *
     * @param string $source
     *
     * @return array Token tree
     */
    private function parse($source)
    {
        $parser = $this->getParser();
        $parser->setPragmas($this->getPragmas());

        return $parser->parse($this->tokenize($source));
    }

    /**
     * Helper method to compile a Mustache template.
     *
     * @see Mustache_Compiler::compile
     *
     * @param string|Mustache_Source $source
     *
     * @return string generated Mustache template class code
     */
    private function compile($source)
    {
        $name = $this->getTemplateClassName($source);

        $this->log(
            Mustache_Logger::INFO,
            'Compiling template to "{className}"
class',
            array('className' => $name)
        );

        if ($source instanceof Mustache_Source) {
            $source = $source->getSource();
        }
        $tree = $this->parse($source);

        $compiler = $this->getCompiler();
        $compiler->setPragmas($this->getPragmas());

        return $compiler->compile($source, $tree, $name,
isset($this->escape), $this->charset, $this->strictCallables,
$this->entityFlags);
    }

    /**
     * Add a log record if logging is enabled.
     *
     * @param int    $level   The logging level
     * @param string $message The log message
     * @param array  $context The log context
     */
    private function log($level, $message, array $context = array())
    {
        if (isset($this->logger)) {
            $this->logger->log($level, $message, $context);
        }
    }
}
vendor/mustache/mustache/src/Mustache/Exception/InvalidArgumentException.php000064400000000642151160724640023452
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Invalid argument exception.
 */
class Mustache_Exception_InvalidArgumentException extends
InvalidArgumentException implements Mustache_Exception
{
    // This space intentionally left blank.
}
vendor/mustache/mustache/src/Mustache/Exception/LogicException.php000064400000000603151160724640021413
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Logic exception.
 */
class Mustache_Exception_LogicException extends LogicException implements
Mustache_Exception
{
    // This space intentionally left blank.
}
vendor/mustache/mustache/src/Mustache/Exception/RuntimeException.php000064400000000611151160724640022000
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Runtime exception.
 */
class Mustache_Exception_RuntimeException extends RuntimeException
implements Mustache_Exception
{
    // This space intentionally left blank.
}
vendor/mustache/mustache/src/Mustache/Exception/SyntaxException.php000064400000001631151160724640021646
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache syntax exception.
 */
class Mustache_Exception_SyntaxException extends LogicException implements
Mustache_Exception
{
    protected $token;

    /**
     * @param string    $msg
     * @param array     $token
     * @param Exception $previous
     */
    public function __construct($msg, array $token, Exception $previous =
null)
    {
        $this->token = $token;
        if (version_compare(PHP_VERSION, '5.3.0',
'>=')) {
            parent::__construct($msg, 0, $previous);
        } else {
            parent::__construct($msg); // @codeCoverageIgnore
        }
    }

    /**
     * @return array
     */
    public function getToken()
    {
        return $this->token;
    }
}
vendor/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php000064400000001705151160724640023167
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Unknown filter exception.
 */
class Mustache_Exception_UnknownFilterException extends
UnexpectedValueException implements Mustache_Exception
{
    protected $filterName;

    /**
     * @param string    $filterName
     * @param Exception $previous
     */
    public function __construct($filterName, Exception $previous = null)
    {
        $this->filterName = $filterName;
        $message = sprintf('Unknown filter: %s', $filterName);
        if (version_compare(PHP_VERSION, '5.3.0',
'>=')) {
            parent::__construct($message, 0, $previous);
        } else {
            parent::__construct($message); // @codeCoverageIgnore
        }
    }

    public function getFilterName()
    {
        return $this->filterName;
    }
}
vendor/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php000064400000001705151160724640023161
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Unknown helper exception.
 */
class Mustache_Exception_UnknownHelperException extends
InvalidArgumentException implements Mustache_Exception
{
    protected $helperName;

    /**
     * @param string    $helperName
     * @param Exception $previous
     */
    public function __construct($helperName, Exception $previous = null)
    {
        $this->helperName = $helperName;
        $message = sprintf('Unknown helper: %s', $helperName);
        if (version_compare(PHP_VERSION, '5.3.0',
'>=')) {
            parent::__construct($message, 0, $previous);
        } else {
            parent::__construct($message); // @codeCoverageIgnore
        }
    }

    public function getHelperName()
    {
        return $this->helperName;
    }
}
vendor/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php000064400000001733151160724640023516
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Unknown template exception.
 */
class Mustache_Exception_UnknownTemplateException extends
InvalidArgumentException implements Mustache_Exception
{
    protected $templateName;

    /**
     * @param string    $templateName
     * @param Exception $previous
     */
    public function __construct($templateName, Exception $previous = null)
    {
        $this->templateName = $templateName;
        $message = sprintf('Unknown template: %s',
$templateName);
        if (version_compare(PHP_VERSION, '5.3.0',
'>=')) {
            parent::__construct($message, 0, $previous);
        } else {
            parent::__construct($message); // @codeCoverageIgnore
        }
    }

    public function getTemplateName()
    {
        return $this->templateName;
    }
}
vendor/mustache/mustache/src/Mustache/Exception.php000064400000000522151160724640016477
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A Mustache Exception interface.
 */
interface Mustache_Exception
{
    // This space intentionally left blank.
}
vendor/mustache/mustache/src/Mustache/HelperCollection.php000064400000007237151160724640020006
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A collection of helpers for a Mustache instance.
 */
class Mustache_HelperCollection
{
    private $helpers = array();

    /**
     * Helper Collection constructor.
     *
     * Optionally accepts an array (or Traversable) of `$name =>
$helper` pairs.
     *
     * @throws Mustache_Exception_InvalidArgumentException if the $helpers
argument isn't an array or Traversable
     *
     * @param array|Traversable $helpers (default: null)
     */
    public function __construct($helpers = null)
    {
        if ($helpers === null) {
            return;
        }

        if (!is_array($helpers) && !$helpers instanceof
Traversable) {
            throw new
Mustache_Exception_InvalidArgumentException('HelperCollection
constructor expects an array of helpers');
        }

        foreach ($helpers as $name => $helper) {
            $this->add($name, $helper);
        }
    }

    /**
     * Magic mutator.
     *
     * @see Mustache_HelperCollection::add
     *
     * @param string $name
     * @param mixed  $helper
     */
    public function __set($name, $helper)
    {
        $this->add($name, $helper);
    }

    /**
     * Add a helper to this collection.
     *
     * @param string $name
     * @param mixed  $helper
     */
    public function add($name, $helper)
    {
        $this->helpers[$name] = $helper;
    }

    /**
     * Magic accessor.
     *
     * @see Mustache_HelperCollection::get
     *
     * @param string $name
     *
     * @return mixed Helper
     */
    public function __get($name)
    {
        return $this->get($name);
    }

    /**
     * Get a helper by name.
     *
     * @throws Mustache_Exception_UnknownHelperException If helper does not
exist
     *
     * @param string $name
     *
     * @return mixed Helper
     */
    public function get($name)
    {
        if (!$this->has($name)) {
            throw new Mustache_Exception_UnknownHelperException($name);
        }

        return $this->helpers[$name];
    }

    /**
     * Magic isset().
     *
     * @see Mustache_HelperCollection::has
     *
     * @param string $name
     *
     * @return bool True if helper is present
     */
    public function __isset($name)
    {
        return $this->has($name);
    }

    /**
     * Check whether a given helper is present in the collection.
     *
     * @param string $name
     *
     * @return bool True if helper is present
     */
    public function has($name)
    {
        return array_key_exists($name, $this->helpers);
    }

    /**
     * Magic unset().
     *
     * @see Mustache_HelperCollection::remove
     *
     * @param string $name
     */
    public function __unset($name)
    {
        $this->remove($name);
    }

    /**
     * Check whether a given helper is present in the collection.
     *
     * @throws Mustache_Exception_UnknownHelperException if the requested
helper is not present
     *
     * @param string $name
     */
    public function remove($name)
    {
        if (!$this->has($name)) {
            throw new Mustache_Exception_UnknownHelperException($name);
        }

        unset($this->helpers[$name]);
    }

    /**
     * Clear the helper collection.
     *
     * Removes all helpers from this collection
     */
    public function clear()
    {
        $this->helpers = array();
    }

    /**
     * Check whether the helper collection is empty.
     *
     * @return bool True if the collection is empty
     */
    public function isEmpty()
    {
        return empty($this->helpers);
    }
}
vendor/mustache/mustache/src/Mustache/LambdaHelper.php000064400000003734151160724640017071
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Lambda Helper.
 *
 * Passed as the second argument to section lambdas (higher order
sections),
 * giving them access to a `render` method for rendering a string with the
 * current context.
 */
class Mustache_LambdaHelper
{
    private $mustache;
    private $context;
    private $delims;

    /**
     * Mustache Lambda Helper constructor.
     *
     * @param Mustache_Engine  $mustache Mustache engine instance
     * @param Mustache_Context $context  Rendering context
     * @param string           $delims   Optional custom delimiters, in the
format `{{= <% %> =}}`. (default: null)
     */
    public function __construct(Mustache_Engine $mustache, Mustache_Context
$context, $delims = null)
    {
        $this->mustache = $mustache;
        $this->context  = $context;
        $this->delims   = $delims;
    }

    /**
     * Render a string as a Mustache template with the current rendering
context.
     *
     * @param string $string
     *
     * @return string Rendered template
     */
    public function render($string)
    {
        return $this->mustache
            ->loadLambda((string) $string, $this->delims)
            ->renderInternal($this->context);
    }

    /**
     * Render a string as a Mustache template with the current rendering
context.
     *
     * @param string $string
     *
     * @return string Rendered template
     */
    public function __invoke($string)
    {
        return $this->render($string);
    }

    /**
     * Get a Lambda Helper with custom delimiters.
     *
     * @param string $delims Custom delimiters, in the format `{{= <%
%> =}}`
     *
     * @return Mustache_LambdaHelper
     */
    public function withDelimiters($delims)
    {
        return new self($this->mustache, $this->context, $delims);
    }
}
vendor/mustache/mustache/src/Mustache/Loader/ArrayLoader.php000064400000003743151160724640020164
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template array Loader implementation.
 *
 * An ArrayLoader instance loads Mustache Template source by name from an
initial array:
 *
 *     $loader = new ArrayLoader(
 *         'foo' => '{{ bar }}',
 *         'baz' => 'Hey {{ qux }}!'
 *     );
 *
 *     $tpl = $loader->load('foo'); // '{{ bar }}'
 *
 * The ArrayLoader is used internally as a partials loader by
Mustache_Engine instance when an array of partials
 * is set. It can also be used as a quick-and-dirty Template loader.
 */
class Mustache_Loader_ArrayLoader implements Mustache_Loader,
Mustache_Loader_MutableLoader
{
    private $templates;

    /**
     * ArrayLoader constructor.
     *
     * @param array $templates Associative array of Template source
(default: array())
     */
    public function __construct(array $templates = array())
    {
        $this->templates = $templates;
    }

    /**
     * Load a Template.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found
     *
     * @param string $name
     *
     * @return string Mustache Template source
     */
    public function load($name)
    {
        if (!isset($this->templates[$name])) {
            throw new Mustache_Exception_UnknownTemplateException($name);
        }

        return $this->templates[$name];
    }

    /**
     * Set an associative array of Template sources for this loader.
     *
     * @param array $templates
     */
    public function setTemplates(array $templates)
    {
        $this->templates = $templates;
    }

    /**
     * Set a Template source by name.
     *
     * @param string $name
     * @param string $template Mustache Template source
     */
    public function setTemplate($name, $template)
    {
        $this->templates[$name] = $template;
    }
}
vendor/mustache/mustache/src/Mustache/Loader/CascadingLoader.php000064400000003372151160724640020760
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A Mustache Template cascading loader implementation, which delegates to
other
 * Loader instances.
 */
class Mustache_Loader_CascadingLoader implements Mustache_Loader
{
    private $loaders;

    /**
     * Construct a CascadingLoader with an array of loaders.
     *
     *     $loader = new Mustache_Loader_CascadingLoader(array(
     *         new Mustache_Loader_InlineLoader(__FILE__,
__COMPILER_HALT_OFFSET__),
     *         new
Mustache_Loader_FilesystemLoader(__DIR__.'/templates')
     *     ));
     *
     * @param Mustache_Loader[] $loaders
     */
    public function __construct(array $loaders = array())
    {
        $this->loaders = array();
        foreach ($loaders as $loader) {
            $this->addLoader($loader);
        }
    }

    /**
     * Add a Loader instance.
     *
     * @param Mustache_Loader $loader
     */
    public function addLoader(Mustache_Loader $loader)
    {
        $this->loaders[] = $loader;
    }

    /**
     * Load a Template by name.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found
     *
     * @param string $name
     *
     * @return string Mustache Template source
     */
    public function load($name)
    {
        foreach ($this->loaders as $loader) {
            try {
                return $loader->load($name);
            } catch (Mustache_Exception_UnknownTemplateException $e) {
                // do nothing, check the next loader.
            }
        }

        throw new Mustache_Exception_UnknownTemplateException($name);
    }
}
vendor/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php000064400000010323151160724640021222
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template filesystem Loader implementation.
 *
 * A FilesystemLoader instance loads Mustache Template source from the
filesystem by name:
 *
 *     $loader = new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views');
 *     $tpl = $loader->load('foo'); // equivalent to
`file_get_contents(dirname(__FILE__).'/views/foo.mustache');
 *
 * This is probably the most useful Mustache Loader implementation. It can
be used for partials and normal Templates:
 *
 *     $m = new Mustache(array(
 *          'loader'          => new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views'),
 *          'partials_loader' => new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views/partials'),
 *     ));
 */
class Mustache_Loader_FilesystemLoader implements Mustache_Loader
{
    private $baseDir;
    private $extension = '.mustache';
    private $templates = array();

    /**
     * Mustache filesystem Loader constructor.
     *
     * Passing an $options array allows overriding certain Loader options
during instantiation:
     *
     *     $options = array(
     *         // The filename extension used for Mustache templates.
Defaults to '.mustache'
     *         'extension' => '.ms',
     *     );
     *
     * @throws Mustache_Exception_RuntimeException if $baseDir does not
exist
     *
     * @param string $baseDir Base directory containing Mustache template
files
     * @param array  $options Array of Loader options (default: array())
     */
    public function __construct($baseDir, array $options = array())
    {
        $this->baseDir = $baseDir;

        if (strpos($this->baseDir, '://') === false) {
            $this->baseDir = realpath($this->baseDir);
        }

        if ($this->shouldCheckPath() &&
!is_dir($this->baseDir)) {
            throw new
Mustache_Exception_RuntimeException(sprintf('FilesystemLoader baseDir
must be a directory: %s', $baseDir));
        }

        if (array_key_exists('extension', $options)) {
            if (empty($options['extension'])) {
                $this->extension = '';
            } else {
                $this->extension = '.' .
ltrim($options['extension'], '.');
            }
        }
    }

    /**
     * Load a Template by name.
     *
     *     $loader = new
Mustache_Loader_FilesystemLoader(dirname(__FILE__).'/views');
     *     $loader->load('admin/dashboard'); // loads
"./views/admin/dashboard.mustache";
     *
     * @param string $name
     *
     * @return string Mustache Template source
     */
    public function load($name)
    {
        if (!isset($this->templates[$name])) {
            $this->templates[$name] = $this->loadFile($name);
        }

        return $this->templates[$name];
    }

    /**
     * Helper function for loading a Mustache file by name.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found
     *
     * @param string $name
     *
     * @return string Mustache Template source
     */
    protected function loadFile($name)
    {
        $fileName = $this->getFileName($name);

        if ($this->shouldCheckPath() && !file_exists($fileName))
{
            throw new Mustache_Exception_UnknownTemplateException($name);
        }

        return file_get_contents($fileName);
    }

    /**
     * Helper function for getting a Mustache template file name.
     *
     * @param string $name
     *
     * @return string Template file name
     */
    protected function getFileName($name)
    {
        $fileName = $this->baseDir . '/' . $name;
        if (substr($fileName, 0 - strlen($this->extension)) !==
$this->extension) {
            $fileName .= $this->extension;
        }

        return $fileName;
    }

    /**
     * Only check if baseDir is a directory and requested templates are
files if
     * baseDir is using the filesystem stream wrapper.
     *
     * @return bool Whether to check `is_dir` and `file_exists`
     */
    protected function shouldCheckPath()
    {
        return strpos($this->baseDir, '://') === false ||
strpos($this->baseDir, 'file://') === 0;
    }
}
vendor/mustache/mustache/src/Mustache/Loader/InlineLoader.php000064400000007356151160724640020330
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A Mustache Template loader for inline templates.
 *
 * With the InlineLoader, templates can be defined at the end of any PHP
source
 * file:
 *
 *     $loader  = new Mustache_Loader_InlineLoader(__FILE__,
__COMPILER_HALT_OFFSET__);
 *     $hello   = $loader->load('hello');
 *     $goodbye = $loader->load('goodbye');
 *
 *     __halt_compiler();
 *
 *     @@ hello
 *     Hello, {{ planet }}!
 *
 *     @@ goodbye
 *     Goodbye, cruel {{ planet }}
 *
 * Templates are deliniated by lines containing only `@@ name`.
 *
 * The InlineLoader is well-suited to micro-frameworks such as Silex:
 *
 *     $app->register(new MustacheServiceProvider, array(
 *         'mustache.loader' => new
Mustache_Loader_InlineLoader(__FILE__, __COMPILER_HALT_OFFSET__)
 *     ));
 *
 *     $app->get('/{name}', function ($name) use ($app) {
 *         return $app['mustache']->render('hello',
compact('name'));
 *     })
 *     ->value('name', 'world');
 *
 *     // ...
 *
 *     __halt_compiler();
 *
 *     @@ hello
 *     Hello, {{ name }}!
 */
class Mustache_Loader_InlineLoader implements Mustache_Loader
{
    protected $fileName;
    protected $offset;
    protected $templates;

    /**
     * The InlineLoader requires a filename and offset to process
templates.
     *
     * The magic constants `__FILE__` and `__COMPILER_HALT_OFFSET__` are
usually
     * perfectly suited to the job:
     *
     *     $loader = new Mustache_Loader_InlineLoader(__FILE__,
__COMPILER_HALT_OFFSET__);
     *
     * Note that this only works if the loader is instantiated inside the
same
     * file as the inline templates. If the templates are located in
another
     * file, it would be necessary to manually specify the filename and
offset.
     *
     * @param string $fileName The file to parse for inline templates
     * @param int    $offset   A string offset for the start of the
templates.
     *                         This usually coincides with the
`__halt_compiler`
     *                         call, and the `__COMPILER_HALT_OFFSET__`
     */
    public function __construct($fileName, $offset)
    {
        if (!is_file($fileName)) {
            throw new
Mustache_Exception_InvalidArgumentException('InlineLoader expects a
valid filename.');
        }

        if (!is_int($offset) || $offset < 0) {
            throw new
Mustache_Exception_InvalidArgumentException('InlineLoader expects a
valid file offset.');
        }

        $this->fileName = $fileName;
        $this->offset   = $offset;
    }

    /**
     * Load a Template by name.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found
     *
     * @param string $name
     *
     * @return string Mustache Template source
     */
    public function load($name)
    {
        $this->loadTemplates();

        if (!array_key_exists($name, $this->templates)) {
            throw new Mustache_Exception_UnknownTemplateException($name);
        }

        return $this->templates[$name];
    }

    /**
     * Parse and load templates from the end of a source file.
     */
    protected function loadTemplates()
    {
        if ($this->templates === null) {
            $this->templates = array();
            $data = file_get_contents($this->fileName, false, null,
$this->offset);
            foreach (preg_split("/^@@(?= [\w\d\.]+$)/m", $data,
-1) as $chunk) {
                if (trim($chunk)) {
                    list($name, $content)         = explode("\n",
$chunk, 2);
                    $this->templates[trim($name)] = trim($content);
                }
            }
        }
    }
}
vendor/mustache/mustache/src/Mustache/Loader/MutableLoader.php000064400000001260151160724640020467
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template mutable Loader interface.
 */
interface Mustache_Loader_MutableLoader
{
    /**
     * Set an associative array of Template sources for this loader.
     *
     * @param array $templates
     */
    public function setTemplates(array $templates);

    /**
     * Set a Template source by name.
     *
     * @param string $name
     * @param string $template Mustache Template source
     */
    public function setTemplate($name, $template);
}
vendor/mustache/mustache/src/Mustache/Loader/ProductionFilesystemLoader.php000064400000005546151160724640023304
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template production filesystem Loader implementation.
 *
 * A production-ready FilesystemLoader, which doesn't require reading
a file if it already exists in the template cache.
 *
 * {@inheritdoc}
 */
class Mustache_Loader_ProductionFilesystemLoader extends
Mustache_Loader_FilesystemLoader
{
    private $statProps;

    /**
     * Mustache production filesystem Loader constructor.
     *
     * Passing an $options array allows overriding certain Loader options
during instantiation:
     *
     *     $options = array(
     *         // The filename extension used for Mustache templates.
Defaults to '.mustache'
     *         'extension' => '.ms',
     *         'stat_props' => array('size',
'mtime'),
     *     );
     *
     * Specifying 'stat_props' overrides the stat properties used
to invalidate the template cache. By default, this
     * uses 'mtime' and 'size', but this can be set to
any of the properties supported by stat():
     *
     *     http://php.net/manual/en/function.stat.php
     *
     * You can also disable filesystem stat entirely:
     *
     *     $options = array('stat_props' => null);
     *
     * But with great power comes great responsibility. Namely, if you
disable stat-based cache invalidation,
     * YOU MUST CLEAR THE TEMPLATE CACHE YOURSELF when your templates
change. Make it part of your build or deploy
     * process so you don't forget!
     *
     * @throws Mustache_Exception_RuntimeException if $baseDir does not
exist.
     *
     * @param string $baseDir Base directory containing Mustache template
files.
     * @param array  $options Array of Loader options (default: array())
     */
    public function __construct($baseDir, array $options = array())
    {
        parent::__construct($baseDir, $options);

        if (array_key_exists('stat_props', $options)) {
            if (empty($options['stat_props'])) {
                $this->statProps = array();
            } else {
                $this->statProps = $options['stat_props'];
            }
        } else {
            $this->statProps = array('size',
'mtime');
        }
    }

    /**
     * Helper function for loading a Mustache file by name.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found.
     *
     * @param string $name
     *
     * @return Mustache_Source Mustache Template source
     */
    protected function loadFile($name)
    {
        $fileName = $this->getFileName($name);

        if (!file_exists($fileName)) {
            throw new Mustache_Exception_UnknownTemplateException($name);
        }

        return new Mustache_Source_FilesystemSource($fileName,
$this->statProps);
    }
}
vendor/mustache/mustache/src/Mustache/Loader/StringLoader.php000064400000001720151160724640020345
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template string Loader implementation.
 *
 * A StringLoader instance is essentially a noop. It simply passes the
'name' argument straight through:
 *
 *     $loader = new StringLoader;
 *     $tpl = $loader->load('{{ foo }}'); // '{{ foo
}}'
 *
 * This is the default Template Loader instance used by Mustache:
 *
 *     $m = new Mustache;
 *     $tpl = $m->loadTemplate('{{ foo }}');
 *     echo $tpl->render(array('foo' => 'bar'));
// "bar"
 */
class Mustache_Loader_StringLoader implements Mustache_Loader
{
    /**
     * Load a Template by source.
     *
     * @param string $name Mustache Template source
     *
     * @return string Mustache Template source
     */
    public function load($name)
    {
        return $name;
    }
}
vendor/mustache/mustache/src/Mustache/Loader.php000064400000001102151160724640015742
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Template Loader interface.
 */
interface Mustache_Loader
{
    /**
     * Load a Template by name.
     *
     * @throws Mustache_Exception_UnknownTemplateException If a template
file is not found
     *
     * @param string $name
     *
     * @return string|Mustache_Source Mustache Template source
     */
    public function load($name);
}
vendor/mustache/mustache/src/Mustache/Logger/AbstractLogger.php000064400000006166151160724640020675
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * This is a simple Logger implementation that other Loggers can inherit
from.
 *
 * This is identical to the Psr\Log\AbstractLogger.
 *
 * It simply delegates all log-level-specific methods to the `log` method
to
 * reduce boilerplate code that a simple Logger that does the same thing
with
 * messages regardless of the error level has to implement.
 */
abstract class Mustache_Logger_AbstractLogger implements Mustache_Logger
{
    /**
     * System is unusable.
     *
     * @param string $message
     * @param array  $context
     */
    public function emergency($message, array $context = array())
    {
        $this->log(Mustache_Logger::EMERGENCY, $message, $context);
    }

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string $message
     * @param array  $context
     */
    public function alert($message, array $context = array())
    {
        $this->log(Mustache_Logger::ALERT, $message, $context);
    }

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string $message
     * @param array  $context
     */
    public function critical($message, array $context = array())
    {
        $this->log(Mustache_Logger::CRITICAL, $message, $context);
    }

    /**
     * Runtime errors that do not require immediate action but should
typically
     * be logged and monitored.
     *
     * @param string $message
     * @param array  $context
     */
    public function error($message, array $context = array())
    {
        $this->log(Mustache_Logger::ERROR, $message, $context);
    }

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable
things
     * that are not necessarily wrong.
     *
     * @param string $message
     * @param array  $context
     */
    public function warning($message, array $context = array())
    {
        $this->log(Mustache_Logger::WARNING, $message, $context);
    }

    /**
     * Normal but significant events.
     *
     * @param string $message
     * @param array  $context
     */
    public function notice($message, array $context = array())
    {
        $this->log(Mustache_Logger::NOTICE, $message, $context);
    }

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string $message
     * @param array  $context
     */
    public function info($message, array $context = array())
    {
        $this->log(Mustache_Logger::INFO, $message, $context);
    }

    /**
     * Detailed debug information.
     *
     * @param string $message
     * @param array  $context
     */
    public function debug($message, array $context = array())
    {
        $this->log(Mustache_Logger::DEBUG, $message, $context);
    }
}
vendor/mustache/mustache/src/Mustache/Logger/StreamLogger.php000064400000012671151160724640020363
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A Mustache Stream Logger.
 *
 * The Stream Logger wraps a file resource instance (such as a stream) or a
 * stream URL. All log messages over the threshold level will be appended
to
 * this stream.
 *
 * Hint: Try `php://stderr` for your stream URL.
 */
class Mustache_Logger_StreamLogger extends Mustache_Logger_AbstractLogger
{
    protected static $levels = array(
        self::DEBUG     => 100,
        self::INFO      => 200,
        self::NOTICE    => 250,
        self::WARNING   => 300,
        self::ERROR     => 400,
        self::CRITICAL  => 500,
        self::ALERT     => 550,
        self::EMERGENCY => 600,
    );

    protected $level;
    protected $stream = null;
    protected $url    = null;

    /**
     * @throws InvalidArgumentException if the logging level is unknown
     *
     * @param resource|string $stream Resource instance or URL
     * @param int             $level  The minimum logging level at which
this handler will be triggered
     */
    public function __construct($stream, $level = Mustache_Logger::ERROR)
    {
        $this->setLevel($level);

        if (is_resource($stream)) {
            $this->stream = $stream;
        } else {
            $this->url = $stream;
        }
    }

    /**
     * Close stream resources.
     */
    public function __destruct()
    {
        if (is_resource($this->stream)) {
            fclose($this->stream);
        }
    }

    /**
     * Set the minimum logging level.
     *
     * @throws Mustache_Exception_InvalidArgumentException if the logging
level is unknown
     *
     * @param int $level The minimum logging level which will be written
     */
    public function setLevel($level)
    {
        if (!array_key_exists($level, self::$levels)) {
            throw new
Mustache_Exception_InvalidArgumentException(sprintf('Unexpected
logging level: %s', $level));
        }

        $this->level = $level;
    }

    /**
     * Get the current minimum logging level.
     *
     * @return int
     */
    public function getLevel()
    {
        return $this->level;
    }

    /**
     * Logs with an arbitrary level.
     *
     * @throws Mustache_Exception_InvalidArgumentException if the logging
level is unknown
     *
     * @param mixed  $level
     * @param string $message
     * @param array  $context
     */
    public function log($level, $message, array $context = array())
    {
        if (!array_key_exists($level, self::$levels)) {
            throw new
Mustache_Exception_InvalidArgumentException(sprintf('Unexpected
logging level: %s', $level));
        }

        if (self::$levels[$level] >= self::$levels[$this->level]) {
            $this->writeLog($level, $message, $context);
        }
    }

    /**
     * Write a record to the log.
     *
     * @throws Mustache_Exception_LogicException   If neither a stream
resource nor url is present
     * @throws Mustache_Exception_RuntimeException If the stream url cannot
be opened
     *
     * @param int    $level   The logging level
     * @param string $message The log message
     * @param array  $context The log context
     */
    protected function writeLog($level, $message, array $context = array())
    {
        if (!is_resource($this->stream)) {
            if (!isset($this->url)) {
                throw new Mustache_Exception_LogicException('Missing
stream url, the stream can not be opened. This may be caused by a premature
call to close().');
            }

            $this->stream = fopen($this->url, 'a');
            if (!is_resource($this->stream)) {
                // @codeCoverageIgnoreStart
                throw new
Mustache_Exception_RuntimeException(sprintf('The stream or file
"%s" could not be opened.', $this->url));
                // @codeCoverageIgnoreEnd
            }
        }

        fwrite($this->stream, self::formatLine($level, $message,
$context));
    }

    /**
     * Gets the name of the logging level.
     *
     * @throws InvalidArgumentException if the logging level is unknown
     *
     * @param int $level
     *
     * @return string
     */
    protected static function getLevelName($level)
    {
        return strtoupper($level);
    }

    /**
     * Format a log line for output.
     *
     * @param int    $level   The logging level
     * @param string $message The log message
     * @param array  $context The log context
     *
     * @return string
     */
    protected static function formatLine($level, $message, array $context =
array())
    {
        return sprintf(
            "%s: %s\n",
            self::getLevelName($level),
            self::interpolateMessage($message, $context)
        );
    }

    /**
     * Interpolate context values into the message placeholders.
     *
     * @param string $message
     * @param array  $context
     *
     * @return string
     */
    protected static function interpolateMessage($message, array $context =
array())
    {
        if (strpos($message, '{') === false) {
            return $message;
        }

        // build a replacement array with braces around the context keys
        $replace = array();
        foreach ($context as $key => $val) {
            $replace['{' . $key . '}'] = $val;
        }

        // interpolate replacement values into the the message and return
        return strtr($message, $replace);
    }
}
vendor/mustache/mustache/src/Mustache/Logger.php000064400000006444151160724640015771
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Describes a Mustache logger instance.
 *
 * This is identical to the Psr\Log\LoggerInterface.
 *
 * The message MUST be a string or object implementing __toString().
 *
 * The message MAY contain placeholders in the form: {foo} where foo
 * will be replaced by the context data in key "foo".
 *
 * The context array can contain arbitrary data, the only assumption that
 * can be made by implementors is that if an Exception instance is given
 * to produce a stack trace, it MUST be in a key named
"exception".
 *
 * See
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 * for the full interface specification.
 */
interface Mustache_Logger
{
    /**
     * Psr\Log compatible log levels.
     */
    const EMERGENCY = 'emergency';
    const ALERT     = 'alert';
    const CRITICAL  = 'critical';
    const ERROR     = 'error';
    const WARNING   = 'warning';
    const NOTICE    = 'notice';
    const INFO      = 'info';
    const DEBUG     = 'debug';

    /**
     * System is unusable.
     *
     * @param string $message
     * @param array  $context
     */
    public function emergency($message, array $context = array());

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string $message
     * @param array  $context
     */
    public function alert($message, array $context = array());

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string $message
     * @param array  $context
     */
    public function critical($message, array $context = array());

    /**
     * Runtime errors that do not require immediate action but should
typically
     * be logged and monitored.
     *
     * @param string $message
     * @param array  $context
     */
    public function error($message, array $context = array());

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable
things
     * that are not necessarily wrong.
     *
     * @param string $message
     * @param array  $context
     */
    public function warning($message, array $context = array());

    /**
     * Normal but significant events.
     *
     * @param string $message
     * @param array  $context
     */
    public function notice($message, array $context = array());

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string $message
     * @param array  $context
     */
    public function info($message, array $context = array());

    /**
     * Detailed debug information.
     *
     * @param string $message
     * @param array  $context
     */
    public function debug($message, array $context = array());

    /**
     * Logs with an arbitrary level.
     *
     * @param mixed  $level
     * @param string $message
     * @param array  $context
     */
    public function log($level, $message, array $context = array());
}
vendor/mustache/mustache/src/Mustache/Parser.php000064400000025170151160724640016003
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Parser class.
 *
 * This class is responsible for turning a set of Mustache tokens into a
parse tree.
 */
class Mustache_Parser
{
    private $lineNum;
    private $lineTokens;
    private $pragmas;
    private $defaultPragmas = array();

    private $pragmaFilters;
    private $pragmaBlocks;

    /**
     * Process an array of Mustache tokens and convert them into a parse
tree.
     *
     * @param array $tokens Set of Mustache tokens
     *
     * @return array Mustache token parse tree
     */
    public function parse(array $tokens = array())
    {
        $this->lineNum    = -1;
        $this->lineTokens = 0;
        $this->pragmas    = $this->defaultPragmas;

        $this->pragmaFilters =
isset($this->pragmas[Mustache_Engine::PRAGMA_FILTERS]);
        $this->pragmaBlocks  =
isset($this->pragmas[Mustache_Engine::PRAGMA_BLOCKS]);

        return $this->buildTree($tokens);
    }

    /**
     * Enable pragmas across all templates, regardless of the presence of
pragma
     * tags in the individual templates.
     *
     * @internal Users should set global pragmas in Mustache_Engine, not
here :)
     *
     * @param string[] $pragmas
     */
    public function setPragmas(array $pragmas)
    {
        $this->pragmas = array();
        foreach ($pragmas as $pragma) {
            $this->enablePragma($pragma);
        }
        $this->defaultPragmas = $this->pragmas;
    }

    /**
     * Helper method for recursively building a parse tree.
     *
     * @throws Mustache_Exception_SyntaxException when nesting errors or
mismatched section tags are encountered
     *
     * @param array &$tokens Set of Mustache tokens
     * @param array $parent  Parent token (default: null)
     *
     * @return array Mustache Token parse tree
     */
    private function buildTree(array &$tokens, array $parent = null)
    {
        $nodes = array();

        while (!empty($tokens)) {
            $token = array_shift($tokens);

            if ($token[Mustache_Tokenizer::LINE] === $this->lineNum) {
                $this->lineTokens++;
            } else {
                $this->lineNum    = $token[Mustache_Tokenizer::LINE];
                $this->lineTokens = 0;
            }

            if ($this->pragmaFilters &&
isset($token[Mustache_Tokenizer::NAME])) {
                list($name, $filters) =
$this->getNameAndFilters($token[Mustache_Tokenizer::NAME]);
                if (!empty($filters)) {
                    $token[Mustache_Tokenizer::NAME]    = $name;
                    $token[Mustache_Tokenizer::FILTERS] = $filters;
                }
            }

            switch ($token[Mustache_Tokenizer::TYPE]) {
                case Mustache_Tokenizer::T_DELIM_CHANGE:
                    $this->checkIfTokenIsAllowedInParent($parent,
$token);
                    $this->clearStandaloneLines($nodes, $tokens);
                    break;

                case Mustache_Tokenizer::T_SECTION:
                case Mustache_Tokenizer::T_INVERTED:
                    $this->checkIfTokenIsAllowedInParent($parent,
$token);
                    $this->clearStandaloneLines($nodes, $tokens);
                    $nodes[] = $this->buildTree($tokens, $token);
                    break;

                case Mustache_Tokenizer::T_END_SECTION:
                    if (!isset($parent)) {
                        $msg = sprintf(
                            'Unexpected closing tag: /%s on line
%d',
                            $token[Mustache_Tokenizer::NAME],
                            $token[Mustache_Tokenizer::LINE]
                        );
                        throw new Mustache_Exception_SyntaxException($msg,
$token);
                    }

                    if ($token[Mustache_Tokenizer::NAME] !==
$parent[Mustache_Tokenizer::NAME]) {
                        $msg = sprintf(
                            'Nesting error: %s (on line %d) vs. %s (on
line %d)',
                            $parent[Mustache_Tokenizer::NAME],
                            $parent[Mustache_Tokenizer::LINE],
                            $token[Mustache_Tokenizer::NAME],
                            $token[Mustache_Tokenizer::LINE]
                        );
                        throw new Mustache_Exception_SyntaxException($msg,
$token);
                    }

                    $this->clearStandaloneLines($nodes, $tokens);
                    $parent[Mustache_Tokenizer::END]   =
$token[Mustache_Tokenizer::INDEX];
                    $parent[Mustache_Tokenizer::NODES] = $nodes;

                    return $parent;

                case Mustache_Tokenizer::T_PARTIAL:
                    $this->checkIfTokenIsAllowedInParent($parent,
$token);
                    //store the whitespace prefix for laters!
                    if ($indent = $this->clearStandaloneLines($nodes,
$tokens)) {
                        $token[Mustache_Tokenizer::INDENT] =
$indent[Mustache_Tokenizer::VALUE];
                    }
                    $nodes[] = $token;
                    break;

                case Mustache_Tokenizer::T_PARENT:
                    $this->checkIfTokenIsAllowedInParent($parent,
$token);
                    $nodes[] = $this->buildTree($tokens, $token);
                    break;

                case Mustache_Tokenizer::T_BLOCK_VAR:
                    if ($this->pragmaBlocks) {
                        // BLOCKS pragma is enabled, let's do this!
                        if ($parent[Mustache_Tokenizer::TYPE] ===
Mustache_Tokenizer::T_PARENT) {
                            $token[Mustache_Tokenizer::TYPE] =
Mustache_Tokenizer::T_BLOCK_ARG;
                        }
                        $this->clearStandaloneLines($nodes, $tokens);
                        $nodes[] = $this->buildTree($tokens, $token);
                    } else {
                        // pretend this was just a normal
"escaped" token...
                        $token[Mustache_Tokenizer::TYPE] =
Mustache_Tokenizer::T_ESCAPED;
                        // TODO: figure out how to figure out if there was
a space after this dollar:
                        $token[Mustache_Tokenizer::NAME] = '$' .
$token[Mustache_Tokenizer::NAME];
                        $nodes[] = $token;
                    }
                    break;

                case Mustache_Tokenizer::T_PRAGMA:
                   
$this->enablePragma($token[Mustache_Tokenizer::NAME]);
                    // no break

                case Mustache_Tokenizer::T_COMMENT:
                    $this->clearStandaloneLines($nodes, $tokens);
                    $nodes[] = $token;
                    break;

                default:
                    $nodes[] = $token;
                    break;
            }
        }

        if (isset($parent)) {
            $msg = sprintf(
                'Missing closing tag: %s opened on line %d',
                $parent[Mustache_Tokenizer::NAME],
                $parent[Mustache_Tokenizer::LINE]
            );
            throw new Mustache_Exception_SyntaxException($msg, $parent);
        }

        return $nodes;
    }

    /**
     * Clear standalone line tokens.
     *
     * Returns a whitespace token for indenting partials, if applicable.
     *
     * @param array $nodes  Parsed nodes
     * @param array $tokens Tokens to be parsed
     *
     * @return array|null Resulting indent token, if any
     */
    private function clearStandaloneLines(array &$nodes, array
&$tokens)
    {
        if ($this->lineTokens > 1) {
            // this is the third or later node on this line, so it
can't be standalone
            return;
        }

        $prev = null;
        if ($this->lineTokens === 1) {
            // this is the second node on this line, so it can't be
standalone
            // unless the previous node is whitespace.
            if ($prev = end($nodes)) {
                if (!$this->tokenIsWhitespace($prev)) {
                    return;
                }
            }
        }

        if ($next = reset($tokens)) {
            // If we're on a new line, bail.
            if ($next[Mustache_Tokenizer::LINE] !== $this->lineNum) {
                return;
            }

            // If the next token isn't whitespace, bail.
            if (!$this->tokenIsWhitespace($next)) {
                return;
            }

            if (count($tokens) !== 1) {
                // Unless it's the last token in the template, the
next token
                // must end in newline for this to be standalone.
                if (substr($next[Mustache_Tokenizer::VALUE], -1) !==
"\n") {
                    return;
                }
            }

            // Discard the whitespace suffix
            array_shift($tokens);
        }

        if ($prev) {
            // Return the whitespace prefix, if any
            return array_pop($nodes);
        }
    }

    /**
     * Check whether token is a whitespace token.
     *
     * True if token type is T_TEXT and value is all whitespace characters.
     *
     * @param array $token
     *
     * @return bool True if token is a whitespace token
     */
    private function tokenIsWhitespace(array $token)
    {
        if ($token[Mustache_Tokenizer::TYPE] ===
Mustache_Tokenizer::T_TEXT) {
            return preg_match('/^\s*$/',
$token[Mustache_Tokenizer::VALUE]);
        }

        return false;
    }

    /**
     * Check whether a token is allowed inside a parent tag.
     *
     * @throws Mustache_Exception_SyntaxException if an invalid token is
found inside a parent tag
     *
     * @param array|null $parent
     * @param array      $token
     */
    private function checkIfTokenIsAllowedInParent($parent, array $token)
    {
        if ($parent[Mustache_Tokenizer::TYPE] ===
Mustache_Tokenizer::T_PARENT) {
            throw new Mustache_Exception_SyntaxException('Illegal
content in < parent tag', $token);
        }
    }

    /**
     * Split a tag name into name and filters.
     *
     * @param string $name
     *
     * @return array [Tag name, Array of filters]
     */
    private function getNameAndFilters($name)
    {
        $filters = array_map('trim', explode('|',
$name));
        $name    = array_shift($filters);

        return array($name, $filters);
    }

    /**
     * Enable a pragma.
     *
     * @param string $name
     */
    private function enablePragma($name)
    {
        $this->pragmas[$name] = true;

        switch ($name) {
            case Mustache_Engine::PRAGMA_BLOCKS:
                $this->pragmaBlocks = true;
                break;

            case Mustache_Engine::PRAGMA_FILTERS:
                $this->pragmaFilters = true;
                break;
        }
    }
}
vendor/mustache/mustache/src/Mustache/Source/FilesystemSource.php000064400000003552151160724640021314
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache template Filesystem Source.
 *
 * This template Source uses stat() to generate the Source key, so that
using
 * pre-compiled templates doesn't require hitting the disk to read the
source.
 * It is more suitable for production use, and is used by default in the
 * ProductionFilesystemLoader.
 */
class Mustache_Source_FilesystemSource implements Mustache_Source
{
    private $fileName;
    private $statProps;
    private $stat;

    /**
     * Filesystem Source constructor.
     *
     * @param string $fileName
     * @param array  $statProps
     */
    public function __construct($fileName, array $statProps)
    {
        $this->fileName = $fileName;
        $this->statProps = $statProps;
    }

    /**
     * Get the Source key (used to generate the compiled class name).
     *
     * @throws RuntimeException when a source file cannot be read
     *
     * @return string
     */
    public function getKey()
    {
        $chunks = array(
            'fileName' => $this->fileName,
        );

        if (!empty($this->statProps)) {
            if (!isset($this->stat)) {
                $this->stat = @stat($this->fileName);
            }

            if ($this->stat === false) {
                throw new RuntimeException(sprintf('Failed to read
source file "%s".', $this->fileName));
            }

            foreach ($this->statProps as $prop) {
                $chunks[$prop] = $this->stat[$prop];
            }
        }

        return json_encode($chunks);
    }

    /**
     * Get the template Source.
     *
     * @return string
     */
    public function getSource()
    {
        return file_get_contents($this->fileName);
    }
}
vendor/mustache/mustache/src/Mustache/Source.php000064400000002032151160724640015777
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache template Source interface.
 */
interface Mustache_Source
{
    /**
     * Get the Source key (used to generate the compiled class name).
     *
     * This must return a distinct key for each template source. For
example, an
     * MD5 hash of the template contents would probably do the trick. The
     * ProductionFilesystemLoader uses mtime and file path. If your
production
     * source directory is under version control, you could use the current
Git
     * rev and the file path...
     *
     * @throws RuntimeException when a source file cannot be read
     *
     * @return string
     */
    public function getKey();

    /**
     * Get the template Source.
     *
     * @throws RuntimeException when a source file cannot be read
     *
     * @return string
     */
    public function getSource();
}
vendor/mustache/mustache/src/Mustache/Template.php000064400000011613151160724640016317
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Abstract Mustache Template class.
 *
 * @abstract
 */
abstract class Mustache_Template
{
    /**
     * @var Mustache_Engine
     */
    protected $mustache;

    /**
     * @var bool
     */
    protected $strictCallables = false;

    /**
     * Mustache Template constructor.
     *
     * @param Mustache_Engine $mustache
     */
    public function __construct(Mustache_Engine $mustache)
    {
        $this->mustache = $mustache;
    }

    /**
     * Mustache Template instances can be treated as a function and
rendered by simply calling them.
     *
     *     $m = new Mustache_Engine;
     *     $tpl = $m->loadTemplate('Hello, {{ name }}!');
     *     echo $tpl(array('name' => 'World')); //
"Hello, World!"
     *
     * @see Mustache_Template::render
     *
     * @param mixed $context Array or object rendering context (default:
array())
     *
     * @return string Rendered template
     */
    public function __invoke($context = array())
    {
        return $this->render($context);
    }

    /**
     * Render this template given the rendering context.
     *
     * @param mixed $context Array or object rendering context (default:
array())
     *
     * @return string Rendered template
     */
    public function render($context = array())
    {
        return $this->renderInternal(
            $this->prepareContextStack($context)
        );
    }

    /**
     * Internal rendering method implemented by Mustache Template concrete
subclasses.
     *
     * This is where the magic happens :)
     *
     * NOTE: This method is not part of the Mustache.php public API.
     *
     * @param Mustache_Context $context
     * @param string           $indent  (default: '')
     *
     * @return string Rendered template
     */
    abstract public function renderInternal(Mustache_Context $context,
$indent = '');

    /**
     * Tests whether a value should be iterated over (e.g. in a section
context).
     *
     * In most languages there are two distinct array types: list and hash
(or whatever you want to call them). Lists
     * should be iterated, hashes should be treated as objects. Mustache
follows this paradigm for Ruby, Javascript,
     * Java, Python, etc.
     *
     * PHP, however, treats lists and hashes as one primitive type: array.
So Mustache.php needs a way to distinguish
     * between between a list of things (numeric, normalized array) and a
set of variables to be used as section context
     * (associative array). In other words, this will be iterated over:
     *
     *     $items = array(
     *         array('name' => 'foo'),
     *         array('name' => 'bar'),
     *         array('name' => 'baz'),
     *     );
     *
     * ... but this will be used as a section context block:
     *
     *     $items = array(
     *         1        => array('name' =>
'foo'),
     *         'banana' => array('name' =>
'bar'),
     *         42       => array('name' =>
'baz'),
     *     );
     *
     * @param mixed $value
     *
     * @return bool True if the value is 'iterable'
     */
    protected function isIterable($value)
    {
        switch (gettype($value)) {
            case 'object':
                return $value instanceof Traversable;

            case 'array':
                $i = 0;
                foreach ($value as $k => $v) {
                    if ($k !== $i++) {
                        return false;
                    }
                }

                return true;

            default:
                return false;
        }
    }

    /**
     * Helper method to prepare the Context stack.
     *
     * Adds the Mustache HelperCollection to the stack's top context
frame if helpers are present.
     *
     * @param mixed $context Optional first context frame (default: null)
     *
     * @return Mustache_Context
     */
    protected function prepareContextStack($context = null)
    {
        $stack = new Mustache_Context();

        $helpers = $this->mustache->getHelpers();
        if (!$helpers->isEmpty()) {
            $stack->push($helpers);
        }

        if (!empty($context)) {
            $stack->push($context);
        }

        return $stack;
    }

    /**
     * Resolve a context value.
     *
     * Invoke the value if it is callable, otherwise return the value.
     *
     * @param mixed            $value
     * @param Mustache_Context $context
     *
     * @return string
     */
    protected function resolveValue($value, Mustache_Context $context)
    {
        if (($this->strictCallables ? is_object($value) :
!is_string($value)) && is_callable($value)) {
            return $this->mustache
                ->loadLambda((string) call_user_func($value))
                ->renderInternal($context);
        }

        return $value;
    }
}
vendor/mustache/mustache/src/Mustache/Tokenizer.php000064400000024772151160724640016530
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Mustache Tokenizer class.
 *
 * This class is responsible for turning raw template source into a set of
Mustache tokens.
 */
class Mustache_Tokenizer
{
    // Finite state machine states
    const IN_TEXT     = 0;
    const IN_TAG_TYPE = 1;
    const IN_TAG      = 2;

    // Token types
    const T_SECTION      = '#';
    const T_INVERTED     = '^';
    const T_END_SECTION  = '/';
    const T_COMMENT      = '!';
    const T_PARTIAL      = '>';
    const T_PARENT       = '<';
    const T_DELIM_CHANGE = '=';
    const T_ESCAPED      = '_v';
    const T_UNESCAPED    = '{';
    const T_UNESCAPED_2  = '&';
    const T_TEXT         = '_t';
    const T_PRAGMA       = '%';
    const T_BLOCK_VAR    = '$';
    const T_BLOCK_ARG    = '$arg';

    // Valid token types
    private static $tagTypes = array(
        self::T_SECTION      => true,
        self::T_INVERTED     => true,
        self::T_END_SECTION  => true,
        self::T_COMMENT      => true,
        self::T_PARTIAL      => true,
        self::T_PARENT       => true,
        self::T_DELIM_CHANGE => true,
        self::T_ESCAPED      => true,
        self::T_UNESCAPED    => true,
        self::T_UNESCAPED_2  => true,
        self::T_PRAGMA       => true,
        self::T_BLOCK_VAR    => true,
    );

    // Token properties
    const TYPE    = 'type';
    const NAME    = 'name';
    const OTAG    = 'otag';
    const CTAG    = 'ctag';
    const LINE    = 'line';
    const INDEX   = 'index';
    const END     = 'end';
    const INDENT  = 'indent';
    const NODES   = 'nodes';
    const VALUE   = 'value';
    const FILTERS = 'filters';

    private $state;
    private $tagType;
    private $buffer;
    private $tokens;
    private $seenTag;
    private $line;
    private $otag;
    private $ctag;
    private $otagLen;
    private $ctagLen;

    /**
     * Scan and tokenize template source.
     *
     * @throws Mustache_Exception_SyntaxException when mismatched section
tags are encountered
     *
     * @param string $text       Mustache template source to tokenize
     * @param string $delimiters Optionally, pass initial opening and
closing delimiters (default: null)
     *
     * @return array Set of Mustache tokens
     */
    public function scan($text, $delimiters = null)
    {
        // Setting mbstring.func_overload makes things *really* slow.
        // Let's do everyone a favor and scan this string as ASCII
instead.
        //
        // @codeCoverageIgnoreStart
        $encoding = null;
        if (function_exists('mb_internal_encoding') &&
ini_get('mbstring.func_overload') & 2) {
            $encoding = mb_internal_encoding();
            mb_internal_encoding('ASCII');
        }
        // @codeCoverageIgnoreEnd

        $this->reset();

        if ($delimiters = trim($delimiters)) {
            $this->setDelimiters($delimiters);
        }

        $len = strlen($text);
        for ($i = 0; $i < $len; $i++) {
            switch ($this->state) {
                case self::IN_TEXT:
                    if ($this->tagChange($this->otag,
$this->otagLen, $text, $i)) {
                        $i--;
                        $this->flushBuffer();
                        $this->state = self::IN_TAG_TYPE;
                    } else {
                        $char = $text[$i];
                        $this->buffer .= $char;
                        if ($char === "\n") {
                            $this->flushBuffer();
                            $this->line++;
                        }
                    }
                    break;

                case self::IN_TAG_TYPE:
                    $i += $this->otagLen - 1;
                    $char = $text[$i + 1];
                    if (isset(self::$tagTypes[$char])) {
                        $tag = $char;
                        $this->tagType = $tag;
                    } else {
                        $tag = null;
                        $this->tagType = self::T_ESCAPED;
                    }

                    if ($this->tagType === self::T_DELIM_CHANGE) {
                        $i = $this->changeDelimiters($text, $i);
                        $this->state = self::IN_TEXT;
                    } elseif ($this->tagType === self::T_PRAGMA) {
                        $i = $this->addPragma($text, $i);
                        $this->state = self::IN_TEXT;
                    } else {
                        if ($tag !== null) {
                            $i++;
                        }
                        $this->state = self::IN_TAG;
                    }
                    $this->seenTag = $i;
                    break;

                default:
                    if ($this->tagChange($this->ctag,
$this->ctagLen, $text, $i)) {
                        $token = array(
                            self::TYPE  => $this->tagType,
                            self::NAME  => trim($this->buffer),
                            self::OTAG  => $this->otag,
                            self::CTAG  => $this->ctag,
                            self::LINE  => $this->line,
                            self::INDEX => ($this->tagType ===
self::T_END_SECTION) ? $this->seenTag - $this->otagLen : $i +
$this->ctagLen,
                        );

                        if ($this->tagType === self::T_UNESCAPED) {
                            // Clean up `{{{ tripleStache }}}` style
tokens.
                            if ($this->ctag === '}}') {
                                if (($i + 2 < $len) && $text[$i
+ 2] === '}') {
                                    $i++;
                                } else {
                                    $msg = sprintf(
                                        'Mismatched tag delimiters: %s
on line %d',
                                        $token[self::NAME],
                                        $token[self::LINE]
                                    );

                                    throw new
Mustache_Exception_SyntaxException($msg, $token);
                                }
                            } else {
                                $lastName = $token[self::NAME];
                                if (substr($lastName, -1) ===
'}') {
                                    $token[self::NAME] =
trim(substr($lastName, 0, -1));
                                } else {
                                    $msg = sprintf(
                                        'Mismatched tag delimiters: %s
on line %d',
                                        $token[self::NAME],
                                        $token[self::LINE]
                                    );

                                    throw new
Mustache_Exception_SyntaxException($msg, $token);
                                }
                            }
                        }

                        $this->buffer = '';
                        $i += $this->ctagLen - 1;
                        $this->state = self::IN_TEXT;
                        $this->tokens[] = $token;
                    } else {
                        $this->buffer .= $text[$i];
                    }
                    break;
            }
        }

        $this->flushBuffer();

        // Restore the user's encoding...
        // @codeCoverageIgnoreStart
        if ($encoding) {
            mb_internal_encoding($encoding);
        }
        // @codeCoverageIgnoreEnd

        return $this->tokens;
    }

    /**
     * Helper function to reset tokenizer internal state.
     */
    private function reset()
    {
        $this->state   = self::IN_TEXT;
        $this->tagType = null;
        $this->buffer  = '';
        $this->tokens  = array();
        $this->seenTag = false;
        $this->line    = 0;
        $this->otag    = '{{';
        $this->ctag    = '}}';
        $this->otagLen = 2;
        $this->ctagLen = 2;
    }

    /**
     * Flush the current buffer to a token.
     */
    private function flushBuffer()
    {
        if (strlen($this->buffer) > 0) {
            $this->tokens[] = array(
                self::TYPE  => self::T_TEXT,
                self::LINE  => $this->line,
                self::VALUE => $this->buffer,
            );
            $this->buffer   = '';
        }
    }

    /**
     * Change the current Mustache delimiters. Set new `otag` and `ctag`
values.
     *
     * @param string $text  Mustache template source
     * @param int    $index Current tokenizer index
     *
     * @return int New index value
     */
    private function changeDelimiters($text, $index)
    {
        $startIndex = strpos($text, '=', $index) + 1;
        $close      = '=' . $this->ctag;
        $closeIndex = strpos($text, $close, $index);

        $this->setDelimiters(trim(substr($text, $startIndex, $closeIndex
- $startIndex)));

        $this->tokens[] = array(
            self::TYPE => self::T_DELIM_CHANGE,
            self::LINE => $this->line,
        );

        return $closeIndex + strlen($close) - 1;
    }

    /**
     * Set the current Mustache `otag` and `ctag` delimiters.
     *
     * @param string $delimiters
     */
    private function setDelimiters($delimiters)
    {
        list($otag, $ctag) = explode(' ', $delimiters);
        $this->otag = $otag;
        $this->ctag = $ctag;
        $this->otagLen = strlen($otag);
        $this->ctagLen = strlen($ctag);
    }

    /**
     * Add pragma token.
     *
     * Pragmas are hoisted to the front of the template, so all pragma
tokens
     * will appear at the front of the token list.
     *
     * @param string $text
     * @param int    $index
     *
     * @return int New index value
     */
    private function addPragma($text, $index)
    {
        $end    = strpos($text, $this->ctag, $index);
        $pragma = trim(substr($text, $index + 2, $end - $index - 2));

        // Pragmas are hoisted to the front of the template.
        array_unshift($this->tokens, array(
            self::TYPE => self::T_PRAGMA,
            self::NAME => $pragma,
            self::LINE => 0,
        ));

        return $end + $this->ctagLen - 1;
    }

    /**
     * Test whether it's time to change tags.
     *
     * @param string $tag    Current tag name
     * @param int    $tagLen Current tag name length
     * @param string $text   Mustache template source
     * @param int    $index  Current tokenizer index
     *
     * @return bool True if this is a closing section tag
     */
    private function tagChange($tag, $tagLen, $text, $index)
    {
        return substr($text, $index, $tagLen) === $tag;
    }
}
vendor/mustache/mustache/test/bootstrap.php000064400000003320151160724640015174
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

require dirname(__FILE__) . '/../src/Mustache/Autoloader.php';
Mustache_Autoloader::register();
Mustache_Autoloader::register(dirname(__FILE__) . '/../test');

require dirname(__FILE__) .
'/../vendor/yaml/lib/sfYamlParser.php';

/**
 * Minimal stream wrapper to test protocol-based access to templates.
 */
class TestStream
{
    private $filehandle;

    /**
     * Always returns false.
     *
     * @param string $path
     * @param int    $flags
     *
     * @return array
     */
    public function url_stat($path, $flags)
    {
        return false;
    }

    /**
     * Open the file.
     *
     * @param string $path
     * @param string $mode
     *
     * @return bool
     */
    public function stream_open($path, $mode)
    {
        $path = preg_replace('-^test://-', '', $path);
        $this->filehandle = fopen($path, $mode);

        return $this->filehandle !== false;
    }

    /**
     * @return array
     */
    public function stream_stat()
    {
        return array();
    }

    /**
     * @param int $count
     *
     * @return string
     */
    public function stream_read($count)
    {
        return fgets($this->filehandle, $count);
    }

    /**
     * @return bool
     */
    public function stream_eof()
    {
        return feof($this->filehandle);
    }

    /**
     * @return bool
     */
    public function stream_close()
    {
        return fclose($this->filehandle);
    }
}

if (!stream_wrapper_register('test', 'TestStream')) {
    die('Failed to register protocol');
}
vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Bar.php000064400000000375151160724640021453
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Bar
{
    // nada
}
vendor/mustache/mustache/test/fixtures/autoloader/Mustache/Foo.php000064400000000375151160724640021472
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Foo
{
    // nada
}
vendor/mustache/mustache/test/fixtures/autoloader/NonMustacheClass.php000064400000000401151160724640022376
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class NonMustacheClass
{
    // noop
}
vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/AnchoredDotNotation.php000064400000003735151160724640027132
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class AnchoredDotNotation
{
    public $genres = array(
        array(
            'name'      => 'Punk',
            'subgenres' => array(
                array(
                    'name'      => 'Hardcore',
                    'subgenres' => array(
                        array(
                            'name'      => 'First wave of
black metal',
                            'subgenres' => array(
                                array('name' =>
'Norwegian black metal'),
                                array(
                                    'name'      => 'Death
metal',
                                    'subgenres' => array(
                                        array(
                                            'name'      =>
'Swedish death metal',
                                            'subgenres' =>
array(
                                                array('name'
=> 'New wave of American metal'),
                                            ),
                                        ),
                                    ),
                                ),
                            ),
                        ),
                        array(
                            'name'      => 'Thrash
metal',
                            'subgenres' => array(
                                array('name' =>
'Grindcore'),
                                array(
                                    'name'      =>
'Metalcore',
                                    'subgenres' => array(
                                        array('name' =>
'Nu metal'),
                                    ),
                                ),
                            ),
                        ),
                    ),
                ),
            ),
        ),
    );
}
vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.mustache000064400000000074151160724640030603
0ustar00{{% ANCHORED-DOT }}
{{# genres }}
{{> genre }}
{{/ genres
}}vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/anchored_dot_notation.txt000064400000000436151160724640027613
0ustar00 - Punk
    - Hardcore
       - First wave of black metal
          - Norwegian black metal
          - Death metal
             - Swedish death metal
                - New wave of American metal
       - Thrash metal
          - Grindcore
          - Metalcore
             - Nu metal
vendor/mustache/mustache/test/fixtures/examples/anchored_dot_notation/partials/genre.mustache000064400000000125151160724640027153
0ustar00{{% ANCHORED-DOT }}
 - {{ name }}
{{# .subgenres }}
   {{> genre }}
{{/ .subgenres
}}vendor/mustache/mustache/test/fixtures/examples/blocks/blocks.mustache000064400000000113151160724640022417
0ustar00{{% BLOCKS }}
{{< parent }}
{{$ value }}[{{ . }}]{{/ value }}
{{/ parent
}}vendor/mustache/mustache/test/fixtures/examples/blocks/Blocks.php000064400000000417151160724640021344
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Blocks
{
    public $items = array(1, 2, 3);
}
vendor/mustache/mustache/test/fixtures/examples/blocks/blocks.txt000064400000000014151160724640021425
0ustar00[1]
[2]
[3]
vendor/mustache/mustache/test/fixtures/examples/blocks/partials/parent.mustache000064400000000107151160724640024255
0ustar00{{% BLOCKS }}
{{# items }}
{{$ value }}ignored{{/ value }}
{{/ items
}}vendor/mustache/mustache/test/fixtures/examples/child_context/ChildContext.php000064400000000660151160724640024071
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class ChildContext
{
    public $parent = array(
        'child' => 'child works',
    );

    public $grandparent = array(
        'parent' => array(
            'child' => 'grandchild works',
        ),
    );
}
vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.mustache000064400000000161151160724640025346
0ustar00<h1>{{#parent}}{{child}}{{/parent}}</h1>
<h2>{{#grandparent}}{{#parent}}{{child}}{{/parent}}{{/grandparent}}</h2>vendor/mustache/mustache/test/fixtures/examples/child_context/child_context.txt000064400000000056151160724640024357
0ustar00<h1>child works</h1>
<h2>grandchild
works</h2>vendor/mustache/mustache/test/fixtures/examples/comments/comments.mustache000064400000000102151160724640023335
0ustar00<h1>{{title}}{{! just something interesting... #or ^not...
}}</h1>vendor/mustache/mustache/test/fixtures/examples/comments/Comments.php000064400000000472151160724640022265
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Comments
{
    public function title()
    {
        return 'A Comedy of Errors';
    }
}
vendor/mustache/mustache/test/fixtures/examples/comments/comments.txt000064400000000033151160724640022346
0ustar00<h1>A Comedy of
Errors</h1>vendor/mustache/mustache/test/fixtures/examples/complex/complex.mustache000064400000000411151160724640023004
0ustar00<h1>{{header}}</h1>
{{#notEmpty}}
<ul>
{{#item}}
{{#current}}
    <li><strong>{{name}}</strong></li>
{{/current}}
{{^current}}
    <li><a
href="{{url}}">{{name}}</a></li>
{{/current}}
{{/item}}
</ul>
{{/notEmpty}}
{{#isEmpty}}
<p>The list is empty.</p>
{{/isEmpty}}vendor/mustache/mustache/test/fixtures/examples/complex/complex.php000064400000001245151160724640021770
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Complex
{
    public $header = 'Colors';

    public $item = array(
        array('name' => 'red', 'current'
=> true, 'url' => '#Red'),
        array('name' => 'green', 'current'
=> false, 'url' => '#Green'),
        array('name' => 'blue', 'current'
=> false, 'url' => '#Blue'),
    );

    public function notEmpty()
    {
        return !($this->isEmpty());
    }

    public function isEmpty()
    {
        return count($this->item) === 0;
    }
}
vendor/mustache/mustache/test/fixtures/examples/complex/complex.txt000064400000000213151160724640022012
0ustar00<h1>Colors</h1>
<ul>
    <li><strong>red</strong></li>
    <li><a href="#Green">green</a></li>
    <li><a href="#Blue">blue</a></li>
</ul>
vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.mustache000064400000000136151160724640024174
0ustar00{{=<% %>=}}
* <% start %>
<%=| |=%>
|# middle |
* | item |
|/ middle |
|={{ }}=|
* {{ final
}}vendor/mustache/mustache/test/fixtures/examples/delimiters/Delimiters.php000064400000001046151160724640023113
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Delimiters
{
    public $start = 'It worked the first time.';

    public function middle()
    {
        return array(
            array('item' => 'And it worked the second
time.'),
            array('item' => 'As well as the
third.'),
        );
    }

    public $final = 'Then, surprisingly, it worked the final
time.';
}
vendor/mustache/mustache/test/fixtures/examples/delimiters/delimiters.txt000064400000000204151160724640023176
0ustar00* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final
time.vendor/mustache/mustache/test/fixtures/examples/dot_notation/DotNotation.php000064400000001000151160724640023602
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class DotNotation
{
    public $person = array(
        'name'     => array('first' =>
'Chris', 'last' => 'Firescythe'),
        'age'      => 24,
        'hometown' => array(
            'city'  => 'Cincinnati',
            'state' => 'OH',
        ),
    );

    public $normal = 'Normal';
}
vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.mustache000064400000000200151160724640025064
0ustar00* {{person.name.first}} {{person.name.last}}
* {{person.age}}
* {{person.hometown.city}}, {{person.hometown.state}}
*
{{normal}}vendor/mustache/mustache/test/fixtures/examples/dot_notation/dot_notation.txt000064400000000061151160724640024077
0ustar00* Chris Firescythe
* 24
* Cincinnati, OH
*
Normalvendor/mustache/mustache/test/fixtures/examples/double_section/DoubleSection.php000064400000000510151160724640024401
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class DoubleSection
{
    public function t()
    {
        return true;
    }

    public $two = 'second';
}
vendor/mustache/mustache/test/fixtures/examples/double_section/double_section.mustache000064400000000065151160724640025667
0ustar00{{#t}}
* first
{{/t}}
* {{two}}
{{#t}}
* third
{{/t}}vendor/mustache/mustache/test/fixtures/examples/double_section/double_section.txt000064400000000031151160724640024666
0ustar00* first
* second
* third
vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.mustache000064400000000022151160724640022674
0ustar00<h1>{{title}}</h1>vendor/mustache/mustache/test/fixtures/examples/escaped/Escaped.php000064400000000424151160724640021620
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Escaped
{
    public $title = '"Bear" > "Shark"';
}
vendor/mustache/mustache/test/fixtures/examples/escaped/escaped.txt000064400000000060151160724640021704
0ustar00<h1>&quot;Bear&quot; &gt;
&quot;Shark&quot;</h1>vendor/mustache/mustache/test/fixtures/examples/filters/filters.mustache000064400000000123151160724640023006
0ustar00{{%FILTERS}}
{{# states | eachPair }}
{{ key | upcase }}: {{ value }}
{{/ states
}}vendor/mustache/mustache/test/fixtures/examples/filters/Filters.php000064400000004532151160724640021734
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Filters
{
    public $states = array(
        'al' => 'Alabama',
        'ak' => 'Alaska',
        'az' => 'Arizona',
        'ar' => 'Arkansas',
        'ca' => 'California',
        'co' => 'Colorado',
        'ct' => 'Connecticut',
        'de' => 'Delaware',
        'fl' => 'Florida',
        'ga' => 'Georgia',
        'hi' => 'Hawaii',
        'id' => 'Idaho',
        'il' => 'Illinois',
        'in' => 'Indiana',
        'ia' => 'Iowa',
        'ks' => 'Kansas',
        'ky' => 'Kentucky',
        'la' => 'Louisiana',
        'me' => 'Maine',
        'md' => 'Maryland',
        'ma' => 'Massachusetts',
        'mi' => 'Michigan',
        'mn' => 'Minnesota',
        'ms' => 'Mississippi',
        'mo' => 'Missouri',
        'mt' => 'Montana',
        'ne' => 'Nebraska',
        'nv' => 'Nevada',
        'nh' => 'New Hampshire',
        'nj' => 'New Jersey',
        'nm' => 'New Mexico',
        'ny' => 'New York',
        'nc' => 'North Carolina',
        'nd' => 'North Dakota',
        'oh' => 'Ohio',
        'ok' => 'Oklahoma',
        'or' => 'Oregon',
        'pa' => 'Pennsylvania',
        'ri' => 'Rhode Island',
        'sc' => 'South Carolina',
        'sd' => 'South Dakota',
        'tn' => 'Tennessee',
        'tx' => 'Texas',
        'ut' => 'Utah',
        'vt' => 'Vermont',
        'va' => 'Virginia',
        'wa' => 'Washington',
        'wv' => 'West Virginia',
        'wi' => 'Wisconsin',
        'wy' => 'Wyoming',
    );

    // The next few functions are ugly, because they have to work in PHP
5.2...
    // for everyone who doesn't have to support 5.2, please, for the
love, make
    // your ViewModel return closures rather than `array($this,
'...')`
    //
    // :)

    public function upcase()
    {
        return array($this, '_upcase');
    }

    public function _upcase($val)
    {
        return strtoupper($val);
    }

    public function eachPair()
    {
        return array($this, '_eachPair');
    }

    public function _eachPair($val)
    {
        $ret = array();
        foreach ($val as $key => $value) {
            array_push($ret, compact('key', 'value'));
        }

        return $ret;
    }
}
vendor/mustache/mustache/test/fixtures/examples/filters/filters.txt000064400000001240151160724640022015
0ustar00AL: Alabama
AK: Alaska
AZ: Arizona
AR: Arkansas
CA: California
CO: Colorado
CT: Connecticut
DE: Delaware
FL: Florida
GA: Georgia
HI: Hawaii
ID: Idaho
IL: Illinois
IN: Indiana
IA: Iowa
KS: Kansas
KY: Kentucky
LA: Louisiana
ME: Maine
MD: Maryland
MA: Massachusetts
MI: Michigan
MN: Minnesota
MS: Mississippi
MO: Missouri
MT: Montana
NE: Nebraska
NV: Nevada
NH: New Hampshire
NJ: New Jersey
NM: New Mexico
NY: New York
NC: North Carolina
ND: North Dakota
OH: Ohio
OK: Oklahoma
OR: Oregon
PA: Pennsylvania
RI: Rhode Island
SC: South Carolina
SD: South Dakota
TN: Tennessee
TX: Texas
UT: Utah
VT: Vermont
VA: Virginia
WA: Washington
WV: West Virginia
WI: Wisconsin
WY: Wyoming
vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/GrandParentContext.php000064400000001542151160724640026634
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class GrandParentContext
{
    public $grand_parent_id = 'grand_parent1';
    public $parent_contexts = array();

    public function __construct()
    {
        $this->parent_contexts[] = array('parent_id' =>
'parent1', 'child_contexts' => array(
            array('child_id' => 'parent1-child1'),
            array('child_id' => 'parent1-child2'),
        ));

        $parent2 = new stdClass();
        $parent2->parent_id = 'parent2';
        $parent2->child_contexts = array(
            array('child_id' => 'parent2-child1'),
            array('child_id' => 'parent2-child2'),
        );

        $this->parent_contexts[] = $parent2;
    }
}
vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.mustache000064400000000310151160724640030304
0ustar00{{grand_parent_id}}
{{#parent_contexts}}
  {{parent_id}} ({{grand_parent_id}})
  {{#child_contexts}}
    {{child_id}} ({{parent_id}} << {{grand_parent_id}})
  {{/child_contexts}}
{{/parent_contexts}}
vendor/mustache/mustache/test/fixtures/examples/grand_parent_context/grand_parent_context.txt000064400000000372151160724640027322
0ustar00grand_parent1
  parent1 (grand_parent1)
    parent1-child1 (parent1 << grand_parent1)
    parent1-child2 (parent1 << grand_parent1)
  parent2 (grand_parent1)
    parent2-child1 (parent2 << grand_parent1)
    parent2-child2 (parent2 << grand_parent1)
vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.mustache000064400000000071151160724640021226
0ustar00{{#__}}Hello.{{/__}} {{#__}}My name is {{ name
}}.{{/__}}vendor/mustache/mustache/test/fixtures/examples/i18n/I18n.php000064400000001306151160724640020146
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class I18n
{
    // Variable to be interpolated
    public $name = 'Bob';

    // Add a {{#__}} lambda for i18n
    public $__ = array(__CLASS__, '__trans');

    // A *very* small i18n dictionary :)
    private static $dictionary = array(
        'Hello.'                 => 'Hola.',
        'My name is {{ name }}.' => 'Me llamo {{ name
}}.',
    );

    public static function __trans($text)
    {
        return isset(self::$dictionary[$text]) ? self::$dictionary[$text] :
$text;
    }
}
vendor/mustache/mustache/test/fixtures/examples/i18n/i18n.txt000064400000000023151160724640020231
0ustar00Hola. Me llamo
Bob.vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/ImplicitIterator.php000064400000000502151160724640025654
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class ImplicitIterator
{
    public $data = array('Donkey Kong', 'Luigi',
'Mario', 'Peach', 'Yoshi');
}
vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/implicit_iterator.mustache000064400000000033151160724640027134
0ustar00{{#data}}
* {{.}}
{{/data}}vendor/mustache/mustache/test/fixtures/examples/implicit_iterator/implicit_iterator.txt000064400000000056151160724640026147
0ustar00* Donkey Kong
* Luigi
* Mario
* Peach
* Yoshi
vendor/mustache/mustache/test/fixtures/examples/inverted_double_section/InvertedDoubleSection.php000064400000000455151160724640030012
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class InvertedDoubleSection
{
    public $t = false;
    public $two = 'second';
}
mustache/mustache/test/fixtures/examples/inverted_double_section/inverted_double_section.mustache000064400000000065151160724640031410
0ustar00vendor{{^t}}
* first
{{/t}}
* {{two}}
{{^t}}
* third
{{/t}}vendor/mustache/mustache/test/fixtures/examples/inverted_double_section/inverted_double_section.txt000064400000000031151160724640030466
0ustar00* first
* second
* third
vendor/mustache/mustache/test/fixtures/examples/inverted_section/InvertedSection.php000064400000000420151160724640025315
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class InvertedSection
{
    public $repo = array();
}
vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.mustache000064400000000113151160724640026575
0ustar00{{#repo}}
    <b>{{name}}</b>
{{/repo}}
{{^repo}}
    No repos :(
{{/repo}}vendor/mustache/mustache/test/fixtures/examples/inverted_section/inverted_section.txt000064400000000020151160724640025600
0ustar00    No repos :(
vendor/mustache/mustache/test/fixtures/examples/nested_partials/NestedPartials.php000064400000000420151160724640024747
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class NestedPartials
{
    public $val = 'FOURTH!';
}
vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.mustache000064400000000040151160724640026226
0ustar00<first>
  {{> second }}
</first>vendor/mustache/mustache/test/fixtures/examples/nested_partials/nested_partials.txt000064400000000116151160724640025240
0ustar00<first>
  <second>
    <third>
      FOURTH!
    </third>
  </second>
</first>vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/fourth.mustache000064400000000012151160724640026172
0ustar00{{ val }}
vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/second.mustache000064400000000042151160724640026141
0ustar00<second>
  {{> third }}
</second>
vendor/mustache/mustache/test/fixtures/examples/nested_partials/partials/third.mustache000064400000000041151160724640025777
0ustar00<third>
  {{> fourth }}
</third>
vendor/mustache/mustache/test/fixtures/examples/partials/partials/header.mustache000064400000000104151160724640024553
0ustar00{{# page }}
<h1>{{ title }}</h1>
<h2>{{ subtitle }}</h2>
{{/ page
}}vendor/mustache/mustache/test/fixtures/examples/partials/partials.mustache000064400000000117151160724640023327
0ustar00<div>
    {{> header }}

    <div>
        {{ page.content }}
    </div>
</div>vendor/mustache/mustache/test/fixtures/examples/partials/Partials.php000064400000000616151160724640022251
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Partials
{
    public $page = array(
        'title'    => 'Page Title',
        'subtitle' => 'Page Subtitle',
        'content'  => 'Lorem ipsum dolor sit amet.',
    );
}
vendor/mustache/mustache/test/fixtures/examples/partials/partials.txt000064400000000171151160724640022335
0ustar00<div>
    <h1>Page Title</h1>
    <h2>Page Subtitle</h2>

    <div>
        Lorem ipsum dolor sit amet.
    </div>
</div>vendor/mustache/mustache/test/fixtures/examples/recursive_partials/partials/child.mustache000064400000000053151160724640026500
0ustar00 > {{ name
}}{{#child}}{{>child}}{{/child}}vendor/mustache/mustache/test/fixtures/examples/recursive_partials/RecursivePartials.php000064400000000664151160724640026233
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class RecursivePartials
{
    public $name  = 'George';
    public $child = array(
        'name'  => 'Dan',
        'child' => array(
            'name'  => 'Justin',
            'child' => false,
        ),
    );
}
vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.mustache000064400000000046151160724640027506
0ustar00{{name}}{{#child}}{{>child}}{{/child}}vendor/mustache/mustache/test/fixtures/examples/recursive_partials/recursive_partials.txt000064400000000025151160724640026511
0ustar00George > Dan >
Justinvendor/mustache/mustache/test/fixtures/examples/sections/sections.mustache000064400000000104151160724640023343
0ustar00* {{ start }}
{{# middle }}
* {{ item }}
{{/ middle }}
* {{ final
}}vendor/mustache/mustache/test/fixtures/examples/sections/Sections.php000064400000001044151160724640022265
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Sections
{
    public $start = 'It worked the first time.';

    public function middle()
    {
        return array(
            array('item' => 'And it worked the second
time.'),
            array('item' => 'As well as the
third.'),
        );
    }

    public $final = 'Then, surprisingly, it worked the final
time.';
}
vendor/mustache/mustache/test/fixtures/examples/sections/sections.txt000064400000000204151160724640022352
0ustar00* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final
time.vendor/mustache/mustache/test/fixtures/examples/sections_nested/SectionsNested.php000064400000002220151160724640024767
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class SectionsNested
{
    public $name = 'Little Mac';

    public function enemies()
    {
        return array(
            array(
                'name'    => 'Von Kaiser',
                'enemies' => array(
                    array('name' => 'Super Macho
Man'),
                    array('name' => 'Piston Honda'),
                    array('name' => 'Mr. Sandman'),
                ),
            ),
            array(
                'name'    => 'Mike Tyson',
                'enemies' => array(
                    array('name' => 'Soda
Popinski'),
                    array('name' => 'King Hippo'),
                    array('name' => 'Great Tiger'),
                    array('name' => 'Glass Joe'),
                ),
            ),
            array(
                'name'    => 'Don Flamenco',
                'enemies' => array(
                    array('name' => 'Bald Bull'),
                ),
            ),
        );
    }
}
vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.mustache000064400000000206151160724640026252
0ustar00Enemies of {{ name }}:
{{# enemies }}
{{ name }} ... who also has enemies:
{{# enemies }}
--> {{ name }}
{{/ enemies }}
{{/ enemies
}}vendor/mustache/mustache/test/fixtures/examples/sections_nested/sections_nested.txt000064400000000412151160724640025257
0ustar00Enemies of Little Mac:
Von Kaiser ... who also has enemies:
--> Super Macho Man
--> Piston Honda
--> Mr. Sandman
Mike Tyson ... who also has enemies:
--> Soda Popinski
--> King Hippo
--> Great Tiger
--> Glass Joe
Don Flamenco ... who also has enemies:
--> Bald Bull
vendor/mustache/mustache/test/fixtures/examples/section_iterator_objects/SectionIteratorObjects.php000064400000001137151160724640030370
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class SectionIteratorObjects
{
    public $start = 'It worked the first time.';

    protected $_data = array(
        array('item' => 'And it worked the second
time.'),
        array('item' => 'As well as the third.'),
    );

    public function middle()
    {
        return new ArrayIterator($this->_data);
    }

    public $final = 'Then, surprisingly, it worked the final
time.';
}
mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.mustache000064400000000104151160724640031762
0ustar00vendor* {{ start }}
{{# middle }}
* {{ item }}
{{/ middle }}
* {{ final
}}mustache/mustache/test/fixtures/examples/section_iterator_objects/section_iterator_objects.txt000064400000000204151160724640030771
0ustar00vendor* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final
time.vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/SectionMagicObjects.php000064400000001440151160724640027043
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class SectionMagicObjects
{
    public $start = 'It worked the first time.';

    public function middle()
    {
        return new MagicObject();
    }

    public $final = 'Then, surprisingly, it worked the final
time.';
}

class MagicObject
{
    protected $_data = array(
        'foo' => 'And it worked the second time.',
        'bar' => 'As well as the third.',
    );

    public function __get($key)
    {
        return isset($this->_data[$key]) ? $this->_data[$key] : null;
    }

    public function __isset($key)
    {
        return isset($this->_data[$key]);
    }
}
vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.mustache000064400000000117151160724640030523
0ustar00* {{ start }}
{{# middle }}
* {{ foo }}
* {{ bar }}
{{/ middle }}
* {{ final
}}vendor/mustache/mustache/test/fixtures/examples/section_magic_objects/section_magic_objects.txt000064400000000204151160724640027526
0ustar00* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final
time.vendor/mustache/mustache/test/fixtures/examples/section_objects/SectionObjects.php000064400000001060151160724640024740
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class SectionObjects
{
    public $start = 'It worked the first time.';

    public function middle()
    {
        return new SectionObject();
    }

    public $final = 'Then, surprisingly, it worked the final
time.';
}

class SectionObject
{
    public $foo = 'And it worked the second time.';
    public $bar = 'As well as the third.';
}
vendor/mustache/mustache/test/fixtures/examples/section_objects/section_objects.mustache000064400000000117151160724640026223
0ustar00* {{ start }}
{{# middle }}
* {{ foo }}
* {{ bar }}
{{/ middle }}
* {{ final
}}vendor/mustache/mustache/test/fixtures/examples/section_objects/section_objects.txt000064400000000204151160724640025226
0ustar00* It worked the first time.
* And it worked the second time.
* As well as the third.
* Then, surprisingly, it worked the final
time.vendor/mustache/mustache/test/fixtures/examples/simple/simple.mustache000064400000000151151160724640022451
0ustar00Hello {{name}}
You have just won ${{value}}!
{{#in_ca}}
Well, ${{ taxed_value }}, after taxes.
{{/in_ca}}vendor/mustache/mustache/test/fixtures/examples/simple/Simple.php000064400000000640151160724640021372
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Simple
{
    public $name = 'Chris';
    public $value = 10000;

    public function taxed_value()
    {
        return $this->value - ($this->value * 0.4);
    }

    public $in_ca = true;
}
vendor/mustache/mustache/test/fixtures/examples/simple/simple.txt000064400000000100151160724640021451
0ustar00Hello Chris
You have just won $10000!
Well, $6000, after taxes.
vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.mustache000064400000000024151160724640023604
0ustar00<h1>{{{title}}}</h1>vendor/mustache/mustache/test/fixtures/examples/unescaped/Unescaped.php000064400000000422151160724640022524
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Unescaped
{
    public $title = 'Bear > Shark';
}
vendor/mustache/mustache/test/fixtures/examples/unescaped/unescaped.txt000064400000000025151160724640022613
0ustar00<h1>Bear >
Shark</h1>vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.mustache000064400000000030151160724640021437
0ustar00<h1>中文
{{test}}</h1>vendor/mustache/mustache/test/fixtures/examples/utf8/UTF8.php000064400000000417151160724640020266
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class UTF8
{
    public $test = '中文又来啦';
}
vendor/mustache/mustache/test/fixtures/examples/utf8/utf8.txt000064400000000037151160724640020454
0ustar00<h1>中文
中文又来啦</h1>vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/UTF8Unescaped.php000064400000000430151160724640024140
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class UTF8Unescaped
{
    public $test = '中文又来啦';
}
vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.mustache000064400000000032151160724640025517
0ustar00<h1>中文
{{{test}}}</h1>vendor/mustache/mustache/test/fixtures/examples/utf8_unescaped/utf8_unescaped.txt000064400000000037151160724640024532
0ustar00<h1>中文
中文又来啦</h1>vendor/mustache/mustache/test/fixtures/examples/whitespace/partials/alphabet.mustache000064400000000010151160724640025414
0ustar00 *
{{.}}vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.mustache000064400000000272151160724640024163
0ustar00{{^ inverted section test }}
These are some things:
{{/inverted section test	}}
* {{  foo  }}
* {{ bar}}
* {{    baz	}}
{{#  qux		 }}
* {{ key with space }}
{{/ qux		}}
{{#qux}}.{{/qux}}vendor/mustache/mustache/test/fixtures/examples/whitespace/Whitespace.php000064400000001746151160724640023110
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Whitespace test for tag names.
 *
 * Per http://github.com/janl/mustache.js/issues/issue/34/#comment_244396
 * tags should strip leading and trailing whitespace in key names.
 *
 * `{{> tag }}` and `{{> tag}}` and `{{>tag}}` should all be
equivalent.
 */
class Whitespace
{
    public $foo = 'alpha';

    public $bar = 'beta';

    public function baz()
    {
        return 'gamma';
    }

    public function qux()
    {
        return array(
            array('key with space' => 'A'),
            array('key with space' => 'B'),
            array('key with space' => 'C'),
            array('key with space' => 'D'),
            array('key with space' => 'E'),
            array('key with space' => 'F'),
            array('key with space' => 'G'),
        );
    }
}
vendor/mustache/mustache/test/fixtures/examples/whitespace/whitespace.txt000064400000000121151160724640023162
0ustar00These are some things:
* alpha
* beta
* gamma
* A
* B
* C
* D
* E
* F
* G
.......vendor/mustache/mustache/test/fixtures/templates/alpha.ms000064400000000016151160724640017742
0ustar00alpha
contentsvendor/mustache/mustache/test/fixtures/templates/beta.ms000064400000000015151160724640017567
0ustar00beta
contentsvendor/mustache/mustache/test/fixtures/templates/one.mustache000064400000000014151160724640020626
0ustar00one
contentsvendor/mustache/mustache/test/fixtures/templates/two.mustache000064400000000014151160724640020656
0ustar00two
contentsvendor/mustache/mustache/test/Mustache/Test/AutoloaderTest.php000064400000002525151160724640020614
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_AutoloaderTest extends PHPUnit_Framework_TestCase
{
    public function testRegister()
    {
        $loader = Mustache_Autoloader::register();
        $this->assertTrue(spl_autoload_unregister(array($loader,
'autoload')));
    }

    public function testAutoloader()
    {
        $loader = new Mustache_Autoloader(dirname(__FILE__) .
'/../../fixtures/autoloader');

       
$this->assertNull($loader->autoload('NonMustacheClass'));
        $this->assertFalse(class_exists('NonMustacheClass'));

        $loader->autoload('Mustache_Foo');
        $this->assertTrue(class_exists('Mustache_Foo'));

        $loader->autoload('\Mustache_Bar');
        $this->assertTrue(class_exists('Mustache_Bar'));
    }

    /**
     * Test that the autoloader won't register multiple times.
     */
    public function testRegisterMultiple()
    {
        $numLoaders = count(spl_autoload_functions());

        Mustache_Autoloader::register();
        Mustache_Autoloader::register();

        $expectedNumLoaders = $numLoaders + 1;

        $this->assertCount($expectedNumLoaders,
spl_autoload_functions());
    }
}
vendor/mustache/mustache/test/Mustache/Test/Cache/AbstractCacheTest.php000064400000001736151160724640022212
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_Cache_AbstractCacheTest extends
PHPUnit_Framework_TestCase
{
    public function testGetSetLogger()
    {
        $cache  = new CacheStub();
        $logger = new
Mustache_Logger_StreamLogger('php://stdout');
        $cache->setLogger($logger);
        $this->assertSame($logger, $cache->getLogger());
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testSetLoggerThrowsExceptions()
    {
        $cache  = new CacheStub();
        $logger = new StdClass();
        $cache->setLogger($logger);
    }
}

class CacheStub extends Mustache_Cache_AbstractCache
{
    public function load($key)
    {
        // nada
    }

    public function cache($key, $value)
    {
        // nada
    }
}
vendor/mustache/mustache/test/Mustache/Test/Cache/FilesystemCacheTest.php000064400000001534151160724640022567
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group functional
 */
class Mustache_Test_Cache_FilesystemCacheTest extends
Mustache_Test_FunctionalTestCase
{
    public function testCacheGetNone()
    {
        $key = 'some key';
        $cache = new Mustache_Cache_FilesystemCache(self::$tempDir);
        $loaded = $cache->load($key);

        $this->assertFalse($loaded);
    }

    public function testCachePut()
    {
        $key = 'some key';
        $value = '<?php /* some value */';
        $cache = new Mustache_Cache_FilesystemCache(self::$tempDir);
        $cache->cache($key, $value);
        $loaded = $cache->load($key);

        $this->assertTrue($loaded);
    }
}
vendor/mustache/mustache/test/Mustache/Test/CompilerTest.php000064400000012176151160724640020272
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_CompilerTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider getCompileValues
     */
    public function testCompile($source, array $tree, $name,
$customEscaper, $entityFlags, $charset, $expected)
    {
        $compiler = new Mustache_Compiler();

        $compiled = $compiler->compile($source, $tree, $name,
$customEscaper, $charset, false, $entityFlags);
        foreach ($expected as $contains) {
            $this->assertContains($contains, $compiled);
        }
    }

    public function getCompileValues()
    {
        return array(
            array('', array(), 'Banana', false,
ENT_COMPAT, 'ISO-8859-1', array(
                "\nclass Banana extends Mustache_Template",
                'return $buffer;',
            )),

            array('',
array($this->createTextToken('TEXT')), 'Monkey',
false, ENT_COMPAT, 'UTF-8', array(
                "\nclass Monkey extends Mustache_Template",
                '$buffer .= $indent . \'TEXT\';',
                'return $buffer;',
            )),

            array(
                '',
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'name',
                    ),
                ),
                'Monkey',
                true,
                ENT_COMPAT,
                'ISO-8859-1',
                array(
                    "\nclass Monkey extends Mustache_Template",
                    '$value =
$this->resolveValue($context->find(\'name\'),
$context);',
                    '$buffer .= $indent .
call_user_func($this->mustache->getEscape(), $value);',
                    'return $buffer;',
                ),
            ),

            array(
                '',
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'name',
                    ),
                ),
                'Monkey',
                false,
                ENT_COMPAT,
                'ISO-8859-1',
                array(
                    "\nclass Monkey extends Mustache_Template",
                    '$value =
$this->resolveValue($context->find(\'name\'),
$context);',
                    '$buffer .= $indent . htmlspecialchars($value,
' . ENT_COMPAT . ', \'ISO-8859-1\');',
                    'return $buffer;',
                ),
            ),

            array(
                '',
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'name',
                    ),
                ),
                'Monkey',
                false,
                ENT_QUOTES,
                'ISO-8859-1',
                array(
                    "\nclass Monkey extends Mustache_Template",
                    '$value =
$this->resolveValue($context->find(\'name\'),
$context);',
                    '$buffer .= $indent . htmlspecialchars($value,
' . ENT_QUOTES . ', \'ISO-8859-1\');',
                    'return $buffer;',
                ),
            ),

            array(
                '',
                array(
                    $this->createTextToken("foo\n"),
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'name',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => '.',
                    ),
                    $this->createTextToken("'bar'"),
                ),
                'Monkey',
                false,
                ENT_COMPAT,
                'UTF-8',
                array(
                    "\nclass Monkey extends Mustache_Template",
                    "\$buffer .= \$indent . 'foo\n';",
                    '$value =
$this->resolveValue($context->find(\'name\'),
$context);',
                    '$buffer .= htmlspecialchars($value, ' .
ENT_COMPAT . ', \'UTF-8\');',
                    '$value =
$this->resolveValue($context->last(), $context);',
                    '$buffer .=
\'\\\'bar\\\'\';',
                    'return $buffer;',
                ),
            ),
        );
    }

    /**
     * @expectedException Mustache_Exception_SyntaxException
     */
    public function testCompilerThrowsSyntaxException()
    {
        $compiler = new Mustache_Compiler();
        $compiler->compile('',
array(array(Mustache_Tokenizer::TYPE => 'invalid')),
'SomeClass');
    }

    /**
     * @param string $value
     */
    private function createTextToken($value)
    {
        return array(
            Mustache_Tokenizer::TYPE  => Mustache_Tokenizer::T_TEXT,
            Mustache_Tokenizer::VALUE => $value,
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/ContextTest.php000064400000017450151160724640020144
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_ContextTest extends PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $one = new Mustache_Context();
        $this->assertSame('', $one->find('foo'));
        $this->assertSame('', $one->find('bar'));

        $two = new Mustache_Context(array(
            'foo' => 'FOO',
            'bar' => '<BAR>',
        ));
        $this->assertEquals('FOO',
$two->find('foo'));
        $this->assertEquals('<BAR>',
$two->find('bar'));

        $obj = new StdClass();
        $obj->name = 'NAME';
        $three = new Mustache_Context($obj);
        $this->assertSame($obj, $three->last());
        $this->assertEquals('NAME',
$three->find('name'));
    }

    public function testPushPopAndLast()
    {
        $context = new Mustache_Context();
        $this->assertFalse($context->last());

        $dummy = new Mustache_Test_TestDummy();
        $context->push($dummy);
        $this->assertSame($dummy, $context->last());
        $this->assertSame($dummy, $context->pop());
        $this->assertFalse($context->last());

        $obj = new StdClass();
        $context->push($dummy);
        $this->assertSame($dummy, $context->last());
        $context->push($obj);
        $this->assertSame($obj, $context->last());
        $this->assertSame($obj, $context->pop());
        $this->assertSame($dummy, $context->pop());
        $this->assertFalse($context->last());
    }

    public function testFind()
    {
        $context = new Mustache_Context();

        $dummy = new Mustache_Test_TestDummy();

        $obj = new StdClass();
        $obj->name = 'obj';

        $arr = array(
            'a' => array('b' =>
array('c' => 'see')),
            'b' => 'bee',
        );

        $string = 'some arbitrary string';

        $context->push($dummy);
        $this->assertEquals('dummy',
$context->find('name'));

        $context->push($obj);
        $this->assertEquals('obj',
$context->find('name'));

        $context->pop();
        $this->assertEquals('dummy',
$context->find('name'));

        $dummy->name = 'dummyer';
        $this->assertEquals('dummyer',
$context->find('name'));

        $context->push($arr);
        $this->assertEquals('bee',
$context->find('b'));
        $this->assertEquals('see',
$context->findDot('a.b.c'));

        $dummy->name = 'dummy';

        $context->push($string);
        $this->assertSame($string, $context->last());
        $this->assertEquals('dummy',
$context->find('name'));
        $this->assertEquals('see',
$context->findDot('a.b.c'));
        $this->assertEquals('<foo>',
$context->find('foo'));
        $this->assertEquals('<bar>',
$context->findDot('bar'));
    }

    public function testArrayAccessFind()
    {
        $access = new Mustache_Test_TestArrayAccess(array(
            'a' => array('b' =>
array('c' => 'see')),
            'b' => 'bee',
        ));

        $context = new Mustache_Context($access);
        $this->assertEquals('bee',
$context->find('b'));
        $this->assertEquals('see',
$context->findDot('a.b.c'));
        $this->assertEquals(null,
$context->findDot('a.b.c.d'));
    }

    public function testAccessorPriority()
    {
        $context = new Mustache_Context(new Mustache_Test_AllTheThings());

        $this->assertEquals('win',
$context->find('foo'), 'method beats property');
        $this->assertEquals('win',
$context->find('bar'), 'property beats
ArrayAccess');
        $this->assertEquals('win',
$context->find('baz'), 'ArrayAccess stands alone');
        $this->assertEquals('win',
$context->find('qux'), 'ArrayAccess beats private
property');
    }

    public function testAnchoredDotNotation()
    {
        $context = new Mustache_Context();

        $a = array(
            'name'   => 'a',
            'number' => 1,
        );

        $b = array(
            'number' => 2,
            'child'  => array(
                'name' => 'baby bee',
            ),
        );

        $c = array(
            'name' => 'cee',
        );

        $context->push($a);
        $this->assertEquals('a',
$context->find('name'));
        $this->assertEquals('',
$context->findDot('.name'));
        $this->assertEquals('a',
$context->findAnchoredDot('.name'));
        $this->assertEquals(1, $context->find('number'));
        $this->assertEquals('',
$context->findDot('.number'));
        $this->assertEquals(1,
$context->findAnchoredDot('.number'));

        $context->push($b);
        $this->assertEquals('a',
$context->find('name'));
        $this->assertEquals(2, $context->find('number'));
        $this->assertEquals('',
$context->findDot('.name'));
        $this->assertEquals('',
$context->findDot('.number'));
        $this->assertEquals('',
$context->findAnchoredDot('.name'));
        $this->assertEquals(2,
$context->findAnchoredDot('.number'));
        $this->assertEquals('baby bee',
$context->findDot('child.name'));
        $this->assertEquals('',
$context->findDot('.child.name'));
        $this->assertEquals('baby bee',
$context->findAnchoredDot('.child.name'));

        $context->push($c);
        $this->assertEquals('cee',
$context->find('name'));
        $this->assertEquals('',
$context->findDot('.name'));
        $this->assertEquals('cee',
$context->findAnchoredDot('.name'));
        $this->assertEquals(2, $context->find('number'));
        $this->assertEquals('',
$context->findDot('.number'));
        $this->assertEquals('',
$context->findAnchoredDot('.number'));
        $this->assertEquals('baby bee',
$context->findDot('child.name'));
        $this->assertEquals('',
$context->findDot('.child.name'));
        $this->assertEquals('',
$context->findAnchoredDot('.child.name'));
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testAnchoredDotNotationThrowsExceptions()
    {
        $context = new Mustache_Context();
        $context->push(array('a' => 1));
        $context->findAnchoredDot('a');
    }
}

class Mustache_Test_TestDummy
{
    public $name = 'dummy';

    public function __invoke()
    {
        // nothing
    }

    public static function foo()
    {
        return '<foo>';
    }

    public function bar()
    {
        return '<bar>';
    }
}

class Mustache_Test_TestArrayAccess implements ArrayAccess
{
    private $container = array();

    public function __construct($array)
    {
        foreach ($array as $key => $value) {
            $this->container[$key] = $value;
        }
    }

    public function offsetSet($offset, $value)
    {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    public function offsetExists($offset)
    {
        return isset($this->container[$offset]);
    }

    public function offsetUnset($offset)
    {
        unset($this->container[$offset]);
    }

    public function offsetGet($offset)
    {
        return isset($this->container[$offset]) ?
$this->container[$offset] : null;
    }
}

class Mustache_Test_AllTheThings implements ArrayAccess
{
    public $foo  = 'fail';
    public $bar  = 'win';
    private $qux = 'fail';

    public function foo()
    {
        return 'win';
    }

    public function offsetExists($offset)
    {
        return true;
    }

    public function offsetGet($offset)
    {
        switch ($offset) {
            case 'foo':
            case 'bar':
                return 'fail';

            case 'baz':
            case 'qux':
                return 'win';

            default:
                return 'lolwhut';
        }
    }

    public function offsetSet($offset, $value)
    {
        // nada
    }

    public function offsetUnset($offset)
    {
        // nada
    }
}
vendor/mustache/mustache/test/Mustache/Test/EngineTest.php000064400000031751151160724640017725
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_EngineTest extends Mustache_Test_FunctionalTestCase
{
    public function testConstructor()
    {
        $logger         = new Mustache_Logger_StreamLogger(tmpfile());
        $loader         = new Mustache_Loader_StringLoader();
        $partialsLoader = new Mustache_Loader_ArrayLoader();
        $mustache       = new Mustache_Engine(array(
            'template_class_prefix' => '__whot__',
            'cache'                 => self::$tempDir,
            'cache_file_mode'       => 777,
            'logger'                => $logger,
            'loader'                => $loader,
            'partials_loader'       => $partialsLoader,
            'partials'              => array(
                'foo' => '{{ foo }}',
            ),
            'helpers' => array(
                'foo' => array($this, 'getFoo'),
                'bar' => 'BAR',
            ),
            'escape'       => 'strtoupper',
            'entity_flags' => ENT_QUOTES,
            'charset'      => 'ISO-8859-1',
            'pragmas'      =>
array(Mustache_Engine::PRAGMA_FILTERS),
        ));

        $this->assertSame($logger, $mustache->getLogger());
        $this->assertSame($loader, $mustache->getLoader());
        $this->assertSame($partialsLoader,
$mustache->getPartialsLoader());
        $this->assertEquals('{{ foo }}',
$partialsLoader->load('foo'));
        $this->assertContains('__whot__',
$mustache->getTemplateClassName('{{ foo }}'));
        $this->assertEquals('strtoupper',
$mustache->getEscape());
        $this->assertEquals(ENT_QUOTES, $mustache->getEntityFlags());
        $this->assertEquals('ISO-8859-1',
$mustache->getCharset());
        $this->assertTrue($mustache->hasHelper('foo'));
        $this->assertTrue($mustache->hasHelper('bar'));
        $this->assertFalse($mustache->hasHelper('baz'));
       
$this->assertInstanceOf('Mustache_Cache_FilesystemCache',
$mustache->getCache());
        $this->assertEquals(array(Mustache_Engine::PRAGMA_FILTERS),
$mustache->getPragmas());
    }

    public static function getFoo()
    {
        return 'foo';
    }

    public function testRender()
    {
        $source = '{{ foo }}';
        $data   = array('bar' => 'baz');
        $output = 'TEH OUTPUT';

        $template = $this->getMockBuilder('Mustache_Template')
            ->disableOriginalConstructor()
            ->getMock();

        $mustache = new MustacheStub();
        $mustache->template = $template;

        $template->expects($this->once())
            ->method('render')
            ->with($data)
            ->will($this->returnValue($output));

        $this->assertEquals($output, $mustache->render($source,
$data));
        $this->assertEquals($source, $mustache->source);
    }

    public function testSettingServices()
    {
        $logger    = new Mustache_Logger_StreamLogger(tmpfile());
        $loader    = new Mustache_Loader_StringLoader();
        $tokenizer = new Mustache_Tokenizer();
        $parser    = new Mustache_Parser();
        $compiler  = new Mustache_Compiler();
        $mustache  = new Mustache_Engine();
        $cache     = new Mustache_Cache_FilesystemCache(self::$tempDir);

        $this->assertNotSame($logger, $mustache->getLogger());
        $mustache->setLogger($logger);
        $this->assertSame($logger, $mustache->getLogger());

        $this->assertNotSame($loader, $mustache->getLoader());
        $mustache->setLoader($loader);
        $this->assertSame($loader, $mustache->getLoader());

        $this->assertNotSame($loader,
$mustache->getPartialsLoader());
        $mustache->setPartialsLoader($loader);
        $this->assertSame($loader, $mustache->getPartialsLoader());

        $this->assertNotSame($tokenizer, $mustache->getTokenizer());
        $mustache->setTokenizer($tokenizer);
        $this->assertSame($tokenizer, $mustache->getTokenizer());

        $this->assertNotSame($parser, $mustache->getParser());
        $mustache->setParser($parser);
        $this->assertSame($parser, $mustache->getParser());

        $this->assertNotSame($compiler, $mustache->getCompiler());
        $mustache->setCompiler($compiler);
        $this->assertSame($compiler, $mustache->getCompiler());

        $this->assertNotSame($cache, $mustache->getCache());
        $mustache->setCache($cache);
        $this->assertSame($cache, $mustache->getCache());
    }

    /**
     * @group functional
     */
    public function testCache()
    {
        $mustache = new Mustache_Engine(array(
            'template_class_prefix' => '__whot__',
            'cache'                 => self::$tempDir,
        ));

        $source    = '{{ foo }}';
        $template  = $mustache->loadTemplate($source);
        $className = $mustache->getTemplateClassName($source);

        $this->assertInstanceOf($className, $template);
    }

    public function testLambdaCache()
    {
        $mustache = new MustacheStub(array(
            'cache'                  => self::$tempDir,
            'cache_lambda_templates' => true,
        ));

        $this->assertNotInstanceOf('Mustache_Cache_NoopCache',
$mustache->getProtectedLambdaCache());
        $this->assertSame($mustache->getCache(),
$mustache->getProtectedLambdaCache());
    }

    public function testWithoutLambdaCache()
    {
        $mustache = new MustacheStub(array(
            'cache' => self::$tempDir,
        ));

        $this->assertInstanceOf('Mustache_Cache_NoopCache',
$mustache->getProtectedLambdaCache());
        $this->assertNotSame($mustache->getCache(),
$mustache->getProtectedLambdaCache());
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testEmptyTemplatePrefixThrowsException()
    {
        new Mustache_Engine(array(
            'template_class_prefix' => '',
        ));
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     * @dataProvider getBadEscapers
     */
    public function testNonCallableEscapeThrowsException($escape)
    {
        new Mustache_Engine(array('escape' => $escape));
    }

    public function getBadEscapers()
    {
        return array(
            array('nothing'),
            array('foo', 'bar'),
        );
    }

    /**
     * @expectedException Mustache_Exception_RuntimeException
     */
    public function testImmutablePartialsLoadersThrowException()
    {
        $mustache = new Mustache_Engine(array(
            'partials_loader' => new
Mustache_Loader_StringLoader(),
        ));

        $mustache->setPartials(array('foo' => '{{ foo
}}'));
    }

    public function testMissingPartialsTreatedAsEmptyString()
    {
        $mustache = new Mustache_Engine(array(
            'partials_loader' => new
Mustache_Loader_ArrayLoader(array(
                'foo' => 'FOO',
                'baz' => 'BAZ',
            )),
        ));

        $this->assertEquals('FOOBAZ',
$mustache->render('{{>foo}}{{>bar}}{{>baz}}',
array()));
    }

    public function testHelpers()
    {
        $foo = array($this, 'getFoo');
        $bar = 'BAR';
        $mustache = new Mustache_Engine(array('helpers' =>
array(
            'foo' => $foo,
            'bar' => $bar,
        )));

        $helpers = $mustache->getHelpers();
        $this->assertTrue($mustache->hasHelper('foo'));
        $this->assertTrue($mustache->hasHelper('bar'));
        $this->assertTrue($helpers->has('foo'));
        $this->assertTrue($helpers->has('bar'));
        $this->assertSame($foo,
$mustache->getHelper('foo'));
        $this->assertSame($bar,
$mustache->getHelper('bar'));

        $mustache->removeHelper('bar');
        $this->assertFalse($mustache->hasHelper('bar'));
        $mustache->addHelper('bar', $bar);
        $this->assertSame($bar,
$mustache->getHelper('bar'));

        $baz = array($this, 'wrapWithUnderscores');
        $this->assertFalse($mustache->hasHelper('baz'));
        $this->assertFalse($helpers->has('baz'));

        $mustache->addHelper('baz', $baz);
        $this->assertTrue($mustache->hasHelper('baz'));
        $this->assertTrue($helpers->has('baz'));

        // ... and a functional test
        $tpl = $mustache->loadTemplate('{{foo}} - {{bar}} -
{{#baz}}qux{{/baz}}');
        $this->assertEquals('foo - BAR - __qux__',
$tpl->render());
        $this->assertEquals('foo - BAR - __qux__',
$tpl->render(array('qux' => "won't mess things
up")));
    }

    public static function wrapWithUnderscores($text)
    {
        return '__' . $text . '__';
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testSetHelpersThrowsExceptions()
    {
        $mustache = new Mustache_Engine();
        $mustache->setHelpers('monkeymonkeymonkey');
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testSetLoggerThrowsExceptions()
    {
        $mustache = new Mustache_Engine();
        $mustache->setLogger(new StdClass());
    }

    public function testLoadPartialCascading()
    {
        $loader = new Mustache_Loader_ArrayLoader(array(
            'foo' => 'FOO',
        ));

        $mustache = new Mustache_Engine(array('loader' =>
$loader));

        $tpl = $mustache->loadTemplate('foo');

        $this->assertSame($tpl,
$mustache->loadPartial('foo'));

        $mustache->setPartials(array(
            'foo' => 'f00',
        ));

        // setting partials overrides the default template loading
fallback.
        $this->assertNotSame($tpl,
$mustache->loadPartial('foo'));

        // but it didn't overwrite the original template loader
templates.
        $this->assertSame($tpl,
$mustache->loadTemplate('foo'));
    }

    public function testPartialLoadFailLogging()
    {
        $name     = tempnam(sys_get_temp_dir(), 'mustache-test');
        $mustache = new Mustache_Engine(array(
            'logger'   => new
Mustache_Logger_StreamLogger($name, Mustache_Logger::WARNING),
            'partials' => array(
                'foo' => 'FOO',
                'bar' => 'BAR',
            ),
        ));

        $result = $mustache->render('{{> foo }}{{> bar
}}{{> baz }}', array());
        $this->assertEquals('FOOBAR', $result);

        $this->assertContains('WARNING: Partial not found:
"baz"', file_get_contents($name));
    }

    public function testCacheWarningLogging()
    {
        list($name, $mustache) =
$this->getLoggedMustache(Mustache_Logger::WARNING);
        $mustache->render('{{ foo }}', array('foo'
=> 'FOO'));
        $this->assertContains('WARNING: Template cache disabled,
evaluating', file_get_contents($name));
    }

    public function testLoggingIsNotTooAnnoying()
    {
        list($name, $mustache) = $this->getLoggedMustache();
        $mustache->render('{{ foo }}{{> bar }}',
array('foo' => 'FOO'));
        $this->assertEmpty(file_get_contents($name));
    }

    public function testVerboseLoggingIsVerbose()
    {
        list($name, $mustache) =
$this->getLoggedMustache(Mustache_Logger::DEBUG);
        $mustache->render('{{ foo }}{{> bar }}',
array('foo' => 'FOO'));
        $log = file_get_contents($name);
        $this->assertContains('DEBUG: Instantiating template:
', $log);
        $this->assertContains('WARNING: Partial not found:
"bar"', $log);
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testUnknownPragmaThrowsException()
    {
        new Mustache_Engine(array(
            'pragmas' => array('UNKNOWN'),
        ));
    }

    public function testCompileFromMustacheSourceInstance()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../fixtures/templates');
        $mustache = new Mustache_Engine(array(
            'loader' => new
Mustache_Loader_ProductionFilesystemLoader($baseDir),
        ));
        $this->assertEquals('one contents',
$mustache->render('one'));
    }

    private function getLoggedMustache($level = Mustache_Logger::ERROR)
    {
        $name     = tempnam(sys_get_temp_dir(), 'mustache-test');
        $mustache = new Mustache_Engine(array(
            'logger' => new
Mustache_Logger_StreamLogger($name, $level),
        ));

        return array($name, $mustache);
    }

    public function testCustomDelimiters()
    {
        $mustache = new Mustache_Engine(array(
            'delimiters' => '[[ ]]',
            'partials'   => array(
                'one' => '[[> two ]]',
                'two' => '[[ a ]]',
            ),
        ));

        $tpl = $mustache->loadTemplate('[[# a ]][[ b ]][[/a
]]');
        $this->assertEquals('c',
$tpl->render(array('a' => true, 'b' =>
'c')));

        $tpl = $mustache->loadTemplate('[[> one ]]');
        $this->assertEquals('b',
$tpl->render(array('a' => 'b')));
    }
}

class MustacheStub extends Mustache_Engine
{
    public $source;
    public $template;

    public function loadTemplate($source)
    {
        $this->source = $source;

        return $this->template;
    }

    public function getProtectedLambdaCache()
    {
        return $this->getLambdaCache();
    }
}
vendor/mustache/mustache/test/Mustache/Test/Exception/SyntaxExceptionTest.php000064400000002225151160724640023615
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_Exception_SyntaxExceptionTest extends
PHPUnit_Framework_TestCase
{
    public function testInstance()
    {
        $e = new Mustache_Exception_SyntaxException('whot',
array('is' => 'this'));
        $this->assertTrue($e instanceof LogicException);
        $this->assertTrue($e instanceof Mustache_Exception);
    }

    public function testGetToken()
    {
        $token = array(Mustache_Tokenizer::TYPE =>
'whatever');
        $e = new Mustache_Exception_SyntaxException('ignore
this', $token);
        $this->assertEquals($token, $e->getToken());
    }

    public function testPrevious()
    {
        if (version_compare(PHP_VERSION, '5.3.0',
'<')) {
            $this->markTestSkipped('Exception chaining requires at
least PHP 5.3');
        }

        $previous = new Exception();
        $e = new Mustache_Exception_SyntaxException('foo',
array(), $previous);

        $this->assertSame($previous, $e->getPrevious());
    }
}
vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownFilterExceptionTest.php000064400000002427151160724640025140
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_Exception_UnknownFilterExceptionTest extends
PHPUnit_Framework_TestCase
{
    public function testInstance()
    {
        $e = new
Mustache_Exception_UnknownFilterException('bacon');
        $this->assertTrue($e instanceof UnexpectedValueException);
        $this->assertTrue($e instanceof Mustache_Exception);
    }

    public function testMessage()
    {
        $e = new
Mustache_Exception_UnknownFilterException('sausage');
        $this->assertEquals('Unknown filter: sausage',
$e->getMessage());
    }

    public function testGetFilterName()
    {
        $e = new
Mustache_Exception_UnknownFilterException('eggs');
        $this->assertEquals('eggs', $e->getFilterName());
    }

    public function testPrevious()
    {
        if (version_compare(PHP_VERSION, '5.3.0',
'<')) {
            $this->markTestSkipped('Exception chaining requires at
least PHP 5.3');
        }

        $previous = new Exception();
        $e = new Mustache_Exception_UnknownFilterException('foo',
$previous);

        $this->assertSame($previous, $e->getPrevious());
    }
}
vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownHelperExceptionTest.php000064400000002422151160724640025125
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_Exception_UnknownHelperExceptionTest extends
PHPUnit_Framework_TestCase
{
    public function testInstance()
    {
        $e = new
Mustache_Exception_UnknownHelperException('alpha');
        $this->assertTrue($e instanceof InvalidArgumentException);
        $this->assertTrue($e instanceof Mustache_Exception);
    }

    public function testMessage()
    {
        $e = new
Mustache_Exception_UnknownHelperException('beta');
        $this->assertEquals('Unknown helper: beta',
$e->getMessage());
    }

    public function testGetHelperName()
    {
        $e = new
Mustache_Exception_UnknownHelperException('gamma');
        $this->assertEquals('gamma', $e->getHelperName());
    }

    public function testPrevious()
    {
        if (version_compare(PHP_VERSION, '5.3.0',
'<')) {
            $this->markTestSkipped('Exception chaining requires at
least PHP 5.3');
        }

        $previous = new Exception();
        $e = new Mustache_Exception_UnknownHelperException('foo',
$previous);
        $this->assertSame($previous, $e->getPrevious());
    }
}
vendor/mustache/mustache/test/Mustache/Test/Exception/UnknownTemplateExceptionTest.php000064400000002444151160724640025465
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_Exception_UnknownTemplateExceptionTest extends
PHPUnit_Framework_TestCase
{
    public function testInstance()
    {
        $e = new
Mustache_Exception_UnknownTemplateException('mario');
        $this->assertTrue($e instanceof InvalidArgumentException);
        $this->assertTrue($e instanceof Mustache_Exception);
    }

    public function testMessage()
    {
        $e = new
Mustache_Exception_UnknownTemplateException('luigi');
        $this->assertEquals('Unknown template: luigi',
$e->getMessage());
    }

    public function testGetTemplateName()
    {
        $e = new
Mustache_Exception_UnknownTemplateException('yoshi');
        $this->assertEquals('yoshi',
$e->getTemplateName());
    }

    public function testPrevious()
    {
        if (version_compare(PHP_VERSION, '5.3.0',
'<')) {
            $this->markTestSkipped('Exception chaining requires at
least PHP 5.3');
        }

        $previous = new Exception();
        $e = new
Mustache_Exception_UnknownTemplateException('foo', $previous);
        $this->assertSame($previous, $e->getPrevious());
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/ClosureQuirksTest.php000064400000001342151160724640025307
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_ClosureQuirksTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    public function testClosuresDontLikeItWhenYouTouchTheirProperties()
    {
        $tpl = $this->mustache->loadTemplate('{{ foo.bar
}}');
        $this->assertEquals('',
$tpl->render(array('foo' => function () {
            return 'FOO';
        })));
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/EngineTest.php000064400000002411151160724640023677
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group pragmas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_EngineTest extends
PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider pragmaData
     */
    public function testPragmasConstructorOption($pragmas, $helpers, $data,
$tpl, $expect)
    {
        $mustache = new Mustache_Engine(array(
            'pragmas' => $pragmas,
            'helpers' => $helpers,
        ));

        $this->assertEquals($expect, $mustache->render($tpl, $data));
    }

    public function pragmaData()
    {
        $helpers = array(
            'longdate' => function (\DateTime $value) {
                return $value->format('Y-m-d h:m:s');
            },
        );

        $data = array(
            'date' => new DateTime('1/1/2000', new
DateTimeZone('UTC')),
        );

        $tpl = '{{ date | longdate }}';

        return array(
            array(array(Mustache_Engine::PRAGMA_FILTERS), $helpers, $data,
$tpl, '2000-01-01 12:01:00'),
            array(array(),                                $helpers, $data,
$tpl, ''),
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/FiltersTest.php000064400000014551151160724640024112
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group filters
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_FiltersTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    /**
     * @dataProvider singleFilterData
     */
    public function testSingleFilter($tpl, $helpers, $data, $expect)
    {
        $this->mustache->setHelpers($helpers);
        $this->assertEquals($expect, $this->mustache->render($tpl,
$data));
    }

    public function singleFilterData()
    {
        $helpers = array(
            'longdate' => function (\DateTime $value) {
                return $value->format('Y-m-d h:m:s');
            },
            'echo' => function ($value) {
                return array($value, $value, $value);
            },
        );

        return array(
            array(
                '{{% FILTERS }}{{ date | longdate }}',
                $helpers,
                (object) array('date' => new
DateTime('1/1/2000', new DateTimeZone('UTC'))),
                '2000-01-01 12:01:00',
            ),

            array(
                '{{% FILTERS }}{{# word | echo }}{{ . }}!{{/ word |
echo }}',
                $helpers,
                array('word' => 'bacon'),
                'bacon!bacon!bacon!',
            ),
        );
    }

    public function testChainedFilters()
    {
        $tpl = $this->mustache->loadTemplate('{{% FILTERS }}{{
date | longdate | withbrackets }}');

        $this->mustache->addHelper('longdate', function
(\DateTime $value) {
            return $value->format('Y-m-d h:m:s');
        });

        $this->mustache->addHelper('withbrackets', function
($value) {
            return sprintf('[[%s]]', $value);
        });

        $foo = new \StdClass();
        $foo->date = new DateTime('1/1/2000', new
DateTimeZone('UTC'));

        $this->assertEquals('[[2000-01-01 12:01:00]]',
$tpl->render($foo));
    }

    const CHAINED_SECTION_FILTERS_TPL = <<<'EOS'
{{% FILTERS }}
{{# word | echo | with_index }}
{{ key }}: {{ value }}
{{/ word | echo | with_index }}
EOS;

    public function testChainedSectionFilters()
    {
        $tpl =
$this->mustache->loadTemplate(self::CHAINED_SECTION_FILTERS_TPL);

        $this->mustache->addHelper('echo', function
($value) {
            return array($value, $value, $value);
        });

        $this->mustache->addHelper('with_index', function
($value) {
            return array_map(function ($k, $v) {
                return array(
                    'key'   => $k,
                    'value' => $v,
                );
            }, array_keys($value), $value);
        });

        $this->assertEquals("0: bacon\n1: bacon\n2: bacon\n",
$tpl->render(array('word' => 'bacon')));
    }

    /**
     * @dataProvider interpolateFirstData
     */
    public function testInterpolateFirst($tpl, $data, $expect)
    {
        $this->assertEquals($expect, $this->mustache->render($tpl,
$data));
    }

    public function interpolateFirstData()
    {
        $data = array(
            'foo' => 'FOO',
            'bar' => function ($value) {
                return ($value === 'FOO') ? 'win!' :
'fail :(';
            },
        );

        return array(
            array('{{% FILTERS }}{{ foo | bar }}',               
         $data, 'win!'),
            array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar
}}', $data, 'win!'),
        );
    }

    /**
     * @expectedException Mustache_Exception_UnknownFilterException
     * @dataProvider brokenPipeData
     */
    public function testThrowsExceptionForBrokenPipes($tpl, $data)
    {
        $this->mustache->render($tpl, $data);
    }

    public function brokenPipeData()
    {
        return array(
            array('{{% FILTERS }}{{ foo | bar }}',      
array()),
            array('{{% FILTERS }}{{ foo | bar }}',      
array('foo' => 'FOO')),
            array('{{% FILTERS }}{{ foo | bar }}',      
array('foo' => 'FOO', 'bar' =>
'BAR')),
            array('{{% FILTERS }}{{ foo | bar }}',      
array('foo' => 'FOO', 'bar' => array(1,
2))),
            array('{{% FILTERS }}{{ foo | bar | baz }}',
array('foo' => 'FOO', 'bar' => function
() {
                return 'BAR';
            })),
            array('{{% FILTERS }}{{ foo | bar | baz }}',
array('foo' => 'FOO', 'baz' => function
() {
                return 'BAZ';
            })),
            array('{{% FILTERS }}{{ foo | bar | baz }}',
array('bar' => function () {
                return 'BAR';
            })),
            array('{{% FILTERS }}{{ foo | bar | baz }}',
array('baz' => function () {
                return 'BAZ';
            })),
            array('{{% FILTERS }}{{ foo | bar.baz }}',  
array('foo' => 'FOO', 'bar' => function
() {
                return 'BAR';
            }, 'baz' => function () {
                return 'BAZ';
            })),

            array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar
}}',             array()),
            array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar
}}',             array('foo' => 'FOO')),
            array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar
}}',             array('foo' => 'FOO',
'bar' => 'BAR')),
            array('{{% FILTERS }}{{# foo | bar }}{{ . }}{{/ foo | bar
}}',             array('foo' => 'FOO',
'bar' => array(1, 2))),
            array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo
| bar | baz }}', array('foo' => 'FOO',
'bar' => function () {
                return 'BAR';
            })),
            array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo
| bar | baz }}', array('foo' => 'FOO',
'baz' => function () {
                return 'BAZ';
            })),
            array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo
| bar | baz }}', array('bar' => function () {
                return 'BAR';
            })),
            array('{{% FILTERS }}{{# foo | bar | baz }}{{ . }}{{/ foo
| bar | baz }}', array('baz' => function () {
                return 'BAZ';
            })),
            array('{{% FILTERS }}{{# foo | bar.baz }}{{ . }}{{/ foo |
bar.baz }}',     array('foo' => 'FOO',
'bar' => function () {
                return 'BAR';
            }, 'baz' => function () {
                return 'BAZ';
            })),
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/HigherOrderSectionsTest.php000064400000004047151160724640026413
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_HigherOrderSectionsTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    public function testAnonymousFunctionSectionCallback()
    {
        $tpl =
$this->mustache->loadTemplate('{{#wrapper}}{{name}}{{/wrapper}}');

        $foo = new Mustache_Test_FiveThree_Functional_Foo();
        $foo->name = 'Mario';
        $foo->wrapper = function ($text) {
            return sprintf('<div
class="anonymous">%s</div>', $text);
        };

        $this->assertEquals(sprintf('<div
class="anonymous">%s</div>', $foo->name),
$tpl->render($foo));
    }

    public function testSectionCallback()
    {
        $one = $this->mustache->loadTemplate('{{name}}');
        $two =
$this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

        $foo = new Mustache_Test_FiveThree_Functional_Foo();
        $foo->name = 'Luigi';

        $this->assertEquals($foo->name, $one->render($foo));
        $this->assertEquals(sprintf('<em>%s</em>',
$foo->name), $two->render($foo));
    }

    public function testViewArrayAnonymousSectionCallback()
    {
        $tpl =
$this->mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

        $data = array(
            'name' => 'Bob',
            'wrap' => function ($text) {
                return sprintf('[[%s]]', $text);
            },
        );

        $this->assertEquals(sprintf('[[%s]]',
$data['name']), $tpl->render($data));
    }
}

class Mustache_Test_FiveThree_Functional_Foo
{
    public $name  = 'Justin';
    public $lorem = 'Lorem ipsum dolor sit amet,';
    public $wrap;

    public function __construct()
    {
        $this->wrap = function ($text) {
            return sprintf('<em>%s</em>', $text);
        };
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/LambdaHelperTest.php000064400000003544151160724640025022
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_LambdaHelperTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    public function testSectionLambdaHelper()
    {
        $one = $this->mustache->loadTemplate('{{name}}');
        $two =
$this->mustache->loadTemplate('{{#lambda}}{{name}}{{/lambda}}');

        $foo = new StdClass();
        $foo->name = 'Mario';
        $foo->lambda = function ($text, $mustache) {
            return strtoupper($mustache->render($text));
        };

        $this->assertEquals('Mario', $one->render($foo));
        $this->assertEquals('MARIO', $two->render($foo));
    }

    public function testSectionLambdaHelperRespectsDelimiterChanges()
    {
        $tpl = $this->mustache->loadTemplate("{{=<%
%>=}}\n<%# bang %><% value %><%/ bang %>");

        $data = new StdClass();
        $data->value = 'hello world';
        $data->bang = function ($text, $mustache) {
            return $mustache->render($text) . '!';
        };

        $this->assertEquals('hello world!',
$tpl->render($data));
    }

    public function testLambdaHelperIsInvokable()
    {
        $one = $this->mustache->loadTemplate('{{name}}');
        $two =
$this->mustache->loadTemplate('{{#lambda}}{{name}}{{/lambda}}');

        $foo = new StdClass();
        $foo->name = 'Mario';
        $foo->lambda = function ($text, $render) {
            return strtoupper($render($text));
        };

        $this->assertEquals('Mario', $one->render($foo));
        $this->assertEquals('MARIO', $two->render($foo));
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/MustacheSpecTest.php000064400000003713151160724640025064
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A PHPUnit test case wrapping the Mustache Spec.
 *
 * @group mustache-spec
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_MustacheSpecTest extends
Mustache_Test_SpecTestCase
{
    /**
     * For some reason data providers can't mark tests skipped, so
this test exists
     * simply to provide a 'skipped' test if the `spec` submodule
isn't initialized.
     */
    public function testSpecInitialized()
    {
        if (!file_exists(dirname(__FILE__) .
'/../../../../../vendor/spec/specs/')) {
            $this->markTestSkipped('Mustache spec submodule not
initialized: run "git submodule update --init"');
        }
    }

    /**
     * @group lambdas
     * @dataProvider loadLambdasSpec
     */
    public function testLambdasSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected,
$template($this->prepareLambdasSpec($data)), $desc);
    }

    public function loadLambdasSpec()
    {
        return $this->loadSpec('~lambdas');
    }

    /**
     * Extract and lambdafy any 'lambda' values found in the
$data array.
     */
    private function prepareLambdasSpec($data)
    {
        foreach ($data as $key => $val) {
            if ($key === 'lambda') {
                if (!isset($val['php'])) {
                    $this->markTestSkipped(sprintf('PHP lambda test
not implemented for this test.'));
                }

                $func = $val['php'];
                $data[$key] = function ($text = null) use ($func) {
                    return eval($func);
                };
            } elseif (is_array($val)) {
                $data[$key] = $this->prepareLambdasSpec($val);
            }
        }

        return $data;
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/PartialLambdaIndentTest.php000064400000003566151160724640026345
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_PartialLambdaIndentTest extends
PHPUnit_Framework_TestCase
{
    public function testLambdasInsidePartialsAreIndentedProperly()
    {
        $src = <<<'EOS'
<fieldset>
  {{> input }}
</fieldset>

EOS;
        $partial = <<<'EOS'
<input placeholder="{{# _t }}Enter your name{{/ _t }}">

EOS;

        $expected = <<<'EOS'
<fieldset>
  <input placeholder="ENTER YOUR NAME">
</fieldset>

EOS;

        $m = new Mustache_Engine(array(
            'partials' => array('input' =>
$partial),
        ));

        $tpl = $m->loadTemplate($src);

        $data = new Mustache_Test_FiveThree_Functional_ClassWithLambda();
        $this->assertEquals($expected, $tpl->render($data));
    }

    public function
testLambdaInterpolationsInsidePartialsAreIndentedProperly()
    {
        $src = <<<'EOS'
<fieldset>
  {{> input }}
</fieldset>

EOS;
        $partial = <<<'EOS'
<input placeholder="{{ placeholder }}">

EOS;

        $expected = <<<'EOS'
<fieldset>
  <input placeholder="Enter your name">
</fieldset>

EOS;

        $m = new Mustache_Engine(array(
            'partials' => array('input' =>
$partial),
        ));

        $tpl = $m->loadTemplate($src);

        $data = new Mustache_Test_FiveThree_Functional_ClassWithLambda();
        $this->assertEquals($expected, $tpl->render($data));
    }
}

class Mustache_Test_FiveThree_Functional_ClassWithLambda
{
    public function _t()
    {
        return function ($val) {
            return strtoupper($val);
        };
    }

    public function placeholder()
    {
        return function () {
            return 'Enter your name';
        };
    }
}
vendor/mustache/mustache/test/Mustache/Test/FiveThree/Functional/StrictCallablesTest.php000064400000006300151160724640025546
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_FiveThree_Functional_StrictCallablesTest extends
PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider callables
     */
    public function testStrictCallables($strict, $name, $section,
$expected)
    {
        $mustache = new Mustache_Engine(array('strict_callables'
=> $strict));
        $tpl      = $mustache->loadTemplate('{{# section }}{{ name
}}{{/ section }}');

        $data = new StdClass();
        $data->name    = $name;
        $data->section = $section;

        $this->assertEquals($expected, $tpl->render($data));
    }

    public function callables()
    {
        $lambda = function ($tpl, $mustache) {
            return strtoupper($mustache->render($tpl));
        };

        return array(
            // Interpolation lambdas
            array(
                false,
                array($this, 'instanceName'),
                $lambda,
                'YOSHI',
            ),
            array(
                false,
                array(__CLASS__, 'staticName'),
                $lambda,
                'YOSHI',
            ),
            array(
                false,
                function () {
                    return 'Yoshi';
                },
                $lambda,
                'YOSHI',
            ),

            // Section lambdas
            array(
                false,
                'Yoshi',
                array($this, 'instanceCallable'),
                'YOSHI',
            ),
            array(
                false,
                'Yoshi',
                array(__CLASS__, 'staticCallable'),
                'YOSHI',
            ),
            array(
                false,
                'Yoshi',
                $lambda,
                'YOSHI',
            ),

            // Strict interpolation lambdas
            array(
                true,
                function () {
                    return 'Yoshi';
                },
                $lambda,
                'YOSHI',
            ),

            // Strict section lambdas
            array(
                true,
                'Yoshi',
                array($this, 'instanceCallable'),
                'YoshiYoshi',
            ),
            array(
                true,
                'Yoshi',
                array(__CLASS__, 'staticCallable'),
                'YoshiYoshi',
            ),
            array(
                true,
                'Yoshi',
                function ($tpl, $mustache) {
                    return strtoupper($mustache->render($tpl));
                },
                'YOSHI',
            ),
        );
    }

    public function instanceCallable($tpl, $mustache)
    {
        return strtoupper($mustache->render($tpl));
    }

    public static function staticCallable($tpl, $mustache)
    {
        return strtoupper($mustache->render($tpl));
    }

    public function instanceName()
    {
        return 'Yoshi';
    }

    public static function staticName()
    {
        return 'Yoshi';
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/CallTest.php000064400000001570151160724640021471
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group magic_methods
 * @group functional
 */
class Mustache_Test_Functional_CallTest extends PHPUnit_Framework_TestCase
{
    public function testCallEatsContext()
    {
        $m = new Mustache_Engine();
        $tpl = $m->loadTemplate('{{# foo }}{{ label }}: {{ name
}}{{/ foo }}');

        $foo = new Mustache_Test_Functional_ClassWithCall();
        $foo->name = 'Bob';

        $data = array('label' => 'name',
'foo' => $foo);

        $this->assertEquals('name: Bob',
$tpl->render($data));
    }
}

class Mustache_Test_Functional_ClassWithCall
{
    public $name;

    public function __call($method, $args)
    {
        return 'unknown value';
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/ExamplesTest.php000064400000007634151160724640022403
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group examples
 * @group functional
 */
class Mustache_Test_Functional_ExamplesTest extends
PHPUnit_Framework_TestCase
{
    /**
     * Test everything in the `examples` directory.
     *
     * @dataProvider getExamples
     *
     * @param string $context
     * @param string $source
     * @param array  $partials
     * @param string $expected
     */
    public function testExamples($context, $source, $partials, $expected)
    {
        $mustache = new Mustache_Engine(array(
            'partials' => $partials,
        ));
        $this->assertEquals($expected,
$mustache->loadTemplate($source)->render($context));
    }

    /**
     * Data provider for testExamples method.
     *
     * Loads examples from the test fixtures directory.
     *
     * This examples directory should contain any number of subdirectories,
each of which contains
     * three files: one Mustache class (.php), one Mustache template
(.mustache), and one output file
     * (.txt). Optionally, the directory may contain a folder full of
partials.
     *
     * @return array
     */
    public function getExamples()
    {
        $path     = realpath(dirname(__FILE__) .
'/../../../fixtures/examples');
        $examples = array();

        $handle   = opendir($path);
        while (($file = readdir($handle)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            $fullpath = $path . '/' . $file;
            if (is_dir($fullpath)) {
                $examples[$file] = $this->loadExample($fullpath);
            }
        }
        closedir($handle);

        return $examples;
    }

    /**
     * Helper method to load an example given the full path.
     *
     * @param string $path
     *
     * @return array arguments for testExamples
     */
    private function loadExample($path)
    {
        $context  = null;
        $source   = null;
        $partials = array();
        $expected = null;

        $handle = opendir($path);
        while (($file = readdir($handle)) !== false) {
            $fullpath = $path . '/' . $file;
            $info = pathinfo($fullpath);

            if (is_dir($fullpath) && $info['basename']
=== 'partials') {
                // load partials
                $partials = $this->loadPartials($fullpath);
            } elseif (is_file($fullpath)) {
                // load other files
                switch ($info['extension']) {
                    case 'php':
                        require_once $fullpath;
                        $className = $info['filename'];
                        $context   = new $className();
                        break;

                    case 'mustache':
                        $source   = file_get_contents($fullpath);
                        break;

                    case 'txt':
                        $expected = file_get_contents($fullpath);
                        break;
                }
            }
        }
        closedir($handle);

        return array($context, $source, $partials, $expected);
    }

    /**
     * Helper method to load partials given an example directory.
     *
     * @param string $path
     *
     * @return array $partials
     */
    private function loadPartials($path)
    {
        $partials = array();

        $handle = opendir($path);
        while (($file = readdir($handle)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            $fullpath = $path . '/' . $file;
            $info = pathinfo($fullpath);

            if ($info['extension'] === 'mustache') {
                $partials[$info['filename']] =
file_get_contents($fullpath);
            }
        }
        closedir($handle);

        return $partials;
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/HigherOrderSectionsTest.php000064400000011713151160724640024530
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group lambdas
 * @group functional
 */
class Mustache_Test_Functional_HigherOrderSectionsTest extends
Mustache_Test_FunctionalTestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    /**
     * @dataProvider sectionCallbackData
     */
    public function testSectionCallback($data, $tpl, $expect)
    {
        $this->assertEquals($expect, $this->mustache->render($tpl,
$data));
    }

    public function sectionCallbackData()
    {
        $foo = new Mustache_Test_Functional_Foo();
        $foo->doublewrap = array($foo, 'wrapWithBoth');

        $bar = new Mustache_Test_Functional_Foo();
        $bar->trimmer = array(get_class($bar), 'staticTrim');

        return array(
            array($foo, '{{#doublewrap}}{{name}}{{/doublewrap}}',
sprintf('<strong><em>%s</em></strong>',
$foo->name)),
            array($bar, '{{#trimmer}}   {{name}}   {{/trimmer}}',
$bar->name),
        );
    }

    public function testViewArraySectionCallback()
    {
        $tpl = $this->mustache->loadTemplate('{{#trim}}   
{{name}}    {{/trim}}');

        $foo = new Mustache_Test_Functional_Foo();

        $data = array(
            'name' => 'Bob',
            'trim' => array(get_class($foo),
'staticTrim'),
        );

        $this->assertEquals($data['name'],
$tpl->render($data));
    }

    public function testMonsters()
    {
        $tpl =
$this->mustache->loadTemplate('{{#title}}{{title}}
{{/title}}{{name}}');

        $frank = new Mustache_Test_Functional_Monster();
        $frank->title = 'Dr.';
        $frank->name  = 'Frankenstein';
        $this->assertEquals('Dr. Frankenstein',
$tpl->render($frank));

        $dracula = new Mustache_Test_Functional_Monster();
        $dracula->title = 'Count';
        $dracula->name  = 'Dracula';
        $this->assertEquals('Count Dracula',
$tpl->render($dracula));
    }

    public function testPassthroughOptimization()
    {
        $mustache = $this->getMock('Mustache_Engine',
array('loadLambda'));
        $mustache->expects($this->never())
            ->method('loadLambda');

        $tpl =
$mustache->loadTemplate('{{#wrap}}NAME{{/wrap}}');

        $foo = new Mustache_Test_Functional_Foo();
        $foo->wrap = array($foo, 'wrapWithEm');

        $this->assertEquals('<em>NAME</em>',
$tpl->render($foo));
    }

    public function testWithoutPassthroughOptimization()
    {
        $mustache = $this->getMock('Mustache_Engine',
array('loadLambda'));
        $mustache->expects($this->once())
            ->method('loadLambda')
           
->will($this->returnValue($mustache->loadTemplate('<em>{{
name }}</em>')));

        $tpl =
$mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');

        $foo = new Mustache_Test_Functional_Foo();
        $foo->wrap = array($foo, 'wrapWithEm');

        $this->assertEquals('<em>' . $foo->name .
'</em>', $tpl->render($foo));
    }

    /**
     * @dataProvider cacheLambdaTemplatesData
     */
    public function testCacheLambdaTemplatesOptionWorks($dirName,
$tplPrefix, $enable, $expect)
    {
        $cacheDir = $this->setUpCacheDir($dirName);
        $mustache = new Mustache_Engine(array(
            'template_class_prefix'  => $tplPrefix,
            'cache'                  => $cacheDir,
            'cache_lambda_templates' => $enable,
        ));

        $tpl =
$mustache->loadTemplate('{{#wrap}}{{name}}{{/wrap}}');
        $foo = new Mustache_Test_Functional_Foo();
        $foo->wrap = array($foo, 'wrapWithEm');
        $this->assertEquals('<em>' . $foo->name .
'</em>', $tpl->render($foo));
        $this->assertCount($expect, glob($cacheDir .
'/*.php'));
    }

    public function cacheLambdaTemplatesData()
    {
        return array(
            array('test_enabling_lambda_cache', 
'_TestEnablingLambdaCache_',  true,  2),
            array('test_disabling_lambda_cache',
'_TestDisablingLambdaCache_', false, 1),
        );
    }

    protected function setUpCacheDir($name)
    {
        $cacheDir = self::$tempDir . '/' . $name;
        if (file_exists($cacheDir)) {
            self::rmdir($cacheDir);
        }
        mkdir($cacheDir, 0777, true);

        return $cacheDir;
    }
}

class Mustache_Test_Functional_Foo
{
    public $name = 'Justin';
    public $lorem = 'Lorem ipsum dolor sit amet,';

    public function wrapWithEm($text)
    {
        return sprintf('<em>%s</em>', $text);
    }

    /**
     * @param string $text
     */
    public function wrapWithStrong($text)
    {
        return sprintf('<strong>%s</strong>', $text);
    }

    public function wrapWithBoth($text)
    {
        return self::wrapWithStrong(self::wrapWithEm($text));
    }

    public static function staticTrim($text)
    {
        return trim($text);
    }
}

class Mustache_Test_Functional_Monster
{
    public $title;
    public $name;
}
vendor/mustache/mustache/test/Mustache/Test/Functional/InheritanceTest.php000064400000035637151160724640023062
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group inheritance
 * @group functional
 */
class Mustache_Test_Functional_InheritanceTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine(array(
            'pragmas' =>
array(Mustache_Engine::PRAGMA_BLOCKS),
        ));
    }

    public function getIllegalInheritanceExamples()
    {
        return array(
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                ),
                array(
                    'bar' => 'set by user',
                ),
                '{{< foo }}{{# bar }}{{$ baz }}{{/ baz }}{{/ bar
}}{{/ foo }}',
            ),
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                ),
                array(
                ),
                '{{<foo}}{{^bar}}{{$baz}}set by
template{{/baz}}{{/bar}}{{/foo}}',
            ),
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                    'qux' => 'I am a partial',
                ),
                array(
                ),
                '{{<foo}}{{>qux}}{{$baz}}set by
template{{/baz}}{{/foo}}',
            ),
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                ),
                array(),
                '{{<foo}}{{=<% %>=}}<%={{
}}=%>{{/foo}}',
            ),
        );
    }

    public function getLegalInheritanceExamples()
    {
        return array(
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                ),
                array(
                    'bar' => 'set by user',
                ),
               
'{{<foo}}{{bar}}{{$baz}}override{{/baz}}{{/foo}}',
                'override',
            ),
            array(
                array(
                    'foo' => '{{$baz}}default
content{{/baz}}',
                ),
                array(
                ),
                '{{<foo}}{{! ignore me }}{{$baz}}set by
template{{/baz}}{{/foo}}',
                'set by template',
            ),
            array(
                array(
                    'foo' => '{{$baz}}defualt
content{{/baz}}',
                ),
                array(),
                '{{<foo}}set by template{{$baz}}also set by
template{{/baz}}{{/foo}}',
                'also set by template',
            ),
            array(
                array(
                    'foo' => '{{$a}}FAIL!{{/a}}',
                    'bar' => 'WIN!!',
                ),
                array(),
               
'{{<foo}}{{$a}}{{<bar}}FAIL{{/bar}}{{/a}}{{/foo}}',
                'WIN!!',
            ),
        );
    }

    public function testDefaultContent()
    {
        $tpl = $this->mustache->loadTemplate('{{$title}}Default
title{{/title}}');

        $data = array();

        $this->assertEquals('Default title',
$tpl->render($data));
    }

    public function testDefaultContentRendersVariables()
    {
        $tpl = $this->mustache->loadTemplate('{{$foo}}default
{{bar}} content{{/foo}}');

        $data = array(
            'bar' => 'baz',
        );

        $this->assertEquals('default baz content',
$tpl->render($data));
    }

    public function testDefaultContentRendersTripleMustacheVariables()
    {
        $tpl = $this->mustache->loadTemplate('{{$foo}}default
{{{bar}}} content{{/foo}}');

        $data = array(
            'bar' => '<baz>',
        );

        $this->assertEquals('default <baz> content',
$tpl->render($data));
    }

    public function testDefaultContentRendersSections()
    {
        $tpl = $this->mustache->loadTemplate(
            '{{$foo}}default {{#bar}}{{baz}}{{/bar}}
content{{/foo}}'
        );

        $data = array(
            'bar' => array('baz' =>
'qux'),
        );

        $this->assertEquals('default qux content',
$tpl->render($data));
    }

    public function testDefaultContentRendersNegativeSections()
    {
        $tpl = $this->mustache->loadTemplate(
            '{{$foo}}default {{^bar}}{{baz}}{{/bar}}
content{{/foo}}'
        );

        $data = array(
            'foo' => array('bar' =>
'qux'),
            'baz' => 'three',
        );

        $this->assertEquals('default three content',
$tpl->render($data));
    }

    public function testMustacheInjectionInDefaultContent()
    {
        $tpl = $this->mustache->loadTemplate(
            '{{$foo}}default {{#bar}}{{baz}}{{/bar}}
content{{/foo}}'
        );

        $data = array(
            'bar' => array('baz' =>
'{{qux}}'),
        );

        $this->assertEquals('default {{qux}} content',
$tpl->render($data));
    }

    public function testDefaultContentRenderedInsideIncludedTemplates()
    {
        $partials = array(
            'include' => '{{$foo}}default
content{{/foo}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}}{{/include}}'
        );

        $data = array();

        $this->assertEquals('default content',
$tpl->render($data));
    }

    public function testOverriddenContent()
    {
        $partials = array(
            'super' => '...{{$title}}Default
title{{/title}}...',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<super}}{{$title}}sub template
title{{/title}}{{/super}}'
        );

        $data = array();

        $this->assertEquals('...sub template title...',
$tpl->render($data));
    }

    public function testOverriddenPartial()
    {
        $partials = array(
            'partial' =>
'|{{$stuff}}...{{/stuff}}{{$default}} default{{/default}}|',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            'test
{{<partial}}{{$stuff}}override1{{/stuff}}{{/partial}}
{{<partial}}{{$stuff}}override2{{/stuff}}{{/partial}}'
        );

        $data = array();

        $this->assertEquals('test |override1 default| |override2
default|', $tpl->render($data));
    }

    public function testBlocksDoNotLeakBetweenPartials()
    {
        $partials = array(
            'partial' => '|{{$a}}A{{/a}}
{{$b}}B{{/b}}|',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            'test {{<partial}}{{$a}}C{{/a}}{{/partial}}
{{<partial}}{{$b}}D{{/b}}{{/partial}}'
        );

        $data = array();

        $this->assertEquals('test |C B| |A D|',
$tpl->render($data));
    }

    public function testDataDoesNotOverrideBlock()
    {
        $partials = array(
            'include' => '{{$var}}var in
include{{/var}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}}{{$var}}var in
template{{/var}}{{/include}}'
        );

        $data = array(
            'var' => 'var in data',
        );

        $this->assertEquals('var in template',
$tpl->render($data));
    }

    public function testDataDoesNotOverrideDefaultBlockValue()
    {
        $partials = array(
            'include' => '{{$var}}var in
include{{/var}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}}{{/include}}'
        );

        $data = array(
            'var' => 'var in data',
        );

        $this->assertEquals('var in include',
$tpl->render($data));
    }

    public function testOverridePartialWithNewlines()
    {
        $partials = array(
            'partial' =>
'{{$ballmer}}peaking{{/ballmer}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
           
"{{<partial}}{{\$ballmer}}\npeaked\n\n:(\n{{/ballmer}}{{/partial}}"
        );

        $data = array();

        $this->assertEquals("peaked\n\n:(\n",
$tpl->render($data));
    }

    public function testInheritIndentationWhenOverridingAPartial()
    {
        $partials = array(
            'partial' => 'stop:
                    {{$nineties}}collaborate and listen{{/nineties}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<partial}}{{$nineties}}hammer
time{{/nineties}}{{/partial}}'
        );

        $data = array();

        $this->assertEquals(
            'stop:
                    hammer time',
            $tpl->render($data)
        );
    }

    public function testInheritSpacingWhenOverridingAPartial()
    {
        $partials = array(
            'parent' =>
'collaborate_and{{$id}}{{/id}}',
            'child'  =>
'{{<parent}}{{$id}}_listen{{/id}}{{/parent}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            'stop:
              {{>child}}'
        );

        $data = array();

        $this->assertEquals(
            'stop:
              collaborate_and_listen',
            $tpl->render($data)
        );
    }

    public function testOverrideOneSubstitutionButNotTheOther()
    {
        $partials = array(
            'partial' => '{{$stuff}}default
one{{/stuff}}, {{$stuff2}}default two{{/stuff2}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<partial}}{{$stuff2}}override
two{{/stuff2}}{{/partial}}'
        );

        $data = array();

        $this->assertEquals('default one, override two',
$tpl->render($data));
    }

    public function testSuperTemplatesWithNoParameters()
    {
        $partials = array(
            'include' => '{{$foo}}default
content{{/foo}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{>include}}|{{<include}}{{/include}}'
        );

        $data = array();

        $this->assertEquals('default content|default content',
$tpl->render($data));
    }

    public function testRecursionInInheritedTemplates()
    {
        $partials = array(
            'include'  => '{{$foo}}default
content{{/foo}} {{$bar}}{{<include2}}{{/include2}}{{/bar}}',
            'include2' => '{{$foo}}include2 default
content{{/foo}} {{<include}}{{$bar}}don\'t
recurse{{/bar}}{{/include}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}}{{$foo}}override{{/foo}}{{/include}}'
        );

        $data = array();

        $this->assertEquals('override override override don\'t
recurse', $tpl->render($data));
    }

    public function
testTopLevelSubstitutionsTakePrecedenceInMultilevelInheritance()
    {
        $partials = array(
            'parent'      =>
'{{<older}}{{$a}}p{{/a}}{{/older}}',
            'older'       =>
'{{<grandParent}}{{$a}}o{{/a}}{{/grandParent}}',
            'grandParent' => '{{$a}}g{{/a}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<parent}}{{$a}}c{{/a}}{{/parent}}'
        );

        $data = array();

        $this->assertEquals('c', $tpl->render($data));
    }

    public function testMultiLevelInheritanceNoSubChild()
    {
        $partials = array(
            'parent'      =>
'{{<older}}{{$a}}p{{/a}}{{/older}}',
            'older'       =>
'{{<grandParent}}{{$a}}o{{/a}}{{/grandParent}}',
            'grandParent' => '{{$a}}g{{/a}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<parent}}{{/parent}}'
        );

        $data = array();

        $this->assertEquals('p', $tpl->render($data));
    }

    public function testIgnoreTextInsideSuperTemplatesButParseArgs()
    {
        $partials = array(
            'include' => '{{$foo}}default
content{{/foo}}',
         );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}} asdfasd {{$foo}}hmm{{/foo}} asdfasdfasdf
{{/include}}'
        );

        $data = array();

        $this->assertEquals('hmm', $tpl->render($data));
    }

    public function testIgnoreTextInsideSuperTemplates()
    {
        $partials = array(
            'include' => '{{$foo}}default
content{{/foo}}',
         );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<include}} asdfasd asdfasdfasdf {{/include}}'
        );

        $data = array();

        $this->assertEquals('default content',
$tpl->render($data));
    }

    public function testInheritanceWithLazyEvaluation()
    {
        $partials = array(
            'parent' =>
'{{#items}}{{$value}}ignored{{/value}}{{/items}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<parent}}{{$value}}<{{ .
}}>{{/value}}{{/parent}}'
        );

        $data = array('items' => array(1, 2, 3));

        $this->assertEquals('<1><2><3>',
$tpl->render($data));
    }

    public function testInheritanceWithLazyEvaluationWhitespaceIgnored()
    {
        $partials = array(
            'parent' =>
'{{#items}}{{$value}}\n\nignored\n\n{{/value}}{{/items}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<parent}}\n\n\n{{$value}}<{{ .
}}>{{/value}}\n\n{{/parent}}'
        );

        $data = array('items' => array(1, 2, 3));

        $this->assertEquals('<1><2><3>',
$tpl->render($data));
    }

    public function testInheritanceWithLazyEvaluationAndSections()
    {
        $partials = array(
            'parent' => '{{#items}}{{$value}}\n\nignored
{{.}} {{#more}} there is more {{/more}}\n\n{{/value}}{{/items}}',
        );

        $this->mustache->setPartials($partials);

        $tpl = $this->mustache->loadTemplate(
            '{{<parent}}\n\n\n{{$value}}<{{ . }}>{{#more}}
there is less {{/more}}{{/value}}\n\n{{/parent}}'
        );

        $data = array('items' => array(1, 2, 3),
'more' => 'stuff');

        $this->assertEquals('<1> there is less <2>
there is less <3> there is less ', $tpl->render($data));
    }

    /**
     * @dataProvider getIllegalInheritanceExamples
     * @expectedException Mustache_Exception_SyntaxException
     * @expectedExceptionMessage Illegal content in < parent tag
     */
    public function testIllegalInheritanceExamples($partials, $data,
$template)
    {
        $this->mustache->setPartials($partials);
        $tpl = $this->mustache->loadTemplate($template);
        $tpl->render($data);
    }

    /**
     * @dataProvider getLegalInheritanceExamples
     */
    public function testLegalInheritanceExamples($partials, $data,
$template, $expect)
    {
        $this->mustache->setPartials($partials);
        $tpl = $this->mustache->loadTemplate($template);
        $this->assertSame($expect, $tpl->render($data));
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheInjectionTest.php000064400000004342151160724640024232
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group mustache_injection
 * @group functional
 */
class Mustache_Test_Functional_MustacheInjectionTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    /**
     * @dataProvider injectionData
     */
    public function testInjection($tpl, $data, $partials, $expect)
    {
        $this->mustache->setPartials($partials);
        $this->assertEquals($expect, $this->mustache->render($tpl,
$data));
    }

    public function injectionData()
    {
        $interpolationData = array(
            'a' => '{{ b }}',
            'b' => 'FAIL',
        );

        $sectionData = array(
            'a' => true,
            'b' => '{{ c }}',
            'c' => 'FAIL',
        );

        $lambdaInterpolationData = array(
            'a' => array($this,
'lambdaInterpolationCallback'),
            'b' => '{{ c }}',
            'c' => 'FAIL',
        );

        $lambdaSectionData = array(
            'a' => array($this,
'lambdaSectionCallback'),
            'b' => '{{ c }}',
            'c' => 'FAIL',
        );

        return array(
            array('{{ a }}',   $interpolationData, array(),
'{{ b }}'),
            array('{{{ a }}}', $interpolationData, array(),
'{{ b }}'),

            array('{{# a }}{{ b }}{{/ a }}',   $sectionData,
array(), '{{ c }}'),
            array('{{# a }}{{{ b }}}{{/ a }}', $sectionData,
array(), '{{ c }}'),

            array('{{> partial }}', $interpolationData,
array('partial' => '{{ a }}'),   '{{ b
}}'),
            array('{{> partial }}', $interpolationData,
array('partial' => '{{{ a }}}'), '{{ b
}}'),

            array('{{ a }}',           $lambdaInterpolationData,
array(), '{{ c }}'),
            array('{{# a }}b{{/ a }}', $lambdaSectionData,      
array(), '{{ c }}'),
        );
    }

    public static function lambdaInterpolationCallback()
    {
        return '{{ b }}';
    }

    public static function lambdaSectionCallback($text)
    {
        return '{{ ' . $text . ' }}';
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/MustacheSpecTest.php000064400000006400151160724640023177
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * A PHPUnit test case wrapping the Mustache Spec.
 *
 * @group mustache-spec
 * @group functional
 */
class Mustache_Test_Functional_MustacheSpecTest extends
Mustache_Test_SpecTestCase
{
    /**
     * For some reason data providers can't mark tests skipped, so
this test exists
     * simply to provide a 'skipped' test if the `spec` submodule
isn't initialized.
     */
    public function testSpecInitialized()
    {
        if (!file_exists(dirname(__FILE__) .
'/../../../../vendor/spec/specs/')) {
            $this->markTestSkipped('Mustache spec submodule not
initialized: run "git submodule update --init"');
        }
    }

    /**
     * @group comments
     * @dataProvider loadCommentSpec
     */
    public function testCommentSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadCommentSpec()
    {
        return $this->loadSpec('comments');
    }

    /**
     * @group delimiters
     * @dataProvider loadDelimitersSpec
     */
    public function testDelimitersSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadDelimitersSpec()
    {
        return $this->loadSpec('delimiters');
    }

    /**
     * @group interpolation
     * @dataProvider loadInterpolationSpec
     */
    public function testInterpolationSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadInterpolationSpec()
    {
        return $this->loadSpec('interpolation');
    }

    /**
     * @group inverted
     * @group inverted-sections
     * @dataProvider loadInvertedSpec
     */
    public function testInvertedSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadInvertedSpec()
    {
        return $this->loadSpec('inverted');
    }

    /**
     * @group partials
     * @dataProvider loadPartialsSpec
     */
    public function testPartialsSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadPartialsSpec()
    {
        return $this->loadSpec('partials');
    }

    /**
     * @group sections
     * @dataProvider loadSectionsSpec
     */
    public function testSectionsSpec($desc, $source, $partials, $data,
$expected)
    {
        $template = self::loadTemplate($source, $partials);
        $this->assertEquals($expected, $template->render($data),
$desc);
    }

    public function loadSectionsSpec()
    {
        return $this->loadSpec('sections');
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/NestedPartialIndentTest.php000064400000002127151160724640024516
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group functional
 * @group partials
 */
class Mustache_Test_Functional_NestedPartialIndentTest extends
PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider partialsAndStuff
     */
    public function testNestedPartialsAreIndentedProperly($src, array
$partials, $expected)
    {
        $m = new Mustache_Engine(array(
            'partials' => $partials,
        ));
        $tpl = $m->loadTemplate($src);
        $this->assertEquals($expected, $tpl->render());
    }

    public function partialsAndStuff()
    {
        $partials = array(
            'a' => ' {{> b }}',
            'b' => ' {{> d }}',
            'c' => ' {{> d }}{{> d }}',
            'd' => 'D!',
        );

        return array(
            array(' {{> a }}', $partials, '   D!'),
            array(' {{> b }}', $partials, '  D!'),
            array(' {{> c }}', $partials, '  D!D!'),
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/Functional/ObjectSectionTest.php000064400000004660151160724640023354
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group sections
 * @group functional
 */
class Mustache_Test_Functional_ObjectSectionTest extends
PHPUnit_Framework_TestCase
{
    private $mustache;

    public function setUp()
    {
        $this->mustache = new Mustache_Engine();
    }

    public function testBasicObject()
    {
        $tpl =
$this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}');
        $this->assertEquals('Foo', $tpl->render(new
Mustache_Test_Functional_Alpha()));
    }

    /**
     * @group magic_methods
     */
    public function testObjectWithGet()
    {
        $tpl =
$this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}');
        $this->assertEquals('Foo', $tpl->render(new
Mustache_Test_Functional_Beta()));
    }

    /**
     * @group magic_methods
     */
    public function testSectionObjectWithGet()
    {
        $tpl =
$this->mustache->loadTemplate('{{#bar}}{{#foo}}{{name}}{{/foo}}{{/bar}}');
        $this->assertEquals('Foo', $tpl->render(new
Mustache_Test_Functional_Gamma()));
    }

    public function testSectionObjectWithFunction()
    {
        $tpl =
$this->mustache->loadTemplate('{{#foo}}{{name}}{{/foo}}');
        $alpha = new Mustache_Test_Functional_Alpha();
        $alpha->foo = new Mustache_Test_Functional_Delta();
        $this->assertEquals('Foo', $tpl->render($alpha));
    }
}

class Mustache_Test_Functional_Alpha
{
    public $foo;

    public function __construct()
    {
        $this->foo = new StdClass();
        $this->foo->name = 'Foo';
        $this->foo->number = 1;
    }
}

class Mustache_Test_Functional_Beta
{
    protected $_data = array();

    public function __construct()
    {
        $this->_data['foo'] = new StdClass();
        $this->_data['foo']->name = 'Foo';
        $this->_data['foo']->number = 1;
    }

    public function __isset($name)
    {
        return array_key_exists($name, $this->_data);
    }

    public function __get($name)
    {
        return $this->_data[$name];
    }
}

class Mustache_Test_Functional_Gamma
{
    public $bar;

    public function __construct()
    {
        $this->bar = new Mustache_Test_Functional_Beta();
    }
}

class Mustache_Test_Functional_Delta
{
    protected $_name = 'Foo';

    public function name()
    {
        return $this->_name;
    }
}
vendor/mustache/mustache/test/Mustache/Test/FunctionalTestCase.php000064400000002140151160724640021404
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

abstract class Mustache_Test_FunctionalTestCase extends
PHPUnit_Framework_TestCase
{
    protected static $tempDir;

    public static function setUpBeforeClass()
    {
        self::$tempDir = sys_get_temp_dir() . '/mustache_test';
        if (file_exists(self::$tempDir)) {
            self::rmdir(self::$tempDir);
        }
    }

    /**
     * @param string $path
     */
    protected static function rmdir($path)
    {
        $path = rtrim($path, '/') . '/';
        $handle = opendir($path);
        while (($file = readdir($handle)) !== false) {
            if ($file === '.' || $file === '..') {
                continue;
            }

            $fullpath = $path . $file;
            if (is_dir($fullpath)) {
                self::rmdir($fullpath);
            } else {
                unlink($fullpath);
            }
        }

        closedir($handle);
        rmdir($path);
    }
}
vendor/mustache/mustache/test/Mustache/Test/HelperCollectionTest.php000064400000011366151160724640021753
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

class Mustache_Test_HelperCollectionTest extends PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $foo = array($this, 'getFoo');
        $bar = 'BAR';

        $helpers = new Mustache_HelperCollection(array(
            'foo' => $foo,
            'bar' => $bar,
        ));

        $this->assertSame($foo, $helpers->get('foo'));
        $this->assertSame($bar, $helpers->get('bar'));
    }

    public static function getFoo()
    {
        echo 'foo';
    }

    public function testAccessorsAndMutators()
    {
        $foo = array($this, 'getFoo');
        $bar = 'BAR';

        $helpers = new Mustache_HelperCollection();
        $this->assertTrue($helpers->isEmpty());
        $this->assertFalse($helpers->has('foo'));
        $this->assertFalse($helpers->has('bar'));

        $helpers->add('foo', $foo);
        $this->assertFalse($helpers->isEmpty());
        $this->assertTrue($helpers->has('foo'));
        $this->assertFalse($helpers->has('bar'));

        $helpers->add('bar', $bar);
        $this->assertFalse($helpers->isEmpty());
        $this->assertTrue($helpers->has('foo'));
        $this->assertTrue($helpers->has('bar'));

        $helpers->remove('foo');
        $this->assertFalse($helpers->isEmpty());
        $this->assertFalse($helpers->has('foo'));
        $this->assertTrue($helpers->has('bar'));
    }

    public function testMagicMethods()
    {
        $foo = array($this, 'getFoo');
        $bar = 'BAR';

        $helpers = new Mustache_HelperCollection();
        $this->assertTrue($helpers->isEmpty());
        $this->assertFalse($helpers->has('foo'));
        $this->assertFalse($helpers->has('bar'));
        $this->assertFalse(isset($helpers->foo));
        $this->assertFalse(isset($helpers->bar));

        $helpers->foo = $foo;
        $this->assertFalse($helpers->isEmpty());
        $this->assertTrue($helpers->has('foo'));
        $this->assertFalse($helpers->has('bar'));
        $this->assertTrue(isset($helpers->foo));
        $this->assertFalse(isset($helpers->bar));

        $helpers->bar = $bar;
        $this->assertFalse($helpers->isEmpty());
        $this->assertTrue($helpers->has('foo'));
        $this->assertTrue($helpers->has('bar'));
        $this->assertTrue(isset($helpers->foo));
        $this->assertTrue(isset($helpers->bar));

        unset($helpers->foo);
        $this->assertFalse($helpers->isEmpty());
        $this->assertFalse($helpers->has('foo'));
        $this->assertTrue($helpers->has('bar'));
        $this->assertFalse(isset($helpers->foo));
        $this->assertTrue(isset($helpers->bar));
    }

    /**
     * @dataProvider getInvalidHelperArguments
     */
    public function
testHelperCollectionIsntAfraidToThrowExceptions($helpers = array(),
$actions = array(), $exception = null)
    {
        if ($exception) {
            $this->setExpectedException($exception);
        }

        $helpers = new Mustache_HelperCollection($helpers);

        foreach ($actions as $method => $args) {
            call_user_func_array(array($helpers, $method), $args);
        }
    }

    public function getInvalidHelperArguments()
    {
        return array(
            array(
                'not helpers',
                array(),
                'InvalidArgumentException',
            ),
            array(
                array(),
                array('get' => array('foo')),
                'InvalidArgumentException',
            ),
            array(
                array('foo' => 'FOO'),
                array('get' => array('foo')),
                null,
            ),
            array(
                array('foo' => 'FOO'),
                array('get' => array('bar')),
                'InvalidArgumentException',
            ),
            array(
                array('foo' => 'FOO'),
                array(
                    'add' => array('bar',
'BAR'),
                    'get' => array('bar'),
                ),
                null,
            ),
            array(
                array('foo' => 'FOO'),
                array(
                    'get'    => array('foo'),
                    'remove' => array('foo'),
                ),
                null,
            ),
            array(
                array('foo' => 'FOO'),
                array(
                    'remove' => array('foo'),
                    'get'    => array('foo'),
                ),
                'InvalidArgumentException',
            ),
            array(
                array(),
                array('remove' => array('foo')),
                'InvalidArgumentException',
            ),
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/Loader/ArrayLoaderTest.php000064400000002454151160724640022131
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_ArrayLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $loader = new Mustache_Loader_ArrayLoader(array(
            'foo' => 'bar',
        ));

        $this->assertEquals('bar',
$loader->load('foo'));
    }

    public function testSetAndLoadTemplates()
    {
        $loader = new Mustache_Loader_ArrayLoader(array(
            'foo' => 'bar',
        ));
        $this->assertEquals('bar',
$loader->load('foo'));

        $loader->setTemplate('baz', 'qux');
        $this->assertEquals('qux',
$loader->load('baz'));

        $loader->setTemplates(array(
            'foo' => 'FOO',
            'baz' => 'BAZ',
        ));
        $this->assertEquals('FOO',
$loader->load('foo'));
        $this->assertEquals('BAZ',
$loader->load('baz'));
    }

    /**
     * @expectedException Mustache_Exception_UnknownTemplateException
     */
    public function testMissingTemplatesThrowExceptions()
    {
        $loader = new Mustache_Loader_ArrayLoader();
        $loader->load('not_a_real_template');
    }
}
vendor/mustache/mustache/test/Mustache/Test/Loader/CascadingLoaderTest.php000064400000002240151160724640022720
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_CascadingLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testLoadTemplates()
    {
        $loader = new Mustache_Loader_CascadingLoader(array(
            new Mustache_Loader_ArrayLoader(array('foo' =>
'{{ foo }}')),
            new Mustache_Loader_ArrayLoader(array('bar' =>
'{{#bar}}BAR{{/bar}}')),
        ));

        $this->assertEquals('{{ foo }}',
$loader->load('foo'));
        $this->assertEquals('{{#bar}}BAR{{/bar}}',
$loader->load('bar'));
    }

    /**
     * @expectedException Mustache_Exception_UnknownTemplateException
     */
    public function testMissingTemplatesThrowExceptions()
    {
        $loader = new Mustache_Loader_CascadingLoader(array(
            new Mustache_Loader_ArrayLoader(array('foo' =>
'{{ foo }}')),
            new Mustache_Loader_ArrayLoader(array('bar' =>
'{{#bar}}BAR{{/bar}}')),
        ));

        $loader->load('not_a_real_template');
    }
}
vendor/mustache/mustache/test/Mustache/Test/Loader/FilesystemLoaderTest.php000064400000005512151160724640023175
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_FilesystemLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_FilesystemLoader($baseDir,
array('extension' => '.ms'));
        $this->assertEquals('alpha contents',
$loader->load('alpha'));
        $this->assertEquals('beta contents',
$loader->load('beta.ms'));
    }

    public function testTrailingSlashes()
    {
        $baseDir = dirname(__FILE__) .
'/../../../fixtures/templates/';
        $loader = new Mustache_Loader_FilesystemLoader($baseDir);
        $this->assertEquals('one contents',
$loader->load('one'));
    }

    public function testConstructorWithProtocol()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');

        $loader = new Mustache_Loader_FilesystemLoader('test://'
. $baseDir, array('extension' => '.ms'));
        $this->assertEquals('alpha contents',
$loader->load('alpha'));
        $this->assertEquals('beta contents',
$loader->load('beta.ms'));
    }

    public function testLoadTemplates()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_FilesystemLoader($baseDir);
        $this->assertEquals('one contents',
$loader->load('one'));
        $this->assertEquals('two contents',
$loader->load('two.mustache'));
    }

    public function testEmptyExtensionString()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');

        $loader = new Mustache_Loader_FilesystemLoader($baseDir,
array('extension' => ''));
        $this->assertEquals('one contents',
$loader->load('one.mustache'));
        $this->assertEquals('alpha contents',
$loader->load('alpha.ms'));

        $loader = new Mustache_Loader_FilesystemLoader($baseDir,
array('extension' => null));
        $this->assertEquals('two contents',
$loader->load('two.mustache'));
        $this->assertEquals('beta contents',
$loader->load('beta.ms'));
    }

    /**
     * @expectedException Mustache_Exception_RuntimeException
     */
    public function testMissingBaseDirThrowsException()
    {
        new Mustache_Loader_FilesystemLoader(dirname(__FILE__) .
'/not_a_directory');
    }

    /**
     * @expectedException Mustache_Exception_UnknownTemplateException
     */
    public function testMissingTemplateThrowsException()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_FilesystemLoader($baseDir);

        $loader->load('fake');
    }
}
vendor/mustache/mustache/test/Mustache/Test/Loader/InlineLoaderTest.php000064400000002607151160724640022271
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_InlineLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testLoadTemplates()
    {
        $loader = new Mustache_Loader_InlineLoader(__FILE__,
__COMPILER_HALT_OFFSET__);
        $this->assertEquals('{{ foo }}',
$loader->load('foo'));
        $this->assertEquals('{{#bar}}BAR{{/bar}}',
$loader->load('bar'));
    }

    /**
     * @expectedException Mustache_Exception_UnknownTemplateException
     */
    public function testMissingTemplatesThrowExceptions()
    {
        $loader = new Mustache_Loader_InlineLoader(__FILE__,
__COMPILER_HALT_OFFSET__);
        $loader->load('not_a_real_template');
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testInvalidOffsetThrowsException()
    {
        new Mustache_Loader_InlineLoader(__FILE__, 'notanumber');
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function testInvalidFileThrowsException()
    {
        new Mustache_Loader_InlineLoader('notarealfile',
__COMPILER_HALT_OFFSET__);
    }
}

__halt_compiler();

@@ foo
{{ foo }}

@@ bar
{{#bar}}BAR{{/bar}}
vendor/mustache/mustache/test/Mustache/Test/Loader/ProductionFilesystemLoaderTest.php000064400000010605151160724640025243
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_ProductionFilesystemLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('extension' => '.ms'));
        $this->assertInstanceOf('Mustache_Source',
$loader->load('alpha'));
        $this->assertEquals('alpha contents',
$loader->load('alpha')->getSource());
        $this->assertInstanceOf('Mustache_Source',
$loader->load('beta.ms'));
        $this->assertEquals('beta contents',
$loader->load('beta.ms')->getSource());
    }

    public function testTrailingSlashes()
    {
        $baseDir = dirname(__FILE__) .
'/../../../fixtures/templates/';
        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir);
        $this->assertEquals('one contents',
$loader->load('one')->getSource());
    }

    public function testConstructorWithProtocol()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');

        $loader = new
Mustache_Loader_ProductionFilesystemLoader('file://' . $baseDir,
array('extension' => '.ms'));
        $this->assertEquals('alpha contents',
$loader->load('alpha')->getSource());
        $this->assertEquals('beta contents',
$loader->load('beta.ms')->getSource());
    }

    public function testLoadTemplates()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir);
        $this->assertEquals('one contents',
$loader->load('one')->getSource());
        $this->assertEquals('two contents',
$loader->load('two.mustache')->getSource());
    }

    public function testEmptyExtensionString()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');

        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('extension' => ''));
        $this->assertEquals('one contents',
$loader->load('one.mustache')->getSource());
        $this->assertEquals('alpha contents',
$loader->load('alpha.ms')->getSource());

        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('extension' => null));
        $this->assertEquals('two contents',
$loader->load('two.mustache')->getSource());
        $this->assertEquals('beta contents',
$loader->load('beta.ms')->getSource());
    }

    /**
     * @expectedException Mustache_Exception_RuntimeException
     */
    public function testMissingBaseDirThrowsException()
    {
        new Mustache_Loader_ProductionFilesystemLoader(dirname(__FILE__) .
'/not_a_directory');
    }

    /**
     * @expectedException Mustache_Exception_UnknownTemplateException
     */
    public function testMissingTemplateThrowsException()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $loader = new Mustache_Loader_ProductionFilesystemLoader($baseDir);

        $loader->load('fake');
    }

    public function testLoadWithDifferentStatProps()
    {
        $baseDir = realpath(dirname(__FILE__) .
'/../../../fixtures/templates');
        $noStatLoader = new
Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('stat_props' => null));
        $mtimeLoader = new
Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('stat_props' => array('mtime')));
        $sizeLoader = new
Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('stat_props' => array('size')));
        $bothLoader = new
Mustache_Loader_ProductionFilesystemLoader($baseDir,
array('stat_props' => array('mtime',
'size')));

        $noStatKey =
$noStatLoader->load('one.mustache')->getKey();
        $mtimeKey =
$mtimeLoader->load('one.mustache')->getKey();
        $sizeKey =
$sizeLoader->load('one.mustache')->getKey();
        $bothKey =
$bothLoader->load('one.mustache')->getKey();

        $this->assertNotEquals($noStatKey, $mtimeKey);
        $this->assertNotEquals($noStatKey, $sizeKey);
        $this->assertNotEquals($noStatKey, $bothKey);
        $this->assertNotEquals($mtimeKey, $sizeKey);
        $this->assertNotEquals($mtimeKey, $bothKey);
        $this->assertNotEquals($sizeKey, $bothKey);
    }
}
vendor/mustache/mustache/test/Mustache/Test/Loader/StringLoaderTest.php000064400000001207151160724640022314
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Loader_StringLoaderTest extends
PHPUnit_Framework_TestCase
{
    public function testLoadTemplates()
    {
        $loader = new Mustache_Loader_StringLoader();

        $this->assertEquals('foo',
$loader->load('foo'));
        $this->assertEquals('{{ bar }}',
$loader->load('{{ bar }}'));
        $this->assertEquals("\n{{! comment }}\n",
$loader->load("\n{{! comment }}\n"));
    }
}
vendor/mustache/mustache/test/Mustache/Test/Logger/AbstractLoggerTest.php000064400000003457151160724640022644
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Logger_AbstractLoggerTest extends
PHPUnit_Framework_TestCase
{
    public function testEverything()
    {
        $logger = new Mustache_Test_Logger_TestLogger();

        $logger->emergency('emergency message');
        $logger->alert('alert message');
        $logger->critical('critical message');
        $logger->error('error message');
        $logger->warning('warning message');
        $logger->notice('notice message');
        $logger->info('info message');
        $logger->debug('debug message');

        $expected = array(
            array(Mustache_Logger::EMERGENCY, 'emergency
message', array()),
            array(Mustache_Logger::ALERT, 'alert message',
array()),
            array(Mustache_Logger::CRITICAL, 'critical message',
array()),
            array(Mustache_Logger::ERROR, 'error message',
array()),
            array(Mustache_Logger::WARNING, 'warning message',
array()),
            array(Mustache_Logger::NOTICE, 'notice message',
array()),
            array(Mustache_Logger::INFO, 'info message',
array()),
            array(Mustache_Logger::DEBUG, 'debug message',
array()),
        );

        $this->assertEquals($expected, $logger->log);
    }
}

class Mustache_Test_Logger_TestLogger extends
Mustache_Logger_AbstractLogger
{
    public $log = array();

    /**
     * Logs with an arbitrary level.
     *
     * @param mixed  $level
     * @param string $message
     * @param array  $context
     */
    public function log($level, $message, array $context = array())
    {
        $this->log[] = array($level, $message, $context);
    }
}
vendor/mustache/mustache/test/Mustache/Test/Logger/StreamLoggerTest.php000064400000016546151160724640022337
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Logger_StreamLoggerTest extends
PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider acceptsStreamData
     */
    public function testAcceptsStream($name, $stream)
    {
        $logger = new Mustache_Logger_StreamLogger($stream);
        $logger->log(Mustache_Logger::CRITICAL, 'message');

        $this->assertEquals("CRITICAL: message\n",
file_get_contents($name));
    }

    public function acceptsStreamData()
    {
        $one = tempnam(sys_get_temp_dir(), 'mustache-test');
        $two = tempnam(sys_get_temp_dir(), 'mustache-test');

        return array(
            array($one, $one),
            array($two, fopen($two, 'a')),
        );
    }

    /**
     * @expectedException Mustache_Exception_LogicException
     */
    public function testPrematurelyClosedStreamThrowsException()
    {
        $stream = tmpfile();
        $logger = new Mustache_Logger_StreamLogger($stream);
        fclose($stream);

        $logger->log(Mustache_Logger::CRITICAL, 'message');
    }

    /**
     * @dataProvider getLevels
     */
    public function testLoggingThresholds($logLevel, $level, $shouldLog)
    {
        $stream = tmpfile();
        $logger = new Mustache_Logger_StreamLogger($stream, $logLevel);
        $logger->log($level, 'logged');

        rewind($stream);
        $result = fread($stream, 1024);

        if ($shouldLog) {
            $this->assertContains('logged', $result);
        } else {
            $this->assertEmpty($result);
        }
    }

    public function getLevels()
    {
        // $logLevel, $level, $shouldLog
        return array(
            // identities
            array(Mustache_Logger::EMERGENCY, Mustache_Logger::EMERGENCY,
true),
            array(Mustache_Logger::ALERT,     Mustache_Logger::ALERT,    
true),
            array(Mustache_Logger::CRITICAL,  Mustache_Logger::CRITICAL, 
true),
            array(Mustache_Logger::ERROR,     Mustache_Logger::ERROR,    
true),
            array(Mustache_Logger::WARNING,   Mustache_Logger::WARNING,  
true),
            array(Mustache_Logger::NOTICE,    Mustache_Logger::NOTICE,   
true),
            array(Mustache_Logger::INFO,      Mustache_Logger::INFO,     
true),
            array(Mustache_Logger::DEBUG,     Mustache_Logger::DEBUG,    
true),

            // one above
            array(Mustache_Logger::ALERT,     Mustache_Logger::EMERGENCY,
true),
            array(Mustache_Logger::CRITICAL,  Mustache_Logger::ALERT,    
true),
            array(Mustache_Logger::ERROR,     Mustache_Logger::CRITICAL, 
true),
            array(Mustache_Logger::WARNING,   Mustache_Logger::ERROR,    
true),
            array(Mustache_Logger::NOTICE,    Mustache_Logger::WARNING,  
true),
            array(Mustache_Logger::INFO,      Mustache_Logger::NOTICE,   
true),
            array(Mustache_Logger::DEBUG,     Mustache_Logger::INFO,     
true),

            // one below
            array(Mustache_Logger::EMERGENCY, Mustache_Logger::ALERT,    
false),
            array(Mustache_Logger::ALERT,     Mustache_Logger::CRITICAL, 
false),
            array(Mustache_Logger::CRITICAL,  Mustache_Logger::ERROR,    
false),
            array(Mustache_Logger::ERROR,     Mustache_Logger::WARNING,  
false),
            array(Mustache_Logger::WARNING,   Mustache_Logger::NOTICE,   
false),
            array(Mustache_Logger::NOTICE,    Mustache_Logger::INFO,     
false),
            array(Mustache_Logger::INFO,      Mustache_Logger::DEBUG,    
false),
        );
    }

    /**
     * @dataProvider getLogMessages
     */
    public function testLogging($level, $message, $context, $expected)
    {
        $stream = tmpfile();
        $logger = new Mustache_Logger_StreamLogger($stream,
Mustache_Logger::DEBUG);
        $logger->log($level, $message, $context);

        rewind($stream);
        $result = fread($stream, 1024);

        $this->assertEquals($expected, $result);
    }

    public function getLogMessages()
    {
        // $level, $message, $context, $expected
        return array(
            array(Mustache_Logger::DEBUG,     'debug message',   
 array(),  "DEBUG: debug message\n"),
            array(Mustache_Logger::INFO,      'info message',    
 array(),  "INFO: info message\n"),
            array(Mustache_Logger::NOTICE,    'notice message',  
 array(),  "NOTICE: notice message\n"),
            array(Mustache_Logger::WARNING,   'warning message', 
 array(),  "WARNING: warning message\n"),
            array(Mustache_Logger::ERROR,     'error message',   
 array(),  "ERROR: error message\n"),
            array(Mustache_Logger::CRITICAL,  'critical message',
 array(),  "CRITICAL: critical message\n"),
            array(Mustache_Logger::ALERT,     'alert message',   
 array(),  "ALERT: alert message\n"),
            array(Mustache_Logger::EMERGENCY, 'emergency
message', array(),  "EMERGENCY: emergency message\n"),

            // with context
            array(
                Mustache_Logger::ERROR,
                'error message',
                array('name' => 'foo',
'number' => 42),
                "ERROR: error message\n",
            ),

            // with interpolation
            array(
                Mustache_Logger::ERROR,
                'error {name}-{number}',
                array('name' => 'foo',
'number' => 42),
                "ERROR: error foo-42\n",
            ),

            // with iterpolation false positive
            array(
                Mustache_Logger::ERROR,
                'error {nothing}',
                array('name' => 'foo',
'number' => 42),
                "ERROR: error {nothing}\n",
            ),

            // with interpolation injection
            array(
                Mustache_Logger::ERROR,
                '{foo}',
                array('foo' => '{bar}',
'bar' => 'FAIL'),
                "ERROR: {bar}\n",
            ),
        );
    }

    public function testChangeLoggingLevels()
    {
        $stream = tmpfile();
        $logger = new Mustache_Logger_StreamLogger($stream);

        $logger->setLevel(Mustache_Logger::ERROR);
        $this->assertEquals(Mustache_Logger::ERROR,
$logger->getLevel());

        $logger->log(Mustache_Logger::WARNING, 'ignore this');

        $logger->setLevel(Mustache_Logger::INFO);
        $this->assertEquals(Mustache_Logger::INFO,
$logger->getLevel());

        $logger->log(Mustache_Logger::WARNING, 'log this');

        $logger->setLevel(Mustache_Logger::CRITICAL);
        $this->assertEquals(Mustache_Logger::CRITICAL,
$logger->getLevel());

        $logger->log(Mustache_Logger::ERROR, 'ignore this');

        rewind($stream);
        $result = fread($stream, 1024);

        $this->assertEquals("WARNING: log this\n", $result);
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function
testThrowsInvalidArgumentExceptionWhenSettingUnknownLevels()
    {
        $logger = new Mustache_Logger_StreamLogger(tmpfile());
        $logger->setLevel('bacon');
    }

    /**
     * @expectedException Mustache_Exception_InvalidArgumentException
     */
    public function
testThrowsInvalidArgumentExceptionWhenLoggingUnknownLevels()
    {
        $logger = new Mustache_Logger_StreamLogger(tmpfile());
        $logger->log('bacon', 'CODE BACON ERROR!');
    }
}
vendor/mustache/mustache/test/Mustache/Test/ParserTest.php000064400000042414151160724640017752
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_ParserTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider getTokenSets
     */
    public function testParse($tokens, $expected)
    {
        $parser = new Mustache_Parser();
        $this->assertEquals($expected, $parser->parse($tokens));
    }

    public function getTokenSets()
    {
        return array(
            array(
                array(),
                array(),
            ),

            array(
                array(array(
                    Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                    Mustache_Tokenizer::LINE  => 0,
                    Mustache_Tokenizer::VALUE => 'text',
                )),
                array(array(
                    Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                    Mustache_Tokenizer::LINE  => 0,
                    Mustache_Tokenizer::VALUE => 'text',
                )),
            ),

            array(
                array(array(
                    Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                    Mustache_Tokenizer::LINE => 0,
                    Mustache_Tokenizer::NAME => 'name',
                )),
                array(array(
                    Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                    Mustache_Tokenizer::LINE => 0,
                    Mustache_Tokenizer::NAME => 'name',
                )),
            ),

            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'foo',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_INVERTED,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                        Mustache_Tokenizer::NAME  => 'parent',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::NAME  => 'name',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 456,
                        Mustache_Tokenizer::NAME  => 'parent',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                ),

                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'foo',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_INVERTED,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                        Mustache_Tokenizer::END   => 456,
                        Mustache_Tokenizer::NODES => array(
                            array(
                                Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                                Mustache_Tokenizer::LINE => 0,
                                Mustache_Tokenizer::NAME =>
'name',
                            ),
                        ),
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                ),
            ),

            // This *would* be an invalid inheritance parse tree, but that
pragma
            // isn't enabled so it'll thunk it back into an
"escaped" token:
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME => 'foo',
                        Mustache_Tokenizer::OTAG => '{{',
                        Mustache_Tokenizer::CTAG => '}}',
                        Mustache_Tokenizer::LINE => 0,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                ),
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => '$foo',
                        Mustache_Tokenizer::OTAG => '{{',
                        Mustache_Tokenizer::CTAG => '}}',
                        Mustache_Tokenizer::LINE => 0,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                ),
            ),

            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '  ',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_DELIM_CHANGE,
                        Mustache_Tokenizer::LINE => 0,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => "  \n",
                    ),
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'foo',
                        Mustache_Tokenizer::OTAG => '[[',
                        Mustache_Tokenizer::CTAG => ']]',
                        Mustache_Tokenizer::LINE => 1,
                    ),
                ),
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME => 'foo',
                        Mustache_Tokenizer::OTAG => '[[',
                        Mustache_Tokenizer::CTAG => ']]',
                        Mustache_Tokenizer::LINE => 1,
                    ),
                ),
            ),

        );
    }

    /**
     * @dataProvider getInheritanceTokenSets
     */
    public function testParseWithInheritance($tokens, $expected)
    {
        $parser = new Mustache_Parser();
        $parser->setPragmas(array(Mustache_Engine::PRAGMA_BLOCKS));
        $this->assertEquals($expected, $parser->parse($tokens));
    }

    public function getInheritanceTokenSets()
    {
        return array(
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_PARENT,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 8,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME  => 'bar',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 16,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'baz',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'bar',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 19,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 27,
                    ),
                ),
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_PARENT,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 8,
                        Mustache_Tokenizer::END   => 27,
                        Mustache_Tokenizer::NODES => array(
                            array(
                                Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_BLOCK_ARG,
                                Mustache_Tokenizer::NAME  =>
'bar',
                                Mustache_Tokenizer::OTAG  =>
'{{',
                                Mustache_Tokenizer::CTAG  =>
'}}',
                                Mustache_Tokenizer::LINE  => 0,
                                Mustache_Tokenizer::INDEX => 16,
                                Mustache_Tokenizer::END   => 19,
                                Mustache_Tokenizer::NODES => array(
                                    array(
                                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                                        Mustache_Tokenizer::LINE  => 0,
                                        Mustache_Tokenizer::VALUE =>
'baz',
                                    ),
                                ),
                            ),
                        ),
                    ),
                ),
            ),

            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME => 'foo',
                        Mustache_Tokenizer::OTAG => '{{',
                        Mustache_Tokenizer::CTAG => '}}',
                        Mustache_Tokenizer::LINE => 0,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 11,
                    ),
                ),
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::END   => 11,
                        Mustache_Tokenizer::NODES => array(
                            array(
                                Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                                Mustache_Tokenizer::LINE  => 0,
                                Mustache_Tokenizer::VALUE =>
'bar',
                            ),
                        ),
                    ),
                ),
            ),
        );
    }

    /**
     * @dataProvider getBadParseTrees
     * @expectedException Mustache_Exception_SyntaxException
     */
    public function testParserThrowsExceptions($tokens)
    {
        $parser = new Mustache_Parser();
        $parser->parse($tokens);
    }

    public function getBadParseTrees()
    {
        return array(
            // no close
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_SECTION,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                ),
            ),

            // no close inverted
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_INVERTED,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                ),
            ),

            // no opening inverted
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                ),
            ),

            // weird nesting
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_SECTION,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_SECTION,
                        Mustache_Tokenizer::NAME  => 'child',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'parent',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'child',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 123,
                    ),
                ),
            ),

            // This *would* be a valid inheritance parse tree, but that
pragma
            // isn't enabled here so it's going to fail :)
            array(
                array(
                    array(
                        Mustache_Tokenizer::TYPE =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME => 'foo',
                        Mustache_Tokenizer::OTAG => '{{',
                        Mustache_Tokenizer::CTAG => '}}',
                        Mustache_Tokenizer::LINE => 0,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'bar',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'foo',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 11,
                    ),
                ),
            ),
        );
    }
}
vendor/mustache/mustache/test/Mustache/Test/Source/FilesystemSourceTest.php000064400000001127151160724640023257
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_Source_FilesystemSourceTest extends
PHPUnit_Framework_TestCase
{
    /**
     * @expectedException RuntimeException
     */
    public function testMissingTemplateThrowsException()
    {
        $source = new Mustache_Source_FilesystemSource(dirname(__FILE__) .
'/not_a_file.mustache', array('mtime'));
        $source->getKey();
    }
}
vendor/mustache/mustache/test/Mustache/Test/SpecTestCase.php000064400000003306151160724640020201
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

abstract class Mustache_Test_SpecTestCase extends
PHPUnit_Framework_TestCase
{
    protected static $mustache;

    public static function setUpBeforeClass()
    {
        self::$mustache = new Mustache_Engine();
    }

    protected static function loadTemplate($source, $partials)
    {
        self::$mustache->setPartials($partials);

        return self::$mustache->loadTemplate($source);
    }

    /**
     * Data provider for the mustache spec test.
     *
     * Loads YAML files from the spec and converts them to PHPisms.
     *
     * @param string $name
     *
     * @return array
     */
    protected function loadSpec($name)
    {
        $filename = dirname(__FILE__) .
'/../../../vendor/spec/specs/' . $name . '.yml';
        if (!file_exists($filename)) {
            return array();
        }

        $data = array();
        $yaml = new sfYamlParser();
        $file = file_get_contents($filename);

        // @hack: pre-process the 'lambdas' spec so the Symfony
YAML parser doesn't complain.
        if ($name === '~lambdas') {
            $file = str_replace(" !code\n", "\n",
$file);
        }

        $spec = $yaml->parse($file);

        foreach ($spec['tests'] as $test) {
            $data[] = array(
                $test['name'] . ': ' .
$test['desc'],
                $test['template'],
                isset($test['partials']) ?
$test['partials'] : array(),
                $test['data'],
                $test['expected'],
            );
        }

        return $data;
    }
}
vendor/mustache/mustache/test/Mustache/Test/TemplateTest.php000064400000002663151160724640020273
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_TemplateTest extends PHPUnit_Framework_TestCase
{
    public function testConstructor()
    {
        $mustache = new Mustache_Engine();
        $template = new Mustache_Test_TemplateStub($mustache);
        $this->assertSame($mustache, $template->getMustache());
    }

    public function testRendering()
    {
        $rendered = '<< wheee >>';
        $mustache = new Mustache_Engine();
        $template = new Mustache_Test_TemplateStub($mustache);
        $template->rendered = $rendered;
        $context  = new Mustache_Context();

        if (version_compare(PHP_VERSION, '5.3.0',
'>=')) {
            $this->assertEquals($rendered, $template());
        }

        $this->assertEquals($rendered, $template->render());
        $this->assertEquals($rendered,
$template->renderInternal($context));
        $this->assertEquals($rendered,
$template->render(array('foo' => 'bar')));
    }
}

class Mustache_Test_TemplateStub extends Mustache_Template
{
    public $rendered;

    public function getMustache()
    {
        return $this->mustache;
    }

    public function renderInternal(Mustache_Context $context, $indent =
'', $escape = false)
    {
        return $this->rendered;
    }
}
vendor/mustache/mustache/test/Mustache/Test/TokenizerTest.php000064400000027614151160724640020475
0ustar00<?php

/*
 * This file is part of Mustache.php.
 *
 * (c) 2010-2017 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * @group unit
 */
class Mustache_Test_TokenizerTest extends PHPUnit_Framework_TestCase
{
    /**
     * @dataProvider getTokens
     */
    public function testScan($text, $delimiters, $expected)
    {
        $tokenizer = new Mustache_Tokenizer();
        $this->assertSame($expected, $tokenizer->scan($text,
$delimiters));
    }

    /**
     * @expectedException Mustache_Exception_SyntaxException
     */
    public function testUnevenBracesThrowExceptions()
    {
        $tokenizer = new Mustache_Tokenizer();

        $text = '{{{ name }}';
        $tokenizer->scan($text, null);
    }

    /**
     * @expectedException Mustache_Exception_SyntaxException
     */
    public function testUnevenBracesWithCustomDelimiterThrowExceptions()
    {
        $tokenizer = new Mustache_Tokenizer();

        $text = '<%{ name %>';
        $tokenizer->scan($text, '<% %>');
    }

    public function getTokens()
    {
        return array(
            array(
                'text',
                null,
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'text',
                    ),
                ),
            ),

            array(
                'text',
                '<<< >>>',
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => 'text',
                    ),
                ),
            ),

            array(
                '{{ name }}',
                null,
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'name',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 10,
                    ),
                ),
            ),

            array(
                '{{ name }}',
                '<<< >>>',
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '{{ name
}}',
                    ),
                ),
            ),

            array(
                '<<< name >>>',
                '<<< >>>',
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'name',
                        Mustache_Tokenizer::OTAG  =>
'<<<',
                        Mustache_Tokenizer::CTAG  =>
'>>>',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 12,
                    ),
                ),
            ),

            array(
                "{{{ a }}}\n{{# b }}  \n{{= | | =}}| c ||/ b |\n|{ d
}|",
                null,
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_UNESCAPED,
                        Mustache_Tokenizer::NAME  => 'a',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 8,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => "\n",
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_SECTION,
                        Mustache_Tokenizer::NAME  => 'b',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 1,
                        Mustache_Tokenizer::INDEX => 18,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 1,
                        Mustache_Tokenizer::VALUE => "  \n",
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_DELIM_CHANGE,
                        Mustache_Tokenizer::LINE  => 2,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'c',
                        Mustache_Tokenizer::OTAG  => '|',
                        Mustache_Tokenizer::CTAG  => '|',
                        Mustache_Tokenizer::LINE  => 2,
                        Mustache_Tokenizer::INDEX => 37,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'b',
                        Mustache_Tokenizer::OTAG  => '|',
                        Mustache_Tokenizer::CTAG  => '|',
                        Mustache_Tokenizer::LINE  => 2,
                        Mustache_Tokenizer::INDEX => 37,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 2,
                        Mustache_Tokenizer::VALUE => "\n",
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_UNESCAPED,
                        Mustache_Tokenizer::NAME  => 'd',
                        Mustache_Tokenizer::OTAG  => '|',
                        Mustache_Tokenizer::CTAG  => '|',
                        Mustache_Tokenizer::LINE  => 3,
                        Mustache_Tokenizer::INDEX => 51,
                    ),

                ),
            ),

            // See https://github.com/bobthecow/mustache.php/issues/183
            array(
                '{{# a }}0{{/ a }}',
                null,
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_SECTION,
                        Mustache_Tokenizer::NAME  => 'a',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 8,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '0',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'a',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 9,
                    ),
                ),
            ),

            // custom delimiters don't swallow the next character,
even if it is a }, }}}, or the same delimiter
            array(
                '<% a %>} <% b %>%> <% c
%>}}}',
                '<% %>',
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'a',
                        Mustache_Tokenizer::OTAG  => '<%',
                        Mustache_Tokenizer::CTAG  => '%>',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 7,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '} ',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'b',
                        Mustache_Tokenizer::OTAG  => '<%',
                        Mustache_Tokenizer::CTAG  => '%>',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 16,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '%> ',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_ESCAPED,
                        Mustache_Tokenizer::NAME  => 'c',
                        Mustache_Tokenizer::OTAG  => '<%',
                        Mustache_Tokenizer::CTAG  => '%>',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 26,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE => '}}}',
                    ),
                ),
            ),

            // unescaped custom delimiters are properly parsed
            array(
                '<%{ a }%>',
                '<% %>',
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_UNESCAPED,
                        Mustache_Tokenizer::NAME  => 'a',
                        Mustache_Tokenizer::OTAG  => '<%',
                        Mustache_Tokenizer::CTAG  => '%>',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 9,
                    ),
                ),
            ),

            // Ensure that $arg token is not picked up during tokenization
            array(
                '{{$arg}}default{{/arg}}',
                null,
                array(
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_BLOCK_VAR,
                        Mustache_Tokenizer::NAME  => 'arg',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 8,
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_TEXT,
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::VALUE =>
'default',
                    ),
                    array(
                        Mustache_Tokenizer::TYPE  =>
Mustache_Tokenizer::T_END_SECTION,
                        Mustache_Tokenizer::NAME  => 'arg',
                        Mustache_Tokenizer::OTAG  => '{{',
                        Mustache_Tokenizer::CTAG  => '}}',
                        Mustache_Tokenizer::LINE  => 0,
                        Mustache_Tokenizer::INDEX => 15,
                    ),
                ),
            ),
        );
    }
}
views/dashboard/tmpl/default.php000064400000015136151160724640012755
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen',
'.multipleAccessLevels', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_ACCESS')));
JHtml::_('formbehavior.chosen', '.multipleAuthors',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_AUTHOR')));
JHtml::_('formbehavior.chosen', '.multipleCategories',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_CATEGORY')));
JHtml::_('formbehavior.chosen', '.multipleTags', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_TAG')));
JHtml::_('formbehavior.chosen', 'select');

// Chart JS
JHtml::_('script', 'com_notifly/chart.min.js',
array('version' => 'auto', 'relative'
=> true));

$user      = JFactory::getUser();
$userId    = $user->get('id');

?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=dashboard');
?>" method="post" name="adminForm"
id="adminForm">
	<div id="cf" class="dashboard tx-flex">
		<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
		<div class="tx-main">
		<?php else : ?>
		<div class="tx-main">
		<?php endif; ?>
			<div class="page-header">
				<div class="row">
					<div class="col-md-9">
						<h1>Dashboard</h1>
					</div>
					<div class="col-md-3">
						<?php 
						$update = NotiflyHelper::getUpdateStatus(); 
						$link =
JRoute::_('index.php?option=com_installer&view=update&task=update.find&'.JSession::getFormToken()
. '=1');
						?>

						<!-- 
						// comment due to design reason
						<div class="media well well-sm" style="margin:
0;">
							<div class="media-left">
								<i class="cfi-download-cloud text-success"
style="font-size: 40px;"></i>
							</div>
							<div class="media-body">
								<p>
									<span class="muted">Installed
Version:</span> 
									<span class="label label-success"><?php echo
$update['old']; ?></span>
								</p>
				  				<p>
				  					<span class="muted">Lateset Version</span>

				  					<span class="label label-info"><?php echo
$update['new']; ?></span>
				  				</p>
							</div>
		  					<a href="<?php echo $link ?>" class="btn
btn-default btn-xs">
		  						<i class="cfi-refresh-cw"></i> Update Now
		  					</a>
						</div> -->

					</div>
				</div>
			</div>
			<div class="page-content">
				<div class="row">
					<div class="col-md-12">
						<?php echo NotiflyHelper::showWarning(); ?>
						<?php echo $this->loadTemplate('update'); ?>
						
						<h4><?php echo date('M 01, Y') ?> to <?php
echo date('M d, Y') ?> be like:</h4>
						<div class="panel panel-default">
							<div class="panel-body">
								<div style="width:100%;">
						        <canvas id="nf-chart"></canvas>
						    </div>
						    <script>
						    	// console.log('<?php //echo
json_encode($this->items); ?>');
						    	// console.log('<?php //echo
date("Y-m-".sprintf("%02d", 22)." 00:00:00");
?>');
						    	var ctx = document.getElementById("nf-chart");
						    	var data = {
						    		labels: [<?php for($i=1; $i <= date("d"); $i++)
{
						    			echo "$i" . ($i!=(date("d")) ?
"," : "");
					    			} ?>],
							        datasets: [
										{
											label: 'Clicks',
											data: [<?php for($i=1; $i <= date("d"); $i++) {
												$date = date("Y-m-".sprintf("%02d",
$i)." 00:00:00");
						    					echo (isset($this->items[$date]->click) ?
$this->items[$date]->click : "0") .
($i!=date("d") ? "," : "");
							    			} ?>],
							    			fill: false,
								    		borderColor: 'rgb(255, 99, 132)', backgroundColor:
'rgb(255, 99, 132)'
								        }
										,
								        {
											label: 'Shown',
											data: [<?php for($i=1; $i <= date("d"); $i++) {
												$date = date("Y-m-".sprintf("%02d",
$i)." 00:00:00");
							    				echo (isset($this->items[$date]->view) ?
$this->items[$date]->view : "0") . ($i!=date("d")
? "," : "");
								    		} ?>],
								    		fill: false,
								    		borderColor: 'rgb(54, 162, 235)', backgroundColor:
'rgb(54, 162, 235)'
								        }
						        	]
						        };
						    	var myLineChart = new Chart(ctx, {
									    type: 'line',
									    data: data,
									    options: {
							                responsive: true,
							                title:{
							                    display:true,
							                    text:'Notifly monthly reports'
							                },
							                tooltips: {
							                    mode: 'index',
							                    intersect: false,
							                },
							                hover: {
							                    mode: 'nearest',
							                    intersect: true
							                },
							                scales: {
							                    xAxes: [{
							                        display: true,
							                        scaleLabel: {
							                            display: true,
							                            labelString: 'Day of month'
							                        }
							                    }],
							                    yAxes: [{
							                        display: true,
							                        scaleLabel: {
							                            display: true,
							                            labelString: 'Counts'
							                        }
							                    }]
							                }
							            }
									});
						    </script>
							</div>
						</div>
					</div>
					<!--
					<div class="col-md-12">
						<h4><?php echo
JText::_('COM_NOTIFLY_ENABLED_INTEGRATIONS'); ?></h4>
						<?php $plugins = NotiflyHelper::getGroupPlugins(); ?>
						<div class="panel panel-default">
							<ul class="list-group" style="margin-left:
0;">
							<?php foreach ($plugins as $key => $plugin) { ?>
								<li class="list-group-item">
									<p style="color:<?php echo ($plugin->enabled ?
'green' : 'red'); ?>">
										<i class="<?php echo ($plugin->enabled ?
'cfi-check-circle' : 'cfi-x-circle');
?>"></i>
										<?php echo JText::_(ucfirst($plugin->element));
?></p>
								</li>
							<?php } ?>
							</ul>
						</div>
					</div>
					-->
				</div>
			</div>

			<input type="hidden" name="task"
value="" />
			<input type="hidden" name="dashboard"
value="1" />
			<input type="hidden" name="boxchecked"
value="0" />
			<?php echo JHtml::_('form.token'); ?>
			</div>
	</div>
</form>
views/dashboard/tmpl/default.xml000064400000000324151160724640012757
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_DASHBOARD_VIEW_DEFAULT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_DASHBOARD_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
views/dashboard/tmpl/default_update.php000064400000001203151160724640014305
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
$username = $this->config->get('username', '');
$key = $this->config->get('key', '');
?>
<?php if(empty($key) or empty($username)): ?>
<div class="alert alert-info">
	<p>
		<strong class="text-uppercase"><?php echo
JText::_('COM_NOTIFLY_API_KEY_MISSING'); ?></strong> 
		<br>
		<?php echo JText::_('COM_NOTIFLY_API_KEY_MISSING_DESC');
?>
	</p>
</div>
<?php endif;
?>views/dashboard/tmpl/default_warning.php000064400000001160151160724640014472
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;
$systemPlugin = JPluginHelper::getPlugin( 'system' ,
'notifly' );
?>
<?php if(!$systemPlugin): ?>
<div class="alert alert-danger">
	<p>
		<strong class="text-uppercase"><?php echo
JText::_('COM_NOTIFLY_SYSTEM_PLUGIN_DISABLED');
?></strong> 
		<br>
		<?php echo
JText::_('COM_NOTIFLY_SYSTEM_PLUGIN_DISABLED_DESC'); ?>
	</p>
</div>
<?php endif; ?>

views/dashboard/view.html.php000064400000005265151160724640012274
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View class for a list of featured articles.
 *
 * @since  1.6
 */
class NotiflyViewDashboard extends JViewLegacy
{
	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;

	/**
	 * component config
	 *
	 * @var  jobject
	 */
	protected $config;

	/**
	 * Display the view
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		NotiflyHelper::addSubmenu('dashboard');
		$this->config = JComponentHelper::getParams('com_notifly');
		
		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}
		$this->items = $this->getLogs();
		// print_r($this->items);die;
		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		// $state = $this->get('State');
		$canDo = JHelperContent::getActions('com_notifly');

		JToolbarHelper::title(JText::_('COM_NOTIFLY_DASHBOARD_TITLE'),
'star dashboard');

		// JToolbarHelper::custom('articles.unfeatured',
'unfeatured.png', 'featured_f2.png',
'JUNFEATURE', true);

		if ($canDo->get('core.admin') ||
$canDo->get('core.options'))
		{
			JToolbarHelper::preferences('com_notifly');
		}
		
		$help_url  = 'https://www.themexpert.com/docs';
		JToolbarHelper::help( 'COM_NOTIFLY_HELP_SITE', false, $help_url
);
	}

	public function getLogs(){
		// $date = date('m', strtotime('+1 month'));
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->select("a.*")
			  ->from('#__notifly_logs as a')
			  // $db->quote(JFactory::getDate()->format('Y-m-d') .
' 00:00:00')
			  ->where($db->quoteName('a.date') . ' BETWEEN
' . $db->quote(JFactory::getDate()->format('Y-m-01') .
' 00:00:00') . ' AND ' .
$db->quote(JFactory::getDate()->format('Y-m-'.
date("t")) . ' 00:00:00'))
			  ->group($db->quoteName('a.date'))
			  ->order($db->quoteName('a.id') . ' DESC')


			  // get the limit form config
			  ->limit('20');
		// echo $query->__toString();die;
		$db->setQuery($query);
		$results = $db->loadObjectList();
		$return = [];
		foreach ($results as $key => $result) {
			$return[$result->date] = $result;
		}
		// print_r($return);die;
		return $return;
	}

	
}
views/design/index.html000064400000000054151160724640011154
0ustar00<html><body
bgcolor="#FFFFFF"></body></html>views/design/tmpl/default.php000064400000007021151160724640012271
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen',
'.multipleAccessLevels', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_ACCESS')));
JHtml::_('formbehavior.chosen', '.multipleAuthors',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_AUTHOR')));
JHtml::_('formbehavior.chosen', '.multipleCategories',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_CATEGORY')));
JHtml::_('formbehavior.chosen', '.multipleTags', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_TAG')));
JHtml::_('formbehavior.chosen', 'select');

$user      = JFactory::getUser();
$userId    = $user->get('id');
?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=design');
?>" method="post" name="adminForm"
id="adminForm" class="form-horizontal">
	<div id="cf" class="design tx-flex">
		<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
		<div class="tx-main">
		<?php else : ?>
		<div class="tx-main">
		<?php endif; ?>
			<div class="page-header">
			  <h1>Design</h1>
			  <!-- Nav tabs -->
			  <ul class="nav nav-tabs" role="tablist">
			    <li class="active"><a href="#design"
aria-controls="home" role="tab"
data-toggle="tab">Design</a></li>
			    <!-- <li><a href="#theme"
aria-controls="profile" role="tab"
data-toggle="tab">Theme</a></li> -->
			  </ul>
			</div>

			<div class="page-content">
				<?php echo NotiflyHelper::showWarning(); ?>
				<div class="tab-content">
					<div class="tab-pane active" id="design">
						<div class="row">
							<div class="col-md-6">
								<div class="panel panel-default">
									<div class="panel-heading">Design</div>
									<div class="panel-body">
										<?php 
										$fieldSets = $this->form->getFieldsets();
										foreach ($fieldSets as $name => $fieldSet) :
											if($name != 'design') continue;
											foreach ($this->form->getFieldset($name) as $field):
									    		echo $field->getControlGroup();
										  	endforeach;
										endforeach;
										 ?>
									</div>
								</div>
							</div>
							<div class="col-md-6">
								<div class="panel panel-default">
									<div class="panel-heading">Behavior</div>
									<div class="panel-body">
										<?php 
										$fieldSets = $this->form->getFieldsets();
										foreach ($fieldSets as $name => $fieldSet) :
											if($name != 'behavior') continue;
											foreach ($this->form->getFieldset($name) as $field):
									    		echo $field->getControlGroup();
										  	endforeach;
										endforeach;
										 ?>
									</div>
								</div>
							</div>
						</div>
					</div>
					<div class="tab-pane" id="theme">
						<div class="panel panel-default">
							<div class="panel-body">Theme</div>
						</div>
					</div>
				</div>
			</div>

			<input type="hidden" name="id"
value="<?php echo $this->component->id; ?>" />
			<input type="hidden" name="option"
value="<?php echo $this->component->option; ?>" />
			<input type="hidden" name="view"
value="design" />
			<input type="hidden" name="task"
value="" />

			<?php echo JHtml::_('form.token'); ?>
		</div>
	</div> <!-- cf end -->
</form>
views/design/tmpl/index.html000064400000000054151160724640012130
0ustar00<html><body
bgcolor="#FFFFFF"></body></html>views/design/view.html.php000064400000004467151160724640011621
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View class for a list of featured articles.
 *
 * @since  1.6
 */
class NotiflyViewDesign extends JViewLegacy
{
	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;

	/**
	 * Display the view
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		NotiflyHelper::addSubmenu('design');
		
		$form = null;
		$component = null;

		try
		{
			$form = $this->get('Form');
			$component = $this->get('Component');
			$user = JFactory::getUser();
		}
		catch (Exception $e)
		{
			JFactory::getApplication()->enqueueMessage($e->getMessage(),
'error');

			return false;
		}

		// Bind the form to the data.
		if ($form && $component->params)
		{
			$form->bind($component->params);
		}

		$this->form = &$form;
		$this->component = &$component;

		$this->userIsSuperAdmin = $user->authorise('core.admin');
		$this->currentComponent =
JFactory::getApplication()->input->get('component');
		$this->return =
JFactory::getApplication()->input->get('return',
'', 'base64');

		// JFactory::getApplication()->input->set('hidemainmenu',
true);

		
		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		// $state = $this->get('State');
		$canDo = JHelperContent::getActions('com_notifly');

		JToolbarHelper::title(JText::_('COM_NOTIFLY_DESIGN_TITLE'),
'star design');

		JToolBarHelper::save('design.save');
		JToolBarHelper::apply('design.apply');
		JToolBarHelper::divider();

		JToolBarHelper::cancel('design.cancel',
'JTOOLBAR_CLOSE');

		if ($canDo->get('core.admin') ||
$canDo->get('core.options'))
		{
			JToolbarHelper::preferences('com_notifly');
		}
	}

	
}
?>
views/event/tmpl/edit.php000064400000007324151160724640011450
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('behavior.formvalidator');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', '#jform_catid', null,
array('disable_search_threshold' => 0 ));
JHtml::_('formbehavior.chosen', 'select');

// Create shortcut to parameters.
$params = clone($this->state->get('params'));
$params->merge(new Registry($this->item->attribs));

$app = JFactory::getApplication();
$input = $app->input;

JFactory::getDocument()->addScriptDeclaration('
	Joomla.submitbutton = function(task)
	{
		if (task == "event.cancel" ||
document.formvalidator.isValid(document.getElementById("item-form")))
		{
			jQuery("#permissions-sliders
select").attr("disabled", "disabled");
			Joomla.submitform(task, document.getElementById("item-form"));

			// @deprecated 4.0  The following js is not needed since 3.7.0.
			if (task !== "event.apply")
			{
				window.parent.jQuery("#templateEdit' . (int)
$this->item->id . 'Modal").modal("hide");
			}
		}
	};
');

// In case of modal
$isModal = $input->get('layout') == 'modal' ? true :
false;
$layout  = $isModal ? 'modal' : 'edit';
$tmpl    = $isModal || $input->get('tmpl', '',
'cmd') === 'component' ?
'&tmpl=component' : '';
?>
<style type="text/css">
	#cf .input-append input[type="text"]{
		display: inline-block;
	}
</style>
<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=event&layout='
. $layout . $tmpl . '&id=' . (int) $this->item->id);
?>" method="post" name="adminForm"
id="item-form" class="form-validate">
<div id="cf" class="event-edit tx-flex">
	<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
	<?php endif;?>
	<div class="tx-main">
		<div class="page-header">
		  <h1>Edit Event</h1>
		  <!-- Nav tabs -->
		  <ul class="nav nav-tabs" role="tablist">
		    <li class="active"><a href="#message"
aria-controls="home" role="tab"
data-toggle="tab">Message</a></li>
		  </ul>
		</div> <!-- page header -->
		<div class="page-content">
			<div class="tab-content">
				<div class="tab-pane active" id="message">
					<div class="row">
						<div class="col-md-8">
							<div class="panel panel-default">
								<div class="panel-heading">Event
options</div>
								<div class="panel-body">
									<?php echo
$this->form->renderField('template'); ?>
									<?php echo $this->form->renderField('url');
?>
									<?php echo
$this->form->renderField('image_url'); ?>
									<?php echo $this->form->renderField('title');
?>
									<?php echo $this->form->renderField('name');
?>
									<?php echo $this->form->renderField('email');
?>
									<?php echo $this->form->renderField('ip');
?>
									
									<?php echo $this->form->renderField('city');
?>
									<?php echo $this->form->renderField('state');
?>
									<?php echo $this->form->renderField('country');
?>
									
									<?php echo $this->form->renderField('created');
?>

								</div>
							</div>
						</div>
						<div class="col-md-4">
							<!-- 
							<h4>Help Document</h4>
							<div class="panel panel-default">
								<div class="panel-body">
									Coming soon...
								</div>
							</div>
							 -->
						</div>
					</div>
				</div>			
			</div>
		</div>
	</div>
</div>

	<input type="hidden" name="task" value=""
/>
	<input type="hidden" name="return"
value="<?php echo $input->getCmd('return');
?>" />
	<?php echo JHtml::_('form.token'); ?>
</form>
views/event/tmpl/edit.xml000064400000000530151160724640011451
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLE_VIEW_EDIT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLE_VIEW_EDIT_DESC]]>
		</message>
	</layout>
	<fieldset name="request">
		<fields name="request">
			<field
				name="id"
				type="hidden"
				default="0"
			/>
		</fields>
	</fieldset>
</metadata>
views/event/tmpl/modal.php000064400000002551151160724640011614
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip', '.hasTooltip',
array('placement' => 'bottom'));

// @deprecated 4.0 the function parameter, the inline js and the buttons
are not needed since 3.7.0.
$function  =
JFactory::getApplication()->input->getCmd('function',
'jEditArticle_' . (int) $this->item->id);

// Function to update input title when changed
JFactory::getDocument()->addScriptDeclaration('
	function jEditTemplateModal() {
		if (window.parent &&
document.formvalidator.isValid(document.getElementById("item-form")))
{
			return window.parent.' . $this->escape($function) .
'(document.getElementById("jform_title").value);
		}
	}
');
?>
<button id="applyBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('event.apply');
jEditTemplateModal();"></button>
<button id="saveBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('event.save');
jEditTemplateModal();"></button>
<button id="closeBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('event.cancel');"></button>

<div class="container-popup">
	<?php $this->setLayout('edit'); ?>
	<?php echo $this->loadTemplate(); ?>
</div>
views/event/view.html.php000064400000010443151160724640011460
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View to edit an event.
 *
 * @since  1.6
 */
class NotiflyViewEvent extends JViewLegacy
{
	/**
	 * The JForm object
	 *
	 * @var  JForm
	 */
	protected $form;

	/**
	 * The active item
	 *
	 * @var  object
	 */
	protected $item;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * The actions the user is authorised to perform
	 *
	 * @var  JObject
	 */
	protected $canDo;

	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;
	
	/**
	 * Execute and display a event script.
	 *
	 * @param   string  $tpl  The name of the event file to parse;
automatically searches through the event paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 *
	 * @since   1.6
	 */
	public function display($tpl = null)
	{
		if ($this->getLayout() == 'pagebreak')
		{

			return parent::display($tpl);
		}

		$this->form  = $this->get('Form');
		$this->item  = $this->get('Item');
		$this->state = $this->get('State');
		$this->canDo = JHelperContent::getActions('com_notifly',
'event', $this->item->id);

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		// If we are forcing a language in modal (used for associations).
		if ($this->getLayout() === 'modal' &&
$forcedLanguage =
JFactory::getApplication()->input->get('forcedLanguage',
'', 'cmd'))
		{
			// Set the language field to the forcedLanguage and disable changing it.
			$this->form->setValue('language', null,
$forcedLanguage);
			$this->form->setFieldAttribute('language',
'readonly', 'true');

			// Only allow to select categories with All language or with the forced
language.
			$this->form->setFieldAttribute('catid',
'language', '*,' . $forcedLanguage);

			// Only allow to select tags with All language or with the forced
language.
			$this->form->setFieldAttribute('tags',
'language', '*,' . $forcedLanguage);
		}

		NotiflyHelper::addSubmenu('templates');
		
		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		JFactory::getApplication()->input->set('hidemainmenu',
true);
		$user       = JFactory::getUser();
		$userId     = $user->id;
		$isNew      = ($this->item->id == 0);
		$checkedOut = !($this->item->checked_out == 0 ||
$this->item->checked_out == $userId);

		// Built the actions for new and existing records.
		$canDo = $this->canDo;

		JToolbarHelper::title(
			JText::_('COM_NOTIFLY_PAGE_EDIT_EVENT'),
			'pencil-2 event-add'
		);

		// For new records, check the create permission.
		if ($isNew &&
(count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0))
		{
			JToolbarHelper::apply('event.apply');
			JToolbarHelper::save('event.save');
			JToolbarHelper::save2new('event.save2new');
			JToolbarHelper::cancel('event.cancel');
		}
		else
		{
			// Since it's an existing record, check the edit permission, or
fall back to edit own if the owner.
			$itemEditable = $canDo->get('core.edit') ||
($canDo->get('core.edit.own') &&
$this->item->created_by == $userId);

			// Can't save the record if it's checked out and editable
			if (!$checkedOut && $itemEditable)
			{
				JToolbarHelper::apply('event.apply');
				JToolbarHelper::save('event.save');

				// We can save this record, but check the create permission to see if
we can return to make a new one.
				// if ($canDo->get('core.create'))
				// {
				// 	JToolbarHelper::save2new('event.save2new');
				// }
			}

			// If checked out, we can still save
			// if ($canDo->get('core.create'))
			// {
			// 	JToolbarHelper::save2copy('event.save2copy');
			// }

			if (JComponentHelper::isEnabled('com_notifly') &&
$this->state->params->get('save_history', 0) &&
$itemEditable)
			{
				JToolbarHelper::versions('com_notifly.event',
$this->item->id);
			}

			JToolbarHelper::cancel('event.cancel',
'JTOOLBAR_CLOSE');
		}

		JToolbarHelper::divider();
		JToolbarHelper::help('JHELP_CONTENT_EVENT_MANAGER_EDIT');
	}
}
views/events/tmpl/default.php000064400000012032151160724640012322
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JLoader::register('NotiflyMessageHelper',
JPATH_COMPONENT_ADMINISTRATOR . '/helpers/message.php');

JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen',
'.multipleAccessLevels', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_ACCESS')));
JHtml::_('formbehavior.chosen', '.multipleAuthors',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_AUTHOR')));
JHtml::_('formbehavior.chosen', '.multipleCategories',
null, array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_CATEGORY')));
JHtml::_('formbehavior.chosen', '.multipleTags', null,
array('placeholder_text_multiple' =>
JText::_('JOPTION_SELECT_TAG')));
JHtml::_('formbehavior.chosen', 'select');

$user      = JFactory::getUser();
$userId    = $user->get('id');

JHtml::_('jquery.framework');
JHtml::_('script', 'com_notifly/showdown.min.js',
array('version' => 'auto', 'relative'
=> true));
?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=events');
?>" method="post" name="adminForm"
id="adminForm">
	<div id="cf" class="events tx-flex">
		<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
		<div class="tx-main">
			<?php else : ?>
		<div class="tx-main">
			<?php endif; ?>
			<div class="page-header">
			  <h1>Events</h1>
			  <?php
				// Search tools bar
				// echo JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this));
				?>
			  <nav class="navbar navbar-default">
			  	<div class="container-fluid">
			  		<div class="collapse navbar-collapse">
			  			<div class="navbar-form navbar-left">
			  				<?php 
			  				$filters = $this->filterForm->getGroup('filter');
			  				?>
			  				<?php foreach ($filters as $fieldName => $field) : ?>
							<?php if ($fieldName == 'filter_extension_id') : ?>
								<?php $dataShowOn = ''; ?>
								<?php if ($field->showon) : ?>
									<?php JHtml::_('jquery.framework'); ?>
									<?php JHtml::_('script', 'jui/cms.js',
array('version' => 'auto', 'relative'
=> true)); ?>
									<?php $dataShowOn = " data-showon='" .
json_encode(JFormHelper::parseShowOnConditions($field->showon,
$field->formControl, $field->group)) . "'"; ?>
								<?php endif; ?>
								<div class="js-stools-field-filter"<?php echo
$dataShowOn; ?>>
									<?php echo $field->input; ?>
								</div>
							<?php endif; ?>
						<?php endforeach; ?>
					  	</div>
					  	<div class="navbar-form navbar-right">
					  		<!-- 
					  		<div class="input-group">
						      <input name="filter[search]"
id="filter_search" type="text"
class="form-control" placeholder="Search events...">
						      <span class="input-group-btn">
						        <button class="btn btn-default"
type="button">Search</button>
						      </span>
						    </div>
						     -->
						     <!-- /input-group -->
					  	</div>
			  		</div>
			  	</div>
			  </nav>
			</div>
			<div class="page-content">
				<?php echo NotiflyHelper::showWarning(); ?>
				
				<table class="table table-hover">
					<tbody>
					<?php foreach ($this->items as $i => $item) : ?>
						<?php $token = JFactory::getSession()->getFormToken(); ?>
						<?php 
						if(!$item->image_url) $img =
"//logo.clearbit.com/themesgrove.com"; else $img =
$item->image_url;
						 ?>
						<tr>
							<td width="70%">
								<div class="row">
									<div class="col-md-2">
							      		<h3><img class="media-object img-circle" 
							      			src="<?php echo $img ?>"
alt="Image" 
							      			style="width: 64px; height: 64px; margin: 0
auto;"
						      			/></h3>
								  </div>
								  <div class="col-md-10">
								    <h4 class="muted text-uppercase"><?php echo
$item->template; ?></h4>
								    <p class="event-message"><?php echo
NotiflyMessageHelper::parseMessage($item->message, $item);
?></p>
								  </div>
								</div>
							</td>
							<td width="15%">
								<strong>Created</strong> <br> <?php echo
date("D, M jS Y", strtotime($item->created)); ?>
							</td>
							<td width="15%">
								<a
href="index.php?option=com_notifly&task=event.edit&id=<?php
echo $item->id; ?>&<?php echo $token; ?>=1"
class="btn btn-primary"><i
class="cfi-edit"></i> Edit</a>
								<a
href="index.php?option=com_notifly&task=event.delete&cid=<?php
echo $item->id; ?>&<?php echo $token; ?>=1"
class="btn btn-warning"><i
class="cfi-trash-2"></i></a>
							</td>
						</tr>
					<?php endforeach; ?>
					</tbody>
				</table>
			
			<?php echo $this->pagination->getListFooter(); ?>
			
			</div>
			
			<input type="hidden" name="task"
value="" />
			<input type="hidden" name="boxchecked"
value="0" />
			<?php echo JHtml::_('form.token'); ?>
		</div>
	</div>
</form>
<script
type="text/javascript">window.convertFromMarkdown();</script>
views/events/tmpl/default.xml000064400000000322151160724640012332
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
views/events/tmpl/modal.php000064400000013344151160724640012001
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

$app = JFactory::getApplication();

if ($app->isClient('site'))
{
	JSession::checkToken('get') or
die(JText::_('JINVALID_TOKEN'));
}

JLoader::register('NotiflyHelperRoute', JPATH_ROOT .
'/components/com_notifly/helpers/route.php');

// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('behavior.core');
JHtml::_('behavior.polyfill', array('event'), 'lt
IE 9');
JHtml::_('script',
'com_notifly/admin-articles-modal.min.js',
array('version' => 'auto', 'relative'
=> true));
JHtml::_('bootstrap.tooltip', '.hasTooltip',
array('placement' => 'bottom'));
JHtml::_('formbehavior.chosen', 'select');

// Special case for the search field tooltip.
$searchFilterDesc =
$this->filterForm->getFieldAttribute('search',
'description', null, 'filter');
JHtml::_('bootstrap.tooltip', '#filter_search',
array('title' => JText::_($searchFilterDesc),
'placement' => 'bottom'));

$function  = $app->input->getCmd('function',
'jSelectArticle');
$editor    = $app->input->getCmd('editor', '');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirn  =
$this->escape($this->state->get('list.direction'));
$onclick   = $this->escape($function);

if (!empty($editor))
{
	// This view is used also in com_menus. Load the xtd script only if the
editor is set!
	JFactory::getDocument()->addScriptOptions('xtd-articles',
array('editor' => $editor));
	$onclick = "jSelectArticle";
}
?>
<div class="container-popup">

	<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=articles&layout=modal&tmpl=component&function='
. $function . '&' . JSession::getFormToken() .
'=1&editor=' . $editor); ?>" method="post"
name="adminForm" id="adminForm"
class="form-inline">

		<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this)); ?>

		<div class="clearfix"></div>

		<?php if (empty($this->items)) : ?>
			<div class="alert alert-no-items">
				<?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
			</div>
		<?php else : ?>
			<table class="table table-striped table-condensed">
				<thead>
					<tr>
						<th width="1%" class="center nowrap">
							<?php echo JHtml::_('searchtools.sort',
'JSTATUS', 'a.state', $listDirn, $listOrder); ?>
						</th>
						<th class="title">
							<?php echo JHtml::_('searchtools.sort',
'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder);
?>
						</th>
						<th width="10%" class="nowrap
hidden-phone">
							<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ACCESS', 'a.access', $listDirn,
$listOrder); ?>
						</th>
						<th width="15%" class="nowrap">
							<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_LANGUAGE', 'language', $listDirn,
$listOrder); ?>
						</th>
						<th width="5%" class="nowrap hidden-phone">
							<?php echo JHtml::_('searchtools.sort',
'JDATE', 'a.created', $listDirn, $listOrder); ?>
						</th>
						<th width="1%" class="nowrap hidden-phone">
						<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder);
?>
						</th>
					</tr>
				</thead>
				<tfoot>
					<tr>
						<td colspan="6">
							<?php echo $this->pagination->getListFooter(); ?>
						</td>
					</tr>
				</tfoot>
				<tbody>
				<?php
				$iconStates = array(
					-2 => 'icon-trash',
					0  => 'icon-unpublish',
					1  => 'icon-publish',
					2  => 'icon-archive',
				);
				?>
				<?php foreach ($this->items as $i => $item) : ?>
					<?php if ($item->language &&
JLanguageMultilang::isEnabled())
					{
						$tag = strlen($item->language);
						if ($tag == 5)
						{
							$lang = substr($item->language, 0, 2);
						}
						elseif ($tag == 6)
						{
							$lang = substr($item->language, 0, 3);
						}
						else {
							$lang = '';
						}
					}
					elseif (!JLanguageMultilang::isEnabled())
					{
						$lang = '';
					}
					?>
					<tr class="row<?php echo $i % 2; ?>">
						<td class="center">
							<span class="<?php echo
$iconStates[$this->escape($item->state)]; ?>"
aria-hidden="true"></span>
						</td>
						<td>
							<?php $attribs = 'data-function="' .
$this->escape($onclick) . '"'
								. ' data-id="' . $item->id . '"'
								. ' data-title="' .
$this->escape(addslashes($item->title)) . '"'
								. ' data-cat-id="' .
$this->escape($item->catid) . '"'
								. ' data-uri="' .
$this->escape(NotiflyHelperRoute::getArticleRoute($item->id,
$item->catid, $item->language)) . '"'
								. ' data-language="' . $this->escape($lang) .
'"';
							?>
							<a class="select-link"
href="javascript:void(0)" <?php echo $attribs; ?>>
								<?php echo $this->escape($item->title); ?>
							</a>
							<div class="small">
								<?php echo JText::_('JCATEGORY') . ': ' .
$this->escape($item->category_title); ?>
							</div>
						</td>
						<td class="small hidden-phone">
							<?php echo $this->escape($item->access_level); ?>
						</td>
						<td class="small">
							<?php echo
JLayoutHelper::render('joomla.content.language', $item); ?>
						</td>
						<td class="nowrap small hidden-phone">
							<?php echo JHtml::_('date', $item->created,
JText::_('DATE_FORMAT_LC4')); ?>
						</td>
						<td class="nowrap small hidden-phone">
							<?php echo (int) $item->id; ?>
						</td>
					</tr>
				<?php endforeach; ?>
				</tbody>
			</table>
		<?php endif; ?>

		<input type="hidden" name="task"
value="" />
		<input type="hidden" name="boxchecked"
value="0" />
		<input type="hidden" name="forcedLanguage"
value="<?php echo
$app->input->get('forcedLanguage', '',
'CMD'); ?>" />
		<?php echo JHtml::_('form.token'); ?>

	</form>
</div>
views/events/view.html.php000064400000011336151160724640011645
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View class for a list of events.
 *
 * @since  1.6
 */
class NotiflyViewEvents extends JViewLegacy
{
	/**
	 * The item authors
	 *
	 * @var  stdClass
	 */
	protected $authors;

	/**
	 * An array of items
	 *
	 * @var  array
	 */
	protected $items;

	/**
	 * The pagination object
	 *
	 * @var  JPagination
	 */
	protected $pagination;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * Form object for search filters
	 *
	 * @var  JForm
	 */
	public $filterForm;

	/**
	 * The active search filters
	 *
	 * @var  array
	 */
	public $activeFilters;

	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;

	/**
	 * Display the view
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		NotiflyHelper::addSubmenu('events');

		$this->items         = $this->get('Items');
		$this->pagination    = $this->get('Pagination');
		$this->state         = $this->get('State');
		$this->authors       = $this->get('Authors');
		$this->filterForm    = $this->get('FilterForm');
		$this->activeFilters = $this->get('ActiveFilters');
		
		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}


		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		$canDo = JHelperContent::getActions('com_notifly',
'events');
		$user  = JFactory::getUser();

		// Get the toolbar object instance
		$bar = JToolbar::getInstance('toolbar');

		JToolbarHelper::title(JText::_('COM_NOTIFLY_EVENTS_TITLE'),
'stack events');

		// if ($canDo->get('core.create') ||
count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0)
		// {
		// 	JToolbarHelper::addNew('event.add');
		// }

		// if ($canDo->get('core.edit') ||
$canDo->get('core.edit.own'))
		// {
		// 	JToolbarHelper::editList('event.edit');
		// }

		// if ($canDo->get('core.edit.state'))
		// {
		// 	JToolbarHelper::publish('events.publish',
'JTOOLBAR_PUBLISH', true);
		// 	JToolbarHelper::unpublish('events.unpublish',
'JTOOLBAR_UNPUBLISH', true);
		// 	JToolbarHelper::custom('events.featured',
'featured.png', 'featured_f2.png',
'JFEATURE', true);
		// 	JToolbarHelper::custom('events.unfeatured',
'unfeatured.png', 'featured_f2.png',
'JUNFEATURE', true);
		// 	JToolbarHelper::archiveList('events.archive');
		// 	JToolbarHelper::checkin('events.checkin');
		// }

		// Add a batch button
		// if ($user->authorise('core.create',
'com_notifly')
		// 	&& $user->authorise('core.edit',
'com_notifly')
		// 	&& $user->authorise('core.edit.state',
'com_notifly'))
		// {
		// 	$title = JText::_('JTOOLBAR_BATCH');

		// 	// Instantiate a new JLayoutFile instance and render the batch button
		// 	$layout = new JLayoutFile('joomla.toolbar.batch');

		// 	$dhtml = $layout->render(array('title' => $title));
		// 	$bar->appendButton('Custom', $dhtml, 'batch');
		// }

		// if ($this->state->get('filter.published') == -2
&& $canDo->get('core.delete'))
		// {
		// 	JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE',
'events.delete', 'JTOOLBAR_EMPTY_TRASH');
		// }
		// elseif ($canDo->get('core.edit.state'))
		// {
		// 	JToolbarHelper::trash('events.trash');
		// }

		if ($user->authorise('core.admin', 'com_notifly')
|| $user->authorise('core.options', 'com_notifly'))
		{
			JToolbarHelper::preferences('com_notifly');
		}

		$help_url  = 'https://www.themexpert.com/docs';
		JToolbarHelper::help( 'COM_NOTIFLY_HELP_SITE', false, $help_url
);
	}

	/**
	 * Returns an array of fields the table can be sorted by
	 *
	 * @return  array  Array containing the field name to sort by as the key
and display text as value
	 *
	 * @since   3.0
	 */
	protected function getSortFields()
	{
		return array(
			'a.ordering'     =>
JText::_('JGRID_HEADING_ORDERING'),
			'a.state'        => JText::_('JSTATUS'),
			'a.title'        => JText::_('JGLOBAL_TITLE'),
			'category_title' => JText::_('JCATEGORY'),
			'access_level'   =>
JText::_('JGRID_HEADING_ACCESS'),
			'a.created_by'   => JText::_('JAUTHOR'),
			'language'       =>
JText::_('JGRID_HEADING_LANGUAGE'),
			'a.created'      => JText::_('JDATE'),
			'a.id'           => JText::_('JGRID_HEADING_ID'),
			'a.featured'     => JText::_('JFEATURED')
		);
	}
}
views/integration/tmpl/edit.php000064400000012652151160724640012652
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('behavior.formvalidator');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', '#jform_catid', null,
array('disable_search_threshold' => 0 ));
JHtml::_('formbehavior.chosen', 'select');

$this->configFieldsets  = array('editorConfig');
$this->hiddenFieldsets  = array('basic-limited');
$this->ignore_fieldsets = array('jmetadata',
'item_associations');

// Create shortcut to parameters.
$params = clone($this->state->get('params'));
$params->merge(new Registry($this->item->attribs));

$app = JFactory::getApplication();
$input = $app->input;

$assoc = JLanguageAssociations::isEnabled();

JFactory::getDocument()->addScriptDeclaration('
	Joomla.submitbutton = function(task)
	{
		if (task == "article.cancel" ||
document.formvalidator.isValid(document.getElementById("item-form")))
		{
			jQuery("#permissions-sliders
select").attr("disabled", "disabled");
			' . $this->form->getField('articletext')->save()
. '
			Joomla.submitform(task, document.getElementById("item-form"));

			// @deprecated 4.0  The following js is not needed since 3.7.0.
			if (task !== "article.apply")
			{
				window.parent.jQuery("#articleEdit' . (int)
$this->item->id . 'Modal").modal("hide");
			}
		}
	};
');

// In case of modal
$isModal = $input->get('layout') == 'modal' ? true :
false;
$layout  = $isModal ? 'modal' : 'edit';
$tmpl    = $isModal || $input->get('tmpl', '',
'cmd') === 'component' ?
'&tmpl=component' : '';
?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&layout=' . $layout .
$tmpl . '&id=' . (int) $this->item->id); ?>"
method="post" name="adminForm" id="item-form"
class="form-validate">

	<?php echo JLayoutHelper::render('joomla.edit.title_alias',
$this); ?>

	<div class="form-horizontal">
		<?php echo JHtml::_('bootstrap.startTabSet',
'myTab', array('active' => 'general'));
?>

		<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'general', JText::_('COM_NOTIFLY_ARTICLE_CONTENT'));
?>
		<div class="row-fluid">
			<div class="span9">
				<fieldset class="adminform">
					<?php echo $this->form->getInput('articletext');
?>
				</fieldset>
			</div>
			<div class="span3">
				<?php echo JLayoutHelper::render('joomla.edit.global',
$this); ?>
			</div>
		</div>
		<?php echo JHtml::_('bootstrap.endTab'); ?>

		<?php // Do not show the images and links options if the edit form is
configured not to. ?>
		<?php if ($params->get('show_urls_images_backend') == 1)
: ?>
			<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'images',
JText::_('COM_NOTIFLY_FIELDSET_URLS_AND_IMAGES')); ?>
			<div class="row-fluid form-horizontal-desktop">
				<div class="span6">
					<?php echo $this->form->renderField('images');
?>
					<?php foreach ($this->form->getGroup('images') as
$field) : ?>
						<?php echo $field->renderField(); ?>
					<?php endforeach; ?>
				</div>
				<div class="span6">
					<?php foreach ($this->form->getGroup('urls') as
$field) : ?>
						<?php echo $field->renderField(); ?>
					<?php endforeach; ?>
				</div>
			</div>
			<?php echo JHtml::_('bootstrap.endTab'); ?>
		<?php endif; ?>

		<?php $this->show_options =
$params->get('show_article_options', 1); ?>
		<?php echo JLayoutHelper::render('joomla.edit.params',
$this); ?>

		<?php // Do not show the publishing options if the edit form is
configured not to. ?>
		<?php if ($params->get('show_publishing_options', 1) ==
1) : ?>
			<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'publishing',
JText::_('COM_NOTIFLY_FIELDSET_PUBLISHING')); ?>
			<div class="row-fluid form-horizontal-desktop">
				<div class="span6">
					<?php echo
JLayoutHelper::render('joomla.edit.publishingdata', $this); ?>
				</div>
				<div class="span6">
					<?php echo JLayoutHelper::render('joomla.edit.metadata',
$this); ?>
				</div>
			</div>
			<?php echo JHtml::_('bootstrap.endTab'); ?>
		<?php endif; ?>


		<?php if ( ! $isModal && $assoc) : ?>
			<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'associations',
JText::_('JGLOBAL_FIELDSET_ASSOCIATIONS')); ?>
			<?php echo $this->loadTemplate('associations'); ?>
			<?php echo JHtml::_('bootstrap.endTab'); ?>
		<?php elseif ($isModal && $assoc) : ?>
			<div class="hidden"><?php echo
$this->loadTemplate('associations'); ?></div>
		<?php endif; ?>

		<?php if ($this->canDo->get('core.admin')) : ?>
			<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'editor',
JText::_('COM_NOTIFLY_SLIDER_EDITOR_CONFIG')); ?>
			<?php echo
$this->form->renderFieldset('editorConfig'); ?>
			<?php echo JHtml::_('bootstrap.endTab'); ?>
		<?php endif; ?>

		<?php if ($this->canDo->get('core.admin')) : ?>
			<?php echo JHtml::_('bootstrap.addTab', 'myTab',
'permissions', JText::_('COM_NOTIFLY_FIELDSET_RULES'));
?>
				<?php echo $this->form->getInput('rules'); ?>
			<?php echo JHtml::_('bootstrap.endTab'); ?>
		<?php endif; ?>

		<?php echo JHtml::_('bootstrap.endTabSet'); ?>

		<input type="hidden" name="task"
value="" />
		<input type="hidden" name="return"
value="<?php echo $input->getCmd('return');
?>" />
		<input type="hidden" name="forcedLanguage"
value="<?php echo $input->get('forcedLanguage',
'', 'cmd'); ?>" />
		<?php echo JHtml::_('form.token'); ?>
	</div>
</form>
views/integration/tmpl/edit.xml000064400000000530151160724640012653
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLE_VIEW_EDIT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLE_VIEW_EDIT_DESC]]>
		</message>
	</layout>
	<fieldset name="request">
		<fields name="request">
			<field
				name="id"
				type="hidden"
				default="0"
			/>
		</fields>
	</fieldset>
</metadata>
views/integration/tmpl/modal.php000064400000002554151160724640013021
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip', '.hasTooltip',
array('placement' => 'bottom'));

// @deprecated 4.0 the function parameter, the inline js and the buttons
are not needed since 3.7.0.
$function  =
JFactory::getApplication()->input->getCmd('function',
'jEditArticle_' . (int) $this->item->id);

// Function to update input title when changed
JFactory::getDocument()->addScriptDeclaration('
	function jEditArticleModal() {
		if (window.parent &&
document.formvalidator.isValid(document.getElementById("item-form")))
{
			return window.parent.' . $this->escape($function) .
'(document.getElementById("jform_title").value);
		}
	}
');
?>
<button id="applyBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('article.apply');
jEditArticleModal();"></button>
<button id="saveBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('article.save');
jEditArticleModal();"></button>
<button id="closeBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('article.cancel');"></button>

<div class="container-popup">
	<?php $this->setLayout('edit'); ?>
	<?php echo $this->loadTemplate(); ?>
</div>
views/integration/view.html.php000064400000010327151160724640012663
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View to edit an article.
 *
 * @since  1.6
 */
class NotiflyViewArticle extends JViewLegacy
{
	/**
	 * The JForm object
	 *
	 * @var  JForm
	 */
	protected $form;

	/**
	 * The active item
	 *
	 * @var  object
	 */
	protected $item;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * The actions the user is authorised to perform
	 *
	 * @var  JObject
	 */
	protected $canDo;

	/**
	 * Execute and display a template script.
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 *
	 * @since   1.6
	 */
	public function display($tpl = null)
	{
		if ($this->getLayout() == 'pagebreak')
		{

			return parent::display($tpl);
		}

		$this->form  = $this->get('Form');
		$this->item  = $this->get('Item');
		$this->state = $this->get('State');
		$this->canDo = JHelperNotifly::getActions('com_notifly',
'article', $this->item->id);

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		// If we are forcing a language in modal (used for associations).
		if ($this->getLayout() === 'modal' &&
$forcedLanguage =
JFactory::getApplication()->input->get('forcedLanguage',
'', 'cmd'))
		{
			// Set the language field to the forcedLanguage and disable changing it.
			$this->form->setValue('language', null,
$forcedLanguage);
			$this->form->setFieldAttribute('language',
'readonly', 'true');

			// Only allow to select categories with All language or with the forced
language.
			$this->form->setFieldAttribute('catid',
'language', '*,' . $forcedLanguage);

			// Only allow to select tags with All language or with the forced
language.
			$this->form->setFieldAttribute('tags',
'language', '*,' . $forcedLanguage);
		}

		$this->addToolbar();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		JFactory::getApplication()->input->set('hidemainmenu',
true);
		$user       = JFactory::getUser();
		$userId     = $user->id;
		$isNew      = ($this->item->id == 0);
		$checkedOut = !($this->item->checked_out == 0 ||
$this->item->checked_out == $userId);

		// Built the actions for new and existing records.
		$canDo = $this->canDo;

		JToolbarHelper::title(
			JText::_('COM_NOTIFLY_PAGE_' . ($checkedOut ?
'VIEW_ARTICLE' : ($isNew ? 'ADD_ARTICLE' :
'EDIT_ARTICLE'))),
			'pencil-2 article-add'
		);

		// For new records, check the create permission.
		if ($isNew &&
(count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0))
		{
			JToolbarHelper::apply('article.apply');
			JToolbarHelper::save('article.save');
			JToolbarHelper::save2new('article.save2new');
			JToolbarHelper::cancel('article.cancel');
		}
		else
		{
			// Since it's an existing record, check the edit permission, or
fall back to edit own if the owner.
			$itemEditable = $canDo->get('core.edit') ||
($canDo->get('core.edit.own') &&
$this->item->created_by == $userId);

			// Can't save the record if it's checked out and editable
			if (!$checkedOut && $itemEditable)
			{
				JToolbarHelper::apply('article.apply');
				JToolbarHelper::save('article.save');

				// We can save this record, but check the create permission to see if
we can return to make a new one.
				if ($canDo->get('core.create'))
				{
					JToolbarHelper::save2new('article.save2new');
				}
			}

			// If checked out, we can still save
			if ($canDo->get('core.create'))
			{
				JToolbarHelper::save2copy('article.save2copy');
			}

			if (JComponentHelper::isEnabled('com_notiflyhistory')
&& $this->state->params->get('save_history', 0)
&& $itemEditable)
			{
				JToolbarHelper::versions('com_notifly.article',
$this->item->id);
			}

			JToolbarHelper::cancel('article.cancel',
'JTOOLBAR_CLOSE');
		}

		JToolbarHelper::divider();
		JToolbarHelper::help('JHELP_CONTENT_ARTICLE_MANAGER_EDIT');
	}
}
views/integrations/tmpl/default.php000064400000010655151160724640013535
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');

$user      = JFactory::getUser();
$userId    = $user->get('id');
$list = array_chunk($this->items, 4);

?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=dashboard');
?>" method="post" name="adminForm"
id="adminForm">
<div id="cf" class="integrations tx-flex">
	<?php if (!empty( $this->sidebar)) : ?>
	<div class="tx-sidebar">
		<?php echo $this->sidebar; ?>
	</div>
	<div class="tx-main">
	<?php else : ?>
	<div class="tx-main">
	<?php endif; ?>
		<div class="page-header">
		  <h1>Integrations</h1>
		</div>
		<div class="page-content">
			<?php echo NotiflyHelper::showWarning(); ?>
			
			<?php foreach ($list as $key => $items) { ?>
				<div class="row">
				<?php foreach ($items as $key => $item) { ?>
					<?php 
					// Load language file for use throughout the plugin
					JFactory::getLanguage()->load($item->name, JPATH_ADMINISTRATOR);
					 ?>
					<div class="col-md-3">
						<div class="panel panel-default text-center">
							<div class="panel-body">
								<img class="int-logo" src="<?php echo
Juri::root() .
'plugins/notifly/'.$item->element.'/media/logo.png';
?>" alt="<?php echo $item->element; ?>">
								<h4><?php echo JText::_(strtoupper($item->name));
?></h4>
							</div>
							<div class="panel-footer">
								<?php if($item->enabled){ ?>
									<?php $link =
'index.php?option=com_plugins&task=plugin.edit&layout=modal&tmpl=component&extension_id='
. $item->extension_id; ?>
									<a href="#integrationEdit<?php echo
$item->extension_id; ?>Modal" role="button"
class="btn btn-primary btn-block" data-toggle="modal"
title="<?php echo
JText::_('COM_MENUS_EDIT_INTEGRATION_SETTINGS'); ?>"
id="title-<?php echo $item->extension_id; ?>">
										<?php echo
JText::_('COM_NOTIFLY_CONFIGURE_INTEGRATION'); ?>
									</a>
								<?php  }else{ ?>
									<?php $token = JFactory::getSession()->getFormToken(); ?>
									<?php $link =
'index.php?option=com_notifly&task=integrations.enable&'.$token.'=1&ids[]='.$item->extension_id;
?>
									<a href="<?php echo $link; ?>" class="btn
btn-default btn-block">
										<?php echo
JText::_('COM_NOTIFLY_CONFIGURE_INTEGRATION_ENABLE'); ?>
									</a>
								<?php } ?>
							</div>
							<?php echo JHtml::_(
								'bootstrap.renderModal',
								'integrationEdit' . $item->extension_id .
'Modal',
								array(
									'title'       =>
JText::_('COM_NOTIFLY_EDIT_INTEGRATION_SETTINGS'),
									'backdrop'    => 'static',
									'keyboard'    => false,
									'closeButton' => true,
									'url'         => $link,
									'bodyHeight'  => '70',
									'footer'      => '<button
type="button" class="tx-btn btn btn-primary"
aria-hidden="true"'
											. ' onclick="jQuery(\'#integrationEdit' .
$item->extension_id . 'Modal
iframe\').contents().find(\'#saveBtn\').click();">'
											. JText::_('JSAVE') . '</button>'
											// . '<button type="button" class="tx-btn
btn btn-primary" aria-hidden="true"'
											// . ' onclick="jQuery(\'#integrationEdit' .
$item->extension_id . 'Modal
iframe\').contents().find(\'#closeBtn\').click();">'
											// . JText::_('JCANCEL') .
'</button>',
								)
							); ?>

						</div>
					</div>
				<?php } ?>
				</div>
			<?php } ?>
			<div class="row">
				<div class="col-md-10 col-md-offset-1">
					<div class="request-block">
						<div class="media"> 
							<div class="media-body"> 
								<h4 class="media-heading">Need Your Extension
Integration?</h4> 
								We'd love to integrate your extention out-of-the-box. All you
have to let us know.
							</div> 
							<div class="media-right"> <a class="btn
btn-success" href="http://suggest.themexpert.com"
target="_blank"><i
class="cfi-twitter"></i> Let Us Know</a>
</div> 
						</div>
					</div>
				</div>
			</div>

			<?php echo $this->pagination->getListFooter(); ?>

		</div>

			<input type="hidden" name="task"
value="" />
			<input type="hidden" name="dashboard"
value="1" />
			<input type="hidden" name="boxchecked"
value="0" />
			<?php echo JHtml::_('form.token'); ?>
		</div> <!-- container -->
	</div>
</form>views/integrations/tmpl/default.xml000064400000000322151160724640013534
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
views/integrations/tmpl/modal.php000064400000013344151160724640013203
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

$app = JFactory::getApplication();

if ($app->isClient('site'))
{
	JSession::checkToken('get') or
die(JText::_('JINVALID_TOKEN'));
}

JLoader::register('NotiflyHelperRoute', JPATH_ROOT .
'/components/com_notifly/helpers/route.php');

// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('behavior.core');
JHtml::_('behavior.polyfill', array('event'), 'lt
IE 9');
JHtml::_('script',
'com_notifly/admin-articles-modal.min.js',
array('version' => 'auto', 'relative'
=> true));
JHtml::_('bootstrap.tooltip', '.hasTooltip',
array('placement' => 'bottom'));
JHtml::_('formbehavior.chosen', 'select');

// Special case for the search field tooltip.
$searchFilterDesc =
$this->filterForm->getFieldAttribute('search',
'description', null, 'filter');
JHtml::_('bootstrap.tooltip', '#filter_search',
array('title' => JText::_($searchFilterDesc),
'placement' => 'bottom'));

$function  = $app->input->getCmd('function',
'jSelectArticle');
$editor    = $app->input->getCmd('editor', '');
$listOrder =
$this->escape($this->state->get('list.ordering'));
$listDirn  =
$this->escape($this->state->get('list.direction'));
$onclick   = $this->escape($function);

if (!empty($editor))
{
	// This view is used also in com_menus. Load the xtd script only if the
editor is set!
	JFactory::getDocument()->addScriptOptions('xtd-articles',
array('editor' => $editor));
	$onclick = "jSelectArticle";
}
?>
<div class="container-popup">

	<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=articles&layout=modal&tmpl=component&function='
. $function . '&' . JSession::getFormToken() .
'=1&editor=' . $editor); ?>" method="post"
name="adminForm" id="adminForm"
class="form-inline">

		<?php echo
JLayoutHelper::render('joomla.searchtools.default',
array('view' => $this)); ?>

		<div class="clearfix"></div>

		<?php if (empty($this->items)) : ?>
			<div class="alert alert-no-items">
				<?php echo JText::_('JGLOBAL_NO_MATCHING_RESULTS'); ?>
			</div>
		<?php else : ?>
			<table class="table table-striped table-condensed">
				<thead>
					<tr>
						<th width="1%" class="center nowrap">
							<?php echo JHtml::_('searchtools.sort',
'JSTATUS', 'a.state', $listDirn, $listOrder); ?>
						</th>
						<th class="title">
							<?php echo JHtml::_('searchtools.sort',
'JGLOBAL_TITLE', 'a.title', $listDirn, $listOrder);
?>
						</th>
						<th width="10%" class="nowrap
hidden-phone">
							<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ACCESS', 'a.access', $listDirn,
$listOrder); ?>
						</th>
						<th width="15%" class="nowrap">
							<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_LANGUAGE', 'language', $listDirn,
$listOrder); ?>
						</th>
						<th width="5%" class="nowrap hidden-phone">
							<?php echo JHtml::_('searchtools.sort',
'JDATE', 'a.created', $listDirn, $listOrder); ?>
						</th>
						<th width="1%" class="nowrap hidden-phone">
						<?php echo JHtml::_('searchtools.sort',
'JGRID_HEADING_ID', 'a.id', $listDirn, $listOrder);
?>
						</th>
					</tr>
				</thead>
				<tfoot>
					<tr>
						<td colspan="6">
							<?php echo $this->pagination->getListFooter(); ?>
						</td>
					</tr>
				</tfoot>
				<tbody>
				<?php
				$iconStates = array(
					-2 => 'icon-trash',
					0  => 'icon-unpublish',
					1  => 'icon-publish',
					2  => 'icon-archive',
				);
				?>
				<?php foreach ($this->items as $i => $item) : ?>
					<?php if ($item->language &&
JLanguageMultilang::isEnabled())
					{
						$tag = strlen($item->language);
						if ($tag == 5)
						{
							$lang = substr($item->language, 0, 2);
						}
						elseif ($tag == 6)
						{
							$lang = substr($item->language, 0, 3);
						}
						else {
							$lang = '';
						}
					}
					elseif (!JLanguageMultilang::isEnabled())
					{
						$lang = '';
					}
					?>
					<tr class="row<?php echo $i % 2; ?>">
						<td class="center">
							<span class="<?php echo
$iconStates[$this->escape($item->state)]; ?>"
aria-hidden="true"></span>
						</td>
						<td>
							<?php $attribs = 'data-function="' .
$this->escape($onclick) . '"'
								. ' data-id="' . $item->id . '"'
								. ' data-title="' .
$this->escape(addslashes($item->title)) . '"'
								. ' data-cat-id="' .
$this->escape($item->catid) . '"'
								. ' data-uri="' .
$this->escape(NotiflyHelperRoute::getArticleRoute($item->id,
$item->catid, $item->language)) . '"'
								. ' data-language="' . $this->escape($lang) .
'"';
							?>
							<a class="select-link"
href="javascript:void(0)" <?php echo $attribs; ?>>
								<?php echo $this->escape($item->title); ?>
							</a>
							<div class="small">
								<?php echo JText::_('JCATEGORY') . ': ' .
$this->escape($item->category_title); ?>
							</div>
						</td>
						<td class="small hidden-phone">
							<?php echo $this->escape($item->access_level); ?>
						</td>
						<td class="small">
							<?php echo
JLayoutHelper::render('joomla.content.language', $item); ?>
						</td>
						<td class="nowrap small hidden-phone">
							<?php echo JHtml::_('date', $item->created,
JText::_('DATE_FORMAT_LC4')); ?>
						</td>
						<td class="nowrap small hidden-phone">
							<?php echo (int) $item->id; ?>
						</td>
					</tr>
				<?php endforeach; ?>
				</tbody>
			</table>
		<?php endif; ?>

		<input type="hidden" name="task"
value="" />
		<input type="hidden" name="boxchecked"
value="0" />
		<input type="hidden" name="forcedLanguage"
value="<?php echo
$app->input->get('forcedLanguage', '',
'CMD'); ?>" />
		<?php echo JHtml::_('form.token'); ?>

	</form>
</div>
views/integrations/view.html.php000064400000010551151160724640013045
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View class for a list of articles.
 *
 * @since  1.6
 */
class NotiflyViewIntegrations extends JViewLegacy
{

	/**
	 * An array of items
	 *
	 * @var  array
	 */
	protected $items;

	/**
	 * The pagination object
	 *
	 * @var  JPagination
	 */
	protected $pagination;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * Form object for search filters
	 *
	 * @var  JForm
	 */
	public $filterForm;

	/**
	 * The active search filters
	 *
	 * @var  array
	 */
	public $activeFilters;

	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;

	/**
	 * Display the view
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		$this->items         = $this->get('Items');
		$this->pagination    = $this->get('Pagination');
		$this->state         = $this->get('State');
		// $this->filterForm    = $this->get('FilterForm');
		$this->activeFilters = $this->get('ActiveFilters');
		
		NotiflyHelper::addSubmenu('integrations');
		
		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		$canDo = JHelperContent::getActions('com_notifly',
'integrations');
		$user  = JFactory::getUser();

		// Get the toolbar object instance
		$bar = JToolbar::getInstance('toolbar');

		JToolbarHelper::title(JText::_('COM_NOTIFLY_INTEGRATIONS_TITLE'),
'stack integrations');

		// if ($canDo->get('core.create') ||
count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0)
		// {
		// 	JToolbarHelper::addNew('article.add');
		// }

		// if ($canDo->get('core.edit') ||
$canDo->get('core.edit.own'))
		// {
		// 	JToolbarHelper::editList('article.edit');
		// }

		// if ($canDo->get('core.edit.state'))
		// {
		// 	JToolbarHelper::publish('articles.publish',
'JTOOLBAR_PUBLISH', true);
		// 	JToolbarHelper::unpublish('articles.unpublish',
'JTOOLBAR_UNPUBLISH', true);
		// 	JToolbarHelper::custom('articles.featured',
'featured.png', 'featured_f2.png',
'JFEATURE', true);
		// 	JToolbarHelper::custom('articles.unfeatured',
'unfeatured.png', 'featured_f2.png',
'JUNFEATURE', true);
		// 	JToolbarHelper::archiveList('articles.archive');
		// 	JToolbarHelper::checkin('articles.checkin');
		// }

		// Add a batch button
		// if ($user->authorise('core.create',
'com_notifly')
		// 	&& $user->authorise('core.edit',
'com_notifly')
		// 	&& $user->authorise('core.edit.state',
'com_notifly'))
		// {
		// 	$title = JText::_('JTOOLBAR_BATCH');

		// 	// Instantiate a new JLayoutFile instance and render the batch button
		// 	$layout = new JLayoutFile('joomla.toolbar.batch');

		// 	$dhtml = $layout->render(array('title' => $title));
		// 	$bar->appendButton('Custom', $dhtml, 'batch');
		// }
		
		if ($user->authorise('core.admin', 'com_notifly')
|| $user->authorise('core.options', 'com_notifly'))
		{
			JToolbarHelper::preferences('com_notifly');
		}

		$help_url  = 'https://www.themexpert.com/docs';
		JToolbarHelper::help( 'COM_NOTIFLY_HELP_SITE', false, $help_url
);
	}

	/**
	 * Returns an array of fields the table can be sorted by
	 *
	 * @return  array  Array containing the field name to sort by as the key
and display text as value
	 *
	 * @since   3.0
	 */
	protected function getSortFields()
	{
		return array(
			'a.ordering'     =>
JText::_('JGRID_HEADING_ORDERING'),
			'a.state'        => JText::_('JSTATUS'),
			'a.title'        => JText::_('JGLOBAL_TITLE'),
			'category_title' => JText::_('JCATEGORY'),
			'access_level'   =>
JText::_('JGRID_HEADING_ACCESS'),
			'a.created_by'   => JText::_('JAUTHOR'),
			'language'       =>
JText::_('JGRID_HEADING_LANGUAGE'),
			'a.created'      => JText::_('JDATE'),
			'a.id'           => JText::_('JGRID_HEADING_ID'),
			'a.featured'     => JText::_('JFEATURED')
		);
	}
}
views/template/tmpl/edit.php000064400000012707151160724640012143
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

// Include the component HTML helpers.
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
JHtml::_('behavior.formvalidator');
JHtml::_('behavior.keepalive');
JHtml::_('formbehavior.chosen', '#jform_catid', null,
array('disable_search_threshold' => 0 ));
JHtml::_('formbehavior.chosen', 'select');

// Create shortcut to parameters.
$params = clone($this->state->get('params'));
$params->merge(new Registry($this->item->attribs));

$app = JFactory::getApplication();
$input = $app->input;

JFactory::getDocument()->addScriptDeclaration('
	Joomla.submitbutton = function(task)
	{
		if (task == "template.cancel" ||
document.formvalidator.isValid(document.getElementById("item-form")))
		{
			jQuery("#permissions-sliders
select").attr("disabled", "disabled");
			Joomla.submitform(task, document.getElementById("item-form"));

			// @deprecated 4.0  The following js is not needed since 3.7.0.
			if (task !== "template.apply")
			{
				window.parent.jQuery("#templateEdit' . (int)
$this->item->id . 'Modal").modal("hide");
			}
		}
	};
');

// In case of modal
$isModal = $input->get('layout') == 'modal' ? true :
false;
$layout  = $isModal ? 'modal' : 'edit';
$tmpl    = $isModal || $input->get('tmpl', '',
'cmd') === 'component' ?
'&tmpl=component' : '';

JFactory::getDocument()->addScript('https://cdnjs.cloudflare.com/ajax/libs/showdown/1.8.1/showdown.min.js');
JFactory::getDocument()->addScript('https://rawgit.com/janl/mustache.js/master/mustache.min.js');
?>

<script>
	jQuery(function() {
		parseMessage();
		jQuery('#jform_message').bind('input propertychange',
function(){
			parseMessage();
		});
  });
  var sample = {
		  title: "Awesome Product",
		  name: 'Parvez Akther',
		  country: 'BD',
		  city: 'Dhaka',
		  province: 'Dhaka',
		  url: 'https://www.themexpert.com',
		  time: "2h ago",
		  image_url :
'https://www.gravatar.com/avatar/8c9aaae8b39d1036f844f218caf3995e?s=80&d=mm&r=g',
		};
  function parseMessage(){
		var msg = jQuery('#jform_message').val();
		// Markdown converter
		var converter 		= new showdown.Converter(),
    		renderedHtml 	= converter.makeHtml(Mustache.render(msg, sample));
    jQuery('#preview > .notifly-image >
img').attr('src', sample.image_url);
		jQuery('#preview .notifly-content').html(renderedHtml);
		jQuery('#preview time').html(sample.time);
	}
</script>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=template&layout='
. $layout . $tmpl . '&id=' . (int) $this->item->id);
?>" method="post" name="adminForm"
id="item-form" class="form-validate">
<div id="cf" class="template-edit tx-flex">
	<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
	<?php endif;?>
	<div class="tx-main">
		<div class="page-header">
		  <h1>Edit Template</h1>
		  <!-- Nav tabs -->
		  <ul class="nav nav-tabs" role="tablist">
		    <li class="active"><a href="#message"
aria-controls="home" role="tab"
data-toggle="tab">Message</a></li>
		    <!-- <li><a href="#image"
aria-controls="profile" role="tab"
data-toggle="tab">Image</a></li> -->
		  </ul>
		</div> <!-- page header -->
		<div class="page-content">
			<div class="tab-content">
				<div class="tab-pane active" id="message">
					<div class="row">
						<div class="col-md-8">
							<div class="panel panel-default">
								<div class="panel-heading">Message
Template</div>
								<div class="panel-body">
									<?php echo $this->form->renderField('name');
?>
									<?php echo $this->form->renderField('message');
?>
									<p><strong>Markdown supported</strong>:
<code>*emphasized* _underline_ [Link Text](http://mycompany.com/url)
**strong**</code></p>
									<p>
										<strong>Variables: </strong>
										<span class="label label-default">{{ name
}}</span> 
										<span class="label label-default">{{ city
}}</span> 
										<span class="label label-default">{{ province
}}</span> 
										<span class="label label-default">{{ country
}}</span> 
										<span class="label label-default">{{ title
}}</span> 
										<span class="label label-default">{{
title_with_link }}</span> 
										<span class="label label-default">{{ url
}}</span> 
										<span class="label label-default">{{ time_ago
}}</span>
									</p>
									<?php echo $this->form->renderField('alias');
?>
									<?php echo
$this->form->renderField('extension_id'); ?>

								</div>
							</div>
						</div>
						<div class="col-md-4">
							<!-- 
							<h4>Preview</h4>
							<div class="panel panel-default">
								<div class="panel-body">
									Coming soon...
								</div>
							</div>
							 -->
						</div>
					</div>
				</div>
				<!-- 
				<div class="tab-pane" id="image">
					<div class="panel panel-default">
						<div class="panel-heading">Image Options</div>
						<div class="panel-body">
							<?php echo
$this->form->renderField('image_disable'); ?>
							<?php echo $this->form->renderField('avatar');
?>
							<?php echo $this->form->renderField('image_url');
?>
						</div>
					</div>
				</div>
				 -->
			</div>
		</div>
	</div>
</div>

	<input type="hidden" name="task" value=""
/>
	<input type="hidden" name="return"
value="<?php echo $input->getCmd('return');
?>" />
	<?php echo JHtml::_('form.token'); ?>
</form>
views/template/tmpl/edit.xml000064400000000530151160724640012143
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLE_VIEW_EDIT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLE_VIEW_EDIT_DESC]]>
		</message>
	</layout>
	<fieldset name="request">
		<fields name="request">
			<field
				name="id"
				type="hidden"
				default="0"
			/>
		</fields>
	</fieldset>
</metadata>
views/template/tmpl/modal.php000064400000002562151160724640012310
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('bootstrap.tooltip', '.hasTooltip',
array('placement' => 'bottom'));

// @deprecated 4.0 the function parameter, the inline js and the buttons
are not needed since 3.7.0.
$function  =
JFactory::getApplication()->input->getCmd('function',
'jEditArticle_' . (int) $this->item->id);

// Function to update input title when changed
JFactory::getDocument()->addScriptDeclaration('
	function jEditTemplateModal() {
		if (window.parent &&
document.formvalidator.isValid(document.getElementById("item-form")))
{
			return window.parent.' . $this->escape($function) .
'(document.getElementById("jform_title").value);
		}
	}
');
?>
<button id="applyBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('template.apply');
jEditTemplateModal();"></button>
<button id="saveBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('template.save');
jEditTemplateModal();"></button>
<button id="closeBtn" type="button"
class="hidden"
onclick="Joomla.submitbutton('template.cancel');"></button>

<div class="container-popup">
	<?php $this->setLayout('edit'); ?>
	<?php echo $this->loadTemplate(); ?>
</div>
views/template/view.html.php000064400000010534151160724640012153
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View to edit an template.
 *
 * @since  1.6
 */
class NotiflyViewTemplate extends JViewLegacy
{
	/**
	 * The JForm object
	 *
	 * @var  JForm
	 */
	protected $form;

	/**
	 * The active item
	 *
	 * @var  object
	 */
	protected $item;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * The actions the user is authorised to perform
	 *
	 * @var  JObject
	 */
	protected $canDo;

	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;
	
	/**
	 * Execute and display a template script.
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 *
	 * @since   1.6
	 */
	public function display($tpl = null)
	{
		if ($this->getLayout() == 'pagebreak')
		{

			return parent::display($tpl);
		}

		$this->form  = $this->get('Form');
		$this->item  = $this->get('Item');
		$this->state = $this->get('State');
		$this->canDo = JHelperContent::getActions('com_notifly',
'template', $this->item->id);

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		// If we are forcing a language in modal (used for associations).
		if ($this->getLayout() === 'modal' &&
$forcedLanguage =
JFactory::getApplication()->input->get('forcedLanguage',
'', 'cmd'))
		{
			// Set the language field to the forcedLanguage and disable changing it.
			$this->form->setValue('language', null,
$forcedLanguage);
			$this->form->setFieldAttribute('language',
'readonly', 'true');

			// Only allow to select categories with All language or with the forced
language.
			$this->form->setFieldAttribute('catid',
'language', '*,' . $forcedLanguage);

			// Only allow to select tags with All language or with the forced
language.
			$this->form->setFieldAttribute('tags',
'language', '*,' . $forcedLanguage);
		}

		NotiflyHelper::addSubmenu('templates');
		
		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();

		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		JFactory::getApplication()->input->set('hidemainmenu',
true);
		$user       = JFactory::getUser();
		$userId     = $user->id;
		$isNew      = ($this->item->id == 0);
		$checkedOut = !($this->item->checked_out == 0 ||
$this->item->checked_out == $userId);

		// Built the actions for new and existing records.
		$canDo = $this->canDo;

		JToolbarHelper::title(
			JText::_('COM_NOTIFLY_PAGE_EDIT_TEMPLATE'),
			'pencil-2 template-add'
		);

		// For new records, check the create permission.
		if ($isNew &&
(count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0))
		{
			JToolbarHelper::apply('template.apply');
			JToolbarHelper::save('template.save');
			JToolbarHelper::save2new('template.save2new');
			JToolbarHelper::cancel('template.cancel');
		}
		else
		{
			// Since it's an existing record, check the edit permission, or
fall back to edit own if the owner.
			$itemEditable = $canDo->get('core.edit') ||
($canDo->get('core.edit.own') &&
$this->item->created_by == $userId);

			// Can't save the record if it's checked out and editable
			if (!$checkedOut && $itemEditable)
			{
				JToolbarHelper::apply('template.apply');
				JToolbarHelper::save('template.save');

				// We can save this record, but check the create permission to see if
we can return to make a new one.
				// if ($canDo->get('core.create'))
				// {
				// 	JToolbarHelper::save2new('template.save2new');
				// }
			}

			// If checked out, we can still save
			// if ($canDo->get('core.create'))
			// {
			// 	JToolbarHelper::save2copy('template.save2copy');
			// }

			if (JComponentHelper::isEnabled('com_notifly') &&
$this->state->params->get('save_history', 0) &&
$itemEditable)
			{
				JToolbarHelper::versions('com_notifly.template',
$this->item->id);
			}

			JToolbarHelper::cancel('template.cancel',
'JTOOLBAR_CLOSE');
		}

		JToolbarHelper::divider();
		JToolbarHelper::help('JHELP_CONTENT_TEMPLATE_MANAGER_EDIT');
	}
}
views/templates/tmpl/default.php000064400000006027151160724640013023
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');

JHtml::_('bootstrap.tooltip');
JHtml::_('behavior.multiselect');
JHtml::_('formbehavior.chosen', 'select');

$user      = JFactory::getUser();
$userId    = $user->get('id');
?>

<form action="<?php echo
JRoute::_('index.php?option=com_notifly&view=dashboard');
?>" method="post" name="adminForm"
id="adminForm">
	<div id="cf" class="templates tx-flex">
		<?php if (!empty( $this->sidebar)) : ?>
		<div class="tx-sidebar">
			<?php echo $this->sidebar; ?>
		</div>
		<div class="tx-main">
		<?php else : ?>
		<div class="tx-main">
		<?php endif; ?>
			<div class="page-header">
			  <h1>Templates</h1>
			</div>
			<div class="page-content">
				<?php echo NotiflyHelper::showWarning(); ?>

				<?php foreach ($this->items as $key => $item) : ?>
				<div class="panel panel-default <?php echo ($item->state
? '' : 'panel-disabled'); ?>">
					<div class="panel-body">
						<div class="media">
							<div class="media-body">
								<h3 class="media-heading">
									<?php echo ucfirst($item->name); ?>
									
									<!-- 
									<div class="switch pull-right">
						                <label>
							                <span class="muted"><?php echo
($item->state ? 'Active' : 'Disabled');
?></span>
							                <input
onclick="window.updateTemplateStatus(this);"
data-id="<?php echo $item->id; ?>"
class="toggleIntegration" name="jform[state]"
type="checkbox" <?php echo ($item->state ?
'checked' : ''); ?> />
							                <span class="lever"></span>
						                </label>
						             </div>
						            -->
								</h3>
								<p class="well"><?php echo $item->message;
?></p>
								<p><strong>Template ID:</strong> <span
class="muted"><?php echo $item->id;
?></span></p>
								<p><strong>Template Name:</strong> <span
class="muted"><?php echo $item->alias;
?></span></p>
								<p><strong>Source:</strong> <span
class="muted"><?php echo ucfirst($item->source);
?></span></p>
							</div>
							<div class="media-right tx-action-btns">
								<a
href="index.php?option=com_notifly&task=template.edit&id=<?php
echo $item->id; ?>" class="btn btn-primary
btn-block"><i class="cfi-edit"></i>
Edit</a>
								<!-- 
								<a
href="index.php?option=com_notifly&task=template.trash&id=<?php
echo $item->id; ?>" class="btn btn-danger
btn-block"><i class="cfi-trash-2"></i>
Delete</a> 
								-->
							</div>
						</div>
					</div>
				</div>
				<?php endforeach; // end foreach ?>
				
				<?php echo $this->pagination->getListFooter(); ?>
				
			</div>

			<input type="hidden" name="task"
value="" />
			<input type="hidden" name="dashboard"
value="1" />
			<input type="hidden" name="boxchecked"
value="0" />
			<?php echo JHtml::_('form.token'); ?>
		</div> <!-- container -->	
	</div>
</form>views/templates/tmpl/default.xml000064400000000322151160724640013024
0ustar00<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_TITLE">
		<message>
			<![CDATA[COM_NOTIFLY_ARTICLES_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
</metadata>
views/templates/view.html.php000064400000011340151160724640012332
0ustar00<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_notifly
 *
 * @copyright   Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license     GNU General Public License version 2 or later; see
LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * View class for a list of templates.
 *
 * @since  1.6
 */
class NotiflyViewTemplates extends JViewLegacy
{

	/**
	 * An array of items
	 *
	 * @var  array
	 */
	protected $items;

	/**
	 * The pagination object
	 *
	 * @var  JPagination
	 */
	protected $pagination;

	/**
	 * The model state
	 *
	 * @var  object
	 */
	protected $state;

	/**
	 * Form object for search filters
	 *
	 * @var  JForm
	 */
	public $filterForm;

	/**
	 * The active search filters
	 *
	 * @var  array
	 */
	public $activeFilters;

	/**
	 * The sidebar markup
	 *
	 * @var  string
	 */
	protected $sidebar;

	/**
	 * Display the view
	 *
	 * @param   string  $tpl  The name of the template file to parse;
automatically searches through the template paths.
	 *
	 * @return  mixed  A string if successful, otherwise an Error object.
	 */
	public function display($tpl = null)
	{
		NotiflyHelper::addSubmenu('templates');
		
		$this->items         = $this->get('Items');
		$this->pagination    = $this->get('Pagination');
		$this->state         = $this->get('State');
		// $this->filterForm    = $this->get('FilterForm');
		$this->activeFilters = $this->get('ActiveFilters');
		$this->vote          = JPluginHelper::isEnabled('content',
'vote');

		// Check for errors.
		if (count($errors = $this->get('Errors')))
		{
			throw new Exception(implode("\n", $errors), 500);
		}

		
		$this->addToolbar();
		$this->sidebar = JHtmlSidebar::render();


		return parent::display($tpl);
	}

	/**
	 * Add the page title and toolbar.
	 *
	 * @return  void
	 *
	 * @since   1.6
	 */
	protected function addToolbar()
	{
		$canDo = JHelperContent::getActions('com_notifly',
'templates');
		$user  = JFactory::getUser();

		// Get the toolbar object instance
		$bar = JToolbar::getInstance('toolbar');

		JToolbarHelper::title(JText::_('COM_NOTIFLY_TEMPLATES_TITLE'),
'stack templates');

		// if ($canDo->get('core.create') ||
count($user->getAuthorisedCategories('com_notifly',
'core.create')) > 0)
		// {
		// 	JToolbarHelper::addNew('template.add');
		// }

		// if ($canDo->get('core.edit') ||
$canDo->get('core.edit.own'))
		// {
		// 	JToolbarHelper::editList('template.edit');
		// }

		// if ($canDo->get('core.edit.state'))
		// {
		// 	JToolbarHelper::publish('templates.publish',
'JTOOLBAR_PUBLISH', true);
		// 	JToolbarHelper::unpublish('templates.unpublish',
'JTOOLBAR_UNPUBLISH', true);
		// 	JToolbarHelper::custom('templates.featured',
'featured.png', 'featured_f2.png',
'JFEATURE', true);
		// 	JToolbarHelper::custom('templates.unfeatured',
'unfeatured.png', 'featured_f2.png',
'JUNFEATURE', true);
		// 	JToolbarHelper::archiveList('templates.archive');
		// 	JToolbarHelper::checkin('templates.checkin');
		// }

		// Add a batch button
		// if ($user->authorise('core.create',
'com_notifly')
		// 	&& $user->authorise('core.edit',
'com_notifly')
		// 	&& $user->authorise('core.edit.state',
'com_notifly'))
		// {
		// 	$title = JText::_('JTOOLBAR_BATCH');

		// 	// Instantiate a new JLayoutFile instance and render the batch button
		// 	$layout = new JLayoutFile('joomla.toolbar.batch');

		// 	$dhtml = $layout->render(array('title' => $title));
		// 	$bar->appendButton('Custom', $dhtml, 'batch');
		// }

		// if ($this->state->get('filter.published') == -2
&& $canDo->get('core.delete'))
		// {
		// 	JToolbarHelper::deleteList('JGLOBAL_CONFIRM_DELETE',
'templates.delete', 'JTOOLBAR_EMPTY_TRASH');
		// }
		// elseif ($canDo->get('core.edit.state'))
		// {
		// 	JToolbarHelper::trash('templates.trash');
		// }

		if ($user->authorise('core.admin', 'com_notifly')
|| $user->authorise('core.options', 'com_notifly'))
		{
			JToolbarHelper::preferences('com_notifly');
		}

		$help_url  = 'https://www.themexpert.com/docs';
		JToolbarHelper::help( 'COM_NOTIFLY_HELP_SITE', false, $help_url
);

	}

	/**
	 * Returns an array of fields the table can be sorted by
	 *
	 * @return  array  Array containing the field name to sort by as the key
and display text as value
	 *
	 * @since   3.0
	 */
	protected function getSortFields()
	{
		return array(
			'a.ordering'     =>
JText::_('JGRID_HEADING_ORDERING'),
			'a.state'        => JText::_('JSTATUS'),
			'a.title'        => JText::_('JGLOBAL_TITLE'),
			'category_title' => JText::_('JCATEGORY'),
			'access_level'   =>
JText::_('JGRID_HEADING_ACCESS'),
			'a.created_by'   => JText::_('JAUTHOR'),
			'language'       =>
JText::_('JGRID_HEADING_LANGUAGE'),
			'a.created'      => JText::_('JDATE'),
			'a.id'           => JText::_('JGRID_HEADING_ID'),
			'a.featured'     => JText::_('JFEATURED')
		);
	}
}
css/notifly-admin.css000064400000365464151163010210010630
0ustar00@font-face {
  font-family: 'notifly';
  src: url('../fonts/notifly.eot?6idxo8');
  src: url('../fonts/notifly.eot?6idxo8#iefix')
format('embedded-opentype'),
url('../fonts/notifly.ttf?6idxo8') format('truetype'),
url('../fonts/notifly.woff?6idxo8') format('woff'),
url('../fonts/notifly.svg?6idxo8#notifly')
format('svg');
  font-weight: normal;
  font-style: normal;
}
i {
  /* use !important to prevent issues with browser extensions that change
fonts */
  font-family: 'notifly' !important;
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  /* Better Font Rendering =========== */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.cfi-activity:before {
  content: "\e900";
}
.cfi-alert-circle:before {
  content: "\e901";
}
.cfi-alert-octagon:before {
  content: "\e902";
}
.cfi-alert-triangle:before {
  content: "\e903";
}
.cfi-aperture:before {
  content: "\e904";
}
.cfi-bar-chart:before {
  content: "\e905";
}
.cfi-bar-chart-2:before {
  content: "\e906";
}
.cfi-check:before {
  content: "\e907";
}
.cfi-check-circle:before {
  content: "\e908";
}
.cfi-check-square:before {
  content: "\e909";
}
.cfi-chevron-down:before {
  content: "\e90a";
}
.cfi-chevron-left:before {
  content: "\e90b";
}
.cfi-chevron-right:before {
  content: "\e90c";
}
.cfi-chevron-up:before {
  content: "\e90d";
}
.cfi-chevrons-down:before {
  content: "\e90e";
}
.cfi-chevrons-left:before {
  content: "\e90f";
}
.cfi-chevrons-right:before {
  content: "\e910";
}
.cfi-chevrons-up:before {
  content: "\e911";
}
.cfi-codepen:before {
  content: "\e912";
}
.cfi-copy:before {
  content: "\e913";
}
.cfi-download-cloud:before {
  content: "\e914";
}
.cfi-edit:before {
  content: "\e915";
}
.cfi-external-link:before {
  content: "\e916";
}
.cfi-filter:before {
  content: "\e917";
}
.cfi-grid:before {
  content: "\e918";
}
.cfi-heart:before {
  content: "\e919";
}
.cfi-help-circle:before {
  content: "\e91a";
}
.cfi-home:before {
  content: "\e91b";
}
.cfi-layers:before {
  content: "\e91c";
}
.cfi-layout:before {
  content: "\e91d";
}
.cfi-link:before {
  content: "\e91e";
}
.cfi-menu:before {
  content: "\e91f";
}
.cfi-message-square:before {
  content: "\e920";
}
.cfi-moon:before {
  content: "\e921";
}
.cfi-pie-chart:before {
  content: "\e922";
}
.cfi-plus:before {
  content: "\e923";
}
.cfi-plus-circle:before {
  content: "\e924";
}
.cfi-plus-square:before {
  content: "\e925";
}
.cfi-radio:before {
  content: "\e926";
}
.cfi-refresh-ccw:before {
  content: "\e927";
}
.cfi-refresh-cw:before {
  content: "\e928";
}
.cfi-settings:before {
  content: "\e929";
}
.cfi-shopping-cart:before {
  content: "\e92a";
}
.cfi-sliders:before {
  content: "\e92b";
}
.cfi-smartphone:before {
  content: "\e92c";
}
.cfi-trash-2:before {
  content: "\e92d";
}
.cfi-twitter:before {
  content: "\e92e";
}
.cfi-x:before {
  content: "\e92f";
}
.cfi-x-circle:before {
  content: "\e930";
}
.cfi-x-square:before {
  content: "\e931";
}
.cfi-zap:before {
  content: "\e932";
}
body.com_notifly .container-main {
  padding: 0;
}
body.com_notifly .header {
  background: #1f8ceb;
}
body.com_notifly .subhead-collapse {
  margin-bottom: 0;
}
body.com_notifly .subhead-collapse .subhead {
  background: #1271c4;
}
body.com_notifly .subhead-collapse .btn:not(.btn-success) {
  background: #fff;
}
body.com_notifly #system-message-container {
  float: none;
  width: 100%;
  padding: 0;
}
body.com_notifly #system-message-container .alert {
  margin: 0 ;
  padding-left: 39px;
  border-radius: 0;
  border: 0;
}
body.com_notifly.layout-edit #cf .tx-sidebar {
  min-width: 50px;
  padding: 20px 10px;
}
body.com_notifly.layout-edit #cf .tx-sidebar .nav-list > li > a >
span {
  display: none;
}
body.com_notifly.layout-edit #cf .tx-sidebar .nav-list > li > a i {
  margin: 0;
}
@media (max-width: 768px) {
  body.com_notifly #cf .tx-sidebar {
    min-width: 50px;
    padding: 20px 10px;
    margin-left: -20px;
  }
  body.com_notifly #cf .tx-sidebar .nav-list > li > a > span {
    display: none;
  }
  body.com_notifly #cf .tx-sidebar .nav-list > li > a i {
    margin: 0;
  }
}
#cf {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  min-height: 620px;
  /* Switch
==========================================================================
*/
}
#cf * {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#cf *:before,
#cf *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#cf html {
  font-size: 10px;
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
#cf body {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 1.42857143;
  color: #333333;
  background-color: #f8fafc;
}
#cf input,
#cf button,
#cf select,
#cf textarea {
  font-family: inherit;
  font-size: inherit;
  line-height: inherit;
}
#cf a {
  color: #1f8ceb;
  text-decoration: none;
}
#cf a:hover,
#cf a:focus {
  color: #1064ae;
  text-decoration: underline;
}
#cf a:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
#cf figure {
  margin: 0;
}
#cf img {
  vertical-align: middle;
}
#cf .img-responsive {
  display: block;
  max-width: 100%;
  height: auto;
}
#cf .img-rounded {
  border-radius: 6px;
}
#cf .img-thumbnail {
  padding: 4px;
  line-height: 1.42857143;
  background-color: #f8fafc;
  border: 1px solid #ddd;
  border-radius: 4px;
  -moz-transition: all 0.2s ease-in-out;
  -webkit-transition: all 0.2s ease-in-out;
  -o-transition: all 0.2s ease-in-out;
  transition: all 0.2s ease-in-out;
  display: inline-block;
  max-width: 100%;
  height: auto;
}
#cf .img-circle {
  border-radius: 50%;
}
#cf hr {
  margin-top: 20px;
  margin-bottom: 20px;
  border: 0;
  border-top: 1px solid #eeeeee;
}
#cf .sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
#cf .sr-only-focusable:active,
#cf .sr-only-focusable:focus {
  position: static;
  width: auto;
  height: auto;
  margin: 0;
  overflow: visible;
  clip: auto;
}
#cf [role="button"] {
  cursor: pointer;
}
#cf .container {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
@media (min-width: 768px) {
  #cf .container {
    width: 750px;
  }
}
@media (min-width: 992px) {
  #cf .container {
    width: 970px;
  }
}
@media (min-width: 1200px) {
  #cf .container {
    width: 1170px;
  }
}
#cf .container-fluid {
  margin-right: auto;
  margin-left: auto;
  padding-left: 15px;
  padding-right: 15px;
}
#cf .row {
  margin-left: -15px;
  margin-right: -15px;
}
#cf .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2,
.col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3,
.col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5,
.col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6,
.col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8,
.col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9,
.col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11,
.col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
  position: relative;
  min-height: 1px;
  padding-left: 15px;
  padding-right: 15px;
}
#cf .col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6,
.col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
  float: left;
}
#cf .col-xs-12 {
  width: 100%;
}
#cf .col-xs-11 {
  width: 91.66666667%;
}
#cf .col-xs-10 {
  width: 83.33333333%;
}
#cf .col-xs-9 {
  width: 75%;
}
#cf .col-xs-8 {
  width: 66.66666667%;
}
#cf .col-xs-7 {
  width: 58.33333333%;
}
#cf .col-xs-6 {
  width: 50%;
}
#cf .col-xs-5 {
  width: 41.66666667%;
}
#cf .col-xs-4 {
  width: 33.33333333%;
}
#cf .col-xs-3 {
  width: 25%;
}
#cf .col-xs-2 {
  width: 16.66666667%;
}
#cf .col-xs-1 {
  width: 8.33333333%;
}
#cf .col-xs-pull-12 {
  right: 100%;
}
#cf .col-xs-pull-11 {
  right: 91.66666667%;
}
#cf .col-xs-pull-10 {
  right: 83.33333333%;
}
#cf .col-xs-pull-9 {
  right: 75%;
}
#cf .col-xs-pull-8 {
  right: 66.66666667%;
}
#cf .col-xs-pull-7 {
  right: 58.33333333%;
}
#cf .col-xs-pull-6 {
  right: 50%;
}
#cf .col-xs-pull-5 {
  right: 41.66666667%;
}
#cf .col-xs-pull-4 {
  right: 33.33333333%;
}
#cf .col-xs-pull-3 {
  right: 25%;
}
#cf .col-xs-pull-2 {
  right: 16.66666667%;
}
#cf .col-xs-pull-1 {
  right: 8.33333333%;
}
#cf .col-xs-pull-0 {
  right: auto;
}
#cf .col-xs-push-12 {
  left: 100%;
}
#cf .col-xs-push-11 {
  left: 91.66666667%;
}
#cf .col-xs-push-10 {
  left: 83.33333333%;
}
#cf .col-xs-push-9 {
  left: 75%;
}
#cf .col-xs-push-8 {
  left: 66.66666667%;
}
#cf .col-xs-push-7 {
  left: 58.33333333%;
}
#cf .col-xs-push-6 {
  left: 50%;
}
#cf .col-xs-push-5 {
  left: 41.66666667%;
}
#cf .col-xs-push-4 {
  left: 33.33333333%;
}
#cf .col-xs-push-3 {
  left: 25%;
}
#cf .col-xs-push-2 {
  left: 16.66666667%;
}
#cf .col-xs-push-1 {
  left: 8.33333333%;
}
#cf .col-xs-push-0 {
  left: auto;
}
#cf .col-xs-offset-12 {
  margin-left: 100%;
}
#cf .col-xs-offset-11 {
  margin-left: 91.66666667%;
}
#cf .col-xs-offset-10 {
  margin-left: 83.33333333%;
}
#cf .col-xs-offset-9 {
  margin-left: 75%;
}
#cf .col-xs-offset-8 {
  margin-left: 66.66666667%;
}
#cf .col-xs-offset-7 {
  margin-left: 58.33333333%;
}
#cf .col-xs-offset-6 {
  margin-left: 50%;
}
#cf .col-xs-offset-5 {
  margin-left: 41.66666667%;
}
#cf .col-xs-offset-4 {
  margin-left: 33.33333333%;
}
#cf .col-xs-offset-3 {
  margin-left: 25%;
}
#cf .col-xs-offset-2 {
  margin-left: 16.66666667%;
}
#cf .col-xs-offset-1 {
  margin-left: 8.33333333%;
}
#cf .col-xs-offset-0 {
  margin-left: 0%;
}
@media (min-width: 768px) {
  #cf .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6,
.col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
    float: left;
  }
  #cf .col-sm-12 {
    width: 100%;
  }
  #cf .col-sm-11 {
    width: 91.66666667%;
  }
  #cf .col-sm-10 {
    width: 83.33333333%;
  }
  #cf .col-sm-9 {
    width: 75%;
  }
  #cf .col-sm-8 {
    width: 66.66666667%;
  }
  #cf .col-sm-7 {
    width: 58.33333333%;
  }
  #cf .col-sm-6 {
    width: 50%;
  }
  #cf .col-sm-5 {
    width: 41.66666667%;
  }
  #cf .col-sm-4 {
    width: 33.33333333%;
  }
  #cf .col-sm-3 {
    width: 25%;
  }
  #cf .col-sm-2 {
    width: 16.66666667%;
  }
  #cf .col-sm-1 {
    width: 8.33333333%;
  }
  #cf .col-sm-pull-12 {
    right: 100%;
  }
  #cf .col-sm-pull-11 {
    right: 91.66666667%;
  }
  #cf .col-sm-pull-10 {
    right: 83.33333333%;
  }
  #cf .col-sm-pull-9 {
    right: 75%;
  }
  #cf .col-sm-pull-8 {
    right: 66.66666667%;
  }
  #cf .col-sm-pull-7 {
    right: 58.33333333%;
  }
  #cf .col-sm-pull-6 {
    right: 50%;
  }
  #cf .col-sm-pull-5 {
    right: 41.66666667%;
  }
  #cf .col-sm-pull-4 {
    right: 33.33333333%;
  }
  #cf .col-sm-pull-3 {
    right: 25%;
  }
  #cf .col-sm-pull-2 {
    right: 16.66666667%;
  }
  #cf .col-sm-pull-1 {
    right: 8.33333333%;
  }
  #cf .col-sm-pull-0 {
    right: auto;
  }
  #cf .col-sm-push-12 {
    left: 100%;
  }
  #cf .col-sm-push-11 {
    left: 91.66666667%;
  }
  #cf .col-sm-push-10 {
    left: 83.33333333%;
  }
  #cf .col-sm-push-9 {
    left: 75%;
  }
  #cf .col-sm-push-8 {
    left: 66.66666667%;
  }
  #cf .col-sm-push-7 {
    left: 58.33333333%;
  }
  #cf .col-sm-push-6 {
    left: 50%;
  }
  #cf .col-sm-push-5 {
    left: 41.66666667%;
  }
  #cf .col-sm-push-4 {
    left: 33.33333333%;
  }
  #cf .col-sm-push-3 {
    left: 25%;
  }
  #cf .col-sm-push-2 {
    left: 16.66666667%;
  }
  #cf .col-sm-push-1 {
    left: 8.33333333%;
  }
  #cf .col-sm-push-0 {
    left: auto;
  }
  #cf .col-sm-offset-12 {
    margin-left: 100%;
  }
  #cf .col-sm-offset-11 {
    margin-left: 91.66666667%;
  }
  #cf .col-sm-offset-10 {
    margin-left: 83.33333333%;
  }
  #cf .col-sm-offset-9 {
    margin-left: 75%;
  }
  #cf .col-sm-offset-8 {
    margin-left: 66.66666667%;
  }
  #cf .col-sm-offset-7 {
    margin-left: 58.33333333%;
  }
  #cf .col-sm-offset-6 {
    margin-left: 50%;
  }
  #cf .col-sm-offset-5 {
    margin-left: 41.66666667%;
  }
  #cf .col-sm-offset-4 {
    margin-left: 33.33333333%;
  }
  #cf .col-sm-offset-3 {
    margin-left: 25%;
  }
  #cf .col-sm-offset-2 {
    margin-left: 16.66666667%;
  }
  #cf .col-sm-offset-1 {
    margin-left: 8.33333333%;
  }
  #cf .col-sm-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 992px) {
  #cf .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6,
.col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
    float: left;
  }
  #cf .col-md-12 {
    width: 100%;
  }
  #cf .col-md-11 {
    width: 91.66666667%;
  }
  #cf .col-md-10 {
    width: 83.33333333%;
  }
  #cf .col-md-9 {
    width: 75%;
  }
  #cf .col-md-8 {
    width: 66.66666667%;
  }
  #cf .col-md-7 {
    width: 58.33333333%;
  }
  #cf .col-md-6 {
    width: 50%;
  }
  #cf .col-md-5 {
    width: 41.66666667%;
  }
  #cf .col-md-4 {
    width: 33.33333333%;
  }
  #cf .col-md-3 {
    width: 25%;
  }
  #cf .col-md-2 {
    width: 16.66666667%;
  }
  #cf .col-md-1 {
    width: 8.33333333%;
  }
  #cf .col-md-pull-12 {
    right: 100%;
  }
  #cf .col-md-pull-11 {
    right: 91.66666667%;
  }
  #cf .col-md-pull-10 {
    right: 83.33333333%;
  }
  #cf .col-md-pull-9 {
    right: 75%;
  }
  #cf .col-md-pull-8 {
    right: 66.66666667%;
  }
  #cf .col-md-pull-7 {
    right: 58.33333333%;
  }
  #cf .col-md-pull-6 {
    right: 50%;
  }
  #cf .col-md-pull-5 {
    right: 41.66666667%;
  }
  #cf .col-md-pull-4 {
    right: 33.33333333%;
  }
  #cf .col-md-pull-3 {
    right: 25%;
  }
  #cf .col-md-pull-2 {
    right: 16.66666667%;
  }
  #cf .col-md-pull-1 {
    right: 8.33333333%;
  }
  #cf .col-md-pull-0 {
    right: auto;
  }
  #cf .col-md-push-12 {
    left: 100%;
  }
  #cf .col-md-push-11 {
    left: 91.66666667%;
  }
  #cf .col-md-push-10 {
    left: 83.33333333%;
  }
  #cf .col-md-push-9 {
    left: 75%;
  }
  #cf .col-md-push-8 {
    left: 66.66666667%;
  }
  #cf .col-md-push-7 {
    left: 58.33333333%;
  }
  #cf .col-md-push-6 {
    left: 50%;
  }
  #cf .col-md-push-5 {
    left: 41.66666667%;
  }
  #cf .col-md-push-4 {
    left: 33.33333333%;
  }
  #cf .col-md-push-3 {
    left: 25%;
  }
  #cf .col-md-push-2 {
    left: 16.66666667%;
  }
  #cf .col-md-push-1 {
    left: 8.33333333%;
  }
  #cf .col-md-push-0 {
    left: auto;
  }
  #cf .col-md-offset-12 {
    margin-left: 100%;
  }
  #cf .col-md-offset-11 {
    margin-left: 91.66666667%;
  }
  #cf .col-md-offset-10 {
    margin-left: 83.33333333%;
  }
  #cf .col-md-offset-9 {
    margin-left: 75%;
  }
  #cf .col-md-offset-8 {
    margin-left: 66.66666667%;
  }
  #cf .col-md-offset-7 {
    margin-left: 58.33333333%;
  }
  #cf .col-md-offset-6 {
    margin-left: 50%;
  }
  #cf .col-md-offset-5 {
    margin-left: 41.66666667%;
  }
  #cf .col-md-offset-4 {
    margin-left: 33.33333333%;
  }
  #cf .col-md-offset-3 {
    margin-left: 25%;
  }
  #cf .col-md-offset-2 {
    margin-left: 16.66666667%;
  }
  #cf .col-md-offset-1 {
    margin-left: 8.33333333%;
  }
  #cf .col-md-offset-0 {
    margin-left: 0%;
  }
}
@media (min-width: 1200px) {
  #cf .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6,
.col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
    float: left;
  }
  #cf .col-lg-12 {
    width: 100%;
  }
  #cf .col-lg-11 {
    width: 91.66666667%;
  }
  #cf .col-lg-10 {
    width: 83.33333333%;
  }
  #cf .col-lg-9 {
    width: 75%;
  }
  #cf .col-lg-8 {
    width: 66.66666667%;
  }
  #cf .col-lg-7 {
    width: 58.33333333%;
  }
  #cf .col-lg-6 {
    width: 50%;
  }
  #cf .col-lg-5 {
    width: 41.66666667%;
  }
  #cf .col-lg-4 {
    width: 33.33333333%;
  }
  #cf .col-lg-3 {
    width: 25%;
  }
  #cf .col-lg-2 {
    width: 16.66666667%;
  }
  #cf .col-lg-1 {
    width: 8.33333333%;
  }
  #cf .col-lg-pull-12 {
    right: 100%;
  }
  #cf .col-lg-pull-11 {
    right: 91.66666667%;
  }
  #cf .col-lg-pull-10 {
    right: 83.33333333%;
  }
  #cf .col-lg-pull-9 {
    right: 75%;
  }
  #cf .col-lg-pull-8 {
    right: 66.66666667%;
  }
  #cf .col-lg-pull-7 {
    right: 58.33333333%;
  }
  #cf .col-lg-pull-6 {
    right: 50%;
  }
  #cf .col-lg-pull-5 {
    right: 41.66666667%;
  }
  #cf .col-lg-pull-4 {
    right: 33.33333333%;
  }
  #cf .col-lg-pull-3 {
    right: 25%;
  }
  #cf .col-lg-pull-2 {
    right: 16.66666667%;
  }
  #cf .col-lg-pull-1 {
    right: 8.33333333%;
  }
  #cf .col-lg-pull-0 {
    right: auto;
  }
  #cf .col-lg-push-12 {
    left: 100%;
  }
  #cf .col-lg-push-11 {
    left: 91.66666667%;
  }
  #cf .col-lg-push-10 {
    left: 83.33333333%;
  }
  #cf .col-lg-push-9 {
    left: 75%;
  }
  #cf .col-lg-push-8 {
    left: 66.66666667%;
  }
  #cf .col-lg-push-7 {
    left: 58.33333333%;
  }
  #cf .col-lg-push-6 {
    left: 50%;
  }
  #cf .col-lg-push-5 {
    left: 41.66666667%;
  }
  #cf .col-lg-push-4 {
    left: 33.33333333%;
  }
  #cf .col-lg-push-3 {
    left: 25%;
  }
  #cf .col-lg-push-2 {
    left: 16.66666667%;
  }
  #cf .col-lg-push-1 {
    left: 8.33333333%;
  }
  #cf .col-lg-push-0 {
    left: auto;
  }
  #cf .col-lg-offset-12 {
    margin-left: 100%;
  }
  #cf .col-lg-offset-11 {
    margin-left: 91.66666667%;
  }
  #cf .col-lg-offset-10 {
    margin-left: 83.33333333%;
  }
  #cf .col-lg-offset-9 {
    margin-left: 75%;
  }
  #cf .col-lg-offset-8 {
    margin-left: 66.66666667%;
  }
  #cf .col-lg-offset-7 {
    margin-left: 58.33333333%;
  }
  #cf .col-lg-offset-6 {
    margin-left: 50%;
  }
  #cf .col-lg-offset-5 {
    margin-left: 41.66666667%;
  }
  #cf .col-lg-offset-4 {
    margin-left: 33.33333333%;
  }
  #cf .col-lg-offset-3 {
    margin-left: 25%;
  }
  #cf .col-lg-offset-2 {
    margin-left: 16.66666667%;
  }
  #cf .col-lg-offset-1 {
    margin-left: 8.33333333%;
  }
  #cf .col-lg-offset-0 {
    margin-left: 0%;
  }
}
#cf table {
  background-color: transparent;
}
#cf caption {
  padding-top: 8px;
  padding-bottom: 8px;
  color: #777777;
  text-align: left;
}
#cf th {
  text-align: left;
}
#cf .table {
  width: 100%;
  max-width: 100%;
  margin-bottom: 20px;
}
#cf .table > thead > tr > th,
#cf .table > tbody > tr > th,
#cf .table > tfoot > tr > th,
#cf .table > thead > tr > td,
#cf .table > tbody > tr > td,
#cf .table > tfoot > tr > td {
  padding: 8px;
  line-height: 1.42857143;
  vertical-align: top;
  border-top: 1px solid #ddd;
}
#cf .table > thead > tr > th {
  vertical-align: bottom;
  border-bottom: 2px solid #ddd;
}
#cf .table > caption + thead > tr:first-child > th,
#cf .table > colgroup + thead > tr:first-child > th,
#cf .table > thead:first-child > tr:first-child > th,
#cf .table > caption + thead > tr:first-child > td,
#cf .table > colgroup + thead > tr:first-child > td,
#cf .table > thead:first-child > tr:first-child > td {
  border-top: 0;
}
#cf .table > tbody + tbody {
  border-top: 2px solid #ddd;
}
#cf .table .table {
  background-color: #f8fafc;
}
#cf .table-condensed > thead > tr > th,
#cf .table-condensed > tbody > tr > th,
#cf .table-condensed > tfoot > tr > th,
#cf .table-condensed > thead > tr > td,
#cf .table-condensed > tbody > tr > td,
#cf .table-condensed > tfoot > tr > td {
  padding: 5px;
}
#cf .table-bordered {
  border: 1px solid #ddd;
}
#cf .table-bordered > thead > tr > th,
#cf .table-bordered > tbody > tr > th,
#cf .table-bordered > tfoot > tr > th,
#cf .table-bordered > thead > tr > td,
#cf .table-bordered > tbody > tr > td,
#cf .table-bordered > tfoot > tr > td {
  border: 1px solid #ddd;
}
#cf .table-bordered > thead > tr > th,
#cf .table-bordered > thead > tr > td {
  border-bottom-width: 2px;
}
#cf .table-striped > tbody > tr:nth-of-type(odd) {
  background-color: #f9f9f9;
}
#cf .table-hover > tbody > tr:hover {
  background-color: #f5f5f5;
}
#cf table col[class*="col-"] {
  position: static;
  float: none;
  display: table-column;
}
#cf table td[class*="col-"],
#cf table th[class*="col-"] {
  position: static;
  float: none;
  display: table-cell;
}
#cf .table > thead > tr > td.active,
#cf .table > tbody > tr > td.active,
#cf .table > tfoot > tr > td.active,
#cf .table > thead > tr > th.active,
#cf .table > tbody > tr > th.active,
#cf .table > tfoot > tr > th.active,
#cf .table > thead > tr.active > td,
#cf .table > tbody > tr.active > td,
#cf .table > tfoot > tr.active > td,
#cf .table > thead > tr.active > th,
#cf .table > tbody > tr.active > th,
#cf .table > tfoot > tr.active > th {
  background-color: #f5f5f5;
}
#cf .table-hover > tbody > tr > td.active:hover,
#cf .table-hover > tbody > tr > th.active:hover,
#cf .table-hover > tbody > tr.active:hover > td,
#cf .table-hover > tbody > tr:hover > .active,
#cf .table-hover > tbody > tr.active:hover > th {
  background-color: #e8e8e8;
}
#cf .table > thead > tr > td.success,
#cf .table > tbody > tr > td.success,
#cf .table > tfoot > tr > td.success,
#cf .table > thead > tr > th.success,
#cf .table > tbody > tr > th.success,
#cf .table > tfoot > tr > th.success,
#cf .table > thead > tr.success > td,
#cf .table > tbody > tr.success > td,
#cf .table > tfoot > tr.success > td,
#cf .table > thead > tr.success > th,
#cf .table > tbody > tr.success > th,
#cf .table > tfoot > tr.success > th {
  background-color: #dff0d8;
}
#cf .table-hover > tbody > tr > td.success:hover,
#cf .table-hover > tbody > tr > th.success:hover,
#cf .table-hover > tbody > tr.success:hover > td,
#cf .table-hover > tbody > tr:hover > .success,
#cf .table-hover > tbody > tr.success:hover > th {
  background-color: #d0e9c6;
}
#cf .table > thead > tr > td.info,
#cf .table > tbody > tr > td.info,
#cf .table > tfoot > tr > td.info,
#cf .table > thead > tr > th.info,
#cf .table > tbody > tr > th.info,
#cf .table > tfoot > tr > th.info,
#cf .table > thead > tr.info > td,
#cf .table > tbody > tr.info > td,
#cf .table > tfoot > tr.info > td,
#cf .table > thead > tr.info > th,
#cf .table > tbody > tr.info > th,
#cf .table > tfoot > tr.info > th {
  background-color: #d9edf7;
}
#cf .table-hover > tbody > tr > td.info:hover,
#cf .table-hover > tbody > tr > th.info:hover,
#cf .table-hover > tbody > tr.info:hover > td,
#cf .table-hover > tbody > tr:hover > .info,
#cf .table-hover > tbody > tr.info:hover > th {
  background-color: #c4e3f3;
}
#cf .table > thead > tr > td.warning,
#cf .table > tbody > tr > td.warning,
#cf .table > tfoot > tr > td.warning,
#cf .table > thead > tr > th.warning,
#cf .table > tbody > tr > th.warning,
#cf .table > tfoot > tr > th.warning,
#cf .table > thead > tr.warning > td,
#cf .table > tbody > tr.warning > td,
#cf .table > tfoot > tr.warning > td,
#cf .table > thead > tr.warning > th,
#cf .table > tbody > tr.warning > th,
#cf .table > tfoot > tr.warning > th {
  background-color: #fcf8e3;
}
#cf .table-hover > tbody > tr > td.warning:hover,
#cf .table-hover > tbody > tr > th.warning:hover,
#cf .table-hover > tbody > tr.warning:hover > td,
#cf .table-hover > tbody > tr:hover > .warning,
#cf .table-hover > tbody > tr.warning:hover > th {
  background-color: #faf2cc;
}
#cf .table > thead > tr > td.danger,
#cf .table > tbody > tr > td.danger,
#cf .table > tfoot > tr > td.danger,
#cf .table > thead > tr > th.danger,
#cf .table > tbody > tr > th.danger,
#cf .table > tfoot > tr > th.danger,
#cf .table > thead > tr.danger > td,
#cf .table > tbody > tr.danger > td,
#cf .table > tfoot > tr.danger > td,
#cf .table > thead > tr.danger > th,
#cf .table > tbody > tr.danger > th,
#cf .table > tfoot > tr.danger > th {
  background-color: #f2dede;
}
#cf .table-hover > tbody > tr > td.danger:hover,
#cf .table-hover > tbody > tr > th.danger:hover,
#cf .table-hover > tbody > tr.danger:hover > td,
#cf .table-hover > tbody > tr:hover > .danger,
#cf .table-hover > tbody > tr.danger:hover > th {
  background-color: #ebcccc;
}
#cf .table-responsive {
  overflow-x: auto;
  min-height: 0.01%;
}
@media screen and (max-width: 767px) {
  #cf .table-responsive {
    width: 100%;
    margin-bottom: 15px;
    overflow-y: hidden;
    -ms-overflow-style: -ms-autohiding-scrollbar;
    border: 1px solid #ddd;
  }
  #cf .table-responsive > .table {
    margin-bottom: 0;
  }
  #cf .table-responsive > .table > thead > tr > th,
  #cf .table-responsive > .table > tbody > tr > th,
  #cf .table-responsive > .table > tfoot > tr > th,
  #cf .table-responsive > .table > thead > tr > td,
  #cf .table-responsive > .table > tbody > tr > td,
  #cf .table-responsive > .table > tfoot > tr > td {
    white-space: nowrap;
  }
  #cf .table-responsive > .table-bordered {
    border: 0;
  }
  #cf .table-responsive > .table-bordered > thead > tr >
th:first-child,
  #cf .table-responsive > .table-bordered > tbody > tr >
th:first-child,
  #cf .table-responsive > .table-bordered > tfoot > tr >
th:first-child,
  #cf .table-responsive > .table-bordered > thead > tr >
td:first-child,
  #cf .table-responsive > .table-bordered > tbody > tr >
td:first-child,
  #cf .table-responsive > .table-bordered > tfoot > tr >
td:first-child {
    border-left: 0;
  }
  #cf .table-responsive > .table-bordered > thead > tr >
th:last-child,
  #cf .table-responsive > .table-bordered > tbody > tr >
th:last-child,
  #cf .table-responsive > .table-bordered > tfoot > tr >
th:last-child,
  #cf .table-responsive > .table-bordered > thead > tr >
td:last-child,
  #cf .table-responsive > .table-bordered > tbody > tr >
td:last-child,
  #cf .table-responsive > .table-bordered > tfoot > tr >
td:last-child {
    border-right: 0;
  }
  #cf .table-responsive > .table-bordered > tbody > tr:last-child
> th,
  #cf .table-responsive > .table-bordered > tfoot > tr:last-child
> th,
  #cf .table-responsive > .table-bordered > tbody > tr:last-child
> td,
  #cf .table-responsive > .table-bordered > tfoot > tr:last-child
> td {
    border-bottom: 0;
  }
}
#cf fieldset {
  padding: 0;
  margin: 0;
  border: 0;
  min-width: 0;
}
#cf legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: inherit;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}
#cf label {
  display: inline-block;
  max-width: 100%;
  margin-bottom: 5px;
  font-weight: bold;
}
#cf input[type="search"] {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#cf input[type="radio"],
#cf input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  line-height: normal;
}
#cf input[type="file"] {
  display: block;
}
#cf input[type="range"] {
  display: block;
  width: 100%;
}
#cf select[multiple],
#cf select[size] {
  height: auto;
}
#cf input[type="file"]:focus,
#cf input[type="radio"]:focus,
#cf input[type="checkbox"]:focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
#cf output {
  display: block;
  padding-top: 7px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555555;
}
#cf .form-control {
  display: block;
  width: 100%;
  height: 34px;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow
ease-in-out .15s;
  -moz-transition: border-color ease-in-out .15s, -moz-box-shadow
ease-in-out .15s;
  -webkit-transition: border-color ease-in-out .15s, 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;
}
#cf .form-control:focus {
  border-color: #66afe9;
  outline: 0;
  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175,
233, 0.6);
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,
175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233,
0.6);
}
#cf .form-control::-webkit-input-placeholder {
  color: #aaa;
}
#cf .form-control:-moz-placeholder {
  color: #aaa;
}
#cf .form-control::-moz-placeholder {
  color: #aaa;
}
#cf .form-control:-ms-input-placeholder {
  color: #aaa;
}
#cf .form-control::-moz-placeholder {
  color: #999;
  opacity: 1;
}
#cf .form-control:-ms-input-placeholder {
  color: #999;
}
#cf .form-control::-webkit-input-placeholder {
  color: #999;
}
#cf .form-control::-ms-expand {
  border: 0;
  background-color: transparent;
}
#cf .form-control[disabled],
#cf .form-control[readonly],
fieldset[disabled] #cf .form-control {
  background-color: #eeeeee;
  opacity: 1;
}
#cf .form-control[disabled],
fieldset[disabled] #cf .form-control {
  cursor: not-allowed;
}
textarea#cf .form-control {
  height: auto;
}
#cf input[type="search"] {
  -webkit-appearance: none;
}
@media screen and (-webkit-min-device-pixel-ratio: 0) {
  #cf input[type="date"].form-control,
  #cf input[type="time"].form-control,
  #cf input[type="datetime-local"].form-control,
  #cf input[type="month"].form-control {
    line-height: 34px;
  }
  #cf input[type="date"].input-sm,
  #cf input[type="time"].input-sm,
  #cf input[type="datetime-local"].input-sm,
  #cf input[type="month"].input-sm,
  .input-group-sm #cf input[type="date"],
  .input-group-sm #cf input[type="time"],
  .input-group-sm #cf input[type="datetime-local"],
  .input-group-sm #cf input[type="month"] {
    line-height: 30px;
  }
  #cf input[type="date"].input-lg,
  #cf input[type="time"].input-lg,
  #cf input[type="datetime-local"].input-lg,
  #cf input[type="month"].input-lg,
  .input-group-lg #cf input[type="date"],
  .input-group-lg #cf input[type="time"],
  .input-group-lg #cf input[type="datetime-local"],
  .input-group-lg #cf input[type="month"] {
    line-height: 46px;
  }
}
#cf .form-group {
  margin-bottom: 15px;
}
#cf .radio,
#cf .checkbox {
  position: relative;
  display: block;
  margin-top: 10px;
  margin-bottom: 10px;
}
#cf .radio label,
#cf .checkbox label {
  min-height: 20px;
  padding-left: 20px;
  margin-bottom: 0;
  font-weight: normal;
  cursor: pointer;
}
#cf .radio input[type="radio"],
#cf .radio-inline input[type="radio"],
#cf .checkbox input[type="checkbox"],
#cf .checkbox-inline input[type="checkbox"] {
  position: absolute;
  margin-left: -20px;
  margin-top: 4px \9;
}
#cf .radio + .radio,
#cf .checkbox + .checkbox {
  margin-top: -5px;
}
#cf .radio-inline,
#cf .checkbox-inline {
  position: relative;
  display: inline-block;
  padding-left: 20px;
  margin-bottom: 0;
  vertical-align: middle;
  font-weight: normal;
  cursor: pointer;
}
#cf .radio-inline + .radio-inline,
#cf .checkbox-inline + .checkbox-inline {
  margin-top: 0;
  margin-left: 10px;
}
#cf input[type="radio"][disabled],
#cf input[type="checkbox"][disabled],
#cf input[type="radio"].disabled,
#cf input[type="checkbox"].disabled,
fieldset[disabled] #cf input[type="radio"],
fieldset[disabled] #cf input[type="checkbox"] {
  cursor: not-allowed;
}
#cf .radio-inline.disabled,
#cf .checkbox-inline.disabled,
fieldset[disabled] #cf .radio-inline,
fieldset[disabled] #cf .checkbox-inline {
  cursor: not-allowed;
}
#cf .radio.disabled label,
#cf .checkbox.disabled label,
fieldset[disabled] #cf .radio label,
fieldset[disabled] #cf .checkbox label {
  cursor: not-allowed;
}
#cf .form-control-static {
  padding-top: 7px;
  padding-bottom: 7px;
  margin-bottom: 0;
  min-height: 34px;
}
#cf .form-control-static.input-lg,
#cf .form-control-static.input-sm {
  padding-left: 0;
  padding-right: 0;
}
#cf .input-sm {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
select#cf .input-sm {
  height: 30px;
  line-height: 30px;
}
textarea#cf .input-sm,
select[multiple]#cf .input-sm {
  height: auto;
}
#cf .form-group-sm .form-control {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
#cf .form-group-sm select.form-control {
  height: 30px;
  line-height: 30px;
}
#cf .form-group-sm textarea.form-control,
#cf .form-group-sm select[multiple].form-control {
  height: auto;
}
#cf .form-group-sm .form-control-static {
  height: 30px;
  min-height: 32px;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.5;
}
#cf .input-lg {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
select#cf .input-lg {
  height: 46px;
  line-height: 46px;
}
textarea#cf .input-lg,
select[multiple]#cf .input-lg {
  height: auto;
}
#cf .form-group-lg .form-control {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
#cf .form-group-lg select.form-control {
  height: 46px;
  line-height: 46px;
}
#cf .form-group-lg textarea.form-control,
#cf .form-group-lg select[multiple].form-control {
  height: auto;
}
#cf .form-group-lg .form-control-static {
  height: 46px;
  min-height: 38px;
  padding: 11px 16px;
  font-size: 18px;
  line-height: 1.3333333;
}
#cf .has-feedback {
  position: relative;
}
#cf .has-feedback .form-control {
  padding-right: 42.5px;
}
#cf .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;
}
#cf .input-lg + .form-control-feedback,
#cf .input-group-lg + .form-control-feedback,
#cf .form-group-lg .form-control + .form-control-feedback {
  width: 46px;
  height: 46px;
  line-height: 46px;
}
#cf .input-sm + .form-control-feedback,
#cf .input-group-sm + .form-control-feedback,
#cf .form-group-sm .form-control + .form-control-feedback {
  width: 30px;
  height: 30px;
  line-height: 30px;
}
#cf .has-success .help-block,
#cf .has-success .control-label,
#cf .has-success .radio,
#cf .has-success .checkbox,
#cf .has-success .radio-inline,
#cf .has-success .checkbox-inline,
#cf .has-success.radio label,
#cf .has-success.checkbox label,
#cf .has-success.radio-inline label,
#cf .has-success.checkbox-inline label {
  color: #3c763d;
}
#cf .has-success .form-control {
  border-color: #3c763d;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
#cf .has-success .form-control:focus {
  border-color: #2b542c;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px
#67b168;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
}
#cf .has-success .input-group-addon {
  color: #3c763d;
  border-color: #3c763d;
  background-color: #dff0d8;
}
#cf .has-success .form-control-feedback {
  color: #3c763d;
}
#cf .has-warning .help-block,
#cf .has-warning .control-label,
#cf .has-warning .radio,
#cf .has-warning .checkbox,
#cf .has-warning .radio-inline,
#cf .has-warning .checkbox-inline,
#cf .has-warning.radio label,
#cf .has-warning.checkbox label,
#cf .has-warning.radio-inline label,
#cf .has-warning.checkbox-inline label {
  color: #8a6d3b;
}
#cf .has-warning .form-control {
  border-color: #8a6d3b;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
#cf .has-warning .form-control:focus {
  border-color: #66512c;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px
#c0a16b;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
}
#cf .has-warning .input-group-addon {
  color: #8a6d3b;
  border-color: #8a6d3b;
  background-color: #fcf8e3;
}
#cf .has-warning .form-control-feedback {
  color: #8a6d3b;
}
#cf .has-error .help-block,
#cf .has-error .control-label,
#cf .has-error .radio,
#cf .has-error .checkbox,
#cf .has-error .radio-inline,
#cf .has-error .checkbox-inline,
#cf .has-error.radio label,
#cf .has-error.checkbox label,
#cf .has-error.radio-inline label,
#cf .has-error.checkbox-inline label {
  color: #a94442;
}
#cf .has-error .form-control {
  border-color: #a94442;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}
#cf .has-error .form-control:focus {
  border-color: #843534;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px
#ce8483;
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
}
#cf .has-error .input-group-addon {
  color: #a94442;
  border-color: #a94442;
  background-color: #f2dede;
}
#cf .has-error .form-control-feedback {
  color: #a94442;
}
#cf .has-feedback label ~ .form-control-feedback {
  top: 25px;
}
#cf .has-feedback label.sr-only ~ .form-control-feedback {
  top: 0;
}
#cf .help-block {
  display: block;
  margin-top: 5px;
  margin-bottom: 10px;
  color: #737373;
}
@media (min-width: 768px) {
  #cf .form-inline .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .form-inline .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  #cf .form-inline .form-control-static {
    display: inline-block;
  }
  #cf .form-inline .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  #cf .form-inline .input-group .input-group-addon,
  #cf .form-inline .input-group .input-group-btn,
  #cf .form-inline .input-group .form-control {
    width: auto;
  }
  #cf .form-inline .input-group > .form-control {
    width: 100%;
  }
  #cf .form-inline .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .form-inline .radio,
  #cf .form-inline .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .form-inline .radio label,
  #cf .form-inline .checkbox label {
    padding-left: 0;
  }
  #cf .form-inline .radio input[type="radio"],
  #cf .form-inline .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  #cf .form-inline .has-feedback .form-control-feedback {
    top: 0;
  }
}
#cf .form-horizontal .radio,
#cf .form-horizontal .checkbox,
#cf .form-horizontal .radio-inline,
#cf .form-horizontal .checkbox-inline {
  margin-top: 0;
  margin-bottom: 0;
  padding-top: 7px;
}
#cf .form-horizontal .radio,
#cf .form-horizontal .checkbox {
  min-height: 27px;
}
#cf .form-horizontal .form-group {
  margin-left: -15px;
  margin-right: -15px;
}
@media (min-width: 768px) {
  #cf .form-horizontal .control-label {
    text-align: right;
    margin-bottom: 0;
    padding-top: 7px;
  }
}
#cf .form-horizontal .has-feedback .form-control-feedback {
  right: 15px;
}
@media (min-width: 768px) {
  #cf .form-horizontal .form-group-lg .control-label {
    padding-top: 11px;
    font-size: 18px;
  }
}
@media (min-width: 768px) {
  #cf .form-horizontal .form-group-sm .control-label {
    padding-top: 6px;
    font-size: 12px;
  }
}
#cf .btn {
  display: inline-block;
  margin-bottom: 0;
  font-weight: normal;
  text-align: center;
  vertical-align: middle;
  touch-action: manipulation;
  cursor: pointer;
  background-image: none;
  border: 1px solid transparent;
  white-space: nowrap;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  border-radius: 4px;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
#cf .btn:focus,
#cf .btn:active:focus,
#cf .btn.active:focus,
#cf .btn.focus,
#cf .btn:active.focus,
#cf .btn.active.focus {
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}
#cf .btn:hover,
#cf .btn:focus,
#cf .btn.focus {
  color: #333;
  text-decoration: none;
}
#cf .btn:active,
#cf .btn.active {
  outline: 0;
  background-image: none;
  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
#cf .btn.disabled,
#cf .btn[disabled],
fieldset[disabled] #cf .btn {
  cursor: not-allowed;
  zoom: 1;
  -webkit-opacity: 0.65;
  -moz-opacity: 0.65;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -moz-box-shadow: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}
a#cf .btn.disabled,
fieldset[disabled] a#cf .btn {
  pointer-events: none;
}
#cf .btn-default {
  color: #333;
  background-color: #fff;
  border-color: #ccc;
}
#cf .btn-default:focus,
#cf .btn-default.focus {
  color: #333;
  background-color: #e6e6e6;
  border-color: #8c8c8c;
}
#cf .btn-default:hover {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
#cf .btn-default:active,
#cf .btn-default.active,
.open > .dropdown-toggle#cf .btn-default {
  color: #333;
  background-color: #e6e6e6;
  border-color: #adadad;
}
#cf .btn-default:active:hover,
#cf .btn-default.active:hover,
.open > .dropdown-toggle#cf .btn-default:hover,
#cf .btn-default:active:focus,
#cf .btn-default.active:focus,
.open > .dropdown-toggle#cf .btn-default:focus,
#cf .btn-default:active.focus,
#cf .btn-default.active.focus,
.open > .dropdown-toggle#cf .btn-default.focus {
  color: #333;
  background-color: #d4d4d4;
  border-color: #8c8c8c;
}
#cf .btn-default:active,
#cf .btn-default.active,
.open > .dropdown-toggle#cf .btn-default {
  background-image: none;
}
#cf .btn-default.disabled:hover,
#cf .btn-default[disabled]:hover,
fieldset[disabled] #cf .btn-default:hover,
#cf .btn-default.disabled:focus,
#cf .btn-default[disabled]:focus,
fieldset[disabled] #cf .btn-default:focus,
#cf .btn-default.disabled.focus,
#cf .btn-default[disabled].focus,
fieldset[disabled] #cf .btn-default.focus {
  background-color: #fff;
  border-color: #ccc;
}
#cf .btn-default .badge {
  color: #fff;
  background-color: #333;
}
#cf .btn-primary {
  color: #fff;
  background-color: #1f8ceb;
  border-color: #147fdd;
}
#cf .btn-primary:focus,
#cf .btn-primary.focus {
  color: #fff;
  background-color: #1272c5;
  border-color: #093c68;
}
#cf .btn-primary:hover {
  color: #fff;
  background-color: #1272c5;
  border-color: #0f5fa5;
}
#cf .btn-primary:active,
#cf .btn-primary.active,
.open > .dropdown-toggle#cf .btn-primary {
  color: #fff;
  background-color: #1272c5;
  border-color: #0f5fa5;
}
#cf .btn-primary:active:hover,
#cf .btn-primary.active:hover,
.open > .dropdown-toggle#cf .btn-primary:hover,
#cf .btn-primary:active:focus,
#cf .btn-primary.active:focus,
.open > .dropdown-toggle#cf .btn-primary:focus,
#cf .btn-primary:active.focus,
#cf .btn-primary.active.focus,
.open > .dropdown-toggle#cf .btn-primary.focus {
  color: #fff;
  background-color: #0f5fa5;
  border-color: #093c68;
}
#cf .btn-primary:active,
#cf .btn-primary.active,
.open > .dropdown-toggle#cf .btn-primary {
  background-image: none;
}
#cf .btn-primary.disabled:hover,
#cf .btn-primary[disabled]:hover,
fieldset[disabled] #cf .btn-primary:hover,
#cf .btn-primary.disabled:focus,
#cf .btn-primary[disabled]:focus,
fieldset[disabled] #cf .btn-primary:focus,
#cf .btn-primary.disabled.focus,
#cf .btn-primary[disabled].focus,
fieldset[disabled] #cf .btn-primary.focus {
  background-color: #1f8ceb;
  border-color: #147fdd;
}
#cf .btn-primary .badge {
  color: #1f8ceb;
  background-color: #fff;
}
#cf .btn-success {
  color: #fff;
  background-color: #28a745;
  border-color: #23923c;
}
#cf .btn-success:focus,
#cf .btn-success.focus {
  color: #fff;
  background-color: #1e7e34;
  border-color: #0a2c12;
}
#cf .btn-success:hover {
  color: #fff;
  background-color: #1e7e34;
  border-color: #176128;
}
#cf .btn-success:active,
#cf .btn-success.active,
.open > .dropdown-toggle#cf .btn-success {
  color: #fff;
  background-color: #1e7e34;
  border-color: #176128;
}
#cf .btn-success:active:hover,
#cf .btn-success.active:hover,
.open > .dropdown-toggle#cf .btn-success:hover,
#cf .btn-success:active:focus,
#cf .btn-success.active:focus,
.open > .dropdown-toggle#cf .btn-success:focus,
#cf .btn-success:active.focus,
#cf .btn-success.active.focus,
.open > .dropdown-toggle#cf .btn-success.focus {
  color: #fff;
  background-color: #176128;
  border-color: #0a2c12;
}
#cf .btn-success:active,
#cf .btn-success.active,
.open > .dropdown-toggle#cf .btn-success {
  background-image: none;
}
#cf .btn-success.disabled:hover,
#cf .btn-success[disabled]:hover,
fieldset[disabled] #cf .btn-success:hover,
#cf .btn-success.disabled:focus,
#cf .btn-success[disabled]:focus,
fieldset[disabled] #cf .btn-success:focus,
#cf .btn-success.disabled.focus,
#cf .btn-success[disabled].focus,
fieldset[disabled] #cf .btn-success.focus {
  background-color: #28a745;
  border-color: #23923c;
}
#cf .btn-success .badge {
  color: #28a745;
  background-color: #fff;
}
#cf .btn-info {
  color: #fff;
  background-color: #17a2b8;
  border-color: #148ea1;
}
#cf .btn-info:focus,
#cf .btn-info.focus {
  color: #fff;
  background-color: #117a8b;
  border-color: #062a30;
}
#cf .btn-info:hover {
  color: #fff;
  background-color: #117a8b;
  border-color: #0d5e6b;
}
#cf .btn-info:active,
#cf .btn-info.active,
.open > .dropdown-toggle#cf .btn-info {
  color: #fff;
  background-color: #117a8b;
  border-color: #0d5e6b;
}
#cf .btn-info:active:hover,
#cf .btn-info.active:hover,
.open > .dropdown-toggle#cf .btn-info:hover,
#cf .btn-info:active:focus,
#cf .btn-info.active:focus,
.open > .dropdown-toggle#cf .btn-info:focus,
#cf .btn-info:active.focus,
#cf .btn-info.active.focus,
.open > .dropdown-toggle#cf .btn-info.focus {
  color: #fff;
  background-color: #0d5e6b;
  border-color: #062a30;
}
#cf .btn-info:active,
#cf .btn-info.active,
.open > .dropdown-toggle#cf .btn-info {
  background-image: none;
}
#cf .btn-info.disabled:hover,
#cf .btn-info[disabled]:hover,
fieldset[disabled] #cf .btn-info:hover,
#cf .btn-info.disabled:focus,
#cf .btn-info[disabled]:focus,
fieldset[disabled] #cf .btn-info:focus,
#cf .btn-info.disabled.focus,
#cf .btn-info[disabled].focus,
fieldset[disabled] #cf .btn-info.focus {
  background-color: #17a2b8;
  border-color: #148ea1;
}
#cf .btn-info .badge {
  color: #17a2b8;
  background-color: #fff;
}
#cf .btn-warning {
  color: #fff;
  background-color: #ffc107;
  border-color: #ecb100;
}
#cf .btn-warning:focus,
#cf .btn-warning.focus {
  color: #fff;
  background-color: #d39e00;
  border-color: #6d5200;
}
#cf .btn-warning:hover {
  color: #fff;
  background-color: #d39e00;
  border-color: #af8300;
}
#cf .btn-warning:active,
#cf .btn-warning.active,
.open > .dropdown-toggle#cf .btn-warning {
  color: #fff;
  background-color: #d39e00;
  border-color: #af8300;
}
#cf .btn-warning:active:hover,
#cf .btn-warning.active:hover,
.open > .dropdown-toggle#cf .btn-warning:hover,
#cf .btn-warning:active:focus,
#cf .btn-warning.active:focus,
.open > .dropdown-toggle#cf .btn-warning:focus,
#cf .btn-warning:active.focus,
#cf .btn-warning.active.focus,
.open > .dropdown-toggle#cf .btn-warning.focus {
  color: #fff;
  background-color: #af8300;
  border-color: #6d5200;
}
#cf .btn-warning:active,
#cf .btn-warning.active,
.open > .dropdown-toggle#cf .btn-warning {
  background-image: none;
}
#cf .btn-warning.disabled:hover,
#cf .btn-warning[disabled]:hover,
fieldset[disabled] #cf .btn-warning:hover,
#cf .btn-warning.disabled:focus,
#cf .btn-warning[disabled]:focus,
fieldset[disabled] #cf .btn-warning:focus,
#cf .btn-warning.disabled.focus,
#cf .btn-warning[disabled].focus,
fieldset[disabled] #cf .btn-warning.focus {
  background-color: #ffc107;
  border-color: #ecb100;
}
#cf .btn-warning .badge {
  color: #ffc107;
  background-color: #fff;
}
#cf .btn-danger {
  color: #fff;
  background-color: #dc3545;
  border-color: #d32535;
}
#cf .btn-danger:focus,
#cf .btn-danger.focus {
  color: #fff;
  background-color: #bd2130;
  border-color: #66121a;
}
#cf .btn-danger:hover {
  color: #fff;
  background-color: #bd2130;
  border-color: #9f1c28;
}
#cf .btn-danger:active,
#cf .btn-danger.active,
.open > .dropdown-toggle#cf .btn-danger {
  color: #fff;
  background-color: #bd2130;
  border-color: #9f1c28;
}
#cf .btn-danger:active:hover,
#cf .btn-danger.active:hover,
.open > .dropdown-toggle#cf .btn-danger:hover,
#cf .btn-danger:active:focus,
#cf .btn-danger.active:focus,
.open > .dropdown-toggle#cf .btn-danger:focus,
#cf .btn-danger:active.focus,
#cf .btn-danger.active.focus,
.open > .dropdown-toggle#cf .btn-danger.focus {
  color: #fff;
  background-color: #9f1c28;
  border-color: #66121a;
}
#cf .btn-danger:active,
#cf .btn-danger.active,
.open > .dropdown-toggle#cf .btn-danger {
  background-image: none;
}
#cf .btn-danger.disabled:hover,
#cf .btn-danger[disabled]:hover,
fieldset[disabled] #cf .btn-danger:hover,
#cf .btn-danger.disabled:focus,
#cf .btn-danger[disabled]:focus,
fieldset[disabled] #cf .btn-danger:focus,
#cf .btn-danger.disabled.focus,
#cf .btn-danger[disabled].focus,
fieldset[disabled] #cf .btn-danger.focus {
  background-color: #dc3545;
  border-color: #d32535;
}
#cf .btn-danger .badge {
  color: #dc3545;
  background-color: #fff;
}
#cf .btn-link {
  color: #1f8ceb;
  font-weight: normal;
  border-radius: 0;
}
#cf .btn-link,
#cf .btn-link:active,
#cf .btn-link.active,
#cf .btn-link[disabled],
fieldset[disabled] #cf .btn-link {
  background-color: transparent;
  -moz-box-shadow: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}
#cf .btn-link,
#cf .btn-link:hover,
#cf .btn-link:focus,
#cf .btn-link:active {
  border-color: transparent;
}
#cf .btn-link:hover,
#cf .btn-link:focus {
  color: #1064ae;
  text-decoration: underline;
  background-color: transparent;
}
#cf .btn-link[disabled]:hover,
fieldset[disabled] #cf .btn-link:hover,
#cf .btn-link[disabled]:focus,
fieldset[disabled] #cf .btn-link:focus {
  color: #777777;
  text-decoration: none;
}
#cf .btn-lg {
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
#cf .btn-sm {
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
#cf .btn-xs {
  padding: 1px 5px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
#cf .btn-block {
  display: block;
  width: 100%;
}
#cf .btn-block + .btn-block {
  margin-top: 5px;
}
#cf input[type="submit"].btn-block,
#cf input[type="reset"].btn-block,
#cf input[type="button"].btn-block {
  width: 100%;
}
#cf .fade {
  opacity: 0;
  -moz-transition: opacity 0.15s linear;
  -webkit-transition: opacity 0.15s linear;
  -o-transition: opacity 0.15s linear;
  transition: opacity 0.15s linear;
}
#cf .fade.in {
  opacity: 1;
}
#cf .collapse {
  display: none;
}
#cf .collapse.in {
  display: block;
}
tr#cf .collapse.in {
  display: table-row;
}
tbody#cf .collapse.in {
  display: table-row-group;
}
#cf .collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -moz-transition-property: height, visibility;
  -o-transition-property: height, visibility;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -moz-transition-duration: 0.35s;
  -o-transition-duration: 0.35s;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -moz-transition-timing-function: ease;
  -o-transition-timing-function: ease;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
#cf .btn-group,
#cf .btn-group-vertical {
  position: relative;
  display: inline-block;
  vertical-align: middle;
}
#cf .btn-group > .btn,
#cf .btn-group-vertical > .btn {
  position: relative;
  float: left;
}
#cf .btn-group > .btn:hover,
#cf .btn-group-vertical > .btn:hover,
#cf .btn-group > .btn:focus,
#cf .btn-group-vertical > .btn:focus,
#cf .btn-group > .btn:active,
#cf .btn-group-vertical > .btn:active,
#cf .btn-group > .btn.active,
#cf .btn-group-vertical > .btn.active {
  z-index: 2;
}
#cf .btn-group .btn + .btn,
#cf .btn-group .btn + .btn-group,
#cf .btn-group .btn-group + .btn,
#cf .btn-group .btn-group + .btn-group {
  margin-left: -1px;
}
#cf .btn-toolbar {
  margin-left: -5px;
}
#cf .btn-toolbar .btn,
#cf .btn-toolbar .btn-group,
#cf .btn-toolbar .input-group {
  float: left;
}
#cf .btn-toolbar > .btn,
#cf .btn-toolbar > .btn-group,
#cf .btn-toolbar > .input-group {
  margin-left: 5px;
}
#cf .btn-group >
.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: 0;
}
#cf .btn-group > .btn:first-child {
  margin-left: 0;
}
#cf .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle)
{
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
#cf .btn-group > .btn:last-child:not(:first-child),
#cf .btn-group > .dropdown-toggle:not(:first-child) {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
#cf .btn-group > .btn-group {
  float: left;
}
#cf .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn
{
  border-radius: 0;
}
#cf .btn-group > .btn-group:first-child:not(:last-child) >
.btn:last-child,
#cf .btn-group > .btn-group:first-child:not(:last-child) >
.dropdown-toggle {
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
#cf .btn-group > .btn-group:last-child:not(:first-child) >
.btn:first-child {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
#cf .btn-group .dropdown-toggle:active,
#cf .btn-group.open .dropdown-toggle {
  outline: 0;
}
#cf .btn-group > .btn + .dropdown-toggle {
  padding-left: 8px;
  padding-right: 8px;
}
#cf .btn-group > .btn-lg + .dropdown-toggle {
  padding-left: 12px;
  padding-right: 12px;
}
#cf .btn-group.open .dropdown-toggle {
  -moz-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
#cf .btn-group.open .dropdown-toggle.btn-link {
  -moz-box-shadow: none;
  -webkit-box-shadow: none;
  box-shadow: none;
}
#cf .btn .caret {
  margin-left: 0;
}
#cf .btn-lg .caret {
  border-width: 5px 5px 0;
  border-bottom-width: 0;
}
#cf .dropup .btn-lg .caret {
  border-width: 0 5px 5px;
}
#cf .btn-group-vertical > .btn,
#cf .btn-group-vertical > .btn-group,
#cf .btn-group-vertical > .btn-group > .btn {
  display: block;
  float: none;
  width: 100%;
  max-width: 100%;
}
#cf .btn-group-vertical > .btn-group > .btn {
  float: none;
}
#cf .btn-group-vertical > .btn + .btn,
#cf .btn-group-vertical > .btn + .btn-group,
#cf .btn-group-vertical > .btn-group + .btn,
#cf .btn-group-vertical > .btn-group + .btn-group {
  margin-top: -1px;
  margin-left: 0;
}
#cf .btn-group-vertical > .btn:not(:first-child):not(:last-child) {
  border-radius: 0;
}
#cf .btn-group-vertical > .btn:first-child:not(:last-child) {
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
#cf .btn-group-vertical > .btn:last-child:not(:first-child) {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 4px;
}
#cf .btn-group-vertical > .btn-group:not(:first-child):not(:last-child)
> .btn {
  border-radius: 0;
}
#cf .btn-group-vertical > .btn-group:first-child:not(:last-child) >
.btn:last-child,
#cf .btn-group-vertical > .btn-group:first-child:not(:last-child) >
.dropdown-toggle {
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
#cf .btn-group-vertical > .btn-group:last-child:not(:first-child) >
.btn:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
#cf .btn-group-justified {
  display: table;
  width: 100%;
  table-layout: fixed;
  border-collapse: separate;
}
#cf .btn-group-justified > .btn,
#cf .btn-group-justified > .btn-group {
  float: none;
  display: table-cell;
  width: 1%;
}
#cf .btn-group-justified > .btn-group .btn {
  width: 100%;
}
#cf .btn-group-justified > .btn-group .dropdown-menu {
  left: auto;
}
#cf [data-toggle="buttons"] > .btn
input[type="radio"],
#cf [data-toggle="buttons"] > .btn-group > .btn
input[type="radio"],
#cf [data-toggle="buttons"] > .btn
input[type="checkbox"],
#cf [data-toggle="buttons"] > .btn-group > .btn
input[type="checkbox"] {
  position: absolute;
  clip: rect(0, 0, 0, 0);
  pointer-events: none;
}
#cf .input-group {
  position: relative;
  display: table;
  border-collapse: separate;
}
#cf .input-group[class*="col-"] {
  float: none;
  padding-left: 0;
  padding-right: 0;
}
#cf .input-group .form-control {
  position: relative;
  z-index: 2;
  float: left;
  width: 100%;
  margin-bottom: 0;
}
#cf .input-group .form-control:focus {
  z-index: 3;
}
#cf .input-group-lg > .form-control,
#cf .input-group-lg > .input-group-addon,
#cf .input-group-lg > .input-group-btn > .btn {
  height: 46px;
  padding: 10px 16px;
  font-size: 18px;
  line-height: 1.3333333;
  border-radius: 6px;
}
select#cf .input-group-lg > .form-control,
select#cf .input-group-lg > .input-group-addon,
select#cf .input-group-lg > .input-group-btn > .btn {
  height: 46px;
  line-height: 46px;
}
textarea#cf .input-group-lg > .form-control,
textarea#cf .input-group-lg > .input-group-addon,
textarea#cf .input-group-lg > .input-group-btn > .btn,
select[multiple]#cf .input-group-lg > .form-control,
select[multiple]#cf .input-group-lg > .input-group-addon,
select[multiple]#cf .input-group-lg > .input-group-btn > .btn {
  height: auto;
}
#cf .input-group-sm > .form-control,
#cf .input-group-sm > .input-group-addon,
#cf .input-group-sm > .input-group-btn > .btn {
  height: 30px;
  padding: 5px 10px;
  font-size: 12px;
  line-height: 1.5;
  border-radius: 3px;
}
select#cf .input-group-sm > .form-control,
select#cf .input-group-sm > .input-group-addon,
select#cf .input-group-sm > .input-group-btn > .btn {
  height: 30px;
  line-height: 30px;
}
textarea#cf .input-group-sm > .form-control,
textarea#cf .input-group-sm > .input-group-addon,
textarea#cf .input-group-sm > .input-group-btn > .btn,
select[multiple]#cf .input-group-sm > .form-control,
select[multiple]#cf .input-group-sm > .input-group-addon,
select[multiple]#cf .input-group-sm > .input-group-btn > .btn {
  height: auto;
}
#cf .input-group-addon,
#cf .input-group-btn,
#cf .input-group .form-control {
  display: table-cell;
}
#cf .input-group-addon:not(:first-child):not(:last-child),
#cf .input-group-btn:not(:first-child):not(:last-child),
#cf .input-group .form-control:not(:first-child):not(:last-child) {
  border-radius: 0;
}
#cf .input-group-addon,
#cf .input-group-btn {
  width: 1%;
  white-space: nowrap;
  vertical-align: middle;
}
#cf .input-group-addon {
  padding: 6px 12px;
  font-size: 14px;
  font-weight: normal;
  line-height: 1;
  color: #555555;
  text-align: center;
  background-color: #eeeeee;
  border: 1px solid #ccc;
  border-radius: 4px;
}
#cf .input-group-addon.input-sm {
  padding: 5px 10px;
  font-size: 12px;
  border-radius: 3px;
}
#cf .input-group-addon.input-lg {
  padding: 10px 16px;
  font-size: 18px;
  border-radius: 6px;
}
#cf .input-group-addon input[type="radio"],
#cf .input-group-addon input[type="checkbox"] {
  margin-top: 0;
}
#cf .input-group .form-control:first-child,
#cf .input-group-addon:first-child,
#cf .input-group-btn:first-child > .btn,
#cf .input-group-btn:first-child > .btn-group > .btn,
#cf .input-group-btn:first-child > .dropdown-toggle,
#cf .input-group-btn:last-child >
.btn:not(:last-child):not(.dropdown-toggle),
#cf .input-group-btn:last-child > .btn-group:not(:last-child) > .btn
{
  border-bottom-right-radius: 0;
  border-top-right-radius: 0;
}
#cf .input-group-addon:first-child {
  border-right: 0;
}
#cf .input-group .form-control:last-child,
#cf .input-group-addon:last-child,
#cf .input-group-btn:last-child > .btn,
#cf .input-group-btn:last-child > .btn-group > .btn,
#cf .input-group-btn:last-child > .dropdown-toggle,
#cf .input-group-btn:first-child > .btn:not(:first-child),
#cf .input-group-btn:first-child > .btn-group:not(:first-child) >
.btn {
  border-bottom-left-radius: 0;
  border-top-left-radius: 0;
}
#cf .input-group-addon:last-child {
  border-left: 0;
}
#cf .input-group-btn {
  position: relative;
  font-size: 0;
  white-space: nowrap;
}
#cf .input-group-btn > .btn {
  position: relative;
}
#cf .input-group-btn > .btn + .btn {
  margin-left: -1px;
}
#cf .input-group-btn > .btn:hover,
#cf .input-group-btn > .btn:focus,
#cf .input-group-btn > .btn:active {
  z-index: 2;
}
#cf .input-group-btn:first-child > .btn,
#cf .input-group-btn:first-child > .btn-group {
  margin-right: -1px;
}
#cf .input-group-btn:last-child > .btn,
#cf .input-group-btn:last-child > .btn-group {
  z-index: 2;
  margin-left: -1px;
}
#cf .nav {
  margin-bottom: 0;
  padding-left: 0;
  list-style: none;
}
#cf .nav > li {
  position: relative;
  display: block;
}
#cf .nav > li > a {
  position: relative;
  display: block;
  padding: 10px 15px;
}
#cf .nav > li > a:hover,
#cf .nav > li > a:focus {
  text-decoration: none;
  background-color: #eeeeee;
}
#cf .nav > li.disabled > a {
  color: #777777;
}
#cf .nav > li.disabled > a:hover,
#cf .nav > li.disabled > a:focus {
  color: #777777;
  text-decoration: none;
  background-color: transparent;
  cursor: not-allowed;
}
#cf .nav .open > a,
#cf .nav .open > a:hover,
#cf .nav .open > a:focus {
  background-color: #eeeeee;
  border-color: #1f8ceb;
}
#cf .nav .nav-divider {
  height: 1px;
  margin: 9px 0;
  overflow: hidden;
  background-color: #e5e5e5;
}
#cf .nav > li > a > img {
  max-width: none;
}
#cf .nav-tabs {
  border-bottom: 1px solid #ddd;
}
#cf .nav-tabs > li {
  float: left;
  margin-bottom: -1px;
}
#cf .nav-tabs > li > a {
  margin-right: 2px;
  line-height: 1.42857143;
  border: 1px solid transparent;
  border-radius: 4px 4px 0 0;
}
#cf .nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #ddd;
}
#cf .nav-tabs > li.active > a,
#cf .nav-tabs > li.active > a:hover,
#cf .nav-tabs > li.active > a:focus {
  color: #555555;
  background-color: #f8fafc;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
  cursor: default;
}
#cf .nav-tabs.nav-justified {
  width: 100%;
  border-bottom: 0;
}
#cf .nav-tabs.nav-justified > li {
  float: none;
}
#cf .nav-tabs.nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
#cf .nav-tabs.nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  #cf .nav-tabs.nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  #cf .nav-tabs.nav-justified > li > a {
    margin-bottom: 0;
  }
}
#cf .nav-tabs.nav-justified > li > a {
  margin-right: 0;
  border-radius: 4px;
}
#cf .nav-tabs.nav-justified > .active > a,
#cf .nav-tabs.nav-justified > .active > a:hover,
#cf .nav-tabs.nav-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  #cf .nav-tabs.nav-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 4px 4px 0 0;
  }
  #cf .nav-tabs.nav-justified > .active > a,
  #cf .nav-tabs.nav-justified > .active > a:hover,
  #cf .nav-tabs.nav-justified > .active > a:focus {
    border-bottom-color: #f8fafc;
  }
}
#cf .nav-pills > li {
  float: left;
}
#cf .nav-pills > li > a {
  border-radius: 4px;
}
#cf .nav-pills > li + li {
  margin-left: 2px;
}
#cf .nav-pills > li.active > a,
#cf .nav-pills > li.active > a:hover,
#cf .nav-pills > li.active > a:focus {
  color: #fff;
  background-color: #1f8ceb;
}
#cf .nav-stacked > li {
  float: none;
}
#cf .nav-stacked > li + li {
  margin-top: 2px;
  margin-left: 0;
}
#cf .nav-justified {
  width: 100%;
}
#cf .nav-justified > li {
  float: none;
}
#cf .nav-justified > li > a {
  text-align: center;
  margin-bottom: 5px;
}
#cf .nav-justified > .dropdown .dropdown-menu {
  top: auto;
  left: auto;
}
@media (min-width: 768px) {
  #cf .nav-justified > li {
    display: table-cell;
    width: 1%;
  }
  #cf .nav-justified > li > a {
    margin-bottom: 0;
  }
}
#cf .nav-tabs-justified {
  border-bottom: 0;
}
#cf .nav-tabs-justified > li > a {
  margin-right: 0;
  border-radius: 4px;
}
#cf .nav-tabs-justified > .active > a,
#cf .nav-tabs-justified > .active > a:hover,
#cf .nav-tabs-justified > .active > a:focus {
  border: 1px solid #ddd;
}
@media (min-width: 768px) {
  #cf .nav-tabs-justified > li > a {
    border-bottom: 1px solid #ddd;
    border-radius: 4px 4px 0 0;
  }
  #cf .nav-tabs-justified > .active > a,
  #cf .nav-tabs-justified > .active > a:hover,
  #cf .nav-tabs-justified > .active > a:focus {
    border-bottom-color: #f8fafc;
  }
}
#cf .tab-content > .tab-pane {
  display: none;
}
#cf .tab-content > .active {
  display: block;
}
#cf .nav-tabs .dropdown-menu {
  margin-top: -1px;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
#cf .navbar {
  position: relative;
  min-height: 50px;
  margin-bottom: 20px;
  border: 1px solid transparent;
}
@media (min-width: 768px) {
  #cf .navbar {
    border-radius: 4px;
  }
}
@media (min-width: 768px) {
  #cf .navbar-header {
    float: left;
  }
}
#cf .navbar-collapse {
  overflow-x: visible;
  padding-right: 15px;
  padding-left: 15px;
  border-top: 1px solid transparent;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
  -webkit-overflow-scrolling: touch;
}
#cf .navbar-collapse.in {
  overflow-y: auto;
}
@media (min-width: 768px) {
  #cf .navbar-collapse {
    width: auto;
    border-top: 0;
    box-shadow: none;
  }
  #cf .navbar-collapse.collapse {
    display: block !important;
    height: auto !important;
    padding-bottom: 0;
    overflow: visible !important;
  }
  #cf .navbar-collapse.in {
    overflow-y: visible;
  }
  .navbar-fixed-top #cf .navbar-collapse,
  .navbar-static-top #cf .navbar-collapse,
  .navbar-fixed-bottom #cf .navbar-collapse {
    padding-left: 0;
    padding-right: 0;
  }
}
#cf .navbar-fixed-top .navbar-collapse,
#cf .navbar-fixed-bottom .navbar-collapse {
  max-height: 340px;
}
@media (max-device-width: 480px) and (orientation: landscape) {
  #cf .navbar-fixed-top .navbar-collapse,
  #cf .navbar-fixed-bottom .navbar-collapse {
    max-height: 200px;
  }
}
#cf .container > .navbar-header,
#cf .container-fluid > .navbar-header,
#cf .container > .navbar-collapse,
#cf .container-fluid > .navbar-collapse {
  margin-right: -15px;
  margin-left: -15px;
}
@media (min-width: 768px) {
  #cf .container > .navbar-header,
  #cf .container-fluid > .navbar-header,
  #cf .container > .navbar-collapse,
  #cf .container-fluid > .navbar-collapse {
    margin-right: 0;
    margin-left: 0;
  }
}
#cf .navbar-static-top {
  z-index: 1000;
  border-width: 0 0 1px;
}
@media (min-width: 768px) {
  #cf .navbar-static-top {
    border-radius: 0;
  }
}
#cf .navbar-fixed-top,
#cf .navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
}
@media (min-width: 768px) {
  #cf .navbar-fixed-top,
  #cf .navbar-fixed-bottom {
    border-radius: 0;
  }
}
#cf .navbar-fixed-top {
  top: 0;
  border-width: 0 0 1px;
}
#cf .navbar-fixed-bottom {
  bottom: 0;
  margin-bottom: 0;
  border-width: 1px 0 0;
}
#cf .navbar-brand {
  float: left;
  padding: 15px 15px;
  font-size: 18px;
  line-height: 20px;
  height: 50px;
}
#cf .navbar-brand:hover,
#cf .navbar-brand:focus {
  text-decoration: none;
}
#cf .navbar-brand > img {
  display: block;
}
@media (min-width: 768px) {
  .navbar > .container #cf .navbar-brand,
  .navbar > .container-fluid #cf .navbar-brand {
    margin-left: -15px;
  }
}
#cf .navbar-toggle {
  position: relative;
  float: right;
  margin-right: 15px;
  padding: 9px 10px;
  margin-top: 8px;
  margin-bottom: 8px;
  background-color: transparent;
  background-image: none;
  border: 1px solid transparent;
  border-radius: 4px;
}
#cf .navbar-toggle:focus {
  outline: 0;
}
#cf .navbar-toggle .icon-bar {
  display: block;
  width: 22px;
  height: 2px;
  border-radius: 1px;
}
#cf .navbar-toggle .icon-bar + .icon-bar {
  margin-top: 4px;
}
@media (min-width: 768px) {
  #cf .navbar-toggle {
    display: none;
  }
}
#cf .navbar-nav {
  margin: 7.5px -15px;
}
#cf .navbar-nav > li > a {
  padding-top: 10px;
  padding-bottom: 10px;
  line-height: 20px;
}
@media (max-width: 767px) {
  #cf .navbar-nav .open .dropdown-menu {
    position: static;
    float: none;
    width: auto;
    margin-top: 0;
    background-color: transparent;
    border: 0;
    box-shadow: none;
  }
  #cf .navbar-nav .open .dropdown-menu > li > a,
  #cf .navbar-nav .open .dropdown-menu .dropdown-header {
    padding: 5px 15px 5px 25px;
  }
  #cf .navbar-nav .open .dropdown-menu > li > a {
    line-height: 20px;
  }
  #cf .navbar-nav .open .dropdown-menu > li > a:hover,
  #cf .navbar-nav .open .dropdown-menu > li > a:focus {
    background-image: none;
  }
}
@media (min-width: 768px) {
  #cf .navbar-nav {
    float: left;
    margin: 0;
  }
  #cf .navbar-nav > li {
    float: left;
  }
  #cf .navbar-nav > li > a {
    padding-top: 15px;
    padding-bottom: 15px;
  }
}
#cf .navbar-form {
  margin-left: -15px;
  margin-right: -15px;
  padding: 10px 15px;
  border-top: 1px solid transparent;
  border-bottom: 1px solid transparent;
  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0
rgba(255, 255, 255, 0.1);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0
rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255,
255, 255, 0.1);
  margin-top: 8px;
  margin-bottom: 8px;
}
@media (min-width: 768px) {
  #cf .navbar-form .form-group {
    display: inline-block;
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .navbar-form .form-control {
    display: inline-block;
    width: auto;
    vertical-align: middle;
  }
  #cf .navbar-form .form-control-static {
    display: inline-block;
  }
  #cf .navbar-form .input-group {
    display: inline-table;
    vertical-align: middle;
  }
  #cf .navbar-form .input-group .input-group-addon,
  #cf .navbar-form .input-group .input-group-btn,
  #cf .navbar-form .input-group .form-control {
    width: auto;
  }
  #cf .navbar-form .input-group > .form-control {
    width: 100%;
  }
  #cf .navbar-form .control-label {
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .navbar-form .radio,
  #cf .navbar-form .checkbox {
    display: inline-block;
    margin-top: 0;
    margin-bottom: 0;
    vertical-align: middle;
  }
  #cf .navbar-form .radio label,
  #cf .navbar-form .checkbox label {
    padding-left: 0;
  }
  #cf .navbar-form .radio input[type="radio"],
  #cf .navbar-form .checkbox input[type="checkbox"] {
    position: relative;
    margin-left: 0;
  }
  #cf .navbar-form .has-feedback .form-control-feedback {
    top: 0;
  }
}
@media (max-width: 767px) {
  #cf .navbar-form .form-group {
    margin-bottom: 5px;
  }
  #cf .navbar-form .form-group:last-child {
    margin-bottom: 0;
  }
}
@media (min-width: 768px) {
  #cf .navbar-form {
    width: auto;
    border: 0;
    margin-left: 0;
    margin-right: 0;
    padding-top: 0;
    padding-bottom: 0;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
    box-shadow: none;
  }
}
#cf .navbar-nav > li > .dropdown-menu {
  margin-top: 0;
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
#cf .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  margin-bottom: 0;
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
#cf .navbar-btn {
  margin-top: 8px;
  margin-bottom: 8px;
}
#cf .navbar-btn.btn-sm {
  margin-top: 10px;
  margin-bottom: 10px;
}
#cf .navbar-btn.btn-xs {
  margin-top: 14px;
  margin-bottom: 14px;
}
#cf .navbar-text {
  margin-top: 15px;
  margin-bottom: 15px;
}
@media (min-width: 768px) {
  #cf .navbar-text {
    float: left;
    margin-left: 15px;
    margin-right: 15px;
  }
}
@media (min-width: 768px) {
  #cf .navbar-left {
    float: left !important;
  }
  #cf .navbar-right {
    float: right !important;
    margin-right: -15px;
  }
  #cf .navbar-right ~ .navbar-right {
    margin-right: 0;
  }
}
#cf .navbar-default {
  background-color: #f8f8f8;
  border-color: #e7e7e7;
}
#cf .navbar-default .navbar-brand {
  color: #777;
}
#cf .navbar-default .navbar-brand:hover,
#cf .navbar-default .navbar-brand:focus {
  color: #5e5e5e;
  background-color: transparent;
}
#cf .navbar-default .navbar-text {
  color: #777;
}
#cf .navbar-default .navbar-nav > li > a {
  color: #777;
}
#cf .navbar-default .navbar-nav > li > a:hover,
#cf .navbar-default .navbar-nav > li > a:focus {
  color: #333;
  background-color: transparent;
}
#cf .navbar-default .navbar-nav > .active > a,
#cf .navbar-default .navbar-nav > .active > a:hover,
#cf .navbar-default .navbar-nav > .active > a:focus {
  color: #555;
  background-color: #e7e7e7;
}
#cf .navbar-default .navbar-nav > .disabled > a,
#cf .navbar-default .navbar-nav > .disabled > a:hover,
#cf .navbar-default .navbar-nav > .disabled > a:focus {
  color: #ccc;
  background-color: transparent;
}
#cf .navbar-default .navbar-toggle {
  border-color: #ddd;
}
#cf .navbar-default .navbar-toggle:hover,
#cf .navbar-default .navbar-toggle:focus {
  background-color: #ddd;
}
#cf .navbar-default .navbar-toggle .icon-bar {
  background-color: #888;
}
#cf .navbar-default .navbar-collapse,
#cf .navbar-default .navbar-form {
  border-color: #e7e7e7;
}
#cf .navbar-default .navbar-nav > .open > a,
#cf .navbar-default .navbar-nav > .open > a:hover,
#cf .navbar-default .navbar-nav > .open > a:focus {
  background-color: #e7e7e7;
  color: #555;
}
@media (max-width: 767px) {
  #cf .navbar-default .navbar-nav .open .dropdown-menu > li > a {
    color: #777;
  }
  #cf .navbar-default .navbar-nav .open .dropdown-menu > li >
a:hover,
  #cf .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus
{
    color: #333;
    background-color: transparent;
  }
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .active >
a:hover,
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .active >
a:focus {
    color: #555;
    background-color: #e7e7e7;
  }
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .disabled >
a,
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .disabled >
a:hover,
  #cf .navbar-default .navbar-nav .open .dropdown-menu > .disabled >
a:focus {
    color: #ccc;
    background-color: transparent;
  }
}
#cf .navbar-default .navbar-link {
  color: #777;
}
#cf .navbar-default .navbar-link:hover {
  color: #333;
}
#cf .navbar-default .btn-link {
  color: #777;
}
#cf .navbar-default .btn-link:hover,
#cf .navbar-default .btn-link:focus {
  color: #333;
}
#cf .navbar-default .btn-link[disabled]:hover,
fieldset[disabled] #cf .navbar-default .btn-link:hover,
#cf .navbar-default .btn-link[disabled]:focus,
fieldset[disabled] #cf .navbar-default .btn-link:focus {
  color: #ccc;
}
#cf .navbar-inverse {
  background-color: #222;
  border-color: #080808;
}
#cf .navbar-inverse .navbar-brand {
  color: #9d9d9d;
}
#cf .navbar-inverse .navbar-brand:hover,
#cf .navbar-inverse .navbar-brand:focus {
  color: #fff;
  background-color: transparent;
}
#cf .navbar-inverse .navbar-text {
  color: #9d9d9d;
}
#cf .navbar-inverse .navbar-nav > li > a {
  color: #9d9d9d;
}
#cf .navbar-inverse .navbar-nav > li > a:hover,
#cf .navbar-inverse .navbar-nav > li > a:focus {
  color: #fff;
  background-color: transparent;
}
#cf .navbar-inverse .navbar-nav > .active > a,
#cf .navbar-inverse .navbar-nav > .active > a:hover,
#cf .navbar-inverse .navbar-nav > .active > a:focus {
  color: #fff;
  background-color: #080808;
}
#cf .navbar-inverse .navbar-nav > .disabled > a,
#cf .navbar-inverse .navbar-nav > .disabled > a:hover,
#cf .navbar-inverse .navbar-nav > .disabled > a:focus {
  color: #444;
  background-color: transparent;
}
#cf .navbar-inverse .navbar-toggle {
  border-color: #333;
}
#cf .navbar-inverse .navbar-toggle:hover,
#cf .navbar-inverse .navbar-toggle:focus {
  background-color: #333;
}
#cf .navbar-inverse .navbar-toggle .icon-bar {
  background-color: #fff;
}
#cf .navbar-inverse .navbar-collapse,
#cf .navbar-inverse .navbar-form {
  border-color: #101010;
}
#cf .navbar-inverse .navbar-nav > .open > a,
#cf .navbar-inverse .navbar-nav > .open > a:hover,
#cf .navbar-inverse .navbar-nav > .open > a:focus {
  background-color: #080808;
  color: #fff;
}
@media (max-width: 767px) {
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu >
.dropdown-header {
    border-color: #080808;
  }
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
    background-color: #080808;
  }
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
    color: #9d9d9d;
  }
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > li >
a:hover,
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus
{
    color: #fff;
    background-color: transparent;
  }
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .active >
a:hover,
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .active >
a:focus {
    color: #fff;
    background-color: #080808;
  }
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled >
a,
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled >
a:hover,
  #cf .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled >
a:focus {
    color: #444;
    background-color: transparent;
  }
}
#cf .navbar-inverse .navbar-link {
  color: #9d9d9d;
}
#cf .navbar-inverse .navbar-link:hover {
  color: #fff;
}
#cf .navbar-inverse .btn-link {
  color: #9d9d9d;
}
#cf .navbar-inverse .btn-link:hover,
#cf .navbar-inverse .btn-link:focus {
  color: #fff;
}
#cf .navbar-inverse .btn-link[disabled]:hover,
fieldset[disabled] #cf .navbar-inverse .btn-link:hover,
#cf .navbar-inverse .btn-link[disabled]:focus,
fieldset[disabled] #cf .navbar-inverse .btn-link:focus {
  color: #444;
}
#cf .label {
  display: inline;
  padding: .2em .6em .3em;
  font-size: 75%;
  font-weight: bold;
  line-height: 1;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  vertical-align: baseline;
  border-radius: .25em;
}
a#cf .label:hover,
a#cf .label:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
#cf .label:empty {
  display: none;
}
.btn #cf .label {
  position: relative;
  top: -1px;
}
#cf .label-default {
  background-color: #777777;
}
#cf .label-default[href]:hover,
#cf .label-default[href]:focus {
  background-color: #5e5e5e;
}
#cf .label-primary {
  background-color: #1f8ceb;
}
#cf .label-primary[href]:hover,
#cf .label-primary[href]:focus {
  background-color: #1272c5;
}
#cf .label-success {
  background-color: #28a745;
}
#cf .label-success[href]:hover,
#cf .label-success[href]:focus {
  background-color: #1e7e34;
}
#cf .label-info {
  background-color: #17a2b8;
}
#cf .label-info[href]:hover,
#cf .label-info[href]:focus {
  background-color: #117a8b;
}
#cf .label-warning {
  background-color: #ffc107;
}
#cf .label-warning[href]:hover,
#cf .label-warning[href]:focus {
  background-color: #d39e00;
}
#cf .label-danger {
  background-color: #dc3545;
}
#cf .label-danger[href]:hover,
#cf .label-danger[href]:focus {
  background-color: #bd2130;
}
#cf .badge {
  display: inline-block;
  min-width: 10px;
  padding: 3px 7px;
  font-size: 12px;
  font-weight: bold;
  color: #fff;
  line-height: 1;
  vertical-align: middle;
  white-space: nowrap;
  text-align: center;
  background-color: #777777;
  border-radius: 10px;
}
#cf .badge:empty {
  display: none;
}
.btn #cf .badge {
  position: relative;
  top: -1px;
}
.btn-xs #cf .badge,
.btn-group-xs > .btn #cf .badge {
  top: 0;
  padding: 1px 5px;
}
a#cf .badge:hover,
a#cf .badge:focus {
  color: #fff;
  text-decoration: none;
  cursor: pointer;
}
.list-group-item.active > #cf .badge,
.nav-pills > .active > a > #cf .badge {
  color: #1f8ceb;
  background-color: #fff;
}
.list-group-item > #cf .badge {
  float: right;
}
.list-group-item > #cf .badge + #cf .badge {
  margin-right: 5px;
}
.nav-pills > li > a > #cf .badge {
  margin-left: 3px;
}
#cf .thumbnail {
  display: block;
  padding: 4px;
  margin-bottom: 20px;
  line-height: 1.42857143;
  background-color: #f8fafc;
  border: 1px solid #ddd;
  border-radius: 4px;
  -moz-transition: border 0.2s ease-in-out;
  -webkit-transition: border 0.2s ease-in-out;
  -o-transition: border 0.2s ease-in-out;
  transition: border 0.2s ease-in-out;
}
#cf .thumbnail > img,
#cf .thumbnail a > img {
  margin-left: auto;
  margin-right: auto;
}
a#cf .thumbnail:hover,
a#cf .thumbnail:focus,
a#cf .thumbnail.active {
  border-color: #1f8ceb;
}
#cf .thumbnail .caption {
  padding: 9px;
  color: #333333;
}
#cf .alert {
  padding: 15px;
  margin-bottom: 20px;
  border: 1px solid transparent;
  border-radius: 4px;
}
#cf .alert h4 {
  margin-top: 0;
  color: inherit;
}
#cf .alert .alert-link {
  font-weight: bold;
}
#cf .alert > p,
#cf .alert > ul {
  margin-bottom: 0;
}
#cf .alert > p + p {
  margin-top: 5px;
}
#cf .alert-dismissable,
#cf .alert-dismissible {
  padding-right: 35px;
}
#cf .alert-dismissable .close,
#cf .alert-dismissible .close {
  position: relative;
  top: -2px;
  right: -21px;
  color: inherit;
}
#cf .alert-success {
  background-color: #dff0d8;
  border-color: #d6e9c6;
  color: #3c763d;
}
#cf .alert-success hr {
  border-top-color: #c9e2b3;
}
#cf .alert-success .alert-link {
  color: #2b542c;
}
#cf .alert-info {
  background-color: #d9edf7;
  border-color: #bce8f1;
  color: #31708f;
}
#cf .alert-info hr {
  border-top-color: #a6e1ec;
}
#cf .alert-info .alert-link {
  color: #245269;
}
#cf .alert-warning {
  background-color: #fcf8e3;
  border-color: #faebcc;
  color: #8a6d3b;
}
#cf .alert-warning hr {
  border-top-color: #f7e1b5;
}
#cf .alert-warning .alert-link {
  color: #66512c;
}
#cf .alert-danger {
  background-color: #f2dede;
  border-color: #ebccd1;
  color: #a94442;
}
#cf .alert-danger hr {
  border-top-color: #e4b9c0;
}
#cf .alert-danger .alert-link {
  color: #843534;
}
#cf .media {
  margin-top: 15px;
}
#cf .media:first-child {
  margin-top: 0;
}
#cf .media,
#cf .media-body {
  zoom: 1;
  overflow: hidden;
}
#cf .media-body {
  width: 10000px;
}
#cf .media-object {
  display: block;
}
#cf .media-object.img-thumbnail {
  max-width: none;
}
#cf .media-right,
#cf .media > .pull-right {
  padding-left: 10px;
}
#cf .media-left,
#cf .media > .pull-left {
  padding-right: 10px;
}
#cf .media-left,
#cf .media-right,
#cf .media-body {
  display: table-cell;
  vertical-align: top;
}
#cf .media-middle {
  vertical-align: middle;
}
#cf .media-bottom {
  vertical-align: bottom;
}
#cf .media-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
#cf .media-list {
  padding-left: 0;
  list-style: none;
}
#cf .list-group {
  margin-bottom: 20px;
  padding-left: 0;
}
#cf .list-group-item {
  position: relative;
  display: block;
  padding: 10px 15px;
  margin-bottom: -1px;
  background-color: #fff;
  border: 1px solid #ddd;
}
#cf .list-group-item:first-child {
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
}
#cf .list-group-item:last-child {
  margin-bottom: 0;
  border-bottom-right-radius: 4px;
  border-bottom-left-radius: 4px;
}
#cf a.list-group-item,
#cf button.list-group-item {
  color: #555;
}
#cf a.list-group-item .list-group-item-heading,
#cf button.list-group-item .list-group-item-heading {
  color: #333;
}
#cf a.list-group-item:hover,
#cf button.list-group-item:hover,
#cf a.list-group-item:focus,
#cf button.list-group-item:focus {
  text-decoration: none;
  color: #555;
  background-color: #f5f5f5;
}
#cf button.list-group-item {
  width: 100%;
  text-align: left;
}
#cf .list-group-item.disabled,
#cf .list-group-item.disabled:hover,
#cf .list-group-item.disabled:focus {
  background-color: #eeeeee;
  color: #777777;
  cursor: not-allowed;
}
#cf .list-group-item.disabled .list-group-item-heading,
#cf .list-group-item.disabled:hover .list-group-item-heading,
#cf .list-group-item.disabled:focus .list-group-item-heading {
  color: inherit;
}
#cf .list-group-item.disabled .list-group-item-text,
#cf .list-group-item.disabled:hover .list-group-item-text,
#cf .list-group-item.disabled:focus .list-group-item-text {
  color: #777777;
}
#cf .list-group-item.active,
#cf .list-group-item.active:hover,
#cf .list-group-item.active:focus {
  z-index: 2;
  color: #fff;
  background-color: #1f8ceb;
  border-color: #1f8ceb;
}
#cf .list-group-item.active .list-group-item-heading,
#cf .list-group-item.active:hover .list-group-item-heading,
#cf .list-group-item.active:focus .list-group-item-heading,
#cf .list-group-item.active .list-group-item-heading > small,
#cf .list-group-item.active:hover .list-group-item-heading > small,
#cf .list-group-item.active:focus .list-group-item-heading > small,
#cf .list-group-item.active .list-group-item-heading > .small,
#cf .list-group-item.active:hover .list-group-item-heading > .small,
#cf .list-group-item.active:focus .list-group-item-heading > .small {
  color: inherit;
}
#cf .list-group-item.active .list-group-item-text,
#cf .list-group-item.active:hover .list-group-item-text,
#cf .list-group-item.active:focus .list-group-item-text {
  color: #daecfc;
}
#cf .list-group-item-success {
  color: #3c763d;
  background-color: #dff0d8;
}
a#cf .list-group-item-success,
button#cf .list-group-item-success {
  color: #3c763d;
}
a#cf .list-group-item-success .list-group-item-heading,
button#cf .list-group-item-success .list-group-item-heading {
  color: inherit;
}
a#cf .list-group-item-success:hover,
button#cf .list-group-item-success:hover,
a#cf .list-group-item-success:focus,
button#cf .list-group-item-success:focus {
  color: #3c763d;
  background-color: #d0e9c6;
}
a#cf .list-group-item-success.active,
button#cf .list-group-item-success.active,
a#cf .list-group-item-success.active:hover,
button#cf .list-group-item-success.active:hover,
a#cf .list-group-item-success.active:focus,
button#cf .list-group-item-success.active:focus {
  color: #fff;
  background-color: #3c763d;
  border-color: #3c763d;
}
#cf .list-group-item-info {
  color: #31708f;
  background-color: #d9edf7;
}
a#cf .list-group-item-info,
button#cf .list-group-item-info {
  color: #31708f;
}
a#cf .list-group-item-info .list-group-item-heading,
button#cf .list-group-item-info .list-group-item-heading {
  color: inherit;
}
a#cf .list-group-item-info:hover,
button#cf .list-group-item-info:hover,
a#cf .list-group-item-info:focus,
button#cf .list-group-item-info:focus {
  color: #31708f;
  background-color: #c4e3f3;
}
a#cf .list-group-item-info.active,
button#cf .list-group-item-info.active,
a#cf .list-group-item-info.active:hover,
button#cf .list-group-item-info.active:hover,
a#cf .list-group-item-info.active:focus,
button#cf .list-group-item-info.active:focus {
  color: #fff;
  background-color: #31708f;
  border-color: #31708f;
}
#cf .list-group-item-warning {
  color: #8a6d3b;
  background-color: #fcf8e3;
}
a#cf .list-group-item-warning,
button#cf .list-group-item-warning {
  color: #8a6d3b;
}
a#cf .list-group-item-warning .list-group-item-heading,
button#cf .list-group-item-warning .list-group-item-heading {
  color: inherit;
}
a#cf .list-group-item-warning:hover,
button#cf .list-group-item-warning:hover,
a#cf .list-group-item-warning:focus,
button#cf .list-group-item-warning:focus {
  color: #8a6d3b;
  background-color: #faf2cc;
}
a#cf .list-group-item-warning.active,
button#cf .list-group-item-warning.active,
a#cf .list-group-item-warning.active:hover,
button#cf .list-group-item-warning.active:hover,
a#cf .list-group-item-warning.active:focus,
button#cf .list-group-item-warning.active:focus {
  color: #fff;
  background-color: #8a6d3b;
  border-color: #8a6d3b;
}
#cf .list-group-item-danger {
  color: #a94442;
  background-color: #f2dede;
}
a#cf .list-group-item-danger,
button#cf .list-group-item-danger {
  color: #a94442;
}
a#cf .list-group-item-danger .list-group-item-heading,
button#cf .list-group-item-danger .list-group-item-heading {
  color: inherit;
}
a#cf .list-group-item-danger:hover,
button#cf .list-group-item-danger:hover,
a#cf .list-group-item-danger:focus,
button#cf .list-group-item-danger:focus {
  color: #a94442;
  background-color: #ebcccc;
}
a#cf .list-group-item-danger.active,
button#cf .list-group-item-danger.active,
a#cf .list-group-item-danger.active:hover,
button#cf .list-group-item-danger.active:hover,
a#cf .list-group-item-danger.active:focus,
button#cf .list-group-item-danger.active:focus {
  color: #fff;
  background-color: #a94442;
  border-color: #a94442;
}
#cf .list-group-item-heading {
  margin-top: 0;
  margin-bottom: 5px;
}
#cf .list-group-item-text {
  margin-bottom: 0;
  line-height: 1.3;
}
#cf .panel {
  margin-bottom: 20px;
  background-color: #fff;
  border: 1px solid transparent;
  border-radius: 4px;
  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
}
#cf .panel-body {
  padding: 15px;
}
#cf .panel-heading {
  padding: 10px 15px;
  border-bottom: 1px solid transparent;
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
#cf .panel-heading > .dropdown .dropdown-toggle {
  color: inherit;
}
#cf .panel-title {
  margin-top: 0;
  margin-bottom: 0;
  font-size: 16px;
  color: inherit;
}
#cf .panel-title > a,
#cf .panel-title > small,
#cf .panel-title > .small,
#cf .panel-title > small > a,
#cf .panel-title > .small > a {
  color: inherit;
}
#cf .panel-footer {
  padding: 10px 15px;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}
#cf .panel > .list-group,
#cf .panel > .panel-collapse > .list-group {
  margin-bottom: 0;
}
#cf .panel > .list-group .list-group-item,
#cf .panel > .panel-collapse > .list-group .list-group-item {
  border-width: 1px 0;
  border-radius: 0;
}
#cf .panel > .list-group:first-child .list-group-item:first-child,
#cf .panel > .panel-collapse > .list-group:first-child
.list-group-item:first-child {
  border-top: 0;
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
#cf .panel > .list-group:last-child .list-group-item:last-child,
#cf .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;
}
#cf .panel > .panel-heading + .panel-collapse > .list-group
.list-group-item:first-child {
  border-top-right-radius: 0;
  border-top-left-radius: 0;
}
#cf .panel-heading + .list-group .list-group-item:first-child {
  border-top-width: 0;
}
#cf .list-group + .panel-footer {
  border-top-width: 0;
}
#cf .panel > .table,
#cf .panel > .table-responsive > .table,
#cf .panel > .panel-collapse > .table {
  margin-bottom: 0;
}
#cf .panel > .table caption,
#cf .panel > .table-responsive > .table caption,
#cf .panel > .panel-collapse > .table caption {
  padding-left: 15px;
  padding-right: 15px;
}
#cf .panel > .table:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child {
  border-top-right-radius: 3px;
  border-top-left-radius: 3px;
}
#cf .panel > .table:first-child > thead:first-child >
tr:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
thead:first-child > tr:first-child,
#cf .panel > .table:first-child > tbody:first-child >
tr:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
tbody:first-child > tr:first-child {
  border-top-left-radius: 3px;
  border-top-right-radius: 3px;
}
#cf .panel > .table:first-child > thead:first-child >
tr:first-child td:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
thead:first-child > tr:first-child td:first-child,
#cf .panel > .table:first-child > tbody:first-child >
tr:first-child td:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
tbody:first-child > tr:first-child td:first-child,
#cf .panel > .table:first-child > thead:first-child >
tr:first-child th:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
thead:first-child > tr:first-child th:first-child,
#cf .panel > .table:first-child > tbody:first-child >
tr:first-child th:first-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
tbody:first-child > tr:first-child th:first-child {
  border-top-left-radius: 3px;
}
#cf .panel > .table:first-child > thead:first-child >
tr:first-child td:last-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
thead:first-child > tr:first-child td:last-child,
#cf .panel > .table:first-child > tbody:first-child >
tr:first-child td:last-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
tbody:first-child > tr:first-child td:last-child,
#cf .panel > .table:first-child > thead:first-child >
tr:first-child th:last-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
thead:first-child > tr:first-child th:last-child,
#cf .panel > .table:first-child > tbody:first-child >
tr:first-child th:last-child,
#cf .panel > .table-responsive:first-child > .table:first-child >
tbody:first-child > tr:first-child th:last-child {
  border-top-right-radius: 3px;
}
#cf .panel > .table:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child {
  border-bottom-right-radius: 3px;
  border-bottom-left-radius: 3px;
}
#cf .panel > .table:last-child > tbody:last-child > tr:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tbody:last-child > tr:last-child,
#cf .panel > .table:last-child > tfoot:last-child > tr:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tfoot:last-child > tr:last-child {
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
}
#cf .panel > .table:last-child > tbody:last-child > tr:last-child
td:first-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tbody:last-child > tr:last-child td:first-child,
#cf .panel > .table:last-child > tfoot:last-child > tr:last-child
td:first-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tfoot:last-child > tr:last-child td:first-child,
#cf .panel > .table:last-child > tbody:last-child > tr:last-child
th:first-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tbody:last-child > tr:last-child th:first-child,
#cf .panel > .table:last-child > tfoot:last-child > tr:last-child
th:first-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tfoot:last-child > tr:last-child th:first-child {
  border-bottom-left-radius: 3px;
}
#cf .panel > .table:last-child > tbody:last-child > tr:last-child
td:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tbody:last-child > tr:last-child td:last-child,
#cf .panel > .table:last-child > tfoot:last-child > tr:last-child
td:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tfoot:last-child > tr:last-child td:last-child,
#cf .panel > .table:last-child > tbody:last-child > tr:last-child
th:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tbody:last-child > tr:last-child th:last-child,
#cf .panel > .table:last-child > tfoot:last-child > tr:last-child
th:last-child,
#cf .panel > .table-responsive:last-child > .table:last-child >
tfoot:last-child > tr:last-child th:last-child {
  border-bottom-right-radius: 3px;
}
#cf .panel > .panel-body + .table,
#cf .panel > .panel-body + .table-responsive,
#cf .panel > .table + .panel-body,
#cf .panel > .table-responsive + .panel-body {
  border-top: 1px solid #ddd;
}
#cf .panel > .table > tbody:first-child > tr:first-child th,
#cf .panel > .table > tbody:first-child > tr:first-child td {
  border-top: 0;
}
#cf .panel > .table-bordered,
#cf .panel > .table-responsive > .table-bordered {
  border: 0;
}
#cf .panel > .table-bordered > thead > tr > th:first-child,
#cf .panel > .table-responsive > .table-bordered > thead > tr
> th:first-child,
#cf .panel > .table-bordered > tbody > tr > th:first-child,
#cf .panel > .table-responsive > .table-bordered > tbody > tr
> th:first-child,
#cf .panel > .table-bordered > tfoot > tr > th:first-child,
#cf .panel > .table-responsive > .table-bordered > tfoot > tr
> th:first-child,
#cf .panel > .table-bordered > thead > tr > td:first-child,
#cf .panel > .table-responsive > .table-bordered > thead > tr
> td:first-child,
#cf .panel > .table-bordered > tbody > tr > td:first-child,
#cf .panel > .table-responsive > .table-bordered > tbody > tr
> td:first-child,
#cf .panel > .table-bordered > tfoot > tr > td:first-child,
#cf .panel > .table-responsive > .table-bordered > tfoot > tr
> td:first-child {
  border-left: 0;
}
#cf .panel > .table-bordered > thead > tr > th:last-child,
#cf .panel > .table-responsive > .table-bordered > thead > tr
> th:last-child,
#cf .panel > .table-bordered > tbody > tr > th:last-child,
#cf .panel > .table-responsive > .table-bordered > tbody > tr
> th:last-child,
#cf .panel > .table-bordered > tfoot > tr > th:last-child,
#cf .panel > .table-responsive > .table-bordered > tfoot > tr
> th:last-child,
#cf .panel > .table-bordered > thead > tr > td:last-child,
#cf .panel > .table-responsive > .table-bordered > thead > tr
> td:last-child,
#cf .panel > .table-bordered > tbody > tr > td:last-child,
#cf .panel > .table-responsive > .table-bordered > tbody > tr
> td:last-child,
#cf .panel > .table-bordered > tfoot > tr > td:last-child,
#cf .panel > .table-responsive > .table-bordered > tfoot > tr
> td:last-child {
  border-right: 0;
}
#cf .panel > .table-bordered > thead > tr:first-child > td,
#cf .panel > .table-responsive > .table-bordered > thead >
tr:first-child > td,
#cf .panel > .table-bordered > tbody > tr:first-child > td,
#cf .panel > .table-responsive > .table-bordered > tbody >
tr:first-child > td,
#cf .panel > .table-bordered > thead > tr:first-child > th,
#cf .panel > .table-responsive > .table-bordered > thead >
tr:first-child > th,
#cf .panel > .table-bordered > tbody > tr:first-child > th,
#cf .panel > .table-responsive > .table-bordered > tbody >
tr:first-child > th {
  border-bottom: 0;
}
#cf .panel > .table-bordered > tbody > tr:last-child > td,
#cf .panel > .table-responsive > .table-bordered > tbody >
tr:last-child > td,
#cf .panel > .table-bordered > tfoot > tr:last-child > td,
#cf .panel > .table-responsive > .table-bordered > tfoot >
tr:last-child > td,
#cf .panel > .table-bordered > tbody > tr:last-child > th,
#cf .panel > .table-responsive > .table-bordered > tbody >
tr:last-child > th,
#cf .panel > .table-bordered > tfoot > tr:last-child > th,
#cf .panel > .table-responsive > .table-bordered > tfoot >
tr:last-child > th {
  border-bottom: 0;
}
#cf .panel > .table-responsive {
  border: 0;
  margin-bottom: 0;
}
#cf .panel-group {
  margin-bottom: 20px;
}
#cf .panel-group .panel {
  margin-bottom: 0;
  border-radius: 4px;
}
#cf .panel-group .panel + .panel {
  margin-top: 5px;
}
#cf .panel-group .panel-heading {
  border-bottom: 0;
}
#cf .panel-group .panel-heading + .panel-collapse > .panel-body,
#cf .panel-group .panel-heading + .panel-collapse > .list-group {
  border-top: 1px solid #ddd;
}
#cf .panel-group .panel-footer {
  border-top: 0;
}
#cf .panel-group .panel-footer + .panel-collapse .panel-body {
  border-bottom: 1px solid #ddd;
}
#cf .panel-default {
  border-color: #ddd;
}
#cf .panel-default > .panel-heading {
  color: #333333;
  background-color: #f5f5f5;
  border-color: #ddd;
}
#cf .panel-default > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ddd;
}
#cf .panel-default > .panel-heading .badge {
  color: #f5f5f5;
  background-color: #333333;
}
#cf .panel-default > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ddd;
}
#cf .panel-primary {
  border-color: #1f8ceb;
}
#cf .panel-primary > .panel-heading {
  color: #fff;
  background-color: #1f8ceb;
  border-color: #1f8ceb;
}
#cf .panel-primary > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #1f8ceb;
}
#cf .panel-primary > .panel-heading .badge {
  color: #1f8ceb;
  background-color: #fff;
}
#cf .panel-primary > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #1f8ceb;
}
#cf .panel-success {
  border-color: #d6e9c6;
}
#cf .panel-success > .panel-heading {
  color: #3c763d;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}
#cf .panel-success > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #d6e9c6;
}
#cf .panel-success > .panel-heading .badge {
  color: #dff0d8;
  background-color: #3c763d;
}
#cf .panel-success > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #d6e9c6;
}
#cf .panel-info {
  border-color: #bce8f1;
}
#cf .panel-info > .panel-heading {
  color: #31708f;
  background-color: #d9edf7;
  border-color: #bce8f1;
}
#cf .panel-info > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #bce8f1;
}
#cf .panel-info > .panel-heading .badge {
  color: #d9edf7;
  background-color: #31708f;
}
#cf .panel-info > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #bce8f1;
}
#cf .panel-warning {
  border-color: #faebcc;
}
#cf .panel-warning > .panel-heading {
  color: #8a6d3b;
  background-color: #fcf8e3;
  border-color: #faebcc;
}
#cf .panel-warning > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #faebcc;
}
#cf .panel-warning > .panel-heading .badge {
  color: #fcf8e3;
  background-color: #8a6d3b;
}
#cf .panel-warning > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #faebcc;
}
#cf .panel-danger {
  border-color: #ebccd1;
}
#cf .panel-danger > .panel-heading {
  color: #a94442;
  background-color: #f2dede;
  border-color: #ebccd1;
}
#cf .panel-danger > .panel-heading + .panel-collapse > .panel-body {
  border-top-color: #ebccd1;
}
#cf .panel-danger > .panel-heading .badge {
  color: #f2dede;
  background-color: #a94442;
}
#cf .panel-danger > .panel-footer + .panel-collapse > .panel-body {
  border-bottom-color: #ebccd1;
}
#cf .embed-responsive {
  position: relative;
  display: block;
  height: 0;
  padding: 0;
  overflow: hidden;
}
#cf .embed-responsive .embed-responsive-item,
#cf .embed-responsive iframe,
#cf .embed-responsive embed,
#cf .embed-responsive object,
#cf .embed-responsive video {
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  height: 100%;
  width: 100%;
  border: 0;
}
#cf .embed-responsive-16by9 {
  padding-bottom: 56.25%;
}
#cf .embed-responsive-4by3 {
  padding-bottom: 75%;
}
#cf .well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  border-radius: 4px;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}
#cf .well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}
#cf .well-lg {
  padding: 24px;
  border-radius: 6px;
}
#cf .well-sm {
  padding: 9px;
  border-radius: 3px;
}
#cf .close {
  float: right;
  font-size: 21px;
  font-weight: bold;
  line-height: 1;
  color: #000;
  text-shadow: 0 1px 0 #fff;
  zoom: 1;
  -webkit-opacity: 0.2;
  -moz-opacity: 0.2;
  opacity: 0.2;
  filter: alpha(opacity=20);
}
#cf .close:hover,
#cf .close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
  zoom: 1;
  -webkit-opacity: 0.5;
  -moz-opacity: 0.5;
  opacity: 0.5;
  filter: alpha(opacity=50);
}
button#cf .close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}
#cf .tx-main {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  background: #f8fafc;
  width: 100%;
}
#cf .page-header {
  background: #f8fafc;
  border-bottom: 1px solid #e9eef2;
  padding: 10px 30px;
}
#cf .page-header h1,
#cf .page-header h2 {
  font-size: 20px;
  color: #1d364b;
}
#cf .page-content {
  padding: 10px 30px;
}
#cf .text-uppercase {
  text-transform: uppercase;
}
#cf .mt-s {
  margin-top: 10px;
}
#cf .mr-s {
  margin-right: 10px;
}
#cf .mb-s {
  margin-bottom: 10px;
}
#cf .ml-s {
  margin-left: 10px;
}
#cf .mt-m {
  margin-top: 20px;
}
#cf .mr-m {
  margin-right: 20px;
}
#cf .mb-m {
  margin-bottom: 20px;
}
#cf .ml-m {
  margin-left: 20px;
}
#cf .clearfix:before,
#cf .clearfix:after,
#cf #cf .container:before,
#cf #cf .container:after,
#cf #cf .container-fluid:before,
#cf #cf .container-fluid:after,
#cf #cf .row:before,
#cf #cf .row:after,
#cf #cf .form-horizontal .form-group:before,
#cf #cf .form-horizontal .form-group:after,
#cf #cf .btn-toolbar:before,
#cf #cf .btn-toolbar:after,
#cf #cf .btn-group-vertical > .btn-group:before,
#cf #cf .btn-group-vertical > .btn-group:after,
#cf #cf .nav:before,
#cf #cf .nav:after,
#cf #cf .navbar:before,
#cf #cf .navbar:after,
#cf #cf .navbar-header:before,
#cf #cf .navbar-header:after,
#cf #cf .navbar-collapse:before,
#cf #cf .navbar-collapse:after,
#cf #cf .panel-body:before,
#cf #cf .panel-body:after {
  content: " ";
  display: table;
}
#cf .clearfix:after,
#cf #cf .container:after,
#cf #cf .container-fluid:after,
#cf #cf .row:after,
#cf #cf .form-horizontal .form-group:after,
#cf #cf .btn-toolbar:after,
#cf #cf .btn-group-vertical > .btn-group:after,
#cf #cf .nav:after,
#cf #cf .navbar:after,
#cf #cf .navbar-header:after,
#cf #cf .navbar-collapse:after,
#cf #cf .panel-body:after {
  clear: both;
}
#cf .center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
#cf .pull-right {
  float: right !important;
}
#cf .pull-left {
  float: left !important;
}
#cf .tx-sidebar {
  min-width: 240px;
  padding: 20px;
  background: #fff;
  border-right: 1px solid #e9eef2;
}
#cf .tx-sidebar .nav-list {
  padding: 0;
}
#cf .tx-sidebar .nav-list > li > a {
  margin-left: 0;
  margin-right: 0;
  color: #333;
  margin-bottom: 10px;
  -webkit-border-radius: 4px;
  -webkit-background-clip: padding-box;
  -moz-border-radius: 4px;
  -moz-background-clip: padding;
  border-radius: 4px;
  background-clip: padding-box;
}
#cf .tx-sidebar .nav-list > li > a > i {
  margin-right: 8px;
}
#cf .tx-sidebar .nav-list > li.active > a,
#cf .tx-sidebar .nav-list > li.active > a:hover {
  background: #e8f3fd;
  color: #1f8ceb;
  font-weight: bold;
}
#cf .tx-sidebar .nav-list > li > a:hover {
  background: #e8f3fd;
}
#cf .btn-success,
#cf .btn-success.active,
#cf .btn-success:hover {
  background: #28a745;
}
#cf .btn-danger,
#cf .btn-danger.active,
#cf .btn-danger:hover {
  background: #dc3545;
}
#cf .modal {
  width: 768px;
  margin-left: calc(-384px);
  border: 0;
  box-shadow: none;
  border-radius: 0;
}
#cf .modal-header {
  background: #1f8ceb;
  color: #fff;
}
#cf .modal-header .close {
  margin-right: -20px;
  line-height: 40px;
}
#cf .modal-header h3 {
  color: #fff;
}
#cf .modal-body {
  padding: 20px;
  box-sizing: border-box;
}
#cf .modal-footer {
  box-shadow: none;
  border: 0;
  border-radius: 0;
}
#cf .modal-footer .btn {
  background: #fff;
  color: #1f8ceb;
}
#cf .switch,
#cf .switch * {
  -webkit-user-select: none;
  -moz-user-select: none;
  -khtml-user-select: none;
  -ms-user-select: none;
  height: 30px;
  position: relative;
}
#cf .switch label {
  cursor: pointer;
  top: 0;
  left: 0;
}
#cf .switch label input[type=checkbox] {
  opacity: 0;
  width: 0;
  height: 0;
}
#cf .switch label input[type=checkbox]:checked + .lever {
  background-color: #40D874;
  -moz-box-shadow: 0 0 3px #1ca74b inset;
  -webkit-box-shadow: 0 0 3px #1ca74b inset;
  box-shadow: 0 0 3px #1ca74b inset;
}
#cf .switch label input[type=checkbox]:checked + .lever:after {
  background-color: #fff;
  left: 30px;
}
#cf .switch label .lever {
  content: "";
  display: inline-block;
  position: relative;
  width: 60px;
  height: 30px;
  background-color: #505B64;
  border-radius: 2px;
  margin-right: 10px;
  transition: background 0.3s ease;
  vertical-align: middle;
  margin: 0;
}
#cf .switch label .lever:after {
  content: "";
  position: absolute;
  display: inline-block;
  width: 25px;
  height: 20px;
  background-color: #fff;
  border-radius: 2px;
  left: 5px;
  top: 5px;
  z-index: 2;
  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
  transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
}
#cf .switch .label {
  position: absolute;
  top: 50%;
  width: 50%;
  z-index: 1;
  -webkit-transform: translateY(-50%);
  -moz-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  -o-transform: translateY(-50%);
  transform: translateY(-50%);
  font-size: 12px;
  font-weight: 700;
  text-align: center;
  text-transform: uppercase;
  height: auto;
  color: #fff;
}
#cf .switch .label-no {
  right: 2.5px;
  color: #cdcfd2;
}
#cf .switch .label-yes {
  left: 2.5px;
}
#cf .panel-disabled {
  background: #f5f5f5;
}
#cf .panel-default {
  background: #fff;
  border: 1px solid #e9eef2;
  box-shadow: 0 6px 8px rgba(102, 119, 136, 0.03), 0 1px 2px rgba(102, 119,
136, 0.3);
}
#cf .panel-default .panel-heading,
#cf .panel-default .panel-footer {
  background: #f6f7f9;
  border-color: #e9eef2;
  color: #678;
  text-shadow: 0px 1px rgba(255, 255, 255, 0.5);
}
#cf .panel-default > .panel-heading {
  padding: 20px 15px;
  font-size: 15px;
  font-weight: bold;
  background: #fff;
}
#cf .page-header .nav-tabs {
  border-bottom: 0;
  margin-bottom: -10px;
}
#cf .nav-tabs > li > a {
  color: #a1a8ae;
  font-size: 15px;
  font-weight: bold;
}
#cf .nav-tabs > li:hover > a {
  background: transparent;
  border: 1px solid transparent;
  color: #1f8ceb;
}
#cf .nav-tabs > li.active > a,
#cf .nav-tabs > li.active > a:focus,
#cf .nav-tabs > li.active > a:hover {
  background: transparent;
  border: 0;
  color: #1f8ceb;
  border-bottom: 2px solid #1f8ceb;
}
#cf textarea,
#cf input[type="text"],
#cf input[type="password"],
#cf input[type="datetime"],
#cf input[type="datetime-local"],
#cf input[type="date"],
#cf input[type="month"],
#cf input[type="time"],
#cf input[type="week"],
#cf input[type="number"],
#cf input[type="email"],
#cf input[type="url"],
#cf input[type="search"],
#cf input[type="tel"],
#cf input[type="color"],
#cf .uneditable-input {
  display: block;
  width: 100%;
  height: 34px;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow
ease-in-out .15s;
  -moz-transition: border-color ease-in-out .15s, -moz-box-shadow
ease-in-out .15s;
  -webkit-transition: border-color ease-in-out .15s, 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;
  border-color: #e9eef2;
}
#cf textarea:focus,
#cf input[type="text"]:focus,
#cf input[type="password"]:focus,
#cf input[type="datetime"]:focus,
#cf input[type="datetime-local"]:focus,
#cf input[type="date"]:focus,
#cf input[type="month"]:focus,
#cf input[type="time"]:focus,
#cf input[type="week"]:focus,
#cf input[type="number"]:focus,
#cf input[type="email"]:focus,
#cf input[type="url"]:focus,
#cf input[type="search"]:focus,
#cf input[type="tel"]:focus,
#cf input[type="color"]:focus,
#cf .uneditable-input:focus {
  border-color: #66afe9;
  outline: 0;
  -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175,
233, 0.6);
  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102,
175, 233, 0.6);
  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233,
0.6);
}
#cf textarea::-webkit-input-placeholder,
#cf input[type="text"]::-webkit-input-placeholder,
#cf input[type="password"]::-webkit-input-placeholder,
#cf input[type="datetime"]::-webkit-input-placeholder,
#cf input[type="datetime-local"]::-webkit-input-placeholder,
#cf input[type="date"]::-webkit-input-placeholder,
#cf input[type="month"]::-webkit-input-placeholder,
#cf input[type="time"]::-webkit-input-placeholder,
#cf input[type="week"]::-webkit-input-placeholder,
#cf input[type="number"]::-webkit-input-placeholder,
#cf input[type="email"]::-webkit-input-placeholder,
#cf input[type="url"]::-webkit-input-placeholder,
#cf input[type="search"]::-webkit-input-placeholder,
#cf input[type="tel"]::-webkit-input-placeholder,
#cf input[type="color"]::-webkit-input-placeholder,
#cf .uneditable-input::-webkit-input-placeholder {
  color: #aaa;
}
#cf textarea:-moz-placeholder,
#cf input[type="text"]:-moz-placeholder,
#cf input[type="password"]:-moz-placeholder,
#cf input[type="datetime"]:-moz-placeholder,
#cf input[type="datetime-local"]:-moz-placeholder,
#cf input[type="date"]:-moz-placeholder,
#cf input[type="month"]:-moz-placeholder,
#cf input[type="time"]:-moz-placeholder,
#cf input[type="week"]:-moz-placeholder,
#cf input[type="number"]:-moz-placeholder,
#cf input[type="email"]:-moz-placeholder,
#cf input[type="url"]:-moz-placeholder,
#cf input[type="search"]:-moz-placeholder,
#cf input[type="tel"]:-moz-placeholder,
#cf input[type="color"]:-moz-placeholder,
#cf .uneditable-input:-moz-placeholder {
  color: #aaa;
}
#cf textarea::-moz-placeholder,
#cf input[type="text"]::-moz-placeholder,
#cf input[type="password"]::-moz-placeholder,
#cf input[type="datetime"]::-moz-placeholder,
#cf input[type="datetime-local"]::-moz-placeholder,
#cf input[type="date"]::-moz-placeholder,
#cf input[type="month"]::-moz-placeholder,
#cf input[type="time"]::-moz-placeholder,
#cf input[type="week"]::-moz-placeholder,
#cf input[type="number"]::-moz-placeholder,
#cf input[type="email"]::-moz-placeholder,
#cf input[type="url"]::-moz-placeholder,
#cf input[type="search"]::-moz-placeholder,
#cf input[type="tel"]::-moz-placeholder,
#cf input[type="color"]::-moz-placeholder,
#cf .uneditable-input::-moz-placeholder {
  color: #aaa;
}
#cf textarea:-ms-input-placeholder,
#cf input[type="text"]:-ms-input-placeholder,
#cf input[type="password"]:-ms-input-placeholder,
#cf input[type="datetime"]:-ms-input-placeholder,
#cf input[type="datetime-local"]:-ms-input-placeholder,
#cf input[type="date"]:-ms-input-placeholder,
#cf input[type="month"]:-ms-input-placeholder,
#cf input[type="time"]:-ms-input-placeholder,
#cf input[type="week"]:-ms-input-placeholder,
#cf input[type="number"]:-ms-input-placeholder,
#cf input[type="email"]:-ms-input-placeholder,
#cf input[type="url"]:-ms-input-placeholder,
#cf input[type="search"]:-ms-input-placeholder,
#cf input[type="tel"]:-ms-input-placeholder,
#cf input[type="color"]:-ms-input-placeholder,
#cf .uneditable-input:-ms-input-placeholder {
  color: #aaa;
}
#cf textarea::-moz-placeholder,
#cf input[type="text"]::-moz-placeholder,
#cf input[type="password"]::-moz-placeholder,
#cf input[type="datetime"]::-moz-placeholder,
#cf input[type="datetime-local"]::-moz-placeholder,
#cf input[type="date"]::-moz-placeholder,
#cf input[type="month"]::-moz-placeholder,
#cf input[type="time"]::-moz-placeholder,
#cf input[type="week"]::-moz-placeholder,
#cf input[type="number"]::-moz-placeholder,
#cf input[type="email"]::-moz-placeholder,
#cf input[type="url"]::-moz-placeholder,
#cf input[type="search"]::-moz-placeholder,
#cf input[type="tel"]::-moz-placeholder,
#cf input[type="color"]::-moz-placeholder,
#cf .uneditable-input::-moz-placeholder {
  color: #999;
  opacity: 1;
}
#cf textarea:-ms-input-placeholder,
#cf input[type="text"]:-ms-input-placeholder,
#cf input[type="password"]:-ms-input-placeholder,
#cf input[type="datetime"]:-ms-input-placeholder,
#cf input[type="datetime-local"]:-ms-input-placeholder,
#cf input[type="date"]:-ms-input-placeholder,
#cf input[type="month"]:-ms-input-placeholder,
#cf input[type="time"]:-ms-input-placeholder,
#cf input[type="week"]:-ms-input-placeholder,
#cf input[type="number"]:-ms-input-placeholder,
#cf input[type="email"]:-ms-input-placeholder,
#cf input[type="url"]:-ms-input-placeholder,
#cf input[type="search"]:-ms-input-placeholder,
#cf input[type="tel"]:-ms-input-placeholder,
#cf input[type="color"]:-ms-input-placeholder,
#cf .uneditable-input:-ms-input-placeholder {
  color: #999;
}
#cf textarea::-webkit-input-placeholder,
#cf input[type="text"]::-webkit-input-placeholder,
#cf input[type="password"]::-webkit-input-placeholder,
#cf input[type="datetime"]::-webkit-input-placeholder,
#cf input[type="datetime-local"]::-webkit-input-placeholder,
#cf input[type="date"]::-webkit-input-placeholder,
#cf input[type="month"]::-webkit-input-placeholder,
#cf input[type="time"]::-webkit-input-placeholder,
#cf input[type="week"]::-webkit-input-placeholder,
#cf input[type="number"]::-webkit-input-placeholder,
#cf input[type="email"]::-webkit-input-placeholder,
#cf input[type="url"]::-webkit-input-placeholder,
#cf input[type="search"]::-webkit-input-placeholder,
#cf input[type="tel"]::-webkit-input-placeholder,
#cf input[type="color"]::-webkit-input-placeholder,
#cf .uneditable-input::-webkit-input-placeholder {
  color: #999;
}
#cf textarea::-ms-expand,
#cf input[type="text"]::-ms-expand,
#cf input[type="password"]::-ms-expand,
#cf input[type="datetime"]::-ms-expand,
#cf input[type="datetime-local"]::-ms-expand,
#cf input[type="date"]::-ms-expand,
#cf input[type="month"]::-ms-expand,
#cf input[type="time"]::-ms-expand,
#cf input[type="week"]::-ms-expand,
#cf input[type="number"]::-ms-expand,
#cf input[type="email"]::-ms-expand,
#cf input[type="url"]::-ms-expand,
#cf input[type="search"]::-ms-expand,
#cf input[type="tel"]::-ms-expand,
#cf input[type="color"]::-ms-expand,
#cf .uneditable-input::-ms-expand {
  border: 0;
  background-color: transparent;
}
#cf textarea[disabled],
#cf input[type="text"][disabled],
#cf input[type="password"][disabled],
#cf input[type="datetime"][disabled],
#cf input[type="datetime-local"][disabled],
#cf input[type="date"][disabled],
#cf input[type="month"][disabled],
#cf input[type="time"][disabled],
#cf input[type="week"][disabled],
#cf input[type="number"][disabled],
#cf input[type="email"][disabled],
#cf input[type="url"][disabled],
#cf input[type="search"][disabled],
#cf input[type="tel"][disabled],
#cf input[type="color"][disabled],
#cf .uneditable-input[disabled],
#cf textarea[readonly],
#cf input[type="text"][readonly],
#cf input[type="password"][readonly],
#cf input[type="datetime"][readonly],
#cf input[type="datetime-local"][readonly],
#cf input[type="date"][readonly],
#cf input[type="month"][readonly],
#cf input[type="time"][readonly],
#cf input[type="week"][readonly],
#cf input[type="number"][readonly],
#cf input[type="email"][readonly],
#cf input[type="url"][readonly],
#cf input[type="search"][readonly],
#cf input[type="tel"][readonly],
#cf input[type="color"][readonly],
#cf .uneditable-input[readonly],
fieldset[disabled] #cf textarea,
fieldset[disabled] #cf input[type="text"],
fieldset[disabled] #cf input[type="password"],
fieldset[disabled] #cf input[type="datetime"],
fieldset[disabled] #cf input[type="datetime-local"],
fieldset[disabled] #cf input[type="date"],
fieldset[disabled] #cf input[type="month"],
fieldset[disabled] #cf input[type="time"],
fieldset[disabled] #cf input[type="week"],
fieldset[disabled] #cf input[type="number"],
fieldset[disabled] #cf input[type="email"],
fieldset[disabled] #cf input[type="url"],
fieldset[disabled] #cf input[type="search"],
fieldset[disabled] #cf input[type="tel"],
fieldset[disabled] #cf input[type="color"],
fieldset[disabled] #cf .uneditable-input {
  background-color: #eeeeee;
  opacity: 1;
}
#cf textarea[disabled],
#cf input[type="text"][disabled],
#cf input[type="password"][disabled],
#cf input[type="datetime"][disabled],
#cf input[type="datetime-local"][disabled],
#cf input[type="date"][disabled],
#cf input[type="month"][disabled],
#cf input[type="time"][disabled],
#cf input[type="week"][disabled],
#cf input[type="number"][disabled],
#cf input[type="email"][disabled],
#cf input[type="url"][disabled],
#cf input[type="search"][disabled],
#cf input[type="tel"][disabled],
#cf input[type="color"][disabled],
#cf .uneditable-input[disabled],
fieldset[disabled] #cf textarea,
fieldset[disabled] #cf input[type="text"],
fieldset[disabled] #cf input[type="password"],
fieldset[disabled] #cf input[type="datetime"],
fieldset[disabled] #cf input[type="datetime-local"],
fieldset[disabled] #cf input[type="date"],
fieldset[disabled] #cf input[type="month"],
fieldset[disabled] #cf input[type="time"],
fieldset[disabled] #cf input[type="week"],
fieldset[disabled] #cf input[type="number"],
fieldset[disabled] #cf input[type="email"],
fieldset[disabled] #cf input[type="url"],
fieldset[disabled] #cf input[type="search"],
fieldset[disabled] #cf input[type="tel"],
fieldset[disabled] #cf input[type="color"],
fieldset[disabled] #cf .uneditable-input {
  cursor: not-allowed;
}
textarea#cf textarea,
textarea#cf input[type="text"],
textarea#cf input[type="password"],
textarea#cf input[type="datetime"],
textarea#cf input[type="datetime-local"],
textarea#cf input[type="date"],
textarea#cf input[type="month"],
textarea#cf input[type="time"],
textarea#cf input[type="week"],
textarea#cf input[type="number"],
textarea#cf input[type="email"],
textarea#cf input[type="url"],
textarea#cf input[type="search"],
textarea#cf input[type="tel"],
textarea#cf input[type="color"],
textarea#cf .uneditable-input {
  height: auto;
}
#cf textarea:focus,
#cf input[type="text"]:focus,
#cf input[type="password"]:focus,
#cf input[type="datetime"]:focus,
#cf input[type="datetime-local"]:focus,
#cf input[type="date"]:focus,
#cf input[type="month"]:focus,
#cf input[type="time"]:focus,
#cf input[type="week"]:focus,
#cf input[type="number"]:focus,
#cf input[type="email"]:focus,
#cf input[type="url"]:focus,
#cf input[type="search"]:focus,
#cf input[type="tel"]:focus,
#cf input[type="color"]:focus,
#cf .uneditable-input:focus {
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25) !important;
}
#cf textarea {
  height: auto;
}
#cf .input-append,
#cf .input-prepend {
  display: inline-table;
}
#cf .input-append .add-on,
#cf .input-prepend .add-on,
#cf .input-append .btn,
#cf .input-prepend .btn {
  display: table-cell;
}
#cf .input-append input[type="text"],
#cf .input-prepend input[type="text"] {
  -webkit-border-radius: 0;
  -webkit-background-clip: padding-box;
  -moz-border-radius: 0;
  -moz-background-clip: padding;
  border-radius: 0;
  background-clip: padding-box;
  border-right: 0;
  height: 35px;
}
#cf .input-append .btn,
#cf .input-prepend .btn {
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}
#cf .input-append .add-on:first-child,
#cf .input-prepend .add-on:first-child {
  border-right: 0;
}
#cf .input-append .field-media-preview,
#cf .input-prepend .field-media-preview {
  line-height: 33px;
  height: 33px;
  padding: 0 10px;
  text-align: center;
}
#cf .input-append .field-media-preview [class^="icon-"],
#cf .input-prepend .field-media-preview [class^="icon-"],
#cf .input-append .field-media-preview [class*=" icon-"],
#cf .input-prepend .field-media-preview [class*=" icon-"] {
  margin: 0;
}
#cf .input-append .add-on.button-select,
#cf .input-prepend .add-on.button-select {
  -webkit-border-radius: 0;
  -webkit-background-clip: padding-box;
  -moz-border-radius: 0;
  -moz-background-clip: padding;
  border-radius: 0;
  background-clip: padding-box;
  background: #1f8ceb;
  color: #fff;
}
#cf .btn-group-vertical > .btn:not(:first-child):not(:last-child),
#cf .btn-group > .btn-group:not(:first-child):not(:last-child) >
.btn,
#cf .btn-group >
.btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
  border-radius: auto;
  border: 1px solid #ddd;
}
#cf .btn-group .btn {
  padding: 6px 15px;
}
#cf .btn-group > .btn-success {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
}
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-single,
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-drop,
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-single div
{
  border-color: #4ea4ef;
  text-decoration: none;
}
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-single {
  line-height: 30px;
  color: #222;
}
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-single div
{
  background: #fff;
}
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-results li
{
  line-height: 25px;
}
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-results
> li.result-selected,
#cf .chzn-container-single.chzn-container-single-nosearch .chzn-results
> li:hover {
  background: #4ea4ef;
  color: #fff;
}
#cf .navbar .navbar-form input,
#cf .navbar .navbar-form select,
#cf .navbar .navbar-form .radio,
#cf .navbar .navbar-form .checkbox,
#cf .navbar .navbar-form .btn {
  margin-top: 0;
}
#cf .page-header .navbar {
  background: #fff;
  margin: 20px -30px -10px -31px;
  border-radius: 0;
  border-left: 0;
  border-right: 0;
  border-bottom: 0;
  border-color: #e9eef2;
}
#cf .page-header .navbar-form.navbar-left {
  padding-left: 0;
}
#cf .int-logo {
  max-height: 45px;
}
#cf .request-block {
  margin-top: 40px;
  padding: 30px;
  background: #fff;
  border: 1px solid #ddd;
}
#cf.templates .media-heading {
  padding-bottom: 14px;
  margin-bottom: 10px;
  border-bottom: 1px solid #eee;
}
#cf .tx-action-btns {
  width: 20%;
  padding-left: 40px;
  vertical-align: middle;
}
#cf.events .table {
  background: #fff;
  -moz-box-shadow: 0 0 10px #ddd;
  -webkit-box-shadow: 0 0 10px #ddd;
  box-shadow: 0 0 10px #ddd;
}
#cf.events .table td {
  vertical-align: middle;
}
body.contentpane.component {
  padding: 0px;
}
body.contentpane.component #general h3,
body.contentpane.component #general .info-labels,
body.contentpane.component #general .info-labels + div,
body.contentpane.component #general .info-labels + div + hr,
body.contentpane.component .nav.nav-tabs {
  display: none;
}
body.contentpane.component .span3 > .form-vertical > .control-group +
.control-group,
body.contentpane.component .form-vertical + .form-vertical {
  display: none;
}
body.contentpane.component .form-vertical .control-group {
  display: flex;
}css/notifly-core.css000064400000010017151163010210010445 0ustar00/*!
 * notifly-core.css
 * https://www.themexpert.com/
 * Version: 1.0.0
 *
 * Copyright ThemeXpert
 * Released under the MIT license
 * https://www.themexpert.com/notifly
 */

#notifly-wrapper
{
    display: none;
    position: fixed;
    bottom: 20px;
    left: 20px;
    z-index: 99;
    box-sizing: border-box;
}
#notifly-wrapper #close{
    position: absolute;
    top: 0px;
    right: 0px;
    opacity: 0;
    cursor: pointer;
    -webkit-transition: opacity 0.5s; /* Safari */
    transition: opacity 0.5s;
    color: #d1d1d1;
}
#notifly-wrapper:hover #close{
    opacity: 1;
    cursor: pointer;
}
#notifly-wrapper #close span{
    padding: 0px 6px 0px 5px;
}
#notifly-wrapper #image{
    text-align: center;
    cursor: pointer;
}
#notifly-wrapper #text{
    cursor: pointer;
    margin-bottom: 20px;
    padding-left: 15px;
    box-sizing: border-box;
}
#notifly-wrapper #text p{
    margin-bottom: 0px;
    line-height: 1.3;
}
#notifly-wrapper #text p+p:last-child{
    color: #999;
    font-size: 80%;
    margin-top: 10px;
    margin-bottom: -18px; 
}
#notifly-wrapper .card-small img {
    max-height: 60px;
    border-radius: 50%
}
#notifly-wrapper img {
    max-width: 100%;
    height: auto;
    border: 0;
    vertical-align: middle;
}
#notifly-wrapper .card, 
.card-small {
    background: #fff;
    box-shadow: 6px 6px 20px rgba(0,0,0,.04);
    position: relative;
}
#notifly-wrapper .card-small {
    border-radius: 6px;
    padding: 10px;
    color: #4d4d4d;
    font-size: 14px;
    border: 1px solid #f8f8f8;
}

#notifly-wrapper .card-small--blue {
    color: #3ca0ff;
    border: 1px solid rgba(60, 160, 255, 0.2);
}
#notifly-wrapper .card-small--blue #text p:last-child{
    color: rgb(140, 199, 255);
}

#notifly-wrapper .flex--align-vertical {
    -webkit-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    margin: 0px;
}
#notifly-wrapper .flex {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -ms-flex-wrap: wrap;
    flex-wrap: wrap;
    margin: 0px;
}
#notifly-wrapper .flex__fill-gap {
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
}
@media only screen and (min-width: 0px){
    #notifly-wrapper .col-nano-3 {
        max-width: 20%;
        -ms-flex-preferred-size: 20%;
        flex-basis: 20%;
    }
}
@media only screen and (min-width: 0px){
    #notifly-wrapper .col-nano-9 {
        max-width: 80%;
        -ms-flex-preferred-size: 80%;
        flex-basis: 80%;
    }
}
#notifly-wrapper.active{
    animation: scale-display .3s;
}
#notifly-wrapper.out {
    animation: scale-display--reversed .3s;
    animation-fill-mode:forwards;
}
#notifly-wrapper .poweredBy {
    position: absolute;
    right: 15px;
    bottom: 10px;
    font-size: 11px;
    color: #999;
}
#notifly-wrapper .poweredBy i{
    position: relative;
    display: block;
}
#notifly-wrapper .poweredBy i svg{
    position: absolute;
    top: 2px;
    left: -10px;
}
#notifly-wrapper .poweredBy a{
    color: #f97362;
}

@media only screen and (max-width: 420px){

    #notifly-wrapper{
        left: 20px;
        right: 20px;
    }
    #notifly-wrapper #text{
        padding-left: 20px;
        box-sizing: border-box;
    }
    #notifly-wrapper .col-nano-3 {
        max-width: 20%;
        -ms-flex-preferred-size: 25%;
        flex-basis: 20%;
    }
    #notifly-wrapper .col-nano-9 {
        max-width: 80%;
        -ms-flex-preferred-size: 80%;
        flex-basis: 80%;
    }
    
}

@keyframes scale-display {
    0% {
        opacity: 0;
        transform: scale(0);
    -webkit-transform: scale(0);
    }

    100% {
        opacity: 1;
        transform: scale(1);
    -webkit-transform: scale(1);
    }
}

@keyframes scale-display--reversed {
    0% {
        display: inline-flex;
        opacity: 1;
        transform: scale(1);
        -webkit-transform: scale(1);
    }
    99% {
        display: inline-flex;
        opacity: 0;
        transform: scale(0);
        -webkit-transform: scale(0);
    }
    100% {
        display: none;
        opacity: 0;
        transform: scale(0);
        -webkit-transform: scale(0);
    }
}css/notifly-core.min.css000064400000005604151163010210011235 0ustar00/*!
 * notifly-core.css
 * https://www.themexpert.com/
 * Version: 1.0.0
 *
 * Copyright ThemeXpert
 * Released under the MIT license
 * https://www.themexpert.com/notifly
 */#notifly-wrapper{display:none;position:fixed;bottom:20px;left:20px;z-index:99}#notifly-wrapper
#close{position:absolute;top:0;right:0;opacity:0;cursor:pointer;-webkit-transition:opacity
.5s;transition:opacity .5s;color:#d1d1d1}#notifly-wrapper:hover
#close{opacity:1;cursor:pointer}#notifly-wrapper #close span{padding:0 6px
0 5px}#notifly-wrapper
#image{width:80px;text-align:left;cursor:pointer}#notifly-wrapper
#text{width:240px;cursor:pointer}#notifly-wrapper #text
p{margin-bottom:0;line-height:1.3}#notifly-wrapper #text
p+p:last-child{color:#999;font-size:80%;margin-top:10px}#notifly-wrapper
.card-small img{max-height:60px;border-radius:50%}#notifly-wrapper
img{max-width:100%;height:auto;border:0;vertical-align:middle}#notifly-wrapper
.card,.card-small{background:#fff;box-shadow:6px 6px 20px
rgba(0,0,0,.04);position:relative}#notifly-wrapper
.card-small{border-radius:6px;padding:10px
15px;color:#4d4d4d;font-size:14px;border:1px solid #f8f8f8}#notifly-wrapper
.card-small--blue{color:#3ca0ff;border:1px solid
rgba(60,160,255,.2)}#notifly-wrapper .card-small--blue #text
p:last-child{color:#8cc7ff}#notifly-wrapper
.flex--align-vertical{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0}#notifly-wrapper
.flex,.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}#notifly-wrapper
.flex__fill-gap{-webkit-box-flex:1;-ms-flex:1;flex:1}@media only screen and
(min-width:0px){#notifly-wrapper
.col-nano-3{max-width:25%;-ms-flex-preferred-size:25%;flex-basis:25%}#notifly-wrapper
.col-nano-9{max-width:75%;-ms-flex-preferred-size:75%;flex-basis:75%}}#notifly-wrapper.active{animation:scale-display
.3s}#notifly-wrapper.out{animation:scale-display--reversed
.3s;animation-fill-mode:forwards}#notifly-wrapper
.poweredBy{position:absolute;right:15px;bottom:10px;font-size:11px;color:#999}#notifly-wrapper
.poweredBy i{position:relative;display:block}#notifly-wrapper .poweredBy i
svg{position:absolute;top:2px;left:-10px}#notifly-wrapper .poweredBy
a{color:#f97362}@media only screen and
(max-width:420px){#notifly-wrapper{left:20px;right:20px}#notifly-wrapper
#text{padding-left:20px;box-sizing:border-box}#notifly-wrapper
.col-nano-3{max-width:20%;-ms-flex-preferred-size:25%;flex-basis:20%}#notifly-wrapper
.col-nano-9{max-width:80%;-ms-flex-preferred-size:80%;flex-basis:80%}}@keyframes
scale-display{0%{opacity:0;transform:scale(0);-webkit-transform:scale(0)}100%{opacity:1;transform:scale(1);-webkit-transform:scale(1)}}@keyframes
scale-display--reversed{0%{display:inline-flex;opacity:1;transform:scale(1);-webkit-transform:scale(1)}99%{display:inline-flex;opacity:0;transform:scale(0);-webkit-transform:scale(0)}100%{display:none;opacity:0;transform:scale(0);-webkit-transform:scale(0)}}css/notifly.css000064400000011215151163010210007520
0ustar00#notifly,#notifly.notifly-hidden{opacity:0}#notifly-text,#notifly-title{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;font-family:Roboto,helvetica,arial,sans-serif}#notifly-text,#notifly-time,#notifly-title{font-family:Roboto,helvetica,arial,sans-serif}#notifly-close,#notifly.notifly-clickable{cursor:pointer}#notifly{position:fixed;z-index:99999;height:66px;width:321px;border:none;display:none;background:#fff;transition:visibility
0s .5s,opacity .4s linear,top .5s linear,bottom .5s
linear}#notifly,#notifly *,#notifly :after,#notifly
:before{box-sizing:border-box}#notifly.notifly-position-bottom-left{bottom:-120px;left:10px;-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 8px 50px
rgba(0,0,0,.05);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 1px 2px
rgba(0,0,0,.05),0 8px 50px rgba(0,0,0,.05);box-shadow:0 0 1px
rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 8px 50px
rgba(0,0,0,.05)}#notifly.notifly-position-bottom-right{bottom:-120px;right:10px;-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 8px 50px
rgba(0,0,0,.05);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 1px 2px
rgba(0,0,0,.05),0 8px 50px rgba(0,0,0,.05);box-shadow:0 0 1px
rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 8px 50px
rgba(0,0,0,.05)}#notifly.notifly-position-top-left{top:-120px;left:10px;-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -8px 50px
rgba(0,0,0,.05);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 -1px 2px
rgba(0,0,0,.05),0 -8px 50px rgba(0,0,0,.05);box-shadow:0 0 1px
rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -8px 50px
rgba(0,0,0,.05)}#notifly.notifly-position-top-right{top:-120px;right:10px;-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -8px 50px
rgba(0,0,0,.05);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 -1px 2px
rgba(0,0,0,.05),0 -8px 50px rgba(0,0,0,.05);box-shadow:0 0 1px
rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -8px 50px
rgba(0,0,0,.05)}#notifly.notifly-design-rounded{border-radius:40px}#notifly.notifly-design-rounded-square{border-radius:6px}#notifly.notifly-position-bottom-left:hover,#notifly.notifly-position-bottom-right:hover{-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 25px 50px
rgba(0,0,0,.1);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 1px 2px
rgba(0,0,0,.05),0 25px 50px rgba(0,0,0,.1);box-shadow:0 0 1px
rgba(0,0,0,.2),0 1px 2px rgba(0,0,0,.05),0 25px 50px
rgba(0,0,0,.1)}#notifly.notifly-position-top-left:hover,#notifly.notifly-position-top-right:hover{-webkit-box-shadow:0
0 1px rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -25px 50px
rgba(0,0,0,.1);-moz-box-shadow:0 0 1px rgba(0,0,0,.2),0 -1px 2px
rgba(0,0,0,.05),0 -25px 50px rgba(0,0,0,.1);box-shadow:0 0 1px
rgba(0,0,0,.2),0 -1px 2px rgba(0,0,0,.05),0 -25px 50px
rgba(0,0,0,.1)}#notifly:hover{-webkit-box-shadow:0 25px 50px
rgba(0,0,0,.1);-moz-box-shadow:0 25px 50px rgba(0,0,0,.1);box-shadow:0 25px
50px rgba(0,0,0,.1)}#notifly:active{-webkit-box-shadow:0 0 0 1px
rgba(0,0,0,.1);-moz-box-shadow:0 0 0 1px rgba(0,0,0,.1);box-shadow:0 0 0
1px
rgba(0,0,0,.1)}#notifly.notifly-displayed.notifly-position-bottom-left,#notifly.notifly-displayed.notifly-position-bottom-right{opacity:1;bottom:20px}#notifly.notifly-displayed.notifly-position-top-left,#notifly.notifly-displayed.notifly-position-top-right{opacity:1;top:20px}#notifly-image{display:block;position:absolute;top:0;left:0;height:66px;width:66px;text-align:center;background-size:cover;background-repeat:no-repeat;background-position:center
center}#notifly-image
i{height:66px;width:66px;line-height:66px;max-width:100%;margin:0;font-size:30px}#notifly.notifly-design-rounded
notifly-image{top:3px;left:3px;height:60px;width:60px;-webkit-border-radius:50%;-webkit-background-clip:padding-box;-moz-border-radius:50%;-moz-background-clip:padding;border-radius:50%;background-clip:padding-box;overflow:hidden;line-height:60px}#notifly.notifly-design-rounded
notifly-image
i{-webkit-border-radius:50%;-webkit-background-clip:padding-box;-moz-border-radius:50%;-moz-background-clip:padding;border-radius:50%;background-clip:padding-box;top:3px;left:3px;height:60px;width:60px;line-height:60px;display:block}#notifly-content{margin-left:75px;padding-top:9.29px;padding-right:4px}#notifly-title{line-height:18px;height:18px;font-size:14px;font-weight:700;color:#000;margin-right:30px;margin-top:7px}#notifly.notifly-show-timeago
.notifly-title{margin-top:0}#notifly-text{line-height:17px;height:17px;font-size:12px;color:#333}#notifly-time{display:block;color:#999;font-size:11px;height:16px;line-height:16px}#notifly-close{position:absolute;top:3px;right:25px;font-size:12px;color:#000}@media
(min-width:980px){#notifly.notifly-desktop{display:block}}@media
(max-width:979px){#notifly.notifly-mobile{display:block}}fonts/notifly.eot000064400000031714151163010210010066
0ustar00�33�LP��[+converseflowRegularVersion
1.0converseflow�0OS/2R�`cmapVҹTgasppglyfO���x-�headN��/h6hhea��/�$hmtx��/��loca	�r0�pmaxp@1
name 10�post2�
��������3	@�2���@�@ 8
 �2����
���������797979+���U(#".#"#";267326732654&#��
Z�

x��
Z�

x��
���

��
�x

b+����7F\"327>7654'.'&"'.'&547>7632"326=4&#3267>54&'&"bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFP



"
�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhU����




+����
)8N'.#!"3!26?>5.'!'7!"326=4&#3267>54&'&"�
��
��
b
�I����@��



"
w��	��	��
^	����<���s����




+�Z7E[%.'&813!267>5.'#!"&'.7>36"326=4&3267>54&'&"��
+2
��-�0
L�*	k#	k�w1



"
�^

��-h
,#
^	"Z
		
��

�����
	

+����@FOX]chn%>54&'041&'.'&'0"1.#"010212327>767>5%#'73!467#.5%37!7%'>7!.|)0&%a::@

:56`))
)0&%`99>
966`)) �͖HH�H����	+�
����^P��Ъ^0�P��Z^P�0�^0�P�9�M0^)80/H

1##+:�L0_-7//I

1##+����,X&��@$�@#-X&+U�
Uk�բ:H���
Uj*�9I+�U$(9=#";2654&#3#";2654&##3#";2654&##3���>UU�ժ�*VV�ի�+UUU������*��ր��U��+�U$(9=#";2654&#3#";2654&##3#";2654&##3U��>VV���+UU����+UUU������*��ր��U����s�&"'&"326764's
"
�I�
"


�


�

��H�
"
��
"
+����Ja"#81"'.'&547>763812676&'.#81"38127>76=4&#&"'&"326764'�hFFPPFFhhFFP*M'!-`3bUV%$$%VUbbUV%$H
"
�Ib
"


��

�&PFFhhFFPPFFh!%$�UVabUV%%%%VUb&M�Hb


"
��
"
U�U=&"'&"326764'"#!"&5463!2654&#!"3!2654&#�
"
�Ib
"


��

s����*6JJ6V6JI�Hb


"
��
"
����UI7��6JJ6+�I&"'&"326764'
"
��
"




I��
"
�
"
b���764'&"326764/��


"
�



���
"
�
"
�
"
�b���	&"326764'��
"


��






�
"
��
"

"
�I	&"2?326764�
"
�


"
��
I�
"


��
"
���,'&"326?64'&"'326?64'&"'&"���
"


��


"��


"
��
"


����


"
��
"

�
"
��
"
����-764'&"326764/!764'&"326764/<�


"
�

�

�*�


"
�

�

���
"


�
"
�
"
��
"


�
"
�
"
����-'&"326?64'!'&"326?64'�
"


��

�

���
"


��




�

��


"
��
"
�
"
�


"
��
"
�
"

���-7326764/&"27&"2?326764/I��

�
"
�


"
�
"
�


"
��

����
"
��
"


�
"


��
"
�+���wsw|�����<5<50454&58181.#1810"10"1&"0"10"1"8181008181302102103267021021>38181>781%5'75'#'%%775?'��U�U�	�
��bb�����+3��V��3���͉�����bb
+������
	�DE��bbbb��bwwbɴ�w��]ww]ͳ�D�E+����F!"3!2654&#!"&5463!2#"&5463!2326=4&#!";2654&#U��6JJ6�7II����U*�J6��7II7*UI7��6JJ6�7I����++6JJ6��6J	S$q%4&#"'&"33267>?64'&"%.#81#&'.'&7>'.'&67>76;8123267>76&'�bb
"
��
"
D#n@0/{HGHMx*&)

"

#  ^9<:;c$%3*I$


)8	
 �b��b


"
��
"


�0:G66A
	XCD�J,Q 

"
?#9v33I		://;
%$@$#8
"
V43`-+���s&;@"#!"&546;2654&+"3!26=4&#'&";26764'#5U����7II7U6Jt�
"
�U�

��&o�ob�VJ6��6JJ6�g�

�V	��
"
�bo�oU�U&K"#!"&5463!2654&#!"3!2654&#.'.#!";326732654&'�*�6JJ6�6J����s


	����I7�+6JJ6��s
"
��/�U+.#!"3267>5>''54&'!���M

�	M�bV�����<


�x��
V
^�

�w
��+�Q��U�U%)9=NR!"3!2654&##53%!"3!2654&##53!"3!2654&#53%!"3!2654&##53���++����++��+��+>��V��++��U��+���U��+������*���U��*������U(L1.#1"81'.#"32676764'&'	&47>322?81>38121�&c76h&&e97c&'/+&x
	w+*;����99G$&E/
"
+G)'E'**''**'&h66h&��x(33l33(����Y:�:/

/F&&F+����%A]s&67>326767>765.''"327>7654'.'&"'.'&547>7632'3267>54&'&"3C�"
?#O
8A33bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFn



"
�=@"  
* 0


)*9Z�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�
	

U���w.	&"3!2654&'#3+4&#!"#"&5	���

��	J6V6J	�������UUM*

��	�*6JJ6�	��U������	���@+���|5L3267%>54&'%&"%
-%&3267%>'.5%&3267%>'.D��

�U
	�U

�M����M��f�f!

�	�
	 �f�f!

�	�
	
Z��

��

̦�������
$��!���

!��!U�U!(!"3!2654&!2!54633#"&!!+��6JJ6V6JJ�tV�V*������UI7��6JJ6U7IU������U���A���j3i&'&"2?62&'.3267>?676&'&'"'.?>7>7>'.'&326?64'.�%..`..%M
"
I3�430�:�)
%


&m9'P#
�%'�gI3�330�@##9
%

 V00b*
�$%&]00]&I
'3%%H
"


H000�0�
):
	&
33�%//c./#�sH000�0�!
	
%
*2


�'0/c./%#&&#H
"


U���*!"3!2654&#%!2654&#!"!"3!2654&��������UU�U(!"326?!2654&##!"463!2+��6J



��6JJ6*�
bVUI7�V
�I7�7I��bDZ�U5W&"'&'&'.767>'.#:326767>7674&''&'.'&767>767767�	
!''P''"+ MCDf  hJJX	
J�:"'
�3�DF;;T:'&- /#'(R**(4�	



 +,a12+

  fDCMXPQ~))20 !I)(,	��,'
!e@@G1.-L376h/.$)K,����5HQ&#'&'.'&7>7>'.327>7676&'"3!2654'.'&#�!77�LMIJ547hC!)%%=&D@AX,^-EBAr--�f�$%VUb+C;:Z+I54877�MLJCi!?%%*Y^]�CC%J55C!U�VaVU�$%�UQY::B�UU
!4&#"!"3!3265!2654&#+�����+����7X"327>7654'.'&"'.'&547>7632#54&#"#";326=32654&#bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFF[�����%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�����U�U@!"3!2654&#!"&5463!2#54&#"#";326=32654&#+��6JJ6V6JJ��V�����UI7��6JJ6U7I�+U�����LQ��:Xv�"32654&"&54632'467816&'&"81326764'.564'&"326764'&'&4767%&"32676764'&'&"326767>'&'6JJ66JJ6�
 	
"
++ 
<


"
E""""E

88^
"


88

E""""E|
"




.-+J67II76J�+)O
"


+87s77,
"
P*
"

DWW�WVE
"
8GG�GH8;

"
8GG�FG8
"
CVV�WWD{


"
'(Q''"+67q77+	UJ�!2654&+7>767>'&'.'&'&'.54&#"01103813813<54&50&#81.#0&10"10&'81!";"'&'.'.327>76?3265.5+�xD#@�==\!7"!'&()R*)(-Q
��	��x1??�??2+
!3$
#$M()*))(L##��s+
dC!($#>
3 x��wt11C#!-Q 
w�	RV�&#81"&/32654&#!81"0"10"810#01326=38127>767>76&'70414&#"'.'&'&67>7>#"3!26781>781063465>5w!
'-CC}3x��|!!K*)++*)M##
6�| Q-***S)(&'!"7!\==�@#Dx�
Q#C0243o��w
Q-!��x 6

>$%* @d

's����"32654&"&54632>32654&+"&/&67>'5'.#81"'&54&#"&'&"#";28167>326=4676276&'.71#81"&'.#"&=4&'.#"/#.5467>'.+"&546;2676&'&476?>=463267>3121;2#"FeeFFeeF#22##22?
6JJ6		$,1J66J	'i$&*
6JJ6		
	'^&	
J67I	'i$&*3


B  $) 

+
	

9 	#7



#@
 $$  C
	

9 	#7
UdFGddGFd�2$#22#$2;I76J		#]'	
6JJ6	&&&k&
I76J

-,
#
6JJ6	

&&&k&
^	
	
: #7
	
	
B  %)  C#

	
9 	#6



#@ %$ 
C���$0S^%"32654&"&54632#%"32654&"&54632%!0232676&'.#!'.+";23#!"&'!U6JJ67II76JJ67II7��-HD
�@F3^^@
G3+<�7'��J67II76J��J67II76J��:-f

g0?�0?���/U+C[r2654&#"3!"32654&#2654&#")";326532654&##54&#"#"3!2654&#!";326=32654&�UU��UVUUUU�VU�+�����U�������������U�
6!"3!2654&##!"&5463!23267>54&'&"�V7II7�7II7+�V���



"
�J6�U6JJ6�6J�����	
U����"-8GV#54&+"#";3!26532654&#%46;2!5#!"&5!"32654&#3"32654&#��I7�7I�+I7�7I+�����V����+6JJ6+��6JJ6++++�U+�����MJ�&"&'.&'.'&'.#"#"326767>765<5>76&''&'>7>54&'&'.767726=46767>7�

3 ('R)(!*,.,+O""

*

.'';0k6
(*)S*)(P�GE55I +


�?--:-01e545*L$	
\10'
#**^235-~&


M	
#]3
,'	
�\(-,Z++%

()'77�PPX	#R-
�

MEEv/0!

#
)99w88(#&		+ <)	-

	���&764'&"'&"326?326764/<�


"
��
"


��




��

���
"
��
"
��
"
��
"
�+����7^"327>7654'.'&"'.'&547>7632&"'&"326?326764/764'bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFN
"
bb
"


bb




bb

bb

�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhcc
"
bb
"
bb
"
bb
"
U�UF!"3!2654&#!"&5463!2&"'&"326?326764/764'+��6JJ6V6JJ��V�
"
bb
"


bb




bb

bb

UI7��6JJ6U7I�+U�cc
"
bb
"
bb
"
bb
"
Z���|!4.#!6&'&3!3267>'74&'.#!3!�
��&

	�U
Q&

��k
��&��

&

�

��
	

�|�
I�	��+[��_<��-8�-8��	������	7+++++++�+U�bb�
��
++	+U/U+U+UAUUZ,�+UL	�U�+UZ
^�`���Jt�V����D���,�2��	d	�
�
�P�6x�
B
�
�t��t@�2�
�f�2��7��E�$i
�		�	Q	�	/	u	
4�converseflowconverseflowVersion 1.0Version
1.0converseflowconverseflowconverseflowconverseflowRegularRegularconverseflowconverseflowFont
generated by IcoMoon.Font generated by
IcoMoon.fonts/notifly.svg000064400000124017151163010210010075
0ustar00<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="converseflow" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960"
descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512"
d="" />
<glyph unicode="&#xe900;" glyph-name="activity"
d="M938.667 469.334h-170.667c-17.067
0-34.133-12.8-38.4-29.867l-89.6-260.267-217.6 644.267c-4.267 17.067-21.333
29.867-38.4 29.867s-34.133-12.8-38.4-29.867l-119.467-354.133h-140.8c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h170.667c17.067 0
34.133 12.8 38.4 29.867l89.6 260.267 217.6-648.533c4.267-17.067
21.333-29.867 38.4-29.867s34.133 12.8 38.4 29.867l119.467
354.133h140.8c25.6 0 42.667 17.067 42.667 42.667s-17.067 46.933-42.667
46.933z" />
<glyph unicode="&#xe901;"
glyph-name="alert-circle" d="M512 896c-260.267
0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333 469.333
209.067 469.333 469.333-209.067 469.333-469.333 469.333zM512
42.667c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0
384-170.667 384-384s-170.667-384-384-384zM512 640c-25.6
0-42.667-17.067-42.667-42.667v-170.667c0-25.6 17.067-42.667
42.667-42.667s42.667 17.067 42.667 42.667v170.667c0 25.6-17.067
42.667-42.667 42.667zM482.133
285.867c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333
12.8-29.867c8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8c8.533 8.533 12.8 21.333 12.8 29.867s-4.267 21.333-12.8 29.867c-17.067
17.067-42.667 17.067-59.733 0z" />
<glyph unicode="&#xe902;"
glyph-name="alert-octagon" d="M968.533 631.467l-251.733
251.733c-4.267 8.533-17.067 12.8-29.867 12.8h-349.867c-12.8
0-25.6-4.267-29.867-12.8l-251.733-251.733c-8.533-4.267-12.8-17.067-12.8-29.867v-354.133c0-12.8
4.267-21.333 12.8-29.867l251.733-251.733c4.267-4.267 17.067-8.533
29.867-8.533h354.133c12.8 0 21.333 4.267 29.867 12.8l251.733 251.733c8.533
8.533 12.8 17.067 12.8 29.867v349.867c-4.267 12.8-8.533 25.6-17.067
29.867zM896 268.8l-226.133-226.133h-315.733l-226.133
226.133v315.733l226.133 226.133h320l221.867-226.133v-315.733zM512 640c-25.6
0-42.667-17.067-42.667-42.667v-170.667c0-25.6 17.067-42.667
42.667-42.667s42.667 17.067 42.667 42.667v170.667c0 25.6-17.067
42.667-42.667 42.667zM482.133
285.867c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333
12.8-29.867c8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8c8.533 8.533 12.8 21.333 12.8 29.867s-4.267 21.333-12.8 29.867c-17.067
17.067-42.667 17.067-59.733 0z" />
<glyph unicode="&#xe903;"
glyph-name="alert-triangle" d="M981.333 192l-358.4
605.867c-17.067 29.867-46.933 51.2-81.067 59.733s-68.267
4.267-98.133-12.8c-17.067-8.533-34.133-25.6-42.667-42.667 0 0 0 0 0
0l-358.4-610.133c-34.133-59.733-12.8-140.8 46.933-174.933 17.067-12.8
38.4-17.067 59.733-17.067h725.333c34.133 0 68.267 12.8 89.6 38.4 25.6 25.6
38.4 55.467 38.4 89.6-4.267 21.333-8.533 46.933-21.333 64zM904.533
98.134c-8.533-8.533-21.333-12.8-29.867-12.8h-725.333c-8.533 0-12.8 0-21.333
4.267-21.333 12.8-25.6 38.4-17.067 59.733l362.667 601.6c4.267 4.267 8.533
12.8 12.8 12.8 21.333 12.8 46.933 4.267
59.733-12.8l362.667-601.6c4.267-4.267 4.267-12.8 4.267-21.333
4.267-12.8-4.267-21.333-8.533-29.867zM512 597.334c-25.6
0-42.667-17.067-42.667-42.667v-170.667c0-25.6 17.067-42.667
42.667-42.667s42.667 17.067 42.667 42.667v170.667c0 25.6-17.067
42.667-42.667 42.667zM482.133
243.2c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333
12.8-29.867c8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8c8.533 8.533 12.8 21.333 12.8 29.867s-4.267 21.333-12.8 29.867c-17.067
17.067-42.667 17.067-59.733 0z" />
<glyph unicode="&#xe904;" glyph-name="aperture"
d="M891.733 153.6c55.467 76.8 89.6 170.667 89.6 273.067 0 64-12.8
128-38.4 183.467 0 0 0 4.267 0 4.267-64 149.333-204.8 256-375.467 277.333 0
0-4.267 0-4.267 0-17.067 4.267-34.133 4.267-51.2 4.267-153.6
0-290.133-72.533-375.467-187.733
0-4.267-4.267-4.267-4.267-8.533-55.467-76.8-89.6-170.667-89.6-273.067 0-64
12.8-128 38.4-187.733 0 0 0-4.267 0-4.267 64-145.067 204.8-256
371.2-277.333 0 0 4.267 0 4.267 0 17.067 0 34.133-4.267 51.2-4.267 153.6 0
290.133 72.533 375.467 187.733 4.267 4.267 8.533 8.533 8.533 12.8zM584.533
298.667h-149.333l-72.533 128 72.533 128h149.333l72.533-128-72.533-128zM128
426.667c0 59.733 12.8 119.467 38.4 170.667l170.667-298.667h-187.733c-12.8
38.4-21.333 81.067-21.333 128zM682.667 554.667h187.733c12.8-38.4
21.333-81.067 21.333-128 0-59.733-12.8-119.467-38.4-170.667l-170.667
298.667zM832 640h-345.6l93.867 162.133c106.667-17.067 196.267-76.8
251.733-162.133zM486.4 810.667l-170.667-298.667-93.867 162.133c64 76.8
157.867 128 264.533 136.533zM192 213.334h345.6l-93.867-162.133c-106.667
17.067-196.267 76.8-251.733 162.133zM537.6 42.667l170.667 298.667
93.867-162.133c-64-76.8-157.867-128-264.533-136.533z" />
<glyph unicode="&#xe905;" glyph-name="bar-chart"
d="M938.667 853.334h-170.667c-25.6
0-42.667-17.067-42.667-42.667v-768c0-25.6 17.067-42.667
42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v768c0 25.6-17.067
42.667-42.667 42.667zM896 85.334h-85.333v682.667h85.333v-682.667zM597.333
640h-170.667c-25.6 0-42.667-17.067-42.667-42.667v-554.667c0-25.6
17.067-42.667 42.667-42.667h170.667c25.6 0 42.667 17.067 42.667
42.667v554.667c0 25.6-17.067 42.667-42.667 42.667zM554.667
85.334h-85.333v469.333h85.333v-469.333zM256 426.667h-170.667c-25.6
0-42.667-17.067-42.667-42.667v-341.333c0-25.6 17.067-42.667
42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v341.333c0
25.6-17.067 42.667-42.667 42.667zM213.333
85.334h-85.333v256h85.333v-256z" />
<glyph unicode="&#xe906;"
glyph-name="bar-chart-2" d="M597.333 853.334h-170.667c-25.6
0-42.667-17.067-42.667-42.667v-768c0-25.6 17.067-42.667
42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v768c0 25.6-17.067
42.667-42.667 42.667zM554.667
85.334h-85.333v682.667h85.333v-682.667zM938.667 640h-170.667c-25.6
0-42.667-17.067-42.667-42.667v-554.667c0-25.6 17.067-42.667
42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v554.667c0
25.6-17.067 42.667-42.667 42.667zM896
85.334h-85.333v469.333h85.333v-469.333zM256 426.667h-170.667c-25.6
0-42.667-17.067-42.667-42.667v-341.333c0-25.6 17.067-42.667
42.667-42.667h170.667c25.6 0 42.667 17.067 42.667 42.667v341.333c0
25.6-17.067 42.667-42.667 42.667zM213.333
85.334h-85.333v256h85.333v-256z" />
<glyph unicode="&#xe907;" glyph-name="check"
d="M883.2 712.534c-17.067 17.067-42.667 17.067-59.733
0l-439.467-439.467-183.467 183.467c-17.067 17.067-42.667 17.067-59.733
0s-17.067-42.667 0-59.733l213.333-213.333c8.533-8.533 17.067-12.8
29.867-12.8s21.333 4.267 29.867 12.8l469.333 469.333c17.067 17.067 17.067
42.667 0 59.733z" />
<glyph unicode="&#xe908;"
glyph-name="check-circle" d="M938.667 507.734c-25.6
0-42.667-17.067-42.667-42.667v-38.4c0-213.333-170.667-384-384-384 0 0 0 0 0
0-213.333 0-384 170.667-384 384s170.667 384 384 384c0 0 0 0 0 0 55.467 0
106.667-12.8 157.867-34.133 21.333-8.533 46.933 0 55.467 21.333s0
46.933-21.333 55.467c-59.733 25.6-123.733 42.667-192 42.667 0 0 0 0 0
0-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333
469.333-469.333c0 0 0 0 0 0 260.267 0 469.333 209.067 469.333
469.333v38.4c0 25.6-17.067 42.667-42.667 42.667zM1011.2 840.534c-17.067
17.067-42.667 17.067-59.733 0l-439.467-439.467-98.133 98.133c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l128-128c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l469.333 469.333c17.067
17.067 17.067 42.667 0 59.733z" />
<glyph unicode="&#xe909;"
glyph-name="check-square" d="M1011.2 840.534c-17.067
17.067-42.667 17.067-59.733 0l-439.467-439.467-98.133 98.133c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l128-128c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l469.333 469.333c17.067
17.067 17.067 42.667 0 59.733zM896 469.334c-25.6
0-42.667-17.067-42.667-42.667v-298.667c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6
0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667
42.667h469.333c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667
42.667h-469.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128
128-128h597.333c72.533 0 128 55.467 128 128v298.667c0 25.6-17.067
42.667-42.667 42.667z" />
<glyph unicode="&#xe90a;"
glyph-name="chevron-down" d="M797.867 584.534c-17.067
17.067-42.667 17.067-59.733 0l-226.133-226.133-226.133 226.133c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733l256-256c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l256 256c17.067 17.067
17.067 42.667 0 59.733z" />
<glyph unicode="&#xe90b;"
glyph-name="chevron-left" d="M443.733 426.667l226.133
226.133c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733
0l-256-256c-17.067-17.067-17.067-42.667 0-59.733l256-256c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067
42.667 0 59.733l-226.133 226.133z" />
<glyph unicode="&#xe90c;"
glyph-name="chevron-right" d="M669.867 456.534l-256
256c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l226.133-226.133-226.133-226.133c-17.067-17.067-17.067-42.667
0-59.733 8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867 12.8l256
256c17.067 17.067 17.067 42.667 0 59.733z" />
<glyph unicode="&#xe90d;"
glyph-name="chevron-up" d="M797.867 328.534l-256 256c-17.067
17.067-42.667 17.067-59.733 0l-256-256c-17.067-17.067-17.067-42.667
0-59.733s42.667-17.067 59.733 0l226.133 226.133 226.133-226.133c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067
42.667 0 59.733z" />
<glyph unicode="&#xe90e;"
glyph-name="chevrons-down" d="M695.467
413.867l-183.467-183.467-183.467 183.467c-17.067 17.067-42.667
17.067-59.733 0s-17.067-42.667 0-59.733l213.333-213.333c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8l213.333 213.333c17.067
17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733 0zM482.133
439.467c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867
12.8l213.333 213.333c17.067 17.067 17.067 42.667 0 59.733s-42.667
17.067-59.733 0l-183.467-183.467-183.467 183.467c-17.067 17.067-42.667
17.067-59.733 0s-17.067-42.667 0-59.733l213.333-213.333z" />
<glyph unicode="&#xe90f;"
glyph-name="chevrons-left" d="M315.733 426.667l183.467
183.467c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733
0l-213.333-213.333c-17.067-17.067-17.067-42.667
0-59.733l213.333-213.333c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267
29.867 12.8c17.067 17.067 17.067 42.667 0 59.733l-183.467 183.467zM614.4
426.667l183.467 183.467c17.067 17.067 17.067 42.667 0 59.733s-42.667
17.067-59.733 0l-213.333-213.333c-17.067-17.067-17.067-42.667
0-59.733l213.333-213.333c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267
29.867 12.8c17.067 17.067 17.067 42.667 0 59.733l-183.467 183.467z"
/>
<glyph unicode="&#xe910;"
glyph-name="chevrons-right" d="M797.867 456.534l-213.333
213.333c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l183.467-183.467-183.467-183.467c-17.067-17.067-17.067-42.667
0-59.733 8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867
12.8l213.333 213.333c17.067 17.067 17.067 42.667 0 59.733zM499.2
456.534l-213.333 213.333c-17.067 17.067-42.667 17.067-59.733
0s-17.067-42.667
0-59.733l183.467-183.467-183.467-183.467c-17.067-17.067-17.067-42.667
0-59.733 8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8l213.333 213.333c17.067 17.067 17.067 42.667 0 59.733z" />
<glyph unicode="&#xe911;"
glyph-name="chevrons-up" d="M328.533 439.467l183.467 183.467
183.467-183.467c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867
12.8c17.067 17.067 17.067 42.667 0 59.733l-213.333 213.333c-17.067
17.067-42.667 17.067-59.733 0l-213.333-213.333c-17.067-17.067-17.067-42.667
0-59.733s42.667-17.067 59.733 0zM541.867 413.867c-17.067 17.067-42.667
17.067-59.733 0l-213.333-213.333c-17.067-17.067-17.067-42.667
0-59.733s42.667-17.067 59.733 0l183.467 183.467 183.467-183.467c8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067
42.667 0 59.733l-213.333 213.333z" />
<glyph unicode="&#xe912;" glyph-name="codepen"
d="M981.333 268.8c0 4.267 0 4.267 0 8.533v298.667c0 4.267 0 4.267 0
8.533 0 0 0 0 0 4.267s-4.267 8.533-4.267 12.8c0 0 0 0 0 0s0 0 0 0c-4.267
4.267-4.267 8.533-8.533 8.533v0c0 0 0 0 0 0l-426.667 277.333c0 0-4.267
0-4.267 0s-4.267 0-4.267 0c-8.533 4.267-21.333 4.267-29.867 0 0 0-4.267
0-4.267 0s-4.267 0-4.267 0l-426.667-277.333c-8.533
0-12.8-4.267-17.067-8.533 0 0 0 0 0 0s0 0 0
0c-4.267-8.533-4.267-12.8-8.533-17.067 0 0 0 0 0-4.267s0-4.267
0-8.533v-298.667c0-4.267 0-4.267 0-8.533 0 0 0 0 0-4.267s4.267-8.533
4.267-12.8c0 0 0 0 0 0s0 0 0 0c4.267-4.267 4.267-8.533
8.533-8.533l426.667-277.333c0 0 4.267 0 4.267 0s4.267 0 4.267 0 8.533-4.267
12.8-4.267 8.533 0 12.8 4.267c0 0 4.267 0 4.267 0s4.267 0 4.267 0l426.667
277.333c4.267 4.267 8.533 8.533 12.8 8.533 0 0 0 0 0 0s0 0 0 0c12.8 12.8
12.8 17.067 17.067 21.333 0 0 0 0 0 0zM128
494.934l98.133-68.267-98.133-68.267v136.533zM512 328.534l-140.8 98.133
140.8 98.133 140.8-98.133-140.8-98.133zM554.667
597.334v179.2l307.2-200.533-136.533-98.133-170.667 119.467zM469.333
597.334l-170.667-119.467-136.533 98.133 307.2 200.533v-179.2zM298.667
375.467l170.667-119.467v-174.933l-307.2 200.533 136.533 93.867zM554.667
256l170.667 119.467 136.533-93.867-307.2-204.8v179.2zM797.867
426.667l98.133 68.267v-136.533l-98.133 68.267z" />
<glyph unicode="&#xe913;" glyph-name="copy"
d="M853.333 597.334h-384c-72.533 0-128-55.467-128-128v-384c0-72.533
55.467-128 128-128h384c72.533 0 128 55.467 128 128v384c0 72.533-55.467
128-128 128zM896 85.334c0-25.6-17.067-42.667-42.667-42.667h-384c-25.6
0-42.667 17.067-42.667 42.667v384c0 25.6 17.067 42.667 42.667
42.667h384c25.6 0 42.667-17.067 42.667-42.667v-384zM213.333
341.334h-42.667c-25.6 0-42.667 17.067-42.667 42.667v384c0 25.6 17.067
42.667 42.667 42.667h384c25.6 0 42.667-17.067 42.667-42.667v-42.667c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v42.667c0
72.533-55.467 128-128 128h-384c-72.533 0-128-55.467-128-128v-384c0-72.533
55.467-128 128-128h42.667c25.6 0 42.667 17.067 42.667 42.667s-17.067
42.667-42.667 42.667z" />
<glyph unicode="&#xe914;"
glyph-name="download-cloud" d="M652.8
243.2l-98.133-98.133v281.6c0 25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-281.6l-98.133 98.133c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l170.667-170.667c4.267-4.267 8.533-8.533 12.8-8.533 4.267-4.267
12.8-4.267 17.067-4.267s12.8 0 17.067 4.267c4.267 4.267 8.533 4.267 12.8
8.533l170.667 170.667c17.067 17.067 17.067 42.667 0 59.733s-42.667
17.067-59.733 0zM977.067 490.667c-46.933 64-123.733 106.667-209.067 106.667
0 0 0 0 0 0h-21.333c-64 187.733-264.533 294.4-456.533
243.2-102.4-25.6-183.467-85.333-238.933-174.933-51.2-89.6-68.267-192-42.667-290.133
17.067-59.733 42.667-115.2 85.333-157.867 17.067-17.067 42.667-21.333
59.733-4.267s21.333 42.667 4.267 59.733c-29.867 34.133-55.467 76.8-64
123.733-21.333 76.8-8.533 157.867 34.133 226.133s106.667 119.467 183.467
136.533c157.867 42.667 324.267-55.467 362.667-213.333 4.267-17.067
21.333-34.133 42.667-34.133h51.2c0 0 0 0 0 0 55.467 0 106.667-25.6
140.8-72.533 25.6-38.4 38.4-81.067
29.867-128s-34.133-85.333-68.267-110.933c-21.333-12.8-25.6-38.4-8.533-59.733
8.533-12.8 21.333-17.067 34.133-17.067 8.533 0 17.067 4.267 25.6 8.533
55.467 38.4 93.867 98.133 106.667 166.4s-12.8 132.267-51.2 192z" />
<glyph unicode="&#xe915;" glyph-name="edit"
d="M853.333 354.134c-25.6
0-42.667-17.067-42.667-42.667v-226.133c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6
0-42.667 17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667
42.667h226.133c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667
42.667h-226.133c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128
128-128h597.333c72.533 0 128 55.467 128 128v226.133c0 25.6-17.067
42.667-42.667 42.667zM968.533 712.534l-170.667 170.667c-17.067
17.067-42.667 17.067-59.733
0l-426.667-426.667c-8.533-8.533-12.8-17.067-12.8-29.867v-170.667c0-25.6
17.067-42.667 42.667-42.667h170.667c12.8 0 21.333 4.267 29.867 12.8l426.667
426.667c17.067 17.067 17.067 42.667 0 59.733zM494.933
298.667h-110.933v110.933l384 384 110.933-110.933-384-384z" />
<glyph unicode="&#xe916;"
glyph-name="external-link" d="M768 426.667c-25.6
0-42.667-17.067-42.667-42.667v-256c0-25.6-17.067-42.667-42.667-42.667h-469.333c-25.6
0-42.667 17.067-42.667 42.667v469.333c0 25.6 17.067 42.667 42.667
42.667h256c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667
42.667h-256c-72.533 0-128-55.467-128-128v-469.333c0-72.533 55.467-128
128-128h469.333c72.533 0 128 55.467 128 128v256c0 25.6-17.067 42.667-42.667
42.667zM934.4 827.734c-4.267 8.533-12.8 17.067-21.333 21.333-4.267
4.267-12.8 4.267-17.067 4.267h-256c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h153.6l-396.8-396.8c-17.067-17.067-17.067-42.667 0-59.733
8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867 12.8l396.8
396.8v-153.6c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667
42.667v256c0 4.267 0 12.8-4.267 17.067z" />
<glyph unicode="&#xe917;" glyph-name="filter"
d="M977.067 827.734c-8.533 17.067-21.333 25.6-38.4
25.6h-853.333c-17.067 0-29.867-8.533-38.4-25.6-8.533-12.8-4.267-29.867
4.267-42.667l332.8-392.533v-264.533c0-17.067 8.533-29.867
25.6-38.4l170.667-85.333c4.267-4.267 8.533-4.267 17.067-4.267s17.067 0
21.333 4.267c12.8 8.533 21.333 21.333 21.333 38.4v349.867l332.8
392.533c8.533 12.8 12.8 29.867 4.267 42.667zM563.2
435.2c-4.267-8.533-8.533-17.067-8.533-29.867v-294.4l-85.333
42.667v251.733c0 8.533-4.267 21.333-8.533 25.6l-281.6
337.067h669.867l-285.867-332.8z" />
<glyph unicode="&#xe918;" glyph-name="grid"
d="M426.667 853.334h-298.667c-25.6
0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667
42.667-42.667h298.667c25.6 0 42.667 17.067 42.667 42.667v298.667c0
25.6-17.067 42.667-42.667 42.667zM384
554.667h-213.333v213.333h213.333v-213.333zM896 853.334h-298.667c-25.6
0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667
42.667-42.667h298.667c25.6 0 42.667 17.067 42.667 42.667v298.667c0
25.6-17.067 42.667-42.667 42.667zM853.333
554.667h-213.333v213.333h213.333v-213.333zM896 384h-298.667c-25.6
0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667
42.667-42.667h298.667c25.6 0 42.667 17.067 42.667 42.667v298.667c0
25.6-17.067 42.667-42.667 42.667zM853.333
85.334h-213.333v213.333h213.333v-213.333zM426.667 384h-298.667c-25.6
0-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667
42.667-42.667h298.667c25.6 0 42.667 17.067 42.667 42.667v298.667c0
25.6-17.067 42.667-42.667 42.667zM384
85.334h-213.333v213.333h213.333v-213.333z" />
<glyph unicode="&#xe919;" glyph-name="heart"
d="M917.333 772.267v0c-51.2 51.2-119.467 81.067-192 81.067v0c-72.533
0-145.067-29.867-196.267-81.067 0 0 0 0 0 0l-17.067-17.067-17.067
17.067c-51.2 51.2-119.467 81.067-196.267 81.067-72.533
0-140.8-29.867-192-81.067s-85.333-123.733-85.333-196.267 29.867-145.067
81.067-196.267l375.467-375.467c8.533-8.533 17.067-12.8 29.867-12.8s21.333
4.267 29.867 12.8l375.467 375.467c115.2 106.667 115.2 285.867 4.267
392.533zM857.6 439.467l-345.6-345.6-345.6 345.6c-76.8 76.8-76.8 196.267 0
273.067 34.133 38.4 85.333 55.467 132.267 55.467 51.2 0 98.133-17.067
136.533-55.467l46.933-46.933c17.067-17.067 42.667-17.067 59.733 0l42.667
46.933c0 0 0 0 0 0 38.4 34.133 85.333 55.467 140.8 55.467 0 0 0 0 0 0 51.2
0 98.133-21.333 136.533-55.467v0c34.133-38.4 55.467-85.333
55.467-136.533s-21.333-98.133-59.733-136.533z" />
<glyph unicode="&#xe91a;"
glyph-name="help-circle" d="M563.2 674.134c-89.6
29.867-187.733-17.067-217.6-102.4-4.267-25.6 4.267-51.2 29.867-55.467
21.333-8.533 46.933 4.267 55.467 25.6 17.067 42.667 64 68.267 110.933 51.2
34.133-12.8 55.467-42.667 55.467-81.067
0-42.667-72.533-76.8-98.133-89.6-21.333-8.533-34.133-29.867-25.6-55.467
4.267-17.067 21.333-29.867 38.4-29.867 4.267 0 8.533 0 12.8 4.267 17.067
4.267 157.867 55.467 157.867 166.4-4.267 76.8-51.2 140.8-119.467 166.4zM512
896c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333
469.333-469.333 469.333 209.067 469.333 469.333-209.067 469.333-469.333
469.333zM512 42.667c-213.333 0-384 170.667-384 384s170.667 384 384
384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM482.133
243.2c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333
12.8-29.867c8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8c8.533 8.533 12.8 21.333 12.8 29.867s-4.267 21.333-12.8 29.867c-17.067
17.067-42.667 17.067-59.733 0z" />
<glyph unicode="&#xe91b;" glyph-name="home"
d="M921.6 588.8l-384 298.667c-17.067 12.8-38.4 12.8-51.2
0l-384-298.667c-12.8-8.533-17.067-21.333-17.067-34.133v-469.333c0-72.533
55.467-128 128-128h597.333c72.533 0 128 55.467 128 128v469.333c0 12.8-4.267
25.6-17.067 34.133zM597.333
42.667h-170.667v341.333h170.667v-341.333zM853.333
85.334c0-25.6-17.067-42.667-42.667-42.667h-128v384c0 25.6-17.067
42.667-42.667 42.667h-256c-25.6
0-42.667-17.067-42.667-42.667v-384h-128c-25.6 0-42.667 17.067-42.667
42.667v448l341.333 264.533 341.333-264.533v-448z" />
<glyph unicode="&#xe91c;" glyph-name="layers"
d="M68.267 601.6l426.667-213.333c4.267-4.267 8.533-4.267
17.067-4.267s12.8 0 17.067 4.267l426.667 213.333c17.067 8.533 25.6 21.333
25.6 38.4s-8.533 29.867-25.6 38.4l-426.667 213.333c-12.8 4.267-25.6
4.267-38.4
0l-426.667-213.333c-12.8-8.533-21.333-21.333-21.333-38.4s8.533-29.867
25.6-38.4zM512 806.4l332.8-166.4-332.8-166.4-332.8 166.4 332.8 166.4zM921.6
251.734l-409.6-204.8-409.6 204.8c-21.333 8.533-46.933
0-55.467-17.067s0-46.933 17.067-55.467l426.667-213.333c8.533-8.533
12.8-8.533 21.333-8.533s12.8 0 17.067 4.267l426.667 213.333c21.333 8.533
29.867 34.133 17.067 55.467-8.533 21.333-34.133 29.867-51.2 21.333zM921.6
465.067l-409.6-204.8-409.6 204.8c-21.333 8.533-46.933
0-55.467-17.067-8.533-21.333 0-46.933
17.067-55.467l426.667-213.333c8.533-8.533 12.8-8.533 21.333-8.533s12.8 0
17.067 4.267l426.667 213.333c21.333 8.533 29.867 34.133 17.067 55.467-8.533
21.333-34.133 29.867-51.2 21.333z" />
<glyph unicode="&#xe91d;" glyph-name="layout"
d="M810.667 853.334h-597.333c-72.533
0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0
128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM213.333
768h597.333c25.6 0 42.667-17.067 42.667-42.667v-128h-682.667v128c0 25.6
17.067 42.667 42.667 42.667zM170.667 128v384h170.667v-426.667h-128c-25.6
0-42.667 17.067-42.667 42.667zM810.667
85.334h-384v426.667h426.667v-384c0-25.6-17.067-42.667-42.667-42.667z"
/>
<glyph unicode="&#xe91e;" glyph-name="link"
d="M900.267 819.2c-98.133 98.133-256 98.133-354.133
0l-76.8-72.533c-17.067-17.067-17.067-42.667 0-59.733s42.667-17.067 59.733
0l72.533 72.533c68.267 64 170.667 64 238.933 0s68.267-174.933
4.267-238.933l-128-128c-4.267-4.267-12.8-12.8-17.067-17.067-76.8-55.467-183.467-42.667-238.933
34.133-12.8 17.067-42.667 21.333-59.733
8.533s-21.333-42.667-8.533-59.733c51.2-68.267 128-102.4 204.8-102.4 51.2 0
106.667 17.067 153.6 51.2 8.533 8.533 17.067 17.067 29.867 25.6l128
128c98.133 98.133 93.867 264.533-8.533 358.4zM490.667
166.4l-72.533-72.533c-68.267-64-170.667-64-238.933 0s-68.267 174.933-4.267
238.933l128 128c4.267 4.267 12.8 12.8 17.067 17.067 38.4 25.6 81.067 38.4
128 34.133 46.933-8.533 85.333-29.867 110.933-68.267 12.8-17.067
42.667-21.333 59.733-8.533s21.333 42.667 8.533 59.733c-42.667 55.467-102.4
89.6-166.4 98.133-64
12.8-132.267-4.267-187.733-46.933-8.533-8.533-17.067-17.067-25.6-25.6l-128-128c-98.133-102.4-93.867-264.533
4.267-362.667 51.2-46.933 115.2-72.533 179.2-72.533s128 25.6 179.2
72.533l72.533 72.533c17.067 17.067 17.067 42.667 0 59.733s-46.933 21.333-64
4.267z" />
<glyph unicode="&#xe91f;" glyph-name="menu"
d="M896 469.334h-768c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h768c25.6 0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667
42.667zM128 640h768c25.6 0 42.667 17.067 42.667 42.667s-17.067
42.667-42.667 42.667h-768c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667zM896 213.334h-768c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h768c25.6 0 42.667
17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
<glyph unicode="&#xe920;"
glyph-name="message-square" d="M810.667
853.334h-597.333c-72.533 0-128-55.467-128-128v-682.667c0-17.067
8.533-34.133 25.6-38.4 4.267-4.267 12.8-4.267 17.067-4.267 12.8 0 21.333
4.267 29.867 12.8l157.867 157.867h494.933c72.533 0 128 55.467 128
128v426.667c0 72.533-55.467 128-128 128zM853.333
298.667c0-25.6-17.067-42.667-42.667-42.667h-512c-12.8
0-21.333-4.267-29.867-12.8l-98.133-98.133v580.267c0 25.6 17.067 42.667
42.667 42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-426.667z"
/>
<glyph unicode="&#xe921;" glyph-name="moon"
d="M917.333 430.934c-12.8 8.533-34.133
8.533-46.933-4.267-89.6-68.267-213.333-68.267-302.933 0-115.2 85.333-140.8
243.2-55.467 358.4 8.533 12.8 12.8 29.867 4.267 46.933-8.533 12.8-25.6
21.333-42.667 21.333-204.8-17.067-366.933-179.2-384-384-21.333-234.667
149.333-443.733 384-465.067 12.8 0 25.6 0 38.4 0 98.133 0 196.267 34.133
273.067 98.133 89.6 72.533 140.8 174.933 153.6 290.133 0 12.8-8.533
29.867-21.333 38.4zM733.867
166.4c-68.267-59.733-157.867-85.333-247.467-76.8-187.733 17.067-324.267
183.467-307.2 371.2 12.8 132.267 102.4 247.467 221.867
290.133-51.2-136.533-4.267-298.667 119.467-392.533 93.867-68.267
213.333-85.333 320-46.933-25.6-55.467-59.733-106.667-106.667-145.067z"
/>
<glyph unicode="&#xe922;" glyph-name="pie-chart"
d="M921.6 298.667c-21.333 8.533-46.933
0-55.467-21.333-81.067-196.267-307.2-285.867-503.467-204.8s-285.867
307.2-204.8 503.467c38.4 89.6 110.933 162.133 200.533 200.533 21.333 8.533
29.867 34.133 21.333 55.467s-34.133 34.133-55.467
25.6c-110.933-46.933-196.267-136.533-243.2-247.467-102.4-238.933
12.8-516.267 247.467-614.4 59.733-25.6 123.733-38.4 183.467-38.4 183.467 0
358.4 106.667 430.933 285.867 8.533 21.333 0 46.933-21.333 55.467zM512
896c-25.6 0-42.667-17.067-42.667-42.667v-426.667c0-25.6 17.067-42.667
42.667-42.667h426.667c25.6 0 42.667 17.067 42.667 42.667 0 260.267-209.067
469.333-469.333 469.333zM554.667 469.334v337.067c179.2-21.333 320-162.133
337.067-337.067h-337.067z" />
<glyph unicode="&#xe923;" glyph-name="plus"
d="M810.667 469.334h-256v256c0 25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-256h-256c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h256v-256c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v256h256c25.6 0
42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
<glyph unicode="&#xe924;"
glyph-name="plus-circle" d="M512 896c-260.267
0-469.333-209.067-469.333-469.333s209.067-469.333 469.333-469.333 469.333
209.067 469.333 469.333-209.067 469.333-469.333 469.333zM512
42.667c-213.333 0-384 170.667-384 384s170.667 384 384 384c213.333 0
384-170.667 384-384s-170.667-384-384-384zM682.667 469.334h-128v128c0
25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0
42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
<glyph unicode="&#xe925;"
glyph-name="plus-square" d="M810.667
853.334h-597.333c-72.533 0-128-55.467-128-128v-597.333c0-72.533 55.467-128
128-128h597.333c72.533 0 128 55.467 128 128v597.333c0 72.533-55.467 128-128
128zM853.333 128c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667
17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667
42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM682.667
469.334h-128v128c0 25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-128h-128c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h128v-128c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v128h128c25.6 0
42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667z" />
<glyph unicode="&#xe926;" glyph-name="radio"
d="M512 554.667c-72.533 0-128-55.467-128-128s55.467-128 128-128 128
55.467 128 128-55.467 128-128 128zM512 384c-25.6 0-42.667 17.067-42.667
42.667s17.067 42.667 42.667 42.667 42.667-17.067
42.667-42.667-17.067-42.667-42.667-42.667zM298.667 426.667c0 55.467 21.333
110.933 64 149.333 0 0 0 0 0 0 17.067 17.067 12.8 42.667 0 59.733-17.067
17.067-42.667 17.067-59.733 0 0 0 0 0 0 0-115.2-115.2-115.2-307.2 0-422.4
8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067
17.067 42.667 0 59.733-42.667 42.667-64 98.133-64 153.6zM238.933
699.734c17.067 17.067 17.067 42.667 0 59.733s-42.667 17.067-59.733
0c-183.467-183.467-183.467-482.133 0-665.6 8.533-8.533 21.333-12.8
29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067 42.667 0
59.733-149.333 149.333-149.333 396.8 0 546.133zM844.8 759.467c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667 0-59.733c149.333-149.333
149.333-392.533 0-541.867-17.067-17.067-17.067-42.667 0-59.733 8.533-8.533
21.333-12.8 29.867-12.8s21.333 4.267 29.867 12.8c183.467 179.2 183.467
477.867 0 661.333zM721.067 635.734c-17.067 17.067-42.667 17.067-59.733
0s-17.067-42.667 0-59.733c85.333-81.067 85.333-217.6
4.267-298.667-4.267-4.267-8.533-8.533-12.8-12.8-8.533-21.333 0-46.933
17.067-55.467 4.267-4.267 12.8-4.267 17.067-4.267 12.8 0 21.333 4.267
29.867 12.8 123.733 115.2 123.733 302.933 4.267 418.133z" />
<glyph unicode="&#xe927;"
glyph-name="refresh-ccw" d="M42.667 469.334h256c25.6 0
42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667h-149.333l119.467
115.2c34.133 34.133 81.067 64 128 81.067 85.333 29.867 179.2 25.6
260.267-12.8s145.067-106.667 174.933-196.267c8.533-21.333 34.133-34.133
55.467-25.6s34.133 34.133 25.6 55.467c-38.4 106.667-115.2 192-217.6
243.2s-217.6 55.467-324.267
17.067c-59.733-25.6-115.2-59.733-157.867-102.4l-128-119.467v157.867c0
25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-256c0 0
0-4.267 0-4.267 0-4.267 0-8.533 0-8.533 0-4.267 4.267-4.267 4.267-8.533 0 0
0-4.267 4.267-4.267 0 0 0 0 0 0 4.267-4.267 8.533-8.533 12.8-8.533 0 0 0 0
0 0 8.533-8.533 17.067-8.533 21.333-8.533zM1024 349.867c0 4.267 0 4.267 0
8.533s-4.267 4.267-4.267 8.533c0 0 0 4.267-4.267 4.267 0 0 0 0 0 0-4.267
4.267-4.267 4.267-8.533 4.267 0 0-4.267 4.267-4.267 4.267s-4.267 0-4.267
0-8.533 0-12.8 4.267c0 0 0 0 0 0h-256c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h149.333l-119.467-115.2c-132.267-132.267-349.867-132.267-482.133
0-34.133 34.133-64 81.067-81.067 128-8.533 21.333-34.133 34.133-55.467
25.6s-34.133-34.133-25.6-55.467c21.333-59.733 55.467-115.2 102.4-157.867
85.333-85.333 192-123.733 302.933-123.733s217.6 42.667 298.667 123.733l128
119.467v-157.867c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067 42.667
42.667v256c-8.533 4.267-8.533 4.267-8.533 8.533z" />
<glyph unicode="&#xe928;"
glyph-name="refresh-cw" d="M887.467 337.067c-21.333
8.533-46.933-4.267-55.467-25.6-17.067-46.933-42.667-93.867-81.067-128-59.733-64-149.333-98.133-238.933-98.133
0 0 0 0 0 0-89.6 0-174.933 34.133-243.2 102.4l-119.467 110.933h149.333c25.6
0 42.667 17.067 42.667 42.667s-17.067 42.667-42.667 42.667h-256c0 0 0 0 0
0-4.267 0-8.533 0-8.533-4.267 0 0-4.267 0-4.267 0s-4.267
0-4.267-4.267c-4.267 0-8.533-4.267-8.533-8.533 0 0 0 0 0
0s0-4.267-4.267-4.267c0-4.267-4.267-4.267-4.267-8.533s0-4.267 0-8.533c0 0
0-4.267 0-4.267v-256c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067
42.667 42.667v157.867l123.733-119.467c72.533-81.067 179.2-123.733
294.4-123.733 0 0 0 0 0 0 115.2 0 221.867 42.667 302.933 123.733 42.667
42.667 81.067 98.133 102.4 157.867 4.267 25.6-8.533 51.2-29.867
55.467zM1024 507.734c0 0 0 4.267 0 4.267v256c0 25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-157.867l-123.733 119.467c-42.667
42.667-98.133 81.067-157.867 102.4-110.933 34.133-226.133
29.867-328.533-21.333-102.4-46.933-179.2-132.267-217.6-243.2-8.533-21.333
4.267-46.933 25.6-51.2 21.333-8.533 46.933 4.267 55.467 25.6 29.867 85.333
93.867 153.6 174.933 196.267 81.067 38.4 174.933 42.667 260.267 12.8
46.933-17.067 93.867-42.667 128-81.067l119.467-115.2h-149.333c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h256c4.267 0 12.8
0 17.067 4.267 0 0 0 0 0 0 4.267 4.267 8.533 4.267 12.8 8.533 0 0 0 0 0 0s0
4.267 4.267 4.267c0 4.267 4.267 4.267 4.267 8.533 4.267 4.267 4.267 8.533
4.267 12.8z" />
<glyph unicode="&#xe929;" glyph-name="settings"
d="M512 597.334c-93.867 0-170.667-76.8-170.667-170.667s76.8-170.667
170.667-170.667c93.867 0 170.667 76.8 170.667 170.667s-76.8 170.667-170.667
170.667zM512 341.334c-46.933 0-85.333 38.4-85.333 85.333s38.4 85.333 85.333
85.333c46.933 0 85.333-38.4
85.333-85.333s-38.4-85.333-85.333-85.333zM866.133 281.6c4.267 8.533 12.8
17.067 29.867 17.067 72.533 0 128 55.467 128 128s-55.467 128-128
128h-8.533c-8.533 0-17.067 4.267-21.333 12.8l-4.267 8.533c-4.267
8.533-4.267 21.333 8.533 34.133 46.933 46.933 51.2 115.2 12.8
166.4v12.8l-17.067 8.533c-21.333 21.333-51.2 34.133-85.333 34.133 0 0 0 0 0
0-34.133
0-68.267-12.8-93.867-38.4-8.533-8.533-21.333-8.533-29.867-4.267-8.533-4.267-17.067
8.533-17.067 21.333 0 72.533-55.467 128-128
128s-128-55.467-128-128v-8.533c0-8.533-4.267-17.067-12.8-21.333l-8.533-4.267c-8.533-4.267-21.333
0-34.133 8.533-51.2 51.2-132.267 51.2-179.2 0-51.2-51.2-51.2-132.267
4.267-183.467 8.533-8.533 8.533-21.333
4.267-34.133-4.267-8.533-17.067-17.067-29.867-17.067-72.533
0-128-55.467-128-128s55.467-128 128-128h8.533c12.8 0 21.333-8.533
25.6-17.067s4.267-21.333-8.533-34.133c-25.6-25.6-38.4-55.467-38.4-89.6
0-29.867 12.8-59.733 34.133-85.333l4.267-4.267c0 0 0 0 0
0l12.8-12.8c51.2-38.4 119.467-34.133 170.667 12.8 8.533 8.533 21.333 8.533
34.133 4.267s17.067-12.8 17.067-29.867c0-72.533 55.467-128 128-128s128
55.467 128 128v8.533c0 12.8 8.533 21.333 17.067 25.6s21.333 4.267
34.133-8.533c51.2-51.2 132.267-51.2 179.2 0 51.2 51.2 51.2 132.267-4.267
183.467-4.267 12.8-8.533 25.6-4.267 34.133v0zM814.933 187.734c8.533-8.533
12.8-17.067
12.8-29.867s-4.267-21.333-12.8-29.867c-8.533-8.533-17.067-12.8-29.867-12.8
0 0 0 0 0 0-12.8 0-21.333 4.267-34.133 17.067-34.133 34.133-81.067
42.667-123.733
21.333-42.667-17.067-68.267-59.733-68.267-102.4v-8.533c0-25.6-17.067-42.667-42.667-42.667s-42.667
17.067-42.667 42.667v4.267c0 46.933-29.867 85.333-72.533 102.4-12.8
8.533-29.867 8.533-46.933 8.533-29.867
0-59.733-12.8-81.067-34.133-17.067-17.067-38.4-17.067-55.467-4.267l-8.533
17.067h-4.267c-4.267 4.267-4.267 12.8-4.267 17.067 0 12.8 4.267 21.333
17.067 34.133 34.133 34.133 42.667 81.067 21.333 123.733-17.067
42.667-59.733 68.267-102.4 68.267h-8.533c-25.6 0-42.667 17.067-42.667
42.667s17.067 42.667 42.667 42.667h4.267c46.933 0 85.333 29.867 102.4
72.533s8.533 89.6-25.6 128c-17.067 17.067-17.067 42.667 0 59.733s42.667
17.067 64-4.267c29.867-29.867 76.8-38.4 115.2-25.6l12.8 4.267c42.667 17.067
68.267 59.733 68.267 102.4v8.533c0 25.6 17.067 42.667 42.667
42.667s42.667-17.067 42.667-46.933c0-46.933 25.6-85.333
68.267-102.4s89.6-8.533 128 25.6c8.533 8.533 17.067 12.8 29.867 12.8v0c12.8
0 21.333-4.267 29.867-12.8v0c17.067-17.067
17.067-42.667-4.267-64-29.867-29.867-38.4-76.8-25.6-115.2l4.267-12.8c17.067-42.667
59.733-68.267 102.4-68.267h8.533c25.6 0 42.667-17.067
42.667-42.667s-17.067-42.667-46.933-42.667c-46.933
0-85.333-25.6-102.4-68.267-21.333-42.667-8.533-89.6 25.6-128z" />
<glyph unicode="&#xe92a;"
glyph-name="shopping-cart" d="M341.333 170.667c-72.533
0-128-55.467-128-128s55.467-128 128-128 128 55.467 128 128-55.467 128-128
128zM341.333-0c-25.6 0-42.667 17.067-42.667 42.667s17.067 42.667 42.667
42.667 42.667-17.067 42.667-42.667-17.067-42.667-42.667-42.667zM853.333
170.667c-72.533 0-128-55.467-128-128s55.467-128 128-128 128 55.467 128
128-55.467 128-128 128zM853.333-0c-25.6 0-42.667 17.067-42.667
42.667s17.067 42.667 42.667 42.667 42.667-17.067
42.667-42.667-17.067-42.667-42.667-42.667zM375.467 213.334h452.267c0 0 0 0
4.267 0 59.733 0 115.2 42.667 123.733 102.4l68.267 358.4c4.267 12.8 0
25.6-8.533 34.133-8.533 12.8-21.333 17.067-34.133 17.067h-704l-12.8
102.4c-8.533 64-59.733 110.933-128 110.933h-93.867c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h93.867c21.333 0
38.4-17.067 42.667-38.4l64-490.667c12.8-64 64-110.933
132.267-110.933zM930.133
640l-59.733-307.2c-4.267-21.333-21.333-34.133-42.667-34.133h-456.533c-21.333
0-38.4 17.067-42.667 38.4l-38.4 302.933h640z" />
<glyph unicode="&#xe92b;" glyph-name="sliders"
d="M170.667 469.334c25.6 0 42.667 17.067 42.667 42.667v298.667c0
25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-298.667c0-25.6 17.067-42.667
42.667-42.667zM512 469.334c-25.6 0-42.667-17.067-42.667-42.667v-384c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v384c0 25.6-17.067
42.667-42.667 42.667zM853.333 384c25.6 0 42.667 17.067 42.667 42.667v384c0
25.6-17.067 42.667-42.667 42.667s-42.667-17.067-42.667-42.667v-384c0-25.6
17.067-42.667 42.667-42.667zM298.667 384h-256c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h85.333v-256c0-25.6 17.067-42.667 42.667-42.667s42.667 17.067
42.667 42.667v256h85.333c25.6 0 42.667 17.067 42.667 42.667s-17.067
42.667-42.667 42.667zM640 640h-85.333v170.667c0 25.6-17.067 42.667-42.667
42.667s-42.667-17.067-42.667-42.667v-170.667h-85.333c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667 42.667-42.667h256c25.6 0 42.667
17.067 42.667 42.667s-17.067 42.667-42.667 42.667zM981.333
298.667h-256c-25.6 0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h85.333v-170.667c0-25.6 17.067-42.667 42.667-42.667s42.667
17.067 42.667 42.667v170.667h85.333c25.6 0 42.667 17.067 42.667
42.667s-17.067 42.667-42.667 42.667z" />
<glyph unicode="&#xe92c;"
glyph-name="smartphone" d="M725.333 896h-426.667c-72.533
0-128-55.467-128-128v-682.667c0-72.533 55.467-128 128-128h426.667c72.533 0
128 55.467 128 128v682.667c0 72.533-55.467 128-128 128zM768
85.334c0-25.6-17.067-42.667-42.667-42.667h-426.667c-25.6 0-42.667
17.067-42.667 42.667v682.667c0 25.6 17.067 42.667 42.667
42.667h426.667c25.6 0 42.667-17.067 42.667-42.667v-682.667zM482.133
200.534c-8.533-8.533-12.8-17.067-12.8-29.867s4.267-21.333
12.8-29.867c8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8c8.533 8.533 12.8 21.333 12.8 29.867s-4.267 21.333-12.8 29.867c-17.067
17.067-42.667 17.067-59.733 0z" />
<glyph unicode="&#xe92d;" glyph-name="trash-2"
d="M896 725.334h-170.667v42.667c0 72.533-55.467 128-128
128h-170.667c-72.533 0-128-55.467-128-128v-42.667h-170.667c-25.6
0-42.667-17.067-42.667-42.667s17.067-42.667
42.667-42.667h42.667v-554.667c0-72.533 55.467-128 128-128h426.667c72.533 0
128 55.467 128 128v554.667h42.667c25.6 0 42.667 17.067 42.667
42.667s-17.067 42.667-42.667 42.667zM384 768c0 25.6 17.067 42.667 42.667
42.667h170.667c25.6 0 42.667-17.067 42.667-42.667v-42.667h-256v42.667zM768
85.334c0-25.6-17.067-42.667-42.667-42.667h-426.667c-25.6 0-42.667
17.067-42.667 42.667v554.667h512v-554.667zM426.667 512c-25.6
0-42.667-17.067-42.667-42.667v-256c0-25.6 17.067-42.667
42.667-42.667s42.667 17.067 42.667 42.667v256c0 25.6-17.067 42.667-42.667
42.667zM597.333 512c-25.6 0-42.667-17.067-42.667-42.667v-256c0-25.6
17.067-42.667 42.667-42.667s42.667 17.067 42.667 42.667v256c0 25.6-17.067
42.667-42.667 42.667z" />
<glyph unicode="&#xe92e;" glyph-name="twitter"
d="M1006.933 844.8c-12.8 8.533-34.133 8.533-46.933
0-29.867-21.333-64-38.4-98.133-51.2-85.333 76.8-217.6 81.067-307.2
4.267-55.467-46.933-85.333-110.933-85.333-179.2-123.733 8.533-234.667
72.533-307.2 174.933-8.533 12.8-21.333 17.067-38.4
17.067s-29.867-12.8-34.133-25.6c-4.267-4.267-46.933-106.667-42.667-230.4
4.267-106.667 46.933-243.2
204.8-341.333-64-29.867-136.533-42.667-209.067-42.667-17.067
0-38.4-12.8-42.667-29.867s4.267-38.4 21.333-46.933c106.667-59.733
221.867-89.6 328.533-89.6s209.067 25.6 302.933 81.067c183.467 102.4 285.867
298.667 285.867 533.333 0 8.533 0 12.8 0 21.333 42.667 46.933 72.533 102.4
85.333 162.133 4.267 17.067-4.267 34.133-17.067 42.667zM861.867
682.667c-8.533-8.533-12.8-25.6-12.8-38.4 4.267-8.533 4.267-17.067
4.267-25.6
0-204.8-89.6-371.2-243.2-460.8-119.467-68.267-260.267-85.333-401.067-51.2
55.467 17.067 106.667 38.4 153.6 72.533 17.067 8.533 21.333 21.333 21.333
38.4s-12.8 29.867-25.6 34.133c-247.467 110.933-238.933 320-213.333 426.667
93.867-93.867 226.133-149.333 366.933-145.067 21.333 0 42.667 21.333 42.667
42.667v42.667c0 42.667 17.067 85.333 51.2 115.2 59.733 55.467 157.867
46.933 209.067-12.8 12.8-12.8 29.867-17.067 42.667-12.8 8.533 4.267 21.333
4.267 29.867 8.533-8.533-12.8-17.067-21.333-25.6-34.133z" />
<glyph unicode="&#xe92f;" glyph-name="x"
d="M571.733 426.667l226.133 226.133c17.067 17.067 17.067 42.667 0
59.733s-42.667 17.067-59.733 0l-226.133-226.133-226.133 226.133c-17.067
17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l226.133-226.133-226.133-226.133c-17.067-17.067-17.067-42.667
0-59.733 8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867
12.8l226.133 226.133 226.133-226.133c8.533-8.533 21.333-12.8
29.867-12.8s21.333 4.267 29.867 12.8c17.067 17.067 17.067 42.667 0
59.733l-226.133 226.133z" />
<glyph unicode="&#xe930;" glyph-name="x-circle"
d="M512 896c-260.267 0-469.333-209.067-469.333-469.333s209.067-469.333
469.333-469.333 469.333 209.067 469.333 469.333-209.067 469.333-469.333
469.333zM512 42.667c-213.333 0-384 170.667-384 384s170.667 384 384
384c213.333 0 384-170.667 384-384s-170.667-384-384-384zM669.867
584.534c-17.067 17.067-42.667 17.067-59.733 0l-98.133-98.133-98.133
98.133c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l98.133-98.133-98.133-98.133c-17.067-17.067-17.067-42.667 0-59.733
8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867 12.8l98.133 98.133
98.133-98.133c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867
12.8c17.067 17.067 17.067 42.667 0 59.733l-98.133 98.133 98.133
98.133c17.067 17.067 17.067 42.667 0 59.733z" />
<glyph unicode="&#xe931;" glyph-name="x-square"
d="M810.667 853.334h-597.333c-72.533
0-128-55.467-128-128v-597.333c0-72.533 55.467-128 128-128h597.333c72.533 0
128 55.467 128 128v597.333c0 72.533-55.467 128-128 128zM853.333
128c0-25.6-17.067-42.667-42.667-42.667h-597.333c-25.6 0-42.667
17.067-42.667 42.667v597.333c0 25.6 17.067 42.667 42.667
42.667h597.333c25.6 0 42.667-17.067 42.667-42.667v-597.333zM669.867
584.534c-17.067 17.067-42.667 17.067-59.733 0l-98.133-98.133-98.133
98.133c-17.067 17.067-42.667 17.067-59.733 0s-17.067-42.667
0-59.733l98.133-98.133-98.133-98.133c-17.067-17.067-17.067-42.667 0-59.733
8.533-8.533 17.067-12.8 29.867-12.8s21.333 4.267 29.867 12.8l98.133 98.133
98.133-98.133c8.533-8.533 21.333-12.8 29.867-12.8s21.333 4.267 29.867
12.8c17.067 17.067 17.067 42.667 0 59.733l-98.133 98.133 98.133
98.133c17.067 17.067 17.067 42.667 0 59.733z" />
<glyph unicode="&#xe932;" glyph-name="zap"
d="M934.4 529.067c-8.533 17.067-21.333 25.6-38.4 25.6h-337.067l38.4
294.4c4.267 17.067-8.533 38.4-25.6 42.667-17.067 8.533-38.4
4.267-51.2-12.8l-426.667-512c-8.533-12.8-12.8-29.867-4.267-46.933
8.533-12.8 21.333-21.333 38.4-21.333h337.067l-38.4-294.4c-4.267-17.067
8.533-38.4 25.6-42.667 4.267-4.267 12.8-4.267 17.067-4.267 12.8 0 25.6
4.267 34.133 17.067l426.667 512c8.533 12.8 12.8 29.867 4.267
42.667zM529.067 140.8l25.6 196.267c0 12.8-4.267 25.6-8.533 34.133-8.533
8.533-21.333 12.8-34.133 12.8h-294.4l273.067 328.533-21.333-196.267c0-12.8
4.267-25.6 8.533-34.133 8.533-8.533 21.333-12.8
29.867-12.8h294.4l-273.067-328.533z" />
</font></defs></svg>fonts/notifly.ttf000064400000031424151163010210010072
0ustar00�0OS/2R�`cmapVҹTgasppglyfO���x-�headN��/h6hhea��/�$hmtx��/��loca	�r0�pmaxp@1
name 10�post2�
��������3	@�2���@�@ 8
 �2����
���������797979+���U(#".#"#";267326732654&#��
Z�

x��
Z�

x��
���

��
�x

b+����7F\"327>7654'.'&"'.'&547>7632"326=4&#3267>54&'&"bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFP



"
�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhU����




+����
)8N'.#!"3!26?>5.'!'7!"326=4&#3267>54&'&"�
��
��
b
�I����@��



"
w��	��	��
^	����<���s����




+�Z7E[%.'&813!267>5.'#!"&'.7>36"326=4&3267>54&'&"��
+2
��-�0
L�*	k#	k�w1



"
�^

��-h
,#
^	"Z
		
��

�����
	

+����@FOX]chn%>54&'041&'.'&'0"1.#"010212327>767>5%#'73!467#.5%37!7%'>7!.|)0&%a::@

:56`))
)0&%`99>
966`)) �͖HH�H����	+�
����^P��Ъ^0�P��Z^P�0�^0�P�9�M0^)80/H

1##+:�L0_-7//I

1##+����,X&��@$�@#-X&+U�
Uk�բ:H���
Uj*�9I+�U$(9=#";2654&#3#";2654&##3#";2654&##3���>UU�ժ�*VV�ի�+UUU������*��ր��U��+�U$(9=#";2654&#3#";2654&##3#";2654&##3U��>VV���+UU����+UUU������*��ր��U����s�&"'&"326764's
"
�I�
"


�


�

��H�
"
��
"
+����Ja"#81"'.'&547>763812676&'.#81"38127>76=4&#&"'&"326764'�hFFPPFFhhFFP*M'!-`3bUV%$$%VUbbUV%$H
"
�Ib
"


��

�&PFFhhFFPPFFh!%$�UVabUV%%%%VUb&M�Hb


"
��
"
U�U=&"'&"326764'"#!"&5463!2654&#!"3!2654&#�
"
�Ib
"


��

s����*6JJ6V6JI�Hb


"
��
"
����UI7��6JJ6+�I&"'&"326764'
"
��
"




I��
"
�
"
b���764'&"326764/��


"
�



���
"
�
"
�
"
�b���	&"326764'��
"


��






�
"
��
"

"
�I	&"2?326764�
"
�


"
��
I�
"


��
"
���,'&"326?64'&"'326?64'&"'&"���
"


��


"��


"
��
"


����


"
��
"

�
"
��
"
����-764'&"326764/!764'&"326764/<�


"
�

�

�*�


"
�

�

���
"


�
"
�
"
��
"


�
"
�
"
����-'&"326?64'!'&"326?64'�
"


��

�

���
"


��




�

��


"
��
"
�
"
�


"
��
"
�
"

���-7326764/&"27&"2?326764/I��

�
"
�


"
�
"
�


"
��

����
"
��
"


�
"


��
"
�+���wsw|�����<5<50454&58181.#1810"10"1&"0"10"1"8181008181302102103267021021>38181>781%5'75'#'%%775?'��U�U�	�
��bb�����+3��V��3���͉�����bb
+������
	�DE��bbbb��bwwbɴ�w��]ww]ͳ�D�E+����F!"3!2654&#!"&5463!2#"&5463!2326=4&#!";2654&#U��6JJ6�7II����U*�J6��7II7*UI7��6JJ6�7I����++6JJ6��6J	S$q%4&#"'&"33267>?64'&"%.#81#&'.'&7>'.'&67>76;8123267>76&'�bb
"
��
"
D#n@0/{HGHMx*&)

"

#  ^9<:;c$%3*I$


)8	
 �b��b


"
��
"


�0:G66A
	XCD�J,Q 

"
?#9v33I		://;
%$@$#8
"
V43`-+���s&;@"#!"&546;2654&+"3!26=4&#'&";26764'#5U����7II7U6Jt�
"
�U�

��&o�ob�VJ6��6JJ6�g�

�V	��
"
�bo�oU�U&K"#!"&5463!2654&#!"3!2654&#.'.#!";326732654&'�*�6JJ6�6J����s


	����I7�+6JJ6��s
"
��/�U+.#!"3267>5>''54&'!���M

�	M�bV�����<


�x��
V
^�

�w
��+�Q��U�U%)9=NR!"3!2654&##53%!"3!2654&##53!"3!2654&#53%!"3!2654&##53���++����++��+��+>��V��++��U��+���U��+������*���U��*������U(L1.#1"81'.#"32676764'&'	&47>322?81>38121�&c76h&&e97c&'/+&x
	w+*;����99G$&E/
"
+G)'E'**''**'&h66h&��x(33l33(����Y:�:/

/F&&F+����%A]s&67>326767>765.''"327>7654'.'&"'.'&547>7632'3267>54&'&"3C�"
?#O
8A33bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFn



"
�=@"  
* 0


)*9Z�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�
	

U���w.	&"3!2654&'#3+4&#!"#"&5	���

��	J6V6J	�������UUM*

��	�*6JJ6�	��U������	���@+���|5L3267%>54&'%&"%
-%&3267%>'.5%&3267%>'.D��

�U
	�U

�M����M��f�f!

�	�
	 �f�f!

�	�
	
Z��

��

̦�������
$��!���

!��!U�U!(!"3!2654&!2!54633#"&!!+��6JJ6V6JJ�tV�V*������UI7��6JJ6U7IU������U���A���j3i&'&"2?62&'.3267>?676&'&'"'.?>7>7>'.'&326?64'.�%..`..%M
"
I3�430�:�)
%


&m9'P#
�%'�gI3�330�@##9
%

 V00b*
�$%&]00]&I
'3%%H
"


H000�0�
):
	&
33�%//c./#�sH000�0�!
	
%
*2


�'0/c./%#&&#H
"


U���*!"3!2654&#%!2654&#!"!"3!2654&��������UU�U(!"326?!2654&##!"463!2+��6J



��6JJ6*�
bVUI7�V
�I7�7I��bDZ�U5W&"'&'&'.767>'.#:326767>7674&''&'.'&767>767767�	
!''P''"+ MCDf  hJJX	
J�:"'
�3�DF;;T:'&- /#'(R**(4�	



 +,a12+

  fDCMXPQ~))20 !I)(,	��,'
!e@@G1.-L376h/.$)K,����5HQ&#'&'.'&7>7>'.327>7676&'"3!2654'.'&#�!77�LMIJ547hC!)%%=&D@AX,^-EBAr--�f�$%VUb+C;:Z+I54877�MLJCi!?%%*Y^]�CC%J55C!U�VaVU�$%�UQY::B�UU
!4&#"!"3!3265!2654&#+�����+����7X"327>7654'.'&"'.'&547>7632#54&#"#";326=32654&#bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFF[�����%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�����U�U@!"3!2654&#!"&5463!2#54&#"#";326=32654&#+��6JJ6V6JJ��V�����UI7��6JJ6U7I�+U�����LQ��:Xv�"32654&"&54632'467816&'&"81326764'.564'&"326764'&'&4767%&"32676764'&'&"326767>'&'6JJ66JJ6�
 	
"
++ 
<


"
E""""E

88^
"


88

E""""E|
"




.-+J67II76J�+)O
"


+87s77,
"
P*
"

DWW�WVE
"
8GG�GH8;

"
8GG�FG8
"
CVV�WWD{


"
'(Q''"+67q77+	UJ�!2654&+7>767>'&'.'&'&'.54&#"01103813813<54&50&#81.#0&10"10&'81!";"'&'.'.327>76?3265.5+�xD#@�==\!7"!'&()R*)(-Q
��	��x1??�??2+
!3$
#$M()*))(L##��s+
dC!($#>
3 x��wt11C#!-Q 
w�	RV�&#81"&/32654&#!81"0"10"810#01326=38127>767>76&'70414&#"'.'&'&67>7>#"3!26781>781063465>5w!
'-CC}3x��|!!K*)++*)M##
6�| Q-***S)(&'!"7!\==�@#Dx�
Q#C0243o��w
Q-!��x 6

>$%* @d

's����"32654&"&54632>32654&+"&/&67>'5'.#81"'&54&#"&'&"#";28167>326=4676276&'.71#81"&'.#"&=4&'.#"/#.5467>'.+"&546;2676&'&476?>=463267>3121;2#"FeeFFeeF#22##22?
6JJ6		$,1J66J	'i$&*
6JJ6		
	'^&	
J67I	'i$&*3


B  $) 

+
	

9 	#7



#@
 $$  C
	

9 	#7
UdFGddGFd�2$#22#$2;I76J		#]'	
6JJ6	&&&k&
I76J

-,
#
6JJ6	

&&&k&
^	
	
: #7
	
	
B  %)  C#

	
9 	#6



#@ %$ 
C���$0S^%"32654&"&54632#%"32654&"&54632%!0232676&'.#!'.+";23#!"&'!U6JJ67II76JJ67II7��-HD
�@F3^^@
G3+<�7'��J67II76J��J67II76J��:-f

g0?�0?���/U+C[r2654&#"3!"32654&#2654&#")";326532654&##54&#"#"3!2654&#!";326=32654&�UU��UVUUUU�VU�+�����U�������������U�
6!"3!2654&##!"&5463!23267>54&'&"�V7II7�7II7+�V���



"
�J6�U6JJ6�6J�����	
U����"-8GV#54&+"#";3!26532654&#%46;2!5#!"&5!"32654&#3"32654&#��I7�7I�+I7�7I+�����V����+6JJ6+��6JJ6++++�U+�����MJ�&"&'.&'.'&'.#"#"326767>765<5>76&''&'>7>54&'&'.767726=46767>7�

3 ('R)(!*,.,+O""

*

.'';0k6
(*)S*)(P�GE55I +


�?--:-01e545*L$	
\10'
#**^235-~&


M	
#]3
,'	
�\(-,Z++%

()'77�PPX	#R-
�

MEEv/0!

#
)99w88(#&		+ <)	-

	���&764'&"'&"326?326764/<�


"
��
"


��




��

���
"
��
"
��
"
��
"
�+����7^"327>7654'.'&"'.'&547>7632&"'&"326?326764/764'bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFN
"
bb
"


bb




bb

bb

�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhcc
"
bb
"
bb
"
bb
"
U�UF!"3!2654&#!"&5463!2&"'&"326?326764/764'+��6JJ6V6JJ��V�
"
bb
"


bb




bb

bb

UI7��6JJ6U7I�+U�cc
"
bb
"
bb
"
bb
"
Z���|!4.#!6&'&3!3267>'74&'.#!3!�
��&

	�U
Q&

��k
��&��

&

�

��
	

�|�
I�	��+[��_<��-8�-8��	������	7+++++++�+U�bb�
��
++	+U/U+U+UAUUZ,�+UL	�U�+UZ
^�`���Jt�V����D���,�2��	d	�
�
�P�6x�
B
�
�t��t@�2�
�f�2��7��E�$i
�		�	Q	�	/	u	
4�converseflowconverseflowVersion 1.0Version
1.0converseflowconverseflowconverseflowconverseflowRegularRegularconverseflowconverseflowFont
generated by IcoMoon.Font generated by
IcoMoon.fonts/notifly.woff000064400000031540151163010210010235
0ustar00wOFF3`3OS/2``RcmaphTTVҹgasp�glyf�-�-�O���head/�66N��hhea/�$$��hmtx0����loca0�pp	�rmaxp1\
 @name1|�� post3@ 
��������3	@�2���@�@ 8
 �2����
���������797979+���U(#".#"#";267326732654&#��
Z�

x��
Z�

x��
���

��
�x

b+����7F\"327>7654'.'&"'.'&547>7632"326=4&#3267>54&'&"bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFP



"
�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhU����




+����
)8N'.#!"3!26?>5.'!'7!"326=4&#3267>54&'&"�
��
��
b
�I����@��



"
w��	��	��
^	����<���s����




+�Z7E[%.'&813!267>5.'#!"&'.7>36"326=4&3267>54&'&"��
+2
��-�0
L�*	k#	k�w1



"
�^

��-h
,#
^	"Z
		
��

�����
	

+����@FOX]chn%>54&'041&'.'&'0"1.#"010212327>767>5%#'73!467#.5%37!7%'>7!.|)0&%a::@

:56`))
)0&%`99>
966`)) �͖HH�H����	+�
����^P��Ъ^0�P��Z^P�0�^0�P�9�M0^)80/H

1##+:�L0_-7//I

1##+����,X&��@$�@#-X&+U�
Uk�բ:H���
Uj*�9I+�U$(9=#";2654&#3#";2654&##3#";2654&##3���>UU�ժ�*VV�ի�+UUU������*��ր��U��+�U$(9=#";2654&#3#";2654&##3#";2654&##3U��>VV���+UU����+UUU������*��ր��U����s�&"'&"326764's
"
�I�
"


�


�

��H�
"
��
"
+����Ja"#81"'.'&547>763812676&'.#81"38127>76=4&#&"'&"326764'�hFFPPFFhhFFP*M'!-`3bUV%$$%VUbbUV%$H
"
�Ib
"


��

�&PFFhhFFPPFFh!%$�UVabUV%%%%VUb&M�Hb


"
��
"
U�U=&"'&"326764'"#!"&5463!2654&#!"3!2654&#�
"
�Ib
"


��

s����*6JJ6V6JI�Hb


"
��
"
����UI7��6JJ6+�I&"'&"326764'
"
��
"




I��
"
�
"
b���764'&"326764/��


"
�



���
"
�
"
�
"
�b���	&"326764'��
"


��






�
"
��
"

"
�I	&"2?326764�
"
�


"
��
I�
"


��
"
���,'&"326?64'&"'326?64'&"'&"���
"


��


"��


"
��
"


����


"
��
"

�
"
��
"
����-764'&"326764/!764'&"326764/<�


"
�

�

�*�


"
�

�

���
"


�
"
�
"
��
"


�
"
�
"
����-'&"326?64'!'&"326?64'�
"


��

�

���
"


��




�

��


"
��
"
�
"
�


"
��
"
�
"

���-7326764/&"27&"2?326764/I��

�
"
�


"
�
"
�


"
��

����
"
��
"


�
"


��
"
�+���wsw|�����<5<50454&58181.#1810"10"1&"0"10"1"8181008181302102103267021021>38181>781%5'75'#'%%775?'��U�U�	�
��bb�����+3��V��3���͉�����bb
+������
	�DE��bbbb��bwwbɴ�w��]ww]ͳ�D�E+����F!"3!2654&#!"&5463!2#"&5463!2326=4&#!";2654&#U��6JJ6�7II����U*�J6��7II7*UI7��6JJ6�7I����++6JJ6��6J	S$q%4&#"'&"33267>?64'&"%.#81#&'.'&7>'.'&67>76;8123267>76&'�bb
"
��
"
D#n@0/{HGHMx*&)

"

#  ^9<:;c$%3*I$


)8	
 �b��b


"
��
"


�0:G66A
	XCD�J,Q 

"
?#9v33I		://;
%$@$#8
"
V43`-+���s&;@"#!"&546;2654&+"3!26=4&#'&";26764'#5U����7II7U6Jt�
"
�U�

��&o�ob�VJ6��6JJ6�g�

�V	��
"
�bo�oU�U&K"#!"&5463!2654&#!"3!2654&#.'.#!";326732654&'�*�6JJ6�6J����s


	����I7�+6JJ6��s
"
��/�U+.#!"3267>5>''54&'!���M

�	M�bV�����<


�x��
V
^�

�w
��+�Q��U�U%)9=NR!"3!2654&##53%!"3!2654&##53!"3!2654&#53%!"3!2654&##53���++����++��+��+>��V��++��U��+���U��+������*���U��*������U(L1.#1"81'.#"32676764'&'	&47>322?81>38121�&c76h&&e97c&'/+&x
	w+*;����99G$&E/
"
+G)'E'**''**'&h66h&��x(33l33(����Y:�:/

/F&&F+����%A]s&67>326767>765.''"327>7654'.'&"'.'&547>7632'3267>54&'&"3C�"
?#O
8A33bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFn



"
�=@"  
* 0


)*9Z�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�
	

U���w.	&"3!2654&'#3+4&#!"#"&5	���

��	J6V6J	�������UUM*

��	�*6JJ6�	��U������	���@+���|5L3267%>54&'%&"%
-%&3267%>'.5%&3267%>'.D��

�U
	�U

�M����M��f�f!

�	�
	 �f�f!

�	�
	
Z��

��

̦�������
$��!���

!��!U�U!(!"3!2654&!2!54633#"&!!+��6JJ6V6JJ�tV�V*������UI7��6JJ6U7IU������U���A���j3i&'&"2?62&'.3267>?676&'&'"'.?>7>7>'.'&326?64'.�%..`..%M
"
I3�430�:�)
%


&m9'P#
�%'�gI3�330�@##9
%

 V00b*
�$%&]00]&I
'3%%H
"


H000�0�
):
	&
33�%//c./#�sH000�0�!
	
%
*2


�'0/c./%#&&#H
"


U���*!"3!2654&#%!2654&#!"!"3!2654&��������UU�U(!"326?!2654&##!"463!2+��6J



��6JJ6*�
bVUI7�V
�I7�7I��bDZ�U5W&"'&'&'.767>'.#:326767>7674&''&'.'&767>767767�	
!''P''"+ MCDf  hJJX	
J�:"'
�3�DF;;T:'&- /#'(R**(4�	



 +,a12+

  fDCMXPQ~))20 !I)(,	��,'
!e@@G1.-L376h/.$)K,����5HQ&#'&'.'&7>7>'.327>7676&'"3!2654'.'&#�!77�LMIJ547hC!)%%=&D@AX,^-EBAr--�f�$%VUb+C;:Z+I54877�MLJCi!?%%*Y^]�CC%J55C!U�VaVU�$%�UQY::B�UU
!4&#"!"3!3265!2654&#+�����+����7X"327>7654'.'&"'.'&547>7632#54&#"#";326=32654&#bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFF[�����%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFh�����U�U@!"3!2654&#!"&5463!2#54&#"#";326=32654&#+��6JJ6V6JJ��V�����UI7��6JJ6U7I�+U�����LQ��:Xv�"32654&"&54632'467816&'&"81326764'.564'&"326764'&'&4767%&"32676764'&'&"326767>'&'6JJ66JJ6�
 	
"
++ 
<


"
E""""E

88^
"


88

E""""E|
"




.-+J67II76J�+)O
"


+87s77,
"
P*
"

DWW�WVE
"
8GG�GH8;

"
8GG�FG8
"
CVV�WWD{


"
'(Q''"+67q77+	UJ�!2654&+7>767>'&'.'&'&'.54&#"01103813813<54&50&#81.#0&10"10&'81!";"'&'.'.327>76?3265.5+�xD#@�==\!7"!'&()R*)(-Q
��	��x1??�??2+
!3$
#$M()*))(L##��s+
dC!($#>
3 x��wt11C#!-Q 
w�	RV�&#81"&/32654&#!81"0"10"810#01326=38127>767>76&'70414&#"'.'&'&67>7>#"3!26781>781063465>5w!
'-CC}3x��|!!K*)++*)M##
6�| Q-***S)(&'!"7!\==�@#Dx�
Q#C0243o��w
Q-!��x 6

>$%* @d

's����"32654&"&54632>32654&+"&/&67>'5'.#81"'&54&#"&'&"#";28167>326=4676276&'.71#81"&'.#"&=4&'.#"/#.5467>'.+"&546;2676&'&476?>=463267>3121;2#"FeeFFeeF#22##22?
6JJ6		$,1J66J	'i$&*
6JJ6		
	'^&	
J67I	'i$&*3


B  $) 

+
	

9 	#7



#@
 $$  C
	

9 	#7
UdFGddGFd�2$#22#$2;I76J		#]'	
6JJ6	&&&k&
I76J

-,
#
6JJ6	

&&&k&
^	
	
: #7
	
	
B  %)  C#

	
9 	#6



#@ %$ 
C���$0S^%"32654&"&54632#%"32654&"&54632%!0232676&'.#!'.+";23#!"&'!U6JJ67II76JJ67II7��-HD
�@F3^^@
G3+<�7'��J67II76J��J67II76J��:-f

g0?�0?���/U+C[r2654&#"3!"32654&#2654&#")";326532654&##54&#"#"3!2654&#!";326=32654&�UU��UVUUUU�VU�+�����U�������������U�
6!"3!2654&##!"&5463!23267>54&'&"�V7II7�7II7+�V���



"
�J6�U6JJ6�6J�����	
U����"-8GV#54&+"#";3!26532654&#%46;2!5#!"&5!"32654&#3"32654&#��I7�7I�+I7�7I+�����V����+6JJ6+��6JJ6++++�U+�����MJ�&"&'.&'.'&'.#"#"326767>765<5>76&''&'>7>54&'&'.767726=46767>7�

3 ('R)(!*,.,+O""

*

.'';0k6
(*)S*)(P�GE55I +


�?--:-01e545*L$	
\10'
#**^235-~&


M	
#]3
,'	
�\(-,Z++%

()'77�PPX	#R-
�

MEEv/0!

#
)99w88(#&		+ <)	-

	���&764'&"'&"326?326764/<�


"
��
"


��




��

���
"
��
"
��
"
��
"
�+����7^"327>7654'.'&"'.'&547>7632&"'&"326?326764/764'bUV%$$%VUbbUV%$$%VUbPFFhhFFPPFFhhFFN
"
bb
"


bb




bb

bb

�%$�UVabUV%%%%VUbaVU�$%��hFFPPFFhhFFPPFFhcc
"
bb
"
bb
"
bb
"
U�UF!"3!2654&#!"&5463!2&"'&"326?326764/764'+��6JJ6V6JJ��V�
"
bb
"


bb




bb

bb

UI7��6JJ6U7I�+U�cc
"
bb
"
bb
"
bb
"
Z���|!4.#!6&'&3!3267>'74&'.#!3!�
��&

	�U
Q&

��k
��&��

&

�

��
	

�|�
I�	��+[��_<��-8�-8��	������	7+++++++�+U�bb�
��
++	+U/U+U+UAUUZ,�+UL	�U�+UZ
^�`���Jt�V����D���,�2��	d	�
�
�P�6x�
B
�
�t��t@�2�
�f�2��7��E�$i
�		�	Q	�	/	u	
4�converseflowconverseflowVersion 1.0Version
1.0converseflowconverseflowconverseflowconverseflowRegularRegularconverseflowconverseflowFont
generated by IcoMoon.Font generated by
IcoMoon.images/logo.png000064400000007274151163010210007457
0ustar00�PNG


IHDR���q�DtEXtSoftwareAdobe
ImageReadyq�e<^IDATx��=nI�K�L ���	Dc`
sK�&���R���dSI�n
:����X�>�8'.��d[Ozm�4%6�]��UА-HT����UwU��b'����_���a��֋[ŏM�6��'��?^}������u��^�����5������"��v�㸽��)"�(�o��lP��E�wq��2��]���m�����zE�A���I�rQ�f���w�U����]󺦋�*"E��R�xr�|_1╹y���L/߱�AS"�D	��S�|���)Sy��(ᥗ��C���/hC���}j��}n@>�"��k"`:���~�V���-��q��#�O����ڀt�v��6�q"__S�6���<�)'߮��oyW^Z~g�h!���t�Z�96
����7��z�b��3k�_/~�3�K�zbL��)���Y�`�+xN_�ɾ�w�d�_ݯ!��;7&ےYu��!�V�͡Fg,ɀ}s	�m�>Y}˭,F苅����'��|�i�CN����@_�1�TĘ�6�c��4��nS7X�}�s�w��%���h?H�h㡎{�����Yq�Y<.��̵)�)���s㢐rg�J=�M����a�s���#
�l"�0�(Q��U�;
<�E@X������0;��xŪ
0�O��H�����U��?#B��T����&��SZ����4"`>qy�"jnuZ�ڔ3n���.ڔeg���诓P��
�iS���^V��+%�韃��)'�;��(!���<0���["���<�J͐�[�.�8����<��4�W���%�0
-��ۆ+���{xxID�-��٥	��Qp�|�W���-.F���c�C�M�!D�L�h�i(�I��k	���ܝX�Io�!����|Ν�z��ck�
�?J��s�E>wp)��<��
_uΣxg�v��t��@�D�4
E�s�βh�l��w�P��C�Sl�r<�����^z��u\�����.|��#�ٟ�o��d��u�o���,uv.4�^x�;�&�P#�E\V�Gٯ��
��4f��{�>�\ݯ$gqpu�l�8����ؿŧ�V�;ئ�^���mg��kxeU>�Os�9�'��%��,_=��HԐ/�,���.�ұ��>�/�^����(�SI��]��_�v@l������#��H(���`rC��~�׹�碀N�)h/U����s�o��\��>y�������
W���_�v�v���Y��e���s.VSȮ��	�,F����ߞ�����wu�S��v��$���¼%�X�"��	S���=	E�r|�X��H��l���K%!
`-��|H��f�uD�:%�OtL�A�V'r,_]��O��ˇ�۶^D%	��<��;*`�4�C��XE·��o��Ʃ���Rz�L������:Iw��g��4�`��P��_�:�&�"`
�p���˷VB�/eI�I�
5W?$�����Q	�K����!�ݲ�X$l8��������n��P����^�o!6�?�*��R?H��Os���&惵!�ˮ���.�mK�m��lԊJ��$|��A�6��
`"��s6!�ڂ#�Jx���ȸ�~YJ	KW��LB��mp}�d%��%ܸ�VFf���.?u*a�:wH8�=�uB@��|�p�"��%��:#��>w$am^�Jx�����FXE���+;�p������*U$LV�܉�󮤞�p�*�E	���D����#�	�%L.�	O�&��:�V�mc
�rAN)�u�tڵ�bM��u��iL�o��v�Y�H���[�0t����$DBDB$D�nqx�ilR�lt�/�I��X@�<�	�i�
��蒄*�w�����V��]�.��H������	��	gq{��*;A�^�_?ѨFj�e}������[|Y��}�_�;��d)a	�,I؏��4��.�7MsHG7��Z:*��	0.�D!�|V"�Ef��F4ժ���p��H(��1��t[�IX�|V$<�G�^x��F�,H(����I�@>�E@��o�U�A”O+ےp7��C�ǛTX�0��uH���-	_#��
�R��k*J�!�a�c�06���Ћ�$i����[��>�oRB�ë��=:J�%	E�q����C<��%���5�a��s��-�װ�V�/S%<Jx��C�����[JG�ʷ
�d�Tio���~�/՝r��j=�$4/߂���N�: �×�
j�Ѝ|��L<@��)�IB��Q�3��0=�U^K�R��s�`���̪�bE	��'|qԽ@@��/o(a�ڢ��ȇ����FB�C@x�^�H��|)�����uE�����y��,�P�L�ED���%|^�?'�N����b�0�Ez�K>�N�}��D�;E@�<5XzK�,��|��`���$���:{[�O���k�y��~��'�M?������Jc~���l���za@��p�Ph��D*_SK��
�C���+)�d
^O�M6f��'UR8��-��W�W0��Q��|�zLm��9׹��p�;N���r�����\��1��iW�e"�N�m����o�^>�M,÷���MeԛD_��aho0qY�#|qL����
�-�$�{���C�U��k�(�w�*�
�/�P��[{�Q�1֛v~�)�ۀ����'�I�yGډ|��=�f����|�W�]m;�G?y�2�+��
��C��m�rmC����-�A�j�A��
m�rnKf����?h7�W#ϭ=�i/���q�|�)���^��'�X�6*�zc�ӧ���<<^�o�������`M}>��e�p�lF�|C��+3!���oSϸ&摪�g��BQ.Z�}]p3���e"���-�(��^xX�B������E-)�F�Q������N1��]j,r�Wu��BD���.�$�B��*p�H�;�PE"�Mم�j�$<�����Kgڔe�G,���P��\O�O�b��E�k�p���8^�1�J���^���?��p���#���i$�<���|d��YS�mKoŠW��������^͘^�"6�`s:Ҟu��Bǥ�YL?�c��NY
qe�#�|OFәŇFےy����s4sw���.n��?<��t��7���Qpb,
^Y]�H	b%�;A/w�J�~gVO���hGҪ��?s��S#�����ie�ahoYzI=�jsZ~/h~yz7��u\'sj�.�
{i#s{�
�j6D�p�\6,�A�#V2HE�'7,��	y8?�#E�s/'7�c�]���(M��a��
�2n�"A��Xw��i����;N�v�8�kD��yn�ēw��D������
�,<Ԉ{<;�\T-�"��6�ZSL	#^+"��m�`�d(�T��^�%���XE�/*ޔq�fd쩄���r�~:�3�
�`�$'m�*;IEND�B`�js/admin-notifly.js000064400000001433151163010210010257
0ustar00/**
 * @copyright  Copyright (C) 2005 - 2017 Open Source Matters, Inc. All
rights reserved.
 * @license    GNU General Public License version 2 or later; see
LICENSE.txt
 */
(function() {
	"use strict";

	window.updateTemplateStatus = function updateTemplateStatus(input){
       
jQuery.get("index.php?option=com_notifly&task=template.update",
function(data, status){
	        /*alert("Data: " + data + "\nStatus: " +
status);*/
	        return false;
	    });
	};

	window.convertFromMarkdown = function convertFromMarkdown(){

		jQuery.each(jQuery('.event-message'), function(index, value){
			var text = jQuery(this).html();
			var converter       = new showdown.Converter();
		    var renderedHtml    = converter.makeHtml(text);		
		    jQuery(this).html(renderedHtml);	
		});
		
	}

})();
js/chart.min.js000064400000463347151163010210007410 0ustar00/*!
 * Chart.js
 * http://chartjs.org/
 * Version: 2.7.0
 *
 * Copyright 2017 Nick Downie
 * Released under the MIT license
 * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
 */
!function(t){if("object"==typeof
exports&&"undefined"!=typeof
module)module.exports=t();else if("function"==typeof
define&&define.amd)define([],t);else{("undefined"!=typeof
window?window:"undefined"!=typeof
global?global:"undefined"!=typeof
self?self:this).Chart=t()}}(function(){return function t(e,n,i){function
a(r,l){if(!n[r]){if(!e[r]){var s="function"==typeof
require&&require;if(!l&&s)return s(r,!0);if(o)return
o(r,!0);var u=new Error("Cannot find module
'"+r+"'");throw
u.code="MODULE_NOT_FOUND",u}var
d=n[r]={exports:{}};e[r][0].call(d.exports,function(t){var
n=e[r][1][t];return a(n||t)},d,d.exports,t,e,n,i)}return
n[r].exports}for(var o="function"==typeof
require&&require,r=0;r<i.length;r++)a(i[r]);return
a}({1:[function(t,e,n){},{}],2:[function(t,e,n){function i(t){if(t){var
e=/^#([a-fA-F0-9]{3})$/i,n=/^#([a-fA-F0-9]{6})$/i,i=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,o=/(\w+)/,r=[0,0,0],l=1,s=t.match(e);if(s){s=s[1];for(d=0;d<r.length;d++)r[d]=parseInt(s[d]+s[d],16)}else
if(s=t.match(n)){s=s[1];for(d=0;d<r.length;d++)r[d]=parseInt(s.slice(2*d,2*d+2),16)}else
if(s=t.match(i)){for(d=0;d<r.length;d++)r[d]=parseInt(s[d+1]);l=parseFloat(s[4])}else
if(s=t.match(a)){for(d=0;d<r.length;d++)r[d]=Math.round(2.55*parseFloat(s[d+1]));l=parseFloat(s[4])}else
if(s=t.match(o)){if("transparent"==s[1])return[0,0,0,0];if(!(r=c[s[1]]))return}for(var
d=0;d<r.length;d++)r[d]=u(r[d],0,255);return
l=l||0==l?u(l,0,1):1,r[3]=l,r}}function a(t){if(t){var
e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var
i=parseFloat(n[4]);return[u(parseInt(n[1]),0,360),u(parseFloat(n[2]),0,100),u(parseFloat(n[3]),0,100),u(isNaN(i)?1:i,0,1)]}}}function
o(t){if(t){var
e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var
i=parseFloat(n[4]);return[u(parseInt(n[1]),0,360),u(parseFloat(n[2]),0,100),u(parseFloat(n[3]),0,100),u(isNaN(i)?1:i,0,1)]}}}function
r(t,e){return void 0===e&&(e=void
0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+",
"+t[2]+", "+e+")"}function
l(t,e){return"rgba("+Math.round(t[0]/255*100)+"%,
"+Math.round(t[1]/255*100)+"%,
"+Math.round(t[2]/255*100)+"%,
"+(e||t[3]||1)+")"}function s(t,e){return void
0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+",
"+t[1]+"%, "+t[2]+"%, "+e+")"}function
u(t,e,n){return Math.min(Math.max(e,t),n)}function d(t){var
e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var
c=t(6);e.exports={getRgba:i,getHsla:a,getRgb:function(t){var e=i(t);return
e&&e.slice(0,3)},getHsl:function(t){var e=a(t);return
e&&e.slice(0,3)},getHwb:o,getAlpha:function(t){var e=i(t);return
e?e[3]:(e=a(t))?e[3]:(e=o(t))?e[3]:void
0},hexString:function(t){return"#"+d(t[0])+d(t[1])+d(t[2])},rgbString:function(t,e){return
e<1||t[3]&&t[3]<1?r(t,e):"rgb("+t[0]+",
"+t[1]+",
"+t[2]+")"},rgbaString:r,percentString:function(t,e){return
e<1||t[3]&&t[3]<1?l(t,e):"rgb("+Math.round(t[0]/255*100)+"%,
"+Math.round(t[1]/255*100)+"%,
"+Math.round(t[2]/255*100)+"%)"},percentaString:l,hslString:function(t,e){return
e<1||t[3]&&t[3]<1?s(t,e):"hsl("+t[0]+",
"+t[1]+"%,
"+t[2]+"%)"},hslaString:s,hwbString:function(t,e){return
void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+",
"+t[1]+"%, "+t[2]+"%"+(void
0!==e&&1!==e?",
"+e:"")+")"},keyword:function(t){return
h[t.slice(0,3)]}};var h={};for(var f in
c)h[c[f]]=f},{6:6}],3:[function(t,e,n){var i=t(5),a=t(2),o=function(t){if(t
instanceof o)return t;if(!(this instanceof o))return new
o(t);this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var
e;"string"==typeof
t?(e=a.getRgba(t))?this.setValues("rgb",e):(e=a.getHsla(t))?this.setValues("hsl",e):(e=a.getHwb(t))&&this.setValues("hwb",e):"object"==typeof
t&&(void 0!==(e=t).r||void
0!==e.red?this.setValues("rgb",e):void 0!==e.l||void
0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void
0!==e.value?this.setValues("hsv",e):void 0!==e.w||void
0!==e.whiteness?this.setValues("hwb",e):void
0===e.c&&void
0===e.cyan||this.setValues("cmyk",e))};o.prototype={isValid:function(){return
this.valid},rgb:function(){return
this.setSpace("rgb",arguments)},hsl:function(){return
this.setSpace("hsl",arguments)},hsv:function(){return
this.setSpace("hsv",arguments)},hwb:function(){return
this.setSpace("hwb",arguments)},cmyk:function(){return
this.setSpace("cmyk",arguments)},rgbArray:function(){return
this.values.rgb},hslArray:function(){return
this.values.hsl},hsvArray:function(){return
this.values.hsv},hwbArray:function(){var t=this.values;return
1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return
this.values.cmyk},rgbaArray:function(){var t=this.values;return
t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return
t.hsl.concat([t.alpha])},alpha:function(t){return void
0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return
this.setChannel("rgb",0,t)},green:function(t){return
this.setChannel("rgb",1,t)},blue:function(t){return
this.setChannel("rgb",2,t)},hue:function(t){return
t&&(t=(t%=360)<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return
this.setChannel("hsl",1,t)},lightness:function(t){return
this.setChannel("hsl",2,t)},saturationv:function(t){return
this.setChannel("hsv",1,t)},whiteness:function(t){return
this.setChannel("hwb",1,t)},blackness:function(t){return
this.setChannel("hwb",2,t)},value:function(t){return
this.setChannel("hsv",2,t)},cyan:function(t){return
this.setChannel("cmyk",0,t)},magenta:function(t){return
this.setChannel("cmyk",1,t)},yellow:function(t){return
this.setChannel("cmyk",2,t)},black:function(t){return
this.setChannel("cmyk",3,t)},hexString:function(){return
a.hexString(this.values.rgb)},rgbString:function(){return
a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return
a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return
a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return
a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return
a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return
a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return
a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var
t=this.values.rgb;return
t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var
t=this.values.rgb,e=[],n=0;n<t.length;n++){var
i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var
e=this.luminosity(),n=t.luminosity();return
e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var
e=this.contrast(t);return
e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var
t=this.values.rgb;return(299*t[0]+587*t[1]+114*t[2])/1e3<128},light:function(){return!this.dark()},negate:function(){for(var
t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return
this.setValues("rgb",t),this},lighten:function(t){var
e=this.values.hsl;return
e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var
e=this.values.hsl;return
e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var
e=this.values.hsl;return
e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var
e=this.values.hsl;return
e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var
e=this.values.hwb;return
e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var
e=this.values.hwb;return
e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var
t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return
this.setValues("rgb",[e,e,e]),this},clearer:function(t){var
e=this.values.alpha;return
this.setValues("alpha",e-e*t),this},opaquer:function(t){var
e=this.values.alpha;return
this.setValues("alpha",e+e*t),this},rotate:function(t){var
e=this.values.hsl,n=(e[0]+t)%360;return
e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var
n=this,i=t,a=void
0===e?.5:e,o=2*a-1,r=n.alpha()-i.alpha(),l=((o*r==-1?o:(o+r)/(1+o*r))+1)/2,s=1-l;return
this.rgb(l*n.red()+s*i.red(),l*n.green()+s*i.green(),l*n.blue()+s*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return
this.rgb()},clone:function(){var t,e,n=new
o,i=this.values,a=n.values;for(var r in
i)i.hasOwnProperty(r)&&(t=i[r],"[object
Array]"===(e={}.toString.call(t))?a[r]=t.slice(0):"[object
Number]"===e?a[r]=t:console.error("unexpected color
value:",t));return
n}},o.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},o.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o.prototype.getValues=function(t){for(var
e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return
1!==e.alpha&&(n.a=e.alpha),n},o.prototype.setValues=function(t,e){var
n,a=this.values,o=this.spaces,r=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else
if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void
0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else
if(void 0!==e[o[t][0]]){var
s=o[t];for(n=0;n<t.length;n++)a[t][n]=e[s[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void
0===l?a.alpha:l)),"alpha"===t)return!1;var
u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(r[t][n],a[t][n])),a[t][n]=Math.round(u);for(var
d in
o)d!==t&&(a[d]=i[t][d](a[t]));return!0},o.prototype.setSpace=function(t,e){var
n=e[0];return void 0===n?this.getValues(t):("number"==typeof
n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},o.prototype.setChannel=function(t,e,n){var
i=this.values[t];return void
0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof
window&&(window.Color=o),e.exports=o},{2:2,5:5}],4:[function(t,e,n){function
i(t){var
e,n,i,a=t[0]/255,o=t[1]/255,r=t[2]/255,l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return
s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),(e=Math.min(60*e,360))<0&&(e+=360),i=(l+s)/2,n=s==l?0:i<=.5?u/(s+l):u/(2-s-l),[e,100*n,100*i]}function
a(t){var
e,n,i,a=t[0],o=t[1],r=t[2],l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return
n=0==s?0:u/s*1e3/10,s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),(e=Math.min(60*e,360))<0&&(e+=360),i=s/255*1e3/10,[e,n,i]}function
o(t){var
e=t[0],n=t[1],a=t[2];return[i(t)[0],100*(1/255*Math.min(e,Math.min(n,a))),100*(a=1-1/255*Math.max(e,Math.max(n,a)))]}function
l(t){var e,n,i,a,o=t[0]/255,r=t[1]/255,l=t[2]/255;return
a=Math.min(1-o,1-r,1-l),e=(1-o-a)/(1-a)||0,n=(1-r-a)/(1-a)||0,i=(1-l-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function
s(t){return C[JSON.stringify(t)]}function u(t){var
e=t[0]/255,n=t[1]/255,i=t[2]/255;return[100*(.4124*(e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)),100*(.2126*e+.7152*n+.0722*i),100*(.0193*e+.1192*n+.9505*i)]}function
d(t){var e,n,i,a=u(t),o=a[0],r=a[1],l=a[2];return
o/=95.047,r/=100,l/=108.883,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,e=116*r-16,n=500*(o-r),i=200*(r-l),[e,n,i]}function
c(t){var e,n,i,a,o,r=t[0]/360,l=t[1]/100,s=t[2]/100;if(0==l)return
o=255*s,[o,o,o];e=2*s-(n=s<.5?s*(1+l):s+l-s*l),a=[0,0,0];for(var
u=0;u<3;u++)(i=r+1/3*-(u-1))<0&&i++,i>1&&i--,o=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*o;return
a}function h(t){var
e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*i*(1-n),l=255*i*(1-n*o),s=255*i*(1-n*(1-o)),i=255*i;switch(a){case
0:return[i,s,r];case 1:return[l,i,r];case 2:return[r,i,s];case
3:return[r,l,i];case 4:return[s,r,i];case 5:return[i,r,l]}}function
f(t){var
e,n,i,a,o=t[0]/360,l=t[1]/100,s=t[2]/100,u=l+s;switch(u>1&&(l/=u,s/=u),e=Math.floor(6*o),n=1-s,i=6*o-e,0!=(1&e)&&(i=1-i),a=l+i*(n-l),e){default:case
6:case 0:r=n,g=a,b=l;break;case 1:r=a,g=n,b=l;break;case
2:r=l,g=n,b=a;break;case 3:r=l,g=a,b=n;break;case 4:r=a,g=l,b=n;break;case
5:r=n,g=l,b=a}return[255*r,255*g,255*b]}function p(t){var
e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100,l=t[3]/100;return
e=1-Math.min(1,a*(1-l)+l),n=1-Math.min(1,o*(1-l)+l),i=1-Math.min(1,r*(1-l)+l),[255*e,255*n,255*i]}function
v(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100;return
e=3.2406*a+-1.5372*o+-.4986*r,n=-.9689*a+1.8758*o+.0415*r,i=.0557*a+-.204*o+1.057*r,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function
m(t){var e,n,i,a=t[0],o=t[1],r=t[2];return
a/=95.047,o/=100,r/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,e=116*o-16,n=500*(a-o),i=200*(o-r),[e,n,i]}function
x(t){var e,n,i,a,o=t[0],r=t[1],l=t[2];return
o<=8?a=(n=100*o/903.3)/100*7.787+16/116:(n=100*Math.pow((o+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i=i/108.883<=.008859?i=108.883*(a-l/200-16/116)/7.787:108.883*Math.pow(a-l/200,3),[e,n,i]}function
y(t){var e,n,i,a=t[0],o=t[1],r=t[2];return
e=Math.atan2(r,o),(n=360*e/2/Math.PI)<0&&(n+=360),i=Math.sqrt(o*o+r*r),[a,i,n]}function
k(t){return v(x(t))}function w(t){var e,n,i,a=t[0],o=t[1];return
i=t[2]/360*2*Math.PI,e=o*Math.cos(i),n=o*Math.sin(i),[a,e,n]}function
M(t){return
S[t]}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:l,rgb2keyword:s,rgb2xyz:u,rgb2lab:d,rgb2lch:function(t){return
y(d(t))},hsl2rgb:c,hsl2hsv:function(t){var
e,n,i=t[0],a=t[1]/100,o=t[2]/100;return
0===o?[0,0,0]:(o*=2,a*=o<=1?o:2-o,n=(o+a)/2,e=2*a/(o+a),[i,100*e,100*n])},hsl2hwb:function(t){return
o(c(t))},hsl2cmyk:function(t){return
l(c(t))},hsl2keyword:function(t){return
s(c(t))},hsv2rgb:h,hsv2hsl:function(t){var
e,n,i=t[0],a=t[1]/100,o=t[2]/100;return
n=(2-a)*o,e=a*o,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]},hsv2hwb:function(t){return
o(h(t))},hsv2cmyk:function(t){return
l(h(t))},hsv2keyword:function(t){return
s(h(t))},hwb2rgb:f,hwb2hsl:function(t){return
i(f(t))},hwb2hsv:function(t){return a(f(t))},hwb2cmyk:function(t){return
l(f(t))},hwb2keyword:function(t){return
s(f(t))},cmyk2rgb:p,cmyk2hsl:function(t){return
i(p(t))},cmyk2hsv:function(t){return a(p(t))},cmyk2hwb:function(t){return
o(p(t))},cmyk2keyword:function(t){return
s(p(t))},keyword2rgb:M,keyword2hsl:function(t){return
i(M(t))},keyword2hsv:function(t){return
a(M(t))},keyword2hwb:function(t){return
o(M(t))},keyword2cmyk:function(t){return
l(M(t))},keyword2lab:function(t){return
d(M(t))},keyword2xyz:function(t){return
u(M(t))},xyz2rgb:v,xyz2lab:m,xyz2lch:function(t){return
y(m(t))},lab2xyz:x,lab2rgb:k,lab2lch:y,lch2lab:w,lch2xyz:function(t){return
x(w(t))},lch2rgb:function(t){return k(w(t))}};var
S={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},C={};for(var
_ in S)C[JSON.stringify(S[_])]=_},{}],5:[function(t,e,n){var
i=t(4),a=function(){return new u};for(var o in
i){a[o+"Raw"]=function(t){return
function(e){return"number"==typeof
e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(o);var
r=/(\w+)2(\w+)/.exec(o),l=r[1],s=r[2];(a[l]=a[l]||{})[s]=a[o]=function(t){return
function(e){"number"==typeof
e&&(e=Array.prototype.slice.call(arguments));var
n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var
a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(o)}var
u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var
n=e[0];return void 0===n?this.getValues(t):("number"==typeof
n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return
this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var
e=this.convs[t];if(!e){var
n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return
e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return
this.routeSpace(t,arguments)}}),e.exports=a},{4:4}],6:[function(t,e,n){"use
strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],7:[function(t,e,n){var
i=t(29)();i.helpers=t(45),t(27)(i),i.defaults=t(25),i.Element=t(26),i.elements=t(40),i.Interaction=t(28),i.platform=t(48),t(31)(i),t(22)(i),t(23)(i),t(24)(i),t(30)(i),t(33)(i),t(32)(i),t(35)(i),t(54)(i),t(52)(i),t(53)(i),t(55)(i),t(56)(i),t(57)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(21)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i);var
a=[];a.push(t(49)(i),t(50)(i),t(51)(i)),i.plugins.register(a),i.platform.initialize(),e.exports=i,"undefined"!=typeof
window&&(window.Chart=i),i.canvasHelpers=i.helpers.canvas},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,35:35,40:40,45:45,48:48,49:49,50:50,51:51,52:52,53:53,54:54,55:55,56:56,57:57,8:8,9:9}],8:[function(t,e,n){"use
strict";e.exports=function(t){t.Bar=function(e,n){return
n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use
strict";e.exports=function(t){t.Bubble=function(e,n){return
n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use
strict";e.exports=function(t){t.Doughnut=function(e,n){return
n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use
strict";e.exports=function(t){t.Line=function(e,n){return
n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use
strict";e.exports=function(t){t.PolarArea=function(e,n){return
n.type="polarArea",new
t(e,n)}}},{}],13:[function(t,e,n){"use
strict";e.exports=function(t){t.Radar=function(e,n){return
n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use
strict";e.exports=function(t){t.Scatter=function(e,n){return
n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("bar",{hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}}),i._set("horizontalBar",{hover:{mode:"index",axis:"y"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,offset:!0,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var
n="";return
t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){return(e.datasets[t.datasetIndex].label||"")+":
"+t.xLabel}},mode:"index",axis:"y"}}),e.exports=function(t){t.controllers.bar=t.DatasetController.extend({dataElementType:a.Rectangle,initialize:function(){var
e,n=this;t.DatasetController.prototype.initialize.apply(n,arguments),(e=n.getMeta()).stack=n.getDataset().stack,e.bar=!0},update:function(t){var
e,n,i=this,a=i.getMeta().data;for(i._ruler=i.getRuler(),e=0,n=a.length;e<n;++e)i.updateElement(a[e],e,t)},updateElement:function(t,e,n){var
i=this,a=i.chart,r=i.getMeta(),l=i.getDataset(),s=t.custom||{},u=a.options.elements.rectangle;t._xScale=i.getScaleForId(r.xAxisID),t._yScale=i.getScaleForId(r.yAxisID),t._datasetIndex=i.index,t._index=e,t._model={datasetLabel:l.label,label:a.data.labels[e],borderSkipped:s.borderSkipped?s.borderSkipped:u.borderSkipped,backgroundColor:s.backgroundColor?s.backgroundColor:o.valueAtIndexOrDefault(l.backgroundColor,e,u.backgroundColor),borderColor:s.borderColor?s.borderColor:o.valueAtIndexOrDefault(l.borderColor,e,u.borderColor),borderWidth:s.borderWidth?s.borderWidth:o.valueAtIndexOrDefault(l.borderWidth,e,u.borderWidth)},i.updateElementGeometry(t,e,n),t.pivot()},updateElementGeometry:function(t,e,n){var
i=this,a=t._model,o=i.getValueScale(),r=o.getBasePixel(),l=o.isHorizontal(),s=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,s);a.horizontal=l,a.base=n?r:u.base,a.x=l?n?r:u.head:d.center,a.y=l?d.center:n?r:u.head,a.height=l?d.size:void
0,a.width=l?void 0:d.size},getValueScaleId:function(){return
this.getMeta().yAxisID},getIndexScaleId:function(){return
this.getMeta().xAxisID},getValueScale:function(){return
this.getScaleForId(this.getValueScaleId())},getIndexScale:function(){return
this.getScaleForId(this.getIndexScaleId())},getStackCount:function(t){var
e,n,i=this,a=i.chart,o=i.getIndexScale().options.stacked,r=void
0===t?a.data.datasets.length:t+1,l=[];for(e=0;e<r;++e)(n=a.getDatasetMeta(e)).bar&&a.isDatasetVisible(e)&&(!1===o||!0===o&&-1===l.indexOf(n.stack)||void
0===o&&(void
0===n.stack||-1===l.indexOf(n.stack)))&&l.push(n.stack);return
l.length},getStackIndex:function(t){return
this.getStackCount(t)-1},getRuler:function(){var
t,e,n=this,i=n.getIndexScale(),a=n.getStackCount(),o=n.index,r=[],l=i.isHorizontal(),s=l?i.left:i.top,u=s+(l?i.width:i.height);for(t=0,e=n.getMeta().data.length;t<e;++t)r.push(i.getPixelForValue(null,t,o));return{pixels:r,start:s,end:u,stackCount:a,scale:i}},calculateBarValuePixels:function(t,e){var
n,i,a,o,r,l,s=this,u=s.chart,d=s.getMeta(),c=s.getValueScale(),h=u.data.datasets,f=c.getRightValue(h[t].data[e]),g=c.options.stacked,p=d.stack,v=0;if(g||void
0===g&&void
0!==p)for(n=0;n<t;++n)(i=u.getDatasetMeta(n)).bar&&i.stack===p&&i.controller.getValueScaleId()===c.id&&u.isDatasetVisible(n)&&(a=c.getRightValue(h[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(v+=a));return
o=c.getPixelForValue(v),r=c.getPixelForValue(v+f),l=(r-o)/2,{size:l,base:o,head:r,center:r+l/2}},calculateBarIndexPixels:function(t,e,n){var
i,a,r,l,s,u,d=this,c=n.scale.options,h=d.getStackIndex(t),f=n.pixels,g=f[e],p=f.length,v=n.start,m=n.end;return
1===p?(i=g>v?g-v:m-g,a=g<m?m-g:g-v):(e>0&&(i=(g-f[e-1])/2,e===p-1&&(a=i)),e<p-1&&(a=(f[e+1]-g)/2,0===e&&(i=a))),r=i*c.categoryPercentage,l=a*c.categoryPercentage,s=(r+l)/n.stackCount,u=s*c.barPercentage,u=Math.min(o.valueOrDefault(c.barThickness,u),o.valueOrDefault(c.maxBarThickness,1/0)),g-=r,g+=s*h,g+=(s-u)/2,{size:u,base:g,head:g+u,center:g+u/2}},draw:function(){var
t=this,e=t.chart,n=t.getValueScale(),i=t.getMeta().data,a=t.getDataset(),r=i.length,l=0;for(o.canvas.clipArea(e.ctx,e.chartArea);l<r;++l)isNaN(n.getRightValue(a.data[l]))||i[l].draw();o.canvas.unclipArea(e.ctx)},setHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model;a.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:o.valueAtIndexOrDefault(e.hoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor?i.hoverBorderColor:o.valueAtIndexOrDefault(e.hoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:o.valueAtIndexOrDefault(e.hoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model,r=this.chart.options.elements.rectangle;a.backgroundColor=i.backgroundColor?i.backgroundColor:o.valueAtIndexOrDefault(e.backgroundColor,n,r.backgroundColor),a.borderColor=i.borderColor?i.borderColor:o.valueAtIndexOrDefault(e.borderColor,n,r.borderColor),a.borderWidth=i.borderWidth?i.borderWidth:o.valueAtIndexOrDefault(e.borderWidth,n,r.borderWidth)}}),t.controllers.horizontalBar=t.controllers.bar.extend({getValueScaleId:function(){return
this.getMeta().xAxisID},getIndexScaleId:function(){return
this.getMeta().yAxisID}})}},{25:25,40:40,45:45}],16:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("bubble",{hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var
n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return
n+": ("+t.xLabel+", "+t.yLabel+",
"+i.r+")"}}}}),e.exports=function(t){t.controllers.bubble=t.DatasetController.extend({dataElementType:a.Point,update:function(t){var
e=this,n=e.getMeta().data;o.each(n,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){var
i=this,a=i.getMeta(),o=t.custom||{},r=i.getScaleForId(a.xAxisID),l=i.getScaleForId(a.yAxisID),s=i._resolveElementOptions(t,e),u=i.getDataset().data[e],d=i.index,c=n?r.getPixelForDecimal(.5):r.getPixelForValue("object"==typeof
u?u:NaN,e,d),h=n?l.getBasePixel():l.getPixelForValue(u,e,d);t._xScale=r,t._yScale=l,t._options=s,t._datasetIndex=d,t._index=e,t._model={backgroundColor:s.backgroundColor,borderColor:s.borderColor,borderWidth:s.borderWidth,hitRadius:s.hitRadius,pointStyle:s.pointStyle,radius:n?0:s.radius,skip:o.skip||isNaN(c)||isNaN(h),x:c,y:h},t.pivot()},setHoverStyle:function(t){var
e=t._model,n=t._options;e.backgroundColor=o.valueOrDefault(n.hoverBackgroundColor,o.getHoverColor(n.backgroundColor)),e.borderColor=o.valueOrDefault(n.hoverBorderColor,o.getHoverColor(n.borderColor)),e.borderWidth=o.valueOrDefault(n.hoverBorderWidth,n.borderWidth),e.radius=n.radius+n.hoverRadius},removeHoverStyle:function(t){var
e=t._model,n=t._options;e.backgroundColor=n.backgroundColor,e.borderColor=n.borderColor,e.borderWidth=n.borderWidth,e.radius=n.radius},_resolveElementOptions:function(t,e){var
n,i,a,r=this,l=r.chart,s=l.data.datasets[r.index],u=t.custom||{},d=l.options.elements.point,c=o.options.resolve,h=s.data[e],f={},g={chart:l,dataIndex:e,dataset:s,datasetIndex:r.index},p=["backgroundColor","borderColor","borderWidth","hoverBackgroundColor","hoverBorderColor","hoverBorderWidth","hoverRadius","hitRadius","pointStyle"];for(n=0,i=p.length;n<i;++n)f[a=p[n]]=c([u[a],s[a],d[a]],g,e);return
f.radius=c([u.radius,h?h.r:void
0,s.radius,d.radius],g,e),f}})}},{25:25,40:40,45:45}],17:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("doughnut",{animation:{animateRotate:!0,animateScale:!1},hover:{mode:"single"},legendCallback:function(t){var
e=[];e.push('<ul
class="'+t.id+'-legend">');var
n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var
o=0;o<i[0].data.length;++o)e.push('<li><span
style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return
e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var
e=t.data;return
e.labels.length&&e.datasets.length?e.labels.map(function(n,i){var
a=t.getDatasetMeta(0),r=e.datasets[0],l=a.data[i],s=l&&l.custom||{},u=o.valueAtIndexOrDefault,d=t.options.elements.arc;return{text:n,fillStyle:s.backgroundColor?s.backgroundColor:u(r.backgroundColor,i,d.backgroundColor),strokeStyle:s.borderColor?s.borderColor:u(r.borderColor,i,d.borderColor),lineWidth:s.borderWidth?s.borderWidth:u(r.borderWidth,i,d.borderWidth),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}}):[]}},onClick:function(t,e){var
n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)(a=r.getDatasetMeta(n)).data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:-.5*Math.PI,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,e){var
n=e.labels[t.index],i=":
"+e.datasets[t.datasetIndex].data[t.index];return
o.isArray(n)?(n=n.slice())[0]+=i:n+=i,n}}}}),i._set("pie",o.clone(i.doughnut)),i._set("pie",{cutoutPercentage:0}),e.exports=function(t){t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:a.Arc,linkScales:o.noop,getRingIndex:function(t){for(var
e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return
e},update:function(t){var
e=this,n=e.chart,i=n.chartArea,a=n.options,r=a.elements.arc,l=i.right-i.left-r.borderWidth,s=i.bottom-i.top-r.borderWidth,u=Math.min(l,s),d={x:0,y:0},c=e.getMeta(),h=a.cutoutPercentage,f=a.circumference;if(f<2*Math.PI){var
g=a.rotation%(2*Math.PI),p=(g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0))+f,v={x:Math.cos(g),y:Math.sin(g)},m={x:Math.cos(p),y:Math.sin(p)},b=g<=0&&p>=0||g<=2*Math.PI&&2*Math.PI<=p,x=g<=.5*Math.PI&&.5*Math.PI<=p||g<=2.5*Math.PI&&2.5*Math.PI<=p,y=g<=-Math.PI&&-Math.PI<=p||g<=Math.PI&&Math.PI<=p,k=g<=.5*-Math.PI&&.5*-Math.PI<=p||g<=1.5*Math.PI&&1.5*Math.PI<=p,w=h/100,M={x:y?-1:Math.min(v.x*(v.x<0?1:w),m.x*(m.x<0?1:w)),y:k?-1:Math.min(v.y*(v.y<0?1:w),m.y*(m.y<0?1:w))},S={x:b?1:Math.max(v.x*(v.x>0?1:w),m.x*(m.x>0?1:w)),y:x?1:Math.max(v.y*(v.y>0?1:w),m.y*(m.y>0?1:w))},C={width:.5*(S.x-M.x),height:.5*(S.y-M.y)};u=Math.min(l/C.width,s/C.height),d={x:-.5*(S.x+M.x),y:-.5*(S.y+M.y)}}n.borderWidth=e.getMaxBorderWidth(c.data),n.outerRadius=Math.max((u-n.borderWidth)/2,0),n.innerRadius=Math.max(h?n.outerRadius/100*h:0,0),n.radiusLength=(n.outerRadius-n.innerRadius)/n.getVisibleDatasetCount(),n.offsetX=d.x*n.outerRadius,n.offsetY=d.y*n.outerRadius,c.total=e.calculateTotal(),e.outerRadius=n.outerRadius-n.radiusLength*e.getRingIndex(e.index),e.innerRadius=Math.max(e.outerRadius-n.radiusLength,0),o.each(c.data,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){var
i=this,a=i.chart,r=a.chartArea,l=a.options,s=l.animation,u=(r.left+r.right)/2,d=(r.top+r.bottom)/2,c=l.rotation,h=l.rotation,f=i.getDataset(),g=n&&s.animateRotate?0:t.hidden?0:i.calculateCircumference(f.data[e])*(l.circumference/(2*Math.PI)),p=n&&s.animateScale?0:i.innerRadius,v=n&&s.animateScale?0:i.outerRadius,m=o.valueAtIndexOrDefault;o.extend(t,{_datasetIndex:i.index,_index:e,_model:{x:u+a.offsetX,y:d+a.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:v,innerRadius:p,label:m(f.label,e,a.data.labels[e])}});var
b=t._model;this.removeHoverStyle(t),n&&s.animateRotate||(b.startAngle=0===e?l.rotation:i.getMeta().data[e-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var
t,e=this.getDataset(),n=this.getMeta(),i=0;return
o.each(n.data,function(n,a){t=e.data[a],isNaN(t)||n.hidden||(i+=Math.abs(t))}),i},calculateCircumference:function(t){var
e=this.getMeta().total;return
e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var
e,n,i=0,a=this.index,o=t.length,r=0;r<o;r++)e=t[r]._model?t[r]._model.borderWidth:0,i=(n=t[r]._chart?t[r]._chart.config.data.datasets[a].hoverBorderWidth:0)>(i=e>i?e:i)?n:i;return
i}})}},{25:25,40:40,45:45}],18:[function(t,e,n){"use strict";var
i=t(25),a=t(40),o=t(45);i._set("line",{showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}}),e.exports=function(t){function
e(t,e){return
o.valueOrDefault(t.showLine,e.showLines)}t.controllers.line=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,update:function(t){var
n,i,a,r=this,l=r.getMeta(),s=l.dataset,u=l.data||[],d=r.chart.options,c=d.elements.line,h=r.getScaleForId(l.yAxisID),f=r.getDataset(),g=e(f,d);for(g&&(a=s.custom||{},void
0!==f.tension&&void
0===f.lineTension&&(f.lineTension=f.tension),s._scale=h,s._datasetIndex=r.index,s._children=u,s._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:a.tension?a.tension:o.valueOrDefault(f.lineTension,c.tension),backgroundColor:a.backgroundColor?a.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:a.borderWidth?a.borderWidth:f.borderWidth||c.borderWidth,borderColor:a.borderColor?a.borderColor:f.borderColor||c.borderColor,borderCapStyle:a.borderCapStyle?a.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:a.borderDash?a.borderDash:f.borderDash||c.borderDash,borderDashOffset:a.borderDashOffset?a.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:a.borderJoinStyle?a.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:a.fill?a.fill:void
0!==f.fill?f.fill:c.fill,steppedLine:a.steppedLine?a.steppedLine:o.valueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:a.cubicInterpolationMode?a.cubicInterpolationMode:o.valueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode)},s.pivot()),n=0,i=u.length;n<i;++n)r.updateElement(u[n],n,t);for(g&&0!==s._model.tension&&r.updateBezierControlPoints(),n=0,i=u.length;n<i;++n)u[n].pivot()},getPointBackgroundColor:function(t,e){var
n=this.chart.options.elements.point.backgroundColor,i=this.getDataset(),a=t.custom||{};return
a.backgroundColor?n=a.backgroundColor:i.pointBackgroundColor?n=o.valueAtIndexOrDefault(i.pointBackgroundColor,e,n):i.backgroundColor&&(n=i.backgroundColor),n},getPointBorderColor:function(t,e){var
n=this.chart.options.elements.point.borderColor,i=this.getDataset(),a=t.custom||{};return
a.borderColor?n=a.borderColor:i.pointBorderColor?n=o.valueAtIndexOrDefault(i.pointBorderColor,e,n):i.borderColor&&(n=i.borderColor),n},getPointBorderWidth:function(t,e){var
n=this.chart.options.elements.point.borderWidth,i=this.getDataset(),a=t.custom||{};return
isNaN(a.borderWidth)?!isNaN(i.pointBorderWidth)||o.isArray(i.pointBorderWidth)?n=o.valueAtIndexOrDefault(i.pointBorderWidth,e,n):isNaN(i.borderWidth)||(n=i.borderWidth):n=a.borderWidth,n},updateElement:function(t,e,n){var
i,a,r=this,l=r.getMeta(),s=t.custom||{},u=r.getDataset(),d=r.index,c=u.data[e],h=r.getScaleForId(l.yAxisID),f=r.getScaleForId(l.xAxisID),g=r.chart.options.elements.point;void
0!==u.radius&&void
0===u.pointRadius&&(u.pointRadius=u.radius),void
0!==u.hitRadius&&void
0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),i=f.getPixelForValue("object"==typeof
c?c:NaN,e,d),a=n?h.getBasePixel():r.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:i,y:a,skip:s.skip||isNaN(i)||isNaN(a),radius:s.radius||o.valueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:s.pointStyle||o.valueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:r.getPointBackgroundColor(t,e),borderColor:r.getPointBorderColor(t,e),borderWidth:r.getPointBorderWidth(t,e),tension:l.dataset._model?l.dataset._model.tension:0,steppedLine:!!l.dataset._model&&l.dataset._model.steppedLine,hitRadius:s.hitRadius||o.valueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var
i,a,o,r=this,l=r.chart,s=r.getMeta(),u=r.getScaleForId(s.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=l.data.datasets[i],"line"===(o=l.getDatasetMeta(i)).type&&o.yAxisID===u.id&&l.isDatasetVisible(i)){var
h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var
f=Number(u.getRightValue(t));return
f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return
u.getPixelForValue(t)},updateBezierControlPoints:function(){function
t(t,e,n){return Math.max(Math.min(t,n),e)}var
e,n,i,a,r=this,l=r.getMeta(),s=r.chart.chartArea,u=l.data||[];if(l.dataset._model.spanGaps&&(u=u.filter(function(t){return!t._model.skip})),"monotone"===l.dataset._model.cubicInterpolationMode)o.splineCurveMonotone(u);else
for(e=0,n=u.length;e<n;++e)i=u[e]._model,a=o.splineCurve(o.previousItem(u,e)._model,i,o.nextItem(u,e)._model,l.dataset._model.tension),i.controlPointPreviousX=a.previous.x,i.controlPointPreviousY=a.previous.y,i.controlPointNextX=a.next.x,i.controlPointNextY=a.next.y;if(r.chart.options.elements.line.capBezierPoints)for(e=0,n=u.length;e<n;++e)(i=u[e]._model).controlPointPreviousX=t(i.controlPointPreviousX,s.left,s.right),i.controlPointPreviousY=t(i.controlPointPreviousY,s.top,s.bottom),i.controlPointNextX=t(i.controlPointNextX,s.left,s.right),i.controlPointNextY=t(i.controlPointNextY,s.top,s.bottom)},draw:function(){var
t=this,n=t.chart,i=t.getMeta(),a=i.data||[],r=n.chartArea,l=a.length,s=0;for(o.canvas.clipArea(n.ctx,r),e(t.getDataset(),n.options)&&i.dataset.draw(),o.canvas.unclipArea(n.ctx);s<l;++s)a[s].draw(r)},setHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t._index,i=t.custom||{},a=t._model;a.radius=i.hoverRadius||o.valueAtIndexOrDefault(e.pointHoverRadius,n,this.chart.options.elements.point.hoverRadius),a.backgroundColor=i.hoverBackgroundColor||o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor||o.valueAtIndexOrDefault(e.pointHoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth||o.valueAtIndexOrDefault(e.pointHoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var
e=this,n=e.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},r=t._model;void
0!==n.radius&&void
0===n.pointRadius&&(n.pointRadius=n.radius),r.radius=a.radius||o.valueAtIndexOrDefault(n.pointRadius,i,e.chart.options.elements.point.radius),r.backgroundColor=e.getPointBackgroundColor(t,i),r.borderColor=e.getPointBorderColor(t,i),r.borderWidth=e.getPointBorderWidth(t,i)}})}},{25:25,40:40,45:45}],19:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("polarArea",{scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,legendCallback:function(t){var
e=[];e.push('<ul
class="'+t.id+'-legend">');var
n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var
o=0;o<i[0].data.length;++o)e.push('<li><span
style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return
e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var
e=t.data;return
e.labels.length&&e.datasets.length?e.labels.map(function(n,i){var
a=t.getDatasetMeta(0),r=e.datasets[0],l=a.data[i].custom||{},s=o.valueAtIndexOrDefault,u=t.options.elements.arc;return{text:n,fillStyle:l.backgroundColor?l.backgroundColor:s(r.backgroundColor,i,u.backgroundColor),strokeStyle:l.borderColor?l.borderColor:s(r.borderColor,i,u.borderColor),lineWidth:l.borderWidth?l.borderWidth:s(r.borderWidth,i,u.borderWidth),hidden:isNaN(r.data[i])||a.data[i].hidden,index:i}}):[]}},onClick:function(t,e){var
n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)(a=r.getDatasetMeta(n)).data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return
e.labels[t.index]+":
"+t.yLabel}}}}),e.exports=function(t){t.controllers.polarArea=t.DatasetController.extend({dataElementType:a.Arc,linkScales:o.noop,update:function(t){var
e=this,n=e.chart,i=n.chartArea,a=e.getMeta(),r=n.options,l=r.elements.arc,s=Math.min(i.right-i.left,i.bottom-i.top);n.outerRadius=Math.max((s-l.borderWidth/2)/2,0),n.innerRadius=Math.max(r.cutoutPercentage?n.outerRadius/100*r.cutoutPercentage:1,0),n.radiusLength=(n.outerRadius-n.innerRadius)/n.getVisibleDatasetCount(),e.outerRadius=n.outerRadius-n.radiusLength*e.index,e.innerRadius=e.outerRadius-n.radiusLength,a.count=e.countVisibleElements(),o.each(a.data,function(n,i){e.updateElement(n,i,t)})},updateElement:function(t,e,n){for(var
i=this,a=i.chart,r=i.getDataset(),l=a.options,s=l.animation,u=a.scale,d=a.data.labels,c=i.calculateCircumference(r.data[e]),h=u.xCenter,f=u.yCenter,g=0,p=i.getMeta(),v=0;v<e;++v)isNaN(r.data[v])||p.data[v].hidden||++g;var
m=l.startAngle,b=t.hidden?0:u.getDistanceFromCenterForValue(r.data[e]),x=m+c*g,y=x+(t.hidden?0:c),k=s.animateScale?0:u.getDistanceFromCenterForValue(r.data[e]);o.extend(t,{_datasetIndex:i.index,_index:e,_scale:u,_model:{x:h,y:f,innerRadius:0,outerRadius:n?k:b,startAngle:n&&s.animateRotate?m:x,endAngle:n&&s.animateRotate?m:y,label:o.valueAtIndexOrDefault(d,e,d[e])}}),i.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var
t=this.getDataset(),e=this.getMeta(),n=0;return
o.each(e.data,function(e,i){isNaN(t.data[i])||e.hidden||n++}),n},calculateCircumference:function(t){var
e=this.getMeta().count;return
e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{25:25,40:40,45:45}],20:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}}),e.exports=function(t){t.controllers.radar=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,linkScales:o.noop,update:function(t){var
e=this,n=e.getMeta(),i=n.dataset,a=n.data,r=i.custom||{},l=e.getDataset(),s=e.chart.options.elements.line,u=e.chart.scale;void
0!==l.tension&&void
0===l.lineTension&&(l.lineTension=l.tension),o.extend(n.dataset,{_datasetIndex:e.index,_scale:u,_children:a,_loop:!0,_model:{tension:r.tension?r.tension:o.valueOrDefault(l.lineTension,s.tension),backgroundColor:r.backgroundColor?r.backgroundColor:l.backgroundColor||s.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:l.borderWidth||s.borderWidth,borderColor:r.borderColor?r.borderColor:l.borderColor||s.borderColor,fill:r.fill?r.fill:void
0!==l.fill?l.fill:s.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:l.borderCapStyle||s.borderCapStyle,borderDash:r.borderDash?r.borderDash:l.borderDash||s.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:l.borderDashOffset||s.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:l.borderJoinStyle||s.borderJoinStyle}}),n.dataset.pivot(),o.each(a,function(n,i){e.updateElement(n,i,t)},e),e.updateBezierControlPoints()},updateElement:function(t,e,n){var
i=this,a=t.custom||{},r=i.getDataset(),l=i.chart.scale,s=i.chart.options.elements.point,u=l.getPointPositionForValue(e,r.data[e]);void
0!==r.radius&&void
0===r.pointRadius&&(r.pointRadius=r.radius),void
0!==r.hitRadius&&void
0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),o.extend(t,{_datasetIndex:i.index,_index:e,_scale:l,_model:{x:n?l.xCenter:u.x,y:n?l.yCenter:u.y,tension:a.tension?a.tension:o.valueOrDefault(r.lineTension,i.chart.options.elements.line.tension),radius:a.radius?a.radius:o.valueAtIndexOrDefault(r.pointRadius,e,s.radius),backgroundColor:a.backgroundColor?a.backgroundColor:o.valueAtIndexOrDefault(r.pointBackgroundColor,e,s.backgroundColor),borderColor:a.borderColor?a.borderColor:o.valueAtIndexOrDefault(r.pointBorderColor,e,s.borderColor),borderWidth:a.borderWidth?a.borderWidth:o.valueAtIndexOrDefault(r.pointBorderWidth,e,s.borderWidth),pointStyle:a.pointStyle?a.pointStyle:o.valueAtIndexOrDefault(r.pointStyle,e,s.pointStyle),hitRadius:a.hitRadius?a.hitRadius:o.valueAtIndexOrDefault(r.pointHitRadius,e,s.hitRadius)}}),t._model.skip=a.skip?a.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var
t=this.chart.chartArea,e=this.getMeta();o.each(e.data,function(n,i){var
a=n._model,r=o.splineCurve(o.previousItem(e.data,i,!0)._model,a,o.nextItem(e.data,i,!0)._model,a.tension);a.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),a.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),a.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),a.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),n.pivot()})},setHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t.custom||{},i=t._index,a=t._model;a.radius=n.hoverRadius?n.hoverRadius:o.valueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),a.backgroundColor=n.hoverBackgroundColor?n.hoverBackgroundColor:o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,i,o.getHoverColor(a.backgroundColor)),a.borderColor=n.hoverBorderColor?n.hoverBorderColor:o.valueAtIndexOrDefault(e.pointHoverBorderColor,i,o.getHoverColor(a.borderColor)),a.borderWidth=n.hoverBorderWidth?n.hoverBorderWidth:o.valueAtIndexOrDefault(e.pointHoverBorderWidth,i,a.borderWidth)},removeHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t.custom||{},i=t._index,a=t._model,r=this.chart.options.elements.point;a.radius=n.radius?n.radius:o.valueAtIndexOrDefault(e.pointRadius,i,r.radius),a.backgroundColor=n.backgroundColor?n.backgroundColor:o.valueAtIndexOrDefault(e.pointBackgroundColor,i,r.backgroundColor),a.borderColor=n.borderColor?n.borderColor:o.valueAtIndexOrDefault(e.pointBorderColor,i,r.borderColor),a.borderWidth=n.borderWidth?n.borderWidth:o.valueAtIndexOrDefault(e.pointBorderWidth,i,r.borderWidth)}})}},{25:25,40:40,45:45}],21:[function(t,e,n){"use
strict";t(25)._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+",
"+t.yLabel+")"}}}}),e.exports=function(t){t.controllers.scatter=t.controllers.line}},{25:25}],22:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:o.noop,onComplete:o.noop}}),e.exports=function(t){t.Animation=a.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var
a,o,r=this.animations;for(e.chart=t,i||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return
void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var
e=o.findIndex(this.animations,function(e){return
e.chart===t});-1!==e&&(this.animations.splice(e,1),t.animating=!1)},requestAnimationFrame:function(){var
t=this;null===t.request&&(t.request=o.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var
t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+n);var
i=Date.now();t.dropFrames+=(i-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var
e,n,i=this.animations,a=0;a<i.length;)n=(e=i[a]).chart,e.currentStep=(e.currentStep||0)+t,e.currentStep=Math.min(e.currentStep,e.numSteps),o.callback(e.render,[n,e],n),o.callback(e.onAnimationProgress,[e],n),e.currentStep>=e.numSteps?(o.callback(e.onAnimationComplete,[e],n),n.animating=!1,i.splice(a,1)):++a}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return
this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return
this.chart},set:function(t){this.chart=t}})}},{25:25,26:26,45:45}],23:[function(t,e,n){"use
strict";var
i=t(25),a=t(45),o=t(28),r=t(48);e.exports=function(t){function e(t){var
e=(t=t||{}).data=t.data||{};return
e.datasets=e.datasets||[],e.labels=e.labels||[],t.options=a.configMerge(i.global,i[t.type],t.options||{}),t}function
n(t){var
e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}function
l(t){return"top"===t||"bottom"===t}var
s=t.plugins;t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(n,i){var
o=this;i=e(i);var
l=r.acquireContext(n,i),s=l&&l.canvas,u=s&&s.height,d=s&&s.width;o.id=a.uid(),o.ctx=l,o.canvas=s,o.config=i,o.width=d,o.height=u,o.aspectRatio=u?d/u:null,o.options=i.options,o._bufferedRender=!1,o.chart=o,o.controller=o,t.instances[o.id]=o,Object.defineProperty(o,"data",{get:function(){return
o.config.data},set:function(t){o.config.data=t}}),l&&s?(o.initialize(),o.update()):console.error("Failed
to create chart: can't acquire context from the given
item")},initialize:function(){var t=this;return
s.notify(t,"beforeInit"),a.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),s.notify(t,"afterInit"),t},clear:function(){return
a.canvas.clear(this),this},stop:function(){return
t.animationService.cancelAnimation(this),this},resize:function(t){var
e=this,n=e.options,i=e.canvas,o=n.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(a.getMaximumWidth(i))),l=Math.max(0,Math.floor(o?r/o:a.getMaximumHeight(i)));if((e.width!==r||e.height!==l)&&(i.width=e.width=r,i.height=e.height=l,i.style.width=r+"px",i.style.height=l+"px",a.retinaScale(e,n.devicePixelRatio),!t)){var
u={width:r,height:l};s.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var
t=this.options,e=t.scales||{},n=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var
e=this,n=e.options,i=e.scales={},o=[];n.scales&&(o=o.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&o.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(o,function(n){var
o=n.options,r=a.valueOrDefault(o.type,n.dtype),s=t.scaleService.getScaleConstructor(r);if(s){l(o.position)!==l(n.dposition)&&(o.position=n.dposition);var
u=new
s({id:o.id,options:o,ctx:e.ctx,chart:e});i[u.id]=u,u.mergeTicksOptions(),n.isDefault&&(e.scale=u)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var
e=this,n=[],i=[];return a.each(e.data.datasets,function(a,o){var
r=e.getDatasetMeta(o),l=a.type||e.config.type;if(r.type&&r.type!==l&&(e.destroyDatasetMeta(o),r=e.getDatasetMeta(o)),r.type=l,n.push(r.type),r.controller)r.controller.updateIndex(o);else{var
s=t.controllers[r.type];if(void 0===s)throw new
Error('"'+r.type+'" is not a chart
type.');r.controller=new
s(e,o),i.push(r.controller)}},e),i},resetElements:function(){var
t=this;a.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t){var
e=this;if(t&&"object"==typeof
t||(t={duration:t,lazy:arguments[1]}),n(e),!1!==s.notify(e,"beforeUpdate")){e.tooltip._data=e.data;var
i=e.buildOrUpdateControllers();a.each(e.data.datasets,function(t,n){e.getDatasetMeta(n).controller.buildOrUpdateElements()},e),e.updateLayout(),a.each(i,function(t){t.reset()}),e.updateDatasets(),s.notify(e,"afterUpdate"),e._bufferedRender?e._bufferedRequest={duration:t.duration,easing:t.easing,lazy:t.lazy}:e.render(t)}},updateLayout:function(){var
e=this;!1!==s.notify(e,"beforeLayout")&&(t.layoutService.update(this,this.width,this.height),s.notify(e,"afterScaleUpdate"),s.notify(e,"afterLayout"))},updateDatasets:function(){var
t=this;if(!1!==s.notify(t,"beforeDatasetsUpdate")){for(var
e=0,n=t.data.datasets.length;e<n;++e)t.updateDataset(e);s.notify(t,"afterDatasetsUpdate")}},updateDataset:function(t){var
e=this,n=e.getDatasetMeta(t),i={meta:n,index:t};!1!==s.notify(e,"beforeDatasetUpdate",[i])&&(n.controller.update(),s.notify(e,"afterDatasetUpdate",[i]))},render:function(e){var
n=this;e&&"object"==typeof
e||(e={duration:e,lazy:arguments[1]});var
i=e.duration,o=e.lazy;if(!1!==s.notify(n,"beforeRender")){var
r=n.options.animation,l=function(t){s.notify(n,"afterRender"),a.callback(r&&r.onComplete,[t],n)};if(r&&(void
0!==i&&0!==i||void 0===i&&0!==r.duration)){var u=new
t.Animation({numSteps:(i||r.duration)/16.66,easing:e.easing||r.easing,render:function(t,e){var
n=a.easing.effects[e.easing],i=e.currentStep,o=i/e.numSteps;t.draw(n(o),o,i)},onAnimationProgress:r.onProgress,onAnimationComplete:l});t.animationService.addAnimation(n,u,i,o)}else
n.draw(),l(new t.Animation({numSteps:0,chart:n}));return
n}},draw:function(t){var
e=this;e.clear(),a.isNullOrUndef(t)&&(t=1),e.transition(t),!1!==s.notify(e,"beforeDraw",[t])&&(a.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e.tooltip.draw(),s.notify(e,"afterDraw",[t]))},transition:function(t){for(var
e=this,n=0,i=(e.data.datasets||[]).length;n<i;++n)e.isDatasetVisible(n)&&e.getDatasetMeta(n).controller.transition(t);e.tooltip.transition(t)},drawDatasets:function(t){var
e=this;if(!1!==s.notify(e,"beforeDatasetsDraw",[t])){for(var
n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);s.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var
n=this,i=n.getDatasetMeta(t),a={meta:i,index:t,easingValue:e};!1!==s.notify(n,"beforeDatasetDraw",[a])&&(i.controller.draw(e),s.notify(n,"afterDatasetDraw",[a]))},getElementAtEvent:function(t){return
o.modes.single(this,t)},getElementsAtEvent:function(t){return
o.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return
o.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,n){var
i=o.modes[e];return"function"==typeof
i?i(this,t,n):[]},getDatasetAtEvent:function(t){return
o.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var
e=this,n=e.data.datasets[t];n._meta||(n._meta={});var
i=n._meta[e.id];return
i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var
t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return
t},isDatasetVisible:function(t){var
e=this.getDatasetMeta(t);return"boolean"==typeof
e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return
this.options.legendCallback(this)},destroyDatasetMeta:function(t){var
e=this.id,n=this.data.datasets[t],i=n._meta&&n._meta[e];i&&(i.controller.destroy(),delete
n._meta[e])},destroy:function(){var
e,n,i=this,o=i.canvas;for(i.stop(),e=0,n=i.data.datasets.length;e<n;++e)i.destroyDatasetMeta(e);o&&(i.unbindEvents(),a.canvas.clear(i),r.releaseContext(i.ctx),i.canvas=null,i.ctx=null),s.notify(i,"destroy"),delete
t.instances[i.id]},toBase64Image:function(){return
this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var
e=this;e.tooltip=new
t.Tooltip({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e)},bindEvents:function(){var
t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};a.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var
t=this,e=t._listeners;e&&(delete
t._listeners,a.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var
i,a,o,r=n?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)(i=t[a])&&this.getDatasetMeta(i._datasetIndex).controller[r](i)},eventHandler:function(t){var
e=this,n=e.tooltip;if(!1!==s.notify(e,"beforeEvent",[t])){e._bufferedRender=!0,e._bufferedRequest=null;var
i=e.handleEvent(t);i|=n&&n.handleEvent(t),s.notify(e,"afterEvent",[t]);var
a=e._bufferedRequest;return
a?e.render(a):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var
e=this,n=e.options||{},i=n.hover,o=!1;return
e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,i.mode,i),a.callback(n.onHover||n.hover.onHover,[t.native,e.active],e),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,i.mode,!1),e.active.length&&i.mode&&e.updateHoverStyle(e.active,i.mode,!0),o=!a.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,o}}),t.Controller=t}},{25:25,28:28,45:45,48:48}],24:[function(t,e,n){"use
strict";var i=t(45);e.exports=function(t){function
e(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),a.forEach(function(e){var
n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var
e=Array.prototype.slice.call(arguments),o=a.apply(this,e);return
i.each(t._chartjs.listeners,function(t){"function"==typeof
t[n]&&t[n].apply(t,e)}),o}})}))}function n(t,e){var
n=t._chartjs;if(n){var
i=n.listeners,o=i.indexOf(e);-1!==o&&i.splice(o,1),i.length>0||(a.forEach(function(e){delete
t[e]}),delete t._chartjs)}}var
a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var
n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var
t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return
this.chart.data.datasets[this.index]},getMeta:function(){return
this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return
this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var
t=this,e=t.datasetElementType;return e&&new
e({_chart:t.chart,_datasetIndex:t.index})},createMetaData:function(t){var
e=this,n=e.dataElementType;return n&&new
n({_chart:e.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var
t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],o=i.data;for(t=0,e=a.length;t<e;++t)o[t]=o[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var
e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var
t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,transition:function(t){for(var
e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var
t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t,e){var
n=this.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=i.valueAtIndexOrDefault,l=t._model;l.backgroundColor=o.backgroundColor?o.backgroundColor:r(n.backgroundColor,a,e.backgroundColor),l.borderColor=o.borderColor?o.borderColor:r(n.borderColor,a,e.borderColor),l.borderWidth=o.borderWidth?o.borderWidth:r(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var
e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},o=i.valueAtIndexOrDefault,r=i.getHoverColor,l=t._model;l.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:o(e.hoverBackgroundColor,n,r(l.backgroundColor)),l.borderColor=a.hoverBorderColor?a.hoverBorderColor:o(e.hoverBorderColor,n,r(l.borderColor)),l.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:o(e.hoverBorderWidth,n,l.borderWidth)},resyncElements:function(){var
t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var
n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{45:45}],25:[function(t,e,n){"use
strict";var i=t(45);e.exports={_set:function(t,e){return
i.merge(this[t]||(this[t]={}),e)}}},{45:45}],26:[function(t,e,n){"use
strict";function i(t,e,n,i){var
o,r,l,s,u,d,c,h,f,g=Object.keys(n);for(o=0,r=g.length;o<r;++o)if(l=g[o],d=n[l],e.hasOwnProperty(l)||(e[l]=d),(s=e[l])!==d&&"_"!==l[0]){if(t.hasOwnProperty(l)||(t[l]=s),u=t[l],(c=typeof
d)===typeof
u)if("string"===c){if((h=a(u)).valid&&(f=a(d)).valid){e[l]=f.mix(h,i).rgbString();continue}}else
if("number"===c&&isFinite(u)&&isFinite(d)){e[l]=u+(d-u)*i;continue}e[l]=d}}var
a=t(3),o=t(45),r=function(t){o.extend(this,t),this.initialize.apply(this,arguments)};o.extend(r.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var
t=this;return
t._view||(t._view=o.clone(t._model)),t._start={},t},transition:function(t){var
e=this,n=e._model,a=e._start,o=e._view;return
n&&1!==t?(o||(o=e._view={}),a||(a=e._start={}),i(a,o,n,t),e):(e._view=n,e._start=null,e)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return
o.isNumber(this._model.x)&&o.isNumber(this._model.y)}}),r.extend=o.inherits,e.exports=r},{3:3,45:45}],27:[function(t,e,n){"use
strict";var i=t(3),a=t(25),o=t(45);e.exports=function(t){function
e(t,e,n){var i;return"string"==typeof
t?(i=parseInt(t,10),-1!==t.indexOf("%")&&(i=i/100*e.parentNode[n])):i=t,i}function
n(t){return void
0!==t&&null!==t&&"none"!==t}function r(t,i,a){var
o=document.defaultView,r=t.parentNode,l=o.getComputedStyle(t)[i],s=o.getComputedStyle(r)[i],u=n(l),d=n(s),c=Number.POSITIVE_INFINITY;return
u||d?Math.min(u?e(l,t,a):c,d?e(s,r,a):c):"none"}o.extend=function(t){for(var
e=1,n=arguments.length;e<n;e++)o.each(arguments[e],function(e,n){t[n]=e});return
t},o.configMerge=function(){return
o.merge(o.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,n,i,a){var
r=n[e]||{},l=i[e];"scales"===e?n[e]=o.scaleMerge(r,l):"scale"===e?n[e]=o.merge(r,[t.scaleService.getScaleDefaults(l.type),l]):o._merger(e,n,i,a)}})},o.scaleMerge=function(){return
o.merge(o.clone(arguments[0]),[].slice.call(arguments,1),{merger:function(e,n,i,a){if("xAxes"===e||"yAxes"===e){var
r,l,s,u=i[e].length;for(n[e]||(n[e]=[]),r=0;r<u;++r)s=i[e][r],l=o.valueOrDefault(s.type,"xAxes"===e?"category":"linear"),r>=n[e].length&&n[e].push({}),!n[e][r].type||s.type&&s.type!==n[e][r].type?o.merge(n[e][r],[t.scaleService.getScaleDefaults(l),s]):o.merge(n[e][r],s)}else
o._merger(e,n,i,a)}})},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return
t.filter(e);var n=[];return
o.each(t,function(t){e(t)&&n.push(t)}),n},o.findIndex=Array.prototype.findIndex?function(t,e,n){return
t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var
i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return
i;return-1},o.findNextWhere=function(t,e,n){o.isNullOrUndef(n)&&(n=-1);for(var
i=n+1;i<t.length;i++){var a=t[i];if(e(a))return
a}},o.findPreviousWhere=function(t,e,n){o.isNullOrUndef(n)&&(n=t.length);for(var
i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},o.inherits=function(t){var
e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return
e.apply(this,arguments)},i=function(){this.constructor=n};return
i.prototype=e.prototype,n.prototype=new
i,n.extend=o.inherits,t&&o.extend(n.prototype,t),n.__super__=e.prototype,n},o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,n){return
Math.abs(t-e)<n},o.almostWhole=function(t,e){var n=Math.round(t);return
n-e<t&&n+e>t},o.max=function(t){return
t.reduce(function(t,e){return
isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return
t.reduce(function(t,e){return
isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return
Math.sign(t)}:function(t){return
0==(t=+t)||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return
Math.log10(t)}:function(t){return
Math.log(t)/Math.LN10},o.toRadians=function(t){return
t*(Math.PI/180)},o.toDegrees=function(t){return
t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var
n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),o=Math.atan2(i,n);return
o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return
Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return
t%2==0?0:.5},o.splineCurve=function(t,e,n,i){var
a=t.skip?e:t,o=e,r=n.skip?e:n,l=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),s=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=l/(l+s),d=s/(l+s),c=i*(u=isNaN(u)?0:u),h=i*(d=isNaN(d)?0:d);return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var
e,n,i,a,r=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),l=r.length;for(e=0;e<l;++e)if(!(i=r[e]).model.skip){if(n=e>0?r[e-1]:null,(a=e<l-1?r[e+1]:null)&&!a.model.skip){var
s=a.model.x-i.model.x;i.deltaK=0!==s?(a.model.y-i.model.y)/s:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var
u,d,c,h;for(e=0;e<l-1;++e)i=r[e],a=r[e+1],i.model.skip||a.model.skip||(o.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,(h=Math.pow(u,2)+Math.pow(d,2))<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var
f;for(e=0;e<l;++e)(i=r[e]).model.skip||(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},o.nextItem=function(t,e,n){return
n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,n){return
n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var
n=Math.floor(o.log10(t)),i=t/Math.pow(10,n);return(e?i<1.5?1:i<3?2:i<7?5:10:i<=1?1:i<=2?2:i<=5?5:10)*Math.pow(10,n)},o.requestAnimFrame="undefined"==typeof
window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return
window.setTimeout(t,1e3/60)},o.getRelativePosition=function(t,e){var
n,i,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,l=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var
u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=l.right-l.left-u-c,g=l.bottom-l.top-d-h;return
n=Math.round((n-l.left-u)/f*r.width/e.currentDevicePixelRatio),i=Math.round((i-l.top-d)/g*r.height/e.currentDevicePixelRatio),{x:n,y:i}},o.getConstraintWidth=function(t){return
r(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return
r(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var
e=t.parentNode;if(!e)return t.clientWidth;var
n=parseInt(o.getStyle(e,"padding-left"),10),i=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,r=o.getConstraintWidth(t);return
isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var
e=t.parentNode;if(!e)return t.clientHeight;var
n=parseInt(o.getStyle(e,"padding-top"),10),i=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,r=o.getConstraintHeight(t);return
isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return
t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t,e){var
n=t.currentDevicePixelRatio=e||window.devicePixelRatio||1;if(1!==n){var
i=t.canvas,a=t.height,o=t.width;i.height=a*n,i.width=o*n,t.ctx.scale(n,n),i.style.height=a+"px",i.style.width=o+"px"}},o.fontString=function(t,e,n){return
e+" "+t+"px "+n},o.longestText=function(t,e,n,i){var
a=(i=i||{}).data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var
l=0;o.each(n,function(e){void
0!==e&&null!==e&&!0!==o.isArray(e)?l=o.measureText(t,a,r,l,e):o.isArray(e)&&o.each(e,function(e){void
0===e||null===e||o.isArray(e)||(l=o.measureText(t,a,r,l,e))})});var
s=r.length/2;if(s>n.length){for(var u=0;u<s;u++)delete
a[r[u]];r.splice(0,s)}return l},o.measureText=function(t,e,n,i,a){var
o=e[a];return
o||(o=e[a]=t.measureText(a).width,n.push(a)),o>i&&(i=o),i},o.numberOfLabelLines=function(t){var
e=1;return
o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.color=i?function(t){return
t instanceof
CanvasGradient&&(t=a.global.defaultColor),i(t)}:function(t){return
console.error("Color.js not
found!"),t},o.getHoverColor=function(t){return t instanceof
CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()}}},{25:25,3:3,45:45}],28:[function(t,e,n){"use
strict";function i(t,e){return
t.native?{x:t.x,y:t.y}:u.getRelativePosition(t,e)}function a(t,e){var
n,i,a,o,r;for(i=0,o=t.data.datasets.length;i<o;++i)if(t.isDatasetVisible(i))for(a=0,r=(n=t.getDatasetMeta(i)).data.length;a<r;++a){var
l=n.data[a];l._view.skip||e(l)}}function o(t,e){var n=[];return
a(t,function(t){t.inRange(e.x,e.y)&&n.push(t)}),n}function
r(t,e,n,i){var o=Number.POSITIVE_INFINITY,r=[];return
a(t,function(t){if(!n||t.inRange(e.x,e.y)){var
a=t.getCenterPoint(),l=i(e,a);l<o?(r=[t],o=l):l===o&&r.push(t)}}),r}function
l(t){var
e=-1!==t.indexOf("x"),n=-1!==t.indexOf("y");return
function(t,i){var a=e?Math.abs(t.x-i.x):0,o=n?Math.abs(t.y-i.y):0;return
Math.sqrt(Math.pow(a,2)+Math.pow(o,2))}}function s(t,e,n){var
a=i(e,t);n.axis=n.axis||"x";var
s=l(n.axis),u=n.intersect?o(t,a):r(t,a,!1,s),d=[];return
u.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var
i=t.getDatasetMeta(n).data[u[0]._index];i&&!i._view.skip&&d.push(i)}}),d):[]}var
u=t(45);e.exports={modes:{single:function(t,e){var n=i(e,t),o=[];return
a(t,function(t){if(t.inRange(n.x,n.y))return
o.push(t),o}),o.slice(0,1)},label:s,index:s,dataset:function(t,e,n){var
a=i(e,t);n.axis=n.axis||"xy";var
s=l(n.axis),u=n.intersect?o(t,a):r(t,a,!1,s);return
u.length>0&&(u=t.getDatasetMeta(u[0]._datasetIndex).data),u},"x-axis":function(t,e){return
s(t,e,{intersect:!0})},point:function(t,e){return
o(t,i(e,t))},nearest:function(t,e,n){var
a=i(e,t);n.axis=n.axis||"xy";var
o=l(n.axis),s=r(t,a,n.intersect,o);return
s.length>1&&s.sort(function(t,e){var
n=t.getArea()-e.getArea();return
0===n&&(n=t._datasetIndex-e._datasetIndex),n}),s.slice(0,1)},x:function(t,e,n){var
o=i(e,t),r=[],l=!1;return
a(t,function(t){t.inXRange(o.x)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),n.intersect&&!l&&(r=[]),r},y:function(t,e,n){var
o=i(e,t),r=[],l=!1;return
a(t,function(t){t.inYRange(o.y)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),n.intersect&&!l&&(r=[]),r}}}},{45:45}],29:[function(t,e,n){"use
strict";t(25)._set("global",{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica
Neue', 'Helvetica', 'Arial',
sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},layout:{padding:{top:0,right:0,bottom:0,left:0}}}),e.exports=function(){var
t=function(t,e){return this.construct(t,e),this};return
t.Chart=t,t}},{25:25}],30:[function(t,e,n){"use strict";var
i=t(45);e.exports=function(t){function e(t,e){return
i.where(t,function(t){return t.position===e})}function
n(t,e){t.forEach(function(t,e){return
t._tmpIndex_=e,t}),t.sort(function(t,n){var i=e?n:t,a=e?t:n;return
i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight}),t.forEach(function(t){delete
t._tmpIndex_})}t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var
n=t.boxes?t.boxes.indexOf(e):-1;-1!==n&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var
i,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)i=a[r],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,a,o){function
r(t){var e=i.findNextWhere(_,function(e){return
e.box===t});if(e)if(t.isHorizontal()){var
n={left:Math.max(T,D),right:Math.max(F,I),top:0,bottom:0};t.update(t.fullWidth?x:S,y/2,n)}else
t.update(e.minSize.width,C)}function
l(t){t.isHorizontal()?(t.left=t.fullWidth?d:T,t.right=t.fullWidth?a-c:T+S,t.top=V,t.bottom=V+t.height,V=t.bottom):(t.left=N,t.right=N+t.width,t.top=O,t.bottom=O+C,N=t.right)}if(t){var
s=t.options.layout||{},u=i.options.toPadding(s.padding),d=u.left,c=u.right,h=u.top,f=u.bottom,g=e(t.boxes,"left"),p=e(t.boxes,"right"),v=e(t.boxes,"top"),m=e(t.boxes,"bottom"),b=e(t.boxes,"chartArea");n(g,!0),n(p,!1),n(v,!0),n(m,!1);var
x=a-d-c,y=o-h-f,k=y/2,w=(a-x/2)/(g.length+p.length),M=(o-k)/(v.length+m.length),S=x,C=y,_=[];i.each(g.concat(p,v,m),function(t){var
e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?x:S,M),C-=e.height):(e=t.update(w,k),S-=e.width),_.push({horizontal:n,minSize:e,box:t})});var
D=0,I=0,P=0,A=0;i.each(v.concat(m),function(t){if(t.getPadding){var
e=t.getPadding();D=Math.max(D,e.left),I=Math.max(I,e.right)}}),i.each(g.concat(p),function(t){if(t.getPadding){var
e=t.getPadding();P=Math.max(P,e.top),A=Math.max(A,e.bottom)}});var
T=d,F=c,O=h,R=f;i.each(g.concat(p),r),i.each(g,function(t){T+=t.width}),i.each(p,function(t){F+=t.width}),i.each(v.concat(m),r),i.each(v,function(t){O+=t.height}),i.each(m,function(t){R+=t.height}),i.each(g.concat(p),function(t){var
e=i.findNextWhere(_,function(e){return
e.box===t}),n={left:0,right:0,top:O,bottom:R};e&&t.update(e.minSize.width,C,n)}),T=d,F=c,O=h,R=f,i.each(g,function(t){T+=t.width}),i.each(p,function(t){F+=t.width}),i.each(v,function(t){O+=t.height}),i.each(m,function(t){R+=t.height});var
L=Math.max(D-T,0);T+=L,F+=Math.max(I-F,0);var
z=Math.max(P-O,0);O+=z,R+=Math.max(A-R,0);var
B=o-O-R,W=a-T-F;W===S&&B===C||(i.each(g,function(t){t.height=B}),i.each(p,function(t){t.height=B}),i.each(v,function(t){t.fullWidth||(t.width=W)}),i.each(m,function(t){t.fullWidth||(t.width=W)}),C=B,S=W);var
N=d+L,V=h+z;i.each(g.concat(v),l),N+=S,V+=C,i.each(p,l),i.each(m,l),t.chartArea={left:T,top:O,right:T+S,bottom:O+C},i.each(b,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(S,C)})}}}}},{45:45}],31:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{plugins:{}}),e.exports=function(t){t.plugins={_plugins:[],_cacheId:0,register:function(t){var
e=this._plugins;[].concat(t).forEach(function(t){-1===e.indexOf(t)&&e.push(t)}),this._cacheId++},unregister:function(t){var
e=this._plugins;[].concat(t).forEach(function(t){var
n=e.indexOf(t);-1!==n&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return
this._plugins.length},getAll:function(){return
this._plugins},notify:function(t,e,n){var
i,a,o,r,l,s=this.descriptors(t),u=s.length;for(i=0;i<u;++i)if(a=s[i],o=a.plugin,"function"==typeof(l=o[e])&&((r=[t].concat(n||[])).push(a.options),!1===l.apply(o,r)))return!1;return!0},descriptors:function(t){var
e=t._plugins||(t._plugins={});if(e.id===this._cacheId)return
e.descriptors;var
n=[],a=[],r=t&&t.config||{},l=r.options&&r.options.plugins||{};return
this._plugins.concat(r.plugins||[]).forEach(function(t){if(-1===n.indexOf(t)){var
e=t.id,r=l[e];!1!==r&&(!0===r&&(r=o.clone(i.global.plugins[e])),n.push(t),a.push({plugin:t,options:r||{}}))}}),e.descriptors=a,e.id=this._cacheId,a}},t.pluginService=t.plugins,t.PluginBase=a.extend({})}},{25:25,26:26,45:45}],32:[function(t,e,n){"use
strict";function i(t){var
e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(t[e].label);return i}function
a(t,e,n){var i=t.getPixelForTick(e);return
n&&(i-=0===e?(t.getPixelForTick(1)-i)/2:(i-t.getPixelForTick(e-1))/2),i}var
o=t(25),r=t(26),l=t(45),s=t(34);o._set("scale",{display:!0,position:"left",offset:!1,gridLines:{display:!0,color:"rgba(0,
0, 0,
0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{display:!1,labelString:"",lineHeight:1.2,padding:{top:4,bottom:4}},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:s.formatters.values,minor:{},major:{}}}),e.exports=function(t){function
e(t,e,n){return
l.isArray(e)?l.longestText(t,n,e):t.measureText(e).width}function n(t){var
e=l.valueOrDefault,n=o.global,i=e(t.fontSize,n.defaultFontSize),a=e(t.fontStyle,n.defaultFontStyle),r=e(t.fontFamily,n.defaultFontFamily);return{size:i,style:a,family:r,font:l.fontString(i,a,r)}}function
s(t){return
l.options.toLineHeight(l.valueOrDefault(t.lineHeight,1.2),l.valueOrDefault(t.fontSize,o.global.defaultFontSize))}t.Scale=r.extend({getPadding:function(){var
t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},getTicks:function(){return
this._ticks},mergeTicksOptions:function(){var
t=this.options.ticks;!1===t.minor&&(t.minor={display:!1}),!1===t.major&&(t.major={display:!1});for(var
e in t)"major"!==e&&"minor"!==e&&(void
0===t.minor[e]&&(t.minor[e]=t[e]),void
0===t.major[e]&&(t.major[e]=t[e]))},beforeUpdate:function(){l.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var
i,a,o,r,s,u,d=this;for(d.beforeUpdate(),d.maxWidth=t,d.maxHeight=e,d.margins=l.extend({left:0,right:0,top:0,bottom:0},n),d.longestTextCache=d.longestTextCache||{},d.beforeSetDimensions(),d.setDimensions(),d.afterSetDimensions(),d.beforeDataLimits(),d.determineDataLimits(),d.afterDataLimits(),d.beforeBuildTicks(),s=d.buildTicks()||[],d.afterBuildTicks(),d.beforeTickToLabelConversion(),o=d.convertTicksToLabels(s)||d.ticks,d.afterTickToLabelConversion(),d.ticks=o,i=0,a=o.length;i<a;++i)r=o[i],(u=s[i])?u.label=r:s.push(u={label:r,major:!1});return
d._ticks=s,d.beforeCalculateTickRotation(),d.calculateTickRotation(),d.afterCalculateTickRotation(),d.beforeFit(),d.fit(),d.afterFit(),d.afterUpdate(),d.minSize},afterUpdate:function(){l.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){l.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var
t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){l.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){l.callback(this.options.beforeDataLimits,[this])},determineDataLimits:l.noop,afterDataLimits:function(){l.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){l.callback(this.options.beforeBuildTicks,[this])},buildTicks:l.noop,afterBuildTicks:function(){l.callback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){l.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var
t=this,e=t.options.ticks;t.ticks=t.ticks.map(e.userCallback||e.callback,this)},afterTickToLabelConversion:function(){l.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){l.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var
t=this,e=t.ctx,a=t.options.ticks,o=i(t._ticks),r=n(a);e.font=r.font;var
s=a.minRotation||0;if(o.length&&t.options.display&&t.isHorizontal())for(var
u,d=l.longestText(e,r.font,o,t.longestTextCache),c=d,h=t.getPixelForTick(1)-t.getPixelForTick(0)-6;c>h&&s<a.maxRotation;){var
f=l.toRadians(s);if(u=Math.cos(f),Math.sin(f)*d>t.maxHeight){s--;break}s++,c=u*d}t.labelRotation=s},afterCalculateTickRotation:function(){l.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){l.callback(this.options.beforeFit,[this])},fit:function(){var
t=this,a=t.minSize={width:0,height:0},o=i(t._ticks),r=t.options,u=r.ticks,d=r.scaleLabel,c=r.gridLines,h=r.display,f=t.isHorizontal(),g=n(u),p=r.gridLines.tickMarkLength;if(a.width=f?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:h&&c.drawTicks?p:0,a.height=f?h&&c.drawTicks?p:0:t.maxHeight,d.display&&h){var
v=s(d)+l.options.toPadding(d.padding).height;f?a.height+=v:a.width+=v}if(u.display&&h){var
m=l.longestText(t.ctx,g.font,o,t.longestTextCache),b=l.numberOfLabelLines(o),x=.5*g.size,y=t.options.ticks.padding;if(f){t.longestLabelWidth=m;var
k=l.toRadians(t.labelRotation),w=Math.cos(k),M=Math.sin(k)*m+g.size*b+x*(b-1)+x;a.height=Math.min(t.maxHeight,a.height+M+y),t.ctx.font=g.font;var
S=e(t.ctx,o[0],g.font),C=e(t.ctx,o[o.length-1],g.font);0!==t.labelRotation?(t.paddingLeft="bottom"===r.position?w*S+3:w*x+3,t.paddingRight="bottom"===r.position?w*x+3:w*C+3):(t.paddingLeft=S/2+3,t.paddingRight=C/2+3)}else
u.mirror?m=0:m+=y+x,a.width=Math.min(t.maxWidth,a.width+m),t.paddingTop=g.size/2,t.paddingBottom=g.size/2}t.handleMargins(),t.width=a.width,t.height=a.height},handleMargins:function(){var
t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){l.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return
this.options.fullWidth},getRightValue:function(t){if(l.isNullOrUndef(t))return
NaN;if("number"==typeof t&&!isFinite(t))return
NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return
this.getRightValue(t.x)}else if(void 0!==t.y)return
this.getRightValue(t.y);return
t},getLabelForIndex:l.noop,getPixelForValue:l.noop,getValueForPixel:l.noop,getPixelForTick:function(t){var
e=this,n=e.options.offset;if(e.isHorizontal()){var
i=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(n?0:1),1),a=i*t+e.paddingLeft;n&&(a+=i/2);var
o=e.left+Math.round(a);return o+=e.isFullWidth()?e.margins.left:0}var
r=e.height-(e.paddingTop+e.paddingBottom);return
e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var
e=this;if(e.isHorizontal()){var
n=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,i=e.left+Math.round(n);return
i+=e.isFullWidth()?e.margins.left:0}return
e.top+t*e.height},getBasePixel:function(){return
this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var
t=this,e=t.min,n=t.max;return
t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0},_autoSkip:function(t){var
e,n,i,a,o=this,r=o.isHorizontal(),s=o.options.ticks.minor,u=t.length,d=l.toRadians(o.labelRotation),c=Math.cos(d),h=o.longestLabelWidth*c,f=[];for(s.maxTicksLimit&&(a=s.maxTicksLimit),r&&(e=!1,(h+s.autoSkipPadding)*u>o.width-(o.paddingLeft+o.paddingRight)&&(e=1+Math.floor((h+s.autoSkipPadding)*u/(o.width-(o.paddingLeft+o.paddingRight)))),a&&u>a&&(e=Math.max(e,Math.floor(u/a)))),n=0;n<u;n++)i=t[n],((e>1&&n%e>0||n%e==0&&n+e>=u)&&n!==u-1||l.isNullOrUndef(i.label))&&delete
i.label,f.push(i);return f},draw:function(t){var
e=this,i=e.options;if(i.display){var
r=e.ctx,u=o.global,d=i.ticks.minor,c=i.ticks.major||d,h=i.gridLines,f=i.scaleLabel,g=0!==e.labelRotation,p=e.isHorizontal(),v=d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),m=l.valueOrDefault(d.fontColor,u.defaultFontColor),b=n(d),x=l.valueOrDefault(c.fontColor,u.defaultFontColor),y=n(c),k=h.drawTicks?h.tickMarkLength:0,w=l.valueOrDefault(f.fontColor,u.defaultFontColor),M=n(f),S=l.options.toPadding(f.padding),C=l.toRadians(e.labelRotation),_=[],D="right"===i.position?e.left:e.right-k,I="right"===i.position?e.left+k:e.right,P="bottom"===i.position?e.top:e.bottom-k,A="bottom"===i.position?e.top+k:e.bottom;if(l.each(v,function(n,o){if(void
0!==n.label){var
r,s,c,f,m=n.label;o===e.zeroLineIndex&&i.offset===h.offsetGridLines?(r=h.zeroLineWidth,s=h.zeroLineColor,c=h.zeroLineBorderDash,f=h.zeroLineBorderDashOffset):(r=l.valueAtIndexOrDefault(h.lineWidth,o),s=l.valueAtIndexOrDefault(h.color,o),c=l.valueOrDefault(h.borderDash,u.borderDash),f=l.valueOrDefault(h.borderDashOffset,u.borderDashOffset));var
b,x,y,w,M,S,T,F,O,R,L="middle",z="middle",B=d.padding;if(p){var
W=k+B;"bottom"===i.position?(z=g?"middle":"top",L=g?"right":"center",R=e.top+W):(z=g?"middle":"bottom",L=g?"left":"center",R=e.bottom-W);var
N=a(e,o,h.offsetGridLines&&v.length>1);N<e.left&&(s="rgba(0,0,0,0)"),N+=l.aliasPixel(r),O=e.getPixelForTick(o)+d.labelOffset,b=y=M=T=N,x=P,w=A,S=t.top,F=t.bottom}else{var
V,E="left"===i.position;d.mirror?(L=E?"left":"right",V=B):(L=E?"right":"left",V=k+B),O=E?e.right-V:e.left+V;var
H=a(e,o,h.offsetGridLines&&v.length>1);H<e.top&&(s="rgba(0,0,0,0)"),H+=l.aliasPixel(r),R=e.getPixelForTick(o)+d.labelOffset,b=D,y=I,M=t.left,T=t.right,x=w=S=F=H}_.push({tx1:b,ty1:x,tx2:y,ty2:w,x1:M,y1:S,x2:T,y2:F,labelX:O,labelY:R,glWidth:r,glColor:s,glBorderDash:c,glBorderDashOffset:f,rotation:-1*C,label:m,major:n.major,textBaseline:z,textAlign:L})}}),l.each(_,function(t){if(h.display&&(r.save(),r.lineWidth=t.glWidth,r.strokeStyle=t.glColor,r.setLineDash&&(r.setLineDash(t.glBorderDash),r.lineDashOffset=t.glBorderDashOffset),r.beginPath(),h.drawTicks&&(r.moveTo(t.tx1,t.ty1),r.lineTo(t.tx2,t.ty2)),h.drawOnChartArea&&(r.moveTo(t.x1,t.y1),r.lineTo(t.x2,t.y2)),r.stroke(),r.restore()),d.display){r.save(),r.translate(t.labelX,t.labelY),r.rotate(t.rotation),r.font=t.major?y.font:b.font,r.fillStyle=t.major?x:m,r.textBaseline=t.textBaseline,r.textAlign=t.textAlign;var
e=t.label;if(l.isArray(e))for(var
n=0,i=0;n<e.length;++n)r.fillText(""+e[n],0,i),i+=1.5*b.size;else
r.fillText(e,0,0);r.restore()}}),f.display){var
T,F,O=0,R=s(f)/2;if(p)T=e.left+(e.right-e.left)/2,F="bottom"===i.position?e.bottom-R-S.bottom:e.top+R+S.top;else{var
L="left"===i.position;T=L?e.left+R+S.top:e.right-R-S.top,F=e.top+(e.bottom-e.top)/2,O=L?-.5*Math.PI:.5*Math.PI}r.save(),r.translate(T,F),r.rotate(O),r.textAlign="center",r.textBaseline="middle",r.fillStyle=w,r.font=M.font,r.fillText(f.labelString,0,0),r.restore()}if(h.drawBorder){r.lineWidth=l.valueAtIndexOrDefault(h.lineWidth,0),r.strokeStyle=l.valueAtIndexOrDefault(h.color,0);var
z=e.left,B=e.right,W=e.top,N=e.bottom,V=l.aliasPixel(r.lineWidth);p?(W=N="top"===i.position?e.bottom:e.top,W+=V,N+=V):(z=B="left"===i.position?e.right:e.left,z+=V,B+=V),r.beginPath(),r.moveTo(z,W),r.lineTo(B,N),r.stroke()}}}})}},{25:25,26:26,34:34,45:45}],33:[function(t,e,n){"use
strict";var
i=t(25),a=t(45);e.exports=function(t){t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,e,n){this.constructors[t]=e,this.defaults[t]=a.clone(n)},getScaleConstructor:function(t){return
this.constructors.hasOwnProperty(t)?this.constructors[t]:void
0},getScaleDefaults:function(t){return
this.defaults.hasOwnProperty(t)?a.merge({},[i.scale,this.defaults[t]]):{}},updateScaleDefaults:function(t,e){var
n=this;n.defaults.hasOwnProperty(t)&&(n.defaults[t]=a.extend(n.defaults[t],e))},addScalesToLayout:function(e){a.each(e.scales,function(n){n.fullWidth=n.options.fullWidth,n.position=n.options.position,n.weight=n.options.weight,t.layoutService.addBox(e,n)})}}}},{25:25,45:45}],34:[function(t,e,n){"use
strict";var i=t(45);e.exports={generators:{linear:function(t,e){var
n,a=[];if(t.stepSize&&t.stepSize>0)n=t.stepSize;else{var
o=i.niceNum(e.max-e.min,!1);n=i.niceNum(o/(t.maxTicks-1),!0)}var
r=Math.floor(e.min/n)*n,l=Math.ceil(e.max/n)*n;t.min&&t.max&&t.stepSize&&i.almostWhole((t.max-t.min)/t.stepSize,n/1e3)&&(r=t.min,l=t.max);var
s=(l-r)/n;s=i.almostEquals(s,Math.round(s),n/1e3)?Math.round(s):Math.ceil(s),a.push(void
0!==t.min?t.min:r);for(var u=1;u<s;++u)a.push(r+u*n);return a.push(void
0!==t.max?t.max:l),a},logarithmic:function(t,e){var
n,a,o=[],r=i.valueOrDefault,l=r(t.min,Math.pow(10,Math.floor(i.log10(e.min)))),s=Math.floor(i.log10(e.max)),u=Math.ceil(e.max/Math.pow(10,s));0===l?(n=Math.floor(i.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,n)),o.push(l),l=a*Math.pow(10,n)):(n=Math.floor(i.log10(l)),a=Math.floor(l/Math.pow(10,n)));do{o.push(l),10===++a&&(a=1,++n),l=a*Math.pow(10,n)}while(n<s||n===s&&a<u);var
d=r(t.max,l);return o.push(d),o}},formatters:{values:function(t){return
i.isArray(t)?t:""+t},linear:function(t,e,n){var
a=n.length>3?n[2]-n[1]:n[1]-n[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var
o=i.log10(Math.abs(a)),r="";if(0!==t){var
l=-1*Math.floor(o);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else
r="0";return r},logarithmic:function(t,e,n){var
a=t/Math.pow(10,Math.floor(i.log10(t)));return
0===t?"0":1===a||2===a||5===a||0===e||e===n.length-1?t.toExponential():""}}}},{45:45}],35:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:o.noop,title:function(t,e){var
n="",i=e.labels,a=i?i.length:0;if(t.length>0){var
o=t[0];o.xLabel?n=o.xLabel:a>0&&o.index<a&&(n=i[o.index])}return
n},afterTitle:o.noop,beforeBody:o.noop,beforeLabel:o.noop,label:function(t,e){var
n=e.datasets[t.datasetIndex].label||"";return
n&&(n+=": "),n+=t.yLabel},labelColor:function(t,e){var
n=e.getDatasetMeta(t.datasetIndex).data[t.index]._view;return{borderColor:n.borderColor,backgroundColor:n.backgroundColor}},labelTextColor:function(){return
this._options.bodyFontColor},afterLabel:o.noop,afterBody:o.noop,beforeFooter:o.noop,footer:o.noop,afterFooter:o.noop}}}),e.exports=function(t){function
e(t,e){var n=o.color(t);return n.alpha(e*n.alpha()).rgbaString()}function
n(t,e){return
e&&(o.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function
r(t){var
e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._datasetIndex;return{xLabel:e?e.getLabelForIndex(i,a):"",yLabel:n?n.getLabelForIndex(i,a):"",index:i,datasetIndex:a,x:t._model.x,y:t._model.y}}function
l(t){var
e=i.global,n=o.valueOrDefault;return{xPadding:t.xPadding,yPadding:t.yPadding,xAlign:t.xAlign,yAlign:t.yAlign,bodyFontColor:t.bodyFontColor,_bodyFontFamily:n(t.bodyFontFamily,e.defaultFontFamily),_bodyFontStyle:n(t.bodyFontStyle,e.defaultFontStyle),_bodyAlign:t.bodyAlign,bodyFontSize:n(t.bodyFontSize,e.defaultFontSize),bodySpacing:t.bodySpacing,titleFontColor:t.titleFontColor,_titleFontFamily:n(t.titleFontFamily,e.defaultFontFamily),_titleFontStyle:n(t.titleFontStyle,e.defaultFontStyle),titleFontSize:n(t.titleFontSize,e.defaultFontSize),_titleAlign:t.titleAlign,titleSpacing:t.titleSpacing,titleMarginBottom:t.titleMarginBottom,footerFontColor:t.footerFontColor,_footerFontFamily:n(t.footerFontFamily,e.defaultFontFamily),_footerFontStyle:n(t.footerFontStyle,e.defaultFontStyle),footerFontSize:n(t.footerFontSize,e.defaultFontSize),_footerAlign:t.footerAlign,footerSpacing:t.footerSpacing,footerMarginTop:t.footerMarginTop,caretSize:t.caretSize,cornerRadius:t.cornerRadius,backgroundColor:t.backgroundColor,opacity:0,legendColorBackground:t.multiKeyBackground,displayColors:t.displayColors,borderColor:t.borderColor,borderWidth:t.borderWidth}}function
s(t,e){var
n=t._chart.ctx,i=2*e.yPadding,a=0,r=e.body,l=r.reduce(function(t,e){return
t+e.before.length+e.lines.length+e.after.length},0);l+=e.beforeBody.length+e.afterBody.length;var
s=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;i+=s*d,i+=s?(s-1)*e.titleSpacing:0,i+=s?e.titleMarginBottom:0,i+=l*c,i+=l?(l-1)*e.bodySpacing:0,i+=u?e.footerMarginTop:0,i+=u*h,i+=u?(u-1)*e.footerSpacing:0;var
f=0,g=function(t){a=Math.max(a,n.measureText(t).width+f)};return
n.font=o.fontString(d,e._titleFontStyle,e._titleFontFamily),o.each(e.title,g),n.font=o.fontString(c,e._bodyFontStyle,e._bodyFontFamily),o.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,o.each(r,function(t){o.each(t.before,g),o.each(t.lines,g),o.each(t.after,g)}),f=0,n.font=o.fontString(h,e._footerFontStyle,e._footerFontFamily),o.each(e.footer,g),a+=2*e.xPadding,{width:a,height:i}}function
u(t,e){var
n=t._model,i=t._chart,a=t._chart.chartArea,o="center",r="center";n.y<e.height?r="top":n.y>i.height-e.height&&(r="bottom");var
l,s,u,d,c,h=(a.left+a.right)/2,f=(a.top+a.bottom)/2;"center"===r?(l=function(t){return
t<=h},s=function(t){return t>h}):(l=function(t){return
t<=e.width/2},s=function(t){return
t>=i.width-e.width/2}),u=function(t){return
t+e.width>i.width},d=function(t){return
t-e.width<0},c=function(t){return
t<=f?"top":"bottom"},l(n.x)?(o="left",u(n.x)&&(o="center",r=c(n.y))):s(n.x)&&(o="right",d(n.x)&&(o="center",r=c(n.y)));var
g=t._options;return{xAlign:g.xAlign?g.xAlign:o,yAlign:g.yAlign?g.yAlign:r}}function
d(t,e,n){var
i=t.x,a=t.y,o=t.caretSize,r=t.caretPadding,l=t.cornerRadius,s=n.xAlign,u=n.yAlign,d=o+r,c=l+r;return"right"===s?i-=e.width:"center"===s&&(i-=e.width/2),"top"===u?a+=d:a-="bottom"===u?e.height+d:e.height/2,"center"===u?"left"===s?i+=d:"right"===s&&(i-=d):"left"===s?i-=c:"right"===s&&(i+=c),{x:i,y:a}}t.Tooltip=a.extend({initialize:function(){this._model=l(this._options)},getTitle:function(){var
t=this,e=t._options.callbacks,i=e.beforeTitle.apply(t,arguments),a=e.title.apply(t,arguments),o=e.afterTitle.apply(t,arguments),r=[];return
r=n(r,i),r=n(r,a),r=n(r,o)},getBeforeBody:function(){var
t=this._options.callbacks.beforeBody.apply(this,arguments);return
o.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var
i=this,a=i._options.callbacks,r=[];return o.each(t,function(t){var
o={before:[],lines:[],after:[]};n(o.before,a.beforeLabel.call(i,t,e)),n(o.lines,a.label.call(i,t,e)),n(o.after,a.afterLabel.call(i,t,e)),r.push(o)}),r},getAfterBody:function(){var
t=this._options.callbacks.afterBody.apply(this,arguments);return
o.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var
t=this,e=t._options.callbacks,i=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),o=e.afterFooter.apply(t,arguments),r=[];return
r=n(r,i),r=n(r,a),r=n(r,o)},update:function(e){var
n,i,a=this,c=a._options,h=a._model,f=a._model=l(c),g=a._active,p=a._data,v={xAlign:h.xAlign,yAlign:h.yAlign},m={x:h.x,y:h.y},b={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(g.length){f.opacity=1;var
y=[],k=[];x=t.Tooltip.positioners[c.position](g,a._eventPosition);var
w=[];for(n=0,i=g.length;n<i;++n)w.push(r(g[n]));c.filter&&(w=w.filter(function(t){return
c.filter(t,p)})),c.itemSort&&(w=w.sort(function(t,e){return
c.itemSort(t,e,p)})),o.each(w,function(t){y.push(c.callbacks.labelColor.call(a,t,a._chart)),k.push(c.callbacks.labelTextColor.call(a,t,a._chart))}),f.title=a.getTitle(w,p),f.beforeBody=a.getBeforeBody(w,p),f.body=a.getBody(w,p),f.afterBody=a.getAfterBody(w,p),f.footer=a.getFooter(w,p),f.x=Math.round(x.x),f.y=Math.round(x.y),f.caretPadding=c.caretPadding,f.labelColors=y,f.labelTextColors=k,f.dataPoints=w,m=d(f,b=s(this,f),v=u(this,b))}else
f.opacity=0;return
f.xAlign=v.xAlign,f.yAlign=v.yAlign,f.x=m.x,f.y=m.y,f.width=b.width,f.height=b.height,f.caretX=x.x,f.caretY=x.y,a._model=f,e&&c.custom&&c.custom.call(a,f),a},drawCaret:function(t,e){var
n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var
i,a,o,r,l,s,u=n.caretSize,d=n.cornerRadius,c=n.xAlign,h=n.yAlign,f=t.x,g=t.y,p=e.width,v=e.height;if("center"===h)l=g+v/2,"left"===c?(a=(i=f)-u,o=i,r=l+u,s=l-u):(a=(i=f+p)+u,o=i,r=l-u,s=l+u);else
if("left"===c?(i=(a=f+d+u)-u,o=a+u):"right"===c?(i=(a=f+p-d-u)-u,o=a+u):(i=(a=f+p/2)-u,o=a+u),"top"===h)l=(r=g)-u,s=r;else{l=(r=g+v)+u,s=r;var
m=o;o=i,i=m}return{x1:i,x2:a,x3:o,y1:r,y2:l,y3:s}},drawTitle:function(t,n,i,a){var
r=n.title;if(r.length){i.textAlign=n._titleAlign,i.textBaseline="top";var
l=n.titleFontSize,s=n.titleSpacing;i.fillStyle=e(n.titleFontColor,a),i.font=o.fontString(l,n._titleFontStyle,n._titleFontFamily);var
u,d;for(u=0,d=r.length;u<d;++u)i.fillText(r[u],t.x,t.y),t.y+=l+s,u+1===r.length&&(t.y+=n.titleMarginBottom-s)}},drawBody:function(t,n,i,a){var
r=n.bodyFontSize,l=n.bodySpacing,s=n.body;i.textAlign=n._bodyAlign,i.textBaseline="top",i.font=o.fontString(r,n._bodyFontStyle,n._bodyFontFamily);var
u=0,d=function(e){i.fillText(e,t.x+u,t.y),t.y+=r+l};o.each(n.beforeBody,d);var
c=n.displayColors;u=c?r+2:0,o.each(s,function(l,s){o.each(l.before,d),o.each(l.lines,function(o){if(c){i.fillStyle=e(n.legendColorBackground,a),i.fillRect(t.x,t.y,r,r),i.lineWidth=1,i.strokeStyle=e(n.labelColors[s].borderColor,a),i.strokeRect(t.x,t.y,r,r),i.fillStyle=e(n.labelColors[s].backgroundColor,a),i.fillRect(t.x+1,t.y+1,r-2,r-2);var
l=e(n.labelTextColors[s],a);i.fillStyle=l}d(o)}),o.each(l.after,d)}),u=0,o.each(n.afterBody,d),t.y-=l},drawFooter:function(t,n,i,a){var
r=n.footer;r.length&&(t.y+=n.footerMarginTop,i.textAlign=n._footerAlign,i.textBaseline="top",i.fillStyle=e(n.footerFontColor,a),i.font=o.fontString(n.footerFontSize,n._footerFontStyle,n._footerFontFamily),o.each(r,function(e){i.fillText(e,t.x,t.y),t.y+=n.footerFontSize+n.footerSpacing}))},drawBackground:function(t,n,i,a,o){i.fillStyle=e(n.backgroundColor,o),i.strokeStyle=e(n.borderColor,o),i.lineWidth=n.borderWidth;var
r=n.xAlign,l=n.yAlign,s=t.x,u=t.y,d=a.width,c=a.height,h=n.cornerRadius;i.beginPath(),i.moveTo(s+h,u),"top"===l&&this.drawCaret(t,a),i.lineTo(s+d-h,u),i.quadraticCurveTo(s+d,u,s+d,u+h),"center"===l&&"right"===r&&this.drawCaret(t,a),i.lineTo(s+d,u+c-h),i.quadraticCurveTo(s+d,u+c,s+d-h,u+c),"bottom"===l&&this.drawCaret(t,a),i.lineTo(s+h,u+c),i.quadraticCurveTo(s,u+c,s,u+c-h),"center"===l&&"left"===r&&this.drawCaret(t,a),i.lineTo(s,u+h),i.quadraticCurveTo(s,u,s+h,u),i.closePath(),i.fill(),n.borderWidth>0&&i.stroke()},draw:function(){var
t=this._chart.ctx,e=this._view;if(0!==e.opacity){var
n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(i,e,t,n,a),i.x+=e.xPadding,i.y+=e.yPadding,this.drawTitle(i,e,t,a),this.drawBody(i,e,t,a),this.drawFooter(i,e,t,a))}},handleEvent:function(t){var
e=this,n=e._options,i=!1;if(e._lastActive=e._lastActive||[],"mouseout"===t.type?e._active=[]:e._active=e._chart.getElementsAtEventForMode(t,n.mode,n),!(i=!o.arrayEquals(e._active,e._lastActive)))return!1;if(e._lastActive=e._active,n.enabled||n.custom){e._eventPosition={x:t.x,y:t.y};var
a=e._model;e.update(!0),e.pivot(),i|=a.x!==e._model.x||a.y!==e._model.y}return
i}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var
e,n,i=0,a=0,o=0;for(e=0,n=t.length;e<n;++e){var
r=t[e];if(r&&r.hasValue()){var
l=r.tooltipPosition();i+=l.x,a+=l.y,++o}}return{x:Math.round(i/o),y:Math.round(a/o)}},nearest:function(t,e){var
n,i,a,r=e.x,l=e.y,s=Number.POSITIVE_INFINITY;for(n=0,i=t.length;n<i;++n){var
u=t[n];if(u&&u.hasValue()){var
d=u.getCenterPoint(),c=o.distanceBetweenPoints(e,d);c<s&&(s=c,a=u)}}if(a){var
h=a.tooltipPosition();r=h.x,l=h.y}return{x:r,y:l}}}}},{25:25,26:26,45:45}],36:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{elements:{arc:{backgroundColor:i.global.defaultColor,borderColor:"#fff",borderWidth:2}}}),e.exports=a.extend({inLabelRange:function(t){var
e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,e){var
n=this._view;if(n){for(var
i=o.getAngleFromPoint(n,{x:t,y:e}),a=i.angle,r=i.distance,l=n.startAngle,s=n.endAngle;s<l;)s+=2*Math.PI;for(;a>s;)a-=2*Math.PI;for(;a<l;)a+=2*Math.PI;var
u=a>=l&&a<=s,d=r>=n.innerRadius&&r<=n.outerRadius;return
u&&d}return!1},getCenterPoint:function(){var
t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var
t=this._view;return
Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var
t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var
t=this._chart.ctx,e=this._view,n=e.startAngle,i=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,n,i),t.arc(e.x,e.y,e.innerRadius,i,n,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})},{25:25,26:26,45:45}],37:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45),r=i.global;i._set("global",{elements:{line:{tension:.4,backgroundColor:r.defaultColor,borderWidth:3,borderColor:r.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}}),e.exports=a.extend({draw:function(){var
t,e,n,i,a=this,l=a._view,s=a._chart.ctx,u=l.spanGaps,d=a._children.slice(),c=r.elements.line,h=-1;for(a._loop&&d.length&&d.push(d[0]),s.save(),s.lineCap=l.borderCapStyle||c.borderCapStyle,s.setLineDash&&s.setLineDash(l.borderDash||c.borderDash),s.lineDashOffset=l.borderDashOffset||c.borderDashOffset,s.lineJoin=l.borderJoinStyle||c.borderJoinStyle,s.lineWidth=l.borderWidth||c.borderWidth,s.strokeStyle=l.borderColor||r.defaultColor,s.beginPath(),h=-1,t=0;t<d.length;++t)e=d[t],n=o.previousItem(d,t),i=e._view,0===t?i.skip||(s.moveTo(i.x,i.y),h=t):(n=-1===h?n:d[h],i.skip||(h!==t-1&&!u||-1===h?s.moveTo(i.x,i.y):o.canvas.lineTo(s,n._view,e._view),h=t));s.stroke(),s.restore()}})},{25:25,26:26,45:45}],38:[function(t,e,n){"use
strict";function i(t){var
e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2)}var
a=t(25),o=t(26),r=t(45),l=a.global.defaultColor;a._set("global",{elements:{point:{radius:3,pointStyle:"circle",backgroundColor:l,borderColor:l,borderWidth:1,hitRadius:1,hoverRadius:4,hoverBorderWidth:1}}}),e.exports=o.extend({inRange:function(t,e){var
n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:i,inXRange:i,inYRange:function(t){var
e=this._view;return!!e&&Math.pow(t-e.y,2)<Math.pow(e.radius+e.hitRadius,2)},getCenterPoint:function(){var
t=this._view;return{x:t.x,y:t.y}},getArea:function(){return
Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var
t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(t){var
e=this._view,n=this._model,i=this._chart.ctx,o=e.pointStyle,s=e.radius,u=e.x,d=e.y,c=r.color,h=0;e.skip||(i.strokeStyle=e.borderColor||l,i.lineWidth=r.valueOrDefault(e.borderWidth,a.global.elements.point.borderWidth),i.fillStyle=e.backgroundColor||l,void
0!==t&&(n.x<t.left||1.01*t.right<n.x||n.y<t.top||1.01*t.bottom<n.y)&&(n.x<t.left?h=(u-n.x)/(t.left-n.x):1.01*t.right<n.x?h=(n.x-u)/(n.x-t.right):n.y<t.top?h=(d-n.y)/(t.top-n.y):1.01*t.bottom<n.y&&(h=(n.y-d)/(n.y-t.bottom)),h=Math.round(100*h)/100,i.strokeStyle=c(i.strokeStyle).alpha(h).rgbString(),i.fillStyle=c(i.fillStyle).alpha(h).rgbString()),r.canvas.drawPoint(i,o,s,u,d))}})},{25:25,26:26,45:45}],39:[function(t,e,n){"use
strict";function i(t){return void 0!==t._view.width}function a(t){var
e,n,a,o,r=t._view;if(i(t)){var
l=r.width/2;e=r.x-l,n=r.x+l,a=Math.min(r.y,r.base),o=Math.max(r.y,r.base)}else{var
s=r.height/2;e=Math.min(r.x,r.base),n=Math.max(r.x,r.base),a=r.y-s,o=r.y+s}return{left:e,top:a,right:n,bottom:o}}var
o=t(25),r=t(26);o._set("global",{elements:{rectangle:{backgroundColor:o.global.defaultColor,borderColor:o.global.defaultColor,borderSkipped:"bottom",borderWidth:0}}}),e.exports=r.extend({draw:function(){function
t(t){return m[(b+t)%4]}var
e,n,i,a,o,r,l,s=this._chart.ctx,u=this._view,d=u.borderWidth;if(u.horizontal?(e=u.base,n=u.x,i=u.y-u.height/2,a=u.y+u.height/2,o=n>e?1:-1,r=1,l=u.borderSkipped||"left"):(e=u.x-u.width/2,n=u.x+u.width/2,i=u.y,o=1,r=(a=u.base)>i?1:-1,l=u.borderSkipped||"bottom"),d){var
c=Math.min(Math.abs(e-n),Math.abs(i-a)),h=(d=d>c?c:d)/2,f=e+("left"!==l?h*o:0),g=n+("right"!==l?-h*o:0),p=i+("top"!==l?h*r:0),v=a+("bottom"!==l?-h*r:0);f!==g&&(i=p,a=v),p!==v&&(e=f,n=g)}s.beginPath(),s.fillStyle=u.backgroundColor,s.strokeStyle=u.borderColor,s.lineWidth=d;var
m=[[e,a],[e,i],[n,i],[n,a]],b=["bottom","left","top","right"].indexOf(l,0);-1===b&&(b=0);var
x=t(0);s.moveTo(x[0],x[1]);for(var
y=1;y<4;y++)x=t(y),s.lineTo(x[0],x[1]);s.fill(),d&&s.stroke()},height:function(){var
t=this._view;return t.base-t.y},inRange:function(t,e){var
n=!1;if(this._view){var
i=a(this);n=t>=i.left&&t<=i.right&&e>=i.top&&e<=i.bottom}return
n},inLabelRange:function(t,e){var n=this;if(!n._view)return!1;var
o=a(n);return
i(n)?t>=o.left&&t<=o.right:e>=o.top&&e<=o.bottom},inXRange:function(t){var
e=a(this);return
t>=e.left&&t<=e.right},inYRange:function(t){var
e=a(this);return
t>=e.top&&t<=e.bottom},getCenterPoint:function(){var
t,e,n=this._view;return
i(this)?(t=n.x,e=(n.y+n.base)/2):(t=(n.x+n.base)/2,e=n.y),{x:t,y:e}},getArea:function(){var
t=this._view;return
t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var
t=this._view;return{x:t.x,y:t.y}}})},{25:25,26:26}],40:[function(t,e,n){"use
strict";e.exports={},e.exports.Arc=t(36),e.exports.Line=t(37),e.exports.Point=t(38),e.exports.Rectangle=t(39)},{36:36,37:37,38:38,39:39}],41:[function(t,e,n){"use
strict";var
i=t(42),n=e.exports={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,n,i,a,o){if(o){var
r=Math.min(o,i/2),l=Math.min(o,a/2);t.moveTo(e+r,n),t.lineTo(e+i-r,n),t.quadraticCurveTo(e+i,n,e+i,n+l),t.lineTo(e+i,n+a-l),t.quadraticCurveTo(e+i,n+a,e+i-r,n+a),t.lineTo(e+r,n+a),t.quadraticCurveTo(e,n+a,e,n+a-l),t.lineTo(e,n+l),t.quadraticCurveTo(e,n,e+r,n)}else
t.rect(e,n,i,a)},drawPoint:function(t,e,n,i,a){var
o,r,l,s,u,d;if("object"!=typeof e||"[object
HTMLImageElement]"!==(o=e.toString())&&"[object
HTMLCanvasElement]"!==o){if(!(isNaN(n)||n<=0)){switch(e){default:t.beginPath(),t.arc(i,a,n,0,2*Math.PI),t.closePath(),t.fill();break;case"triangle":t.beginPath(),u=(r=3*n/Math.sqrt(3))*Math.sqrt(3)/2,t.moveTo(i-r/2,a+u/3),t.lineTo(i+r/2,a+u/3),t.lineTo(i,a-2*u/3),t.closePath(),t.fill();break;case"rect":d=1/Math.SQRT2*n,t.beginPath(),t.fillRect(i-d,a-d,2*d,2*d),t.strokeRect(i-d,a-d,2*d,2*d);break;case"rectRounded":var
c=n/Math.SQRT2,h=i-c,f=a-c,g=Math.SQRT2*n;t.beginPath(),this.roundedRect(t,h,f,g,g,n/2),t.closePath(),t.fill();break;case"rectRot":d=1/Math.SQRT2*n,t.beginPath(),t.moveTo(i-d,a),t.lineTo(i,a+d),t.lineTo(i+d,a),t.lineTo(i,a-d),t.closePath(),t.fill();break;case"cross":t.beginPath(),t.moveTo(i,a+n),t.lineTo(i,a-n),t.moveTo(i-n,a),t.lineTo(i+n,a),t.closePath();break;case"crossRot":t.beginPath(),l=Math.cos(Math.PI/4)*n,s=Math.sin(Math.PI/4)*n,t.moveTo(i-l,a-s),t.lineTo(i+l,a+s),t.moveTo(i-l,a+s),t.lineTo(i+l,a-s),t.closePath();break;case"star":t.beginPath(),t.moveTo(i,a+n),t.lineTo(i,a-n),t.moveTo(i-n,a),t.lineTo(i+n,a),l=Math.cos(Math.PI/4)*n,s=Math.sin(Math.PI/4)*n,t.moveTo(i-l,a-s),t.lineTo(i+l,a+s),t.moveTo(i-l,a+s),t.lineTo(i+l,a-s),t.closePath();break;case"line":t.beginPath(),t.moveTo(i-n,a),t.lineTo(i+n,a),t.closePath();break;case"dash":t.beginPath(),t.moveTo(i,a),t.lineTo(i+n,a),t.closePath()}t.stroke()}}else
t.drawImage(e,i-e.width/2,a-e.height/2,e.width,e.height)},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,n,i){if(n.steppedLine)return"after"===n.steppedLine&&!i||"after"!==n.steppedLine&&i?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y),void
t.lineTo(n.x,n.y);n.tension?t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):t.lineTo(n.x,n.y)}};i.clear=n.clear,i.drawRoundedRectangle=function(t){t.beginPath(),n.roundedRect.apply(n,arguments),t.closePath()}},{42:42}],42:[function(t,e,n){"use
strict";var i={noop:function(){},uid:function(){var t=0;return
function(){return t++}}(),isNullOrUndef:function(t){return null===t||void
0===t},isArray:Array.isArray?Array.isArray:function(t){return"[object
Array]"===Object.prototype.toString.call(t)},isObject:function(t){return
null!==t&&"[object
Object]"===Object.prototype.toString.call(t)},valueOrDefault:function(t,e){return
void 0===t?e:t},valueAtIndexOrDefault:function(t,e,n){return
i.valueOrDefault(i.isArray(t)?t[e]:t,n)},callback:function(t,e,n){if(t&&"function"==typeof
t.call)return t.apply(n,e)},each:function(t,e,n,a){var
o,r,l;if(i.isArray(t))if(r=t.length,a)for(o=r-1;o>=0;o--)e.call(n,t[o],o);else
for(o=0;o<r;o++)e.call(n,t[o],o);else
if(i.isObject(t))for(r=(l=Object.keys(t)).length,o=0;o<r;o++)e.call(n,t[l[o]],l[o])},arrayEquals:function(t,e){var
n,a,o,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,a=t.length;n<a;++n)if(o=t[n],r=e[n],o
instanceof Array&&r instanceof
Array){if(!i.arrayEquals(o,r))return!1}else
if(o!==r)return!1;return!0},clone:function(t){if(i.isArray(t))return
t.map(i.clone);if(i.isObject(t)){for(var
e={},n=Object.keys(t),a=n.length,o=0;o<a;++o)e[n[o]]=i.clone(t[n[o]]);return
e}return t},_merger:function(t,e,n,a){var
o=e[t],r=n[t];i.isObject(o)&&i.isObject(r)?i.merge(o,r,a):e[t]=i.clone(r)},_mergerIf:function(t,e,n){var
a=e[t],o=n[t];i.isObject(a)&&i.isObject(o)?i.mergeIf(a,o):e.hasOwnProperty(t)||(e[t]=i.clone(o))},merge:function(t,e,n){var
a,o,r,l,s,u=i.isArray(e)?e:[e],d=u.length;if(!i.isObject(t))return
t;for(a=(n=n||{}).merger||i._merger,o=0;o<d;++o)if(e=u[o],i.isObject(e))for(s=0,l=(r=Object.keys(e)).length;s<l;++s)a(r[s],t,e,n);return
t},mergeIf:function(t,e){return
i.merge(t,e,{merger:i._mergerIf})}};e.exports=i,i.callCallback=i.callback,i.indexOf=function(t,e,n){return
Array.prototype.indexOf.call(t,e,n)},i.getValueOrDefault=i.valueOrDefault,i.getValueAtIndexOrDefault=i.valueAtIndexOrDefault},{}],43:[function(t,e,n){"use
strict";var i=t(42),a={linear:function(t){return
t},easeInQuad:function(t){return
t*t},easeOutQuad:function(t){return-t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return
t*t*t},easeOutCubic:function(t){return(t-=1)*t*t+1},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return
t*t*t*t},easeOutQuart:function(t){return-((t-=1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return
t*t*t*t*t},easeOutQuint:function(t){return(t-=1)*t*t*t*t+1},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return
1-Math.cos(t*(Math.PI/2))},easeOutSine:function(t){return
Math.sin(t*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t)-1)},easeInExpo:function(t){return
0===t?0:Math.pow(2,10*(t-1))},easeOutExpo:function(t){return
1===t?1:1-Math.pow(2,-10*t)},easeInOutExpo:function(t){return
0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(2-Math.pow(2,-10*--t))},easeInCirc:function(t){return
t>=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return
Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var
e=1.70158,n=0,i=1;return
0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n))},easeOutElastic:function(t){var
e=1.70158,n=0,i=1;return
0===t?0:1===t?1:(n||(n=.3),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var
e=1.70158,n=0,i=1;return
0===t?0:2==(t/=.5)?1:(n||(n=.45),i<1?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?i*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*-.5:i*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var
e=1.70158;return t*t*((e+1)*t-e)},easeOutBack:function(t){var
e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack:function(t){var
e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return
1-a.easeOutBounce(1-t)},easeOutBounce:function(t){return
t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return
t<.5?.5*a.easeInBounce(2*t):.5*a.easeOutBounce(2*t-1)+.5}};e.exports={effects:a},i.easingEffects=a},{42:42}],44:[function(t,e,n){"use
strict";var i=t(42);e.exports={toLineHeight:function(t,e){var
n=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!n||"normal"===n[1])return
1.2*e;switch(t=+n[2],n[3]){case"px":return
t;case"%":t/=100}return e*t},toPadding:function(t){var
e,n,a,o;return
i.isObject(t)?(e=+t.top||0,n=+t.right||0,a=+t.bottom||0,o=+t.left||0):e=n=a=o=+t||0,{top:e,right:n,bottom:a,left:o,height:e+a,width:o+n}},resolve:function(t,e,n){var
a,o,r;for(a=0,o=t.length;a<o;++a)if(void 0!==(r=t[a])&&(void
0!==e&&"function"==typeof r&&(r=r(e)),void
0!==n&&i.isArray(r)&&(r=r[n]),void 0!==r))return
r}}},{42:42}],45:[function(t,e,n){"use
strict";e.exports=t(42),e.exports.easing=t(43),e.exports.canvas=t(41),e.exports.options=t(44)},{41:41,42:42,43:43,44:44}],46:[function(t,e,n){e.exports={acquireContext:function(t){return
t&&t.canvas&&(t=t.canvas),t&&t.getContext("2d")||null}}},{}],47:[function(t,e,n){"use
strict";function i(t,e){var
n=v.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return
i?Number(i[1]):void 0}function a(t,e){var
n=t.style,a=t.getAttribute("height"),o=t.getAttribute("width");if(t[m]={initial:{height:a,width:o,style:{display:n.display,height:n.height,width:n.width}}},n.display=n.display||"block",null===o||""===o){var
r=i(t,"width");void
0!==r&&(t.width=r)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var
l=i(t,"height");void 0!==r&&(t.height=l)}return
t}function o(t,e,n){t.addEventListener(e,n,M)}function
r(t,e,n){t.removeEventListener(e,n,M)}function
l(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void
0!==n?n:null,y:void 0!==i?i:null}}function s(t,e){var
n=w[t.type]||t.type,i=v.getRelativePosition(t,e);return
l(n,e,i.x,i.y,t)}function u(t,e){var n=!1,i=[];return
function(){i=Array.prototype.slice.call(arguments),e=e||this,n||(n=!0,v.requestAnimFrame.call(window,function(){n=!1,t.apply(e,i)}))}}function
d(t){var
e=document.createElement("div"),n=b+"size-monitor",i="position:absolute;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1;";e.style.cssText=i,e.className=n,e.innerHTML='<div
class="'+n+'-expand"
style="'+i+'"><div
style="position:absolute;width:1000000px;height:1000000px;left:0;top:0"></div></div><div
class="'+n+'-shrink"
style="'+i+'"><div
style="position:absolute;width:200%;height:200%;left:0;
top:0"></div></div>';var
a=e.childNodes[0],r=e.childNodes[1];e._reset=function(){a.scrollLeft=1e6,a.scrollTop=1e6,r.scrollLeft=1e6,r.scrollTop=1e6};var
l=function(){e._reset(),t()};return
o(a,"scroll",l.bind(a,"expand")),o(r,"scroll",l.bind(r,"shrink")),e}function
c(t,e){var
n=(t[m]||(t[m]={})).renderProxy=function(t){t.animationName===y&&e()};v.each(k,function(e){o(t,e,n)}),t.classList.add(x)}function
h(t){var
e=t[m]||{},n=e.renderProxy;n&&(v.each(k,function(e){r(t,e,n)}),delete
e.renderProxy),t.classList.remove(x)}function f(t,e,n){var
i=t[m]||(t[m]={}),a=i.resizer=d(u(function(){if(i.resizer)return
e(l("resize",n))}));c(t,function(){if(i.resizer){var
e=t.parentNode;e&&e!==a.parentNode&&e.insertBefore(a,e.firstChild),a._reset()}})}function
g(t){var e=t[m]||{},n=e.resizer;delete
e.resizer,h(t),n&&n.parentNode&&n.parentNode.removeChild(n)}function
p(t,e){var
n=t._style||document.createElement("style");t._style||(t._style=n,e="/*
Chart.js
*/\n"+e,n.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(n)),n.appendChild(document.createTextNode(e))}var
v=t(45),m="$chartjs",b="chartjs-",x=b+"render-monitor",y=b+"render-animation",k=["animationstart","webkitAnimationStart"],w={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},M=!!function(){var
t=!1;try{var
e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("e",null,e)}catch(t){}return
t}()&&{passive:!0};e.exports={_enabled:"undefined"!=typeof
window&&"undefined"!=typeof
document,initialize:function(){var
t="from{opacity:0.99}to{opacity:1}";p(this,"@-webkit-keyframes
"+y+"{"+t+"}@keyframes
"+y+"{"+t+"}."+x+"{-webkit-animation:"+y+"
0.001s;animation:"+y+"
0.001s;}")},acquireContext:function(t,e){"string"==typeof
t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var
n=t&&t.getContext&&t.getContext("2d");return
n&&n.canvas===t?(a(t,e),n):null},releaseContext:function(t){var
e=t.canvas;if(e[m]){var
n=e[m].initial;["height","width"].forEach(function(t){var
i=n[t];v.isNullOrUndef(i)?e.removeAttribute(t):e.setAttribute(t,i)}),v.each(n.style||{},function(t,n){e.style[n]=t}),e.width=e.width,delete
e[m]}},addEventListener:function(t,e,n){var
i=t.canvas;if("resize"!==e){var
a=n[m]||(n[m]={});o(i,e,(a.proxies||(a.proxies={}))[t.id+"_"+e]=function(e){n(s(e,t))})}else
f(i,n,t)},removeEventListener:function(t,e,n){var
i=t.canvas;if("resize"!==e){var
a=((n[m]||{}).proxies||{})[t.id+"_"+e];a&&r(i,e,a)}else
g(i)}},v.addEvent=o,v.removeEvent=r},{45:45}],48:[function(t,e,n){"use
strict";var
i=t(45),a=t(46),o=t(47),r=o._enabled?o:a;e.exports=i.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},r)},{45:45,46:46,47:47}],49:[function(t,e,n){"use
strict";var
i=t(25),a=t(40),o=t(45);i._set("global",{plugins:{filler:{propagate:!0}}}),e.exports=function(){function
t(t,e,n){var i,a=t._model||{},o=a.fill;if(void
0===o&&(o=!!a.backgroundColor),!1===o||null===o)return!1;if(!0===o)return"origin";if(i=parseFloat(o,10),isFinite(i)&&Math.floor(i)===i)return"-"!==o[0]&&"+"!==o[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return
o;default:return!1}}function e(t){var
e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return
null;if("start"===a?o=void
0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?o=void
0===n.scaleTop?i.top:n.scaleTop:void
0!==n.scaleZero?o=n.scaleZero:i.getBasePosition?o=i.getBasePosition():i.getBasePixel&&(o=i.getBasePixel()),void
0!==o&&null!==o){if(void 0!==o.x&&void 0!==o.y)return
o;if("number"==typeof o&&isFinite(o))return
e=i.isHorizontal(),{x:e?o:null,y:e?null:o}}return null}function
n(t,e,n){var i,a=t[e].fill,o=[e];if(!n)return
a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return
a;if(!(i=t[a]))return!1;if(i.visible)return
a;o.push(a),a=i.fill}return!1}function r(t){var
e=t.fill,n="dataset";return!1===e?null:(isFinite(e)||(n="boundary"),d[n](t))}function
l(t){return t&&!t.skip}function s(t,e,n,i,a){var
r;if(i&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r<i;++r)o.canvas.lineTo(t,e[r-1],e[r]);for(t.lineTo(n[a-1].x,n[a-1].y),r=a-1;r>0;--r)o.canvas.lineTo(t,n[r],n[r-1],!0)}}function
u(t,e,n,i,a,o){var
r,u,d,c,h,f,g,p=e.length,v=i.spanGaps,m=[],b=[],x=0,y=0;for(t.beginPath(),r=0,u=p+!!o;r<u;++r)h=n(c=e[d=r%p]._view,d,i),f=l(c),g=l(h),f&&g?(x=m.push(c),y=b.push(h)):x&&y&&(v?(f&&m.push(c),g&&b.push(h)):(s(t,m,b,x,y),x=y=0,m=[],b=[]));s(t,m,b,x,y),t.closePath(),t.fillStyle=a,t.fill()}var
d={dataset:function(t){var
e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e)&&i.dataset._children||[],o=a.length||0;return
o?function(t,e){return
e<o&&a[e]._view||null}:null},boundary:function(t){var
e=t.boundary,n=e?e.x:null,i=e?e.y:null;return
function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};return{id:"filler",afterDatasetsUpdate:function(i,o){var
l,s,u,d,c=(i.data.datasets||[]).length,h=o.propagate,f=[];for(s=0;s<c;++s)d=null,(u=(l=i.getDatasetMeta(s)).dataset)&&u._model&&u
instanceof
a.Line&&(d={visible:i.isDatasetVisible(s),fill:t(u,s,c),chart:i,el:u}),l.$filler=d,f.push(d);for(s=0;s<c;++s)(d=f[s])&&(d.fill=n(f,s,h),d.boundary=e(d),d.mapper=r(d))},beforeDatasetDraw:function(t,e){var
n=e.meta.$filler;if(n){var
a=t.ctx,r=n.el,l=r._view,s=r._children||[],d=n.mapper,c=l.backgroundColor||i.global.defaultColor;d&&c&&s.length&&(o.canvas.clipArea(a,t.chartArea),u(a,s,d,l,c,r._loop),o.canvas.unclipArea(a))}}}}},{25:25,40:40,45:45}],50:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{legend:{display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var
n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var
e=t.data;return
o.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:o.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},legendCallback:function(t){var
e=[];e.push('<ul
class="'+t.id+'-legend">');for(var
n=0;n<t.data.datasets.length;n++)e.push('<li><span
style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return
e.push("</ul>"),e.join("")}}),e.exports=function(t){function
e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var
i=new
t.Legend({ctx:e.ctx,options:n,chart:e});r.configure(e,i,n),r.addBox(e,i),e.legend=i}var
r=t.layoutService,l=o.noop;return
t.Legend=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:l,update:function(t,e,n){var
i=this;return
i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:l,beforeSetDimensions:l,setDimensions:function(){var
t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:l,beforeBuildLabels:l,buildLabels:function(){var
t=this,e=t.options.labels||{},n=o.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(n=n.filter(function(n){return
e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:l,beforeFit:l,fit:function(){var
t=this,n=t.options,a=n.labels,r=n.display,l=t.ctx,s=i.global,u=o.valueOrDefault,d=u(a.fontSize,s.defaultFontSize),c=u(a.fontStyle,s.defaultFontStyle),h=u(a.fontFamily,s.defaultFontFamily),f=o.fontString(d,c,h),g=t.legendHitBoxes=[],p=t.minSize,v=t.isHorizontal();if(v?(p.width=t.maxWidth,p.height=r?10:0):(p.width=r?10:0,p.height=t.maxHeight),r)if(l.font=f,v){var
m=t.lineWidths=[0],b=t.legendItems.length?d+a.padding:0;l.textAlign="left",l.textBaseline="top",o.each(t.legendItems,function(n,i){var
o=e(a,d)+d/2+l.measureText(n.text).width;m[m.length-1]+o+a.padding>=t.width&&(b+=d+a.padding,m[m.length]=t.left),g[i]={left:0,top:0,width:o,height:d},m[m.length-1]+=o+a.padding}),p.height+=b}else{var
x=a.padding,y=t.columnWidths=[],k=a.padding,w=0,M=0,S=d+x;o.each(t.legendItems,function(t,n){var
i=e(a,d)+d/2+l.measureText(t.text).width;M+S>p.height&&(k+=w+a.padding,y.push(w),w=0,M=0),w=Math.max(w,i),M+=S,g[n]={left:0,top:0,width:i,height:d}}),k+=w,y.push(w),p.width+=k}t.width=p.width,t.height=p.height},afterFit:l,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var
t=this,n=t.options,a=n.labels,r=i.global,l=r.elements.line,s=t.width,u=t.lineWidths;if(n.display){var
d,c=t.ctx,h=o.valueOrDefault,f=h(a.fontColor,r.defaultFontColor),g=h(a.fontSize,r.defaultFontSize),p=h(a.fontStyle,r.defaultFontStyle),v=h(a.fontFamily,r.defaultFontFamily),m=o.fontString(g,p,v);c.textAlign="left",c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=m;var
b=e(a,g),x=t.legendHitBoxes,y=function(t,e,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,r.defaultColor),c.lineCap=h(i.lineCap,l.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,l.borderDashOffset),c.lineJoin=h(i.lineJoin,l.borderJoinStyle),c.lineWidth=h(i.lineWidth,l.borderWidth),c.strokeStyle=h(i.strokeStyle,r.defaultColor);var
a=0===h(i.lineWidth,l.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,l.borderDash)),n.labels&&n.labels.usePointStyle){var
s=g*Math.SQRT2/2,u=s/Math.SQRT2,d=t+u,f=e+u;o.canvas.drawPoint(c,i.pointStyle,s,d,f)}else
a||c.strokeRect(t,e,b,g),c.fillRect(t,e,b,g);c.restore()}},k=function(t,e,n,i){var
a=g/2,o=b+a+t,r=e+a;c.fillText(n.text,o,r),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(o,r),c.lineTo(o+i,r),c.stroke())},w=t.isHorizontal();d=w?{x:t.left+(s-u[0])/2,y:t.top+a.padding,line:0}:{x:t.left+a.padding,y:t.top+a.padding,line:0};var
M=g+a.padding;o.each(t.legendItems,function(e,n){var
i=c.measureText(e.text).width,o=b+g/2+i,r=d.x,l=d.y;w?r+o>=s&&(l=d.y+=M,d.line++,r=d.x=t.left+(s-u[d.line])/2):l+M>t.bottom&&(r=d.x=r+t.columnWidths[d.line]+a.padding,l=d.y=t.top+a.padding,d.line++),y(r,l,e),x[n].left=r,x[n].top=l,k(r,l,e,i),w?d.x+=o+a.padding:d.y+=M})}},handleEvent:function(t){var
e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var
o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var
l=e.legendHitBoxes,s=0;s<l.length;++s){var
u=l[s];if(o>=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[s]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[s]),a=!0;break}}}return
a}}),{id:"legend",beforeInit:function(t){var
e=t.options.legend;e&&n(t,e)},beforeUpdate:function(t){var
e=t.options.legend,a=t.legend;e?(o.mergeIf(e,i.global.legend),a?(r.configure(t,a,e),a.options=e):n(t,e)):a&&(r.removeBox(t,a),delete
t.legend)},afterEvent:function(t,e){var
n=t.legend;n&&n.handleEvent(e)}}}},{25:25,26:26,45:45}],51:[function(t,e,n){"use
strict";var
i=t(25),a=t(26),o=t(45);i._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,lineHeight:1.2,padding:10,position:"top",text:"",weight:2e3}}),e.exports=function(t){function
e(e,i){var a=new
t.Title({ctx:e.ctx,options:i,chart:e});n.configure(e,a,i),n.addBox(e,a),e.titleBlock=a}var
n=t.layoutService,r=o.noop;return
t.Title=a.extend({initialize:function(t){var
e=this;o.extend(e,t),e.legendHitBoxes=[]},beforeUpdate:r,update:function(t,e,n){var
i=this;return
i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:r,beforeSetDimensions:r,setDimensions:function(){var
t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:r,beforeBuildLabels:r,buildLabels:r,afterBuildLabels:r,beforeFit:r,fit:function(){var
t=this,e=o.valueOrDefault,n=t.options,a=n.display,r=e(n.fontSize,i.global.defaultFontSize),l=t.minSize,s=o.isArray(n.text)?n.text.length:1,u=o.options.toLineHeight(n.lineHeight,r),d=a?s*u+2*n.padding:0;t.isHorizontal()?(l.width=t.maxWidth,l.height=d):(l.width=d,l.height=t.maxHeight),t.width=l.width,t.height=l.height},afterFit:r,isHorizontal:function(){var
t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var
t=this,e=t.ctx,n=o.valueOrDefault,a=t.options,r=i.global;if(a.display){var
l,s,u,d=n(a.fontSize,r.defaultFontSize),c=n(a.fontStyle,r.defaultFontStyle),h=n(a.fontFamily,r.defaultFontFamily),f=o.fontString(d,c,h),g=o.options.toLineHeight(a.lineHeight,d),p=g/2+a.padding,v=0,m=t.top,b=t.left,x=t.bottom,y=t.right;e.fillStyle=n(a.fontColor,r.defaultFontColor),e.font=f,t.isHorizontal()?(s=b+(y-b)/2,u=m+p,l=y-b):(s="left"===a.position?b+p:y-p,u=m+(x-m)/2,l=x-m,v=Math.PI*("left"===a.position?-.5:.5)),e.save(),e.translate(s,u),e.rotate(v),e.textAlign="center",e.textBaseline="middle";var
k=a.text;if(o.isArray(k))for(var
w=0,M=0;M<k.length;++M)e.fillText(k[M],0,w,l),w+=g;else
e.fillText(k,0,0,l);e.restore()}}}),{id:"title",beforeInit:function(t){var
n=t.options.title;n&&e(t,n)},beforeUpdate:function(a){var
r=a.options.title,l=a.titleBlock;r?(o.mergeIf(r,i.global.title),l?(n.configure(a,l,r),l.options=r):e(a,r)):l&&(t.layoutService.removeBox(a,l),delete
a.titleBlock)}}}},{25:25,26:26,45:45}],52:[function(t,e,n){"use
strict";e.exports=function(t){var
e={position:"bottom"},n=t.Scale.extend({getLabels:function(){var
t=this.chart.data;return
this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var
t=this,e=t.getLabels();t.minIndex=0,t.maxIndex=e.length-1;var n;void
0!==t.options.ticks.min&&(n=e.indexOf(t.options.ticks.min),t.minIndex=-1!==n?n:t.minIndex),void
0!==t.options.ticks.max&&(n=e.indexOf(t.options.ticks.max),t.maxIndex=-1!==n?n:t.maxIndex),t.min=e[t.minIndex],t.max=e[t.maxIndex]},buildTicks:function(){var
t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var
n=this,i=n.chart.data,a=n.isHorizontal();return
i.yLabels&&!a?n.getRightValue(i.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e){var
n,i=this,a=i.options.offset,o=Math.max(i.maxIndex+1-i.minIndex-(a?0:1),1);if(void
0!==t&&null!==t&&(n=i.isHorizontal()?t.x:t.y),void
0!==n||void 0!==t&&isNaN(e)){var r=i.getLabels();t=n||t;var
l=r.indexOf(t);e=-1!==l?l:e}if(i.isHorizontal()){var
s=i.width/o,u=s*(e-i.minIndex);return
a&&(u+=s/2),i.left+Math.round(u)}var
d=i.height/o,c=d*(e-i.minIndex);return
a&&(c+=d/2),i.top+Math.round(c)},getPixelForTick:function(t){return
this.getPixelForValue(this.ticks[t],t+this.minIndex,null)},getValueForPixel:function(t){var
e=this,n=e.options.offset,i=Math.max(e._ticks.length-(n?0:1),1),a=e.isHorizontal(),o=(a?e.width:e.height)/i;return
t-=a?e.left:e.top,n&&(t-=o/2),(t<=0?0:Math.round(t/o))+e.minIndex},getBasePixel:function(){return
this.bottom}});t.scaleService.registerScaleType("category",n,e)}},{}],53:[function(t,e,n){"use
strict";var i=t(25),a=t(45),o=t(34);e.exports=function(t){var
e={position:"left",ticks:{callback:o.formatters.linear}},n=t.LinearScaleBase.extend({determineDataLimits:function(){function
t(t){return r?t.xAxisID===e.id:t.yAxisID===e.id}var
e=this,n=e.options,i=e.chart,o=i.data.datasets,r=e.isHorizontal();e.min=null,e.max=null;var
l=n.stacked;if(void 0===l&&a.each(o,function(e,n){if(!l){var
a=i.getDatasetMeta(n);i.isDatasetVisible(n)&&t(a)&&void
0!==a.stack&&(l=!0)}}),n.stacked||l){var
s={};a.each(o,function(o,r){var l=i.getDatasetMeta(r),u=[l.type,void
0===n.stacked&&void
0===l.stack?r:"",l.stack].join(".");void
0===s[u]&&(s[u]={positiveValues:[],negativeValues:[]});var
d=s[u].positiveValues,c=s[u].negativeValues;i.isDatasetVisible(r)&&t(l)&&a.each(o.data,function(t,i){var
a=+e.getRightValue(t);isNaN(a)||l.data[i].hidden||(d[i]=d[i]||0,c[i]=c[i]||0,n.relativePoints?d[i]=100:a<0?c[i]+=a:d[i]+=a)})}),a.each(s,function(t){var
n=t.positiveValues.concat(t.negativeValues),i=a.min(n),o=a.max(n);e.min=null===e.min?i:Math.min(e.min,i),e.max=null===e.max?o:Math.max(e.max,o)})}else
a.each(o,function(n,o){var
r=i.getDatasetMeta(o);i.isDatasetVisible(o)&&t(r)&&a.each(n.data,function(t,n){var
i=+e.getRightValue(t);isNaN(i)||r.data[n].hidden||(null===e.min?e.min=i:i<e.min&&(e.min=i),null===e.max?e.max=i:i>e.max&&(e.max=i))})});e.min=isFinite(e.min)&&!isNaN(e.min)?e.min:0,e.max=isFinite(e.max)&&!isNaN(e.max)?e.max:1,this.handleTickRangeOptions()},getTickLimit:function(){var
t,e=this,n=e.options.ticks;if(e.isHorizontal())t=Math.min(n.maxTicksLimit?n.maxTicksLimit:11,Math.ceil(e.width/50));else{var
o=a.valueOrDefault(n.fontSize,i.global.defaultFontSize);t=Math.min(n.maxTicksLimit?n.maxTicksLimit:11,Math.ceil(e.height/(2*o)))}return
t},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var
e,n=this,i=n.start,a=+n.getRightValue(t),o=n.end-i;return
n.isHorizontal()?(e=n.left+n.width/o*(a-i),Math.round(e)):(e=n.bottom-n.height/o*(a-i),Math.round(e))},getValueForPixel:function(t){var
e=this,n=e.isHorizontal(),i=n?e.width:e.height,a=(n?t-e.left:e.bottom-t)/i;return
e.start+(e.end-e.start)*a},getPixelForTick:function(t){return
this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",n,e)}},{25:25,34:34,45:45}],54:[function(t,e,n){"use
strict";var i=t(45),a=t(34);e.exports=function(t){var
e=i.noop;t.LinearScaleBase=t.Scale.extend({getRightValue:function(e){return"string"==typeof
e?+e:t.Scale.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var
t=this,e=t.options.ticks;if(e.beginAtZero){var
n=i.sign(t.min),a=i.sign(t.max);n<0&&a<0?t.max=0:n>0&&a>0&&(t.min=0)}var
o=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void
0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void
0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void
0!==e.max?t.max=e.max:void
0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),o!==r&&t.min>=t.max&&(o?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:e,handleDirectionalChanges:e,buildTicks:function(){var
t=this,e=t.options.ticks,n=t.getTickLimit(),o={maxTicks:n=Math.max(2,n),min:e.min,max:e.max,stepSize:i.valueOrDefault(e.fixedStepSize,e.stepSize)},r=t.ticks=a.generators.linear(o,t);t.handleDirectionalChanges(),t.max=i.max(r),t.min=i.min(r),e.reverse?(r.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){var
e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(e)}})}},{34:34,45:45}],55:[function(t,e,n){"use
strict";var i=t(45),a=t(34);e.exports=function(t){var
e={position:"left",ticks:{callback:a.formatters.logarithmic}},n=t.Scale.extend({determineDataLimits:function(){function
t(t){return s?t.xAxisID===e.id:t.yAxisID===e.id}var
e=this,n=e.options,a=n.ticks,o=e.chart,r=o.data.datasets,l=i.valueOrDefault,s=e.isHorizontal();e.min=null,e.max=null,e.minNotZero=null;var
u=n.stacked;if(void 0===u&&i.each(r,function(e,n){if(!u){var
i=o.getDatasetMeta(n);o.isDatasetVisible(n)&&t(i)&&void
0!==i.stack&&(u=!0)}}),n.stacked||u){var
d={};i.each(r,function(a,r){var l=o.getDatasetMeta(r),s=[l.type,void
0===n.stacked&&void
0===l.stack?r:"",l.stack].join(".");o.isDatasetVisible(r)&&t(l)&&(void
0===d[s]&&(d[s]=[]),i.each(a.data,function(t,i){var
a=d[s],o=+e.getRightValue(t);isNaN(o)||l.data[i].hidden||(a[i]=a[i]||0,n.relativePoints?a[i]=100:a[i]+=o)}))}),i.each(d,function(t){var
n=i.min(t),a=i.max(t);e.min=null===e.min?n:Math.min(e.min,n),e.max=null===e.max?a:Math.max(e.max,a)})}else
i.each(r,function(n,a){var
r=o.getDatasetMeta(a);o.isDatasetVisible(a)&&t(r)&&i.each(n.data,function(t,n){var
i=+e.getRightValue(t);isNaN(i)||r.data[n].hidden||(null===e.min?e.min=i:i<e.min&&(e.min=i),null===e.max?e.max=i:i>e.max&&(e.max=i),0!==i&&(null===e.minNotZero||i<e.minNotZero)&&(e.minNotZero=i))})});e.min=l(a.min,e.min),e.max=l(a.max,e.max),e.min===e.max&&(0!==e.min&&null!==e.min?(e.min=Math.pow(10,Math.floor(i.log10(e.min))-1),e.max=Math.pow(10,Math.floor(i.log10(e.max))+1)):(e.min=1,e.max=10))},buildTicks:function(){var
t=this,e=t.options.ticks,n={min:e.min,max:e.max},o=t.ticks=a.generators.logarithmic(n,t);t.isHorizontal()||o.reverse(),t.max=i.max(o),t.min=i.min(o),e.reverse?(o.reverse(),t.start=t.max,t.end=t.min):(t.start=t.min,t.end=t.max)},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return
this.getPixelForValue(this.tickValues[t])},getPixelForValue:function(t){var
e,n,a,o=this,r=o.start,l=+o.getRightValue(t),s=o.options.ticks;return
o.isHorizontal()?(a=i.log10(o.end)-i.log10(r),0===l?n=o.left:(e=o.width,n=o.left+e/a*(i.log10(l)-i.log10(r)))):(e=o.height,0!==r||s.reverse?0===o.end&&s.reverse?(a=i.log10(o.start)-i.log10(o.minNotZero),n=l===o.end?o.top:l===o.minNotZero?o.top+.02*e:o.top+.02*e+.98*e/a*(i.log10(l)-i.log10(o.minNotZero))):0===l?n=s.reverse?o.top:o.bottom:(a=i.log10(o.end)-i.log10(r),e=o.height,n=o.bottom-e/a*(i.log10(l)-i.log10(r))):(a=i.log10(o.end)-i.log10(o.minNotZero),n=l===r?o.bottom:l===o.minNotZero?o.bottom-.02*e:o.bottom-.02*e-.98*e/a*(i.log10(l)-i.log10(o.minNotZero)))),n},getValueForPixel:function(t){var
e,n,a=this,o=i.log10(a.end)-i.log10(a.start);return
a.isHorizontal()?(n=a.width,e=a.start*Math.pow(10,(t-a.left)*o/n)):(n=a.height,e=Math.pow(10,(a.bottom-t)*o/n)/a.start),e}});t.scaleService.registerScaleType("logarithmic",n,e)}},{34:34,45:45}],56:[function(t,e,n){"use
strict";var i=t(25),a=t(45),o=t(34);e.exports=function(t){function
e(t){var e=t.options;return
e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function
n(t){var
e=t.options.pointLabels,n=a.valueOrDefault(e.fontSize,v.defaultFontSize),i=a.valueOrDefault(e.fontStyle,v.defaultFontStyle),o=a.valueOrDefault(e.fontFamily,v.defaultFontFamily);return{size:n,style:i,family:o,font:a.fontString(n,i,o)}}function
r(t,e,n){return
a.isArray(n)?{w:a.longestText(t,t.font,n),h:n.length*e+1.5*(n.length-1)*e}:{w:t.measureText(n).width,h:e}}function
l(t,e,n,i,a){return
t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n-5,end:e}:{start:e,end:e+n+5}}function
s(t){var
i,o,s,u=n(t),d=Math.min(t.height/2,t.width/2),c={r:t.width,l:0,t:t.height,b:0},h={};t.ctx.font=u.font,t._pointLabelSizes=[];var
f=e(t);for(i=0;i<f;i++){s=t.getPointPosition(i,d),o=r(t.ctx,u.size,t.pointLabels[i]||""),t._pointLabelSizes[i]=o;var
g=t.getIndexAngle(i),p=a.toDegrees(g)%360,v=l(p,s.x,o.w,0,180),m=l(p,s.y,o.h,90,270);v.start<c.l&&(c.l=v.start,h.l=g),v.end>c.r&&(c.r=v.end,h.r=g),m.start<c.t&&(c.t=m.start,h.t=g),m.end>c.b&&(c.b=m.end,h.b=g)}t.setReductions(d,c,h)}function
u(t){var
e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0)}function
d(t){return
0===t||180===t?"center":t<180?"left":"right"}function
c(t,e,n,i){if(a.isArray(e))for(var
o=n.y,r=1.5*i,l=0;l<e.length;++l)t.fillText(e[l],n.x,o),o+=r;else
t.fillText(e,n.x,n.y)}function
h(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function
f(t){var
i=t.ctx,o=a.valueOrDefault,r=t.options,l=r.angleLines,s=r.pointLabels;i.lineWidth=l.lineWidth,i.strokeStyle=l.color;var
u=t.getDistanceFromCenterForValue(r.ticks.reverse?t.min:t.max),f=n(t);i.textBaseline="top";for(var
g=e(t)-1;g>=0;g--){if(l.display){var
p=t.getPointPosition(g,u);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(p.x,p.y),i.stroke(),i.closePath()}if(s.display){var
m=t.getPointPosition(g,u+5),b=o(s.fontColor,v.defaultFontColor);i.font=f.font,i.fillStyle=b;var
x=t.getIndexAngle(g),y=a.toDegrees(x);i.textAlign=d(y),h(y,t._pointLabelSizes[g],m),c(i,t.pointLabels[g]||"",m,f.size)}}}function
g(t,n,i,o){var
r=t.ctx;if(r.strokeStyle=a.valueAtIndexOrDefault(n.color,o-1),r.lineWidth=a.valueAtIndexOrDefault(n.lineWidth,o-1),t.options.gridLines.circular)r.beginPath(),r.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),r.closePath(),r.stroke();else{var
l=e(t);if(0===l)return;r.beginPath();var
s=t.getPointPosition(0,i);r.moveTo(s.x,s.y);for(var
u=1;u<l;u++)s=t.getPointPosition(u,i),r.lineTo(s.x,s.y);r.closePath(),r.stroke()}}function
p(t){return a.isNumber(t)?t:0}var
v=i.global,m={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0,
0, 0,
0.1)",lineWidth:1},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:o.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return
t}}},b=t.LinearScaleBase.extend({setDimensions:function(){var
t=this,e=t.options,n=e.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var
i=a.min([t.height,t.width]),o=a.valueOrDefault(n.fontSize,v.defaultFontSize);t.drawingArea=e.display?i/2-(o/2+n.backdropPaddingY):i/2},determineDataLimits:function(){var
t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;a.each(e.data.datasets,function(o,r){if(e.isDatasetVisible(r)){var
l=e.getDatasetMeta(r);a.each(o.data,function(e,a){var
o=+t.getRightValue(e);isNaN(o)||l.data[a].hidden||(n=Math.min(o,n),i=Math.max(o,i))})}}),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},getTickLimit:function(){var
t=this.options.ticks,e=a.valueOrDefault(t.fontSize,v.defaultFontSize);return
Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*e)))},convertTicksToLabels:function(){var
e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){this.options.pointLabels.display?s(this):u(this)},setReductions:function(t,e,n){var
i=this,a=e.l/Math.sin(n.l),o=Math.max(e.r-i.width,0)/Math.sin(n.r),r=-e.t/Math.cos(n.t),l=-Math.max(e.b-i.height,0)/Math.cos(n.b);a=p(a),o=p(o),r=p(r),l=p(l),i.drawingArea=Math.min(Math.round(t-(a+o)/2),Math.round(t-(r+l)/2)),i.setCenterPoint(a,o,r,l)},setCenterPoint:function(t,e,n,i){var
a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,l=n+a.drawingArea,s=a.height-i-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((l+s)/2+a.top)},getIndexAngle:function(t){return
t*(2*Math.PI/e(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var
e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return
e.options.ticks.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var
n=this,i=n.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+n.xCenter,y:Math.round(Math.sin(i)*e)+n.yCenter}},getPointPositionForValue:function(t,e){return
this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var
t=this,e=t.min,n=t.max;return
t.getPointPositionForValue(0,t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},draw:function(){var
t=this,e=t.options,n=e.gridLines,i=e.ticks,o=a.valueOrDefault;if(e.display){var
r=t.ctx,l=this.getIndexAngle(0),s=o(i.fontSize,v.defaultFontSize),u=o(i.fontStyle,v.defaultFontStyle),d=o(i.fontFamily,v.defaultFontFamily),c=a.fontString(s,u,d);a.each(t.ticks,function(e,a){if(a>0||i.reverse){var
u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[a]);if(n.display&&0!==a&&g(t,n,u,a),i.display){var
d=o(i.fontColor,v.defaultFontColor);if(r.font=c,r.save(),r.translate(t.xCenter,t.yCenter),r.rotate(l),i.showLabelBackdrop){var
h=r.measureText(e).width;r.fillStyle=i.backdropColor,r.fillRect(-h/2-i.backdropPaddingX,-u-s/2-i.backdropPaddingY,h+2*i.backdropPaddingX,s+2*i.backdropPaddingY)}r.textAlign="center",r.textBaseline="middle",r.fillStyle=d,r.fillText(e,0,-u),r.restore()}}}),(e.angleLines.display||e.pointLabels.display)&&f(t)}}});t.scaleService.registerScaleType("radialLinear",b,m)}},{25:25,34:34,45:45}],57:[function(t,e,n){"use
strict";function i(t,e){return t-e}function a(t){var
e,n,i,a={},o=[];for(e=0,n=t.length;e<n;++e)a[i=t[e]]||(a[i]=!0,o.push(i));return
o}function
o(t,e,n,i){if("linear"===i||!t.length)return[{time:e,pos:0},{time:n,pos:1}];var
a,o,r,l,s,u=[],d=[e];for(a=0,o=t.length;a<o;++a)(l=t[a])>e&&l<n&&d.push(l);for(d.push(n),a=0,o=d.length;a<o;++a)s=d[a+1],r=d[a-1],l=d[a],void
0!==r&&void
0!==s&&Math.round((s+r)/2)===l||u.push({time:l,pos:a/(o-1)});return
u}function r(t,e,n){for(var
i,a,o,r=0,l=t.length-1;r>=0&&r<=l;){if(i=r+l>>1,a=t[i-1]||null,o=t[i],!a)return{lo:null,hi:o};if(o[e]<n)r=i+1;else{if(!(a[e]>n))return{lo:a,hi:o};l=i-1}}return{lo:o,hi:null}}function
l(t,e,n,i){var
a=r(t,e,n),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],l=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=l[e]-o[e],u=s?(n-o[e])/s:0,d=(l[i]-o[i])*u;return
o[i]+d}function s(t,e){var
n=e.parser,i=e.parser||e.format;return"function"==typeof
n?n(t):"string"==typeof t&&"string"==typeof
i?v(t,i):(t instanceof
v||(t=v(t)),t.isValid()?t:"function"==typeof i?i(t):t)}function
u(t,e){if(b.isNullOrUndef(t))return null;var
n=e.options.time,i=s(e.getRightValue(t),n);return
i.isValid()?(n.round&&i.startOf(n.round),i.valueOf()):null}function
d(t,e,n,i){var a,o,r,l=e-t,s=k[n],u=s.size,d=s.steps;if(!d)return
Math.ceil(l/((i||1)*u));for(a=0,o=d.length;a<o&&(r=d[a],!(Math.ceil(l/(u*r))<=i));++a);return
r}function c(t,e,n,i){var
a,o,r,l=w.length;for(a=w.indexOf(t);a<l-1;++a)if(o=k[w[a]],r=o.steps?o.steps[o.steps.length-1]:y,Math.ceil((n-e)/(r*o.size))<=i)return
w[a];return w[l-1]}function h(t){for(var
e=w.indexOf(t)+1,n=w.length;e<n;++e)if(k[w[e]].major)return
w[e]}function f(t,e,n,i,a,o){var
r,l=o.time,s=b.valueOrDefault(l.stepSize,l.unitStepSize),u="week"===n&&l.isoWeekday,c=o.ticks.major.enabled,h=k[n],f=v(t),g=v(e),p=[];for(s||(s=d(t,e,n,a)),u&&(f=f.isoWeekday(u),g=g.isoWeekday(u)),f=f.startOf(u?"day":n),(g=g.startOf(u?"day":n))<e&&g.add(1,n),r=v(f),c&&i&&!u&&!l.round&&(r.startOf(i),r.add(~~((f-r)/(h.size*s))*s,n));r<g;r.add(s,n))p.push(+r);return
p.push(+r),p}function g(t,e,n,i,a){var o,r,s=0,u=0;return
a.offset&&e.length&&(a.time.min||(o=e.length>1?e[1]:i,r=e[0],s=(l(t,"time",o,"pos")-l(t,"time",r,"pos"))/2),a.time.max||(o=e[e.length-1],r=e.length>1?e[e.length-2]:n,u=(l(t,"time",o,"pos")-l(t,"time",r,"pos"))/2)),{left:s,right:u}}function
p(t,e){var
n,i,a,o,r=[];for(n=0,i=t.length;n<i;++n)a=t[n],o=!!e&&a===+v(a).startOf(e),r.push({value:a,major:o});return
r}var v=t(1);v="function"==typeof v?v:window.moment;var
m=t(25),b=t(45),x=Number.MIN_SAFE_INTEGER||-9007199254740991,y=Number.MAX_SAFE_INTEGER||9007199254740991,k={millisecond:{major:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{major:!0,size:1e3,steps:[1,2,5,10,30]},minute:{major:!0,size:6e4,steps:[1,2,5,10,30]},hour:{major:!0,size:36e5,steps:[1,2,3,6,12]},day:{major:!0,size:864e5,steps:[1,2,5]},week:{major:!1,size:6048e5,steps:[1,2,3,4]},month:{major:!0,size:2628e6,steps:[1,2,3]},quarter:{major:!1,size:7884e6,steps:[1,2,3,4]},year:{major:!0,size:3154e7}},w=Object.keys(k);e.exports=function(t){var
e={position:"bottom",distribution:"linear",bounds:"data",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS
a",second:"h:mm:ss a",minute:"h:mm
a",hour:"hA",day:"MMM
D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q -
YYYY",year:"YYYY"}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}},n=t.Scale.extend({initialize:function(){if(!v)throw
new Error("Chart.js - Moment.js could not be found! You must include
it before Chart.js to use the time scale. Download at
https://momentjs.com");this.mergeTicksOptions(),t.Scale.prototype.initialize.call(this)},update:function(){var
e=this,n=e.options;return
n.time&&n.time.format&&console.warn("options.time.format
is deprecated and replaced by
options.time.parser."),t.Scale.prototype.update.apply(e,arguments)},getRightValue:function(e){return
e&&void
0!==e.t&&(e=e.t),t.Scale.prototype.getRightValue.call(this,e)},determineDataLimits:function(){var
t,e,n,o,r,l,s=this,d=s.chart,c=s.options.time,h=u(c.min,s)||y,f=u(c.max,s)||x,g=[],p=[],m=[];for(t=0,n=d.data.labels.length;t<n;++t)m.push(u(d.data.labels[t],s));for(t=0,n=(d.data.datasets||[]).length;t<n;++t)if(d.isDatasetVisible(t))if(r=d.data.datasets[t].data,b.isObject(r[0]))for(p[t]=[],e=0,o=r.length;e<o;++e)l=u(r[e],s),g.push(l),p[t][e]=l;else
g.push.apply(g,m),p[t]=m.slice(0);else
p[t]=[];m.length&&(m=a(m).sort(i),h=Math.min(h,m[0]),f=Math.max(f,m[m.length-1])),g.length&&(g=a(g).sort(i),h=Math.min(h,g[0]),f=Math.max(f,g[g.length-1])),h=h===y?+v().startOf("day"):h,f=f===x?+v().endOf("day")+1:f,s.min=Math.min(h,f),s.max=Math.max(h+1,f),s._horizontal=s.isHorizontal(),s._table=[],s._timestamps={data:g,datasets:p,labels:m}},buildTicks:function(){var
t,e,n,i=this,a=i.min,r=i.max,l=i.options,s=l.time,d=s.displayFormats,v=i.getLabelCapacity(a),m=s.unit||c(s.minUnit,a,r,v),b=h(m),x=[],y=[];switch(l.ticks.source){case"data":x=i._timestamps.data;break;case"labels":x=i._timestamps.labels;break;case"auto":default:x=f(a,r,m,b,v,l)}for("ticks"===l.bounds&&x.length&&(a=x[0],r=x[x.length-1]),a=u(s.min,i)||a,r=u(s.max,i)||r,t=0,e=x.length;t<e;++t)(n=x[t])>=a&&n<=r&&y.push(n);return
i.min=a,i.max=r,i._unit=m,i._majorUnit=b,i._minorFormat=d[m],i._majorFormat=d[b],i._table=o(i._timestamps.data,a,r,l.distribution),i._offsets=g(i._table,y,a,r,l),p(y,b)},getLabelForIndex:function(t,e){var
n=this,i=n.chart.data,a=n.options.time,o=i.labels&&t<i.labels.length?i.labels[t]:"",r=i.datasets[e].data[t];return
b.isObject(r)&&(o=n.getRightValue(r)),a.tooltipFormat&&(o=s(o,a).format(a.tooltipFormat)),o},tickFormatFunction:function(t,e,n){var
i=this,a=i.options,o=t.valueOf(),r=i._majorUnit,l=i._majorFormat,s=t.clone().startOf(i._majorUnit).valueOf(),u=a.ticks.major,d=u.enabled&&r&&l&&o===s,c=t.format(d?l:i._minorFormat),h=d?u:a.ticks.minor,f=b.valueOrDefault(h.callback,h.userCallback);return
f?f(c,e,n):c},convertTicksToLabels:function(t){var
e,n,i=[];for(e=0,n=t.length;e<n;++e)i.push(this.tickFormatFunction(v(t[e].value),e,t));return
i},getPixelForOffset:function(t){var
e=this,n=e._horizontal?e.width:e.height,i=e._horizontal?e.left:e.top,a=l(e._table,"time",t,"pos");return
i+n*(e._offsets.left+a)/(e._offsets.left+1+e._offsets.right)},getPixelForValue:function(t,e,n){var
i=this,a=null;if(void 0!==e&&void
0!==n&&(a=i._timestamps.datasets[n][e]),null===a&&(a=u(t,i)),null!==a)return
i.getPixelForOffset(a)},getPixelForTick:function(t){var
e=this.getTicks();return
t>=0&&t<e.length?this.getPixelForOffset(e[t].value):null},getValueForPixel:function(t){var
e=this,n=e._horizontal?e.width:e.height,i=e._horizontal?e.left:e.top,a=(n?(t-i)/n:0)*(e._offsets.left+1+e._offsets.left)-e._offsets.right,o=l(e._table,"pos",a,"time");return
v(o)},getLabelWidth:function(t){var
e=this,n=e.options.ticks,i=e.ctx.measureText(t).width,a=b.toRadians(n.maxRotation),o=Math.cos(a),r=Math.sin(a);return
i*o+b.valueOrDefault(n.fontSize,m.global.defaultFontSize)*r},getLabelCapacity:function(t){var
e=this;e._minorFormat=e.options.time.displayFormats.millisecond;var
n=e.tickFormatFunction(v(t),0,[]),i=e.getLabelWidth(n),a=e.isHorizontal()?e.width:e.height;return
Math.floor(a/i)}});t.scaleService.registerScaleType("time",n,e)}},{1:1,25:25,45:45}]},{},[7])(7)});js/cookies.min.js000064400000005252151163010210007726
0ustar00(function(d,f){"use strict";var
h=function(d){if("object"!==typeof d.document)throw
Error("Cookies.js requires a `window` with a `document`
object");var b=function(a,e,c){return
1===arguments.length?b.get(a):b.set(a,e,c)};b._document=d.document;b._cacheKeyPrefix="cookey.";b._maxExpireDate=new
Date("Fri, 31 Dec 9999 23:59:59
UTC");b.defaults={path:"/",secure:!1};b.get=function(a){b._cachedDocumentCookie!==b._document.cookie&&b._renewCache();a=b._cache[b._cacheKeyPrefix+a];return
a===f?f:decodeURIComponent(a)};
b.set=function(a,e,c){c=b._getExtendedOptions(c);c.expires=b._getExpiresDate(e===f?-1:c.expires);b._document.cookie=b._generateCookieString(a,e,c);return
b};b.expire=function(a,e){return
b.set(a,f,e)};b._getExtendedOptions=function(a){return{path:a&&a.path||b.defaults.path,domain:a&&a.domain||b.defaults.domain,expires:a&&a.expires||b.defaults.expires,secure:a&&a.secure!==f?a.secure:b.defaults.secure}};b._isValidDate=function(a){return"[object
Date]"===Object.prototype.toString.call(a)&&!isNaN(a.getTime())};
b._getExpiresDate=function(a,e){e=e||new Date;"number"===typeof
a?a=Infinity===a?b._maxExpireDate:new
Date(e.getTime()+1E3*a):"string"===typeof a&&(a=new
Date(a));if(a&&!b._isValidDate(a))throw Error("`expires`
parameter cannot be converted to a valid Date instance");return
a};b._generateCookieString=function(a,b,c){a=a.replace(/[^#$&+\^`|]/g,encodeURIComponent);a=a.replace(/\(/g,"%28").replace(/\)/g,"%29");b=(b+"").replace(/[^!#$&-+\--:<-\[\]-~]/g,encodeURIComponent);c=c||{};a=a+"="+b+(c.path?";path="+
c.path:"");a+=c.domain?";domain="+c.domain:"";a+=c.expires?";expires="+c.expires.toUTCString():"";return
a+=c.secure?";secure":""};b._getCacheFromString=function(a){var
e={};a=a?a.split("; "):[];for(var c=0;c<a.length;c++){var
d=b._getKeyValuePairFromCookieString(a[c]);e[b._cacheKeyPrefix+d.key]===f&&(e[b._cacheKeyPrefix+d.key]=d.value)}return
e};b._getKeyValuePairFromCookieString=function(a){var
b=a.indexOf("="),b=0>b?a.length:b,c=a.substr(0,b),d;try{d=decodeURIComponent(c)}catch(k){console&&"function"===
typeof console.error&&console.error('Could not decode cookie
with key
"'+c+'"',k)}return{key:d,value:a.substr(b+1)}};b._renewCache=function(){b._cache=b._getCacheFromString(b._document.cookie);b._cachedDocumentCookie=b._document.cookie};b._areEnabled=function(){var
a="1"===b.set("cookies.js",1).get("cookies.js");b.expire("cookies.js");return
a};b.enabled=b._areEnabled();return
b},g=d&&"object"===typeof
d.document?h(d):h;"function"===typeof
define&&define.amd?define(function(){return
g}):"object"===
typeof exports?("object"===typeof
module&&"object"===typeof
module.exports&&(exports=module.exports=g),exports.Cookies=g):d.Cookies=g})("undefined"===typeof
window?this:window);js/mustache.min.js000064400000022470151163010210010104
0ustar00(function defineMustache(global,factory){if(typeof
exports==="object"&&exports&&typeof
exports.nodeName!=="string"){factory(exports)}else if(typeof
define==="function"&&define.amd){define(["exports"],factory)}else{global.Mustache={};factory(global.Mustache)}})(this,function
mustacheFactory(mustache){var objectToString=Object.prototype.toString;var
isArray=Array.isArray||function isArrayPolyfill(object){return
objectToString.call(object)==="[object Array]"};function
isFunction(object){return typeof object==="function"}function
typeStr(obj){return isArray(obj)?"array":typeof obj}function
escapeRegExp(string){return
string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function
hasProperty(obj,propName){return obj!=null&&typeof
obj==="object"&&propName in obj}var
regExpTest=RegExp.prototype.test;function testRegExp(re,string){return
regExpTest.call(re,string)}var nonSpaceRe=/\S/;function
isWhitespace(string){return!testRegExp(nonSpaceRe,string)}var
entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};function
escapeHtml(string){return
String(string).replace(/[&<>"'`=\/]/g,function
fromEntityMap(s){return entityMap[s]})}var whiteRe=/\s*/;var
spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var
tagRe=/#|\^|\/|>|\{|&|=|!/;function
parseTemplate(template,tags){if(!template)return[];var sections=[];var
tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function
stripSpace(){if(hasTag&&!nonSpace){while(spaces.length)delete
tokens[spaces.pop()]}else{spaces=[]}hasTag=false;nonSpace=false}var
openingTagRe,closingTagRe,closingCurlyRe;function
compileTags(tagsToCompile){if(typeof
tagsToCompile==="string")tagsToCompile=tagsToCompile.split(spaceRe,2);if(!isArray(tagsToCompile)||tagsToCompile.length!==2)throw
new Error("Invalid tags: "+tagsToCompile);openingTagRe=new
RegExp(escapeRegExp(tagsToCompile[0])+"\\s*");closingTagRe=new
RegExp("\\s*"+escapeRegExp(tagsToCompile[1]));closingCurlyRe=new
RegExp("\\s*"+escapeRegExp("}"+tagsToCompile[1]))}compileTags(tags||mustache.tags);var
scanner=new Scanner(template);var
start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var
i=0,valueLength=value.length;i<valueLength;++i){chr=value.charAt(i);if(isWhitespace(chr)){spaces.push(tokens.length)}else{nonSpace=true}tokens.push(["text",chr,start,start+1]);start+=1;if(chr==="\n")stripSpace()}}if(!scanner.scan(openingTagRe))break;hasTag=true;type=scanner.scan(tagRe)||"name";scanner.scan(whiteRe);if(type==="="){value=scanner.scanUntil(equalsRe);scanner.scan(equalsRe);scanner.scanUntil(closingTagRe)}else
if(type==="{"){value=scanner.scanUntil(closingCurlyRe);scanner.scan(curlyRe);scanner.scanUntil(closingTagRe);type="&"}else{value=scanner.scanUntil(closingTagRe)}if(!scanner.scan(closingTagRe))throw
new Error("Unclosed tag at
"+scanner.pos);token=[type,value,start,scanner.pos];tokens.push(token);if(type==="#"||type==="^"){sections.push(token)}else
if(type==="/"){openSection=sections.pop();if(!openSection)throw
new Error('Unopened section "'+value+'" at
'+start);if(openSection[1]!==value)throw new Error('Unclosed
section "'+openSection[1]+'" at '+start)}else
if(type==="name"||type==="{"||type==="&"){nonSpace=true}else
if(type==="="){compileTags(value)}}openSection=sections.pop();if(openSection)throw
new Error('Unclosed section "'+openSection[1]+'"
at '+scanner.pos);return nestTokens(squashTokens(tokens))}function
squashTokens(tokens){var squashedTokens=[];var token,lastToken;for(var
i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];if(token){if(token[0]==="text"&&lastToken&&lastToken[0]==="text"){lastToken[1]+=token[1];lastToken[3]=token[3]}else{squashedTokens.push(token);lastToken=token}}}return
squashedTokens}function nestTokens(tokens){var nestedTokens=[];var
collector=nestedTokens;var sections=[];var token,section;for(var
i=0,numTokens=tokens.length;i<numTokens;++i){token=tokens[i];switch(token[0]){case"#":case"^":collector.push(token);sections.push(token);collector=token[4]=[];break;case"/":section=sections.pop();section[5]=token[2];collector=sections.length>0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token)}}return
nestedTokens}function
Scanner(string){this.string=string;this.tail=string;this.pos=0}Scanner.prototype.eos=function
eos(){return this.tail===""};Scanner.prototype.scan=function
scan(re){var
match=this.tail.match(re);if(!match||match.index!==0)return"";var
string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return
string};Scanner.prototype.scanUntil=function scanUntil(re){var
index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case
0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index)}this.pos+=match.length;return
match};function
Context(view,parentContext){this.view=view;this.cache={".":this.view};this.parent=parentContext}Context.prototype.push=function
push(view){return new Context(view,this)};Context.prototype.lookup=function
lookup(name){var cache=this.cache;var
value;if(cache.hasOwnProperty(name)){value=cache[name]}else{var
context=this,names,index,lookupHit=false;while(context){if(name.indexOf(".")>0){value=context.view;names=name.split(".");index=0;while(value!=null&&index<names.length){if(index===names.length-1)lookupHit=hasProperty(value,names[index]);value=value[names[index++]]}}else{value=context.view[name];lookupHit=hasProperty(context.view,name)}if(lookupHit)break;context=context.parent}cache[name]=value}if(isFunction(value))value=value.call(this.view);return
value};function Writer(){this.cache={}}Writer.prototype.clearCache=function
clearCache(){this.cache={}};Writer.prototype.parse=function
parse(template,tags){var cache=this.cache;var
tokens=cache[template];if(tokens==null)tokens=cache[template]=parseTemplate(template,tags);return
tokens};Writer.prototype.render=function render(template,view,partials){var
tokens=this.parse(template);var context=view instanceof Context?view:new
Context(view);return
this.renderTokens(tokens,context,partials,template)};Writer.prototype.renderTokens=function
renderTokens(tokens,context,partials,originalTemplate){var
buffer="";var token,symbol,value;for(var
i=0,numTokens=tokens.length;i<numTokens;++i){value=undefined;token=tokens[i];symbol=token[0];if(symbol==="#")value=this.renderSection(token,context,partials,originalTemplate);else
if(symbol==="^")value=this.renderInverted(token,context,partials,originalTemplate);else
if(symbol===">")value=this.renderPartial(token,context,partials,originalTemplate);else
if(symbol==="&")value=this.unescapedValue(token,context);else
if(symbol==="name")value=this.escapedValue(token,context);else
if(symbol==="text")value=this.rawValue(token);if(value!==undefined)buffer+=value}return
buffer};Writer.prototype.renderSection=function
renderSection(token,context,partials,originalTemplate){var self=this;var
buffer="";var value=context.lookup(token[1]);function
subRender(template){return
self.render(template,context,partials)}if(!value)return;if(isArray(value)){for(var
j=0,valueLength=value.length;j<valueLength;++j){buffer+=this.renderTokens(token[4],context.push(value[j]),partials,originalTemplate)}}else
if(typeof value==="object"||typeof
value==="string"||typeof
value==="number"){buffer+=this.renderTokens(token[4],context.push(value),partials,originalTemplate)}else
if(isFunction(value)){if(typeof originalTemplate!=="string")throw
new Error("Cannot use higher-order sections without the original
template");value=value.call(context.view,originalTemplate.slice(token[3],token[5]),subRender);if(value!=null)buffer+=value}else{buffer+=this.renderTokens(token[4],context,partials,originalTemplate)}return
buffer};Writer.prototype.renderInverted=function
renderInverted(token,context,partials,originalTemplate){var
value=context.lookup(token[1]);if(!value||isArray(value)&&value.length===0)return
this.renderTokens(token[4],context,partials,originalTemplate)};Writer.prototype.renderPartial=function
renderPartial(token,context,partials){if(!partials)return;var
value=isFunction(partials)?partials(token[1]):partials[token[1]];if(value!=null)return
this.renderTokens(this.parse(value),context,partials,value)};Writer.prototype.unescapedValue=function
unescapedValue(token,context){var
value=context.lookup(token[1]);if(value!=null)return
value};Writer.prototype.escapedValue=function
escapedValue(token,context){var
value=context.lookup(token[1]);if(value!=null)return
mustache.escape(value)};Writer.prototype.rawValue=function
rawValue(token){return
token[1]};mustache.name="mustache.js";mustache.version="2.3.0";mustache.tags=["{{","}}"];var
defaultWriter=new Writer;mustache.clearCache=function clearCache(){return
defaultWriter.clearCache()};mustache.parse=function
parse(template,tags){return
defaultWriter.parse(template,tags)};mustache.render=function
render(template,view,partials){if(typeof
template!=="string"){throw new TypeError('Invalid template!
Template should be a "string" '+'but
"'+typeStr(template)+'" was given as the first
'+"argument for mustache#render(template, view,
partials)")}return
defaultWriter.render(template,view,partials)};mustache.to_html=function
to_html(template,view,partials,send){var
result=mustache.render(template,view,partials);if(isFunction(send)){send(result)}else{return
result}};mustache.escape=escapeHtml;mustache.Scanner=Scanner;mustache.Context=Context;mustache.Writer=Writer;return
mustache});
js/notifly-core.js000064400000025263151163010210010126 0ustar00/*!
 * notifly-core.js
 * https://www.themexpert.com/
 * Version: 1.0.0
 *
 * Copyright ThemeXpert
 * Released under the MIT license
 * https://www.themexpert.com/notifly
 */
;
(function($, scope) {
    "use strict";
    var NotiflyTimeout;
    var Notifly = scope.Notifly = { 

        /**
         * Basic setup
         *
         * @return  void
         */
        initialize: function() {
            /*console.log(Joomla.getOptions('notifly').params);*/
            /*Get the cookie value*/
            if (Cookies.get('notifly_hide_message') ===
'true') {
                return;
            }
            /*get the list first*/
            this.items = this.getList();
            if(!this.items.length){
                console.warn('Notifly:', 'Events are empty!
Please configure your integrations.');
                return;
            }

            this.makeWrapper();
            this.checked = false;
            this.time = 0;
            this.totalShown = 0;
            this.max_bypage =
parseInt(Joomla.getOptions('notifly').params.max_bypage);
            this.initial_delay =
parseInt(Joomla.getOptions('notifly').params.initial_delay) *
1000;
            this.display_time =
parseInt(Joomla.getOptions('notifly').params.display_time) *
1000;
            this.delay_time =
parseInt(Joomla.getOptions('notifly').params.delay_time) * 1000;

            /* 
            notify_max per user per session
            if(Joomla.getOptions('notifly').params.notify_max ==
'1'){
                $.session.set("notifly", "value");
            }
            $.session.set("myVar", "value");
            */
            this.showList(this.items);

            $('#notifly-wrapper #text,#notifly-wrapper
#image').on('click', function() {
                /*console.warn('Clicked');*/
                Notifly.updateClickLog();
            });

            $('#notifly-wrapper #close').on('click',
function() {
                /*console.warn('Clicked');*/
                Notifly.hideMessage();
            });

            if (!this.checked) {
                if ($(window).width() < 768) { /*if width is less than
768px*/
                    this.mobileFunctions(); /*execute mobile function*/
                } else { /*if width is more than 768px*/
                    this.desktopFunctions(); /*execute desktop function*/
                }
                this.checked = true;
            }
        },

        /**
         * Called from outside. Only ever called with task
'folder.delete'
         *
         * @param   string  task  [description]
         *
         * @return  void
         */
        makeWrapper: function() {
            var wrapperWidth =
Joomla.getOptions('notifly').params.wrapper_width;
            var show_branding =
parseInt(Joomla.getOptions('notifly').params.show_branding);
            
            var htmlNotifly = '<div id="notifly-wrapper"
style="width:' + wrapperWidth + ';"
class="out"><div class="card-small"><div
class="row flex flex--align-vertical">';
            htmlNotifly = htmlNotifly + '<div id="image"
class="col-nano-3"><img src=""
/></div>';
            htmlNotifly = htmlNotifly + '<div id="text"
class="col-nano-9"></div>';
            if(show_branding){
                htmlNotifly = htmlNotifly + '<div
class="poweredBy"><i class="svg"><svg
width="7" height="13" viewBox="0 0 7 13"
xmlns="http://www.w3.org/2000/svg"><g fill="none"
fill-rule="evenodd"><path d="M4.127.496C4.51-.12
5.37.356 5.16 1.07L3.89 5.14H6.22c.483 0 .757.616.464 1.044l-4.338
6.34c-.407.595-1.244.082-1.01-.618L2.72 7.656H.778c-.47
0-.748-.59-.48-1.02L4.13.495z" fill="#F6A623
"></path><path fill="#FEF79E "
d="M4.606.867L.778 7.007h2.807l-1.7 5.126
4.337-6.34H3.16"></path></g></svg></i>
<span>by</span> <a target="_blank"
href="https://www.themexpert.com/notifly?utm_campaign=notifly&utm_medium=powerd_by&utm_source='
+ window.location.protocol + '//' + window.location.hostname +
Joomla.getOptions('notifly').baseurl +
'">Notifly</a></div>';
            }
            
            htmlNotifly = htmlNotifly + '</div>';
            if (Joomla.getOptions('notifly').params.allow_close
== 1) {
                htmlNotifly = htmlNotifly + '<div
id="close"><span>x</span></div>';
            }
            htmlNotifly = htmlNotifly +
'</div></div>';

            $('body').append(htmlNotifly);
        },

        /**
         * Called from outside. Only ever called with task
'folder.delete'
         *
         * @param   string  task  [description]
         *
         * @return  void
         */
        getList: function() {
            /*console.warn('getList');*/
            return Joomla.getOptions('notifly').items;
        },

        /**
         * Called from outside. Only ever called with task
'folder.delete'
         *
         * @param   string  task  [description]
         *
         * @return  void
         */
        showList: function(items) {

            this.initial_delay =
parseInt(Joomla.getOptions('notifly').params.initial_delay) *
1000;
            this.display_time =
parseInt(Joomla.getOptions('notifly').params.display_time) *
1000;
            this.delay_time =
parseInt(Joomla.getOptions('notifly').params.delay_time) * 1000;
            /*set initial delay time*/
            this.time = this.initial_delay;

            $.each(items, function(index, item) {

                /*max per page has crossed!*/
                if (Notifly.totalShown > Notifly.max_bypage) {
                    return;
                }

                var explode = function() {
                    var converter = new showdown.Converter();
                    var renderedHtml = converter.makeHtml(item.message);
                    Notifly.showMessage(index, renderedHtml, item.image);
                };
                setTimeout(explode, Notifly.time);
                Notifly.time = Notifly.time + Notifly.display_time +
Notifly.delay_time;
                Notifly.totalShown++;

            });

            /*after all times over, wait and repeat if allowed*/
            if (Joomla.getOptions('notifly').params.notifly_loop
== '1') {
                setTimeout(
                    function() {
                        if (Notifly.totalShown > Notifly.max_bypage) {
                            return;
                        }
                        Notifly.destroy();
                        Notifly.initialize();
                    },
                    Notifly.time + Notifly.initial_delay
                );
            }

        },

        showMessage: function(index, text, image) {
            /*Get the cookie value*/
            if (Cookies.get('notifly_hide_message') ===
'true') {
                return;
            }

            /*console.warn('showMessage');*/
            $('#notifly-wrapper #text').html(text);
            $('#notifly-wrapper #image
img').attr('src', image);
            /*$( '#notifly-wrapper'
).fadeIn('slow').delay(Notifly.display_time).fadeOut('fast');*/
           
$('#notifly-wrapper').show().removeClass('out').addClass('active');

            setTimeout(function() {
               
$('#notifly-wrapper').removeClass('active').addClass('out').fadeOut('fast');
            }, Notifly.display_time);
            this.updateViewLog();
        },
        hideMessage: function() {

           
$('#notifly-wrapper').removeClass('active').addClass('out').fadeOut('fast');

            /*set cookie*/
            var expire_cookie =
Joomla.getOptions('notifly').params.expire_cookie;
            expire_cookie = (expire_cookie * 60 * 60); /*60*60 = 1 hour
1*60 = 1 min*/

            Cookies.set('notifly_hide_message', 'true',
{
                expires: expire_cookie
            });
            /*console.log('notifly disabled for ' +
Joomla.getOptions('notifly').params.expire_cookie +
'hours');*/

        },
        updateViewLog: function() {
            /*
            console.warn(Joomla.getOptions('notifly').baseurl);
            console.warn('updateViewLog');
            call ajax api
           
index.php?option=com_ajax&plugin=notifly&format=json&action=click
            Joomla.getOptions('notifly').baseurl + 
            console.log(Joomla.getOptions('notifly').baseurl +
"/index.php?option=com_ajax&plugin=notifly&format=json");
            */
            if
(Joomla.getOptions('notifly').params.enable_hitcounter ==
'0') return;
            var updateViewLogInfo =
jQuery.get(Joomla.getOptions('notifly').baseurl +
"/index.php?option=com_ajax&plugin=notifly&format=json",
function(data, status) {
                if (status = !'success') {
                    console.error('failed to update notifly
hitlog!');
                }
                /*console.warn('update view log');*/
            });
        },
        updateClickLog: function() {
            /*
            console.warn(Joomla.getOptions('notifly').baseurl);
            console.warn('updateClickLog');
            call ajax api
           
index.php?option=com_ajax&plugin=notifly&format=json&action=click
            */
            if
(Joomla.getOptions('notifly').params.enable_hitcounter ==
'0') return;
            var updateClickLogInfo =
jQuery.get(Joomla.getOptions('notifly').baseurl +
"/index.php?option=com_ajax&plugin=notifly&action=click&format=json",
function(data, status) {
                if (status = !'success') {
                    console.error('failed to update notifly
clicklog!');
                }
                /*console.warn('updated click');*/
            });
        },
        mobileFunctions: function() {
            /*console.warn('mobileFunctions');*/
            if (Joomla.getOptions('notifly').params.hide_mobile
== '1') {
                this.destroy();
            } else if (!$('#notifly-wrapper').length) {
                this.initialize();
            }
        },
        desktopFunctions: function() {
            /*            
            console.warn('desktopFunctions');
           
console.warn(Joomla.getOptions('notifly').params.hide_desktop);
            */
            if (Joomla.getOptions('notifly').params.hide_desktop
== '1') {
                this.destroy();
            } else if (!$('#notifly-wrapper').length) {
                this.initialize();
            }
        },
        destroy: function() {
            /*console.warn('destroy');*/
            $('#notifly-wrapper').remove();
        },
        resize: function() {
            /*console.warn('resize');*/
            if ($(window).width() < 768) { /*if width is less than
768px*/
                this.mobileFunctions(); /*execute mobile function*/
            } else { /*if width is more than 768px*/
                this.desktopFunctions(); /*execute desktop function*/
            }
        }

    };

    $(function() {
        /*Added to populate data on iframe load*/
        Notifly.initialize();
        $(window).resize(function() {
            Notifly.resize();
        });
    });

}(jQuery,
window));js/notifly-core.min.js000064400000012247151163010210010706
0ustar00/*!
 * notifly-core.js
 * https://www.themexpert.com/
 * Version: 1.0.0
 *
 * Copyright ThemeXpert
 * Released under the MIT license
 * https://www.themexpert.com/notifly
 */
!(function($,scope){"use strict";var NotiflyTimeout;var
Notifly=scope.Notifly={initialize:function(){console.log(Joomla.getOptions('notifly').params);if(Cookies.get('notifly_hide_message')==='true'){return}this.makeWrapper(this.items);this.checked=!1;this.items=this.getList();this.time=0;this.totalShown=0;this.max_bypage=parseInt(Joomla.getOptions('notifly').params.max_bypage);this.initial_delay=parseInt(Joomla.getOptions('notifly').params.initial_delay)*1000;this.display_time=parseInt(Joomla.getOptions('notifly').params.display_time)*1000;this.delay_time=parseInt(Joomla.getOptions('notifly').params.delay_time)*1000;this.showList(this.items);$('#notifly-wrapper
#text,#notifly-wrapper
#image').on('click',function(){Notifly.updateClickLog()});$('#notifly-wrapper
#close').on('click',function(){Notifly.hideMessage()});if(!this.checked){if($(window).width()<768){this.mobileFunctions()}else{this.desktopFunctions()}this.checked=!0}},makeWrapper:function(){var
wrapperWidth=Joomla.getOptions('notifly').params.wrapper_width;var
htmlNotifly='<div id="notifly-wrapper"
style="width:'+wrapperWidth+';"
class="out"><div class="card-small"><div
class="row flex
flex--align-vertical">';htmlNotifly=htmlNotifly+'<div
id="image" class="col-nano-3"><img
src=""
/></div>';htmlNotifly=htmlNotifly+'<div
id="text"
class="col-nano-9"></div>';htmlNotifly=htmlNotifly+'<div
class="poweredBy"><i class="svg"><svg
width="7" height="13" viewBox="0 0 7 13"
xmlns="http://www.w3.org/2000/svg"><g fill="none"
fill-rule="evenodd"><path d="M4.127.496C4.51-.12
5.37.356 5.16 1.07L3.89 5.14H6.22c.483 0 .757.616.464 1.044l-4.338
6.34c-.407.595-1.244.082-1.01-.618L2.72 7.656H.778c-.47
0-.748-.59-.48-1.02L4.13.495z" fill="#F6A623
"></path><path fill="#FEF79E "
d="M4.606.867L.778 7.007h2.807l-1.7 5.126
4.337-6.34H3.16"></path></g></svg></i>
<span>by</span> <a target="_blank"
href="https://www.themexpert.com/notifly?utm_campaign=notifly&utm_medium=powerd_by&utm_source='+window.location.protocol+'//'+window.location.hostname+Joomla.getOptions('notifly').baseurl+'">Notifly</a></div>';htmlNotifly=htmlNotifly+'</div>';if(Joomla.getOptions('notifly').params.allow_close==1){htmlNotifly=htmlNotifly+'<div
id="close"><span>x</span></div>'}htmlNotifly=htmlNotifly+'</div></div>';$('body').append(htmlNotifly)},getList:function(){return
Joomla.getOptions('notifly').items},showList:function(items){this.initial_delay=parseInt(Joomla.getOptions('notifly').params.initial_delay)*1000;this.display_time=parseInt(Joomla.getOptions('notifly').params.display_time)*1000;this.delay_time=parseInt(Joomla.getOptions('notifly').params.delay_time)*1000;this.time=this.initial_delay;$.each(items,function(index,item){if(Notifly.totalShown>Notifly.max_bypage){return}var
explode=function(){var converter=new showdown.Converter();var
renderedHtml=converter.makeHtml(item.message);Notifly.showMessage(index,renderedHtml,item.image)};setTimeout(explode,Notifly.time);Notifly.time=Notifly.time+Notifly.display_time+Notifly.delay_time;Notifly.totalShown++});if(Joomla.getOptions('notifly').params.notifly_loop=='1'){setTimeout(function(){if(Notifly.totalShown>Notifly.max_bypage){return}Notifly.destroy();Notifly.initialize()},Notifly.time+Notifly.initial_delay)}},showMessage:function(index,text,image){if(Cookies.get('notifly_hide_message')==='true'){return}$('#notifly-wrapper
#text').html(text);$('#notifly-wrapper #image
img').attr('src',image);$('#notifly-wrapper').show().removeClass('out').addClass('active');setTimeout(function(){$('#notifly-wrapper').removeClass('active').addClass('out').fadeOut('fast')},Notifly.display_time);this.updateViewLog()},hideMessage:function(){$('#notifly-wrapper').removeClass('active').addClass('out').fadeOut('fast');var
expire_cookie=Joomla.getOptions('notifly').params.expire_cookie;expire_cookie=(expire_cookie*60*60);Cookies.set('notifly_hide_message','true',{expires:expire_cookie})},updateViewLog:function(){if(Joomla.getOptions('notifly').params.enable_hitcounter=='0')return;var
updateViewLogInfo=jQuery.get(Joomla.getOptions('notifly').baseurl+"/index.php?option=com_ajax&plugin=notifly&format=json",function(data,status){if(status=!'success'){console.error('failed
to update notifly
hitlog!')}})},updateClickLog:function(){if(Joomla.getOptions('notifly').params.enable_hitcounter=='0')return;var
updateClickLogInfo=jQuery.get(Joomla.getOptions('notifly').baseurl+"/index.php?option=com_ajax&plugin=notifly&action=click&format=json",function(data,status){if(status=!'success'){console.error('failed
to update notifly
clicklog!')}})},mobileFunctions:function(){if(Joomla.getOptions('notifly').params.hide_mobile=='1'){this.destroy()}else
if(!$('#notifly-wrapper').length){this.initialize()}},desktopFunctions:function(){if(Joomla.getOptions('notifly').params.hide_desktop=='1'){this.destroy()}else
if(!$('#notifly-wrapper').length){this.initialize()}},destroy:function(){$('#notifly-wrapper').remove()},resize:function(){if($(window).width()<768){this.mobileFunctions()}else{this.desktopFunctions()}}};$(function(){Notifly.initialize();$(window).resize(function(){Notifly.resize()})})}(jQuery,window));js/showdown.min.js000064400000274434151163010210010154
0ustar00/*! showdown v 1.8.1 - 01-11-2017 */
(function(){function g(g){"use strict";var
A={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:"Omit the default
extra whiteline added to code
blocks",type:"boolean"},noHeaderId:{defaultValue:!1,describe:"Turn
on/off generated header
id",type:"boolean"},prefixHeaderId:{defaultValue:!1,describe:"Add
a prefix to the generated header ids. Passing a string will prefix that
string to the header id. Setting to true will add a generic
'section-'
prefix",type:"string"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting
this option to true will prevent showdown from modifying the prefix. This
might result in malformed IDs (if, for instance, the " char is used in
the
prefix)',type:"boolean"},ghCompatibleHeaderId:{defaultValue:!1,describe:"Generate
header ids compatible with github style (spaces are replaced with dashes, a
bunch of non alphanumeric chars are
removed)",type:"boolean"},rawHeaderId:{defaultValue:!1,describe:"Remove
only spaces, ' and \" from generated header ids (including
prefixes), replacing them with dashes (-). WARNING: This might result in
malformed
ids",type:"boolean"},headerLevelStart:{defaultValue:!1,describe:"The
header blocks level
start",type:"integer"},parseImgDimensions:{defaultValue:!1,describe:"Turn
on/off image dimension
parsing",type:"boolean"},simplifiedAutoLink:{defaultValue:!1,describe:"Turn
on/off GFM autolink
style",type:"boolean"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:"Excludes
trailing punctuation from links generated with
autoLinking",type:"boolean"},literalMidWordUnderscores:{defaultValue:!1,describe:"Parse
midword underscores as literal
underscores",type:"boolean"},literalMidWordAsterisks:{defaultValue:!1,describe:"Parse
midword asterisks as literal
asterisks",type:"boolean"},strikethrough:{defaultValue:!1,describe:"Turn
on/off strikethrough
support",type:"boolean"},tables:{defaultValue:!1,describe:"Turn
on/off tables
support",type:"boolean"},tablesHeaderId:{defaultValue:!1,describe:"Add
an id to table
headers",type:"boolean"},ghCodeBlocks:{defaultValue:!0,describe:"Turn
on/off GFM fenced code blocks
support",type:"boolean"},tasklists:{defaultValue:!1,describe:"Turn
on/off GFM tasklist
support",type:"boolean"},smoothLivePreview:{defaultValue:!1,describe:"Prevents
weird effects in live previews due to incomplete
input",type:"boolean"},smartIndentationFix:{defaultValue:!1,description:"Tries
to smartly fix indentation in es6
strings",type:"boolean"},disableForced4SpacesIndentedSublists:{defaultValue:!1,description:"Disables
the requirement of indenting nested sublists by 4
spaces",type:"boolean"},simpleLineBreaks:{defaultValue:!1,description:"Parses
simple line breaks as <br> (GFM
Style)",type:"boolean"},requireSpaceBeforeHeadingText:{defaultValue:!1,description:"Makes
adding a space between `#` and the header text mandatory (GFM
Style)",type:"boolean"},ghMentions:{defaultValue:!1,description:"Enables
github
@mentions",type:"boolean"},ghMentionsLink:{defaultValue:"https://github.com/{u}",description:"Changes
the link generated by @mentions. Only applies if ghMentions option is
enabled.",type:"string"},encodeEmails:{defaultValue:!0,description:"Encode
e-mail addresses through the use of Character Entities, transforming ASCII
e-mail addresses into its equivalent decimal
entities",type:"boolean"},openLinksInNewWindow:{defaultValue:!1,description:"Open
all links in new
windows",type:"boolean"},backslashEscapesHTMLTags:{defaultValue:!1,description:"Support
for HTML Tag escaping. ex:
<div>foo</div>",type:"boolean"},emoji:{defaultValue:!1,description:"Enable
emoji support. Ex: `this is a :smile:
emoji`",type:"boolean"},underline:{defaultValue:!1,description:"Enable
support for underline. Syntax is double or triple underscores: `__underline
word__`. With this option enabled, underscores no longer parses into
`<em>` and
`<strong>`",type:"boolean"}};if(!1===g)return
JSON.parse(JSON.stringify(A));var C={};for(var I in
A)A.hasOwnProperty(I)&&(C[I]=A[I].defaultValue);return C}function
A(g,A){"use strict";var C=A?"Error in "+A+"
extension->":"Error in unnamed
extension",e={valid:!0,error:""};I.helper.isArray(g)||(g=[g]);for(var
r=0;r<g.length;++r){var t=C+" sub-extension "+r+":
",a=g[r];if("object"!=typeof a)return
e.valid=!1,e.error=t+"must be an object, but "+typeof a+"
given",e;if(!I.helper.isString(a.type))return
e.valid=!1,e.error=t+'property "type" must be a string, but
'+typeof a.type+" given",e;var
n=a.type=a.type.toLowerCase();if("language"===n&&(n=a.type="lang"),"html"===n&&(n=a.type="output"),"lang"!==n&&"output"!==n&&"listener"!==n)return
e.valid=!1,e.error=t+"type "+n+' is not recognized. Valid
values: "lang/language", "output/html" or
"listener"',e;if("listener"===n){if(I.helper.isUndefined(a.listeners))return
e.valid=!1,e.error=t+'. Extensions of type "listener" must
have a property called "listeners"',e}else
if(I.helper.isUndefined(a.filter)&&I.helper.isUndefined(a.regex))return
e.valid=!1,e.error=t+n+' extensions must define either a
"regex" property or a "filter"
method',e;if(a.listeners){if("object"!=typeof
a.listeners)return e.valid=!1,e.error=t+'"listeners"
property must be an object but '+typeof a.listeners+"
given",e;for(var o in
a.listeners)if(a.listeners.hasOwnProperty(o)&&"function"!=typeof
a.listeners[o])return e.valid=!1,e.error=t+'"listeners"
property must be an hash of [event name]: [callback].
listeners.'+o+" must be a function but "+typeof
a.listeners[o]+"
given",e}if(a.filter){if("function"!=typeof a.filter)return
e.valid=!1,e.error=t+'"filter" must be a function, but
'+typeof a.filter+" given",e}else
if(a.regex){if(I.helper.isString(a.regex)&&(a.regex=new
RegExp(a.regex,"g")),!(a.regex instanceof RegExp))return
e.valid=!1,e.error=t+'"regex" property must either be a
string or a RegExp object, but '+typeof a.regex+"
given",e;if(I.helper.isUndefined(a.replace))return
e.valid=!1,e.error=t+'"regex" extensions must implement a
replace string or function',e}}return e}function C(g,A){"use
strict";return"¨E"+A.charCodeAt(0)+"E"}var
I={},e={},r={},t=g(!0),a="vanilla",n={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:g(!0),allOn:function(){"use
strict";var A=g(!0),C={};for(var I in
A)A.hasOwnProperty(I)&&(C[I]=!0);return
C}()};I.helper={},I.extensions={},I.setOption=function(g,A){"use
strict";return t[g]=A,this},I.getOption=function(g){"use
strict";return t[g]},I.getOptions=function(){"use
strict";return t},I.resetOptions=function(){"use
strict";t=g(!0)},I.setFlavor=function(g){"use
strict";if(!n.hasOwnProperty(g))throw Error(g+" flavor was not
found");I.resetOptions();var A=n[g];a=g;for(var C in
A)A.hasOwnProperty(C)&&(t[C]=A[C])},I.getFlavor=function(){"use
strict";return a},I.getFlavorOptions=function(g){"use
strict";if(n.hasOwnProperty(g))return
n[g]},I.getDefaultOptions=function(A){"use strict";return
g(A)},I.subParser=function(g,A){"use
strict";if(I.helper.isString(g)){if(void
0===A){if(e.hasOwnProperty(g))return e[g];throw Error("SubParser named
"+g+" not
registered!")}e[g]=A}},I.extension=function(g,C){"use
strict";if(!I.helper.isString(g))throw Error("Extension
'name' must be a
string");if(g=I.helper.stdExtName(g),I.helper.isUndefined(C)){if(!r.hasOwnProperty(g))throw
Error("Extension named "+g+" is not
registered!");return r[g]}"function"==typeof
C&&(C=C()),I.helper.isArray(C)||(C=[C]);var
e=A(C,g);if(!e.valid)throw
Error(e.error);r[g]=C},I.getAllExtensions=function(){"use
strict";return r},I.removeExtension=function(g){"use
strict";delete r[g]},I.resetExtensions=function(){"use
strict";r={}},I.validateExtension=function(g){"use
strict";var
C=A(g,null);return!!C.valid||(console.warn(C.error),!1)},I.hasOwnProperty("helper")||(I.helper={}),I.helper.isString=function(g){"use
strict";return"string"==typeof g||g instanceof
String},I.helper.isFunction=function(g){"use strict";var
A={};return g&&"[object
Function]"===A.toString.call(g)},I.helper.isArray=function(g){"use
strict";return
Array.isArray(g)},I.helper.isUndefined=function(g){"use
strict";return void 0===g},I.helper.forEach=function(g,A){"use
strict";if(I.helper.isUndefined(g))throw new Error("obj param is
required");if(I.helper.isUndefined(A))throw new Error("callback
param is required");if(!I.helper.isFunction(A))throw new
Error("callback param must be a
function/closure");if("function"==typeof
g.forEach)g.forEach(A);else if(I.helper.isArray(g))for(var
C=0;C<g.length;C++)A(g[C],C,g);else{if("object"!=typeof
g)throw new Error("obj does not seem to be an array or an iterable
object");for(var e in
g)g.hasOwnProperty(e)&&A(g[e],e,g)}},I.helper.stdExtName=function(g){"use
strict";return
g.replace(/[_?*+\/\\.^-]/g,"").replace(/\s/g,"").toLowerCase()},I.helper.escapeCharactersCallback=C,I.helper.escapeCharacters=function(g,A,I){"use
strict";var
e="(["+A.replace(/([\[\]\\])/g,"\\$1")+"])";I&&(e="\\\\"+e);var
r=new RegExp(e,"g");return g=g.replace(r,C)};var
o=function(g,A,C,I){"use strict";var
e,r,t,a,n,o=I||"",s=o.indexOf("g")>-1,i=new
RegExp(A+"|"+C,"g"+o.replace(/g/g,"")),l=new
RegExp(A,o.replace(/g/g,"")),c=[];do{for(e=0;t=i.exec(g);)if(l.test(t[0]))e++||(a=(r=i.lastIndex)-t[0].length);else
if(e&&!--e){n=t.index+t[0].length;var
u={left:{start:a,end:r},match:{start:r,end:t.index},right:{start:t.index,end:n},wholeMatch:{start:a,end:n}};if(c.push(u),!s)return
c}}while(e&&(i.lastIndex=r));return
c};I.helper.matchRecursiveRegExp=function(g,A,C,I){"use
strict";for(var
e=o(g,A,C,I),r=[],t=0;t<e.length;++t)r.push([g.slice(e[t].wholeMatch.start,e[t].wholeMatch.end),g.slice(e[t].match.start,e[t].match.end),g.slice(e[t].left.start,e[t].left.end),g.slice(e[t].right.start,e[t].right.end)]);return
r},I.helper.replaceRecursiveRegExp=function(g,A,C,e,r){"use
strict";if(!I.helper.isFunction(A)){var t=A;A=function(){return t}}var
a=o(g,C,e,r),n=g,s=a.length;if(s>0){var
i=[];0!==a[0].wholeMatch.start&&i.push(g.slice(0,a[0].wholeMatch.start));for(var
l=0;l<s;++l)i.push(A(g.slice(a[l].wholeMatch.start,a[l].wholeMatch.end),g.slice(a[l].match.start,a[l].match.end),g.slice(a[l].left.start,a[l].left.end),g.slice(a[l].right.start,a[l].right.end))),l<s-1&&i.push(g.slice(a[l].wholeMatch.end,a[l+1].wholeMatch.start));a[s-1].wholeMatch.end<g.length&&i.push(g.slice(a[s-1].wholeMatch.end)),n=i.join("")}return
n},I.helper.regexIndexOf=function(g,A,C){"use
strict";if(!I.helper.isString(g))throw"InvalidArgumentError:
first parameter of showdown.helper.regexIndexOf function must be a
string";if(A instanceof RegExp==!1)throw"InvalidArgumentError:
second parameter of showdown.helper.regexIndexOf function must be an
instance of RegExp";var e=g.substring(C||0).search(A);return
e>=0?e+(C||0):e},I.helper.splitAtIndex=function(g,A){"use
strict";if(!I.helper.isString(g))throw"InvalidArgumentError:
first parameter of showdown.helper.regexIndexOf function must be a
string";return[g.substring(0,A),g.substring(A)]},I.helper.encodeEmailAddress=function(g){"use
strict";var
A=[function(g){return"&#"+g.charCodeAt(0)+";"},function(g){return"&#x"+g.charCodeAt(0).toString(16)+";"},function(g){return
g}];return
g=g.replace(/./g,function(g){if("@"===g)g=A[Math.floor(2*Math.random())](g);else{var
C=Math.random();g=C>.9?A[2](g):C>.45?A[1](g):A[0](g)}return
g})},"undefined"==typeof
console&&(console={warn:function(g){"use
strict";alert(g)},log:function(g){"use
strict";alert(g)},error:function(g){"use strict";throw
g}}),I.helper.regexes={asteriskDashAndColon:/([*_:~])/g},I.helper.emojis={"+1":"👍","-1":"👎",100:"💯",1234:"🔢","1st_place_medal":"🥇","2nd_place_medal":"🥈","3rd_place_medal":"🥉","8ball":"🎱",a:"🅰️",ab:"🆎",abc:"🔤",abcd:"🔡",accept:"🉑",aerial_tramway:"🚡",airplane:"✈️",alarm_clock:"⏰",alembic:"⚗️",alien:"👽",ambulance:"🚑",amphora:"🏺",anchor:"⚓️",angel:"👼",anger:"💢",angry:"😠",anguished:"😧",ant:"🐜",apple:"🍎",aquarius:"♒️",aries:"♈️",arrow_backward:"◀️",arrow_double_down:"⏬",arrow_double_up:"⏫",arrow_down:"⬇️",arrow_down_small:"🔽",arrow_forward:"▶️",arrow_heading_down:"⤵️",arrow_heading_up:"⤴️",arrow_left:"⬅️",arrow_lower_left:"↙️",arrow_lower_right:"↘️",arrow_right:"➡️",arrow_right_hook:"↪️",arrow_up:"⬆️",arrow_up_down:"↕️",arrow_up_small:"🔼",arrow_upper_left:"↖️",arrow_upper_right:"↗️",arrows_clockwise:"🔃",arrows_counterclockwise:"🔄",art:"🎨",articulated_lorry:"🚛",artificial_satellite:"🛰",astonished:"😲",athletic_shoe:"👟",atm:"🏧",atom_symbol:"⚛️",avocado:"🥑",b:"🅱️",baby:"👶",baby_bottle:"🍼",baby_chick:"🐤",baby_symbol:"🚼",back:"🔙",bacon:"🥓",badminton:"🏸",baggage_claim:"🛄",baguette_bread:"🥖",balance_scale:"⚖️",balloon:"🎈",ballot_box:"🗳",ballot_box_with_check:"☑️",bamboo:"🎍",banana:"🍌",bangbang:"‼️",bank:"🏦",bar_chart:"📊",barber:"💈",baseball:"⚾️",basketball:"🏀",basketball_man:"⛹️",basketball_woman:"⛹️&zwj;♀️",bat:"🦇",bath:"🛀",bathtub:"🛁",battery:"🔋",beach_umbrella:"🏖",bear:"🐻",bed:"🛏",bee:"🐝",beer:"🍺",beers:"🍻",beetle:"🐞",beginner:"🔰",bell:"🔔",bellhop_bell:"🛎",bento:"🍱",biking_man:"🚴",bike:"🚲",biking_woman:"🚴&zwj;♀️",bikini:"👙",biohazard:"☣️",bird:"🐦",birthday:"🎂",black_circle:"⚫️",black_flag:"🏴",black_heart:"🖤",black_joker:"🃏",black_large_square:"⬛️",black_medium_small_square:"◾️",black_medium_square:"◼️",black_nib:"✒️",black_small_square:"▪️",black_square_button:"🔲",blonde_man:"👱",blonde_woman:"👱&zwj;♀️",blossom:"🌼",blowfish:"🐡",blue_book:"📘",blue_car:"🚙",blue_heart:"💙",blush:"😊",boar:"🐗",boat:"⛵️",bomb:"💣",book:"📖",bookmark:"🔖",bookmark_tabs:"📑",books:"📚",boom:"💥",boot:"👢",bouquet:"💐",bowing_man:"🙇",bow_and_arrow:"🏹",bowing_woman:"🙇&zwj;♀️",bowling:"🎳",boxing_glove:"🥊",boy:"👦",bread:"🍞",bride_with_veil:"👰",bridge_at_night:"🌉",briefcase:"💼",broken_heart:"💔",bug:"🐛",building_construction:"🏗",bulb:"💡",bullettrain_front:"🚅",bullettrain_side:"🚄",burrito:"🌯",bus:"🚌",business_suit_levitating:"🕴",busstop:"🚏",bust_in_silhouette:"👤",busts_in_silhouette:"👥",butterfly:"🦋",cactus:"🌵",cake:"🍰",calendar:"📆",call_me_hand:"🤙",calling:"📲",camel:"🐫",camera:"📷",camera_flash:"📸",camping:"🏕",cancer:"♋️",candle:"🕯",candy:"🍬",canoe:"🛶",capital_abcd:"🔠",capricorn:"♑️",car:"🚗",card_file_box:"🗃",card_index:"📇",card_index_dividers:"🗂",carousel_horse:"🎠",carrot:"🥕",cat:"🐱",cat2:"🐈",cd:"💿",chains:"⛓",champagne:"🍾",chart:"💹",chart_with_downwards_trend:"📉",chart_with_upwards_trend:"📈",checkered_flag:"🏁",cheese:"🧀",cherries:"🍒",cherry_blossom:"🌸",chestnut:"🌰",chicken:"🐔",children_crossing:"🚸",chipmunk:"🐿",chocolate_bar:"🍫",christmas_tree:"🎄",church:"⛪️",cinema:"🎦",circus_tent:"🎪",city_sunrise:"🌇",city_sunset:"🌆",cityscape:"🏙",cl:"🆑",clamp:"🗜",clap:"👏",clapper:"🎬",classical_building:"🏛",clinking_glasses:"🥂",clipboard:"📋",clock1:"🕐",clock10:"🕙",clock1030:"🕥",clock11:"🕚",clock1130:"🕦",clock12:"🕛",clock1230:"🕧",clock130:"🕜",clock2:"🕑",clock230:"🕝",clock3:"🕒",clock330:"🕞",clock4:"🕓",clock430:"🕟",clock5:"🕔",clock530:"🕠",clock6:"🕕",clock630:"🕡",clock7:"🕖",clock730:"🕢",clock8:"🕗",clock830:"🕣",clock9:"🕘",clock930:"🕤",closed_book:"📕",closed_lock_with_key:"🔐",closed_umbrella:"🌂",cloud:"☁️",cloud_with_lightning:"🌩",cloud_with_lightning_and_rain:"⛈",cloud_with_rain:"🌧",cloud_with_snow:"🌨",clown_face:"🤡",clubs:"♣️",cocktail:"🍸",coffee:"☕️",coffin:"⚰️",cold_sweat:"😰",comet:"☄️",computer:"💻",computer_mouse:"🖱",confetti_ball:"🎊",confounded:"😖",confused:"😕",congratulations:"㊗️",construction:"🚧",construction_worker_man:"👷",construction_worker_woman:"👷&zwj;♀️",control_knobs:"🎛",convenience_store:"🏪",cookie:"🍪",cool:"🆒",policeman:"👮",copyright:"©️",corn:"🌽",couch_and_lamp:"🛋",couple:"👫",couple_with_heart_woman_man:"💑",couple_with_heart_man_man:"👨&zwj;❤️&zwj;👨",couple_with_heart_woman_woman:"👩&zwj;❤️&zwj;👩",couplekiss_man_man:"👨&zwj;❤️&zwj;💋&zwj;👨",couplekiss_man_woman:"💏",couplekiss_woman_woman:"👩&zwj;❤️&zwj;💋&zwj;👩",cow:"🐮",cow2:"🐄",cowboy_hat_face:"🤠",crab:"🦀",crayon:"🖍",credit_card:"💳",crescent_moon:"🌙",cricket:"🏏",crocodile:"🐊",croissant:"🥐",crossed_fingers:"🤞",crossed_flags:"🎌",crossed_swords:"⚔️",crown:"👑",cry:"😢",crying_cat_face:"😿",crystal_ball:"🔮",cucumber:"🥒",cupid:"💘",curly_loop:"➰",currency_exchange:"💱",curry:"🍛",custard:"🍮",customs:"🛃",cyclone:"🌀",dagger:"🗡",dancer:"💃",dancing_women:"👯",dancing_men:"👯&zwj;♂️",dango:"🍡",dark_sunglasses:"🕶",dart:"🎯",dash:"💨",date:"📅",deciduous_tree:"🌳",deer:"🦌",department_store:"🏬",derelict_house:"🏚",desert:"🏜",desert_island:"🏝",desktop_computer:"🖥",male_detective:"🕵️",diamond_shape_with_a_dot_inside:"💠",diamonds:"♦️",disappointed:"😞",disappointed_relieved:"😥",dizzy:"💫",dizzy_face:"😵",do_not_litter:"🚯",dog:"🐶",dog2:"🐕",dollar:"💵",dolls:"🎎",dolphin:"🐬",door:"🚪",doughnut:"🍩",dove:"🕊",dragon:"🐉",dragon_face:"🐲",dress:"👗",dromedary_camel:"🐪",drooling_face:"🤤",droplet:"💧",drum:"🥁",duck:"🦆",dvd:"📀","e-mail":"📧",eagle:"🦅",ear:"👂",ear_of_rice:"🌾",earth_africa:"🌍",earth_americas:"🌎",earth_asia:"🌏",egg:"🥚",eggplant:"🍆",eight_pointed_black_star:"✴️",eight_spoked_asterisk:"✳️",electric_plug:"🔌",elephant:"🐘",email:"✉️",end:"🔚",envelope_with_arrow:"📩",euro:"💶",european_castle:"🏰",european_post_office:"🏤",evergreen_tree:"🌲",exclamation:"❗️",expressionless:"😑",eye:"👁",eye_speech_bubble:"👁&zwj;🗨",eyeglasses:"👓",eyes:"👀",face_with_head_bandage:"🤕",face_with_thermometer:"🤒",fist_oncoming:"👊",factory:"🏭",fallen_leaf:"🍂",family_man_woman_boy:"👪",family_man_boy:"👨&zwj;👦",family_man_boy_boy:"👨&zwj;👦&zwj;👦",family_man_girl:"👨&zwj;👧",family_man_girl_boy:"👨&zwj;👧&zwj;👦",family_man_girl_girl:"👨&zwj;👧&zwj;👧",family_man_man_boy:"👨&zwj;👨&zwj;👦",family_man_man_boy_boy:"👨&zwj;👨&zwj;👦&zwj;👦",family_man_man_girl:"👨&zwj;👨&zwj;👧",family_man_man_girl_boy:"👨&zwj;👨&zwj;👧&zwj;👦",family_man_man_girl_girl:"👨&zwj;👨&zwj;👧&zwj;👧",family_man_woman_boy_boy:"👨&zwj;👩&zwj;👦&zwj;👦",family_man_woman_girl:"👨&zwj;👩&zwj;👧",family_man_woman_girl_boy:"👨&zwj;👩&zwj;👧&zwj;👦",family_man_woman_girl_girl:"👨&zwj;👩&zwj;👧&zwj;👧",family_woman_boy:"👩&zwj;👦",family_woman_boy_boy:"👩&zwj;👦&zwj;👦",family_woman_girl:"👩&zwj;👧",family_woman_girl_boy:"👩&zwj;👧&zwj;👦",family_woman_girl_girl:"👩&zwj;👧&zwj;👧",family_woman_woman_boy:"👩&zwj;👩&zwj;👦",family_woman_woman_boy_boy:"👩&zwj;👩&zwj;👦&zwj;👦",family_woman_woman_girl:"👩&zwj;👩&zwj;👧",family_woman_woman_girl_boy:"👩&zwj;👩&zwj;👧&zwj;👦",family_woman_woman_girl_girl:"👩&zwj;👩&zwj;👧&zwj;👧",fast_forward:"⏩",fax:"📠",fearful:"😨",feet:"🐾",female_detective:"🕵️&zwj;♀️",ferris_wheel:"🎡",ferry:"⛴",field_hockey:"🏑",file_cabinet:"🗄",file_folder:"📁",film_projector:"📽",film_strip:"🎞",fire:"🔥",fire_engine:"🚒",fireworks:"🎆",first_quarter_moon:"🌓",first_quarter_moon_with_face:"🌛",fish:"🐟",fish_cake:"🍥",fishing_pole_and_fish:"🎣",fist_raised:"✊",fist_left:"🤛",fist_right:"🤜",flags:"🎏",flashlight:"🔦",fleur_de_lis:"⚜️",flight_arrival:"🛬",flight_departure:"🛫",floppy_disk:"💾",flower_playing_cards:"🎴",flushed:"😳",fog:"🌫",foggy:"🌁",football:"🏈",footprints:"👣",fork_and_knife:"🍴",fountain:"⛲️",fountain_pen:"🖋",four_leaf_clover:"🍀",fox_face:"🦊",framed_picture:"🖼",free:"🆓",fried_egg:"🍳",fried_shrimp:"🍤",fries:"🍟",frog:"🐸",frowning:"😦",frowning_face:"☹️",frowning_man:"🙍&zwj;♂️",frowning_woman:"🙍",middle_finger:"🖕",fuelpump:"⛽️",full_moon:"🌕",full_moon_with_face:"🌝",funeral_urn:"⚱️",game_die:"🎲",gear:"⚙️",gem:"💎",gemini:"♊️",ghost:"👻",gift:"🎁",gift_heart:"💝",girl:"👧",globe_with_meridians:"🌐",goal_net:"🥅",goat:"🐐",golf:"⛳️",golfing_man:"🏌️",golfing_woman:"🏌️&zwj;♀️",gorilla:"🦍",grapes:"🍇",green_apple:"🍏",green_book:"📗",green_heart:"💚",green_salad:"🥗",grey_exclamation:"❕",grey_question:"❔",grimacing:"😬",grin:"😁",grinning:"😀",guardsman:"💂",guardswoman:"💂&zwj;♀️",guitar:"🎸",gun:"🔫",haircut_woman:"💇",haircut_man:"💇&zwj;♂️",hamburger:"🍔",hammer:"🔨",hammer_and_pick:"⚒",hammer_and_wrench:"🛠",hamster:"🐹",hand:"✋",handbag:"👜",handshake:"🤝",hankey:"💩",hatched_chick:"🐥",hatching_chick:"🐣",headphones:"🎧",hear_no_evil:"🙉",heart:"❤️",heart_decoration:"💟",heart_eyes:"😍",heart_eyes_cat:"😻",heartbeat:"💓",heartpulse:"💗",hearts:"♥️",heavy_check_mark:"✔️",heavy_division_sign:"➗",heavy_dollar_sign:"💲",heavy_heart_exclamation:"❣️",heavy_minus_sign:"➖",heavy_multiplication_x:"✖️",heavy_plus_sign:"➕",helicopter:"🚁",herb:"🌿",hibiscus:"🌺",high_brightness:"🔆",high_heel:"👠",hocho:"🔪",hole:"🕳",honey_pot:"🍯",horse:"🐴",horse_racing:"🏇",hospital:"🏥",hot_pepper:"🌶",hotdog:"🌭",hotel:"🏨",hotsprings:"♨️",hourglass:"⌛️",hourglass_flowing_sand:"⏳",house:"🏠",house_with_garden:"🏡",houses:"🏘",hugs:"🤗",hushed:"😯",ice_cream:"🍨",ice_hockey:"🏒",ice_skate:"⛸",icecream:"🍦",id:"🆔",ideograph_advantage:"🉐",imp:"👿",inbox_tray:"📥",incoming_envelope:"📨",tipping_hand_woman:"💁",information_source:"ℹ️",innocent:"😇",interrobang:"⁉️",iphone:"📱",izakaya_lantern:"🏮",jack_o_lantern:"🎃",japan:"🗾",japanese_castle:"🏯",japanese_goblin:"👺",japanese_ogre:"👹",jeans:"👖",joy:"😂",joy_cat:"😹",joystick:"🕹",kaaba:"🕋",key:"🔑",keyboard:"⌨️",keycap_ten:"🔟",kick_scooter:"🛴",kimono:"👘",kiss:"💋",kissing:"😗",kissing_cat:"😽",kissing_closed_eyes:"😚",kissing_heart:"😘",kissing_smiling_eyes:"😙",kiwi_fruit:"🥝",koala:"🐨",koko:"🈁",label:"🏷",large_blue_circle:"🔵",large_blue_diamond:"🔷",large_orange_diamond:"🔶",last_quarter_moon:"🌗",last_quarter_moon_with_face:"🌜",latin_cross:"✝️",laughing:"😆",leaves:"🍃",ledger:"📒",left_luggage:"🛅",left_right_arrow:"↔️",leftwards_arrow_with_hook:"↩️",lemon:"🍋",leo:"♌️",leopard:"🐆",level_slider:"🎚",libra:"♎️",light_rail:"🚈",link:"🔗",lion:"🦁",lips:"👄",lipstick:"💄",lizard:"🦎",lock:"🔒",lock_with_ink_pen:"🔏",lollipop:"🍭",loop:"➿",loud_sound:"🔊",loudspeaker:"📢",love_hotel:"🏩",love_letter:"💌",low_brightness:"🔅",lying_face:"🤥",m:"Ⓜ️",mag:"🔍",mag_right:"🔎",mahjong:"🀄️",mailbox:"📫",mailbox_closed:"📪",mailbox_with_mail:"📬",mailbox_with_no_mail:"📭",man:"👨",man_artist:"👨&zwj;🎨",man_astronaut:"👨&zwj;🚀",man_cartwheeling:"🤸&zwj;♂️",man_cook:"👨&zwj;🍳",man_dancing:"🕺",man_facepalming:"🤦&zwj;♂️",man_factory_worker:"👨&zwj;🏭",man_farmer:"👨&zwj;🌾",man_firefighter:"👨&zwj;🚒",man_health_worker:"👨&zwj;⚕️",man_in_tuxedo:"🤵",man_judge:"👨&zwj;⚖️",man_juggling:"🤹&zwj;♂️",man_mechanic:"👨&zwj;🔧",man_office_worker:"👨&zwj;💼",man_pilot:"👨&zwj;✈️",man_playing_handball:"🤾&zwj;♂️",man_playing_water_polo:"🤽&zwj;♂️",man_scientist:"👨&zwj;🔬",man_shrugging:"🤷&zwj;♂️",man_singer:"👨&zwj;🎤",man_student:"👨&zwj;🎓",man_teacher:"👨&zwj;🏫",man_technologist:"👨&zwj;💻",man_with_gua_pi_mao:"👲",man_with_turban:"👳",tangerine:"🍊",mans_shoe:"👞",mantelpiece_clock:"🕰",maple_leaf:"🍁",martial_arts_uniform:"🥋",mask:"😷",massage_woman:"💆",massage_man:"💆&zwj;♂️",meat_on_bone:"🍖",medal_military:"🎖",medal_sports:"🏅",mega:"📣",melon:"🍈",memo:"📝",men_wrestling:"🤼&zwj;♂️",menorah:"🕎",mens:"🚹",metal:"🤘",metro:"🚇",microphone:"🎤",microscope:"🔬",milk_glass:"🥛",milky_way:"🌌",minibus:"🚐",minidisc:"💽",mobile_phone_off:"📴",money_mouth_face:"🤑",money_with_wings:"💸",moneybag:"💰",monkey:"🐒",monkey_face:"🐵",monorail:"🚝",moon:"🌔",mortar_board:"🎓",mosque:"🕌",motor_boat:"🛥",motor_scooter:"🛵",motorcycle:"🏍",motorway:"🛣",mount_fuji:"🗻",mountain:"⛰",mountain_biking_man:"🚵",mountain_biking_woman:"🚵&zwj;♀️",mountain_cableway:"🚠",mountain_railway:"🚞",mountain_snow:"🏔",mouse:"🐭",mouse2:"🐁",movie_camera:"🎥",moyai:"🗿",mrs_claus:"🤶",muscle:"💪",mushroom:"🍄",musical_keyboard:"🎹",musical_note:"🎵",musical_score:"🎼",mute:"🔇",nail_care:"💅",name_badge:"📛",national_park:"🏞",nauseated_face:"🤢",necktie:"👔",negative_squared_cross_mark:"❎",nerd_face:"🤓",neutral_face:"😐",new:"🆕",new_moon:"🌑",new_moon_with_face:"🌚",newspaper:"📰",newspaper_roll:"🗞",next_track_button:"⏭",ng:"🆖",no_good_man:"🙅&zwj;♂️",no_good_woman:"🙅",night_with_stars:"🌃",no_bell:"🔕",no_bicycles:"🚳",no_entry:"⛔️",no_entry_sign:"🚫",no_mobile_phones:"📵",no_mouth:"😶",no_pedestrians:"🚷",no_smoking:"🚭","non-potable_water":"🚱",nose:"👃",notebook:"📓",notebook_with_decorative_cover:"📔",notes:"🎶",nut_and_bolt:"🔩",o:"⭕️",o2:"🅾️",ocean:"🌊",octopus:"🐙",oden:"🍢",office:"🏢",oil_drum:"🛢",ok:"🆗",ok_hand:"👌",ok_man:"🙆&zwj;♂️",ok_woman:"🙆",old_key:"🗝",older_man:"👴",older_woman:"👵",om:"🕉",on:"🔛",oncoming_automobile:"🚘",oncoming_bus:"🚍",oncoming_police_car:"🚔",oncoming_taxi:"🚖",open_file_folder:"📂",open_hands:"👐",open_mouth:"😮",open_umbrella:"☂️",ophiuchus:"⛎",orange_book:"📙",orthodox_cross:"☦️",outbox_tray:"📤",owl:"🦉",ox:"🐂",package:"📦",page_facing_up:"📄",page_with_curl:"📃",pager:"📟",paintbrush:"🖌",palm_tree:"🌴",pancakes:"🥞",panda_face:"🐼",paperclip:"📎",paperclips:"🖇",parasol_on_ground:"⛱",parking:"🅿️",part_alternation_mark:"〽️",partly_sunny:"⛅️",passenger_ship:"🛳",passport_control:"🛂",pause_button:"⏸",peace_symbol:"☮️",peach:"🍑",peanuts:"🥜",pear:"🍐",pen:"🖊",pencil2:"✏️",penguin:"🐧",pensive:"😔",performing_arts:"🎭",persevere:"😣",person_fencing:"🤺",pouting_woman:"🙎",phone:"☎️",pick:"⛏",pig:"🐷",pig2:"🐖",pig_nose:"🐽",pill:"💊",pineapple:"🍍",ping_pong:"🏓",pisces:"♓️",pizza:"🍕",place_of_worship:"🛐",plate_with_cutlery:"🍽",play_or_pause_button:"⏯",point_down:"👇",point_left:"👈",point_right:"👉",point_up:"☝️",point_up_2:"👆",police_car:"🚓",policewoman:"👮&zwj;♀️",poodle:"🐩",popcorn:"🍿",post_office:"🏣",postal_horn:"📯",postbox:"📮",potable_water:"🚰",potato:"🥔",pouch:"👝",poultry_leg:"🍗",pound:"💷",rage:"😡",pouting_cat:"😾",pouting_man:"🙎&zwj;♂️",pray:"🙏",prayer_beads:"📿",pregnant_woman:"🤰",previous_track_button:"⏮",prince:"🤴",princess:"👸",printer:"🖨",purple_heart:"💜",purse:"👛",pushpin:"📌",put_litter_in_its_place:"🚮",question:"❓",rabbit:"🐰",rabbit2:"🐇",racehorse:"🐎",racing_car:"🏎",radio:"📻",radio_button:"🔘",radioactive:"☢️",railway_car:"🚃",railway_track:"🛤",rainbow:"🌈",rainbow_flag:"🏳️&zwj;🌈",raised_back_of_hand:"🤚",raised_hand_with_fingers_splayed:"🖐",raised_hands:"🙌",raising_hand_woman:"🙋",raising_hand_man:"🙋&zwj;♂️",ram:"🐏",ramen:"🍜",rat:"🐀",record_button:"⏺",recycle:"♻️",red_circle:"🔴",registered:"®️",relaxed:"☺️",relieved:"😌",reminder_ribbon:"🎗",repeat:"🔁",repeat_one:"🔂",rescue_worker_helmet:"⛑",restroom:"🚻",revolving_hearts:"💞",rewind:"⏪",rhinoceros:"🦏",ribbon:"🎀",rice:"🍚",rice_ball:"🍙",rice_cracker:"🍘",rice_scene:"🎑",right_anger_bubble:"🗯",ring:"💍",robot:"🤖",rocket:"🚀",rofl:"🤣",roll_eyes:"🙄",roller_coaster:"🎢",rooster:"🐓",rose:"🌹",rosette:"🏵",rotating_light:"🚨",round_pushpin:"📍",rowing_man:"🚣",rowing_woman:"🚣&zwj;♀️",rugby_football:"🏉",running_man:"🏃",running_shirt_with_sash:"🎽",running_woman:"🏃&zwj;♀️",sa:"🈂️",sagittarius:"♐️",sake:"🍶",sandal:"👡",santa:"🎅",satellite:"📡",saxophone:"🎷",school:"🏫",school_satchel:"🎒",scissors:"✂️",scorpion:"🦂",scorpius:"♏️",scream:"😱",scream_cat:"🙀",scroll:"📜",seat:"💺",secret:"㊙️",see_no_evil:"🙈",seedling:"🌱",selfie:"🤳",shallow_pan_of_food:"🥘",shamrock:"☘️",shark:"🦈",shaved_ice:"🍧",sheep:"🐑",shell:"🐚",shield:"🛡",shinto_shrine:"⛩",ship:"🚢",shirt:"👕",shopping:"🛍",shopping_cart:"🛒",shower:"🚿",shrimp:"🦐",signal_strength:"📶",six_pointed_star:"🔯",ski:"🎿",skier:"⛷",skull:"💀",skull_and_crossbones:"☠️",sleeping:"😴",sleeping_bed:"🛌",sleepy:"😪",slightly_frowning_face:"🙁",slightly_smiling_face:"🙂",slot_machine:"🎰",small_airplane:"🛩",small_blue_diamond:"🔹",small_orange_diamond:"🔸",small_red_triangle:"🔺",small_red_triangle_down:"🔻",smile:"😄",smile_cat:"😸",smiley:"😃",smiley_cat:"😺",smiling_imp:"😈",smirk:"😏",smirk_cat:"😼",smoking:"🚬",snail:"🐌",snake:"🐍",sneezing_face:"🤧",snowboarder:"🏂",snowflake:"❄️",snowman:"⛄️",snowman_with_snow:"☃️",sob:"😭",soccer:"⚽️",soon:"🔜",sos:"🆘",sound:"🔉",space_invader:"👾",spades:"♠️",spaghetti:"🍝",sparkle:"❇️",sparkler:"🎇",sparkles:"✨",sparkling_heart:"💖",speak_no_evil:"🙊",speaker:"🔈",speaking_head:"🗣",speech_balloon:"💬",speedboat:"🚤",spider:"🕷",spider_web:"🕸",spiral_calendar:"🗓",spiral_notepad:"🗒",spoon:"🥄",squid:"🦑",stadium:"🏟",star:"⭐️",star2:"🌟",star_and_crescent:"☪️",star_of_david:"✡️",stars:"🌠",station:"🚉",statue_of_liberty:"🗽",steam_locomotive:"🚂",stew:"🍲",stop_button:"⏹",stop_sign:"🛑",stopwatch:"⏱",straight_ruler:"📏",strawberry:"🍓",stuck_out_tongue:"😛",stuck_out_tongue_closed_eyes:"😝",stuck_out_tongue_winking_eye:"😜",studio_microphone:"🎙",stuffed_flatbread:"🥙",sun_behind_large_cloud:"🌥",sun_behind_rain_cloud:"🌦",sun_behind_small_cloud:"🌤",sun_with_face:"🌞",sunflower:"🌻",sunglasses:"😎",sunny:"☀️",sunrise:"🌅",sunrise_over_mountains:"🌄",surfing_man:"🏄",surfing_woman:"🏄&zwj;♀️",sushi:"🍣",suspension_railway:"🚟",sweat:"😓",sweat_drops:"💦",sweat_smile:"😅",sweet_potato:"🍠",swimming_man:"🏊",swimming_woman:"🏊&zwj;♀️",symbols:"🔣",synagogue:"🕍",syringe:"💉",taco:"🌮",tada:"🎉",tanabata_tree:"🎋",taurus:"♉️",taxi:"🚕",tea:"🍵",telephone_receiver:"📞",telescope:"🔭",tennis:"🎾",tent:"⛺️",thermometer:"🌡",thinking:"🤔",thought_balloon:"💭",ticket:"🎫",tickets:"🎟",tiger:"🐯",tiger2:"🐅",timer_clock:"⏲",tipping_hand_man:"💁&zwj;♂️",tired_face:"😫",tm:"™️",toilet:"🚽",tokyo_tower:"🗼",tomato:"🍅",tongue:"👅",top:"🔝",tophat:"🎩",tornado:"🌪",trackball:"🖲",tractor:"🚜",traffic_light:"🚥",train:"🚋",train2:"🚆",tram:"🚊",triangular_flag_on_post:"🚩",triangular_ruler:"📐",trident:"🔱",triumph:"😤",trolleybus:"🚎",trophy:"🏆",tropical_drink:"🍹",tropical_fish:"🐠",truck:"🚚",trumpet:"🎺",tulip:"🌷",tumbler_glass:"🥃",turkey:"🦃",turtle:"🐢",tv:"📺",twisted_rightwards_arrows:"🔀",two_hearts:"💕",two_men_holding_hands:"👬",two_women_holding_hands:"👭",u5272:"🈹",u5408:"🈴",u55b6:"🈺",u6307:"🈯️",u6708:"🈷️",u6709:"🈶",u6e80:"🈵",u7121:"🈚️",u7533:"🈸",u7981:"🈲",u7a7a:"🈳",umbrella:"☔️",unamused:"😒",underage:"🔞",unicorn:"🦄",unlock:"🔓",up:"🆙",upside_down_face:"🙃",v:"✌️",vertical_traffic_light:"🚦",vhs:"📼",vibration_mode:"📳",video_camera:"📹",video_game:"🎮",violin:"🎻",virgo:"♍️",volcano:"🌋",volleyball:"🏐",vs:"🆚",vulcan_salute:"🖖",walking_man:"🚶",walking_woman:"🚶&zwj;♀️",waning_crescent_moon:"🌘",waning_gibbous_moon:"🌖",warning:"⚠️",wastebasket:"🗑",watch:"⌚️",water_buffalo:"🐃",watermelon:"🍉",wave:"👋",wavy_dash:"〰️",waxing_crescent_moon:"🌒",wc:"🚾",weary:"😩",wedding:"💒",weight_lifting_man:"🏋️",weight_lifting_woman:"🏋️&zwj;♀️",whale:"🐳",whale2:"🐋",wheel_of_dharma:"☸️",wheelchair:"♿️",white_check_mark:"✅",white_circle:"⚪️",white_flag:"🏳️",white_flower:"💮",white_large_square:"⬜️",white_medium_small_square:"◽️",white_medium_square:"◻️",white_small_square:"▫️",white_square_button:"🔳",wilted_flower:"🥀",wind_chime:"🎐",wind_face:"🌬",wine_glass:"🍷",wink:"😉",wolf:"🐺",woman:"👩",woman_artist:"👩&zwj;🎨",woman_astronaut:"👩&zwj;🚀",woman_cartwheeling:"🤸&zwj;♀️",woman_cook:"👩&zwj;🍳",woman_facepalming:"🤦&zwj;♀️",woman_factory_worker:"👩&zwj;🏭",woman_farmer:"👩&zwj;🌾",woman_firefighter:"👩&zwj;🚒",woman_health_worker:"👩&zwj;⚕️",woman_judge:"👩&zwj;⚖️",woman_juggling:"🤹&zwj;♀️",woman_mechanic:"👩&zwj;🔧",woman_office_worker:"👩&zwj;💼",woman_pilot:"👩&zwj;✈️",woman_playing_handball:"🤾&zwj;♀️",woman_playing_water_polo:"🤽&zwj;♀️",woman_scientist:"👩&zwj;🔬",woman_shrugging:"🤷&zwj;♀️",woman_singer:"👩&zwj;🎤",woman_student:"👩&zwj;🎓",woman_teacher:"👩&zwj;🏫",woman_technologist:"👩&zwj;💻",woman_with_turban:"👳&zwj;♀️",womans_clothes:"👚",womans_hat:"👒",women_wrestling:"🤼&zwj;♀️",womens:"🚺",world_map:"🗺",worried:"😟",wrench:"🔧",writing_hand:"✍️",x:"❌",yellow_heart:"💛",yen:"💴",yin_yang:"☯️",yum:"😋",zap:"⚡️",zipper_mouth_face:"🤐",zzz:"💤",octocat:'<img
width="20" height="20" align="absmiddle"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAOwUlEQVR42uVbCVyO6RbPmn0sw9gZS0aZO4y5GTEUE2ObxjZjrbHEJVy3sWS5pkaWxjLEkCVDSbSgFLdESaWSLIVUSIi4kvb9f895vi/zbbR+yZ339/tbnu99n/ec/3Oe85xznufV0CjDBaAdwZqwnzCJ0FXjHV70/i8J5oQDhCFV8cJdq1atwqxZs+Ds7Iz4+HhqwgXCLELNKlK6G2Ej4e6lS5ewZcsWzJgxA+fOnWNZFqvzxT1v3boF/qcsBg0ahP3796OwsJAFWKYuIqjfPoS9cXFxWL58Obp06SInh5aWFr//jjoJWLlu3TolAorRuXNn7Ny5k4W4Spgj81xrgj5hLmED4RDhlNRygglBhADCSakpWxFMCHoETUJTwrYHDx7A1NT0je9nPHz4kN/fXl0EeI0aNeqtAjB69+4NPz8/FsSdlXvy5An8/f1hZ2cHCwsLGBsbY/To0cJy9PT0MGDAAAwePBhGRkbClNesWYODBw8iODgYOTk53M/d9evXo27duiW++8iRI3z/ZHURENOjR48ShSjGuHHjhHJ16tQp9TOKaNWqlZKpvw1MHluQOpSvk5eXh5YtW5ZbmarAvHnzmIBd6iCgXnZ2Npo1a1atCWAfwY5SHQTUKCoqQocOHao1AebmHBJgi7p8QBDP6epMwKFDvMDAWF0ELLS1ta3WBNy9e5cJMFIXAdvt7e2rNQHDhw9nAv5D+KKylV9y8+bNCi1pVYWZM2cyCfaVTcDdsqzH7xpBQRxcwqyylLdi5/K+KM/Q0dFhAqIri4Bn1T0AUgVpdmhYUeVHnD59+r1TnjF27Fgm4HhFCThoYmLyXhLQoEGD4mRKsyIE3OrZs+d7SQCDCyZcNSqv8k1evXoFTU3NUr+wzUcfYqRBf8yb/C2WzfoBFoTF08fBdMIITDD8CsP1+kL30x7Q6dYZH7drjfZ0f4fWLdG1Q1t81qMLBvTRwejB/TBl1BDMnzQGS2dMxKo5k7Fs9iSY/jAaBvR8Pc26pZaH02quLZSXgO6xsbGlelGnli1wZKcVMqN8gKcRwItrf+K/VB95doXaLwOJIVSzOU/+2Re5kV7IuuyJrIhTyLt6mmztLBBPNZLHoUAy9fE8UvJ8ikxfj8PwJPQErJeYlkquTZs2MQFLykuANgc/Jb2kn3Z3ZMaQUrmxwO1zyAo7gfRAJ6RfOIyMEFdkXj5F8BTK5lzxQv610yi8QcFatI8gQoCIK7x+hojwRnaE5H4JTiEj9Pjr/rJDqcZyn9b4ovu45LYbdWvXeqtsXMHiSlZ5CegRExPz1hd83PYj5POo0QinXyLFg48hnZTOiQ1Dzr1IZEaeQRoJn0HKZIR7lA2kfHrQUerXHTlx4ZL+rnjjFRGRGeYB5MUj2GnbW+XbuJFrp1heXgI6JCYmvvUFN1x3Aek3SWkapRAXMeJFGS8ge2Xfuog0toaykED3Mpk8+shOk+sv68Y50V9WuKewBKt5094o39atW/mRf5WXgIYZGRlo3Lixys4nj6A6Z1YMcqRCpwU4ouDlUyHk/QA/hNttR25Wlvh/ZthJUsil9ATQ/axkYbqEzDgfL0Ts/x35+aLyTES7IY36Q6w/+Q4/tP6wuUoZ9+7dy7ebVmQZjO/atavKzn32rAdeXkd6KCkXdAxZ13yFcLFnvPD73zrDVrsdTs6eggKSuSjjORHkUGoC0i86Iyc6QPQX7eqMnTodYNuzHU4vnosiaitMSUSavwMy6d3IvEUrzViVMrq5uXEX4ytCgL++vr5Sx7Vr1cIDX0dKkQJfj37Rs3jw1sBxkwlwGD4Ax3+ciN1faCHW76xQRFgAOcjSEMBkIe0x8nLzcez7kTg8Rh/uxuOxR/cTJISFSfq7eATpZCk8CAfXLVFJwIULXHnHoIoQYLtw4UKljps2aogXQcQuef/XAiMDKY+S4DhyEFwpDnCj9f+Afl8EbbWRTANaAdihlYoAMn8aZzyNuYODX/eD29TvRH/7v+qN8H27JdOAyWQfQQ74xPafVRLAPox9WUlK6hIGEgx4f00Kg2JcvHhRqeP6FIwknXemyen/2gLIIeC/CYk49M0AuE4xgtu0sThg8AUCN62TEuBdRgJo2Y+Kxh9D/k59SQiwH9QHobt3SAk4KSGA4oWjm1YqyVi8U6Soj4yOrHM/jTAyKVby/PnzIoNi8L+L4eXlpXoFcLcTgc1rAlISkJeXDxeK2A6P1hdTwI6mQPTJE+WbAlnJyE7PhNO3Q3BkrKGYWtxfHMkkmQLO0ilwA7+vXqAkn66urtBLUZ9iHfm30NBQaPAf165dA0d9vP2UlJSEp0+f4vHjx3j06JH4e+rUqUovcNmyGkiNEkLwklXsBG+ecMUOnfbYod1emG5uboFKJ8jPFVD0l0dBUHqoPDHpQeQEb0qc4FUHe3KAbYUT9JgzDbwOFL5MfN0fXkXhJ5PxSvLt2LFD1Ah5u4z1YJ14l4qnBe8v3rhxAzz4PAVG8nLHivIP0dHRiIiIQGRkpEgmrl69ClW1QBMjQ7LDW8hmU+RRI69ckJIkhL7jfRJBm62R+TJVYq6h0jhBRslsivqenT2MF/7OyI70VmkFhWnPJaS6OyPkt43IycqR9EfWlH7JDQUUTuNhCHR7Ke9YcRp/5coVoQPrcvnyZURFRYmBZlLS0kR8MVLD29sbnp6e8PHxQUBAgCgn8YO8E3z79m3BGKeVc+bMkXuBZt06SA12F/F5Go0gR4C8HBalPZMPXKL8lQKhPAqF+f97KXFyNx6HQsoPsshJ/kmAp2TKkJLISpXvjyxNhMYcDVLOEO+lPDi8B5mamipkZx1YF9YpJCRErAy+vr5CZ9ZdWABhDGEYYTBhAOFz3g4nfMJelNCbkNCpUye5F034mvxIPi1/FM+zQCw0k5B9O0iEr5kRXkqhMJOVf9NXIHjtT7hmaymSoBzKETimkAuFpaF1dkwI9RcmIYaXv3BJXoGCuyIgk5WpefPmKCgoYK46SmX/RKoL69Sfl0WuFEl1HlmWJXE5z6WmTZvKJxxmxkIQ3AuU5APk6NICj4hRT6eITTEEzqWk55HHPjz3cxJhNF5cxeNT9kj2cRDTQjEkzpDtjyyCic5l5fEA7uSHFEefR5pPsahrb2B9QkICFHeJ51HunkdLIg0VLY0BFKdLwllVHp4dHyvst3QuEiiju21vA/+VZkiluIKt4I3RIfWXQ4QgKUxkni47LJWUP3PmjHo2RxVI+CebmKJP6EiFDVurxUgmExe5PHlnPAkn8w4QqW62NCVmYopozid5H0CI9RKE21ggJeAYEeMnfitOnRn5XCfgeJ+VTosWQU8MOc6ZE0cqnUm4fv165SrPBVHCfMI4TowUfmOfsIcdJh92kBWmUcP6GDt8EDZbzIffH5tx3/ewSFjw5LKk0MEFEkZenDBjgew7Yiog5brkt+QrknvJmhIp4Apw/A1bVpjhG/0v5d7Vrl07bNu2TelUSqUoz8uI3Z49OEtBAy+TdP1CqKtwHzvQUxxgTJs2TeX5gdq1a0ObSmCjh+jB+NuvRamL1+3ls77HCip1rTSdJP5eNnMizKndjMLoH42G4bthX+FzHS3UVVEC69evH3799VeKMXJZrlWKclUGAZ5jxoxB02ZNsNlxH74aagBHZyex986HlVTczyGmI58h4CjL2toa48ePFxsUPEotWrQoc0GT0/C2bduiY8eO4ISMcxLeoOFYhS6qm2EpoZG65jmbv+dPSyRZlt5QfVjvtX19AOFNL+aDFNI4m0eFc9Ho5ORkaGtrl5kAVp6DMOk88efEjLe++ZhclZwHTJHEHbs4YOCmLj2645fdvwnTK42zoXtaEHwNDQ3LXdZm5yad3/2r+gQmDsRnIF5KAldX6zdsgG/GG8F44Vzcu3eP2y1K6GPr2rVrK1zbnz59Or/LoaoJCPZ4kCZsjw9GECL79OmDj9q2wb+320C3/5fgPQO6Vrzh+fpcDqxXr16lbHBwgkZXm6okYJr0ECMrX5vraiJ1lArEjrEnzWuOqemiYj9spGd2ee478XkiPsJakmJ83qA05/8qXNurJFLiunXrhpo1a6LxB02wyHIFZpovgOHwYfjZ0hK2lH5u2rwZ5suWYv5ycyUlmjRpgl69eimlrFy3kwuoyOvXr19frm3RokVMwPZ3TYC57E6xVq+e6KzVDSaL/oEp82Zh8IhhWLjGAp/p9oX5ujVKBNjY2MDV1VWuzd3dXaTesm2biUQuZ8u28elSPmKr8a4vdog8GnJpcT1N1KHUuBbt0jSgWuGbzJh3mVhh2TYHBwdxjFa2jVcZnvPVlQBOLXdZWlqW2ZFxNYYVlm07fPgwAgMD5dr4OD5HeHLFFxM+O42DGtXhIkFaMQlcUjIzM0P37t1Ro0YNpZPjPJcVK7SOjo5ybU5OTqIAo0gAh97VlgAZIj4l8Pn4WFaO64ocuXG6zJtDbMqySnC7IgF8uptLVrJtq1evFuWqak+A4j4i4TNpltiJ8LPiNFFFwNGjRyWFyfedAFUny/joekkEuLi4KK0CfykCeFnkiu1flgBeFtl3/D8SsMbKykpOifv37ysRcPz4cVHKUiSA8wwNdR9/VTMBSh9Y8S4Nf2qnSICiBbDzVCRg9uzZTMC+94kAv6FDh8opwRsVHPjItnl4eEDxHNLKlStFXV+2javQ/M1SpZe+1KA4L4G7WDG57fSm/OUbXiqG0ewAFYOeYcN4fwZhvLkp2y4tftrxcltdlf/w+fPn4qNGxTCYU2m6nrRu3VqunT/EoiuZvw6TTZHpyuNNmEaNGsndP3fu3OJAq1N1JOAHDmyKheVtNP4OkE2crULRAW7fvl20EyyLy24a8p+/7WISFixYIMLt4t82bNhQYjXqXREgPq3j74mlX3AmSL8E1eOPIBXnuVT5OsVZpuLnOMeOHeN7vifwiYhYzhC5IpwlOXj1QXWdBmy/XWU/X+UqMZfKBw4cKAobHPlJlZe9h6tOu+7cuSN2dg0MDMSSyZUpmXvaSD+crq/xvl0k9BTCRa7qEPq+5T4t6ffF52WVV+f1P6zyLG30bsU4AAAAAElFTkSuQmCC">',showdown:'<img
width="20" height="20" align="absmiddle"
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAECtaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzA2NyA3OS4xNTc3NDcsIDIwMTUvMDMvMzAtMjM6NDA6NDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMTUtMDEtMTVUMjE6MDE6MTlaPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNy0xMC0yNFQxMzozMTozMCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTctMTAtMjRUMTM6MzE6MzArMDE6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8cGhvdG9zaG9wOklDQ1Byb2ZpbGU+c1JHQiBJRUM2MTk2Ni0yLjE8L3Bob3Rvc2hvcDpJQ0NQcm9maWxlPgogICAgICAgICA8cGhvdG9zaG9wOlRleHRMYXllcnM+CiAgICAgICAgICAgIDxyZGY6QmFnPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHBob3Rvc2hvcDpMYXllck5hbWU+UyAtPC9waG90b3Nob3A6TGF5ZXJOYW1lPgogICAgICAgICAgICAgICAgICA8cGhvdG9zaG9wOkxheWVyVGV4dD5TIC08L3Bob3Rvc2hvcDpMYXllclRleHQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpCYWc+CiAgICAgICAgIDwvcGhvdG9zaG9wOlRleHRMYXllcnM+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6N2NkMzQxNzctOWYyZi0yNDRiLWEyYjQtMzU1MzJkY2Y1MWJiPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6M2E1YzgxYmYtYjhiNy0xMWU3LTk0NDktYTQ2MzdlZjJkNjMzPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NjBDNUFFNjVGNjlDRTQxMTk0NUE4NTVFM0JDQTdFRUI8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NjBDNUFFNjVGNjlDRTQxMTk0NUE4NTVFM0JDQTdFRUI8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTUtMDEtMTVUMjE6MDE6MTlaPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6ODZjNjBkMGQtOGY0Yy01ZTRlLWEwMjQtODI4ZWQyNTIwZDc3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE3LTEwLTI0VDEzOjMxOjMwKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jb252ZXJ0ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+ZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZzwvc3RFdnQ6cGFyYW1ldGVycz4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPmRlcml2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnBhcmFtZXRlcnM+Y29udmVydGVkIGZyb20gYXBwbGljYXRpb24vdm5kLmFkb2JlLnBob3Rvc2hvcCB0byBpbWFnZS9wbmc8L3N0RXZ0OnBhcmFtZXRlcnM+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjdjZDM0MTc3LTlmMmYtMjQ0Yi1hMmI0LTM1NTMyZGNmNTFiYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNy0xMC0yNFQxMzozMTozMCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx4bXBNTTpEZXJpdmVkRnJvbSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgIDxzdFJlZjppbnN0YW5jZUlEPnhtcC5paWQ6ODZjNjBkMGQtOGY0Yy01ZTRlLWEwMjQtODI4ZWQyNTIwZDc3PC9zdFJlZjppbnN0YW5jZUlEPgogICAgICAgICAgICA8c3RSZWY6ZG9jdW1lbnRJRD54bXAuZGlkOjYwQzVBRTY1RjY5Q0U0MTE5NDVBODU1RTNCQ0E3RUVCPC9zdFJlZjpkb2N1bWVudElEPgogICAgICAgICAgICA8c3RSZWY6b3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6NjBDNUFFNjVGNjlDRTQxMTk0NUE4NTVFM0JDQTdFRUI8L3N0UmVmOm9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NjQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Pse7bzcAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAA1JJREFUeNrsm1+OmlAUhz+aeS9dwZggJn1AnRUMO6jpBgZXULuC2hWUWUGZBTSxKyiuoA4mfUBMnB04K5g+9DihRBHlyh/lJLwIXLgf99xzzu9etZeXFy7Z3nDh1gBoAFy4XeVtQNO0zNcapmUDfUBPnFoBfhQGq6IBaHmjwD4Ahmk5wAD4kKG5J8CNwsAFaHe6DvA9cc0wCgOv8gDka3vA9RHNPgo0D7hNnJtGYWBXxgV2dH4MfMnRRA+Y1WIO2NJ5F/ikoKm3tYsChmkNFHW+fmHQMC1dfHaXPQP3wM1yMdc2B/AOGALTWobBmI1Shu0UGCwX83XyRBQGawHntTtdG5gUNfxVu4CTNqNv6/wWGL7kCc+1AmCYVisl3I2ydD4GYZUCs7IjoLXrxHIx9w9tLAqDCfBwDrXAY457x+cAoCfuwRGjYFUnAGk+PsjR7s8Dn1VeLWCYVlpDw+VivjVHSHt+u9PVJbzGzZXQWTkAkz0V31fATUaEsjVJlQBs4FeGcteLgzgbAALBA+4y3voAeJL8nA0AHfClnM1qm1HhnYUidCSE+KzvSSJUTwAxCOMcpfETMFYpfRUKIAbCFhC3OTJJJwqDWS0BxED0JZ4Pjix1P2+E0loCSMBwyK4S/xc1ojBwag8gMU84cvTKGgmlAYhngu1O9xAXuVE5J1QCQCz3bwHuHvdQui5QKQAxEO6eEKpsFCgTRSXkvdoxSlBMCxhJJbgrrbZRtHCiShN0pRB6PeQ3ckBw2K0oKXMBVYJIP+Nvh9qulFivGoBt1lLQxowT2ykBXCfnhZIglgYACWmqXQv+baioBYCeiCQHm+QEg1O7RhF7hO4OhSAhcJKSFU7qBGADwZeqMMuXn6TUBw8qlaMrirNb4LdhWlP+SWD+cjFfxTpuS2GUpik+o3jFSEkqbJiWn0P0OMSGqlWiOu0TvD+FRHZKAE+oW+cfRmEwqlsesJJEJs8y91QqP+9UL6lqEtz2gpuNEY5sm9sIHln2DRa2aFKGJtiXkZEMiWtgVvRKUSUFkSKt2S7fAGgAXLYpmQQXf36MUChTZdUa2u8/rkvPA6Tz30r4eH3ybcBS5gJ6SaNXb+aABkA1AMxKenclBZLW/He4cYEGwEXb3wEASelexk6LIIIAAAAASUVORK5CYII=">'},I.Converter=function(g){"use
strict";function
C(g,C){if(C=C||null,I.helper.isString(g)){if(g=I.helper.stdExtName(g),C=g,I.extensions[g])return
console.warn("DEPRECATION WARNING: "+g+" is an old extension
that uses a deprecated loading method.Please inform the developer that the
extension should be updated!"),void
e(I.extensions[g],g);if(I.helper.isUndefined(r[g]))throw
Error('Extension "'+g+'" could not be loaded. It
was either not found or is not a valid
extension.');g=r[g]}"function"==typeof
g&&(g=g()),I.helper.isArray(g)||(g=[g]);var
t=A(g,C);if(!t.valid)throw Error(t.error);for(var
a=0;a<g.length;++a){switch(g[a].type){case"lang":l.push(g[a]);break;case"output":c.push(g[a])}if(g[a].hasOwnProperty("listeners"))for(var
n in
g[a].listeners)g[a].listeners.hasOwnProperty(n)&&o(n,g[a].listeners[n])}}function
e(g,C){"function"==typeof g&&(g=g(new
I.Converter)),I.helper.isArray(g)||(g=[g]);var e=A(g,C);if(!e.valid)throw
Error(e.error);for(var
r=0;r<g.length;++r)switch(g[r].type){case"lang":l.push(g[r]);break;case"output":c.push(g[r]);break;default:throw
Error("Extension loader error: Type unrecognized!!!")}}function
o(g,A){if(!I.helper.isString(g))throw Error("Invalid argument in
converter.listen() method: name must be a string, but "+typeof
g+" given");if("function"!=typeof A)throw
Error("Invalid argument in converter.listen() method: callback must be
a function, but "+typeof A+"
given");u.hasOwnProperty(g)||(u[g]=[]),u[g].push(A)}function s(g){var
A=g.match(/^\s*/)[0].length,C=new
RegExp("^\\s{0,"+A+"}","gm");return
g.replace(C,"")}var
i={},l=[],c=[],u={},p=a;!function(){g=g||{};for(var A in
t)t.hasOwnProperty(A)&&(i[A]=t[A]);if("object"!=typeof
g)throw Error("Converter expects the passed parameter to be an object,
but "+typeof g+" was passed instead.");for(var e in
g)g.hasOwnProperty(e)&&(i[e]=g[e]);i.extensions&&I.helper.forEach(i.extensions,C)}(),this._dispatch=function(g,A,C,I){if(u.hasOwnProperty(g))for(var
e=0;e<u[g].length;++e){var r=u[g][e](g,A,this,C,I);r&&void
0!==r&&(A=r)}return A},this.listen=function(g,A){return
o(g,A),this},this.makeHtml=function(g){if(!g)return g;var
A={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:l,outputModifiers:c,converter:this,ghCodeBlocks:[]};return
g=g.replace(/¨/g,"¨T"),g=g.replace(/\$/g,"¨D"),g=g.replace(/\r\n/g,"\n"),g=g.replace(/\r/g,"\n"),g=g.replace(/\u00A0/g,"
"),i.smartIndentationFix&&(g=s(g)),g="\n\n"+g+"\n\n",g=I.subParser("detab")(g,i,A),g=g.replace(/^[
\t]+$/gm,""),I.helper.forEach(l,function(C){g=I.subParser("runExtension")(C,g,i,A)}),g=I.subParser("hashPreCodeTags")(g,i,A),g=I.subParser("githubCodeBlocks")(g,i,A),g=I.subParser("hashHTMLBlocks")(g,i,A),g=I.subParser("hashCodeTags")(g,i,A),g=I.subParser("stripLinkDefinitions")(g,i,A),g=I.subParser("blockGamut")(g,i,A),g=I.subParser("unhashHTMLSpans")(g,i,A),g=I.subParser("unescapeSpecialChars")(g,i,A),g=g.replace(/¨D/g,"$$"),g=g.replace(/¨T/g,"¨"),I.helper.forEach(c,function(C){g=I.subParser("runExtension")(C,g,i,A)}),g},this.setOption=function(g,A){i[g]=A},this.getOption=function(g){return
i[g]},this.getOptions=function(){return
i},this.addExtension=function(g,A){C(g,A=A||null)},this.useExtension=function(g){C(g)},this.setFlavor=function(g){if(!n.hasOwnProperty(g))throw
Error(g+" flavor was not found");var A=n[g];p=g;for(var C in
A)A.hasOwnProperty(C)&&(i[C]=A[C])},this.getFlavor=function(){return
p},this.removeExtension=function(g){I.helper.isArray(g)||(g=[g]);for(var
A=0;A<g.length;++A){for(var
C=g[A],e=0;e<l.length;++e)l[e]===C&&l[e].splice(e,1);for(;0<c.length;++e)c[0]===C&&c[0].splice(e,1)}},this.getAllExtensions=function(){return{language:l,output:c}}},I.subParser("anchors",function(g,A,C){"use
strict";var
e=function(g,e,r,t,a,n,o){if(I.helper.isUndefined(o)&&(o=""),r=r.toLowerCase(),g.search(/\(<?\s*>?
?(['"].*['"])?\)$/m)>-1)t="";else
if(!t){if(r||(r=e.toLowerCase().replace(/ ?\n/g,"
")),t="#"+r,I.helper.isUndefined(C.gUrls[r]))return
g;t=C.gUrls[r],I.helper.isUndefined(C.gTitles[r])||(o=C.gTitles[r])}var
s='<a
href="'+(t=t.replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback))+'"';return""!==o&&null!==o&&(s+='
title="'+(o=(o=o.replace(/"/g,"&quot;")).replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback))+'"'),A.openLinksInNewWindow&&(s+='
target="¨E95Eblank"'),s+=">"+e+"</a>"};return
g=(g=C.converter._dispatch("anchors.before",g,A,C)).replace(/\[((?:\[[^\]]*]|[^\[\]])*)]
?(?:\n *)?\[(.*?)]()()()()/g,e),g=g.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[
\t]*\([ \t]?<([^>]*)>(?:[ \t]*((["'])([^"]*?)\5))?[
\t]?\)/g,e),g=g.replace(/\[((?:\[[^\]]*]|[^\[\]])*)]()[ \t]*\([
\t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:[
\t]*((["'])([^"]*?)\5))?[
\t]?\)/g,e),g=g.replace(/\[([^\[\]]+)]()()()()()/g,e),A.ghMentions&&(g=g.replace(/(^|\s)(\\)?(@([a-z\d\-]+))(?=[.!?;,[\]()]|\s|$)/gim,function(g,C,e,r,t){if("\\"===e)return
C+r;if(!I.helper.isString(A.ghMentionsLink))throw new
Error("ghMentionsLink option must be a string");var
a=A.ghMentionsLink.replace(/\{u}/g,t),n="";return
A.openLinksInNewWindow&&(n='
target="¨E95Eblank"'),C+'<a
href="'+a+'"'+n+">"+r+"</a>"})),g=C.converter._dispatch("anchors.after",g,A,C)});var
s=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+?\.[^'">\s]+?)()(\1)?(?=\s|$)(?!["<>])/gi,i=/([*~_]+|\b)(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+?)([.!?,()\[\]])?(\1)?(?=\s|$)(?!["<>])/gi,l=/()<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)()>()/gi,c=/(^|\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?=$|\s)/gim,u=/<()(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,p=function(g){"use
strict";return function(A,C,e,r,t,a,n){var
o=e=e.replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback),s="",i="",l=C||"",c=n||"";return/^www\./i.test(e)&&(e=e.replace(/^www\./i,"http://www.")),g.excludeTrailingPunctuationFromURLs&&a&&(s=a),g.openLinksInNewWindow&&(i='
target="¨E95Eblank"'),l+'<a
href="'+e+'"'+i+">"+o+"</a>"+s+c}},d=function(g,A){"use
strict";return function(C,e,r){var t="mailto:";return
e=e||"",r=I.subParser("unescapeSpecialChars")(r,g,A),g.encodeEmails?(t=I.helper.encodeEmailAddress(t+r),r=I.helper.encodeEmailAddress(r)):t+=r,e+'<a
href="'+t+'">'+r+"</a>"}};I.subParser("autoLinks",function(g,A,C){"use
strict";return
g=C.converter._dispatch("autoLinks.before",g,A,C),g=g.replace(l,p(A)),g=g.replace(u,d(A,C)),g=C.converter._dispatch("autoLinks.after",g,A,C)}),I.subParser("simplifiedAutoLinks",function(g,A,C){"use
strict";return
A.simplifiedAutoLink?(g=C.converter._dispatch("simplifiedAutoLinks.before",g,A,C),g=A.excludeTrailingPunctuationFromURLs?g.replace(i,p(A)):g.replace(s,p(A)),g=g.replace(c,d(A,C)),g=C.converter._dispatch("simplifiedAutoLinks.after",g,A,C)):g}),I.subParser("blockGamut",function(g,A,C){"use
strict";return
g=C.converter._dispatch("blockGamut.before",g,A,C),g=I.subParser("blockQuotes")(g,A,C),g=I.subParser("headers")(g,A,C),g=I.subParser("horizontalRule")(g,A,C),g=I.subParser("lists")(g,A,C),g=I.subParser("codeBlocks")(g,A,C),g=I.subParser("tables")(g,A,C),g=I.subParser("hashHTMLBlocks")(g,A,C),g=I.subParser("paragraphs")(g,A,C),g=C.converter._dispatch("blockGamut.after",g,A,C)}),I.subParser("blockQuotes",function(g,A,C){"use
strict";return
g=C.converter._dispatch("blockQuotes.before",g,A,C),g=g.replace(/((^
{0,3}>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(g,e){var r=e;return
r=r.replace(/^[ \t]*>[
\t]?/gm,"¨0"),r=r.replace(/¨0/g,""),r=r.replace(/^[
\t]+$/gm,""),r=I.subParser("githubCodeBlocks")(r,A,C),r=I.subParser("blockGamut")(r,A,C),r=r.replace(/(^|\n)/g,"$1
 "),r=r.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(g,A){var
C=A;return C=C.replace(/^ 
/gm,"¨0"),C=C.replace(/¨0/g,"")}),I.subParser("hashBlock")("<blockquote>\n"+r+"\n</blockquote>",A,C)}),g=C.converter._dispatch("blockQuotes.after",g,A,C)}),I.subParser("codeBlocks",function(g,A,C){"use
strict";g=C.converter._dispatch("codeBlocks.before",g,A,C);var
e=/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^
\t\n]|(?=¨0))/g;return
g=(g+="¨0").replace(e,function(g,e,r){var
t=e,a=r,n="\n";return
t=I.subParser("outdent")(t,A,C),t=I.subParser("encodeCode")(t,A,C),t=I.subParser("detab")(t,A,C),t=t.replace(/^\n+/g,""),t=t.replace(/\n+$/g,""),A.omitExtraWLInCodeBlocks&&(n=""),t="<pre><code>"+t+n+"</code></pre>",I.subParser("hashBlock")(t,A,C)+a}),g=g.replace(/¨0/,""),g=C.converter._dispatch("codeBlocks.after",g,A,C)}),I.subParser("codeSpans",function(g,A,C){"use
strict";return void
0===(g=C.converter._dispatch("codeSpans.before",g,A,C))&&(g=""),g=g.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(g,e,r,t){var
a=t;return a=a.replace(/^([ \t]*)/g,""),a=a.replace(/[
\t]*$/g,""),a=I.subParser("encodeCode")(a,A,C),e+"<code>"+a+"</code>"}),g=C.converter._dispatch("codeSpans.after",g,A,C)}),I.subParser("detab",function(g,A,C){"use
strict";return
g=C.converter._dispatch("detab.before",g,A,C),g=g.replace(/\t(?=\t)/g,"
  
"),g=g.replace(/\t/g,"¨A¨B"),g=g.replace(/¨B(.+?)¨A/g,function(g,A){for(var
C=A,I=4-C.length%4,e=0;e<I;e++)C+=" ";return
C}),g=g.replace(/¨A/g,"   
"),g=g.replace(/¨B/g,""),g=C.converter._dispatch("detab.after",g,A,C)}),I.subParser("ellipsis",function(g,A,C){"use
strict";return
g=C.converter._dispatch("ellipsis.before",g,A,C),g=g.replace(/\.\.\./g,"…"),g=C.converter._dispatch("ellipsis.after",g,A,C)}),I.subParser("emoji",function(g,A,C){"use
strict";if(!A.emoji)return g;var e=/:([\S]+?):/g;return
g=(g=C.converter._dispatch("emoji.before",g,A,C)).replace(e,function(g,A){return
I.helper.emojis.hasOwnProperty(A)?I.helper.emojis[A]:g}),g=C.converter._dispatch("emoji.after",g,A,C)}),I.subParser("encodeAmpsAndAngles",function(g,A,C){"use
strict";return
g=C.converter._dispatch("encodeAmpsAndAngles.before",g,A,C),g=g.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;"),g=g.replace(/<(?![a-z\/?$!])/gi,"&lt;"),g=g.replace(/</g,"&lt;"),g=g.replace(/>/g,"&gt;"),g=C.converter._dispatch("encodeAmpsAndAngles.after",g,A,C)}),I.subParser("encodeBackslashEscapes",function(g,A,C){"use
strict";return
g=C.converter._dispatch("encodeBackslashEscapes.before",g,A,C),g=g.replace(/\\(\\)/g,I.helper.escapeCharactersCallback),g=g.replace(/\\([`*_{}\[\]()>#+.!~=|-])/g,I.helper.escapeCharactersCallback),g=C.converter._dispatch("encodeBackslashEscapes.after",g,A,C)}),I.subParser("encodeCode",function(g,A,C){"use
strict";return
g=C.converter._dispatch("encodeCode.before",g,A,C),g=g.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/([*_{}\[\]\\=~-])/g,I.helper.escapeCharactersCallback),g=C.converter._dispatch("encodeCode.after",g,A,C)}),I.subParser("escapeSpecialCharsWithinTagAttributes",function(g,A,C){"use
strict";var
e=/<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,r=/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;return
g=(g=C.converter._dispatch("escapeSpecialCharsWithinTagAttributes.before",g,A,C)).replace(e,function(g){return
g.replace(/(.)<\/?code>(?=.)/g,"$1`").replace(/([\\`*_~=|])/g,I.helper.escapeCharactersCallback)}),g=g.replace(r,function(g){return
g.replace(/([\\`*_~=|])/g,I.helper.escapeCharactersCallback)}),g=C.converter._dispatch("escapeSpecialCharsWithinTagAttributes.after",g,A,C)}),I.subParser("githubCodeBlocks",function(g,A,C){"use
strict";return
A.ghCodeBlocks?(g=C.converter._dispatch("githubCodeBlocks.before",g,A,C),g+="¨0",g=g.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g,function(g,e,r){var
t=A.omitExtraWLInCodeBlocks?"":"\n";return
r=I.subParser("encodeCode")(r,A,C),r=I.subParser("detab")(r,A,C),r=r.replace(/^\n+/g,""),r=r.replace(/\n+$/g,""),r="<pre><code"+(e?'
class="'+e+"
language-"+e+'"':"")+">"+r+t+"</code></pre>",r=I.subParser("hashBlock")(r,A,C),"\n\n¨G"+(C.ghCodeBlocks.push({text:g,codeblock:r})-1)+"G\n\n"}),g=g.replace(/¨0/,""),C.converter._dispatch("githubCodeBlocks.after",g,A,C)):g}),I.subParser("hashBlock",function(g,A,C){"use
strict";return
g=C.converter._dispatch("hashBlock.before",g,A,C),g=g.replace(/(^\n+|\n+$)/g,""),g="\n\n¨K"+(C.gHtmlBlocks.push(g)-1)+"K\n\n",g=C.converter._dispatch("hashBlock.after",g,A,C)}),I.subParser("hashCodeTags",function(g,A,C){"use
strict";g=C.converter._dispatch("hashCodeTags.before",g,A,C);return
g=I.helper.replaceRecursiveRegExp(g,function(g,e,r,t){var
a=r+I.subParser("encodeCode")(e,A,C)+t;return"¨C"+(C.gHtmlSpans.push(a)-1)+"C"},"<code\\b[^>]*>","</code>","gim"),g=C.converter._dispatch("hashCodeTags.after",g,A,C)}),I.subParser("hashElement",function(g,A,C){"use
strict";return function(g,A){var I=A;return
I=I.replace(/\n\n/g,"\n"),I=I.replace(/^\n/,""),I=I.replace(/\n+$/g,""),I="\n\n¨K"+(C.gHtmlBlocks.push(I)-1)+"K\n\n"}}),I.subParser("hashHTMLBlocks",function(g,A,C){"use
strict";g=C.converter._dispatch("hashHTMLBlocks.before",g,A,C);var
e=["pre","div","h1","h2","h3","h4","h5","h6","blockquote","table","dl","ol","ul","script","noscript","form","fieldset","iframe","math","style","section","header","footer","nav","article","aside","address","audio","canvas","figure","hgroup","output","video","p"];A.backslashEscapesHTMLTags&&(g=g.replace(/\\<(\/?[^>]+?)>/g,function(g,A){return"&lt;"+A+"&gt;"}));for(var
r=0;r<e.length;++r)for(var t,a=new RegExp("^
{0,3}(<"+e[r]+"\\b[^>]*>)","im"),n="<"+e[r]+"\\b[^>]*>",o="</"+e[r]+">";-1!==(t=I.helper.regexIndexOf(g,a));){var
s=I.helper.splitAtIndex(g,t),i=I.helper.replaceRecursiveRegExp(s[1],function(g,A,I,e){var
r=g;return-1!==I.search(/\bmarkdown\b/)&&(r=I+C.converter.makeHtml(A)+e),"\n\n¨K"+(C.gHtmlBlocks.push(r)-1)+"K\n\n"},n,o,"im");if(i===s[1])break;g=s[0].concat(i)}return
g=g.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[
\t]*(?=\n{2,}))/g,I.subParser("hashElement")(g,A,C)),g=I.helper.replaceRecursiveRegExp(g,function(g){return"\n\n¨K"+(C.gHtmlBlocks.push(g)-1)+"K\n\n"},"^
{0,3}\x3c!--","--\x3e","gm"),g=g.replace(/(?:\n\n)(
{0,3}(?:<([?%])[^\r]*?\2>)[
\t]*(?=\n{2,}))/g,I.subParser("hashElement")(g,A,C)),g=C.converter._dispatch("hashHTMLBlocks.after",g,A,C)}),I.subParser("hashHTMLSpans",function(g,A,C){"use
strict";function
I(g){return"¨C"+(C.gHtmlSpans.push(g)-1)+"C"}return
g=C.converter._dispatch("hashHTMLSpans.before",g,A,C),g=g.replace(/<[^>]+?\/>/gi,function(g){return
I(g)}),g=g.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g,function(g){return
I(g)}),g=g.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g,function(g){return
I(g)}),g=g.replace(/<[^>]+?>/gi,function(g){return
I(g)}),g=C.converter._dispatch("hashHTMLSpans.after",g,A,C)}),I.subParser("unhashHTMLSpans",function(g,A,C){"use
strict";g=C.converter._dispatch("unhashHTMLSpans.before",g,A,C);for(var
I=0;I<C.gHtmlSpans.length;++I){for(var
e=C.gHtmlSpans[I],r=0;/¨C(\d+)C/.test(e);){var
t=RegExp.$1;if(e=e.replace("¨C"+t+"C",C.gHtmlSpans[t]),10===r)break;++r}g=g.replace("¨C"+I+"C",e)}return
g=C.converter._dispatch("unhashHTMLSpans.after",g,A,C)}),I.subParser("hashPreCodeTags",function(g,A,C){"use
strict";g=C.converter._dispatch("hashPreCodeTags.before",g,A,C);return
g=I.helper.replaceRecursiveRegExp(g,function(g,e,r,t){var
a=r+I.subParser("encodeCode")(e,A,C)+t;return"\n\n¨G"+(C.ghCodeBlocks.push({text:g,codeblock:a})-1)+"G\n\n"},"^
{0,3}<pre\\b[^>]*>\\s*<code\\b[^>]*>","^
{0,3}</code>\\s*</pre>","gim"),g=C.converter._dispatch("hashPreCodeTags.after",g,A,C)}),I.subParser("headers",function(g,A,C){"use
strict";function e(g){var e,r;if(A.customizedHeaderId){var
t=g.match(/\{([^{]+?)}\s*$/);t&&t[1]&&(g=t[1])}return
e=g,r=I.helper.isString(A.prefixHeaderId)?A.prefixHeaderId:!0===A.prefixHeaderId?"section-":"",A.rawPrefixHeaderId||(e=r+e),e=A.ghCompatibleHeaderId?e.replace(/
/g,"-").replace(/&amp;/g,"").replace(/¨T/g,"").replace(/¨D/g,"").replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g,"").toLowerCase():A.rawHeaderId?e.replace(/
/g,"-").replace(/&amp;/g,"&").replace(/¨T/g,"¨").replace(/¨D/g,"$").replace(/["']/g,"-").toLowerCase():e.replace(/[^\w]/g,"").toLowerCase(),A.rawPrefixHeaderId&&(e=r+e),C.hashLinkCounts[e]?e=e+"-"+C.hashLinkCounts[e]++:C.hashLinkCounts[e]=1,e}g=C.converter._dispatch("headers.before",g,A,C);var
r=isNaN(parseInt(A.headerLevelStart))?1:parseInt(A.headerLevelStart),t=A.smoothLivePreview?/^(.+)[
\t]*\n={2,}[ \t]*\n+/gm:/^(.+)[ \t]*\n=+[
\t]*\n+/gm,a=A.smoothLivePreview?/^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm:/^(.+)[
\t]*\n-+[ \t]*\n+/gm;g=(g=g.replace(t,function(g,t){var
a=I.subParser("spanGamut")(t,A,C),n=A.noHeaderId?"":'
id="'+e(t)+'"',o=r,s="<h"+o+n+">"+a+"</h"+o+">";return
I.subParser("hashBlock")(s,A,C)})).replace(a,function(g,t){var
a=I.subParser("spanGamut")(t,A,C),n=A.noHeaderId?"":'
id="'+e(t)+'"',o=r+1,s="<h"+o+n+">"+a+"</h"+o+">";return
I.subParser("hashBlock")(s,A,C)});var
n=A.requireSpaceBeforeHeadingText?/^(#{1,6})[ \t]+(.+?)[
\t]*#*\n+/gm:/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;return
g=g.replace(n,function(g,t,a){var
n=a;A.customizedHeaderId&&(n=a.replace(/\s?\{([^{]+?)}\s*$/,""));var
o=I.subParser("spanGamut")(n,A,C),s=A.noHeaderId?"":'
id="'+e(a)+'"',i=r-1+t.length,l="<h"+i+s+">"+o+"</h"+i+">";return
I.subParser("hashBlock")(l,A,C)}),g=C.converter._dispatch("headers.after",g,A,C)}),I.subParser("horizontalRule",function(g,A,C){"use
strict";g=C.converter._dispatch("horizontalRule.before",g,A,C);var
e=I.subParser("hashBlock")("<hr />",A,C);return
g=g.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm,e),g=g.replace(/^ {0,2}( ?\*){3,}[
\t]*$/gm,e),g=g.replace(/^ {0,2}( ?_){3,}[
\t]*$/gm,e),g=C.converter._dispatch("horizontalRule.after",g,A,C)}),I.subParser("images",function(g,A,C){"use
strict";function e(g,A,e,r,t,a,n,o){var
s=C.gUrls,i=C.gTitles,l=C.gDimensions;if(e=e.toLowerCase(),o||(o=""),g.search(/\(<?\s*>?
?(['"].*['"])?\)$/m)>-1)r="";else
if(""===r||null===r){if(""!==e&&null!==e||(e=A.toLowerCase().replace(/
?\n/g," ")),r="#"+e,I.helper.isUndefined(s[e]))return
g;r=s[e],I.helper.isUndefined(i[e])||(o=i[e]),I.helper.isUndefined(l[e])||(t=l[e].width,a=l[e].height)}A=A.replace(/"/g,"&quot;").replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback);var
c='<img
src="'+(r=r.replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback))+'"
alt="'+A+'"';return o&&(c+='
title="'+(o=o.replace(/"/g,"&quot;").replace(I.helper.regexes.asteriskDashAndColon,I.helper.escapeCharactersCallback))+'"'),t&&a&&(c+='
width="'+(t="*"===t?"auto":t)+'"',c+='
height="'+(a="*"===a?"auto":a)+'"'),c+="
/>"}var r=/!\[([^\]]*?)][ \t]*()\([
\t]?<?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?:
=([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[
\t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,t=/!\[([^\]]*?)][
\t]*()\([ \t]?<([^>]*)>(?:
=([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[
\t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,a=/!\[([^\]]*?)][
\t]*()\([ \t]?<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?:
=([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[
\t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,n=/!\[([^\]]*?)] ?(?:\n
*)?\[([\s\S]*?)]()()()()()/g,o=/!\[([^\[\]]+)]()()()()()/g;return
g=(g=C.converter._dispatch("images.before",g,A,C)).replace(n,e),g=g.replace(a,function(g,A,C,I,r,t,a,n){return
I=I.replace(/\s/g,""),e(g,A,C,I,r,t,0,n)}),g=g.replace(t,e),g=g.replace(r,e),g=g.replace(o,e),g=C.converter._dispatch("images.after",g,A,C)}),I.subParser("italicsAndBold",function(g,A,C){"use
strict";function I(g,A,C){return A+g+C}return
g=C.converter._dispatch("italicsAndBold.before",g,A,C),g=A.literalMidWordUnderscores?(g=(g=g.replace(/\b___(\S[\s\S]*)___\b/g,function(g,A){return
I(A,"<strong><em>","</em></strong>")})).replace(/\b__(\S[\s\S]*)__\b/g,function(g,A){return
I(A,"<strong>","</strong>")})).replace(/\b_(\S[\s\S]*?)_\b/g,function(g,A){return
I(A,"<em>","</em>")}):(g=(g=g.replace(/___(\S[\s\S]*?)___/g,function(g,A){return/\S$/.test(A)?I(A,"<strong><em>","</em></strong>"):g})).replace(/__(\S[\s\S]*?)__/g,function(g,A){return/\S$/.test(A)?I(A,"<strong>","</strong>"):g})).replace(/_([^\s_][\s\S]*?)_/g,function(g,A){return/\S$/.test(A)?I(A,"<em>","</em>"):g}),g=A.literalMidWordAsterisks?(g=(g=g.trim().replace(/(^|
)\*{3}(\S[\s\S]*?)\*{3}([ ,;!?.]|$)/g,function(g,A,C,e){return
I(C,A+"<strong><em>","</em></strong>"+e)})).trim().replace(/(^|
)\*{2}(\S[\s\S]*?)\*{2}([ ,;!?.]|$)/g,function(g,A,C,e){return
I(C,A+"<strong>","</strong>"+e)})).trim().replace(/(^|
)\*(\S[\s\S]*?)\*([ ,;!?.]|$)/g,function(g,A,C,e){return
I(C,A+"<em>","</em>"+e)}):(g=(g=g.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g,function(g,A){return/\S$/.test(A)?I(A,"<strong><em>","</em></strong>"):g})).replace(/\*\*(\S[\s\S]*?)\*\*/g,function(g,A){return/\S$/.test(A)?I(A,"<strong>","</strong>"):g})).replace(/\*([^\s*][\s\S]*?)\*/g,function(g,A){return/\S$/.test(A)?I(A,"<em>","</em>"):g}),g=C.converter._dispatch("italicsAndBold.after",g,A,C)}),I.subParser("lists",function(g,A,C){"use
strict";function
e(g,e){C.gListLevel++,g=g.replace(/\n{2,}$/,"\n"),g+="¨0";var
r=/(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[
\t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,t=/\n[
\t]*\n(?!¨0)/.test(g);return
A.disableForced4SpacesIndentedSublists&&(r=/(\n)?(^
{0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[
\t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[
\t]+))/gm),g=g.replace(r,function(g,e,r,a,n,o,s){s=s&&""!==s.trim();var
i=I.subParser("outdent")(n,A,C),l="";return
o&&A.tasklists&&(l=' class="task-list-item"
style="list-style-type: none;"',i=i.replace(/^[ \t]*\[(x|X|
)?]/m,function(){var g='<input type="checkbox" disabled
style="margin: 0px 0.35em 0.25em -1.6em; vertical-align:
middle;"';return s&&(g+="
checked"),g+=">"})),i=i.replace(/^([-*+]|\d\.)[ \t]+[\S\n
]*/g,function(g){return"¨A"+g}),e||i.search(/\n{2,}/)>-1?(i=I.subParser("githubCodeBlocks")(i,A,C),i=I.subParser("blockGamut")(i,A,C)):(i=(i=I.subParser("lists")(i,A,C)).replace(/\n$/,""),i=(i=I.subParser("hashHTMLBlocks")(i,A,C)).replace(/\n\n+/g,"\n\n"),i=t?I.subParser("paragraphs")(i,A,C):I.subParser("spanGamut")(i,A,C)),i=i.replace("¨A",""),i="<li"+l+">"+i+"</li>\n"}),g=g.replace(/¨0/g,""),C.gListLevel--,e&&(g=g.replace(/\s+$/,"")),g}function
r(g,A){if("ol"===A){var C=g.match(/^
*(\d+)\./);if(C&&"1"!==C[1])return'
start="'+C[1]+'"'}return""}function
t(g,C,I){var t=A.disableForced4SpacesIndentedSublists?/^ ?\d+\.[ \t]/gm:/^
{0,3}\d+\.[ \t]/gm,a=A.disableForced4SpacesIndentedSublists?/^ ?[*+-][
\t]/gm:/^ {0,3}[*+-][
\t]/gm,n="ul"===C?t:a,o="";if(-1!==g.search(n))!function
A(s){var
i=s.search(n),l=r(g,C);-1!==i?(o+="\n<"+C+l+">\n"+e(s.slice(0,i),!!I)+"</"+C+">\n",n="ul"===(C="ul"===C?"ol":"ul")?t:a,A(s.slice(i))):o+="\n<"+C+l+">\n"+e(s,!!I)+"</"+C+">\n"}(g);else{var
s=r(g,C);o="\n<"+C+s+">\n"+e(g,!!I)+"</"+C+">\n"}return
o}return
g=C.converter._dispatch("lists.before",g,A,C),g+="¨0",g=C.gListLevel?g.replace(/^((
{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![
\t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(g,A,C){return
t(A,C.search(/[*+-]/g)>-1?"ul":"ol",!0)}):g.replace(/(\n\n|^\n?)((
{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![
\t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,function(g,A,C,I){return
t(C,I.search(/[*+-]/g)>-1?"ul":"ol",!1)}),g=g.replace(/¨0/,""),g=C.converter._dispatch("lists.after",g,A,C)}),I.subParser("outdent",function(g,A,C){"use
strict";return
g=C.converter._dispatch("outdent.before",g,A,C),g=g.replace(/^(\t|[
]{1,4})/gm,"¨0"),g=g.replace(/¨0/g,""),g=C.converter._dispatch("outdent.after",g,A,C)}),I.subParser("paragraphs",function(g,A,C){"use
strict";for(var
e=(g=(g=(g=C.converter._dispatch("paragraphs.before",g,A,C)).replace(/^\n+/g,"")).replace(/\n+$/g,"")).split(/\n{2,}/g),r=[],t=e.length,a=0;a<t;a++){var
n=e[a];n.search(/¨(K|G)(\d+)\1/g)>=0?r.push(n):n.search(/\S/)>=0&&(n=(n=I.subParser("spanGamut")(n,A,C)).replace(/^([
\t]*)/g,"<p>"),n+="</p>",r.push(n))}for(t=r.length,a=0;a<t;a++){for(var
o="",s=r[a],i=!1;/¨(K|G)(\d+)\1/.test(s);){var
l=RegExp.$1,c=RegExp.$2;o=(o="K"===l?C.gHtmlBlocks[c]:i?I.subParser("encodeCode")(C.ghCodeBlocks[c].text,A,C):C.ghCodeBlocks[c].codeblock).replace(/\$/g,"$$$$"),s=s.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/,o),/^<pre\b[^>]*>\s*<code\b[^>]*>/.test(s)&&(i=!0)}r[a]=s}return
g=r.join("\n"),g=g.replace(/^\n+/g,""),g=g.replace(/\n+$/g,""),C.converter._dispatch("paragraphs.after",g,A,C)}),I.subParser("runExtension",function(g,A,C,I){"use
strict";if(g.filter)A=g.filter(A,I.converter,C);else if(g.regex){var
e=g.regex;e instanceof RegExp||(e=new
RegExp(e,"g")),A=A.replace(e,g.replace)}return
A}),I.subParser("spanGamut",function(g,A,C){"use
strict";return
g=C.converter._dispatch("spanGamut.before",g,A,C),g=I.subParser("codeSpans")(g,A,C),g=I.subParser("escapeSpecialCharsWithinTagAttributes")(g,A,C),g=I.subParser("encodeBackslashEscapes")(g,A,C),g=I.subParser("images")(g,A,C),g=I.subParser("anchors")(g,A,C),g=I.subParser("autoLinks")(g,A,C),g=I.subParser("simplifiedAutoLinks")(g,A,C),g=I.subParser("emoji")(g,A,C),g=I.subParser("underline")(g,A,C),g=I.subParser("italicsAndBold")(g,A,C),g=I.subParser("strikethrough")(g,A,C),g=I.subParser("ellipsis")(g,A,C),g=I.subParser("hashHTMLSpans")(g,A,C),g=I.subParser("encodeAmpsAndAngles")(g,A,C),A.simpleLineBreaks?/\n\n¨K/.test(g)||(g=g.replace(/\n+/g,"<br
/>\n")):g=g.replace(/  +\n/g,"<br
/>\n"),g=C.converter._dispatch("spanGamut.after",g,A,C)}),I.subParser("strikethrough",function(g,A,C){"use
strict";function e(g){return
A.simplifiedAutoLink&&(g=I.subParser("simplifiedAutoLinks")(g,A,C)),"<del>"+g+"</del>"}return
A.strikethrough&&(g=(g=C.converter._dispatch("strikethrough.before",g,A,C)).replace(/(?:~){2}([\s\S]+?)(?:~){2}/g,function(g,A){return
e(A)}),g=C.converter._dispatch("strikethrough.after",g,A,C)),g}),I.subParser("stripLinkDefinitions",function(g,A,C){"use
strict";var e=/^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*<?([^>\s]+)>?(?:
=([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[
\t]*(?:(\n*)["|'(](.+?)["|')][
\t]*)?(?:\n+|(?=¨0))/gm,r=/^ {0,3}\[(.+)]:[ \t]*\n?[
\t]*<?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?:
=([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[
\t]*(?:(\n*)["|'(](.+?)["|')][
\t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm,t=function(g,e,r,t,a,n,o){return
e=e.toLowerCase(),r.match(/^data:.+?\/.+?;base64,/)?C.gUrls[e]=r.replace(/\s/g,""):C.gUrls[e]=I.subParser("encodeAmpsAndAngles")(r,A,C),n?n+o:(o&&(C.gTitles[e]=o.replace(/"|'/g,"&quot;")),A.parseImgDimensions&&t&&a&&(C.gDimensions[e]={width:t,height:a}),"")};return
g=(g+="¨0").replace(r,t),g=g.replace(e,t),g=g.replace(/¨0/,"")}),I.subParser("tables",function(g,A,C){"use
strict";function e(g){return/^:[ \t]*--*$/.test(g)?'
style="text-align:left;"':/^--*[ \t]*:[
\t]*$/.test(g)?' style="text-align:right;"':/^:[
\t]*--*[ \t]*:$/.test(g)?'
style="text-align:center;"':""}function r(g,e){var
r="";return
g=g.trim(),(A.tablesHeaderId||A.tableHeaderId)&&(r='
id="'+g.replace(/
/g,"_").toLowerCase()+'"'),g=I.subParser("spanGamut")(g,A,C),"<th"+r+e+">"+g+"</th>\n"}function
t(g,e){return"<td"+e+">"+I.subParser("spanGamut")(g,A,C)+"</td>\n"}function
a(g,A){for(var
C="<table>\n<thead>\n<tr>\n",I=g.length,e=0;e<I;++e)C+=g[e];for(C+="</tr>\n</thead>\n<tbody>\n",e=0;e<A.length;++e){C+="<tr>\n";for(var
r=0;r<I;++r)C+=A[e][r];C+="</tr>\n"}return
C+="</tbody>\n</table>\n"}function n(g){var
A,C=g.split("\n");for(A=0;A<C.length;++A)/^
{0,3}\|/.test(C[A])&&(C[A]=C[A].replace(/^
{0,3}\|/,"")),/\|[
\t]*$/.test(C[A])&&(C[A]=C[A].replace(/\|[
\t]*$/,""));var
n=C[0].split("|").map(function(g){return
g.trim()}),o=C[1].split("|").map(function(g){return
g.trim()}),s=[],i=[],l=[],c=[];for(C.shift(),C.shift(),A=0;A<C.length;++A)""!==C[A].trim()&&s.push(C[A].split("|").map(function(g){return
g.trim()}));if(n.length<o.length)return
g;for(A=0;A<o.length;++A)l.push(e(o[A]));for(A=0;A<n.length;++A)I.helper.isUndefined(l[A])&&(l[A]=""),i.push(r(n[A],l[A]));for(A=0;A<s.length;++A){for(var
u=[],p=0;p<i.length;++p)I.helper.isUndefined(s[A][p]),u.push(t(s[A][p],l[p]));c.push(u)}return
a(i,c)}function o(g){var
A=g.slice(-3);return"<ol"!==A&&"<ul"!==A||(g=g.slice(0,-3)+"\n\n"+g.slice(-3)),g}if(!A.tables)return
g;var s=/^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[
\t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|<ol|<ul|¨0)/gm,i=/^
{0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[
\t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|<ol|<ul|¨0)/gm;return
g=C.converter._dispatch("tables.before",g,A,C),g=g.replace(/\\(\|)/g,I.helper.escapeCharactersCallback),g=g.replace(s,o),g=g.replace(i,o),g=g.replace(s,n),g=g.replace(i,n),g=C.converter._dispatch("tables.after",g,A,C)}),I.subParser("underline",function(g,A,C){"use
strict";return
A.underline?(g=C.converter._dispatch("underline.before",g,A,C),g=A.literalMidWordUnderscores?g.replace(/\b_?__(\S[\s\S]*)___?\b/g,function(g,A){return"<u>"+A+"</u>"}):g.replace(/_?__(\S[\s\S]*?)___?/g,function(g,A){return/\S$/.test(A)?"<u>"+A+"</u>":g}),g=g.replace(/(_)/g,I.helper.escapeCharactersCallback),g=C.converter._dispatch("underline.after",g,A,C)):g}),I.subParser("unescapeSpecialChars",function(g,A,C){"use
strict";return
g=C.converter._dispatch("unescapeSpecialChars.before",g,A,C),g=g.replace(/¨E(\d+)E/g,function(g,A){var
C=parseInt(A);return
String.fromCharCode(C)}),g=C.converter._dispatch("unescapeSpecialChars.after",g,A,C)});var
h=this;"function"==typeof
define&&define.amd?define(function(){"use strict";return
I}):"undefined"!=typeof
module&&module.exports?module.exports=I:h.showdown=I}).call(this);
//# sourceMappingURL=showdown.min.js.map
less/admin/btn.less000064400000000255151163010210010245
0ustar00.btn-success,
.btn-success.active, 
.btn-success:hover{
  background: @brand-success;
}

.btn-danger,
.btn-danger.active,
.btn-danger:hover{
  background: @brand-danger;
}

less/admin/common.less000064400000001534151163010210010753 0ustar00//
Applided on #cf 
.display(flex);
min-height: 620px;
.tx-main{ 
  .flex(1);
  background: @body-bg;
  width: 100%;
}
.page-header{
  background: @page-header-bg;
  border-bottom: 1px solid @border-color;
  padding: @page-padding;
  h1,h2{
    font-size: @page-title-size;
    color: @page-title-color;
  }
}
.page-content{ padding: @page-padding; }
// Utility
.text-uppercase{ text-transform: uppercase; }
// Margin Small
.mt-s{ margin-top: 10px; }
.mr-s{ margin-right: 10px; }
.mb-s{ margin-bottom: 10px; }
.ml-s{ margin-left: 10px; }
// Margin Medium
.mt-m{ margin-top: 20px; }
.mr-m{ margin-right: 20px; }
.mb-m{ margin-bottom: 20px; }
.ml-m{ margin-left: 20px; }

// Floats
// -------------------------

.clearfix {
  .clearfix();
}
.center-block {
  .center-block();
}
.pull-right {
  float: right !important;
}
.pull-left {
  float: left !important;
}
less/admin/forms.less000064400000003663151163010210010616 0ustar00textarea,

input[type="text"], 
input[type="password"], 
input[type="datetime"], 
input[type="datetime-local"], 
input[type="date"], 
input[type="month"], 
input[type="time"], 
input[type="week"], 
input[type="number"], 
input[type="email"], 
input[type="url"], 
input[type="search"], 
input[type="tel"], 
input[type="color"], 
.uneditable-input{
  .form-control();
  border-color: @border-color;

  &:focus{
    box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25) !important;
  }
}
textarea{ height: auto; }
// Form gorup
.input-append, 
.input-prepend{
  display: inline-table;
  
  .add-on,
  .btn{ display: table-cell; }

  input[type="text"]{ 
    .border-radius(0);
    border-right: 0;
    height: 35px;
  }
  .btn{ border-top-left-radius: 0; border-bottom-left-radius: 0; }

  .add-on:first-child{ border-right: 0; }

  // Media specific button
  .field-media-preview{
    line-height: 33px;
    height: 33px;
    padding: 0 10px;
    text-align: center;
    [class^="icon-"], [class*=" icon-"]{ margin: 0; }
  }
  .add-on.button-select{
    .border-radius(0);
    background: @brand-primary; color: #fff;
  }
}
// Button Group
.btn-group-vertical>.btn:not(:first-child):not(:last-child), 
.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn, 
.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){

  border-radius: auto; 
  border: 1px solid #ddd;
}
.btn-group{
  .btn{
    padding: 6px 15px;
  }
  >.btn-success{
   border-top-right-radius: 0;
   border-bottom-right-radius: 0; 
  }
}
// Chosen
.chzn-container-single.chzn-container-single-nosearch{
  .chzn-single,
  .chzn-drop,
  .chzn-single div{ 
    border-color: lighten(@brand-primary, 10%);
    text-decoration: none; 
  }
  .chzn-single{ 
    line-height: 30px; 
    color: #222;
    div{ background: #fff; }
  }

  .chzn-results li{ line-height: 25px; }
  .chzn-results > li.result-selected,
  .chzn-results > li:hover{ background: lighten(@brand-primary, 10%);
color: #fff; }
}less/admin/joomla-override.less000064400000000611151163010210012554
0ustar00.container-main{ padding: 0; }
// Header
.header{background: @brand-primary;}
.subhead-collapse{ 
  margin-bottom: 0; 
  .subhead{
    background: @blue-dark; 
  }
  // Button
  .btn:not(.btn-success){
    background: #fff;
  }
}
// System message
#system-message-container{
    float: none; width: 100%; padding: 0;
    .alert{ margin: 0 ; padding-left: 39px; border-radius: 0; border: 0; }
}less/admin/modal.less000064400000000712151163010210010554 0ustar00@width :
768px;
.modal{
  width: @width;
  margin-left: calc(-@width/2);
  border: 0;
  box-shadow: none;
  border-radius: 0;
}
.modal-header{
  background: @brand-primary;
  color: #fff;
  .close{
    margin-right: -20px;
    line-height: 40px;
  }
  h3{ 
    color: #fff;
  }
}
.modal-body{
  padding: 20px;
  box-sizing: border-box;
}
.modal-footer{
  box-shadow: none;
  border: 0;
  border-radius: 0;
  .btn{ background: #fff; color: @brand-primary; }
}less/admin/navbar.less000064400000000621151163010210010730
0ustar00.navbar{
  .navbar-form{
    input, 
    select, 
    .radio, 
    .checkbox,
    .btn{ margin-top: 0;}
  }
}
// Modifier inside page header
.page-header{
  .navbar{
    background: @sidebar-bg;
    margin: 20px -30px -10px -31px;
    border-radius: 0;
    border-left: 0;
    border-right: 0;
    border-bottom: 0;
    border-color: @border-color;
  }
  .navbar-form.navbar-left{ padding-left: 0; }
}less/admin/panels.less000064400000000730151163010210010742 0ustar00//
Disabled panel
.panel-disabled{
  background: #f5f5f5;
}
// Panel Heading
.panel-default{
  background: #fff;
  border: 1px solid @border-color;
  .material-shadow();

  .panel-heading,
  .panel-footer{
    background: @panel-header-bg;
    border-color: @panel-border;
    color: @panel-header-color;
    text-shadow: 0px 1px rgba(255,255,255,.5);  
  }
  >.panel-heading{
    padding: 20px 15px;
    font-size: 15px;
    font-weight: bold;
    background: #fff;
  }
}less/admin/sidebar.less000064400000001150151163010210011066
0ustar00.tx-sidebar{ 
  min-width: @sidebar-width;
  padding: 20px;
  background: @sidebar-bg;
  border-right: 1px solid @border-color;
  
  // Nav
  .nav-list{
    padding: 0;
    > li > a{ 
      margin-left: 0; 
      margin-right: 0; 
      color: #333; 
      margin-bottom: 10px; 
      .border-radius(4px)
    }
    > li > a > i{ margin-right: 8px; }
    // Hover + Active state
    > li.active > a,
    > li.active > a:hover{ 
      background: @sidebar-nav-active-bg; 
      color: @sidebar-nav-active-color; ;
      font-weight: bold;
    }
    > li > a:hover{
      background: @sidebar-nav-active-bg;
    }
  }
}less/admin/switch.less000064400000003321151163010210010760 0ustar00/*
Switch
==========================================================================
*/
.switch,
.switch * {
  -webkit-user-select: none;
  -moz-user-select: none;
  -khtml-user-select: none;
  -ms-user-select: none;
  height: 30px;
  position: relative;
}

.switch label { cursor: pointer; top: 0; left: 0; }

.switch label input[type=checkbox] {
  opacity: 0; width: 0; height: 0;

  &:checked + .lever {
    background-color: #40D874;
    .box-shadow(0 0 3px #1ca74b inset);

    &:after {
      background-color: #fff;
      left: 30px;
    }
  }
}

.switch label .lever {
  content: "";
  display: inline-block;
  position: relative;
  width: 60px;
  height: 30px;
  background-color: #505B64;
  border-radius: 2px;
  margin-right: 10px;
  transition: background 0.3s ease;
  vertical-align: middle;
  margin: 0;

  &:after {
    content: "";
    position: absolute;
    display: inline-block;
    width: 25px;
    height: 20px;
    background-color: #fff;
    border-radius: 2px;
    left: 5px;
    top: 5px;
    z-index: 2;
    .box-shadow(0 1px 3px rgba(0,0,0,.2));
    transition: left 0.3s ease, background .3s ease, box-shadow 0.1s ease;
  }
}

// Switch active style
input[type=checkbox]:checked:not(:disabled) ~ .lever:active::after,
input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::after {
  // box-shadow: 0 1px 3px 1px rgba(0,0,0,.4), 0 0 0 15px
transparentize($switch-bg-color, .9);
}
.switch{
  .label{
    position: absolute;
    top: 50%;
    width: 50%;
    z-index: 1;
    .translateY(-50%);
    font-size: 12px;
    font-weight: 700;
    text-align: center;
    text-transform: uppercase;
    height: auto;
    color: #fff;
  }
  .label-no{ right: 2.5px; color: #cdcfd2; }
  .label-yes{ left: 2.5px; }
}
less/admin/tabs.less000064400000000754151163010210010417
0ustar00.page-header{
  .nav-tabs{ 
    border-bottom: 0; 
    margin-bottom: -10px;
  }
}
.nav-tabs{
  > li > a {
    color: lighten(@brand-secondary, 10%);
    font-size: 15px;
    font-weight: bold;
  }
  > li:hover > a{ 
    background: transparent; border: 1px solid transparent; 
    color: @brand-primary;
  }
  >li.active>a, 
  >li.active>a:focus, 
  >li.active>a:hover{
    background: transparent;
    border: 0;
    color: @brand-primary;
    border-bottom: 2px solid @brand-primary;
  }
}less/icons/style.less000064400000010041151163010210010637 0ustar00@import
"variables";

@font-face {
  font-family: 'notifly';
  src:  url('@{icomoon-font-path}/notifly.eot?6idxo8');
  src:  url('@{icomoon-font-path}/notifly.eot?6idxo8#iefix')
format('embedded-opentype'),
    url('@{icomoon-font-path}/notifly.ttf?6idxo8')
format('truetype'),
    url('@{icomoon-font-path}/notifly.woff?6idxo8')
format('woff'),
    url('@{icomoon-font-path}/notifly.svg?6idxo8#notifly')
format('svg');
  font-weight: normal;
  font-style: normal;
}

i {
  /* use !important to prevent issues with browser extensions that change
fonts */
  font-family: 'notifly' !important;
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;

  /* Better Font Rendering =========== */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

.cfi-activity {
  &:before {
    content: @cfi-activity;
  }
}
.cfi-alert-circle {
  &:before {
    content: @cfi-alert-circle;
  }
}
.cfi-alert-octagon {
  &:before {
    content: @cfi-alert-octagon;
  }
}
.cfi-alert-triangle {
  &:before {
    content: @cfi-alert-triangle;
  }
}
.cfi-aperture {
  &:before {
    content: @cfi-aperture;
  }
}
.cfi-bar-chart {
  &:before {
    content: @cfi-bar-chart;
  }
}
.cfi-bar-chart-2 {
  &:before {
    content: @cfi-bar-chart-2;
  }
}
.cfi-check {
  &:before {
    content: @cfi-check;
  }
}
.cfi-check-circle {
  &:before {
    content: @cfi-check-circle;
  }
}
.cfi-check-square {
  &:before {
    content: @cfi-check-square;
  }
}
.cfi-chevron-down {
  &:before {
    content: @cfi-chevron-down;
  }
}
.cfi-chevron-left {
  &:before {
    content: @cfi-chevron-left;
  }
}
.cfi-chevron-right {
  &:before {
    content: @cfi-chevron-right;
  }
}
.cfi-chevron-up {
  &:before {
    content: @cfi-chevron-up;
  }
}
.cfi-chevrons-down {
  &:before {
    content: @cfi-chevrons-down;
  }
}
.cfi-chevrons-left {
  &:before {
    content: @cfi-chevrons-left;
  }
}
.cfi-chevrons-right {
  &:before {
    content: @cfi-chevrons-right;
  }
}
.cfi-chevrons-up {
  &:before {
    content: @cfi-chevrons-up;
  }
}
.cfi-codepen {
  &:before {
    content: @cfi-codepen;
  }
}
.cfi-copy {
  &:before {
    content: @cfi-copy;
  }
}
.cfi-download-cloud {
  &:before {
    content: @cfi-download-cloud;
  }
}
.cfi-edit {
  &:before {
    content: @cfi-edit;
  }
}
.cfi-external-link {
  &:before {
    content: @cfi-external-link;
  }
}
.cfi-filter {
  &:before {
    content: @cfi-filter;
  }
}
.cfi-grid {
  &:before {
    content: @cfi-grid;
  }
}
.cfi-heart {
  &:before {
    content: @cfi-heart;
  }
}
.cfi-help-circle {
  &:before {
    content: @cfi-help-circle;
  }
}
.cfi-home {
  &:before {
    content: @cfi-home;
  }
}
.cfi-layers {
  &:before {
    content: @cfi-layers;
  }
}
.cfi-layout {
  &:before {
    content: @cfi-layout;
  }
}
.cfi-link {
  &:before {
    content: @cfi-link;
  }
}
.cfi-menu {
  &:before {
    content: @cfi-menu;
  }
}
.cfi-message-square {
  &:before {
    content: @cfi-message-square;
  }
}
.cfi-moon {
  &:before {
    content: @cfi-moon;
  }
}
.cfi-pie-chart {
  &:before {
    content: @cfi-pie-chart;
  }
}
.cfi-plus {
  &:before {
    content: @cfi-plus;
  }
}
.cfi-plus-circle {
  &:before {
    content: @cfi-plus-circle;
  }
}
.cfi-plus-square {
  &:before {
    content: @cfi-plus-square;
  }
}
.cfi-radio {
  &:before {
    content: @cfi-radio;
  }
}
.cfi-refresh-ccw {
  &:before {
    content: @cfi-refresh-ccw;
  }
}
.cfi-refresh-cw {
  &:before {
    content: @cfi-refresh-cw;
  }
}
.cfi-settings {
  &:before {
    content: @cfi-settings;
  }
}
.cfi-shopping-cart {
  &:before {
    content: @cfi-shopping-cart;
  }
}
.cfi-sliders {
  &:before {
    content: @cfi-sliders;
  }
}
.cfi-smartphone {
  &:before {
    content: @cfi-smartphone;
  }
}
.cfi-trash-2 {
  &:before {
    content: @cfi-trash-2;
  }
}
.cfi-twitter {
  &:before {
    content: @cfi-twitter;
  }
}
.cfi-x {
  &:before {
    content: @cfi-x;
  }
}
.cfi-x-circle {
  &:before {
    content: @cfi-x-circle;
  }
}
.cfi-x-square {
  &:before {
    content: @cfi-x-square;
  }
}
.cfi-zap {
  &:before {
    content: @cfi-zap;
  }
}

less/icons/variables.less000064400000002417151163010210011457
0ustar00@icomoon-font-path: "../fonts";

@cfi-activity: "\e900";
@cfi-alert-circle: "\e901";
@cfi-alert-octagon: "\e902";
@cfi-alert-triangle: "\e903";
@cfi-aperture: "\e904";
@cfi-bar-chart: "\e905";
@cfi-bar-chart-2: "\e906";
@cfi-check: "\e907";
@cfi-check-circle: "\e908";
@cfi-check-square: "\e909";
@cfi-chevron-down: "\e90a";
@cfi-chevron-left: "\e90b";
@cfi-chevron-right: "\e90c";
@cfi-chevron-up: "\e90d";
@cfi-chevrons-down: "\e90e";
@cfi-chevrons-left: "\e90f";
@cfi-chevrons-right: "\e910";
@cfi-chevrons-up: "\e911";
@cfi-codepen: "\e912";
@cfi-copy: "\e913";
@cfi-download-cloud: "\e914";
@cfi-edit: "\e915";
@cfi-external-link: "\e916";
@cfi-filter: "\e917";
@cfi-grid: "\e918";
@cfi-heart: "\e919";
@cfi-help-circle: "\e91a";
@cfi-home: "\e91b";
@cfi-layers: "\e91c";
@cfi-layout: "\e91d";
@cfi-link: "\e91e";
@cfi-menu: "\e91f";
@cfi-message-square: "\e920";
@cfi-moon: "\e921";
@cfi-pie-chart: "\e922";
@cfi-plus: "\e923";
@cfi-plus-circle: "\e924";
@cfi-plus-square: "\e925";
@cfi-radio: "\e926";
@cfi-refresh-ccw: "\e927";
@cfi-refresh-cw: "\e928";
@cfi-settings: "\e929";
@cfi-shopping-cart: "\e92a";
@cfi-sliders: "\e92b";
@cfi-smartphone: "\e92c";
@cfi-trash-2: "\e92d";
@cfi-twitter: "\e92e";
@cfi-x: "\e92f";
@cfi-x-circle: "\e930";
@cfi-x-square: "\e931";
@cfi-zap: "\e932";

less/mixins.less000064400000000146151163010210007700
0ustar00.material-shadow(){
  box-shadow: 0 6px 8px rgba(102,119,136,0.03), 0 1px 2px
rgba(102,119,136,0.3);
}less/notifly-admin.less000064400000006326151163010210011151
0ustar00@nodePath : "../../../../node_modules";
@bootstrap : "@{nodePath}/bootstrap/less";
@notifly-selector: ~"#cf";
// Include Lesshat -------------
@import "@{nodePath}/lesshat/lesshat";
//------------------------------

// Bootstrap Common
// -------------------------------------
// Core variables and mixins
@import "@{bootstrap}/variables";
@import "@{bootstrap}/mixins";
// Reset and dependencies
// @import "@{bootstrap}/normalize";
// -------------------------------------

//Project variables
@import "variables";
@import "mixins";
@import "icons/style";

// Take over Joomla style
body.com_notifly{
  @import "admin/joomla-override";
}
// Disable Sidebar nav text on edit mode
body.com_notifly.layout-edit{
  #cf{
    .tx-sidebar{
      min-width: 50px;
      padding: 20px 10px;
      .nav-list{
        > li > a{
          > span{ display: none; }
          i{ margin: 0; }
        }
      }
    }
  }
}
@media (max-width: 768px) {
  body.com_notifly{
    #cf{
      .tx-sidebar{
        min-width: 50px;
        padding: 20px 10px;
        margin-left: -20px;
        .nav-list{
          > li > a{
            > span{ display: none; }
            i{ margin: 0; }
          }
        }
      }
    }
  }  
}


@{notifly-selector}{
  // Bootstrap CSS
  @import "@{bootstrap}/scaffolding";
  @import "@{bootstrap}/grid";
  @import "@{bootstrap}/tables";
  @import "@{bootstrap}/forms";
  @import "@{bootstrap}/buttons";
  // Bootstrap Components
  @import "@{bootstrap}/component-animations";
  @import "@{bootstrap}/button-groups";
  @import "@{bootstrap}/input-groups";
  @import "@{bootstrap}/navs";
  @import "@{bootstrap}/navbar";
  @import "@{bootstrap}/labels";
  @import "@{bootstrap}/badges";
  @import "@{bootstrap}/thumbnails";
  @import "@{bootstrap}/alerts";
  @import "@{bootstrap}/media";
  @import "@{bootstrap}/list-group";
  @import "@{bootstrap}/panels";
  @import "@{bootstrap}/responsive-embed";
  @import "@{bootstrap}/wells";
  @import "@{bootstrap}/close";
  // Utility classes
  // @import "@{bootstrap}/utilities.less";
  // -----------------------------------
  @import "admin/common";
  @import "admin/sidebar";
  @import "admin/btn";
  @import "admin/modal";  
  @import "admin/switch";  
  @import "admin/panels";  
  @import "admin/tabs";  
  @import "admin/forms";  
  @import "admin/navbar";  

  // Integraions page
  .int-logo{ 
    max-width: 100%; 
    width: 100%;
    height: 100px;
    object-fit: contain;
  }
  .integrations{
    
  }
  .request-block{
    margin-top: 40px; padding: 30px;
    background: #fff;
    border: 1px solid #ddd;
  }
  // Templates
  &.templates{
    .media-heading{ 
      padding-bottom: 14px; margin-bottom: 10px;
      border-bottom: 1px solid #eee; 
    }
  }
  .tx-action-btns{ width: 20%; padding-left: 40px; vertical-align: middle;
}
  // Events
  &.events{
    .table{
      background: #fff;
      .box-shadow(0 0 10px #ddd);
      td { vertical-align: middle; }
    }
  }
}

// Dealing with iframe
body.contentpane.component{
  padding: 0px;
  #general h3,
  #general .info-labels,
  #general .info-labels + div,
  #general .info-labels + div + hr,
  .nav.nav-tabs{ display: none; }
  
  .span3 > .form-vertical > .control-group + .control-group,
  .form-vertical + .form-vertical{ display: none; }

}less/notifly.less000064400000010052151163010210010052 0ustar00@nodePath :
"../../../../node_modules";
// Include Lesshat -------------
@import "@{nodePath}/lesshat/lesshat";
//------------------------------

#notifly {
    position: fixed;
    z-index: 99999;
    height: 66px;
    width: 321px;
    border: none;
    display: none;
    opacity: 0;
    background:white;
    transition: visibility 0s 0.5s, opacity 0.4s linear, top 500ms linear,
bottom 500ms linear;
}

#notifly,
#notifly *,
#notifly *:before,
#notifly *:after {
    box-sizing: border-box;
}

#notifly.notifly-clickable {
    cursor:pointer;
}

#notifly.notifly-position-bottom-left {
    bottom: -120px;
    left: 10px;
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 1px 2px rgba(0,0,0,0.05),0 8px
50px rgba(0,0,0,0.05));
}

#notifly.notifly-position-bottom-right {
    bottom: -120px;
    right: 10px;
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 1px 2px rgba(0,0,0,0.05),0 8px
50px rgba(0,0,0,0.05));
}

#notifly.notifly-position-top-left {
    top: -120px;
    left: 10px;
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 -1px 2px rgba(0,0,0,0.05),0 -8px
50px rgba(0,0,0,0.05));
}

#notifly.notifly-position-top-right {
    top: -120px;
    right: 10px;
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 -1px 2px rgba(0,0,0,0.05),0 -8px
50px rgba(0,0,0,0.05));
}

#notifly.notifly-design-rounded { border-radius: 40px; }

#notifly.notifly-design-rounded-square { border-radius: 6px; }

#notifly.notifly-position-bottom-left:hover,
#notifly.notifly-position-bottom-right:hover {
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 1px 2px rgba(0,0,0,0.05), 0 25px
50px rgba(0,0,0,0.1));
}

#notifly.notifly-position-top-left:hover,
#notifly.notifly-position-top-right:hover {
    .box-shadow(0 0 1px rgba(0,0,0,0.2),0 -1px 2px rgba(0,0,0,0.05), 0
-25px 50px rgba(0,0,0,0.1));
}

#notifly:hover {
    .box-shadow(0 25px 50px rgba(0,0,0,0.1));
}

#notifly:active {
    .box-shadow(0 0 0 1px rgba(0,0,0,0.1));
}

#notifly.notifly-hidden { opacity: 0; }

#notifly.notifly-displayed.notifly-position-bottom-left,
#notifly.notifly-displayed.notifly-position-bottom-right {
    opacity: 1;
    bottom:20px;
}

#notifly.notifly-displayed.notifly-position-top-left,
#notifly.notifly-displayed.notifly-position-top-right {
    opacity: 1;
    top:20px;
}

#notifly-image {
    display: block;
    position: absolute;
    top: 0px;
    left:0px;
    height: 66px;
    width: 66px;
    text-align:center;
    background-size:cover;
    background-repeat:no-repeat;
    background-position:center center;
}

#notifly-image i {
    height: 66px;
    width: 66px;
    line-height:66px;
    max-width:100%;
    margin:0px;
    font-size:30px;
}

#notifly.notifly-design-rounded notifly-image {
    top: 3px;
    left: 3px;
    height: 60px;
    width: 60px;
    .border-radius(50%);
    overflow:hidden;
    line-height:60px;
}

#notifly.notifly-design-rounded notifly-image i {
    .border-radius(50%);
    top: 3px;
    left: 3px;
    height: 60px;
    width: 60px;
    line-height:60px;
    display:block;
}

#notifly-content {
    margin-left: 75px;
    padding-top: 9.28571px;
    padding-right: 4px;
}

#notifly-title {
    line-height: 18px;
    height: 18px;
    font-size: 14px;
    font-weight: bold;
    font-family: "Roboto",helvetica,arial,sans-serif;
    color: #000;
    margin-right:30px;
    margin-top:7px;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

#notifly.notifly-show-timeago .notifly-title {
    margin-top:0px;
}

#notifly-text {
    line-height: 17px;
    height: 17px;
    font-size: 12px;
    font-family: "Roboto",helvetica,arial,sans-serif;
    color: #333;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

#notifly-time {
  display: block;
    color: #999;
    font-size: 11px;
    height: 16px;
    line-height: 16px;
    font-family: "Roboto",helvetica,arial,sans-serif;
}

#notifly-close {
    position:absolute;
    top:3px;
    right:25px;
    font-size:12px;
    color:black;
    cursor:pointer;
}

@media (min-width:980px ){
    #notifly.notifly-desktop {
        display:block;
    }
}

@media (max-width:979px ){
    #notifly.notifly-mobile {
        display:block;
    }
}less/variables.less000064400000001525151163010210010343 0ustar00@blue:   
#1f8ceb;
@blue-dark: #1271c4;
@indigo:  #6610f2;
@purple:  #6f42c1;
@pink:    #e83e8c;
@red:     #dc3545;
@orange:  #fd7e14;
@yellow:  #ffc107;
@green:   #28a745;
@teal:    #20c997;
@cyan:    #17a2b8;
// Color
@brand-primary:         @blue;
@brand-secondary:       #868e96;
@brand-success:         @green;
@brand-info:            @cyan;
@brand-warning:         @yellow;
@brand-danger:          @red;

// Utility
@body-bg : #f8fafc;
@border-color : #e9eef2;
// Sidebar
@sidebar-bg : #fff;
@sidebar-width : 240px;
// Sidebar Nav
@sidebar-nav-active-bg: lighten(@brand-primary, 43%);
@sidebar-nav-active-color: @brand-primary;

// Page Header
@page-header-bg : @body-bg;
@page-padding : 10px 30px;
@page-title-size: 20px;
@page-title-color: #1d364b;

// Panel
@panel-border : @border-color;
@panel-header-bg : #f6f7f9;
@panel-header-color : #678;