aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Arter <davea@mysociety.org>2017-06-28 18:00:01 +0100
committerDave Arter <davea@mysociety.org>2017-06-30 18:39:11 +0100
commit30dd9d8bd1f4229bf5cb0a8c559ba00dba35b750 (patch)
tree319f3cf4ad6a84bd0cab753827245ee2429590fe
parent758899a8058ed2ecf66d1e16b929485c36f23144 (diff)
Resize photos client-side before uploading
The newest version of Dropzone has added support for client-side resizing of images, so this commit upgrades to version 5.1.1 and takes advantage of that in order to reduce the disc space consumed by uploaded images. The target size & JPEG quality is quite aggressive, resulting in files in the region of 200-300KB instead of several MB. I've tried to pick a value which doesn't impact the usefulness of the photos in identifying problems. Handily the new version also correctly rotates images according to the EXIF tag so our patch has be reduced dramatically to deal with the sync nature of the mini EXIF library in use. Related to the disc space part of #1411, though EXIF metadata isn't stripped.
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js3
-rw-r--r--web/js/dropzone.js.patch70
-rw-r--r--web/vendor/dropzone.min.js62
3 files changed, 46 insertions, 89 deletions
diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js
index 505421068..bc1d7d9a0 100644
--- a/web/cobrands/fixmystreet/fixmystreet.js
+++ b/web/cobrands/fixmystreet/fixmystreet.js
@@ -503,6 +503,9 @@ $.extend(fixmystreet.set_up, {
addRemoveLinks: true,
thumbnailHeight: 150,
thumbnailWidth: 150,
+ resizeWidth: 2048,
+ resizeHeight: 2048,
+ resizeQuality: 0.6,
acceptedFiles: 'image/jpeg,image/pjpeg,image/gif,image/tiff,image/png',
dictDefaultMessage: translation_strings.upload_default_message,
dictCancelUploadConfirmation: translation_strings.upload_cancel_confirmation,
diff --git a/web/js/dropzone.js.patch b/web/js/dropzone.js.patch
index 030b56a6a..b325b45d8 100644
--- a/web/js/dropzone.js.patch
+++ b/web/js/dropzone.js.patch
@@ -1,36 +1,50 @@
---- web/js/src/dropzone.orig.js 2016-06-17 21:29:47.000000000 +0100
-+++ web/js/src/dropzone.js 2016-06-20 11:40:55.000000000 +0100
-@@ -1469,7 +1469,7 @@
- return _results;
+--- dropzone.5.1.1.js 2017-06-30 09:46:43.000000000 +0100
++++ dropzone.exiffixes.js 2017-06-30 18:25:27.000000000 +0100
+@@ -1175,9 +1175,7 @@
+ };
+ if ((typeof EXIF !== "undefined" && EXIF !== null) && fixOrientation) {
+ loadExif = function(callback) {
+- return EXIF.getData(img, function() {
+- return callback(EXIF.getTag(this, 'Orientation'));
+- });
++ return callback(EXIF.getData(img));
+ };
+ }
+ return loadExif(function(orientation) {
+@@ -1601,7 +1599,7 @@
+ return results;
};
- Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
+ Dropzone.blacklistedBrowsers = [/opera.*(Windows Phone|Macintosh).*version\/12/i];
Dropzone.isBrowserSupported = function() {
- var capableBrowser, regex, _i, _len, _ref;
-@@ -1679,7 +1679,23 @@
- drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
- var vertSquashRatio;
- vertSquashRatio = detectVerticalSquash(img);
-- return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
-+ dh = dh / vertSquashRatio;
+ var capableBrowser, j, len, ref, regex;
+@@ -1904,6 +1902,27 @@
+ var array, ato, buf, imageData, mae, separatePoint;
+ imageData = resizedFileBase64.replace('data:image/jpeg;base64,', '');
+ buf = this.decode64(imageData);
+
-+ /* An improved version of http://stackoverflow.com/a/28356942/669631 */
-+ var orientation = 0;
-+ switch (EXIF.getData(img)) {
-+ case 3: orientation = 2; break;
-+ case 6: orientation = 1; break;
-+ case 8: orientation = -1; break;
-+ }
-+ if (orientation) {
-+ ctx.translate(dx + dw/2, dy + dh/2);
-+ ctx.rotate(orientation * Math.PI / 2);
-+ dx = -dw/2;
-+ dy = -dh/2;
-+ }
++ // Certain browsers (I'm looking at you, Safari) 'helpfully' provide their
++ // own EXIF data in the JPEG returned from HTMLCanvasElement.toDataURL.
++ // Dropzone doesn't take this into account when restoring the original
++ // file's EXIF, meaning the final uploaded file has two sets of EXIF.
++ // Certain JPEG tools (I'm looking at you, jhead) don't really handle this
++ // very well, either ignoring the duplicate EXIF, picking the wrong one
++ // or refusing to process the file entirely.
++ // Seems like the best way out of this mess is to make sure the uploaded
++ // JPEG only ever has one EXIF header. In this case, we want to keep the
++ // EXIF from the original file.
++ // This little loop inspects the new JPEG from the toDataURL call and
++ // strips out any existing EXIF headers (technically any APP1 headers,
++ // but same difference in this case).
++ for (var i = 0; i < buf.length; i++) {
++ if (buf[i] === 255 && buf[i+1] === 225) {
++ var length = buf[i + 2] * 256 + buf[i + 3] + 2;
++ buf.splice(i, length);
++ }
++ }
+
-+ return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh);
- };
-
-
+ separatePoint = buf.indexOf(255, 3);
+ mae = buf.slice(0, separatePoint);
+ ato = buf.slice(separatePoint);
diff --git a/web/vendor/dropzone.min.js b/web/vendor/dropzone.min.js
index 38b48d962..dd326fc51 100644
--- a/web/vendor/dropzone.min.js
+++ b/web/vendor/dropzone.min.js
@@ -1,61 +1 @@
-(function(){function k(k,m){for(var p="",l=m;l<m+4;l++)p+=String.fromCharCode(k.getUint8(l));if("Exif"!=p)return!1;l=m+6;if(18761==k.getUint16(l))p=!1;else if(19789==k.getUint16(l))p=!0;else return!1;if(42!=k.getUint16(l+2,!p))return!1;var r=k.getUint32(l+4,!p);if(8>r)return!1;var l=l+r,r=k.getUint16(l,!p),v,w;for(w=0;w<r;w++)if(v=l+12*w+2,274==k.getUint16(v,!p))return parseInt(k.getUint16(v+8,!p),10);return!1}var w={};window.EXIF=w;w.getData=function(q){if((q instanceof Image||q instanceof HTMLImageElement)&&
-!q.complete)return!1;var m=q.src;if(m.match(/^http/)){var m=document.createElement("canvas"),p=m.getContext("2d");m.width=q.width;m.height=q.height;p.drawImage(q,0,0);m=m.toDataURL("image/jpeg")}q=m.replace(/^data\:([^\;]+)\;base64,/gmi,"");m=atob(q);p=m.length;q=new ArrayBuffer(p);for(var l=new Uint8Array(q),r=0;r<p;r++)l[r]=m.charCodeAt(r);m=new DataView(q);if(255!=m.getUint8(0)||216!=m.getUint8(1))return!1;p=2;for(q=q.byteLength;p<q;){if(255!=m.getUint8(p))return!1;l=m.getUint8(p+1);if(225==l)return k(m,
-p+4);p+=2+m.getUint16(p+2)}}})();(function(){var k,w,q,m,p,l,r,v=[].slice,A={}.hasOwnProperty,B=function(e,c){function u(){this.constructor=e}for(var h in c)A.call(c,h)&&(e[h]=c[h]);u.prototype=c.prototype;e.prototype=new u;e.__super__=c.prototype;return e};l=function(){};w=function(){function e(){}e.prototype.addEventListener=e.prototype.on;e.prototype.on=function(c,e){this._callbacks=this._callbacks||{};this._callbacks[c]||(this._callbacks[c]=[]);this._callbacks[c].push(e);return this};e.prototype.emit=function(){var c,e,h,a,b;
-e=arguments[0];c=2<=arguments.length?v.call(arguments,1):[];this._callbacks=this._callbacks||{};if(h=this._callbacks[e])for(a=0,b=h.length;a<b;a++)e=h[a],e.apply(this,c);return this};e.prototype.removeListener=e.prototype.off;e.prototype.removeAllListeners=e.prototype.off;e.prototype.removeEventListener=e.prototype.off;e.prototype.off=function(c,e){var h,a,b,d,f;if(!this._callbacks||0===arguments.length)return this._callbacks={},this;a=this._callbacks[c];if(!a)return this;if(1===arguments.length)return delete this._callbacks[c],
-this;b=d=0;for(f=a.length;d<f;b=++d)if(h=a[b],h===e){a.splice(b,1);break}return this};return e}();k=function(e){function c(a,b){var d,f,g;this.element=a;this.version=c.version;this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,"");this.clickableElements=[];this.listeners=[];this.files=[];"string"===typeof this.element&&(this.element=document.querySelector(this.element));if(!this.element||null==this.element.nodeType)throw Error("Invalid dropzone element.");if(this.element.dropzone)throw Error("Dropzone already attached.");
-c.instances.push(this);this.element.dropzone=this;d=null!=(g=c.optionsForElement(this.element))?g:{};this.options=k({},this.defaultOptions,d,null!=b?b:{});if(this.options.forceFallback||!c.isBrowserSupported())return this.options.fallback.call(this);null==this.options.url&&(this.options.url=this.element.getAttribute("action"));if(!this.options.url)throw Error("No URL provided.");if(this.options.acceptedFiles&&this.options.acceptedMimeTypes)throw Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
-this.options.acceptedMimeTypes&&(this.options.acceptedFiles=this.options.acceptedMimeTypes,delete this.options.acceptedMimeTypes);this.options.method=this.options.method.toUpperCase();(f=this.getExistingFallback())&&f.parentNode&&f.parentNode.removeChild(f);!1!==this.options.previewsContainer&&(this.previewsContainer=this.options.previewsContainer?c.getElement(this.options.previewsContainer,"previewsContainer"):this.element);this.options.clickable&&(this.clickableElements=!0===this.options.clickable?
-[this.element]:c.getElements(this.options.clickable,"clickable"));this.init()}var k,h;B(c,e);c.prototype.Emitter=w;c.prototype.events="drop dragstart dragend dragenter dragover dragleave addedfile addedfiles removedfile thumbnail error errormultiple processing processingmultiple uploadprogress totaluploadprogress sending sendingmultiple success successmultiple canceled canceledmultiple complete completemultiple reset maxfilesexceeded maxfilesreached queuecomplete".split(" ");c.prototype.defaultOptions=
-{url:null,method:"post",withCredentials:!1,parallelUploads:2,uploadMultiple:!1,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,filesizeBase:1E3,maxFiles:null,params:{},clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",
-dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",
-accept:function(a,b){return b()},init:function(){return l},forceFallback:!1,fallback:function(){var a,b,d,f,g;this.element.className=""+this.element.className+" dz-browser-not-supported";g=this.element.getElementsByTagName("div");d=0;for(f=g.length;d<f;d++)a=g[d],/(^| )dz-message($| )/.test(a.className)&&(b=a,a.className="dz-message");b||(b=c.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(b));if(a=b.getElementsByTagName("span")[0])null!=a.textContent?a.textContent=
-this.options.dictFallbackMessage:null!=a.innerText&&(a.innerText=this.options.dictFallbackMessage);return this.element.appendChild(this.getFallbackForm())},resize:function(a){var b,d,f;b={srcX:0,srcY:0,srcWidth:a.width,srcHeight:a.height};d=a.width/a.height;b.optWidth=this.options.thumbnailWidth;b.optHeight=this.options.thumbnailHeight;null==b.optWidth&&null==b.optHeight?(b.optWidth=b.srcWidth,b.optHeight=b.srcHeight):null==b.optWidth?b.optWidth=d*b.optHeight:null==b.optHeight&&(b.optHeight=1/d*b.optWidth);
-f=b.optWidth/b.optHeight;a.height<b.optHeight||a.width<b.optWidth?(b.trgHeight=b.srcHeight,b.trgWidth=b.srcWidth):d>f?(b.srcHeight=a.height,b.srcWidth=b.srcHeight*f):(b.srcWidth=a.width,b.srcHeight=b.srcWidth/f);b.srcX=(a.width-b.srcWidth)/2;b.srcY=(a.height-b.srcHeight)/2;return b},drop:function(a){return this.element.classList.remove("dz-drag-hover")},dragstart:l,dragend:function(a){return this.element.classList.remove("dz-drag-hover")},dragenter:function(a){return this.element.classList.add("dz-drag-hover")},
-dragover:function(a){return this.element.classList.add("dz-drag-hover")},dragleave:function(a){return this.element.classList.remove("dz-drag-hover")},paste:l,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(a){var b,d,f,g,n,x;this.element===this.previewsContainer&&this.element.classList.add("dz-started");if(this.previewsContainer){a.previewElement=c.createElement(this.options.previewTemplate.trim());a.previewTemplate=a.previewElement;this.previewsContainer.appendChild(a.previewElement);
-g=a.previewElement.querySelectorAll("[data-dz-name]");d=0;for(f=g.length;d<f;d++)b=g[d],b.textContent=a.name;g=a.previewElement.querySelectorAll("[data-dz-size]");d=0;for(f=g.length;d<f;d++)b=g[d],b.innerHTML=this.filesize(a.size);this.options.addRemoveLinks&&(a._removeLink=c.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),a.previewElement.appendChild(a._removeLink));b=function(b){return function(d){d.preventDefault();d.stopPropagation();
-return a.status===c.UPLOADING?c.confirm(b.options.dictCancelUploadConfirmation,function(){return b.removeFile(a)}):b.options.dictRemoveFileConfirmation?c.confirm(b.options.dictRemoveFileConfirmation,function(){return b.removeFile(a)}):b.removeFile(a)}}(this);n=a.previewElement.querySelectorAll("[data-dz-remove]");x=[];f=0;for(g=n.length;f<g;f++)d=n[f],x.push(d.addEventListener("click",b));return x}},removedfile:function(a){var b;a.previewElement&&null!=(b=a.previewElement)&&b.parentNode.removeChild(a.previewElement);
-return this._updateMaxFilesReachedClass()},thumbnail:function(a,b){var d,f,c,n;if(a.previewElement){a.previewElement.classList.remove("dz-file-preview");n=a.previewElement.querySelectorAll("[data-dz-thumbnail]");f=0;for(c=n.length;f<c;f++)d=n[f],d.alt=a.name,d.src=b;return setTimeout(function(b){return function(){return a.previewElement.classList.add("dz-image-preview")}}(this),1)}},error:function(a,b){var d,f,c,n,x;if(a.previewElement){a.previewElement.classList.add("dz-error");"String"!==typeof b&&
-b.error&&(b=b.error);n=a.previewElement.querySelectorAll("[data-dz-errormessage]");x=[];f=0;for(c=n.length;f<c;f++)d=n[f],x.push(d.textContent=b);return x}},errormultiple:l,processing:function(a){if(a.previewElement&&(a.previewElement.classList.add("dz-processing"),a._removeLink))return a._removeLink.textContent=this.options.dictCancelUpload},processingmultiple:l,uploadprogress:function(a,b,d){var c,g,n;if(a.previewElement){g=a.previewElement.querySelectorAll("[data-dz-uploadprogress]");n=[];d=0;
-for(c=g.length;d<c;d++)a=g[d],"PROGRESS"===a.nodeName?n.push(a.value=b):n.push(a.style.width=""+b+"%");return n}},totaluploadprogress:l,sending:l,sendingmultiple:l,success:function(a){if(a.previewElement)return a.previewElement.classList.add("dz-success")},successmultiple:l,canceled:function(a){return this.emit("error",a,"Upload canceled.")},canceledmultiple:l,complete:function(a){a._removeLink&&(a._removeLink.textContent=this.options.dictRemoveFile);if(a.previewElement)return a.previewElement.classList.add("dz-complete")},
-completemultiple:l,maxfilesexceeded:l,maxfilesreached:l,queuecomplete:l,addedfiles:l,previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Check</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Error</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>'};
-k=function(){var a,b,d,c,g,n,x;c=arguments[0];d=2<=arguments.length?v.call(arguments,1):[];n=0;for(x=d.length;n<x;n++)for(a in b=d[n],b)g=b[a],c[a]=g;return c};c.prototype.getAcceptedFiles=function(){var a,b,d,c,g;c=this.files;g=[];b=0;for(d=c.length;b<d;b++)a=c[b],a.accepted&&g.push(a);return g};c.prototype.getRejectedFiles=function(){var a,b,d,c,g;c=this.files;g=[];b=0;for(d=c.length;b<d;b++)a=c[b],a.accepted||g.push(a);return g};c.prototype.getFilesWithStatus=function(a){var b,d,c,g,n;g=this.files;
-n=[];d=0;for(c=g.length;d<c;d++)b=g[d],b.status===a&&n.push(b);return n};c.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(c.QUEUED)};c.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(c.UPLOADING)};c.prototype.getAddedFiles=function(){return this.getFilesWithStatus(c.ADDED)};c.prototype.getActiveFiles=function(){var a,b,d,f,g;f=this.files;g=[];b=0;for(d=f.length;b<d;b++)a=f[b],a.status!==c.UPLOADING&&a.status!==c.QUEUED||g.push(a);return g};c.prototype.init=
-function(){var a,b,d,f,g,n;"form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data");this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(c.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>"));this.clickableElements.length&&(d=function(a){return function(){a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput);a.hiddenFileInput=
-document.createElement("input");a.hiddenFileInput.setAttribute("type","file");(null==a.options.maxFiles||1<a.options.maxFiles)&&a.hiddenFileInput.setAttribute("multiple","multiple");a.hiddenFileInput.className="dz-hidden-input";null!=a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles);null!=a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture);a.hiddenFileInput.style.visibility="hidden";a.hiddenFileInput.style.position="absolute";a.hiddenFileInput.style.top=
-"0";a.hiddenFileInput.style.left="0";a.hiddenFileInput.style.height="0";a.hiddenFileInput.style.width="0";document.querySelector(a.options.hiddenInputContainer).appendChild(a.hiddenFileInput);return a.hiddenFileInput.addEventListener("change",function(){var b,c,f,g;c=a.hiddenFileInput.files;if(c.length)for(f=0,g=c.length;f<g;f++)b=c[f],a.addFile(b);a.emit("addedfiles",c);return d()})}}(this),d());this.URL=null!=(a=window.URL)?a:window.webkitURL;n=this.events;f=0;for(g=n.length;f<g;f++)a=n[f],this.on(a,
-this.options[a]);this.on("uploadprogress",function(a){return function(){return a.updateTotalUploadProgress()}}(this));this.on("removedfile",function(a){return function(){return a.updateTotalUploadProgress()}}(this));this.on("canceled",function(a){return function(b){return a.emit("complete",b)}}(this));this.on("complete",function(a){return function(b){if(0===a.getAddedFiles().length&&0===a.getUploadingFiles().length&&0===a.getQueuedFiles().length)return setTimeout(function(){return a.emit("queuecomplete")},
-0)}}(this));b=function(a){a.stopPropagation();return a.preventDefault?a.preventDefault():a.returnValue=!1};this.listeners=[{element:this.element,events:{dragstart:function(a){return function(b){return a.emit("dragstart",b)}}(this),dragenter:function(a){return function(d){b(d);return a.emit("dragenter",d)}}(this),dragover:function(a){return function(d){var c;try{c=d.dataTransfer.effectAllowed}catch(f){}d.dataTransfer.dropEffect="move"===c||"linkMove"===c?"move":"copy";b(d);return a.emit("dragover",
-d)}}(this),dragleave:function(a){return function(b){return a.emit("dragleave",b)}}(this),drop:function(a){return function(d){b(d);return a.drop(d)}}(this),dragend:function(a){return function(b){return a.emit("dragend",b)}}(this)}}];this.clickableElements.forEach(function(a){return function(b){return a.listeners.push({element:b,events:{click:function(d){(b!==a.element||d.target===a.element||c.elementInside(d.target,a.element.querySelector(".dz-message")))&&a.hiddenFileInput.click();return!0}}})}}(this));
-this.enable();return this.options.init.call(this)};c.prototype.destroy=function(){var a;this.disable();this.removeAllFiles(!0);null!=(a=this.hiddenFileInput)&&a.parentNode&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null);delete this.element.dropzone;return c.instances.splice(c.instances.indexOf(this),1)};c.prototype.updateTotalUploadProgress=function(){var a,b,d,c,g,n;b=d=0;if(this.getActiveFiles().length){n=this.getActiveFiles();c=0;for(g=n.length;c<
-g;c++)a=n[c],d+=a.upload.bytesSent,b+=a.upload.total;a=100*d/b}else a=100;return this.emit("totaluploadprogress",a,b,d)};c.prototype._getParamName=function(a){return"function"===typeof this.options.paramName?this.options.paramName(a):""+this.options.paramName+(this.options.uploadMultiple?"["+a+"]":"")};c.prototype.getFallbackForm=function(){var a,b;if(a=this.getExistingFallback())return a;a='<div class="dz-fallback">';this.options.dictFallbackText&&(a+="<p>"+this.options.dictFallbackText+"</p>");
-a+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>';a=c.createElement(a);"FORM"!==this.element.tagName?(b=c.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>'),b.appendChild(a)):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method));return null!=b?b:a};
-c.prototype.getExistingFallback=function(){var a,b,d,c,g;b=function(a){var b,d,c;d=0;for(c=a.length;d<c;d++)if(b=a[d],/(^| )fallback($| )/.test(b.className))return b};g=["div","form"];d=0;for(c=g.length;d<c;d++)if(a=g[d],a=b(this.element.getElementsByTagName(a)))return a};c.prototype.setupEventListeners=function(){var a,b,d,c,g,n,e;n=this.listeners;e=[];c=0;for(g=n.length;c<g;c++)a=n[c],e.push(function(){var c,f;c=a.events;f=[];for(b in c)d=c[b],f.push(a.element.addEventListener(b,d,!1));return f}());
-return e};c.prototype.removeEventListeners=function(){var a,b,c,f,g,e,h;e=this.listeners;h=[];f=0;for(g=e.length;f<g;f++)a=e[f],h.push(function(){var f,g;f=a.events;g=[];for(b in f)c=f[b],g.push(a.element.removeEventListener(b,c,!1));return g}());return h};c.prototype.disable=function(){var a,b,c,f,g;this.clickableElements.forEach(function(a){return a.classList.remove("dz-clickable")});this.removeEventListeners();f=this.files;g=[];b=0;for(c=f.length;b<c;b++)a=f[b],g.push(this.cancelUpload(a));return g};
-c.prototype.enable=function(){this.clickableElements.forEach(function(a){return a.classList.add("dz-clickable")});return this.setupEventListeners()};c.prototype.filesize=function(a){var b,c,f,g,e,h,k,u;f=0;g="b";if(0<a){h=["TB","GB","MB","KB","b"];c=k=0;for(u=h.length;k<u;c=++k)if(e=h[c],b=Math.pow(this.options.filesizeBase,4-c)/10,a>=b){f=a/Math.pow(this.options.filesizeBase,4-c);g=e;break}f=Math.round(10*f)/10}return"<strong>"+f+"</strong> "+g};c.prototype._updateMaxFilesReachedClass=function(){return null!=
-this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")};c.prototype.drop=function(a){var b;a.dataTransfer&&(this.emit("drop",a),b=a.dataTransfer.files,this.emit("addedfiles",b),b.length&&((a=a.dataTransfer.items)&&a.length&&null!=a[0].webkitGetAsEntry?this._addFilesFromItems(a):
-this.handleFiles(b)))};c.prototype.paste=function(a){var b;if(null!=(null!=a?null!=(b=a.clipboardData)?b.items:void 0:void 0)&&(this.emit("paste",a),a=a.clipboardData.items,a.length))return this._addFilesFromItems(a)};c.prototype.handleFiles=function(a){var b,c,f,g;g=[];c=0;for(f=a.length;c<f;c++)b=a[c],g.push(this.addFile(b));return g};c.prototype._addFilesFromItems=function(a){var b,c,f,g,e;e=[];f=0;for(g=a.length;f<g;f++)c=a[f],null!=c.webkitGetAsEntry&&(b=c.webkitGetAsEntry())?b.isFile?e.push(this.addFile(c.getAsFile())):
-b.isDirectory?e.push(this._addFilesFromDirectory(b,b.name)):e.push(void 0):null!=c.getAsFile?null==c.kind||"file"===c.kind?e.push(this.addFile(c.getAsFile())):e.push(void 0):e.push(void 0);return e};c.prototype._addFilesFromDirectory=function(a,b){var c,f;c=a.createReader();f=function(a){return function(c){var d,f,e;f=0;for(e=c.length;f<e;f++)d=c[f],d.isFile?d.file(function(c){if(!a.options.ignoreHiddenFiles||"."!==c.name.substring(0,1))return c.fullPath=""+b+"/"+c.name,a.addFile(c)}):d.isDirectory&&
-a._addFilesFromDirectory(d,""+b+"/"+d.name)}}(this);return c.readEntries(f,function(a){return"undefined"!==typeof console&&null!==console?"function"===typeof console.log?console.log(a):void 0:void 0})};c.prototype.accept=function(a,b){return a.size>1048576*this.options.maxFilesize?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(a.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):c.isValidFile(a,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=
-this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",a)):this.options.accept.call(this,a,b):b(this.options.dictInvalidFileType)};c.prototype.addFile=function(a){a.upload={progress:0,total:a.size,bytesSent:0};this.files.push(a);a.status=c.ADDED;this.emit("addedfile",a);this._enqueueThumbnail(a);return this.accept(a,function(b){return function(c){c?(a.accepted=!1,b._errorProcessing([a],c)):(a.accepted=!0,b.options.autoQueue&&
-b.enqueueFile(a));return b._updateMaxFilesReachedClass()}}(this))};c.prototype.enqueueFiles=function(a){var b,c,f;c=0;for(f=a.length;c<f;c++)b=a[c],this.enqueueFile(b);return null};c.prototype.enqueueFile=function(a){if(a.status===c.ADDED&&!0===a.accepted){if(a.status=c.QUEUED,this.options.autoProcessQueue)return setTimeout(function(a){return function(){return a.processQueue()}}(this),0)}else throw Error("This file can't be queued because it has already been processed or was rejected.");};c.prototype._thumbnailQueue=
-[];c.prototype._processingThumbnail=!1;c.prototype._enqueueThumbnail=function(a){if(this.options.createImageThumbnails&&a.type.match(/image.*/)&&a.size<=1048576*this.options.maxThumbnailFilesize)return this._thumbnailQueue.push(a),setTimeout(function(a){return function(){return a._processThumbnailQueue()}}(this),0)};c.prototype._processThumbnailQueue=function(){if(!this._processingThumbnail&&0!==this._thumbnailQueue.length)return this._processingThumbnail=!0,this.createThumbnail(this._thumbnailQueue.shift(),
-function(a){return function(){a._processingThumbnail=!1;return a._processThumbnailQueue()}}(this))};c.prototype.removeFile=function(a){a.status===c.UPLOADING&&this.cancelUpload(a);this.files=r(this.files,a);this.emit("removedfile",a);if(0===this.files.length)return this.emit("reset")};c.prototype.removeAllFiles=function(a){var b,d,f,g;null==a&&(a=!1);g=this.files.slice();d=0;for(f=g.length;d<f;d++)b=g[d],(b.status!==c.UPLOADING||a)&&this.removeFile(b);return null};c.prototype.createThumbnail=function(a,
-b){var c;c=new FileReader;c.onload=function(f){return function(){if("image/svg+xml"===a.type)f.emit("thumbnail",a,c.result),null!=b&&b();else return f.createThumbnailFromUrl(a,c.result,b)}}(this);return c.readAsDataURL(a)};c.prototype.createThumbnailFromUrl=function(a,b,c,f){var g;g=document.createElement("img");f&&(g.crossOrigin=f);g.onload=function(b){return function(){var f,e,h,k,u,l,m;a.width=g.width;a.height=g.height;h=b.options.resize.call(b,a);null==h.trgWidth&&(h.trgWidth=h.optWidth);null==
-h.trgHeight&&(h.trgHeight=h.optHeight);f=document.createElement("canvas");e=f.getContext("2d");f.width=h.trgWidth;f.height=h.trgHeight;p(e,g,null!=(k=h.srcX)?k:0,null!=(u=h.srcY)?u:0,h.srcWidth,h.srcHeight,null!=(l=h.trgX)?l:0,null!=(m=h.trgY)?m:0,h.trgWidth,h.trgHeight);f=f.toDataURL("image/png");b.emit("thumbnail",a,f);if(null!=c)return c()}}(this);null!=c&&(g.onerror=c);return g.src=b};c.prototype.processQueue=function(){var a,b,c,f;b=this.options.parallelUploads;a=c=this.getUploadingFiles().length;
-if(!(c>=b)&&(f=this.getQueuedFiles(),0<f.length)){if(this.options.uploadMultiple)return this.processFiles(f.slice(0,b-c));for(;a<b&&f.length;)this.processFile(f.shift()),a++}};c.prototype.processFile=function(a){return this.processFiles([a])};c.prototype.processFiles=function(a){var b,d,f;d=0;for(f=a.length;d<f;d++)b=a[d],b.processing=!0,b.status=c.UPLOADING,this.emit("processing",b);this.options.uploadMultiple&&this.emit("processingmultiple",a);return this.uploadFiles(a)};c.prototype._getFilesWithXhr=
-function(a){var b,c,f,g,e;g=this.files;e=[];c=0;for(f=g.length;c<f;c++)b=g[c],b.xhr===a&&e.push(b);return e};c.prototype.cancelUpload=function(a){var b,d,f,g;if(a.status===c.UPLOADING){d=this._getFilesWithXhr(a.xhr);f=0;for(g=d.length;f<g;f++)b=d[f],b.status=c.CANCELED;a.xhr.abort();a=0;for(f=d.length;a<f;a++)b=d[a],this.emit("canceled",b);this.options.uploadMultiple&&this.emit("canceledmultiple",d)}else if((b=a.status)===c.ADDED||b===c.QUEUED)a.status=c.CANCELED,this.emit("canceled",a),this.options.uploadMultiple&&
-this.emit("canceledmultiple",[a]);if(this.options.autoProcessQueue)return this.processQueue()};h=function(){var a,b;b=arguments[0];a=2<=arguments.length?v.call(arguments,1):[];return"function"===typeof b?b.apply(this,a):b};c.prototype.uploadFile=function(a){return this.uploadFiles([a])};c.prototype.uploadFiles=function(a){var b,d,f,g,e,l,m,p,q,r,w,v,t,z,y;t=new XMLHttpRequest;e=0;for(v=a.length;e<v;e++)b=a[e],b.xhr=t;e=h(this.options.method,a);v=h(this.options.url,a);t.open(e,v,!0);t.withCredentials=
-!!this.options.withCredentials;r=null;f=function(c){return function(){var d,f,e;e=[];d=0;for(f=a.length;d<f;d++)b=a[d],e.push(c._errorProcessing(a,r||c.options.dictResponseError.replace("{{statusCode}}",t.status),t));return e}}(this);w=function(c){return function(d){var f,e,g;if(null!=d)for(f=100*d.loaded/d.total,e=0,g=a.length;e<g;e++)b=a[e],b.upload={progress:f,total:d.total,bytesSent:d.loaded};else{d=!0;f=100;e=0;for(g=a.length;e<g;e++){b=a[e];if(100!==b.upload.progress||b.upload.bytesSent!==b.upload.total)d=
-!1;b.upload.progress=f;b.upload.bytesSent=b.upload.total}if(d)return}g=[];d=0;for(e=a.length;d<e;d++)b=a[d],g.push(c.emit("uploadprogress",b,f,b.upload.bytesSent));return g}}(this);t.onload=function(b){return function(d){var e;if(a[0].status!==c.CANCELED&&4===t.readyState){r=t.responseText;if(t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json"))try{r=JSON.parse(r)}catch(g){d=g,r="Invalid JSON response from server."}w();return 200<=(e=t.status)&&300>
-e?b._finished(a,r,d):f()}}}(this);t.onerror=function(b){return function(){if(a[0].status!==c.CANCELED)return f()}}(this);(null!=(g=t.upload)?g:t).onprogress=w;e={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};this.options.headers&&k(e,this.options.headers);for(d in e)(g=e[d])&&t.setRequestHeader(d,g);d=new FormData;if(this.options.params)for(p in e=this.options.params,e)g=e[p],d.append(p,g);p=0;for(g=a.length;p<g;p++)b=a[p],this.emit("sending",b,t,d);this.options.uploadMultiple&&
-this.emit("sendingmultiple",a,t,d);if("FORM"===this.element.tagName)for(v=this.element.querySelectorAll("input, textarea, select, button"),g=0,e=v.length;g<e;g++)if(m=v[g],p=m.getAttribute("name"),q=m.getAttribute("type"),"SELECT"===m.tagName&&m.hasAttribute("multiple"))for(y=m.options,q=0,z=y.length;q<z;q++)m=y[q],m.selected&&d.append(p,m.value);else(!q||"checkbox"!==(l=q.toLowerCase())&&"radio"!==l||m.checked)&&d.append(p,m.value);l=p=0;for(g=a.length-1;0<=g?p<=g:p>=g;l=0<=g?++p:--p)d.append(this._getParamName(l),
-a[l],a[l].name);return this.submitRequest(t,d,a)};c.prototype.submitRequest=function(a,b,c){return a.send(b)};c.prototype._finished=function(a,b,d){var f,e,h;e=0;for(h=a.length;e<h;e++)f=a[e],f.status=c.SUCCESS,this.emit("success",f,b,d),this.emit("complete",f);this.options.uploadMultiple&&(this.emit("successmultiple",a,b,d),this.emit("completemultiple",a));if(this.options.autoProcessQueue)return this.processQueue()};c.prototype._errorProcessing=function(a,b,d){var e,g,h;g=0;for(h=a.length;g<h;g++)e=
-a[g],e.status=c.ERROR,this.emit("error",e,b,d),this.emit("complete",e);this.options.uploadMultiple&&(this.emit("errormultiple",a,b,d),this.emit("completemultiple",a));if(this.options.autoProcessQueue)return this.processQueue()};return c}(w);k.version="4.2.0";k.options={};k.optionsForElement=function(e){if(e.getAttribute("id"))return k.options[q(e.getAttribute("id"))]};k.instances=[];k.forElement=function(e){"string"===typeof e&&(e=document.querySelector(e));if(null==(null!=e?e.dropzone:void 0))throw Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
-return e.dropzone};k.autoDiscover=!0;k.discover=function(){var e,c,u,h,a;document.querySelectorAll?c=document.querySelectorAll(".dropzone"):(c=[],e=function(a){var d,e,g,h;h=[];e=0;for(g=a.length;e<g;e++)d=a[e],/(^| )dropzone($| )/.test(d.className)?h.push(c.push(d)):h.push(void 0);return h},e(document.getElementsByTagName("div")),e(document.getElementsByTagName("form")));a=[];u=0;for(h=c.length;u<h;u++)e=c[u],!1!==k.optionsForElement(e)?a.push(new k(e)):a.push(void 0);return a};k.blacklistedBrowsers=
-[/opera.*(Windows Phone|Macintosh).*version\/12/i];k.isBrowserSupported=function(){var e,c,u,h,a;e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(a=k.blacklistedBrowsers,u=0,h=a.length;u<h;u++)c=a[u],c.test(navigator.userAgent)&&(e=!1);else e=!1;else e=!1;return e};r=function(e,c){var k,h,a,b;b=[];h=0;for(a=e.length;h<a;h++)k=e[h],k!==c&&b.push(k);return b};q=function(e){return e.replace(/[\-_](\w)/g,
-function(c){return c.charAt(1).toUpperCase()})};k.createElement=function(e){var c;c=document.createElement("div");c.innerHTML=e;return c.childNodes[0]};k.elementInside=function(e,c){if(e===c)return!0;for(;e=e.parentNode;)if(e===c)return!0;return!1};k.getElement=function(e,c){var k;"string"===typeof e?k=document.querySelector(e):null!=e.nodeType&&(k=e);if(null==k)throw Error("Invalid `"+c+"` option provided. Please provide a CSS selector or a plain HTML element.");return k};k.getElements=function(e,
-c){var k,h,a,b,d;if(e instanceof Array){h=[];try{for(a=0,b=e.length;a<b;a++)k=e[a],h.push(this.getElement(k,c))}catch(f){h=null}}else if("string"===typeof e)for(h=[],d=document.querySelectorAll(e),a=0,b=d.length;a<b;a++)k=d[a],h.push(k);else null!=e.nodeType&&(h=[e]);if(null==h||!h.length)throw Error("Invalid `"+c+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return h};k.confirm=function(e,c,k){if(window.confirm(e))return c();if(null!=k)return k()};
-k.isValidFile=function(e,c){var k,h,a,b,d;if(!c)return!0;c=c.split(",");h=e.type;k=h.replace(/\/.*$/,"");b=0;for(d=c.length;b<d;b++)if(a=c[b],a=a.trim(),"."===a.charAt(0)){if(-1!==e.name.toLowerCase().indexOf(a.toLowerCase(),e.name.length-a.length))return!0}else if(/\/\*$/.test(a)){if(k===a.replace(/\/.*$/,""))return!0}else if(h===a)return!0;return!1};"undefined"!==typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each(function(){return new k(this,e)})});"undefined"!==typeof module&&
-null!==module?module.exports=k:window.Dropzone=k;k.ADDED="added";k.QUEUED="queued";k.ACCEPTED=k.QUEUED;k.UPLOADING="uploading";k.PROCESSING=k.UPLOADING;k.CANCELED="canceled";k.ERROR="error";k.SUCCESS="success";m=function(e){var c,k,h,a,b;h=e.naturalHeight;c=document.createElement("canvas");c.width=1;c.height=h;c=c.getContext("2d");c.drawImage(e,0,0);c=c.getImageData(0,0,1,h).data;b=0;for(a=k=h;a>b;)e=c[4*(a-1)+3],0===e?k=a:b=a,a=k+b>>1;h=a/h;return 0===h?1:h};p=function(e,c,k,h,a,b,d,f,g,n){var l;
-l=m(c);n/=l;l=0;switch(EXIF.getData(c)){case 3:l=2;break;case 6:l=1;break;case 8:l=-1}l&&(e.translate(d+g/2,f+n/2),e.rotate(l*Math.PI/2),d=-g/2,f=-n/2);return e.drawImage(c,k,h,a,b,d,f,g,n)};k._autoDiscoverFunction=function(){if(k.autoDiscover)return k.discover()};(function(e,c){var k,h,a,b,d,f,g,l,m;a=!1;m=!0;h=e.document;l=h.documentElement;k=h.addEventListener?"addEventListener":"attachEvent";g=h.addEventListener?"removeEventListener":"detachEvent";f=h.addEventListener?"":"on";b=function(d){if("readystatechange"!==
-d.type||"complete"===h.readyState)if(("load"===d.type?e:h)[g](f+d.type,b,!1),!a&&(a=!0))return c.call(e,d.type||d)};d=function(){try{l.doScroll("left")}catch(a){setTimeout(d,50);return}return b("poll")};if("complete"!==h.readyState){if(h.createEventObject&&l.doScroll){try{m=!e.frameElement}catch(p){}m&&d()}h[k](f+"DOMContentLoaded",b,!1);h[k](f+"readystatechange",b,!1);return e[k](f+"load",b,!1)}})(window,k._autoDiscoverFunction)}).call(this);
+(function(){var a={};window.EXIF=a;function b(f,d){var l="";for(var e=d;e<d+4;e++){l+=String.fromCharCode(f.getUint8(e))}if(l!="Exif"){return false}var j,m=d+6;if(f.getUint16(m)==18761){j=false}else{if(f.getUint16(m)==19789){j=true}else{return false}}if(f.getUint16(m+2,!j)!=42){return false}var c=f.getUint32(m+4,!j);if(c<8){return false}var p=m+c,h=f.getUint16(p,!j),o={},k,g;for(g=0;g<h;g++){k=p+g*12+2;if(f.getUint16(k,!j)==274){return parseInt(f.getUint16(k+8,!j),10)}}return false}a.getData=function(l){if((l instanceof Image||l instanceof HTMLImageElement)&&!l.complete){return false}var k=l.src;if(k.match(/^http/)){var d=document.createElement("canvas"),q=d.getContext("2d");d.width=l.width;d.height=l.height;q.drawImage(l,0,0);k=d.toDataURL("image/jpeg")}var m=k.replace(/^data\:([^\;]+)\;base64,/gmi,"");var j=atob(m);var n=j.length;var e=new ArrayBuffer(n);var o=new Uint8Array(e);for(var h=0;h<n;h++){o[h]=j.charCodeAt(h)}var p=new DataView(e);if((p.getUint8(0)!=255)||(p.getUint8(1)!=216)){return false}var f=2,c=e.byteLength,g;while(f<c){if(p.getUint8(f)!=255){return false}g=p.getUint8(f+1);if(g==225){return b(p,f+4)}else{f+=2+p.getUint16(f+2)}}}})();(function(){var g,i,f,c,d,b,e,l,k,j=[].slice,a=function(p,n){for(var m in n){if(h.call(n,m)){p[m]=n[m]}}function o(){this.constructor=p}o.prototype=n.prototype;p.prototype=new o();p.__super__=n.prototype;return p},h={}.hasOwnProperty;l=function(){};i=(function(){function m(){}m.prototype.addEventListener=m.prototype.on;m.prototype.on=function(o,n){this._callbacks=this._callbacks||{};if(!this._callbacks[o]){this._callbacks[o]=[]}this._callbacks[o].push(n);return this};m.prototype.emit=function(){var p,s,r,q,o,n;q=arguments[0],p=2<=arguments.length?j.call(arguments,1):[];this._callbacks=this._callbacks||{};r=this._callbacks[q];if(r){for(o=0,n=r.length;o<n;o++){s=r[o];s.apply(this,p)}}return this};m.prototype.removeListener=m.prototype.off;m.prototype.removeAllListeners=m.prototype.off;m.prototype.removeEventListener=m.prototype.off;m.prototype.off=function(s,q){var t,r,p,o,n;if(!this._callbacks||arguments.length===0){this._callbacks={};return this}r=this._callbacks[s];if(!r){return this}if(arguments.length===1){delete this._callbacks[s];return this}for(p=o=0,n=r.length;o<n;p=++o){t=r[p];if(t===q){r.splice(p,1);break}}return this};return m})();g=(function(o){var p,m;a(n,o);n.prototype.Emitter=i;n.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"];n.prototype.defaultOptions={url:null,method:"post",withCredentials:false,timeout:30000,parallelUploads:2,uploadMultiple:false,maxFilesize:256,paramName:"file",createImageThumbnails:true,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:0.8,resizeMethod:"contain",filesizeBase:1000,maxFiles:null,params:{},headers:null,clickable:true,ignoreHiddenFiles:true,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:true,autoQueue:true,addRemoveLinks:false,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:false,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){return l},accept:function(r,q){return q()},fallback:function(){var v,r,q,s,u,t;this.element.className=this.element.className+" dz-browser-not-supported";u=this.element.getElementsByTagName("div");for(r=0,q=u.length;r<q;r++){v=u[r];if(/(^| )dz-message($| )/.test(v.className)){s=v;v.className="dz-message";continue}}if(!s){s=n.createElement('<div class="dz-message"><span></span></div>');this.element.appendChild(s)}t=s.getElementsByTagName("span")[0];if(t){if(t.textContent!=null){t.textContent=this.options.dictFallbackMessage}else{if(t.innerText!=null){t.innerText=this.options.dictFallbackMessage}}}return this.element.appendChild(this.getFallbackForm())},resize:function(s,u,q,w){var v,t,r;v={srcX:0,srcY:0,srcWidth:s.width,srcHeight:s.height};t=s.width/s.height;if((u==null)&&(q==null)){u=v.srcWidth;q=v.srcHeight}else{if(u==null){u=q*t}else{if(q==null){q=u/t}}}u=Math.min(u,v.srcWidth);q=Math.min(q,v.srcHeight);r=u/q;if(v.srcWidth>u||v.srcHeight>q){if(w==="crop"){if(t>r){v.srcHeight=s.height;v.srcWidth=v.srcHeight*r}else{v.srcWidth=s.width;v.srcHeight=v.srcWidth/r}}else{if(w==="contain"){if(t>r){q=u/t}else{u=q*t}}else{throw new Error("Unknown resizeMethod '"+w+"'")}}}v.srcX=(s.width-v.srcWidth)/2;v.srcY=(s.height-v.srcHeight)/2;v.trgWidth=u;v.trgHeight=q;return v},transformFile:function(r,q){if((this.options.resizeWidth||this.options.resizeHeight)&&r.type.match(/image.*/)){return this.resizeImage(r,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,q)}else{return q(r)}},previewTemplate:'<div class="dz-preview dz-file-preview">\n <div class="dz-image"><img data-dz-thumbnail /></div>\n <div class="dz-details">\n <div class="dz-size"><span data-dz-size></span></div>\n <div class="dz-filename"><span data-dz-name></span></div>\n </div>\n <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n <div class="dz-error-message"><span data-dz-errormessage></span></div>\n <div class="dz-success-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Check</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n </g>\n </svg>\n </div>\n <div class="dz-error-mark">\n <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n <title>Error</title>\n <defs></defs>\n <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n </g>\n </g>\n </svg>\n </div>\n</div>',drop:function(q){return this.element.classList.remove("dz-drag-hover")},dragstart:l,dragend:function(q){return this.element.classList.remove("dz-drag-hover")},dragenter:function(q){return this.element.classList.add("dz-drag-hover")},dragover:function(q){return this.element.classList.add("dz-drag-hover")},dragleave:function(q){return this.element.classList.remove("dz-drag-hover")},paste:l,reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(s){var w,u,t,B,x,v,r,q,C,A,z,D,y;if(this.element===this.previewsContainer){this.element.classList.add("dz-started")}if(this.previewsContainer){s.previewElement=n.createElement(this.options.previewTemplate.trim());s.previewTemplate=s.previewElement;this.previewsContainer.appendChild(s.previewElement);q=s.previewElement.querySelectorAll("[data-dz-name]");for(w=0,B=q.length;w<B;w++){r=q[w];r.textContent=s.name}C=s.previewElement.querySelectorAll("[data-dz-size]");for(u=0,x=C.length;u<x;u++){r=C[u];r.innerHTML=this.filesize(s.size)}if(this.options.addRemoveLinks){s._removeLink=n.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>");s.previewElement.appendChild(s._removeLink)}z=(function(E){return function(F){F.preventDefault();F.stopPropagation();if(s.status===n.UPLOADING){return n.confirm(E.options.dictCancelUploadConfirmation,function(){return E.removeFile(s)})}else{if(E.options.dictRemoveFileConfirmation){return n.confirm(E.options.dictRemoveFileConfirmation,function(){return E.removeFile(s)})}else{return E.removeFile(s)}}}})(this);A=s.previewElement.querySelectorAll("[data-dz-remove]");y=[];for(t=0,v=A.length;t<v;t++){D=A[t];y.push(D.addEventListener("click",z))}return y}},removedfile:function(q){var r;if(q.previewElement){if((r=q.previewElement)!=null){r.parentNode.removeChild(q.previewElement)}}return this._updateMaxFilesReachedClass()},thumbnail:function(t,v){var s,q,u,r;if(t.previewElement){t.previewElement.classList.remove("dz-file-preview");u=t.previewElement.querySelectorAll("[data-dz-thumbnail]");for(s=0,q=u.length;s<q;s++){r=u[s];r.alt=t.name;r.src=v}return setTimeout(((function(w){return function(){return t.previewElement.classList.add("dz-image-preview")}})(this)),1)}},error:function(t,w){var r,q,v,u,s;if(t.previewElement){t.previewElement.classList.add("dz-error");if(typeof w!=="String"&&w.error){w=w.error}u=t.previewElement.querySelectorAll("[data-dz-errormessage]");s=[];for(r=0,q=u.length;r<q;r++){v=u[r];s.push(v.textContent=w)}return s}},errormultiple:l,processing:function(q){if(q.previewElement){q.previewElement.classList.add("dz-processing");if(q._removeLink){return q._removeLink.textContent=this.options.dictCancelUpload}}},processingmultiple:l,uploadprogress:function(v,s,u){var r,q,x,w,t;if(v.previewElement){w=v.previewElement.querySelectorAll("[data-dz-uploadprogress]");t=[];for(r=0,q=w.length;r<q;r++){x=w[r];if(x.nodeName==="PROGRESS"){t.push(x.value=s)}else{t.push(x.style.width=s+"%")}}return t}},totaluploadprogress:l,sending:l,sendingmultiple:l,success:function(q){if(q.previewElement){return q.previewElement.classList.add("dz-success")}},successmultiple:l,canceled:function(q){return this.emit("error",q,"Upload canceled.")},canceledmultiple:l,complete:function(q){if(q._removeLink){q._removeLink.textContent=this.options.dictRemoveFile}if(q.previewElement){return q.previewElement.classList.add("dz-complete")}},completemultiple:l,maxfilesexceeded:l,maxfilesreached:l,queuecomplete:l,addedfiles:l};p=function(){var s,t,q,r,u,v,w;v=arguments[0],u=2<=arguments.length?j.call(arguments,1):[];for(s=0,q=u.length;s<q;s++){r=u[s];for(t in r){w=r[t];v[t]=w}}return v};function n(t,r){var q,u,s;this.element=t;this.version=n.version;this.defaultOptions.previewTemplate=this.defaultOptions.previewTemplate.replace(/\n*/g,"");this.clickableElements=[];this.listeners=[];this.files=[];if(typeof this.element==="string"){this.element=document.querySelector(this.element)}if(!(this.element&&(this.element.nodeType!=null))){throw new Error("Invalid dropzone element.")}if(this.element.dropzone){throw new Error("Dropzone already attached.")}n.instances.push(this);this.element.dropzone=this;q=(s=n.optionsForElement(this.element))!=null?s:{};this.options=p({},this.defaultOptions,q,r!=null?r:{});if(this.options.forceFallback||!n.isBrowserSupported()){return this.options.fallback.call(this)}if(this.options.url==null){this.options.url=this.element.getAttribute("action")}if(!this.options.url){throw new Error("No URL provided.")}if(this.options.acceptedFiles&&this.options.acceptedMimeTypes){throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.")}if(this.options.acceptedMimeTypes){this.options.acceptedFiles=this.options.acceptedMimeTypes;delete this.options.acceptedMimeTypes}if(this.options.renameFilename!=null){this.options.renameFile=(function(v){return function(w){return v.options.renameFilename.call(v,w.name,w)}})(this)}this.options.method=this.options.method.toUpperCase();if((u=this.getExistingFallback())&&u.parentNode){u.parentNode.removeChild(u)}if(this.options.previewsContainer!==false){if(this.options.previewsContainer){this.previewsContainer=n.getElement(this.options.previewsContainer,"previewsContainer")}else{this.previewsContainer=this.element}}if(this.options.clickable){if(this.options.clickable===true){this.clickableElements=[this.element]}else{this.clickableElements=n.getElements(this.options.clickable,"clickable")}}this.init()}n.prototype.getAcceptedFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(t.accepted){s.push(t)}}return s};n.prototype.getRejectedFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(!t.accepted){s.push(t)}}return s};n.prototype.getFilesWithStatus=function(r){var u,s,q,v,t;v=this.files;t=[];for(s=0,q=v.length;s<q;s++){u=v[s];if(u.status===r){t.push(u)}}return t};n.prototype.getQueuedFiles=function(){return this.getFilesWithStatus(n.QUEUED)};n.prototype.getUploadingFiles=function(){return this.getFilesWithStatus(n.UPLOADING)};n.prototype.getAddedFiles=function(){return this.getFilesWithStatus(n.ADDED)};n.prototype.getActiveFiles=function(){var t,r,q,u,s;u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];if(t.status===n.UPLOADING||t.status===n.QUEUED){s.push(t)}}return s};n.prototype.init=function(){var s,t,q,w,u,r,v;if(this.element.tagName==="form"){this.element.setAttribute("enctype","multipart/form-data")}if(this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")){this.element.appendChild(n.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>"))}if(this.clickableElements.length){v=(function(x){return function(){if(x.hiddenFileInput){x.hiddenFileInput.parentNode.removeChild(x.hiddenFileInput)}x.hiddenFileInput=document.createElement("input");x.hiddenFileInput.setAttribute("type","file");if((x.options.maxFiles==null)||x.options.maxFiles>1){x.hiddenFileInput.setAttribute("multiple","multiple")}x.hiddenFileInput.className="dz-hidden-input";if(x.options.acceptedFiles!=null){x.hiddenFileInput.setAttribute("accept",x.options.acceptedFiles)}if(x.options.capture!=null){x.hiddenFileInput.setAttribute("capture",x.options.capture)}x.hiddenFileInput.style.visibility="hidden";x.hiddenFileInput.style.position="absolute";x.hiddenFileInput.style.top="0";x.hiddenFileInput.style.left="0";x.hiddenFileInput.style.height="0";x.hiddenFileInput.style.width="0";document.querySelector(x.options.hiddenInputContainer).appendChild(x.hiddenFileInput);return x.hiddenFileInput.addEventListener("change",function(){var A,B,z,y;B=x.hiddenFileInput.files;if(B.length){for(z=0,y=B.length;z<y;z++){A=B[z];x.addFile(A)}}x.emit("addedfiles",B);return v()})}})(this);v()}this.URL=(u=window.URL)!=null?u:window.webkitURL;r=this.events;for(t=0,q=r.length;t<q;t++){s=r[t];this.on(s,this.options[s])}this.on("uploadprogress",(function(x){return function(){return x.updateTotalUploadProgress()}})(this));this.on("removedfile",(function(x){return function(){return x.updateTotalUploadProgress()}})(this));this.on("canceled",(function(x){return function(y){return x.emit("complete",y)}})(this));this.on("complete",(function(x){return function(y){if(x.getAddedFiles().length===0&&x.getUploadingFiles().length===0&&x.getQueuedFiles().length===0){return setTimeout((function(){return x.emit("queuecomplete")}),0)}}})(this));w=function(x){x.stopPropagation();if(x.preventDefault){return x.preventDefault()}else{return x.returnValue=false}};this.listeners=[{element:this.element,events:{dragstart:(function(x){return function(y){return x.emit("dragstart",y)}})(this),dragenter:(function(x){return function(y){w(y);return x.emit("dragenter",y)}})(this),dragover:(function(x){return function(z){var y;try{y=z.dataTransfer.effectAllowed}catch(A){}z.dataTransfer.dropEffect="move"===y||"linkMove"===y?"move":"copy";w(z);return x.emit("dragover",z)}})(this),dragleave:(function(x){return function(y){return x.emit("dragleave",y)}})(this),drop:(function(x){return function(y){w(y);return x.drop(y)}})(this),dragend:(function(x){return function(y){return x.emit("dragend",y)}})(this)}}];this.clickableElements.forEach((function(x){return function(y){return x.listeners.push({element:y,events:{click:function(z){if((y!==x.element)||(z.target===x.element||n.elementInside(z.target,x.element.querySelector(".dz-message")))){x.hiddenFileInput.click()}return true}}})}})(this));this.enable();return this.options.init.call(this)};n.prototype.destroy=function(){var q;this.disable();this.removeAllFiles(true);if((q=this.hiddenFileInput)!=null?q.parentNode:void 0){this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);this.hiddenFileInput=null}delete this.element.dropzone;return n.instances.splice(n.instances.indexOf(this),1)};n.prototype.updateTotalUploadProgress=function(){var t,u,s,r,v,x,q,w;q=0;x=0;t=this.getActiveFiles();if(t.length){v=this.getActiveFiles();for(s=0,r=v.length;s<r;s++){u=v[s];q+=u.upload.bytesSent;x+=u.upload.total}w=100*q/x}else{w=100}return this.emit("totaluploadprogress",w,x,q)};n.prototype._getParamName=function(q){if(typeof this.options.paramName==="function"){return this.options.paramName(q)}else{return""+this.options.paramName+(this.options.uploadMultiple?"["+q+"]":"")}};n.prototype._renameFile=function(q){if(typeof this.options.renameFile!=="function"){return q.name}return this.options.renameFile(q)};n.prototype.getFallbackForm=function(){var r,q,t,s;if(r=this.getExistingFallback()){return r}t='<div class="dz-fallback">';if(this.options.dictFallbackText){t+="<p>"+this.options.dictFallbackText+"</p>"}t+='<input type="file" name="'+(this._getParamName(0))+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>';q=n.createElement(t);if(this.element.tagName!=="FORM"){s=n.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>');s.appendChild(q)}else{this.element.setAttribute("enctype","multipart/form-data");this.element.setAttribute("method",this.options.method)}return s!=null?s:q};n.prototype.getExistingFallback=function(){var v,t,r,q,u,s;t=function(z){var y,x,w;for(x=0,w=z.length;x<w;x++){y=z[x];if(/(^| )fallback($| )/.test(y.className)){return y}}};u=["div","form"];for(r=0,q=u.length;r<q;r++){s=u[r];if(v=t(this.element.getElementsByTagName(s))){return v}}};n.prototype.setupEventListeners=function(){var v,u,r,q,w,t,s;t=this.listeners;s=[];for(r=0,q=t.length;r<q;r++){v=t[r];s.push((function(){var x,y;x=v.events;y=[];for(u in x){w=x[u];y.push(v.element.addEventListener(u,w,false))}return y})())}return s};n.prototype.removeEventListeners=function(){var v,u,r,q,w,t,s;t=this.listeners;s=[];for(r=0,q=t.length;r<q;r++){v=t[r];s.push((function(){var x,y;x=v.events;y=[];for(u in x){w=x[u];y.push(v.element.removeEventListener(u,w,false))}return y})())}return s};n.prototype.disable=function(){var t,r,q,u,s;this.clickableElements.forEach(function(v){return v.classList.remove("dz-clickable")});this.removeEventListeners();u=this.files;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];s.push(this.cancelUpload(t))}return s};n.prototype.enable=function(){this.clickableElements.forEach(function(q){return q.classList.add("dz-clickable")});return this.setupEventListeners()};n.prototype.filesize=function(y){var r,u,t,v,s,q,x,w;s=0;q="b";if(y>0){w=["tb","gb","mb","kb","b"];for(u=t=0,v=w.length;t<v;u=++t){x=w[u];r=Math.pow(this.options.filesizeBase,4-u)/10;if(y>=r){s=y/Math.pow(this.options.filesizeBase,4-u);q=x;break}}s=Math.round(10*s)/10}return"<strong>"+s+"</strong> "+this.options.dictFileSizeUnits[q]};n.prototype._updateMaxFilesReachedClass=function(){if((this.options.maxFiles!=null)&&this.getAcceptedFiles().length>=this.options.maxFiles){if(this.getAcceptedFiles().length===this.options.maxFiles){this.emit("maxfilesreached",this.files)}return this.element.classList.add("dz-max-files-reached")}else{return this.element.classList.remove("dz-max-files-reached")}};n.prototype.drop=function(s){var r,q;if(!s.dataTransfer){return}this.emit("drop",s);r=s.dataTransfer.files;this.emit("addedfiles",r);if(r.length){q=s.dataTransfer.items;if(q&&q.length&&(q[0].webkitGetAsEntry!=null)){this._addFilesFromItems(q)}else{this.handleFiles(r)}}};n.prototype.paste=function(s){var q,r;if((s!=null?(r=s.clipboardData)!=null?r.items:void 0:void 0)==null){return}this.emit("paste",s);q=s.clipboardData.items;if(q.length){return this._addFilesFromItems(q)}};n.prototype.handleFiles=function(u){var t,r,q,s;s=[];for(r=0,q=u.length;r<q;r++){t=u[r];s.push(this.addFile(t))}return s};n.prototype._addFilesFromItems=function(r){var v,u,s,q,t;t=[];for(s=0,q=r.length;s<q;s++){u=r[s];if((u.webkitGetAsEntry!=null)&&(v=u.webkitGetAsEntry())){if(v.isFile){t.push(this.addFile(u.getAsFile()))}else{if(v.isDirectory){t.push(this._addFilesFromDirectory(v,v.name))}else{t.push(void 0)}}}else{if(u.getAsFile!=null){if((u.kind==null)||u.kind==="file"){t.push(this.addFile(u.getAsFile()))}else{t.push(void 0)}}else{t.push(void 0)}}}return t};n.prototype._addFilesFromDirectory=function(q,u){var t,s,r;t=q.createReader();s=function(v){return typeof console!=="undefined"&&console!==null?typeof console.log==="function"?console.log(v):void 0:void 0};r=(function(v){return function(){return t.readEntries(function(x){var z,y,w;if(x.length>0){for(y=0,w=x.length;y<w;y++){z=x[y];if(z.isFile){z.file(function(A){if(v.options.ignoreHiddenFiles&&A.name.substring(0,1)==="."){return}A.fullPath=u+"/"+A.name;return v.addFile(A)})}else{if(z.isDirectory){v._addFilesFromDirectory(z,u+"/"+z.name)}}}r()}return null},s)}})(this);return r()};n.prototype.accept=function(r,q){if(r.size>this.options.maxFilesize*1024*1024){return q(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(r.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize))}else{if(!n.isValidFile(r,this.options.acceptedFiles)){return q(this.options.dictInvalidFileType)}else{if((this.options.maxFiles!=null)&&this.getAcceptedFiles().length>=this.options.maxFiles){q(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles));return this.emit("maxfilesexceeded",r)}else{return this.options.accept.call(this,r,q)}}}};n.prototype.addFile=function(q){q.upload={progress:0,total:q.size,bytesSent:0,filename:this._renameFile(q)};this.files.push(q);q.status=n.ADDED;this.emit("addedfile",q);this._enqueueThumbnail(q);return this.accept(q,(function(r){return function(s){if(s){q.accepted=false;r._errorProcessing([q],s)}else{q.accepted=true;if(r.options.autoQueue){r.enqueueFile(q)}}return r._updateMaxFilesReachedClass()}})(this))};n.prototype.enqueueFiles=function(t){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];this.enqueueFile(s)}return null};n.prototype.enqueueFile=function(q){if(q.status===n.ADDED&&q.accepted===true){q.status=n.QUEUED;if(this.options.autoProcessQueue){return setTimeout(((function(r){return function(){return r.processQueue()}})(this)),0)}}else{throw new Error("This file can't be queued because it has already been processed or was rejected.")}};n.prototype._thumbnailQueue=[];n.prototype._processingThumbnail=false;n.prototype._enqueueThumbnail=function(q){if(this.options.createImageThumbnails&&q.type.match(/image.*/)&&q.size<=this.options.maxThumbnailFilesize*1024*1024){this._thumbnailQueue.push(q);return setTimeout(((function(r){return function(){return r._processThumbnailQueue()}})(this)),0)}};n.prototype._processThumbnailQueue=function(){var q;if(this._processingThumbnail||this._thumbnailQueue.length===0){return}this._processingThumbnail=true;q=this._thumbnailQueue.shift();return this.createThumbnail(q,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,true,(function(r){return function(s){r.emit("thumbnail",q,s);r._processingThumbnail=false;return r._processThumbnailQueue()}})(this))};n.prototype.removeFile=function(q){if(q.status===n.UPLOADING){this.cancelUpload(q)}this.files=k(this.files,q);this.emit("removedfile",q);if(this.files.length===0){return this.emit("reset")}};n.prototype.removeAllFiles=function(u){var s,r,q,t;if(u==null){u=false}t=this.files.slice();for(r=0,q=t.length;r<q;r++){s=t[r];if(s.status!==n.UPLOADING||u){this.removeFile(s)}}return null};n.prototype.resizeImage=function(r,s,q,t,u){return this.createThumbnail(r,s,q,t,false,(function(v){return function(z,w){var x,y;if(w===null){return u(r)}else{x=v.options.resizeMimeType;if(x==null){x=r.type}y=w.toDataURL(x,v.options.resizeQuality);if(x==="image/jpeg"||x==="image/jpg"){y=f.restore(r.dataURL,y)}return u(n.dataURItoBlob(y))}}})(this))};n.prototype.createThumbnail=function(t,u,q,v,s,w){var r;r=new FileReader;r.onload=(function(x){return function(){t.dataURL=r.result;if(t.type==="image/svg+xml"){if(w!=null){w(r.result)}return}return x.createThumbnailFromUrl(t,u,q,v,s,w)}})(this);return r.readAsDataURL(t)};n.prototype.createThumbnailFromUrl=function(u,v,q,w,t,x,s){var r;r=document.createElement("img");if(s){r.crossOrigin=s}r.onload=(function(y){return function(){var z;z=function(A){return A(1)};if((typeof EXIF!=="undefined"&&EXIF!==null)&&t){z=function(A){return A(EXIF.getData(r))}}return z(function(B){var C,I,D,G,F,E,H,A;u.width=r.width;u.height=r.height;H=y.options.resize.call(y,u,v,q,w);C=document.createElement("canvas");I=C.getContext("2d");C.width=H.trgWidth;C.height=H.trgHeight;if(B>4){C.width=H.trgHeight;C.height=H.trgWidth}switch(B){case 2:I.translate(C.width,0);I.scale(-1,1);break;case 3:I.translate(C.width,C.height);I.rotate(Math.PI);break;case 4:I.translate(0,C.height);I.scale(1,-1);break;case 5:I.rotate(0.5*Math.PI);I.scale(1,-1);break;case 6:I.rotate(0.5*Math.PI);I.translate(0,-C.height);break;case 7:I.rotate(0.5*Math.PI);I.translate(C.width,-C.height);I.scale(-1,1);break;case 8:I.rotate(-0.5*Math.PI);I.translate(-C.width,0)}e(I,r,(D=H.srcX)!=null?D:0,(G=H.srcY)!=null?G:0,H.srcWidth,H.srcHeight,(F=H.trgX)!=null?F:0,(E=H.trgY)!=null?E:0,H.trgWidth,H.trgHeight);A=C.toDataURL("image/png");if(x!=null){return x(A,C)}})}})(this);if(x!=null){r.onerror=x}return r.src=u.dataURL};n.prototype.processQueue=function(){var r,t,q,s;t=this.options.parallelUploads;q=this.getUploadingFiles().length;r=q;if(q>=t){return}s=this.getQueuedFiles();if(!(s.length>0)){return}if(this.options.uploadMultiple){return this.processFiles(s.slice(0,t-q))}else{while(r<t){if(!s.length){return}this.processFile(s.shift());r++}}};n.prototype.processFile=function(q){return this.processFiles([q])};n.prototype.processFiles=function(t){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];s.processing=true;s.status=n.UPLOADING;this.emit("processing",s)}if(this.options.uploadMultiple){this.emit("processingmultiple",t)}return this.uploadFiles(t)};n.prototype._getFilesWithXhr=function(s){var q,r;return r=(function(){var u,t,w,v;w=this.files;v=[];for(u=0,t=w.length;u<t;u++){q=w[u];if(q.xhr===s){v.push(q)}}return v}).call(this)};n.prototype.cancelUpload=function(w){var r,v,u,s,q,t,x;if(w.status===n.UPLOADING){v=this._getFilesWithXhr(w.xhr);for(u=0,q=v.length;u<q;u++){r=v[u];r.status=n.CANCELED}w.xhr.abort();for(s=0,t=v.length;s<t;s++){r=v[s];this.emit("canceled",r)}if(this.options.uploadMultiple){this.emit("canceledmultiple",v)}}else{if((x=w.status)===n.ADDED||x===n.QUEUED){w.status=n.CANCELED;this.emit("canceled",w);if(this.options.uploadMultiple){this.emit("canceledmultiple",[w])}}}if(this.options.autoProcessQueue){return this.processQueue()}};m=function(){var q,r;r=arguments[0],q=2<=arguments.length?j.call(arguments,1):[];if(typeof r==="function"){return r.apply(this,q)}return r};n.prototype.uploadFile=function(q){return this.uploadFiles([q])};n.prototype.uploadFiles=function(L){var K,O,I,r,aa,M,v,R,Y,q,J,u,X,W,F,V,G,z,y,x,U,Z,S,N,T,P,E,D,C,B,A,s,H,w,t,Q,ab;ab=new XMLHttpRequest();for(X=0,G=L.length;X<G;X++){I=L[X];I.xhr=ab}Z=m(this.options.method,L);t=m(this.options.url,L);ab.open(Z,t,true);ab.timeout=m(this.options.timeout,L);ab.withCredentials=!!this.options.withCredentials;s=null;aa=(function(ac){return function(){var ad,ae,af;af=[];for(ad=0,ae=L.length;ad<ae;ad++){I=L[ad];af.push(ac._errorProcessing(L,s||ac.options.dictResponseError.replace("{{statusCode}}",ab.status),ab))}return af}})(this);w=(function(ac){return function(am){var ae,ai,ag,ak,aj,ah,af,ad,al;if(am!=null){ad=100*am.loaded/am.total;for(ai=0,ak=L.length;ai<ak;ai++){I=L[ai];I.upload.progress=ad;I.upload.total=am.total;I.upload.bytesSent=am.loaded}}else{ae=true;ad=100;for(ag=0,aj=L.length;ag<aj;ag++){I=L[ag];if(!(I.upload.progress===100&&I.upload.bytesSent===I.upload.total)){ae=false}I.upload.progress=ad;I.upload.bytesSent=I.upload.total}if(ae){return}}al=[];for(af=0,ah=L.length;af<ah;af++){I=L[af];al.push(ac.emit("uploadprogress",I,ad,I.upload.bytesSent))}return al}})(this);ab.onload=(function(ac){return function(ae){var af,ad;if(L[0].status===n.CANCELED){return}if(ab.readyState!==4){return}if(ab.responseType!=="arraybuffer"&&ab.responseType!=="blob"){s=ab.responseText;if(ab.getResponseHeader("content-type")&&~ab.getResponseHeader("content-type").indexOf("application/json")){try{s=JSON.parse(s)}catch(af){ae=af;s="Invalid JSON response from server."}}}w();if(!((200<=(ad=ab.status)&&ad<300))){return aa()}else{return ac._finished(L,s,ae)}}})(this);ab.onerror=(function(ac){return function(){if(L[0].status===n.CANCELED){return}return aa()}})(this);T=(P=ab.upload)!=null?P:ab;T.onprogress=w;R={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};if(this.options.headers){p(R,this.options.headers)}for(M in R){v=R[M];if(v){ab.setRequestHeader(M,v)}}r=new FormData();if(this.options.params){E=this.options.params;for(F in E){Q=E[F];r.append(F,Q)}}for(W=0,z=L.length;W<z;W++){I=L[W];this.emit("sending",I,ab,r)}if(this.options.uploadMultiple){this.emit("sendingmultiple",L,ab,r)}if(this.element.tagName==="FORM"){D=this.element.querySelectorAll("input, textarea, select, button");for(V=0,y=D.length;V<y;V++){q=D[V];J=q.getAttribute("name");u=q.getAttribute("type");if(q.tagName==="SELECT"&&q.hasAttribute("multiple")){C=q.options;for(U=0,x=C.length;U<x;U++){N=C[U];if(N.selected){r.append(J,N.value)}}}else{if(!u||((B=u.toLowerCase())!=="checkbox"&&B!=="radio")||q.checked){r.append(J,q.value)}}}}K=0;H=[];for(Y=S=0,A=L.length-1;0<=A?S<=A:S>=A;Y=0<=A?++S:--S){O=(function(ac){return function(ad,ae,af){return function(ag){r.append(ae,ag,af);if(++K===L.length){return ac.submitRequest(ab,r,L)}}}})(this);H.push(this.options.transformFile.call(this,L[Y],O(L[Y],this._getParamName(Y),L[Y].upload.filename)))}return H};n.prototype.submitRequest=function(s,r,q){return s.send(r)};n.prototype._finished=function(t,u,v){var s,r,q;for(r=0,q=t.length;r<q;r++){s=t[r];s.status=n.SUCCESS;this.emit("success",s,u,v);this.emit("complete",s)}if(this.options.uploadMultiple){this.emit("successmultiple",t,u,v);this.emit("completemultiple",t)}if(this.options.autoProcessQueue){return this.processQueue()}};n.prototype._errorProcessing=function(u,t,v){var s,r,q;for(r=0,q=u.length;r<q;r++){s=u[r];s.status=n.ERROR;this.emit("error",s,t,v);this.emit("complete",s)}if(this.options.uploadMultiple){this.emit("errormultiple",u,t,v);this.emit("completemultiple",u)}if(this.options.autoProcessQueue){return this.processQueue()}};return n})(i);g.version="5.1.1";g.options={};g.optionsForElement=function(m){if(m.getAttribute("id")){return g.options[c(m.getAttribute("id"))]}else{return void 0}};g.instances=[];g.forElement=function(m){if(typeof m==="string"){m=document.querySelector(m)}if((m!=null?m.dropzone:void 0)==null){throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.")}return m.dropzone};g.autoDiscover=true;g.discover=function(){var r,n,q,o,m,p;if(document.querySelectorAll){q=document.querySelectorAll(".dropzone")}else{q=[];r=function(w){var v,t,s,u;u=[];for(t=0,s=w.length;t<s;t++){v=w[t];if(/(^| )dropzone($| )/.test(v.className)){u.push(q.push(v))}else{u.push(void 0)}}return u};r(document.getElementsByTagName("div"));r(document.getElementsByTagName("form"))}p=[];for(o=0,m=q.length;o<m;o++){n=q[o];if(g.optionsForElement(n)!==false){p.push(new g(n))}else{p.push(void 0)}}return p};g.blacklistedBrowsers=[/opera.*(Windows Phone|Macintosh).*version\/12/i];g.isBrowserSupported=function(){var o,n,m,q,p;o=true;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector){if(!("classList" in document.createElement("a"))){o=false}else{q=g.blacklistedBrowsers;for(n=0,m=q.length;n<m;n++){p=q[n];if(p.test(navigator.userAgent)){o=false;continue}}}}else{o=false}return o};g.dataURItoBlob=function(n){var s,t,q,o,p,m,r;t=atob(n.split(",")[1]);m=n.split(",")[0].split(":")[1].split(";")[0];s=new ArrayBuffer(t.length);o=new Uint8Array(s);for(q=p=0,r=t.length;0<=r?p<=r:p>=r;q=0<=r?++p:--p){o[q]=t.charCodeAt(q)}return new Blob([s],{type:m})};k=function(r,n){var q,o,m,p;p=[];for(o=0,m=r.length;o<m;o++){q=r[o];if(q!==n){p.push(q)}}return p};c=function(m){return m.replace(/[\-_](\w)/g,function(n){return n.charAt(1).toUpperCase()})};g.createElement=function(m){var n;n=document.createElement("div");n.innerHTML=m;return n.childNodes[0]};g.elementInside=function(n,m){if(n===m){return true}while(n=n.parentNode){if(n===m){return true}}return false};g.getElement=function(o,m){var n;if(typeof o==="string"){n=document.querySelector(o)}else{if(o.nodeType!=null){n=o}}if(n==null){throw new Error("Invalid `"+m+"` option provided. Please provide a CSS selector or a plain HTML element.")}return n};g.getElements=function(s,n){var v,o,m,w,t,q,u,r,p;if(s instanceof Array){m=[];try{for(t=0,u=s.length;t<u;t++){o=s[t];m.push(this.getElement(o,n))}}catch(w){v=w;m=null}}else{if(typeof s==="string"){m=[];p=document.querySelectorAll(s);for(q=0,r=p.length;q<r;q++){o=p[q];m.push(o)}}else{if(s.nodeType!=null){m=[s]}}}if(!((m!=null)&&m.length)){throw new Error("Invalid `"+n+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.")}return m};g.confirm=function(m,o,n){if(window.confirm(m)){return o()}else{if(n!=null){return n()}}};g.isValidFile=function(q,n){var o,p,m,s,r;if(!n){return true}n=n.split(",");s=q.type;o=s.replace(/\/.*$/,"");for(p=0,m=n.length;p<m;p++){r=n[p];r=r.trim();if(r.charAt(0)==="."){if(q.name.toLowerCase().indexOf(r.toLowerCase(),q.name.length-r.length)!==-1){return true}}else{if(/\/\*$/.test(r)){if(o===r.replace(/\/.*$/,"")){return true}}else{if(s===r){return true}}}}return false};if(typeof jQuery!=="undefined"&&jQuery!==null){jQuery.fn.dropzone=function(m){return this.each(function(){return new g(this,m)})}}if(typeof module!=="undefined"&&module!==null){module.exports=g}else{window.Dropzone=g}g.ADDED="added";g.QUEUED="queued";g.ACCEPTED=g.QUEUED;g.UPLOADING="uploading";g.PROCESSING=g.UPLOADING;g.CANCELED="canceled";g.ERROR="error";g.SUCCESS="success";b=function(q){var o,m,w,p,r,v,n,u,s,t;n=q.naturalWidth;v=q.naturalHeight;m=document.createElement("canvas");m.width=1;m.height=v;w=m.getContext("2d");w.drawImage(q,0,0);p=w.getImageData(1,0,1,v).data;t=0;r=v;u=v;while(u>t){o=p[(u-1)*4+3];if(o===0){r=u}else{t=u}u=(r+t)>>1}s=u/v;if(s===0){return 1}else{return s}};e=function(u,n,s,r,t,o,w,v,m,q){var p;p=b(n);return u.drawImage(n,s,r,t,o,w,v,m,q/p)};f=(function(){function m(){}m.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";m.encode64=function(p){var w,u,s,v,t,r,q,o,n;n="";w=void 0;u=void 0;s="";v=void 0;t=void 0;r=void 0;q="";o=0;while(true){w=p[o++];u=p[o++];s=p[o++];v=w>>2;t=(w&3)<<4|u>>4;r=(u&15)<<2|s>>6;q=s&63;if(isNaN(u)){r=q=64}else{if(isNaN(s)){q=64}}n=n+this.KEY_STR.charAt(v)+this.KEY_STR.charAt(t)+this.KEY_STR.charAt(r)+this.KEY_STR.charAt(q);w=u=s="";v=t=r=q="";if(!(o<p.length)){break}}return n};m.restore=function(n,r){var q,p,o;if(!n.match("data:image/jpeg;base64,")){return r}p=this.decode64(n.replace("data:image/jpeg;base64,",""));o=this.slice2Segments(p);q=this.exifManipulation(r,o);return"data:image/jpeg;base64,"+this.encode64(q)};m.exifManipulation=function(r,p){var q,n,o;n=this.getExifArray(p);o=this.insertExif(r,n);q=new Uint8Array(o);return q};m.getExifArray=function(p){var o,n;o=void 0;n=0;while(n<p.length){o=p[n];if(o[0]===255&o[1]===225){return o}n++}return[]};m.insertExif=function(o,v){var u,w,q,n,t,r;n=o.replace("data:image/jpeg;base64,","");q=this.decode64(n);for(var s=0;s<q.length;s++){if(q[s]===255&&q[s+1]===225){var p=q[s+2]*256+q[s+3]+2;q.splice(s,p)}}r=q.indexOf(255,3);t=q.slice(0,r);w=q.slice(r);u=t;u=u.concat(v);u=u.concat(w);return u};m.slice2Segments=function(o){var r,q,s,n,p;q=0;p=[];while(true){if(o[q]===255&o[q+1]===218){break}if(o[q]===255&o[q+1]===216){q+=2}else{s=o[q+2]*256+o[q+3];r=q+s+2;n=o.slice(q,r);p.push(n);q=r}if(q>o.length){break}}return p};m.decode64=function(r){var n,o,y,w,u,x,v,t,s,q,p;p="";y=void 0;w=void 0;u="";x=void 0;v=void 0;t=void 0;s="";q=0;o=[];n=/[^A-Za-z0-9\+\/\=]/g;if(n.exec(r)){console.warning("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding.")}r=r.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(true){x=this.KEY_STR.indexOf(r.charAt(q++));v=this.KEY_STR.indexOf(r.charAt(q++));t=this.KEY_STR.indexOf(r.charAt(q++));s=this.KEY_STR.indexOf(r.charAt(q++));y=x<<2|v>>4;w=(v&15)<<4|t>>2;u=(t&3)<<6|s;o.push(y);if(t!==64){o.push(w)}if(s!==64){o.push(u)}y=w=u="";x=v=t=s="";if(!(q<r.length)){break}}return o};return m})();d=function(p,t){var x,u,o,w,q,n,v,s,r;o=false;r=true;u=p.document;s=u.documentElement;x=(u.addEventListener?"addEventListener":"attachEvent");v=(u.addEventListener?"removeEventListener":"detachEvent");n=(u.addEventListener?"":"on");w=function(y){if(y.type==="readystatechange"&&u.readyState!=="complete"){return}(y.type==="load"?p:u)[v](n+y.type,w,false);if(!o&&(o=true)){return t.call(p,y.type||y)}};q=function(){var y,z;try{s.doScroll("left")}catch(z){y=z;setTimeout(q,50);return}return w("poll")};if(u.readyState!=="complete"){if(u.createEventObject&&s.doScroll){try{r=!p.frameElement}catch(m){}if(r){q()}}u[x](n+"DOMContentLoaded",w,false);u[x](n+"readystatechange",w,false);return p[x](n+"load",w,false)}};g._autoDiscoverFunction=function(){if(g.autoDiscover){return g.discover()}};d(window,g._autoDiscoverFunction)}).call(this); \ No newline at end of file