zmp-cli 3.15.6 → 3.15.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/build/index.js +1 -184
- package/config/index.js +1 -44
- package/create/index.js +1 -230
- package/create/init-zmp-ui.js +1 -216
- package/create/templates/app-parameters.js +9 -25
- package/create/templates/common/webpack/build.js +2 -40
- package/create/templates/copy-assets.js +1 -158
- package/create/templates/core/copy-assets.js +14 -82
- package/create/templates/core/generate-home-page.js +16 -38
- package/create/templates/core/generate-root.js +28 -63
- package/create/templates/core/generate-routes.js +12 -38
- package/create/templates/core/generate-scripts.js +16 -65
- package/create/templates/create-folders.js +1 -30
- package/create/templates/generate-config-xml.js +2 -9
- package/create/templates/generate-index.js +10 -35
- package/create/templates/generate-manifest.js +1 -49
- package/create/templates/generate-recoil.js +4 -16
- package/create/templates/generate-routes.js +1 -16
- package/create/templates/generate-scripts.js +1 -16
- package/create/templates/generate-service-worker.js +4 -10
- package/create/templates/generate-store.js +4 -15
- package/create/templates/generate-styles.js +10 -64
- package/create/templates/generate-webpack-config.js +43 -125
- package/create/templates/generate-zmp-custom.js +14 -72
- package/create/templates/react/copy-assets.js +1 -85
- package/create/templates/react/generate-home-page.js +20 -50
- package/create/templates/react/generate-root.js +15 -44
- package/create/templates/react/generate-routes.js +1 -16
- package/create/templates/react/generate-scripts.js +12 -38
- package/create/templates/react/pages/404.js +2 -10
- package/create/templates/react/pages/about.js +2 -10
- package/create/templates/react/pages/catalog.js +3 -17
- package/create/templates/react/pages/dynamic-route.js +2 -10
- package/create/templates/react/pages/form.js +6 -26
- package/create/templates/react/pages/index copy.js +1 -17
- package/create/templates/react/pages/index.js +1 -17
- package/create/templates/react/pages/settings.js +3 -17
- package/create/templates/react/pages/user.js +8 -27
- package/create/templates/react-typescript/components/app-items.js +2 -9
- package/create/templates/react-typescript/components/index.js +1 -9
- package/create/templates/react-typescript/components/navbar-back.js +2 -9
- package/create/templates/react-typescript/components/user-card.js +2 -9
- package/create/templates/react-typescript/copy-assets.js +1 -94
- package/create/templates/react-typescript/generate-home-page.js +20 -52
- package/create/templates/react-typescript/generate-root.js +14 -45
- package/create/templates/react-typescript/generate-routes.js +1 -12
- package/create/templates/react-typescript/generate-scripts.js +12 -37
- package/create/templates/react-typescript/pages/404.js +2 -10
- package/create/templates/react-typescript/pages/about.js +2 -10
- package/create/templates/react-typescript/pages/catalog.js +3 -17
- package/create/templates/react-typescript/pages/dynamic-route.js +2 -10
- package/create/templates/react-typescript/pages/form.js +6 -26
- package/create/templates/react-typescript/pages/index.js +1 -17
- package/create/templates/react-typescript/pages/settings.js +3 -17
- package/create/templates/react-typescript/pages/user.js +8 -27
- package/create/templates/svelte/copy-assets.js +1 -47
- package/create/templates/svelte/generate-home-page.js +20 -56
- package/create/templates/svelte/generate-root.js +22 -80
- package/create/templates/svelte/generate-routes.js +7 -22
- package/create/templates/svelte/generate-scripts.js +7 -23
- package/create/templates/vue/copy-assets.js +1 -67
- package/create/templates/vue/generate-home-page.js +2 -8
- package/create/templates/vue/generate-root.js +3 -13
- package/create/templates/vue/generate-routes.js +1 -7
- package/create/templates/vue/generate-scripts.js +9 -26
- package/create/templates/vue/global-components.d.js +1 -0
- package/create/templates/zaui/copy-assets.js +1 -90
- package/create/templates/zaui/generate-home-page.js +27 -53
- package/create/templates/zaui/generate-root.js +14 -34
- package/create/templates/zaui/generate-routes.js +1 -10
- package/create/templates/zaui/generate-scripts.js +6 -20
- package/create/templates/zaui/generate-user-card.js +3 -18
- package/create/templates/zaui/pages/about.js +3 -20
- package/create/templates/zaui/pages/form.js +3 -20
- package/create/templates/zaui/pages/index.js +1 -9
- package/create/templates/zaui/pages/user.js +3 -20
- package/create/utils/colors.js +1 -94
- package/create/utils/generate-app-config.js +1 -34
- package/create/utils/generate-gitignore.js +1 -43
- package/create/utils/generate-npm-scripts.js +1 -26
- package/create/utils/generate-package-json.js +1 -132
- package/create/utils/generate-readme.js +1 -28
- package/create/utils/get-options.js +1 -204
- package/create/utils/indent.js +1 -31
- package/create/utils/npm-scripts.js +1 -62
- package/create/utils/string.js +1 -13
- package/create/utils/styles-extension.js +1 -9
- package/create/utils/template-if.js +1 -9
- package/deploy/index.js +1 -149
- package/deploy/utils/get-options.js +1 -69
- package/deploy/utils/request-upload.js +1 -34
- package/deploy/utils/upload-app.js +1 -82
- package/index.js +1 -319
- package/login/index.js +1 -169
- package/login/utils/get-options.js +1 -58
- package/login/utils/zalo-login.js +1 -32
- package/migrate/icons/update-icon-v3.js +1 -19
- package/migrate/index.js +1 -60
- package/migrate/utils/get-options.js +1 -46
- package/migrate/utils/migrate-react.js +1 -33
- package/package.json +11 -39
- package/start/generate-hr-config.js +1 -59
- package/start/index.js +1 -382
- package/sync/index-to-app-config.js +1 -146
- package/sync/index.js +1 -55
- package/utils/axios.js +1 -15
- package/utils/check-update.js +1 -53
- package/utils/constants.js +1 -20
- package/utils/env.js +1 -39
- package/utils/error.js +1 -16
- package/utils/find-files-by-ext.js +1 -27
- package/utils/find-free-port.js +1 -11
- package/utils/fs-extra.js +1 -90
- package/utils/generate-pages-map.js +1 -17
- package/utils/get-app-info.js +1 -22
- package/utils/get-current-project.js +1 -25
- package/utils/get-ip.js +1 -19
- package/utils/log.js +1 -19
- package/utils/node-blob.js +1 -106
- package/utils/resumable.d.js +1 -0
- package/utils/resumable.js +1 -1204
- package/utils/spinner.js +1 -25
- package/utils/tunnel.js +1 -36
- package/.editorconfig +0 -15
- package/.eslintignore +0 -8
- package/.eslintrc.js +0 -10
- package/.vscode/launch.json +0 -23
- package/LICENSE +0 -21
- package/README.git.md +0 -37
- package/assets/index.js +0 -147
- package/build/dist/index.dev.js +0 -217
- package/config/dist/index.dev.js +0 -48
- package/create/templates/dist/generate-styles.dev.js +0 -46
- package/create/templates/react/dist/generate-scripts.dev.js +0 -23
- package/create/templates/react-typescript/dist/generate-scripts.dev.js +0 -23
- package/create/utils/dist/get-options.dev.js +0 -277
- package/deploy/dist/index.dev.js +0 -227
- package/deploy/utils/dist/request-upload.dev.js +0 -62
- package/deploy/utils/dist/upload-app.dev.js +0 -113
- package/dist/bundle.js +0 -1
- package/dist/index.dev.js +0 -352
- package/jsconfig.json +0 -8
- package/login/dist/index.dev.js +0 -223
- package/login/utils/dist/zalo-login.dev.js +0 -41
- package/screenshots/wellcome.jpg +0 -0
- package/show-qr-app/assets/css/style.css +0 -87
- package/show-qr-app/assets/js/qrcode.min.js +0 -1
- package/show-qr-app/index.html +0 -57
- package/show-qr-app/package.json +0 -14
- package/start/dist/index.dev.js +0 -312
- package/ui/server.js +0 -194
- package/ui/www/css/app.css +0 -1
- package/ui/www/css/app.css.map +0 -1
- package/ui/www/fonts/ZMPIcons-Regular.eot +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.ttf +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff +0 -0
- package/ui/www/fonts/ZMPIcons-Regular.woff2 +0 -0
- package/ui/www/images/logo.png +0 -0
- package/ui/www/index.html +0 -1
- package/ui/www/js/app.js +0 -3
- package/ui/www/js/app.js.LICENSE.txt +0 -20
- package/ui/www/js/app.js.map +0 -1
- package/ui/www/static/icons/apple-touch-icon.png +0 -0
- package/ui/www/static/icons/favicon.png +0 -0
- package/utils/dist/get-app-info.dev.js +0 -54
package/utils/resumable.js
CHANGED
|
@@ -1,1204 +1 @@
|
|
|
1
|
-
const FileAPI = require('file-api');
|
|
2
|
-
const Blob = require('./node-blob');
|
|
3
|
-
const XMLHttpRequest = require('xhr2');
|
|
4
|
-
const { agent } = require('./axios');
|
|
5
|
-
|
|
6
|
-
XMLHttpRequest.nodejsSet({
|
|
7
|
-
httpAgent: agent,
|
|
8
|
-
httpsAgent: agent,
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
const File = FileAPI.File;
|
|
12
|
-
const FileList = FileAPI.FileList;
|
|
13
|
-
const FileReader = FileAPI.FileReader;
|
|
14
|
-
|
|
15
|
-
const Resumable = function (opts) {
|
|
16
|
-
if (!(this instanceof Resumable)) {
|
|
17
|
-
return new Resumable(opts);
|
|
18
|
-
}
|
|
19
|
-
this.version = 1.0;
|
|
20
|
-
// SUPPORTED BY BROWSER?
|
|
21
|
-
// Check if these features are support by the browser:
|
|
22
|
-
// - File object type
|
|
23
|
-
// - Blob object type
|
|
24
|
-
// - FileList object type
|
|
25
|
-
// - slicing files
|
|
26
|
-
this.support =
|
|
27
|
-
typeof File !== 'undefined' &&
|
|
28
|
-
typeof Blob !== 'undefined' &&
|
|
29
|
-
typeof FileList !== 'undefined' &&
|
|
30
|
-
(!!Blob.prototype.webkitSlice ||
|
|
31
|
-
!!Blob.prototype.mozSlice ||
|
|
32
|
-
!!Blob.prototype.slice ||
|
|
33
|
-
false);
|
|
34
|
-
if (!this.support) return false;
|
|
35
|
-
|
|
36
|
-
// PROPERTIES
|
|
37
|
-
var $ = this;
|
|
38
|
-
$.files = [];
|
|
39
|
-
$.defaults = {
|
|
40
|
-
chunkSize: 1 * 1024 * 1024,
|
|
41
|
-
forceChunkSize: false,
|
|
42
|
-
simultaneousUploads: 3,
|
|
43
|
-
fileParameterName: 'file',
|
|
44
|
-
chunkNumberParameterName: 'resumableChunkNumber',
|
|
45
|
-
chunkSizeParameterName: 'resumableChunkSize',
|
|
46
|
-
currentChunkSizeParameterName: 'resumableCurrentChunkSize',
|
|
47
|
-
totalSizeParameterName: 'resumableTotalSize',
|
|
48
|
-
typeParameterName: 'resumableType',
|
|
49
|
-
identifierParameterName: 'resumableIdentifier',
|
|
50
|
-
fileNameParameterName: 'resumableFilename',
|
|
51
|
-
relativePathParameterName: 'resumableRelativePath',
|
|
52
|
-
totalChunksParameterName: 'resumableTotalChunks',
|
|
53
|
-
throttleProgressCallbacks: 0.5,
|
|
54
|
-
query: {},
|
|
55
|
-
headers: {},
|
|
56
|
-
preprocess: null,
|
|
57
|
-
method: 'multipart',
|
|
58
|
-
uploadMethod: 'POST',
|
|
59
|
-
testMethod: 'GET',
|
|
60
|
-
prioritizeFirstAndLastChunk: false,
|
|
61
|
-
target: '/',
|
|
62
|
-
testTarget: null,
|
|
63
|
-
parameterNamespace: '',
|
|
64
|
-
testChunks: true,
|
|
65
|
-
generateUniqueIdentifier: null,
|
|
66
|
-
getTarget: null,
|
|
67
|
-
maxChunkRetries: 100,
|
|
68
|
-
chunkRetryInterval: undefined,
|
|
69
|
-
permanentErrors: [400, 404, 415, 500, 501],
|
|
70
|
-
maxFiles: undefined,
|
|
71
|
-
withCredentials: false,
|
|
72
|
-
xhrTimeout: 0,
|
|
73
|
-
clearInput: true,
|
|
74
|
-
chunkFormat: 'blob',
|
|
75
|
-
setChunkTypeFromFile: false,
|
|
76
|
-
maxFilesErrorCallback: function (files, errorCount) {
|
|
77
|
-
var maxFiles = $.getOpt('maxFiles');
|
|
78
|
-
alert(
|
|
79
|
-
'Please upload no more than ' +
|
|
80
|
-
maxFiles +
|
|
81
|
-
' file' +
|
|
82
|
-
(maxFiles === 1 ? '' : 's') +
|
|
83
|
-
' at a time.'
|
|
84
|
-
);
|
|
85
|
-
},
|
|
86
|
-
minFileSize: 1,
|
|
87
|
-
minFileSizeErrorCallback: function (file, errorCount) {
|
|
88
|
-
alert(
|
|
89
|
-
file.fileName ||
|
|
90
|
-
file.name +
|
|
91
|
-
' is too small, please upload files larger than ' +
|
|
92
|
-
$h.formatSize($.getOpt('minFileSize')) +
|
|
93
|
-
'.'
|
|
94
|
-
);
|
|
95
|
-
},
|
|
96
|
-
maxFileSize: undefined,
|
|
97
|
-
maxFileSizeErrorCallback: function (file, errorCount) {
|
|
98
|
-
alert(
|
|
99
|
-
file.fileName ||
|
|
100
|
-
file.name +
|
|
101
|
-
' is too large, please upload files less than ' +
|
|
102
|
-
$h.formatSize($.getOpt('maxFileSize')) +
|
|
103
|
-
'.'
|
|
104
|
-
);
|
|
105
|
-
},
|
|
106
|
-
fileType: [],
|
|
107
|
-
fileTypeErrorCallback: function (file, errorCount) {
|
|
108
|
-
alert(
|
|
109
|
-
file.fileName ||
|
|
110
|
-
file.name +
|
|
111
|
-
' has type not allowed, please upload files of type ' +
|
|
112
|
-
$.getOpt('fileType') +
|
|
113
|
-
'.'
|
|
114
|
-
);
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
$.opts = opts || {};
|
|
118
|
-
$.getOpt = function (o) {
|
|
119
|
-
var $opt = this;
|
|
120
|
-
// Get multiple option if passed an array
|
|
121
|
-
if (o instanceof Array) {
|
|
122
|
-
var options = {};
|
|
123
|
-
$h.each(o, function (option) {
|
|
124
|
-
options[option] = $opt.getOpt(option);
|
|
125
|
-
});
|
|
126
|
-
return options;
|
|
127
|
-
}
|
|
128
|
-
// Otherwise, just return a simple option
|
|
129
|
-
if ($opt instanceof ResumableChunk) {
|
|
130
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
131
|
-
return $opt.opts[o];
|
|
132
|
-
} else {
|
|
133
|
-
$opt = $opt.fileObj;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
if ($opt instanceof ResumableFile) {
|
|
137
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
138
|
-
return $opt.opts[o];
|
|
139
|
-
} else {
|
|
140
|
-
$opt = $opt.resumableObj;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
if ($opt instanceof Resumable) {
|
|
144
|
-
if (typeof $opt.opts[o] !== 'undefined') {
|
|
145
|
-
return $opt.opts[o];
|
|
146
|
-
} else {
|
|
147
|
-
return $opt.defaults[o];
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
|
-
|
|
152
|
-
// EVENTS
|
|
153
|
-
// catchAll(event, ...)
|
|
154
|
-
// fileSuccess(file), fileProgress(file), fileAdded(file, event), filesAdded(files, filesSkipped), fileRetry(file),
|
|
155
|
-
// fileError(file, message), complete(), progress(), error(message, file), pause()
|
|
156
|
-
$.events = [];
|
|
157
|
-
$.on = function (event, callback) {
|
|
158
|
-
$.events.push(event.toLowerCase(), callback);
|
|
159
|
-
};
|
|
160
|
-
$.fire = function () {
|
|
161
|
-
// `arguments` is an object, not array, in FF, so:
|
|
162
|
-
var args = [];
|
|
163
|
-
for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);
|
|
164
|
-
// Find event listeners, and support pseudo-event `catchAll`
|
|
165
|
-
var event = args[0].toLowerCase();
|
|
166
|
-
for (var i = 0; i <= $.events.length; i += 2) {
|
|
167
|
-
if ($.events[i] == event) $.events[i + 1].apply($, args.slice(1));
|
|
168
|
-
if ($.events[i] == 'catchall') $.events[i + 1].apply(null, args);
|
|
169
|
-
}
|
|
170
|
-
if (event == 'fileerror') $.fire('error', args[2], args[1]);
|
|
171
|
-
if (event == 'fileprogress') $.fire('progress');
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
// INTERNAL HELPER METHODS (handy, but ultimately not part of uploading)
|
|
175
|
-
var $h = {
|
|
176
|
-
stopEvent: function (e) {
|
|
177
|
-
e.stopPropagation();
|
|
178
|
-
e.preventDefault();
|
|
179
|
-
},
|
|
180
|
-
each: function (o, callback) {
|
|
181
|
-
if (typeof o.length !== 'undefined') {
|
|
182
|
-
for (var i = 0; i < o.length; i++) {
|
|
183
|
-
// Array or FileList
|
|
184
|
-
if (callback(o[i]) === false) return;
|
|
185
|
-
}
|
|
186
|
-
} else {
|
|
187
|
-
for (i in o) {
|
|
188
|
-
// Object
|
|
189
|
-
if (callback(i, o[i]) === false) return;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
},
|
|
193
|
-
generateUniqueIdentifier: function (file, event) {
|
|
194
|
-
var custom = $.getOpt('generateUniqueIdentifier');
|
|
195
|
-
if (typeof custom === 'function') {
|
|
196
|
-
return custom(file, event);
|
|
197
|
-
}
|
|
198
|
-
var relativePath = file.webkitRelativePath || file.fileName || file.name; // Some confusion in different versions of Firefox
|
|
199
|
-
var size = file.size;
|
|
200
|
-
return size + '-' + relativePath.replace(/[^0-9a-zA-Z_-]/gim, '');
|
|
201
|
-
},
|
|
202
|
-
contains: function (array, test) {
|
|
203
|
-
var result = false;
|
|
204
|
-
|
|
205
|
-
$h.each(array, function (value) {
|
|
206
|
-
if (value == test) {
|
|
207
|
-
result = true;
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
return true;
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
return result;
|
|
214
|
-
},
|
|
215
|
-
formatSize: function (size) {
|
|
216
|
-
if (size < 1024) {
|
|
217
|
-
return size + ' bytes';
|
|
218
|
-
} else if (size < 1024 * 1024) {
|
|
219
|
-
return (size / 1024.0).toFixed(0) + ' KB';
|
|
220
|
-
} else if (size < 1024 * 1024 * 1024) {
|
|
221
|
-
return (size / 1024.0 / 1024.0).toFixed(1) + ' MB';
|
|
222
|
-
} else {
|
|
223
|
-
return (size / 1024.0 / 1024.0 / 1024.0).toFixed(1) + ' GB';
|
|
224
|
-
}
|
|
225
|
-
},
|
|
226
|
-
getTarget: function (request, params) {
|
|
227
|
-
var target = $.getOpt('target');
|
|
228
|
-
|
|
229
|
-
if (request === 'test' && $.getOpt('testTarget')) {
|
|
230
|
-
target =
|
|
231
|
-
$.getOpt('testTarget') === '/'
|
|
232
|
-
? $.getOpt('target')
|
|
233
|
-
: $.getOpt('testTarget');
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (typeof target === 'function') {
|
|
237
|
-
return target(params);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
var separator = target.indexOf('?') < 0 ? '?' : '&';
|
|
241
|
-
var joinedParams = params.join('&');
|
|
242
|
-
|
|
243
|
-
return target + separator + joinedParams;
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
var onDrop = function (event) {
|
|
248
|
-
$h.stopEvent(event);
|
|
249
|
-
|
|
250
|
-
//handle dropped things as items if we can (this lets us deal with folders nicer in some cases)
|
|
251
|
-
if (event.dataTransfer && event.dataTransfer.items) {
|
|
252
|
-
loadFiles(event.dataTransfer.items, event);
|
|
253
|
-
}
|
|
254
|
-
//else handle them as files
|
|
255
|
-
else if (event.dataTransfer && event.dataTransfer.files) {
|
|
256
|
-
loadFiles(event.dataTransfer.files, event);
|
|
257
|
-
}
|
|
258
|
-
};
|
|
259
|
-
var preventDefault = function (e) {
|
|
260
|
-
e.preventDefault();
|
|
261
|
-
};
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* processes a single upload item (file or directory)
|
|
265
|
-
* @param {Object} item item to upload, may be file or directory entry
|
|
266
|
-
* @param {string} path current file path
|
|
267
|
-
* @param {File[]} items list of files to append new items to
|
|
268
|
-
* @param {Function} cb callback invoked when item is processed
|
|
269
|
-
*/
|
|
270
|
-
function processItem(item, path, items, cb) {
|
|
271
|
-
var entry;
|
|
272
|
-
if (item.isFile) {
|
|
273
|
-
// file provided
|
|
274
|
-
return item.file(function (file) {
|
|
275
|
-
file.relativePath = path + file.name;
|
|
276
|
-
items.push(file);
|
|
277
|
-
cb();
|
|
278
|
-
});
|
|
279
|
-
} else if (item.isDirectory) {
|
|
280
|
-
// item is already a directory entry, just assign
|
|
281
|
-
entry = item;
|
|
282
|
-
} else if (item instanceof File) {
|
|
283
|
-
items.push(item);
|
|
284
|
-
}
|
|
285
|
-
if ('function' === typeof item.webkitGetAsEntry) {
|
|
286
|
-
// get entry from file object
|
|
287
|
-
entry = item.webkitGetAsEntry();
|
|
288
|
-
}
|
|
289
|
-
if (entry && entry.isDirectory) {
|
|
290
|
-
// directory provided, process it
|
|
291
|
-
return processDirectory(entry, path + entry.name + '/', items, cb);
|
|
292
|
-
}
|
|
293
|
-
if ('function' === typeof item.getAsFile) {
|
|
294
|
-
// item represents a File object, convert it
|
|
295
|
-
item = item.getAsFile();
|
|
296
|
-
if (item instanceof File) {
|
|
297
|
-
item.relativePath = path + item.name;
|
|
298
|
-
items.push(item);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
cb(); // indicate processing is done
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* cps-style list iteration.
|
|
306
|
-
* invokes all functions in list and waits for their callback to be
|
|
307
|
-
* triggered.
|
|
308
|
-
* @param {Function[]} items list of functions expecting callback parameter
|
|
309
|
-
* @param {Function} cb callback to trigger after the last callback has been invoked
|
|
310
|
-
*/
|
|
311
|
-
function processCallbacks(items, cb) {
|
|
312
|
-
if (!items || items.length === 0) {
|
|
313
|
-
// empty or no list, invoke callback
|
|
314
|
-
return cb();
|
|
315
|
-
}
|
|
316
|
-
// invoke current function, pass the next part as continuation
|
|
317
|
-
items[0](function () {
|
|
318
|
-
processCallbacks(items.slice(1), cb);
|
|
319
|
-
});
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
/**
|
|
323
|
-
* recursively traverse directory and collect files to upload
|
|
324
|
-
* @param {Object} directory directory to process
|
|
325
|
-
* @param {string} path current path
|
|
326
|
-
* @param {File[]} items target list of items
|
|
327
|
-
* @param {Function} cb callback invoked after traversing directory
|
|
328
|
-
*/
|
|
329
|
-
function processDirectory(directory, path, items, cb) {
|
|
330
|
-
var dirReader = directory.createReader();
|
|
331
|
-
dirReader.readEntries(function (entries) {
|
|
332
|
-
if (!entries.length) {
|
|
333
|
-
// empty directory, skip
|
|
334
|
-
return cb();
|
|
335
|
-
}
|
|
336
|
-
// process all conversion callbacks, finally invoke own one
|
|
337
|
-
processCallbacks(
|
|
338
|
-
entries.map(function (entry) {
|
|
339
|
-
// bind all properties except for callback
|
|
340
|
-
return processItem.bind(null, entry, path, items);
|
|
341
|
-
}),
|
|
342
|
-
cb
|
|
343
|
-
);
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
/**
|
|
348
|
-
* process items to extract files to be uploaded
|
|
349
|
-
* @param {File[]} items items to process
|
|
350
|
-
* @param {Event} event event that led to upload
|
|
351
|
-
*/
|
|
352
|
-
function loadFiles(items, event) {
|
|
353
|
-
if (!items.length) {
|
|
354
|
-
return; // nothing to do
|
|
355
|
-
}
|
|
356
|
-
$.fire('beforeAdd');
|
|
357
|
-
var files = [];
|
|
358
|
-
processCallbacks(
|
|
359
|
-
Array.prototype.map.call(items, function (item) {
|
|
360
|
-
// bind all properties except for callback
|
|
361
|
-
return processItem.bind(null, item, '', files);
|
|
362
|
-
}),
|
|
363
|
-
function () {
|
|
364
|
-
if (files.length) {
|
|
365
|
-
// at least one file found
|
|
366
|
-
appendFilesFromFileList(files, event);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
var appendFilesFromFileList = function (fileList, event) {
|
|
373
|
-
// check for uploading too many files
|
|
374
|
-
var errorCount = 0;
|
|
375
|
-
var o = $.getOpt([
|
|
376
|
-
'maxFiles',
|
|
377
|
-
'minFileSize',
|
|
378
|
-
'maxFileSize',
|
|
379
|
-
'maxFilesErrorCallback',
|
|
380
|
-
'minFileSizeErrorCallback',
|
|
381
|
-
'maxFileSizeErrorCallback',
|
|
382
|
-
'fileType',
|
|
383
|
-
'fileTypeErrorCallback',
|
|
384
|
-
]);
|
|
385
|
-
if (
|
|
386
|
-
typeof o.maxFiles !== 'undefined' &&
|
|
387
|
-
o.maxFiles < fileList.length + $.files.length
|
|
388
|
-
) {
|
|
389
|
-
// if single-file upload, file is already added, and trying to add 1 new file, simply replace the already-added file
|
|
390
|
-
if (o.maxFiles === 1 && $.files.length === 1 && fileList.length === 1) {
|
|
391
|
-
$.removeFile($.files[0]);
|
|
392
|
-
} else {
|
|
393
|
-
o.maxFilesErrorCallback(fileList, errorCount++);
|
|
394
|
-
return false;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
var files = [],
|
|
398
|
-
filesSkipped = [],
|
|
399
|
-
remaining = fileList.length;
|
|
400
|
-
var decreaseReamining = function () {
|
|
401
|
-
if (!--remaining) {
|
|
402
|
-
// all files processed, trigger event
|
|
403
|
-
if (!files.length && !filesSkipped.length) {
|
|
404
|
-
// no succeeded files, just skip
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
407
|
-
setTimeout(function () {
|
|
408
|
-
$.fire('filesAdded', files, filesSkipped);
|
|
409
|
-
}, 0);
|
|
410
|
-
}
|
|
411
|
-
};
|
|
412
|
-
$h.each(fileList, function (file) {
|
|
413
|
-
var fileName = file.name;
|
|
414
|
-
if (o.fileType.length > 0) {
|
|
415
|
-
var fileTypeFound = false;
|
|
416
|
-
for (var index in o.fileType) {
|
|
417
|
-
var extension = '.' + o.fileType[index];
|
|
418
|
-
if (
|
|
419
|
-
fileName
|
|
420
|
-
.toLowerCase()
|
|
421
|
-
.indexOf(
|
|
422
|
-
extension.toLowerCase(),
|
|
423
|
-
fileName.length - extension.length
|
|
424
|
-
) !== -1
|
|
425
|
-
) {
|
|
426
|
-
fileTypeFound = true;
|
|
427
|
-
break;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
if (!fileTypeFound) {
|
|
431
|
-
o.fileTypeErrorCallback(file, errorCount++);
|
|
432
|
-
return false;
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
if (typeof o.minFileSize !== 'undefined' && file.size < o.minFileSize) {
|
|
437
|
-
o.minFileSizeErrorCallback(file, errorCount++);
|
|
438
|
-
return false;
|
|
439
|
-
}
|
|
440
|
-
if (typeof o.maxFileSize !== 'undefined' && file.size > o.maxFileSize) {
|
|
441
|
-
o.maxFileSizeErrorCallback(file, errorCount++);
|
|
442
|
-
return false;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
function addFile(uniqueIdentifier) {
|
|
446
|
-
if (!$.getFromUniqueIdentifier(uniqueIdentifier)) {
|
|
447
|
-
(function () {
|
|
448
|
-
file.uniqueIdentifier = uniqueIdentifier;
|
|
449
|
-
var f = new ResumableFile($, file, uniqueIdentifier);
|
|
450
|
-
$.files.push(f);
|
|
451
|
-
files.push(f);
|
|
452
|
-
f.container = typeof event != 'undefined' ? event.srcElement : null;
|
|
453
|
-
setTimeout(function () {
|
|
454
|
-
$.fire('fileAdded', f, event);
|
|
455
|
-
}, 0);
|
|
456
|
-
})();
|
|
457
|
-
} else {
|
|
458
|
-
filesSkipped.push(file);
|
|
459
|
-
}
|
|
460
|
-
decreaseReamining();
|
|
461
|
-
}
|
|
462
|
-
// directories have size == 0
|
|
463
|
-
var uniqueIdentifier = $h.generateUniqueIdentifier(file, event);
|
|
464
|
-
if (uniqueIdentifier && typeof uniqueIdentifier.then === 'function') {
|
|
465
|
-
// Promise or Promise-like object provided as unique identifier
|
|
466
|
-
uniqueIdentifier.then(
|
|
467
|
-
function (uniqueIdentifier) {
|
|
468
|
-
// unique identifier generation succeeded
|
|
469
|
-
addFile(uniqueIdentifier);
|
|
470
|
-
},
|
|
471
|
-
function () {
|
|
472
|
-
// unique identifier generation failed
|
|
473
|
-
// skip further processing, only decrease file count
|
|
474
|
-
decreaseReamining();
|
|
475
|
-
}
|
|
476
|
-
);
|
|
477
|
-
} else {
|
|
478
|
-
// non-Promise provided as unique identifier, process synchronously
|
|
479
|
-
addFile(uniqueIdentifier);
|
|
480
|
-
}
|
|
481
|
-
});
|
|
482
|
-
};
|
|
483
|
-
|
|
484
|
-
// INTERNAL OBJECT TYPES
|
|
485
|
-
function ResumableFile(resumableObj, file, uniqueIdentifier) {
|
|
486
|
-
var $ = this;
|
|
487
|
-
$.opts = {};
|
|
488
|
-
$.getOpt = resumableObj.getOpt;
|
|
489
|
-
$._prevProgress = 0;
|
|
490
|
-
$.resumableObj = resumableObj;
|
|
491
|
-
$.file = file;
|
|
492
|
-
$.fileName = file.fileName || file.name; // Some confusion in different versions of Firefox
|
|
493
|
-
$.size = file.size;
|
|
494
|
-
$.relativePath = file.relativePath || file.webkitRelativePath || $.fileName;
|
|
495
|
-
$.uniqueIdentifier = uniqueIdentifier;
|
|
496
|
-
$._pause = false;
|
|
497
|
-
$.container = '';
|
|
498
|
-
var _error = uniqueIdentifier !== undefined;
|
|
499
|
-
|
|
500
|
-
// Callback when something happens within the chunk
|
|
501
|
-
var chunkEvent = function (event, message) {
|
|
502
|
-
// event can be 'progress', 'success', 'error' or 'retry'
|
|
503
|
-
switch (event) {
|
|
504
|
-
case 'progress':
|
|
505
|
-
$.resumableObj.fire('fileProgress', $, message);
|
|
506
|
-
break;
|
|
507
|
-
case 'error':
|
|
508
|
-
$.abort();
|
|
509
|
-
_error = true;
|
|
510
|
-
$.chunks = [];
|
|
511
|
-
$.resumableObj.fire('fileError', $, message);
|
|
512
|
-
break;
|
|
513
|
-
case 'success':
|
|
514
|
-
if (_error) return;
|
|
515
|
-
$.resumableObj.fire('fileProgress', $); // it's at least progress
|
|
516
|
-
if ($.isComplete()) {
|
|
517
|
-
$.resumableObj.fire('fileSuccess', $, message);
|
|
518
|
-
}
|
|
519
|
-
break;
|
|
520
|
-
case 'retry':
|
|
521
|
-
$.resumableObj.fire('fileRetry', $);
|
|
522
|
-
break;
|
|
523
|
-
}
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
// Main code to set up a file object with chunks,
|
|
527
|
-
// packaged to be able to handle retries if needed.
|
|
528
|
-
$.chunks = [];
|
|
529
|
-
$.abort = function () {
|
|
530
|
-
// Stop current uploads
|
|
531
|
-
var abortCount = 0;
|
|
532
|
-
$h.each($.chunks, function (c) {
|
|
533
|
-
if (c.status() == 'uploading') {
|
|
534
|
-
c.abort();
|
|
535
|
-
abortCount++;
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
if (abortCount > 0) $.resumableObj.fire('fileProgress', $);
|
|
539
|
-
};
|
|
540
|
-
$.cancel = function () {
|
|
541
|
-
// Reset this file to be void
|
|
542
|
-
var _chunks = $.chunks;
|
|
543
|
-
$.chunks = [];
|
|
544
|
-
// Stop current uploads
|
|
545
|
-
$h.each(_chunks, function (c) {
|
|
546
|
-
if (c.status() == 'uploading') {
|
|
547
|
-
c.abort();
|
|
548
|
-
$.resumableObj.uploadNextChunk();
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
$.resumableObj.removeFile($);
|
|
552
|
-
$.resumableObj.fire('fileProgress', $);
|
|
553
|
-
};
|
|
554
|
-
$.retry = function () {
|
|
555
|
-
$.bootstrap();
|
|
556
|
-
var firedRetry = false;
|
|
557
|
-
$.resumableObj.on('chunkingComplete', function () {
|
|
558
|
-
if (!firedRetry) $.resumableObj.upload();
|
|
559
|
-
firedRetry = true;
|
|
560
|
-
});
|
|
561
|
-
};
|
|
562
|
-
$.bootstrap = function () {
|
|
563
|
-
$.abort();
|
|
564
|
-
_error = false;
|
|
565
|
-
// Rebuild stack of chunks from file
|
|
566
|
-
$.chunks = [];
|
|
567
|
-
$._prevProgress = 0;
|
|
568
|
-
var round = $.getOpt('forceChunkSize') ? Math.ceil : Math.floor;
|
|
569
|
-
var maxOffset = Math.max(round($.file.size / $.getOpt('chunkSize')), 1);
|
|
570
|
-
for (var offset = 0; offset < maxOffset; offset++) {
|
|
571
|
-
(function (offset) {
|
|
572
|
-
setTimeout(function () {
|
|
573
|
-
$.chunks.push(
|
|
574
|
-
new ResumableChunk($.resumableObj, $, offset, chunkEvent)
|
|
575
|
-
);
|
|
576
|
-
$.resumableObj.fire('chunkingProgress', $, offset / maxOffset);
|
|
577
|
-
}, 0);
|
|
578
|
-
})(offset);
|
|
579
|
-
}
|
|
580
|
-
setTimeout(function () {
|
|
581
|
-
$.resumableObj.fire('chunkingComplete', $);
|
|
582
|
-
}, 0);
|
|
583
|
-
};
|
|
584
|
-
$.progress = function () {
|
|
585
|
-
if (_error) return 1;
|
|
586
|
-
// Sum up progress across everything
|
|
587
|
-
var ret = 0;
|
|
588
|
-
var error = false;
|
|
589
|
-
$h.each($.chunks, function (c) {
|
|
590
|
-
if (c.status() == 'error') error = true;
|
|
591
|
-
ret += c.progress(true); // get chunk progress relative to entire file
|
|
592
|
-
});
|
|
593
|
-
ret = error ? 1 : ret > 0.99999 ? 1 : ret;
|
|
594
|
-
ret = Math.max($._prevProgress, ret); // We don't want to lose percentages when an upload is paused
|
|
595
|
-
$._prevProgress = ret;
|
|
596
|
-
return ret;
|
|
597
|
-
};
|
|
598
|
-
$.isUploading = function () {
|
|
599
|
-
var uploading = false;
|
|
600
|
-
$h.each($.chunks, function (chunk) {
|
|
601
|
-
if (chunk.status() == 'uploading') {
|
|
602
|
-
uploading = true;
|
|
603
|
-
return false;
|
|
604
|
-
}
|
|
605
|
-
});
|
|
606
|
-
return uploading;
|
|
607
|
-
};
|
|
608
|
-
$.isComplete = function () {
|
|
609
|
-
var outstanding = false;
|
|
610
|
-
$h.each($.chunks, function (chunk) {
|
|
611
|
-
var status = chunk.status();
|
|
612
|
-
if (
|
|
613
|
-
status == 'pending' ||
|
|
614
|
-
status == 'uploading' ||
|
|
615
|
-
chunk.preprocessState === 1
|
|
616
|
-
) {
|
|
617
|
-
outstanding = true;
|
|
618
|
-
return false;
|
|
619
|
-
}
|
|
620
|
-
});
|
|
621
|
-
return !outstanding;
|
|
622
|
-
};
|
|
623
|
-
$.pause = function (pause) {
|
|
624
|
-
if (typeof pause === 'undefined') {
|
|
625
|
-
$._pause = $._pause ? false : true;
|
|
626
|
-
} else {
|
|
627
|
-
$._pause = pause;
|
|
628
|
-
}
|
|
629
|
-
};
|
|
630
|
-
$.isPaused = function () {
|
|
631
|
-
return $._pause;
|
|
632
|
-
};
|
|
633
|
-
|
|
634
|
-
// Bootstrap and return
|
|
635
|
-
$.resumableObj.fire('chunkingStart', $);
|
|
636
|
-
$.bootstrap();
|
|
637
|
-
return this;
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
function ResumableChunk(resumableObj, fileObj, offset, callback) {
|
|
641
|
-
var $ = this;
|
|
642
|
-
$.opts = {};
|
|
643
|
-
$.getOpt = resumableObj.getOpt;
|
|
644
|
-
$.resumableObj = resumableObj;
|
|
645
|
-
$.fileObj = fileObj;
|
|
646
|
-
$.fileObjSize = fileObj.size;
|
|
647
|
-
$.fileObjType = fileObj.file.type;
|
|
648
|
-
$.offset = offset;
|
|
649
|
-
$.callback = callback;
|
|
650
|
-
$.lastProgressCallback = new Date();
|
|
651
|
-
$.tested = false;
|
|
652
|
-
$.retries = 0;
|
|
653
|
-
$.pendingRetry = false;
|
|
654
|
-
$.preprocessState = 0; // 0 = unprocessed, 1 = processing, 2 = finished
|
|
655
|
-
|
|
656
|
-
// Computed properties
|
|
657
|
-
var chunkSize = $.getOpt('chunkSize');
|
|
658
|
-
$.loaded = 0;
|
|
659
|
-
$.startByte = $.offset * chunkSize;
|
|
660
|
-
$.endByte = Math.min($.fileObjSize, ($.offset + 1) * chunkSize);
|
|
661
|
-
if ($.fileObjSize - $.endByte < chunkSize && !$.getOpt('forceChunkSize')) {
|
|
662
|
-
// The last chunk will be bigger than the chunk size, but less than 2*chunkSize
|
|
663
|
-
$.endByte = $.fileObjSize;
|
|
664
|
-
}
|
|
665
|
-
$.xhr = null;
|
|
666
|
-
|
|
667
|
-
// test() makes a GET request without any data to see if the chunk has already been uploaded in a previous session
|
|
668
|
-
$.test = function () {
|
|
669
|
-
// Set up request and listen for event
|
|
670
|
-
$.xhr = new XMLHttpRequest();
|
|
671
|
-
|
|
672
|
-
var testHandler = function (e) {
|
|
673
|
-
$.tested = true;
|
|
674
|
-
var status = $.status();
|
|
675
|
-
if (status == 'success') {
|
|
676
|
-
$.callback(status, $.message());
|
|
677
|
-
$.resumableObj.uploadNextChunk();
|
|
678
|
-
} else {
|
|
679
|
-
$.send();
|
|
680
|
-
}
|
|
681
|
-
};
|
|
682
|
-
$.xhr.addEventListener('load', testHandler, false);
|
|
683
|
-
$.xhr.addEventListener('error', testHandler, false);
|
|
684
|
-
$.xhr.addEventListener('timeout', testHandler, false);
|
|
685
|
-
|
|
686
|
-
// Add data from the query options
|
|
687
|
-
var params = [];
|
|
688
|
-
var parameterNamespace = $.getOpt('parameterNamespace');
|
|
689
|
-
var customQuery = $.getOpt('query');
|
|
690
|
-
if (typeof customQuery == 'function')
|
|
691
|
-
customQuery = customQuery($.fileObj, $);
|
|
692
|
-
$h.each(customQuery, function (k, v) {
|
|
693
|
-
params.push(
|
|
694
|
-
[
|
|
695
|
-
encodeURIComponent(parameterNamespace + k),
|
|
696
|
-
encodeURIComponent(v),
|
|
697
|
-
].join('=')
|
|
698
|
-
);
|
|
699
|
-
});
|
|
700
|
-
// Add extra data to identify chunk
|
|
701
|
-
params = params.concat(
|
|
702
|
-
[
|
|
703
|
-
// define key/value pairs for additional parameters
|
|
704
|
-
['chunkNumberParameterName', $.offset + 1],
|
|
705
|
-
['chunkSizeParameterName', $.getOpt('chunkSize')],
|
|
706
|
-
['currentChunkSizeParameterName', $.endByte - $.startByte],
|
|
707
|
-
['totalSizeParameterName', $.fileObjSize],
|
|
708
|
-
['typeParameterName', $.fileObjType],
|
|
709
|
-
['identifierParameterName', $.fileObj.uniqueIdentifier],
|
|
710
|
-
['fileNameParameterName', $.fileObj.fileName],
|
|
711
|
-
['relativePathParameterName', $.fileObj.relativePath],
|
|
712
|
-
['totalChunksParameterName', $.fileObj.chunks.length],
|
|
713
|
-
]
|
|
714
|
-
.filter(function (pair) {
|
|
715
|
-
// include items that resolve to truthy values
|
|
716
|
-
// i.e. exclude false, null, undefined and empty strings
|
|
717
|
-
return $.getOpt(pair[0]);
|
|
718
|
-
})
|
|
719
|
-
.map(function (pair) {
|
|
720
|
-
// map each key/value pair to its final form
|
|
721
|
-
return [
|
|
722
|
-
parameterNamespace + $.getOpt(pair[0]),
|
|
723
|
-
encodeURIComponent(pair[1]),
|
|
724
|
-
].join('=');
|
|
725
|
-
})
|
|
726
|
-
);
|
|
727
|
-
// Append the relevant chunk and send it
|
|
728
|
-
$.xhr.open($.getOpt('testMethod'), $h.getTarget('test', params));
|
|
729
|
-
$.xhr.timeout = $.getOpt('xhrTimeout');
|
|
730
|
-
$.xhr.withCredentials = $.getOpt('withCredentials');
|
|
731
|
-
// Add data from header options
|
|
732
|
-
var customHeaders = $.getOpt('headers');
|
|
733
|
-
if (typeof customHeaders === 'function') {
|
|
734
|
-
customHeaders = customHeaders($.fileObj, $);
|
|
735
|
-
}
|
|
736
|
-
$h.each(customHeaders, function (k, v) {
|
|
737
|
-
$.xhr.setRequestHeader(k, v);
|
|
738
|
-
});
|
|
739
|
-
$.xhr.send(null);
|
|
740
|
-
};
|
|
741
|
-
|
|
742
|
-
$.preprocessFinished = function () {
|
|
743
|
-
$.preprocessState = 2;
|
|
744
|
-
$.send();
|
|
745
|
-
};
|
|
746
|
-
|
|
747
|
-
// send() uploads the actual data in a POST call
|
|
748
|
-
$.send = function () {
|
|
749
|
-
var preprocess = $.getOpt('preprocess');
|
|
750
|
-
if (typeof preprocess === 'function') {
|
|
751
|
-
switch ($.preprocessState) {
|
|
752
|
-
case 0:
|
|
753
|
-
$.preprocessState = 1;
|
|
754
|
-
preprocess($);
|
|
755
|
-
return;
|
|
756
|
-
case 1:
|
|
757
|
-
return;
|
|
758
|
-
case 2:
|
|
759
|
-
break;
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
if ($.getOpt('testChunks') && !$.tested) {
|
|
763
|
-
$.test();
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
|
|
767
|
-
// Set up request and listen for event
|
|
768
|
-
$.xhr = new XMLHttpRequest();
|
|
769
|
-
// Progress
|
|
770
|
-
$.xhr.upload.addEventListener(
|
|
771
|
-
'progress',
|
|
772
|
-
function (e) {
|
|
773
|
-
if (
|
|
774
|
-
new Date() - $.lastProgressCallback >
|
|
775
|
-
$.getOpt('throttleProgressCallbacks') * 1000
|
|
776
|
-
) {
|
|
777
|
-
$.callback('progress');
|
|
778
|
-
$.lastProgressCallback = new Date();
|
|
779
|
-
}
|
|
780
|
-
$.loaded = e.loaded || 0;
|
|
781
|
-
},
|
|
782
|
-
false
|
|
783
|
-
);
|
|
784
|
-
$.loaded = 0;
|
|
785
|
-
$.pendingRetry = false;
|
|
786
|
-
$.callback('progress');
|
|
787
|
-
|
|
788
|
-
// Done (either done, failed or retry)
|
|
789
|
-
var doneHandler = function (e) {
|
|
790
|
-
var status = $.status();
|
|
791
|
-
if (status == 'success' || status == 'error') {
|
|
792
|
-
$.callback(status, $.message());
|
|
793
|
-
$.resumableObj.uploadNextChunk();
|
|
794
|
-
} else {
|
|
795
|
-
$.callback('retry', $.message());
|
|
796
|
-
$.abort();
|
|
797
|
-
$.retries++;
|
|
798
|
-
var retryInterval = $.getOpt('chunkRetryInterval');
|
|
799
|
-
if (retryInterval !== undefined) {
|
|
800
|
-
$.pendingRetry = true;
|
|
801
|
-
setTimeout($.send, retryInterval);
|
|
802
|
-
} else {
|
|
803
|
-
$.send();
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
};
|
|
807
|
-
$.xhr.addEventListener('load', doneHandler, false);
|
|
808
|
-
$.xhr.addEventListener('error', doneHandler, false);
|
|
809
|
-
$.xhr.addEventListener('timeout', doneHandler, false);
|
|
810
|
-
|
|
811
|
-
// Set up the basic query data from Resumable
|
|
812
|
-
var query = [
|
|
813
|
-
['chunkNumberParameterName', $.offset + 1],
|
|
814
|
-
['chunkSizeParameterName', $.getOpt('chunkSize')],
|
|
815
|
-
['currentChunkSizeParameterName', $.endByte - $.startByte],
|
|
816
|
-
['totalSizeParameterName', $.fileObjSize],
|
|
817
|
-
['typeParameterName', $.fileObjType],
|
|
818
|
-
['identifierParameterName', $.fileObj.uniqueIdentifier],
|
|
819
|
-
['fileNameParameterName', $.fileObj.fileName],
|
|
820
|
-
['relativePathParameterName', $.fileObj.relativePath],
|
|
821
|
-
['totalChunksParameterName', $.fileObj.chunks.length],
|
|
822
|
-
]
|
|
823
|
-
.filter(function (pair) {
|
|
824
|
-
// include items that resolve to truthy values
|
|
825
|
-
// i.e. exclude false, null, undefined and empty strings
|
|
826
|
-
return $.getOpt(pair[0]);
|
|
827
|
-
})
|
|
828
|
-
.reduce(function (query, pair) {
|
|
829
|
-
// assign query key/value
|
|
830
|
-
query[$.getOpt(pair[0])] = pair[1];
|
|
831
|
-
return query;
|
|
832
|
-
}, {});
|
|
833
|
-
// Mix in custom data
|
|
834
|
-
var customQuery = $.getOpt('query');
|
|
835
|
-
if (typeof customQuery == 'function')
|
|
836
|
-
customQuery = customQuery($.fileObj, $);
|
|
837
|
-
$h.each(customQuery, function (k, v) {
|
|
838
|
-
query[k] = v;
|
|
839
|
-
});
|
|
840
|
-
|
|
841
|
-
var func = $.fileObj.file.buffer.slice
|
|
842
|
-
? 'slice'
|
|
843
|
-
: $.fileObj.file.buffer.mozSlice
|
|
844
|
-
? 'mozSlice'
|
|
845
|
-
: $.fileObj.file.buffer.webkitSlice
|
|
846
|
-
? 'webkitSlice'
|
|
847
|
-
: 'slice';
|
|
848
|
-
var bytes = $.fileObj.file.buffer[func](
|
|
849
|
-
$.startByte,
|
|
850
|
-
$.endByte,
|
|
851
|
-
$.getOpt('setChunkTypeFromFile') ? $.fileObj.file.type : ''
|
|
852
|
-
);
|
|
853
|
-
var data = null;
|
|
854
|
-
var params = [];
|
|
855
|
-
|
|
856
|
-
var parameterNamespace = $.getOpt('parameterNamespace');
|
|
857
|
-
if ($.getOpt('method') === 'octet') {
|
|
858
|
-
// Add data from the query options
|
|
859
|
-
data = bytes;
|
|
860
|
-
$h.each(query, function (k, v) {
|
|
861
|
-
params.push(
|
|
862
|
-
[
|
|
863
|
-
encodeURIComponent(parameterNamespace + k),
|
|
864
|
-
encodeURIComponent(v),
|
|
865
|
-
].join('=')
|
|
866
|
-
);
|
|
867
|
-
});
|
|
868
|
-
} else {
|
|
869
|
-
// Add data from the query options
|
|
870
|
-
data = new FormData();
|
|
871
|
-
$h.each(query, function (k, v) {
|
|
872
|
-
data.append(parameterNamespace + k, v);
|
|
873
|
-
params.push(
|
|
874
|
-
[
|
|
875
|
-
encodeURIComponent(parameterNamespace + k),
|
|
876
|
-
encodeURIComponent(v),
|
|
877
|
-
].join('=')
|
|
878
|
-
);
|
|
879
|
-
});
|
|
880
|
-
if ($.getOpt('chunkFormat') == 'blob') {
|
|
881
|
-
data.append(
|
|
882
|
-
parameterNamespace + $.getOpt('fileParameterName'),
|
|
883
|
-
bytes,
|
|
884
|
-
$.fileObj.fileName
|
|
885
|
-
);
|
|
886
|
-
} else if ($.getOpt('chunkFormat') == 'base64') {
|
|
887
|
-
var fr = new FileReader();
|
|
888
|
-
fr.onload = function (e) {
|
|
889
|
-
data.append(
|
|
890
|
-
parameterNamespace + $.getOpt('fileParameterName'),
|
|
891
|
-
fr.result
|
|
892
|
-
);
|
|
893
|
-
$.xhr.send(data);
|
|
894
|
-
};
|
|
895
|
-
fr.readAsDataURL(bytes);
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
var target = $h.getTarget('upload', params);
|
|
900
|
-
var method = $.getOpt('uploadMethod');
|
|
901
|
-
|
|
902
|
-
$.xhr.open(method, target);
|
|
903
|
-
if ($.getOpt('method') === 'octet') {
|
|
904
|
-
$.xhr.setRequestHeader('Content-Type', 'application/octet-stream');
|
|
905
|
-
}
|
|
906
|
-
$.xhr.timeout = $.getOpt('xhrTimeout');
|
|
907
|
-
$.xhr.withCredentials = $.getOpt('withCredentials');
|
|
908
|
-
// Add data from header options
|
|
909
|
-
var customHeaders = $.getOpt('headers');
|
|
910
|
-
if (typeof customHeaders === 'function') {
|
|
911
|
-
customHeaders = customHeaders($.fileObj, $);
|
|
912
|
-
}
|
|
913
|
-
|
|
914
|
-
$h.each(customHeaders, function (k, v) {
|
|
915
|
-
$.xhr.setRequestHeader(k, v);
|
|
916
|
-
});
|
|
917
|
-
|
|
918
|
-
if ($.getOpt('chunkFormat') == 'blob') {
|
|
919
|
-
$.xhr.send(data);
|
|
920
|
-
}
|
|
921
|
-
};
|
|
922
|
-
$.abort = function () {
|
|
923
|
-
// Abort and reset
|
|
924
|
-
if ($.xhr) $.xhr.abort();
|
|
925
|
-
$.xhr = null;
|
|
926
|
-
};
|
|
927
|
-
$.status = function () {
|
|
928
|
-
// Returns: 'pending', 'uploading', 'success', 'error'
|
|
929
|
-
if ($.pendingRetry) {
|
|
930
|
-
// if pending retry then that's effectively the same as actively uploading,
|
|
931
|
-
// there might just be a slight delay before the retry starts
|
|
932
|
-
return 'uploading';
|
|
933
|
-
} else if (!$.xhr) {
|
|
934
|
-
return 'pending';
|
|
935
|
-
} else if ($.xhr.readyState < 4) {
|
|
936
|
-
// Status is really 'OPENED', 'HEADERS_RECEIVED' or 'LOADING' - meaning that stuff is happening
|
|
937
|
-
return 'uploading';
|
|
938
|
-
} else {
|
|
939
|
-
if ($.xhr.status == 200 || $.xhr.status == 201) {
|
|
940
|
-
// HTTP 200, 201 (created)
|
|
941
|
-
return 'success';
|
|
942
|
-
} else if (
|
|
943
|
-
$h.contains($.getOpt('permanentErrors'), $.xhr.status) ||
|
|
944
|
-
$.retries >= $.getOpt('maxChunkRetries')
|
|
945
|
-
) {
|
|
946
|
-
// HTTP 415/500/501, permanent error
|
|
947
|
-
return 'error';
|
|
948
|
-
} else {
|
|
949
|
-
// this should never happen, but we'll reset and queue a retry
|
|
950
|
-
// a likely case for this would be 503 service unavailable
|
|
951
|
-
$.abort();
|
|
952
|
-
return 'pending';
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
};
|
|
956
|
-
$.message = function () {
|
|
957
|
-
return $.xhr ? $.xhr.responseText : '';
|
|
958
|
-
};
|
|
959
|
-
$.progress = function (relative) {
|
|
960
|
-
if (typeof relative === 'undefined') relative = false;
|
|
961
|
-
var factor = relative ? ($.endByte - $.startByte) / $.fileObjSize : 1;
|
|
962
|
-
if ($.pendingRetry) return 0;
|
|
963
|
-
if (!$.xhr || !$.xhr.status) factor *= 0.95;
|
|
964
|
-
var s = $.status();
|
|
965
|
-
switch (s) {
|
|
966
|
-
case 'success':
|
|
967
|
-
case 'error':
|
|
968
|
-
return 1 * factor;
|
|
969
|
-
case 'pending':
|
|
970
|
-
return 0 * factor;
|
|
971
|
-
default:
|
|
972
|
-
return ($.loaded / ($.endByte - $.startByte)) * factor;
|
|
973
|
-
}
|
|
974
|
-
};
|
|
975
|
-
return this;
|
|
976
|
-
}
|
|
977
|
-
|
|
978
|
-
// QUEUE
|
|
979
|
-
$.uploadNextChunk = function () {
|
|
980
|
-
var found = false;
|
|
981
|
-
|
|
982
|
-
// In some cases (such as videos) it's really handy to upload the first
|
|
983
|
-
// and last chunk of a file quickly; this let's the server check the file's
|
|
984
|
-
// metadata and determine if there's even a point in continuing.
|
|
985
|
-
if ($.getOpt('prioritizeFirstAndLastChunk')) {
|
|
986
|
-
$h.each($.files, function (file) {
|
|
987
|
-
if (
|
|
988
|
-
file.chunks.length &&
|
|
989
|
-
file.chunks[0].status() == 'pending' &&
|
|
990
|
-
file.chunks[0].preprocessState === 0
|
|
991
|
-
) {
|
|
992
|
-
file.chunks[0].send();
|
|
993
|
-
found = true;
|
|
994
|
-
return false;
|
|
995
|
-
}
|
|
996
|
-
if (
|
|
997
|
-
file.chunks.length > 1 &&
|
|
998
|
-
file.chunks[file.chunks.length - 1].status() == 'pending' &&
|
|
999
|
-
file.chunks[file.chunks.length - 1].preprocessState === 0
|
|
1000
|
-
) {
|
|
1001
|
-
file.chunks[file.chunks.length - 1].send();
|
|
1002
|
-
found = true;
|
|
1003
|
-
return false;
|
|
1004
|
-
}
|
|
1005
|
-
});
|
|
1006
|
-
if (found) return true;
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
// Now, simply look for the next, best thing to upload
|
|
1010
|
-
$h.each($.files, function (file) {
|
|
1011
|
-
if (file.isPaused() === false) {
|
|
1012
|
-
$h.each(file.chunks, function (chunk) {
|
|
1013
|
-
if (chunk.status() == 'pending' && chunk.preprocessState === 0) {
|
|
1014
|
-
chunk.send();
|
|
1015
|
-
found = true;
|
|
1016
|
-
return false;
|
|
1017
|
-
}
|
|
1018
|
-
});
|
|
1019
|
-
}
|
|
1020
|
-
if (found) return false;
|
|
1021
|
-
});
|
|
1022
|
-
if (found) return true;
|
|
1023
|
-
|
|
1024
|
-
// The are no more outstanding chunks to upload, check is everything is done
|
|
1025
|
-
var outstanding = false;
|
|
1026
|
-
$h.each($.files, function (file) {
|
|
1027
|
-
if (!file.isComplete()) {
|
|
1028
|
-
outstanding = true;
|
|
1029
|
-
return false;
|
|
1030
|
-
}
|
|
1031
|
-
});
|
|
1032
|
-
if (!outstanding) {
|
|
1033
|
-
// All chunks have been uploaded, complete
|
|
1034
|
-
$.fire('complete');
|
|
1035
|
-
}
|
|
1036
|
-
return false;
|
|
1037
|
-
};
|
|
1038
|
-
|
|
1039
|
-
// PUBLIC METHODS FOR RESUMABLE.JS
|
|
1040
|
-
$.assignBrowse = function (domNodes, isDirectory) {
|
|
1041
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1042
|
-
|
|
1043
|
-
$h.each(domNodes, function (domNode) {
|
|
1044
|
-
var input;
|
|
1045
|
-
if (domNode.tagName === 'INPUT' && domNode.type === 'file') {
|
|
1046
|
-
input = domNode;
|
|
1047
|
-
} else {
|
|
1048
|
-
input = document.createElement('input');
|
|
1049
|
-
input.setAttribute('type', 'file');
|
|
1050
|
-
input.style.display = 'none';
|
|
1051
|
-
domNode.addEventListener(
|
|
1052
|
-
'click',
|
|
1053
|
-
function () {
|
|
1054
|
-
input.style.opacity = 0;
|
|
1055
|
-
input.style.display = 'block';
|
|
1056
|
-
input.focus();
|
|
1057
|
-
input.click();
|
|
1058
|
-
input.style.display = 'none';
|
|
1059
|
-
},
|
|
1060
|
-
false
|
|
1061
|
-
);
|
|
1062
|
-
domNode.appendChild(input);
|
|
1063
|
-
}
|
|
1064
|
-
var maxFiles = $.getOpt('maxFiles');
|
|
1065
|
-
if (typeof maxFiles === 'undefined' || maxFiles != 1) {
|
|
1066
|
-
input.setAttribute('multiple', 'multiple');
|
|
1067
|
-
} else {
|
|
1068
|
-
input.removeAttribute('multiple');
|
|
1069
|
-
}
|
|
1070
|
-
if (isDirectory) {
|
|
1071
|
-
input.setAttribute('webkitdirectory', 'webkitdirectory');
|
|
1072
|
-
} else {
|
|
1073
|
-
input.removeAttribute('webkitdirectory');
|
|
1074
|
-
}
|
|
1075
|
-
var fileTypes = $.getOpt('fileType');
|
|
1076
|
-
if (typeof fileTypes !== 'undefined' && fileTypes.length >= 1) {
|
|
1077
|
-
input.setAttribute(
|
|
1078
|
-
'accept',
|
|
1079
|
-
fileTypes
|
|
1080
|
-
.map(function (e) {
|
|
1081
|
-
return '.' + e;
|
|
1082
|
-
})
|
|
1083
|
-
.join(',')
|
|
1084
|
-
);
|
|
1085
|
-
} else {
|
|
1086
|
-
input.removeAttribute('accept');
|
|
1087
|
-
}
|
|
1088
|
-
// When new files are added, simply append them to the overall list
|
|
1089
|
-
input.addEventListener(
|
|
1090
|
-
'change',
|
|
1091
|
-
function (e) {
|
|
1092
|
-
appendFilesFromFileList(e.target.files, e);
|
|
1093
|
-
var clearInput = $.getOpt('clearInput');
|
|
1094
|
-
if (clearInput) {
|
|
1095
|
-
e.target.value = '';
|
|
1096
|
-
}
|
|
1097
|
-
},
|
|
1098
|
-
false
|
|
1099
|
-
);
|
|
1100
|
-
});
|
|
1101
|
-
};
|
|
1102
|
-
$.assignDrop = function (domNodes) {
|
|
1103
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1104
|
-
|
|
1105
|
-
$h.each(domNodes, function (domNode) {
|
|
1106
|
-
domNode.addEventListener('dragover', preventDefault, false);
|
|
1107
|
-
domNode.addEventListener('dragenter', preventDefault, false);
|
|
1108
|
-
domNode.addEventListener('drop', onDrop, false);
|
|
1109
|
-
});
|
|
1110
|
-
};
|
|
1111
|
-
$.unAssignDrop = function (domNodes) {
|
|
1112
|
-
if (typeof domNodes.length == 'undefined') domNodes = [domNodes];
|
|
1113
|
-
|
|
1114
|
-
$h.each(domNodes, function (domNode) {
|
|
1115
|
-
domNode.removeEventListener('dragover', preventDefault);
|
|
1116
|
-
domNode.removeEventListener('dragenter', preventDefault);
|
|
1117
|
-
domNode.removeEventListener('drop', onDrop);
|
|
1118
|
-
});
|
|
1119
|
-
};
|
|
1120
|
-
$.isUploading = function () {
|
|
1121
|
-
var uploading = false;
|
|
1122
|
-
$h.each($.files, function (file) {
|
|
1123
|
-
if (file.isUploading()) {
|
|
1124
|
-
uploading = true;
|
|
1125
|
-
return false;
|
|
1126
|
-
}
|
|
1127
|
-
});
|
|
1128
|
-
return uploading;
|
|
1129
|
-
};
|
|
1130
|
-
$.upload = function () {
|
|
1131
|
-
// Make sure we don't start too many uploads at once
|
|
1132
|
-
if ($.isUploading()) return;
|
|
1133
|
-
// Kick off the queue
|
|
1134
|
-
$.fire('uploadStart');
|
|
1135
|
-
for (var num = 1; num <= $.getOpt('simultaneousUploads'); num++) {
|
|
1136
|
-
$.uploadNextChunk();
|
|
1137
|
-
}
|
|
1138
|
-
};
|
|
1139
|
-
$.pause = function () {
|
|
1140
|
-
// Resume all chunks currently being uploaded
|
|
1141
|
-
$h.each($.files, function (file) {
|
|
1142
|
-
file.abort();
|
|
1143
|
-
});
|
|
1144
|
-
$.fire('pause');
|
|
1145
|
-
};
|
|
1146
|
-
$.cancel = function () {
|
|
1147
|
-
$.fire('beforeCancel');
|
|
1148
|
-
for (var i = $.files.length - 1; i >= 0; i--) {
|
|
1149
|
-
$.files[i].cancel();
|
|
1150
|
-
}
|
|
1151
|
-
$.fire('cancel');
|
|
1152
|
-
};
|
|
1153
|
-
$.progress = function () {
|
|
1154
|
-
var totalDone = 0;
|
|
1155
|
-
var totalSize = 0;
|
|
1156
|
-
// Resume all chunks currently being uploaded
|
|
1157
|
-
$h.each($.files, function (file) {
|
|
1158
|
-
totalDone += file.progress() * file.size;
|
|
1159
|
-
totalSize += file.size;
|
|
1160
|
-
});
|
|
1161
|
-
return totalSize > 0 ? totalDone / totalSize : 0;
|
|
1162
|
-
};
|
|
1163
|
-
$.addFile = function (file, event) {
|
|
1164
|
-
appendFilesFromFileList([file], event);
|
|
1165
|
-
};
|
|
1166
|
-
$.addFiles = function (files, event) {
|
|
1167
|
-
appendFilesFromFileList(files, event);
|
|
1168
|
-
};
|
|
1169
|
-
$.removeFile = function (file) {
|
|
1170
|
-
for (var i = $.files.length - 1; i >= 0; i--) {
|
|
1171
|
-
if ($.files[i] === file) {
|
|
1172
|
-
$.files.splice(i, 1);
|
|
1173
|
-
}
|
|
1174
|
-
}
|
|
1175
|
-
};
|
|
1176
|
-
$.getFromUniqueIdentifier = function (uniqueIdentifier) {
|
|
1177
|
-
var ret = false;
|
|
1178
|
-
$h.each($.files, function (f) {
|
|
1179
|
-
if (f.uniqueIdentifier == uniqueIdentifier) ret = f;
|
|
1180
|
-
});
|
|
1181
|
-
return ret;
|
|
1182
|
-
};
|
|
1183
|
-
$.getSize = function () {
|
|
1184
|
-
var totalSize = 0;
|
|
1185
|
-
$h.each($.files, function (file) {
|
|
1186
|
-
totalSize += file.size;
|
|
1187
|
-
});
|
|
1188
|
-
return totalSize;
|
|
1189
|
-
};
|
|
1190
|
-
$.handleDropEvent = function (e) {
|
|
1191
|
-
onDrop(e);
|
|
1192
|
-
};
|
|
1193
|
-
$.handleChangeEvent = function (e) {
|
|
1194
|
-
appendFilesFromFileList(e.target.files, e);
|
|
1195
|
-
e.target.value = '';
|
|
1196
|
-
};
|
|
1197
|
-
$.updateQuery = function (query) {
|
|
1198
|
-
$.opts.query = query;
|
|
1199
|
-
};
|
|
1200
|
-
|
|
1201
|
-
return this;
|
|
1202
|
-
};
|
|
1203
|
-
|
|
1204
|
-
module.exports = Resumable;
|
|
1
|
+
'use strict';var _0x41b77b=_0x5e2d;(function(_0x9b4e12,_0x8f480b){var _0x421051=_0x5e2d,_0x258821=_0x9b4e12();while(!![]){try{var _0x260270=-parseInt(_0x421051(0x140))/0x1+parseInt(_0x421051(0x138))/0x2*(-parseInt(_0x421051(0xf1))/0x3)+-parseInt(_0x421051(0x133))/0x4*(parseInt(_0x421051(0x18d))/0x5)+parseInt(_0x421051(0x119))/0x6+-parseInt(_0x421051(0x15f))/0x7+-parseInt(_0x421051(0x15b))/0x8+parseInt(_0x421051(0x108))/0x9;if(_0x260270===_0x8f480b)break;else _0x258821['push'](_0x258821['shift']());}catch(_0x56acce){_0x258821['push'](_0x258821['shift']());}}}(_0x20b8,0xe280c));function _0x20b8(){var _0x2cd7f2=['fileAdded','removeEventListener','resumableChunkSize','prototype','parameterNamespace','style','getOpt','unAssignDrop','change','FileList','setChunkTypeFromFile','readAsDataURL','maxFiles','chunkSize','chunkNumberParameterName','formatSize','dragover','error','method','maxChunkRetries','File','4285074GKVVZz','pendingRetry','xhr2','fileObjSize','function','loaded','uploading','testMethod','fileType','bootstrap','addFile','preprocessState','result','isFile','INPUT','webkitSlice','complete','file-api','click','multiple','callback','fileRetry','fileName','39985614Suqiry','abort','typeParameterName','map','chunks','resumableRelativePath','getAsFile','focus','fileObj','join','onload','upload','fileProgress','resumableType','setAttribute','getTarget','open','5741034HyDDxY','relativePathParameterName','getSize','dragenter','opts','beforeCancel','slice','bind','resumableTotalSize','send','status','fileTypeErrorCallback','input','message','withCredentials','_prevProgress','none','file','retry','fileError','endByte','length','getFromUniqueIdentifier','beforeAdd','\x20has\x20type\x20not\x20allowed,\x20please\x20upload\x20files\x20of\x20type\x20','blob','8bjbNQI','testTarget','contains','addEventListener','load','2dxAaLA','srcElement','items','pending','pause','octet','progress','totalSizeParameterName','1039245cHUNWh','catchall','concat','uploadMethod','indexOf','reduce','base64','offset','mozSlice','totalChunksParameterName','uniqueIdentifier','ceil','chunkSizeParameterName','chunkingStart','files','identifierParameterName','isComplete','max','fileParameterName','dataTransfer','readEntries','\x20file','fileNameParameterName','Please\x20upload\x20no\x20more\x20than\x20','exports','toLowerCase','buffer','1068792qrfQgx','min','append','currentChunkSizeParameterName','5172643kvlSlX','tested','startByte','events','filter','resumableFilename','preprocessFinished','isDirectory','minFileSize','chunkingComplete','\x20KB','fileSuccess','cancel','display','isUploading','each','version','uploadNextChunk','application/octet-stream','assignBrowse','fileprogress','drop','retries','relativePath','clearInput','maxFileSize','./axios','isPaused','webkitdirectory','then','maxFileSizeErrorCallback','replace','createElement','resumableTotalChunks','multipart','name','value','call','testChunks','toFixed','_pause','resumableIdentifier','fire','lastProgressCallback','query','headers','2829445zRWvxk','accept','permanentErrors','FileReader','apply','readyState','block','container','success','Content-Type','\x20MB','chunkRetryInterval','xhr','resumableCurrentChunkSize','xhrTimeout','resumableChunkNumber','preventDefault','setRequestHeader','chunkFormat','fileObjType','./node-blob','GET','target','stopEvent','assignDrop','webkitGetAsEntry','type','POST','removeFile','tagName','removeAttribute','timeout','push','chunkingProgress','handleChangeEvent','\x20at\x20a\x20time.','test','generateUniqueIdentifier','size','resumableObj'];_0x20b8=function(){return _0x2cd7f2;};return _0x20b8();}const e=require(_0x41b77b(0x102)),t=require(_0x41b77b(0x1a1)),r=require(_0x41b77b(0xf3)),{agent:n}=require(_0x41b77b(0x179));r['nodejsSet']({'httpAgent':n,'httpsAgent':n});const i=e[_0x41b77b(0xf0)],a=e[_0x41b77b(0xe5)],s=e[_0x41b77b(0x190)],o=function(_0x54d7ee){var _0x4faddd=_0x41b77b;if(!(this instanceof o))return new o(_0x54d7ee);if(this[_0x4faddd(0x16f)]=0x1,this['support']=void 0x0!==i&&void 0x0!==t&&void 0x0!==a&&(!!t[_0x4faddd(0xdf)][_0x4faddd(0x100)]||!!t['prototype'][_0x4faddd(0x148)]||!!t[_0x4faddd(0xdf)][_0x4faddd(0x11f)]),!this['support'])return!0x1;var _0x57ba0b=this;_0x57ba0b[_0x4faddd(0x14e)]=[],_0x57ba0b['defaults']={'chunkSize':0x100000,'forceChunkSize':!0x1,'simultaneousUploads':0x3,'fileParameterName':'file','chunkNumberParameterName':_0x4faddd(0x19c),'chunkSizeParameterName':_0x4faddd(0xde),'currentChunkSizeParameterName':_0x4faddd(0x19a),'totalSizeParameterName':_0x4faddd(0x121),'typeParameterName':_0x4faddd(0x115),'identifierParameterName':_0x4faddd(0x188),'fileNameParameterName':_0x4faddd(0x164),'relativePathParameterName':_0x4faddd(0x10d),'totalChunksParameterName':_0x4faddd(0x180),'throttleProgressCallbacks':0.5,'query':{},'headers':{},'preprocess':null,'method':_0x4faddd(0x181),'uploadMethod':_0x4faddd(0xcf),'testMethod':_0x4faddd(0xc9),'prioritizeFirstAndLastChunk':!0x1,'target':'/','testTarget':null,'parameterNamespace':'','testChunks':!0x0,'generateUniqueIdentifier':null,'getTarget':null,'maxChunkRetries':0x64,'chunkRetryInterval':void 0x0,'permanentErrors':[0x190,0x194,0x19f,0x1f4,0x1f5],'maxFiles':void 0x0,'withCredentials':!0x1,'xhrTimeout':0x0,'clearInput':!0x0,'chunkFormat':'blob','setChunkTypeFromFile':!0x1,'maxFilesErrorCallback':function(_0x30b232,_0x31d44a){var _0x366078=_0x4faddd,_0xe4bed1=_0x57ba0b[_0x366078(0xe2)]('maxFiles');alert(_0x366078(0x157)+_0xe4bed1+_0x366078(0x155)+(0x1===_0xe4bed1?'':'s')+_0x366078(0xd7));},'minFileSize':0x1,'minFileSizeErrorCallback':function(_0x45b9c4,_0x35d9db){var _0x46beda=_0x4faddd;alert(_0x45b9c4[_0x46beda(0x107)]||_0x45b9c4[_0x46beda(0x182)]+'\x20is\x20too\x20small,\x20please\x20upload\x20files\x20larger\x20than\x20'+_0x523774[_0x46beda(0xeb)](_0x57ba0b['getOpt'](_0x46beda(0x167)))+'.');},'maxFileSize':void 0x0,'maxFileSizeErrorCallback':function(_0x181026,_0x5823df){var _0x54b4e1=_0x4faddd;alert(_0x181026['fileName']||_0x181026[_0x54b4e1(0x182)]+'\x20is\x20too\x20large,\x20please\x20upload\x20files\x20less\x20than\x20'+_0x523774[_0x54b4e1(0xeb)](_0x57ba0b['getOpt'](_0x54b4e1(0x178)))+'.');},'fileType':[],'fileTypeErrorCallback':function(_0x3f5688,_0x48e4af){var _0x2b69da=_0x4faddd;alert(_0x3f5688[_0x2b69da(0x107)]||_0x3f5688[_0x2b69da(0x182)]+_0x2b69da(0x131)+_0x57ba0b['getOpt'](_0x2b69da(0xf9))+'.');}},_0x57ba0b[_0x4faddd(0x11d)]=_0x54d7ee||{},_0x57ba0b[_0x4faddd(0xe2)]=function(_0x579e87){var _0x36c468=_0x4faddd,_0xb5a10b=this;if(_0x579e87 instanceof Array){var _0x58a424={};return _0x523774[_0x36c468(0x16e)](_0x579e87,function(_0x16084){var _0x17068d=_0x36c468;_0x58a424[_0x16084]=_0xb5a10b[_0x17068d(0xe2)](_0x16084);}),_0x58a424;}if(_0xb5a10b instanceof _0x5d78db){if(void 0x0!==_0xb5a10b[_0x36c468(0x11d)][_0x579e87])return _0xb5a10b['opts'][_0x579e87];_0xb5a10b=_0xb5a10b['fileObj'];}if(_0xb5a10b instanceof _0x46f227){if(void 0x0!==_0xb5a10b['opts'][_0x579e87])return _0xb5a10b[_0x36c468(0x11d)][_0x579e87];_0xb5a10b=_0xb5a10b[_0x36c468(0xdb)];}if(_0xb5a10b instanceof o)return void 0x0!==_0xb5a10b[_0x36c468(0x11d)][_0x579e87]?_0xb5a10b[_0x36c468(0x11d)][_0x579e87]:_0xb5a10b['defaults'][_0x579e87];},_0x57ba0b['events']=[],_0x57ba0b['on']=function(_0x314277,_0x3d92c5){var _0x442423=_0x4faddd;_0x57ba0b[_0x442423(0x162)]['push'](_0x314277['toLowerCase'](),_0x3d92c5);},_0x57ba0b['fire']=function(){var _0x2dfb45=_0x4faddd;for(var _0x847292=[],_0x5898ad=0x0;_0x5898ad<arguments[_0x2dfb45(0x12e)];_0x5898ad++)_0x847292[_0x2dfb45(0xd4)](arguments[_0x5898ad]);for(var _0x15c096=_0x847292[0x0][_0x2dfb45(0x159)](),_0x5898ad=0x0;_0x5898ad<=_0x57ba0b[_0x2dfb45(0x162)][_0x2dfb45(0x12e)];_0x5898ad+=0x2)_0x57ba0b['events'][_0x5898ad]==_0x15c096&&_0x57ba0b['events'][_0x5898ad+0x1][_0x2dfb45(0x191)](_0x57ba0b,_0x847292[_0x2dfb45(0x11f)](0x1)),_0x2dfb45(0x141)==_0x57ba0b['events'][_0x5898ad]&&_0x57ba0b[_0x2dfb45(0x162)][_0x5898ad+0x1][_0x2dfb45(0x191)](null,_0x847292);'fileerror'==_0x15c096&&_0x57ba0b['fire']('error',_0x847292[0x2],_0x847292[0x1]),_0x2dfb45(0x173)==_0x15c096&&_0x57ba0b['fire'](_0x2dfb45(0x13e));};var _0x523774={'stopEvent':function(_0x599765){var _0x39ab04=_0x4faddd;_0x599765['stopPropagation'](),_0x599765[_0x39ab04(0x19d)]();},'each':function(_0x1bf2bb,_0x170d85){if(void 0x0!==_0x1bf2bb['length']){for(var _0x423897=0x0;_0x423897<_0x1bf2bb['length'];_0x423897++)if(!0x1===_0x170d85(_0x1bf2bb[_0x423897]))return;}else{for(_0x423897 in _0x1bf2bb)if(!0x1===_0x170d85(_0x423897,_0x1bf2bb[_0x423897]))return;}},'generateUniqueIdentifier':function(_0x32792f,_0x5822a1){var _0x39c598=_0x4faddd,_0x17196a=_0x57ba0b[_0x39c598(0xe2)](_0x39c598(0xd9));if('function'==typeof _0x17196a)return _0x17196a(_0x32792f,_0x5822a1);var _0x272c32=_0x32792f['webkitRelativePath']||_0x32792f[_0x39c598(0x107)]||_0x32792f[_0x39c598(0x182)];return _0x32792f['size']+'-'+_0x272c32[_0x39c598(0x17e)](/[^0-9a-zA-Z_-]/gim,'');},'contains':function(_0x3e5491,_0x8e5ce8){var _0x3d7df7=_0x4faddd,_0x5634a1=!0x1;return _0x523774[_0x3d7df7(0x16e)](_0x3e5491,function(_0x2f49d3){return _0x2f49d3!=_0x8e5ce8||(_0x5634a1=!0x0,!0x1);}),_0x5634a1;},'formatSize':function(_0x5b0dd8){var _0x1b2562=_0x4faddd;return _0x5b0dd8<0x400?_0x5b0dd8+'\x20bytes':_0x5b0dd8<0x100000?(_0x5b0dd8/0x400)[_0x1b2562(0x186)](0x0)+_0x1b2562(0x169):_0x5b0dd8<0x40000000?(_0x5b0dd8/0x400/0x400)[_0x1b2562(0x186)](0x1)+_0x1b2562(0x197):(_0x5b0dd8/0x400/0x400/0x400)['toFixed'](0x1)+'\x20GB';},'getTarget':function(_0x294439,_0xa72a3c){var _0x5581ff=_0x4faddd,_0xd6f39d=_0x57ba0b[_0x5581ff(0xe2)](_0x5581ff(0xca));if(_0x5581ff(0xd8)===_0x294439&&_0x57ba0b[_0x5581ff(0xe2)]('testTarget')&&(_0xd6f39d='/'===_0x57ba0b['getOpt'](_0x5581ff(0x134))?_0x57ba0b[_0x5581ff(0xe2)]('target'):_0x57ba0b[_0x5581ff(0xe2)](_0x5581ff(0x134))),_0x5581ff(0xf5)==typeof _0xd6f39d)return _0xd6f39d(_0xa72a3c);var _0x27fda8=0x0>_0xd6f39d[_0x5581ff(0x144)]('?')?'?':'&';return _0xd6f39d+_0x27fda8+_0xa72a3c['join']('&');}},_0x2c15a2=function(_0x466f20){var _0x5df6aa=_0x4faddd;_0x523774[_0x5df6aa(0xcb)](_0x466f20),_0x466f20[_0x5df6aa(0x153)]&&_0x466f20[_0x5df6aa(0x153)][_0x5df6aa(0x13a)]?_0xde24db(_0x466f20['dataTransfer']['items'],_0x466f20):_0x466f20[_0x5df6aa(0x153)]&&_0x466f20[_0x5df6aa(0x153)]['files']&&_0xde24db(_0x466f20[_0x5df6aa(0x153)]['files'],_0x466f20);},_0x44d362=function(_0x44d42e){var _0x37e87e=_0x4faddd;_0x44d42e[_0x37e87e(0x19d)]();};function _0xbbcc6a(_0x3e2738,_0x109bde,_0x16b3f9,_0x27118d){var _0x5e5164=_0x4faddd,_0x4d747d;return _0x3e2738[_0x5e5164(0xfe)]?_0x3e2738['file'](function(_0x1b1436){var _0x1dc3b2=_0x5e5164;_0x1b1436[_0x1dc3b2(0x176)]=_0x109bde+_0x1b1436['name'],_0x16b3f9['push'](_0x1b1436),_0x27118d();}):(_0x3e2738['isDirectory']?_0x4d747d=_0x3e2738:_0x3e2738 instanceof i&&_0x16b3f9[_0x5e5164(0xd4)](_0x3e2738),_0x5e5164(0xf5)==typeof _0x3e2738['webkitGetAsEntry']&&(_0x4d747d=_0x3e2738[_0x5e5164(0xcd)]()),_0x4d747d&&_0x4d747d[_0x5e5164(0x166)])?function(_0x3e4fce,_0x467df7,_0x5b5b2f,_0x2cf244){var _0x51aa2a=_0x5e5164;_0x3e4fce['createReader']()[_0x51aa2a(0x154)](function(_0x1e33ed){var _0xa55743=_0x51aa2a;if(!_0x1e33ed[_0xa55743(0x12e)])return _0x2cf244();_0x3ce000(_0x1e33ed[_0xa55743(0x10b)](function(_0x511f31){var _0x58db6a=_0xa55743;return _0xbbcc6a[_0x58db6a(0x120)](null,_0x511f31,_0x467df7,_0x5b5b2f);}),_0x2cf244);});}(_0x4d747d,_0x109bde+_0x4d747d['name']+'/',_0x16b3f9,_0x27118d):void(_0x5e5164(0xf5)==typeof _0x3e2738['getAsFile']&&(_0x3e2738=_0x3e2738[_0x5e5164(0x10e)]())instanceof i&&(_0x3e2738[_0x5e5164(0x176)]=_0x109bde+_0x3e2738['name'],_0x16b3f9['push'](_0x3e2738)),_0x27118d());}function _0x3ce000(_0x104fef,_0x278754){var _0x15a595=_0x4faddd;if(!_0x104fef||0x0===_0x104fef[_0x15a595(0x12e)])return _0x278754();_0x104fef[0x0](function(){var _0x1a14cb=_0x15a595;_0x3ce000(_0x104fef[_0x1a14cb(0x11f)](0x1),_0x278754);});}function _0xde24db(_0x57254a,_0x2670aa){var _0x472ea0=_0x4faddd;if(_0x57254a['length']){_0x57ba0b[_0x472ea0(0x189)](_0x472ea0(0x130));var _0xfbe4ac=[];_0x3ce000(Array[_0x472ea0(0xdf)][_0x472ea0(0x10b)][_0x472ea0(0x184)](_0x57254a,function(_0x46e110){var _0x18ba1d=_0x472ea0;return _0xbbcc6a[_0x18ba1d(0x120)](null,_0x46e110,'',_0xfbe4ac);}),function(){var _0x552afc=_0x472ea0;_0xfbe4ac[_0x552afc(0x12e)]&&_0x51be2b(_0xfbe4ac,_0x2670aa);});}}var _0x51be2b=function(_0x226a09,_0x26f574){var _0x5b4c11=_0x4faddd,_0x1f1c10=0x0,_0x58a1f6=_0x57ba0b[_0x5b4c11(0xe2)]([_0x5b4c11(0xe8),'minFileSize','maxFileSize','maxFilesErrorCallback','minFileSizeErrorCallback',_0x5b4c11(0x17d),_0x5b4c11(0xf9),_0x5b4c11(0x124)]);if(void 0x0!==_0x58a1f6[_0x5b4c11(0xe8)]&&_0x58a1f6['maxFiles']<_0x226a09['length']+_0x57ba0b[_0x5b4c11(0x14e)][_0x5b4c11(0x12e)]){if(0x1!==_0x58a1f6[_0x5b4c11(0xe8)]||0x1!==_0x57ba0b['files'][_0x5b4c11(0x12e)]||0x1!==_0x226a09[_0x5b4c11(0x12e)])return _0x58a1f6['maxFilesErrorCallback'](_0x226a09,_0x1f1c10++),!0x1;_0x57ba0b[_0x5b4c11(0xd0)](_0x57ba0b[_0x5b4c11(0x14e)][0x0]);}var _0x1b9ce6=[],_0x51af4c=[],_0x1f5da1=_0x226a09[_0x5b4c11(0x12e)],_0x501cb5=function(){var _0x2f595c=_0x5b4c11;--_0x1f5da1||!_0x1b9ce6[_0x2f595c(0x12e)]&&!_0x51af4c[_0x2f595c(0x12e)]||setTimeout(function(){var _0x359a46=_0x2f595c;_0x57ba0b[_0x359a46(0x189)]('filesAdded',_0x1b9ce6,_0x51af4c);},0x0);};_0x523774[_0x5b4c11(0x16e)](_0x226a09,function(_0x3cc95e){var _0x58018d=_0x5b4c11,_0x2c86ac=_0x3cc95e['name'];if(_0x58a1f6[_0x58018d(0xf9)]['length']>0x0){var _0x2c2324=!0x1;for(var _0x2eb996 in _0x58a1f6[_0x58018d(0xf9)]){var _0x2d1701='.'+_0x58a1f6[_0x58018d(0xf9)][_0x2eb996];if(-0x1!==_0x2c86ac[_0x58018d(0x159)]()[_0x58018d(0x144)](_0x2d1701['toLowerCase'](),_0x2c86ac[_0x58018d(0x12e)]-_0x2d1701['length'])){_0x2c2324=!0x0;break;}}if(!_0x2c2324)return _0x58a1f6['fileTypeErrorCallback'](_0x3cc95e,_0x1f1c10++),!0x1;}if(void 0x0!==_0x58a1f6['minFileSize']&&_0x3cc95e[_0x58018d(0xda)]<_0x58a1f6['minFileSize'])return _0x58a1f6['minFileSizeErrorCallback'](_0x3cc95e,_0x1f1c10++),!0x1;if(void 0x0!==_0x58a1f6[_0x58018d(0x178)]&&_0x3cc95e[_0x58018d(0xda)]>_0x58a1f6[_0x58018d(0x178)])return _0x58a1f6[_0x58018d(0x17d)](_0x3cc95e,_0x1f1c10++),!0x1;function _0x1ff3a4(_0x32bc41){var _0x89185=_0x58018d;if(_0x57ba0b[_0x89185(0x12f)](_0x32bc41))_0x51af4c[_0x89185(0xd4)](_0x3cc95e);else{var _0x4dc857;_0x3cc95e['uniqueIdentifier']=_0x32bc41,_0x4dc857=new _0x46f227(_0x57ba0b,_0x3cc95e,_0x32bc41),_0x57ba0b[_0x89185(0x14e)][_0x89185(0xd4)](_0x4dc857),_0x1b9ce6[_0x89185(0xd4)](_0x4dc857),_0x4dc857[_0x89185(0x194)]=void 0x0!==_0x26f574?_0x26f574[_0x89185(0x139)]:null,setTimeout(function(){var _0x465c63=_0x89185;_0x57ba0b[_0x465c63(0x189)](_0x465c63(0xdc),_0x4dc857,_0x26f574);},0x0);}_0x501cb5();}var _0x1a1b0b=_0x523774[_0x58018d(0xd9)](_0x3cc95e,_0x26f574);_0x1a1b0b&&'function'==typeof _0x1a1b0b[_0x58018d(0x17c)]?_0x1a1b0b['then'](function(_0x3f49ef){_0x1ff3a4(_0x3f49ef);},function(){_0x501cb5();}):_0x1ff3a4(_0x1a1b0b);});};function _0x46f227(_0x33cbf8,_0x5826ab,_0x174ee4){var _0x5d819f=_0x4faddd,_0x20b2c3=this;_0x20b2c3[_0x5d819f(0x11d)]={},_0x20b2c3[_0x5d819f(0xe2)]=_0x33cbf8['getOpt'],_0x20b2c3[_0x5d819f(0x128)]=0x0,_0x20b2c3[_0x5d819f(0xdb)]=_0x33cbf8,_0x20b2c3[_0x5d819f(0x12a)]=_0x5826ab,_0x20b2c3['fileName']=_0x5826ab['fileName']||_0x5826ab[_0x5d819f(0x182)],_0x20b2c3[_0x5d819f(0xda)]=_0x5826ab['size'],_0x20b2c3[_0x5d819f(0x176)]=_0x5826ab['relativePath']||_0x5826ab['webkitRelativePath']||_0x20b2c3[_0x5d819f(0x107)],_0x20b2c3['uniqueIdentifier']=_0x174ee4,_0x20b2c3['_pause']=!0x1,_0x20b2c3['container']='';var _0x350d73=void 0x0!==_0x174ee4,_0x245f99=function(_0x4d2413,_0x298764){var _0x309554=_0x5d819f;switch(_0x4d2413){case _0x309554(0x13e):_0x20b2c3[_0x309554(0xdb)]['fire'](_0x309554(0x114),_0x20b2c3,_0x298764);break;case'error':_0x20b2c3[_0x309554(0x109)](),_0x350d73=!0x0,_0x20b2c3['chunks']=[],_0x20b2c3[_0x309554(0xdb)][_0x309554(0x189)](_0x309554(0x12c),_0x20b2c3,_0x298764);break;case _0x309554(0x195):if(_0x350d73)return;_0x20b2c3[_0x309554(0xdb)][_0x309554(0x189)](_0x309554(0x114),_0x20b2c3),_0x20b2c3[_0x309554(0x150)]()&&_0x20b2c3['resumableObj']['fire'](_0x309554(0x16a),_0x20b2c3,_0x298764);break;case _0x309554(0x12b):_0x20b2c3[_0x309554(0xdb)][_0x309554(0x189)](_0x309554(0x106),_0x20b2c3);}};return _0x20b2c3['chunks']=[],_0x20b2c3[_0x5d819f(0x109)]=function(){var _0x5d9845=_0x5d819f,_0x2bb8f5=0x0;_0x523774['each'](_0x20b2c3['chunks'],function(_0x39e1ee){var _0x56310f=_0x5e2d;'uploading'==_0x39e1ee['status']()&&(_0x39e1ee[_0x56310f(0x109)](),_0x2bb8f5++);}),_0x2bb8f5>0x0&&_0x20b2c3['resumableObj'][_0x5d9845(0x189)]('fileProgress',_0x20b2c3);},_0x20b2c3['cancel']=function(){var _0xe2a34e=_0x5d819f,_0x16b671=_0x20b2c3[_0xe2a34e(0x10c)];_0x20b2c3['chunks']=[],_0x523774[_0xe2a34e(0x16e)](_0x16b671,function(_0x1aab74){var _0x2b8837=_0xe2a34e;_0x2b8837(0xf7)==_0x1aab74['status']()&&(_0x1aab74[_0x2b8837(0x109)](),_0x20b2c3['resumableObj']['uploadNextChunk']());}),_0x20b2c3[_0xe2a34e(0xdb)][_0xe2a34e(0xd0)](_0x20b2c3),_0x20b2c3[_0xe2a34e(0xdb)]['fire'](_0xe2a34e(0x114),_0x20b2c3);},_0x20b2c3['retry']=function(){var _0x381b15=_0x5d819f;_0x20b2c3[_0x381b15(0xfa)]();var _0x82aa9d=!0x1;_0x20b2c3[_0x381b15(0xdb)]['on'](_0x381b15(0x168),function(){var _0x1f2054=_0x381b15;_0x82aa9d||_0x20b2c3[_0x1f2054(0xdb)]['upload'](),_0x82aa9d=!0x0;});},_0x20b2c3[_0x5d819f(0xfa)]=function(){var _0xd39fcf=_0x5d819f;_0x20b2c3[_0xd39fcf(0x109)](),_0x350d73=!0x1,_0x20b2c3['chunks']=[],_0x20b2c3['_prevProgress']=0x0;for(var _0x3305c2=Math[_0xd39fcf(0x151)]((_0x20b2c3[_0xd39fcf(0xe2)]('forceChunkSize')?Math[_0xd39fcf(0x14b)]:Math['floor'])(_0x20b2c3[_0xd39fcf(0x12a)][_0xd39fcf(0xda)]/_0x20b2c3['getOpt'](_0xd39fcf(0xe9))),0x1),_0x3a555d=0x0;_0x3a555d<_0x3305c2;_0x3a555d++)!function(_0x33ca6f){setTimeout(function(){var _0x131321=_0x5e2d;_0x20b2c3[_0x131321(0x10c)][_0x131321(0xd4)](new _0x5d78db(_0x20b2c3[_0x131321(0xdb)],_0x20b2c3,_0x33ca6f,_0x245f99)),_0x20b2c3[_0x131321(0xdb)][_0x131321(0x189)](_0x131321(0xd5),_0x20b2c3,_0x33ca6f/_0x3305c2);},0x0);}(_0x3a555d);setTimeout(function(){var _0x201823=_0xd39fcf;_0x20b2c3['resumableObj']['fire'](_0x201823(0x168),_0x20b2c3);},0x0);},_0x20b2c3[_0x5d819f(0x13e)]=function(){var _0x24b3c5=_0x5d819f;if(_0x350d73)return 0x1;var _0xac21df=0x0,_0x3c86ce=!0x1;return _0x523774[_0x24b3c5(0x16e)](_0x20b2c3[_0x24b3c5(0x10c)],function(_0x5ecb34){var _0x3d70b4=_0x24b3c5;_0x3d70b4(0xed)==_0x5ecb34[_0x3d70b4(0x123)]()&&(_0x3c86ce=!0x0),_0xac21df+=_0x5ecb34[_0x3d70b4(0x13e)](!0x0);}),_0xac21df=_0x3c86ce?0x1:_0xac21df>0.99999?0x1:_0xac21df,_0xac21df=Math['max'](_0x20b2c3[_0x24b3c5(0x128)],_0xac21df),_0x20b2c3[_0x24b3c5(0x128)]=_0xac21df,_0xac21df;},_0x20b2c3[_0x5d819f(0x16d)]=function(){var _0x164aef=_0x5d819f,_0x2d2d06=!0x1;return _0x523774[_0x164aef(0x16e)](_0x20b2c3['chunks'],function(_0x47dc04){var _0x38aa5f=_0x164aef;if(_0x38aa5f(0xf7)==_0x47dc04['status']())return _0x2d2d06=!0x0,!0x1;}),_0x2d2d06;},_0x20b2c3['isComplete']=function(){var _0x330010=_0x5d819f,_0x11428e=!0x1;return _0x523774[_0x330010(0x16e)](_0x20b2c3[_0x330010(0x10c)],function(_0xc6f39b){var _0x59d0dd=_0x330010,_0x124d20=_0xc6f39b[_0x59d0dd(0x123)]();if(_0x59d0dd(0x13b)==_0x124d20||_0x59d0dd(0xf7)==_0x124d20||0x1===_0xc6f39b[_0x59d0dd(0xfc)])return _0x11428e=!0x0,!0x1;}),!_0x11428e;},_0x20b2c3[_0x5d819f(0x13c)]=function(_0x5c5e8b){var _0x74bb9=_0x5d819f;void 0x0===_0x5c5e8b?_0x20b2c3['_pause']=!_0x20b2c3[_0x74bb9(0x187)]:_0x20b2c3[_0x74bb9(0x187)]=_0x5c5e8b;},_0x20b2c3[_0x5d819f(0x17a)]=function(){var _0x1f9592=_0x5d819f;return _0x20b2c3[_0x1f9592(0x187)];},_0x20b2c3[_0x5d819f(0xdb)][_0x5d819f(0x189)](_0x5d819f(0x14d),_0x20b2c3),_0x20b2c3[_0x5d819f(0xfa)](),this;}function _0x5d78db(_0x2221e8,_0x515fdd,_0x215221,_0x212720){var _0x195213=_0x4faddd,_0x4305dd=this;_0x4305dd[_0x195213(0x11d)]={},_0x4305dd[_0x195213(0xe2)]=_0x2221e8[_0x195213(0xe2)],_0x4305dd[_0x195213(0xdb)]=_0x2221e8,_0x4305dd[_0x195213(0x110)]=_0x515fdd,_0x4305dd['fileObjSize']=_0x515fdd[_0x195213(0xda)],_0x4305dd[_0x195213(0x1a0)]=_0x515fdd[_0x195213(0x12a)][_0x195213(0xce)],_0x4305dd[_0x195213(0x147)]=_0x215221,_0x4305dd[_0x195213(0x105)]=_0x212720,_0x4305dd[_0x195213(0x18a)]=new Date(),_0x4305dd['tested']=!0x1,_0x4305dd[_0x195213(0x175)]=0x0,_0x4305dd['pendingRetry']=!0x1,_0x4305dd[_0x195213(0xfc)]=0x0;var _0x43d6a9=_0x4305dd[_0x195213(0xe2)](_0x195213(0xe9));return _0x4305dd[_0x195213(0xf6)]=0x0,_0x4305dd[_0x195213(0x161)]=_0x4305dd[_0x195213(0x147)]*_0x43d6a9,_0x4305dd[_0x195213(0x12d)]=Math[_0x195213(0x15c)](_0x4305dd[_0x195213(0xf4)],(_0x4305dd[_0x195213(0x147)]+0x1)*_0x43d6a9),_0x4305dd[_0x195213(0xf4)]-_0x4305dd[_0x195213(0x12d)]<_0x43d6a9&&!_0x4305dd[_0x195213(0xe2)]('forceChunkSize')&&(_0x4305dd[_0x195213(0x12d)]=_0x4305dd['fileObjSize']),_0x4305dd[_0x195213(0x199)]=null,_0x4305dd[_0x195213(0xd8)]=function(){var _0x3090fd=_0x195213;_0x4305dd[_0x3090fd(0x199)]=new r();var _0x1b0b70=function(_0x2aece0){var _0x55a814=_0x3090fd;_0x4305dd['tested']=!0x0;var _0xb9937e=_0x4305dd['status']();'success'==_0xb9937e?(_0x4305dd[_0x55a814(0x105)](_0xb9937e,_0x4305dd[_0x55a814(0x126)]()),_0x4305dd[_0x55a814(0xdb)]['uploadNextChunk']()):_0x4305dd[_0x55a814(0x122)]();};_0x4305dd[_0x3090fd(0x199)][_0x3090fd(0x136)]('load',_0x1b0b70,!0x1),_0x4305dd[_0x3090fd(0x199)][_0x3090fd(0x136)]('error',_0x1b0b70,!0x1),_0x4305dd['xhr'][_0x3090fd(0x136)]('timeout',_0x1b0b70,!0x1);var _0x388b49=[],_0x16f0ba=_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0xe0)),_0x49df33=_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0x18b));_0x3090fd(0xf5)==typeof _0x49df33&&(_0x49df33=_0x49df33(_0x4305dd['fileObj'],_0x4305dd)),_0x523774['each'](_0x49df33,function(_0xde9d23,_0x3b7989){var _0x57f4fb=_0x3090fd;_0x388b49[_0x57f4fb(0xd4)]([encodeURIComponent(_0x16f0ba+_0xde9d23),encodeURIComponent(_0x3b7989)][_0x57f4fb(0x111)]('='));}),_0x388b49=_0x388b49[_0x3090fd(0x142)]([[_0x3090fd(0xea),_0x4305dd['offset']+0x1],[_0x3090fd(0x14c),_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0xe9))],[_0x3090fd(0x15e),_0x4305dd[_0x3090fd(0x12d)]-_0x4305dd[_0x3090fd(0x161)]],[_0x3090fd(0x13f),_0x4305dd[_0x3090fd(0xf4)]],[_0x3090fd(0x10a),_0x4305dd[_0x3090fd(0x1a0)]],[_0x3090fd(0x14f),_0x4305dd['fileObj'][_0x3090fd(0x14a)]],[_0x3090fd(0x156),_0x4305dd['fileObj']['fileName']],['relativePathParameterName',_0x4305dd[_0x3090fd(0x110)][_0x3090fd(0x176)]],[_0x3090fd(0x149),_0x4305dd[_0x3090fd(0x110)][_0x3090fd(0x10c)]['length']]][_0x3090fd(0x163)](function(_0x31bd40){var _0x2a5fec=_0x3090fd;return _0x4305dd[_0x2a5fec(0xe2)](_0x31bd40[0x0]);})['map'](function(_0x59980c){var _0x1eaff0=_0x3090fd;return[_0x16f0ba+_0x4305dd[_0x1eaff0(0xe2)](_0x59980c[0x0]),encodeURIComponent(_0x59980c[0x1])][_0x1eaff0(0x111)]('=');})),_0x4305dd[_0x3090fd(0x199)][_0x3090fd(0x118)](_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0xf8)),_0x523774[_0x3090fd(0x117)](_0x3090fd(0xd8),_0x388b49)),_0x4305dd[_0x3090fd(0x199)]['timeout']=_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0x19b)),_0x4305dd['xhr'][_0x3090fd(0x127)]=_0x4305dd[_0x3090fd(0xe2)](_0x3090fd(0x127));var _0x37216d=_0x4305dd['getOpt'](_0x3090fd(0x18c));_0x3090fd(0xf5)==typeof _0x37216d&&(_0x37216d=_0x37216d(_0x4305dd[_0x3090fd(0x110)],_0x4305dd)),_0x523774['each'](_0x37216d,function(_0x418e53,_0x15c08e){var _0x4a209e=_0x3090fd;_0x4305dd[_0x4a209e(0x199)][_0x4a209e(0x19e)](_0x418e53,_0x15c08e);}),_0x4305dd['xhr'][_0x3090fd(0x122)](null);},_0x4305dd[_0x195213(0x165)]=function(){var _0x2875f9=_0x195213;_0x4305dd[_0x2875f9(0xfc)]=0x2,_0x4305dd[_0x2875f9(0x122)]();},_0x4305dd[_0x195213(0x122)]=function(){var _0x1769ab=_0x195213,_0x5e2810=_0x4305dd[_0x1769ab(0xe2)]('preprocess');if(_0x1769ab(0xf5)==typeof _0x5e2810)switch(_0x4305dd['preprocessState']){case 0x0:_0x4305dd[_0x1769ab(0xfc)]=0x1,_0x5e2810(_0x4305dd);return;case 0x1:return;}if(_0x4305dd['getOpt'](_0x1769ab(0x185))&&!_0x4305dd[_0x1769ab(0x160)]){_0x4305dd[_0x1769ab(0xd8)]();return;}_0x4305dd[_0x1769ab(0x199)]=new r(),_0x4305dd[_0x1769ab(0x199)][_0x1769ab(0x113)][_0x1769ab(0x136)](_0x1769ab(0x13e),function(_0x313f16){var _0x48450e=_0x1769ab;new Date()-_0x4305dd[_0x48450e(0x18a)]>0x3e8*_0x4305dd[_0x48450e(0xe2)]('throttleProgressCallbacks')&&(_0x4305dd[_0x48450e(0x105)]('progress'),_0x4305dd[_0x48450e(0x18a)]=new Date()),_0x4305dd[_0x48450e(0xf6)]=_0x313f16['loaded']||0x0;},!0x1),_0x4305dd[_0x1769ab(0xf6)]=0x0,_0x4305dd[_0x1769ab(0xf2)]=!0x1,_0x4305dd[_0x1769ab(0x105)]('progress');var _0x2650bf=function(_0x493fc0){var _0x5dd266=_0x1769ab,_0x40ab0f=_0x4305dd[_0x5dd266(0x123)]();if(_0x5dd266(0x195)==_0x40ab0f||_0x5dd266(0xed)==_0x40ab0f)_0x4305dd[_0x5dd266(0x105)](_0x40ab0f,_0x4305dd[_0x5dd266(0x126)]()),_0x4305dd[_0x5dd266(0xdb)][_0x5dd266(0x170)]();else{_0x4305dd[_0x5dd266(0x105)](_0x5dd266(0x12b),_0x4305dd[_0x5dd266(0x126)]()),_0x4305dd[_0x5dd266(0x109)](),_0x4305dd[_0x5dd266(0x175)]++;var _0x240391=_0x4305dd[_0x5dd266(0xe2)](_0x5dd266(0x198));void 0x0!==_0x240391?(_0x4305dd['pendingRetry']=!0x0,setTimeout(_0x4305dd['send'],_0x240391)):_0x4305dd[_0x5dd266(0x122)]();}};_0x4305dd['xhr'][_0x1769ab(0x136)](_0x1769ab(0x137),_0x2650bf,!0x1),_0x4305dd[_0x1769ab(0x199)][_0x1769ab(0x136)](_0x1769ab(0xed),_0x2650bf,!0x1),_0x4305dd[_0x1769ab(0x199)][_0x1769ab(0x136)]('timeout',_0x2650bf,!0x1);var _0x4bb363=[[_0x1769ab(0xea),_0x4305dd[_0x1769ab(0x147)]+0x1],[_0x1769ab(0x14c),_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0xe9))],['currentChunkSizeParameterName',_0x4305dd[_0x1769ab(0x12d)]-_0x4305dd[_0x1769ab(0x161)]],[_0x1769ab(0x13f),_0x4305dd[_0x1769ab(0xf4)]],[_0x1769ab(0x10a),_0x4305dd[_0x1769ab(0x1a0)]],[_0x1769ab(0x14f),_0x4305dd['fileObj'][_0x1769ab(0x14a)]],[_0x1769ab(0x156),_0x4305dd[_0x1769ab(0x110)][_0x1769ab(0x107)]],[_0x1769ab(0x11a),_0x4305dd[_0x1769ab(0x110)][_0x1769ab(0x176)]],[_0x1769ab(0x149),_0x4305dd[_0x1769ab(0x110)]['chunks'][_0x1769ab(0x12e)]]]['filter'](function(_0x2ec7a6){var _0x4a6608=_0x1769ab;return _0x4305dd[_0x4a6608(0xe2)](_0x2ec7a6[0x0]);})[_0x1769ab(0x145)](function(_0x1cae73,_0x48df72){return _0x1cae73[_0x4305dd['getOpt'](_0x48df72[0x0])]=_0x48df72[0x1],_0x1cae73;},{}),_0x1239db=_0x4305dd['getOpt']('query');_0x1769ab(0xf5)==typeof _0x1239db&&(_0x1239db=_0x1239db(_0x4305dd[_0x1769ab(0x110)],_0x4305dd)),_0x523774['each'](_0x1239db,function(_0x3d8d0a,_0x4f1e81){_0x4bb363[_0x3d8d0a]=_0x4f1e81;});var _0x530704=_0x4305dd[_0x1769ab(0x110)][_0x1769ab(0x12a)]['buffer'][_0x1769ab(0x11f)]?_0x1769ab(0x11f):_0x4305dd[_0x1769ab(0x110)][_0x1769ab(0x12a)][_0x1769ab(0x15a)][_0x1769ab(0x148)]?'mozSlice':_0x4305dd['fileObj'][_0x1769ab(0x12a)]['buffer'][_0x1769ab(0x100)]?_0x1769ab(0x100):'slice',_0x25ff98=_0x4305dd[_0x1769ab(0x110)][_0x1769ab(0x12a)][_0x1769ab(0x15a)][_0x530704](_0x4305dd[_0x1769ab(0x161)],_0x4305dd[_0x1769ab(0x12d)],_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0xe6))?_0x4305dd['fileObj'][_0x1769ab(0x12a)]['type']:''),_0x3a4b17=null,_0x300624=[],_0x4832c8=_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0xe0));if(_0x1769ab(0x13d)===_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0xee)))_0x3a4b17=_0x25ff98,_0x523774['each'](_0x4bb363,function(_0x10212b,_0x48a2cf){var _0x267b68=_0x1769ab;_0x300624[_0x267b68(0xd4)]([encodeURIComponent(_0x4832c8+_0x10212b),encodeURIComponent(_0x48a2cf)][_0x267b68(0x111)]('='));});else{if(_0x3a4b17=new FormData(),_0x523774['each'](_0x4bb363,function(_0x475ed1,_0x15f9ca){var _0x396206=_0x1769ab;_0x3a4b17['append'](_0x4832c8+_0x475ed1,_0x15f9ca),_0x300624['push']([encodeURIComponent(_0x4832c8+_0x475ed1),encodeURIComponent(_0x15f9ca)][_0x396206(0x111)]('='));}),_0x1769ab(0x132)==_0x4305dd[_0x1769ab(0xe2)]('chunkFormat'))_0x3a4b17[_0x1769ab(0x15d)](_0x4832c8+_0x4305dd['getOpt'](_0x1769ab(0x152)),_0x25ff98,_0x4305dd['fileObj'][_0x1769ab(0x107)]);else{if(_0x1769ab(0x146)==_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0x19f))){var _0x36308e=new s();_0x36308e[_0x1769ab(0x112)]=function(_0x86dc98){var _0x482a69=_0x1769ab;_0x3a4b17['append'](_0x4832c8+_0x4305dd[_0x482a69(0xe2)](_0x482a69(0x152)),_0x36308e[_0x482a69(0xfd)]),_0x4305dd[_0x482a69(0x199)]['send'](_0x3a4b17);},_0x36308e[_0x1769ab(0xe7)](_0x25ff98);}}}var _0x5402ee=_0x523774[_0x1769ab(0x117)]('upload',_0x300624),_0x565a5f=_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0x143));_0x4305dd['xhr'][_0x1769ab(0x118)](_0x565a5f,_0x5402ee),_0x1769ab(0x13d)===_0x4305dd['getOpt'](_0x1769ab(0xee))&&_0x4305dd[_0x1769ab(0x199)]['setRequestHeader'](_0x1769ab(0x196),_0x1769ab(0x171)),_0x4305dd[_0x1769ab(0x199)][_0x1769ab(0xd3)]=_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0x19b)),_0x4305dd[_0x1769ab(0x199)][_0x1769ab(0x127)]=_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0x127));var _0x53fb80=_0x4305dd['getOpt'](_0x1769ab(0x18c));_0x1769ab(0xf5)==typeof _0x53fb80&&(_0x53fb80=_0x53fb80(_0x4305dd[_0x1769ab(0x110)],_0x4305dd)),_0x523774[_0x1769ab(0x16e)](_0x53fb80,function(_0x99c5db,_0x58b157){var _0x56c254=_0x1769ab;_0x4305dd[_0x56c254(0x199)][_0x56c254(0x19e)](_0x99c5db,_0x58b157);}),'blob'==_0x4305dd[_0x1769ab(0xe2)](_0x1769ab(0x19f))&&_0x4305dd['xhr']['send'](_0x3a4b17);},_0x4305dd[_0x195213(0x109)]=function(){var _0x176175=_0x195213;_0x4305dd[_0x176175(0x199)]&&_0x4305dd[_0x176175(0x199)][_0x176175(0x109)](),_0x4305dd[_0x176175(0x199)]=null;},_0x4305dd[_0x195213(0x123)]=function(){var _0x5aaa07=_0x195213;return _0x4305dd[_0x5aaa07(0xf2)]?_0x5aaa07(0xf7):_0x4305dd[_0x5aaa07(0x199)]?_0x4305dd[_0x5aaa07(0x199)][_0x5aaa07(0x192)]<0x4?_0x5aaa07(0xf7):0xc8==_0x4305dd[_0x5aaa07(0x199)]['status']||0xc9==_0x4305dd[_0x5aaa07(0x199)][_0x5aaa07(0x123)]?_0x5aaa07(0x195):_0x523774[_0x5aaa07(0x135)](_0x4305dd[_0x5aaa07(0xe2)](_0x5aaa07(0x18f)),_0x4305dd[_0x5aaa07(0x199)][_0x5aaa07(0x123)])||_0x4305dd[_0x5aaa07(0x175)]>=_0x4305dd[_0x5aaa07(0xe2)](_0x5aaa07(0xef))?'error':(_0x4305dd['abort'](),_0x5aaa07(0x13b)):'pending';},_0x4305dd['message']=function(){var _0x3fd719=_0x195213;return _0x4305dd[_0x3fd719(0x199)]?_0x4305dd[_0x3fd719(0x199)]['responseText']:'';},_0x4305dd[_0x195213(0x13e)]=function(_0x4c2ffd){var _0x19631f=_0x195213;void 0x0===_0x4c2ffd&&(_0x4c2ffd=!0x1);var _0x205110=_0x4c2ffd?(_0x4305dd[_0x19631f(0x12d)]-_0x4305dd[_0x19631f(0x161)])/_0x4305dd[_0x19631f(0xf4)]:0x1;if(_0x4305dd[_0x19631f(0xf2)])return 0x0;switch(_0x4305dd[_0x19631f(0x199)]&&_0x4305dd[_0x19631f(0x199)][_0x19631f(0x123)]||(_0x205110*=0.95),_0x4305dd[_0x19631f(0x123)]()){case'success':case _0x19631f(0xed):return 0x1*_0x205110;case _0x19631f(0x13b):return 0x0*_0x205110;default:return _0x4305dd[_0x19631f(0xf6)]/(_0x4305dd[_0x19631f(0x12d)]-_0x4305dd[_0x19631f(0x161)])*_0x205110;}},this;}return _0x57ba0b[_0x4faddd(0x170)]=function(){var _0xfccece=_0x4faddd,_0x231be0=!0x1;if(_0x57ba0b[_0xfccece(0xe2)]('prioritizeFirstAndLastChunk')&&(_0x523774[_0xfccece(0x16e)](_0x57ba0b['files'],function(_0x10dac3){var _0xbe7514=_0xfccece;return _0x10dac3[_0xbe7514(0x10c)][_0xbe7514(0x12e)]&&_0xbe7514(0x13b)==_0x10dac3[_0xbe7514(0x10c)][0x0]['status']()&&0x0===_0x10dac3[_0xbe7514(0x10c)][0x0][_0xbe7514(0xfc)]?(_0x10dac3[_0xbe7514(0x10c)][0x0][_0xbe7514(0x122)](),_0x231be0=!0x0,!0x1):_0x10dac3[_0xbe7514(0x10c)][_0xbe7514(0x12e)]>0x1&&'pending'==_0x10dac3[_0xbe7514(0x10c)][_0x10dac3[_0xbe7514(0x10c)][_0xbe7514(0x12e)]-0x1][_0xbe7514(0x123)]()&&0x0===_0x10dac3[_0xbe7514(0x10c)][_0x10dac3[_0xbe7514(0x10c)][_0xbe7514(0x12e)]-0x1]['preprocessState']?(_0x10dac3[_0xbe7514(0x10c)][_0x10dac3[_0xbe7514(0x10c)]['length']-0x1][_0xbe7514(0x122)](),_0x231be0=!0x0,!0x1):void 0x0;}),_0x231be0)||(_0x523774['each'](_0x57ba0b[_0xfccece(0x14e)],function(_0x57b232){var _0x5c0c99=_0xfccece;if(!0x1===_0x57b232['isPaused']()&&_0x523774[_0x5c0c99(0x16e)](_0x57b232[_0x5c0c99(0x10c)],function(_0x38ba7d){var _0x5d1521=_0x5c0c99;if(_0x5d1521(0x13b)==_0x38ba7d[_0x5d1521(0x123)]()&&0x0===_0x38ba7d[_0x5d1521(0xfc)])return _0x38ba7d[_0x5d1521(0x122)](),_0x231be0=!0x0,!0x1;}),_0x231be0)return!0x1;}),_0x231be0))return!0x0;var _0x59d375=!0x1;return _0x523774['each'](_0x57ba0b[_0xfccece(0x14e)],function(_0x11247){var _0x10b4ff=_0xfccece;if(!_0x11247[_0x10b4ff(0x150)]())return _0x59d375=!0x0,!0x1;}),_0x59d375||_0x57ba0b[_0xfccece(0x189)](_0xfccece(0x101)),!0x1;},_0x57ba0b[_0x4faddd(0x172)]=function(_0x33f942,_0x2e14a7){var _0xd0ab6a=_0x4faddd;void 0x0===_0x33f942[_0xd0ab6a(0x12e)]&&(_0x33f942=[_0x33f942]),_0x523774[_0xd0ab6a(0x16e)](_0x33f942,function(_0x3d1619){var _0x515e7a=_0xd0ab6a;_0x515e7a(0xff)===_0x3d1619[_0x515e7a(0xd1)]&&_0x515e7a(0x12a)===_0x3d1619[_0x515e7a(0xce)]?_0x593952=_0x3d1619:((_0x593952=document[_0x515e7a(0x17f)](_0x515e7a(0x125)))[_0x515e7a(0x116)]('type',_0x515e7a(0x12a)),_0x593952[_0x515e7a(0xe1)]['display']='none',_0x3d1619[_0x515e7a(0x136)](_0x515e7a(0x103),function(){var _0x3d797a=_0x515e7a;_0x593952['style']['opacity']=0x0,_0x593952[_0x3d797a(0xe1)][_0x3d797a(0x16c)]=_0x3d797a(0x193),_0x593952[_0x3d797a(0x10f)](),_0x593952[_0x3d797a(0x103)](),_0x593952[_0x3d797a(0xe1)][_0x3d797a(0x16c)]=_0x3d797a(0x129);},!0x1),_0x3d1619['appendChild'](_0x593952));var _0x593952,_0x2b6116=_0x57ba0b[_0x515e7a(0xe2)](_0x515e7a(0xe8));void 0x0===_0x2b6116||0x1!=_0x2b6116?_0x593952[_0x515e7a(0x116)](_0x515e7a(0x104),_0x515e7a(0x104)):_0x593952[_0x515e7a(0xd2)](_0x515e7a(0x104)),_0x2e14a7?_0x593952[_0x515e7a(0x116)](_0x515e7a(0x17b),_0x515e7a(0x17b)):_0x593952[_0x515e7a(0xd2)](_0x515e7a(0x17b));var _0x2f2942=_0x57ba0b[_0x515e7a(0xe2)](_0x515e7a(0xf9));void 0x0!==_0x2f2942&&_0x2f2942[_0x515e7a(0x12e)]>=0x1?_0x593952['setAttribute'](_0x515e7a(0x18e),_0x2f2942[_0x515e7a(0x10b)](function(_0x59ac5a){return'.'+_0x59ac5a;})[_0x515e7a(0x111)](',')):_0x593952[_0x515e7a(0xd2)](_0x515e7a(0x18e)),_0x593952[_0x515e7a(0x136)](_0x515e7a(0xe4),function(_0x5957c0){var _0x937129=_0x515e7a;_0x51be2b(_0x5957c0['target']['files'],_0x5957c0),_0x57ba0b['getOpt'](_0x937129(0x177))&&(_0x5957c0[_0x937129(0xca)]['value']='');},!0x1);});},_0x57ba0b[_0x4faddd(0xcc)]=function(_0x5cdd8f){var _0x5be18f=_0x4faddd;void 0x0===_0x5cdd8f[_0x5be18f(0x12e)]&&(_0x5cdd8f=[_0x5cdd8f]),_0x523774[_0x5be18f(0x16e)](_0x5cdd8f,function(_0x11c734){var _0x4b5555=_0x5be18f;_0x11c734[_0x4b5555(0x136)](_0x4b5555(0xec),_0x44d362,!0x1),_0x11c734[_0x4b5555(0x136)](_0x4b5555(0x11c),_0x44d362,!0x1),_0x11c734['addEventListener'](_0x4b5555(0x174),_0x2c15a2,!0x1);});},_0x57ba0b[_0x4faddd(0xe3)]=function(_0x2cd219){var _0xd961d=_0x4faddd;void 0x0===_0x2cd219['length']&&(_0x2cd219=[_0x2cd219]),_0x523774[_0xd961d(0x16e)](_0x2cd219,function(_0xde65df){var _0x5d41f6=_0xd961d;_0xde65df[_0x5d41f6(0xdd)]('dragover',_0x44d362),_0xde65df['removeEventListener'](_0x5d41f6(0x11c),_0x44d362),_0xde65df['removeEventListener'](_0x5d41f6(0x174),_0x2c15a2);});},_0x57ba0b[_0x4faddd(0x16d)]=function(){var _0x14e2db=_0x4faddd,_0x5ccd98=!0x1;return _0x523774[_0x14e2db(0x16e)](_0x57ba0b[_0x14e2db(0x14e)],function(_0x27a23d){var _0x1a301e=_0x14e2db;if(_0x27a23d[_0x1a301e(0x16d)]())return _0x5ccd98=!0x0,!0x1;}),_0x5ccd98;},_0x57ba0b[_0x4faddd(0x113)]=function(){var _0x5c666c=_0x4faddd;if(!_0x57ba0b[_0x5c666c(0x16d)]()){_0x57ba0b[_0x5c666c(0x189)]('uploadStart');for(var _0x4eabb9=0x1;_0x4eabb9<=_0x57ba0b[_0x5c666c(0xe2)]('simultaneousUploads');_0x4eabb9++)_0x57ba0b[_0x5c666c(0x170)]();}},_0x57ba0b[_0x4faddd(0x13c)]=function(){var _0x55869a=_0x4faddd;_0x523774[_0x55869a(0x16e)](_0x57ba0b['files'],function(_0x1e4a9a){var _0x468342=_0x55869a;_0x1e4a9a[_0x468342(0x109)]();}),_0x57ba0b[_0x55869a(0x189)](_0x55869a(0x13c));},_0x57ba0b[_0x4faddd(0x16b)]=function(){var _0x2afdec=_0x4faddd;_0x57ba0b[_0x2afdec(0x189)](_0x2afdec(0x11e));for(var _0x5819d5=_0x57ba0b['files'][_0x2afdec(0x12e)]-0x1;_0x5819d5>=0x0;_0x5819d5--)_0x57ba0b[_0x2afdec(0x14e)][_0x5819d5]['cancel']();_0x57ba0b[_0x2afdec(0x189)](_0x2afdec(0x16b));},_0x57ba0b[_0x4faddd(0x13e)]=function(){var _0x33c4c1=_0x4faddd,_0x530b24=0x0,_0x24a2ed=0x0;return _0x523774[_0x33c4c1(0x16e)](_0x57ba0b[_0x33c4c1(0x14e)],function(_0x288fab){var _0x1f110d=_0x33c4c1;_0x530b24+=_0x288fab[_0x1f110d(0x13e)]()*_0x288fab['size'],_0x24a2ed+=_0x288fab['size'];}),_0x24a2ed>0x0?_0x530b24/_0x24a2ed:0x0;},_0x57ba0b[_0x4faddd(0xfb)]=function(_0x38faf2,_0x5b5160){_0x51be2b([_0x38faf2],_0x5b5160);},_0x57ba0b['addFiles']=function(_0xa632aa,_0x1953a6){_0x51be2b(_0xa632aa,_0x1953a6);},_0x57ba0b[_0x4faddd(0xd0)]=function(_0x5827ed){var _0x5b9f17=_0x4faddd;for(var _0x8c89df=_0x57ba0b[_0x5b9f17(0x14e)][_0x5b9f17(0x12e)]-0x1;_0x8c89df>=0x0;_0x8c89df--)_0x57ba0b['files'][_0x8c89df]===_0x5827ed&&_0x57ba0b[_0x5b9f17(0x14e)]['splice'](_0x8c89df,0x1);},_0x57ba0b['getFromUniqueIdentifier']=function(_0x362cc2){var _0x1ccdba=_0x4faddd,_0x52df15=!0x1;return _0x523774['each'](_0x57ba0b[_0x1ccdba(0x14e)],function(_0x3dbb09){var _0x5d8937=_0x1ccdba;_0x3dbb09[_0x5d8937(0x14a)]==_0x362cc2&&(_0x52df15=_0x3dbb09);}),_0x52df15;},_0x57ba0b[_0x4faddd(0x11b)]=function(){var _0x1f3331=_0x4faddd,_0x5799f4=0x0;return _0x523774[_0x1f3331(0x16e)](_0x57ba0b[_0x1f3331(0x14e)],function(_0x4fae12){var _0x29f6af=_0x1f3331;_0x5799f4+=_0x4fae12[_0x29f6af(0xda)];}),_0x5799f4;},_0x57ba0b['handleDropEvent']=function(_0xd41c68){_0x2c15a2(_0xd41c68);},_0x57ba0b[_0x4faddd(0xd6)]=function(_0x59e967){var _0x32943f=_0x4faddd;_0x51be2b(_0x59e967[_0x32943f(0xca)][_0x32943f(0x14e)],_0x59e967),_0x59e967[_0x32943f(0xca)][_0x32943f(0x183)]='';},_0x57ba0b['updateQuery']=function(_0x5651c1){var _0x52d4a2=_0x4faddd;_0x57ba0b['opts'][_0x52d4a2(0x18b)]=_0x5651c1;},this;};function _0x5e2d(_0x5ed0a0,_0x118d71){var _0x20b8f1=_0x20b8();return _0x5e2d=function(_0x5e2d8b,_0xdfc93a){_0x5e2d8b=_0x5e2d8b-0xc9;var _0x285467=_0x20b8f1[_0x5e2d8b];return _0x285467;},_0x5e2d(_0x5ed0a0,_0x118d71);}module[_0x41b77b(0x158)]=o;
|