{"version":3,"sources":["webpack:///./node_modules/core-js/internals/native-url.js","webpack:///./src/views/components/Spinner.vue?899f","webpack:///src/views/components/Spinner.vue","webpack:///./src/views/components/Spinner.vue?7ab9","webpack:///./src/views/components/Spinner.vue?89db","webpack:///./node_modules/core-js/modules/web.url.js","webpack:///./node_modules/core-js/modules/web.url.constructor.js","webpack:///./src/views/components/Spinner.vue?d9d7","webpack:///./node_modules/core-js/modules/web.url-search-params.constructor.js","webpack:///./node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///./node_modules/core-js/modules/web.url-search-params.js","webpack:///./node_modules/core-js/modules/es.array.join.js","webpack:///./node_modules/cropperjs/dist/cropper.js"],"names":["fails","wellKnownSymbol","IS_PURE","ITERATOR","module","exports","url","URL","searchParams","result","pathname","forEach","value","key","toJSON","sort","href","get","String","URLSearchParams","username","host","hash","undefined","render","_vm","this","_h","$createElement","_c","_self","class","fv_atril_video","staticRenderFns","name","props","component","EOF","$","DESCRIPTORS","USE_NATIVE_URL","global","bind","uncurryThis","defineBuiltIn","defineBuiltInAccessor","anInstance","hasOwn","assign","arrayFrom","arraySlice","codeAt","toASCII","$toString","setToStringTag","validateArgumentsLength","URLSearchParamsModule","InternalStateModule","setInternalState","set","getInternalURLState","getterFor","getInternalSearchParamsState","getState","NativeURL","TypeError","parseInt","floor","Math","pow","charAt","exec","join","numberToString","toString","pop","push","replace","shift","split","stringSlice","slice","toLowerCase","unshift","INVALID_AUTHORITY","INVALID_SCHEME","INVALID_HOST","INVALID_PORT","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseIPv4","input","partsLength","numbers","index","part","radix","number","ipv4","parts","length","parseIPv6","numbersSeen","ipv4Piece","swaps","swap","address","pieceIndex","compress","pointer","chr","findLongestZeroSequence","ipv6","maxIndex","maxLength","currStart","currLength","serializeHost","ignore0","C0ControlPercentEncodeSet","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","percentEncode","code","encodeURIComponent","specialSchemes","ftp","file","http","https","ws","wss","isWindowsDriveLetter","string","normalized","second","startsWithWindowsDriveLetter","third","isSingleDot","segment","isDoubleDot","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","URLState","isBase","base","baseState","failure","urlString","parse","bindURL","prototype","type","stateOverride","codePoints","bufferCodePoints","state","buffer","seenAt","seenBracket","seenPasswordToken","scheme","password","port","path","query","fragment","cannotBeABaseURL","isSpecial","includesCredentials","i","codePoint","encodedCodePoints","parseHost","shortenPath","cannotHaveUsernamePasswordPort","pathSize","serialize","output","setHref","update","getOrigin","URLConstructor","origin","error","getProtocol","setProtocol","protocol","getUsername","setUsername","getPassword","setPassword","getHost","setHost","getHostname","setHostname","hostname","getPort","setPort","getPathname","setPathname","getSearch","setSearch","search","getSearchParams","facade","getHash","setHash","that","URLPrototype","arguments","accessorDescriptor","getter","setter","configurable","enumerable","nativeCreateObjectURL","createObjectURL","nativeRevokeObjectURL","revokeObjectURL","constructor","forced","sham","call","defineBuiltIns","createIteratorConstructor","isCallable","classof","anObject","isObject","create","createPropertyDescriptor","getIterator","getIteratorMethod","arraySort","URL_SEARCH_PARAMS","URL_SEARCH_PARAMS_ITERATOR","getInternalParamsState","getInternalIteratorState","getOwnPropertyDescriptor","Object","safeGetBuiltIn","descriptor","nativeFetch","NativeRequest","Headers","RequestPrototype","HeadersPrototype","RegExp","decodeURIComponent","splice","plus","sequences","Array","percentSequence","bytes","percentDecode","sequence","deserialize","it","find","replacements","replacer","match","URLSearchParamsIterator","params","kind","iterator","entries","step","next","entry","done","URLSearchParamsState","init","parseObject","parseQuery","object","entryIterator","entryNext","first","iteratorMethod","attribute","attributes","updateURL","URLSearchParamsConstructor","URLSearchParamsPrototype","append","getAll","has","found","val","a","b","callback","boundFunction","keys","values","headersHas","headersSet","wrapRequestOptions","headers","body","noTargetGet","fetch","RequestConstructor","Request","maxInt","tMin","tMax","skew","damp","initialBias","initialN","delimiter","regexNonASCII","regexSeparators","OVERFLOW_ERROR","baseMinusTMin","RangeError","fromCharCode","charCodeAt","ucs2decode","counter","extra","digitToBasic","digit","adapt","delta","numPoints","firstTime","k","encode","currentValue","inputLength","n","bias","basicLength","handledCPCount","m","handledCPCountPlusOne","q","t","qMinusT","baseMinusT","label","encoded","labels","IndexedObject","toIndexedObject","arrayMethodIsStrict","un$Join","ES3_STRINGS","STRICT_METHOD","target","proto","separator","factory","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","apply","_objectSpread2","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","_classCallCheck","instance","Constructor","_defineProperties","writable","_createClass","protoProps","staticProps","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","isArray","_arrayLikeToArray","iter","from","o","minLen","test","len","arr2","IS_BROWSER","window","document","WINDOW","IS_TOUCH_DEVICE","documentElement","HAS_POINTER_EVENT","NAMESPACE","ACTION_ALL","ACTION_CROP","ACTION_MOVE","ACTION_ZOOM","ACTION_EAST","ACTION_WEST","ACTION_SOUTH","ACTION_NORTH","ACTION_NORTH_EAST","ACTION_NORTH_WEST","ACTION_SOUTH_EAST","ACTION_SOUTH_WEST","CLASS_CROP","concat","CLASS_DISABLED","CLASS_HIDDEN","CLASS_HIDE","CLASS_INVISIBLE","CLASS_MODAL","CLASS_MOVE","DATA_ACTION","DATA_PREVIEW","DRAG_MODE_CROP","DRAG_MODE_MOVE","DRAG_MODE_NONE","EVENT_CROP","EVENT_CROP_END","EVENT_CROP_MOVE","EVENT_CROP_START","EVENT_DBLCLICK","EVENT_TOUCH_START","EVENT_TOUCH_MOVE","EVENT_TOUCH_END","EVENT_POINTER_DOWN","EVENT_POINTER_MOVE","EVENT_POINTER_UP","EVENT_READY","EVENT_RESIZE","EVENT_WHEEL","EVENT_ZOOM","MIME_TYPE_JPEG","REGEXP_ACTIONS","REGEXP_DATA_URL","REGEXP_DATA_URL_JPEG","REGEXP_TAG_NAME","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","DEFAULTS","viewMode","dragMode","initialAspectRatio","NaN","aspectRatio","data","preview","responsive","restore","checkCrossOrigin","checkOrientation","modal","guides","center","highlight","background","autoCrop","autoCropArea","movable","rotatable","scalable","zoomable","zoomOnTouch","zoomOnWheel","wheelZoomRatio","cropBoxMovable","cropBoxResizable","toggleDragModeOnDblclick","minCanvasWidth","minCanvasHeight","minCropBoxWidth","minCropBoxHeight","minContainerWidth","minContainerHeight","ready","cropstart","cropmove","cropend","crop","zoom","TEMPLATE","isNaN","Number","isNumber","isPositiveNumber","Infinity","isUndefined","hasOwnProperty","isPlainObject","_constructor","isFunction","toArray","_len","args","_key","arg","REGEXP_DECIMALS","normalizeDecimalNumber","times","round","REGEXP_SUFFIX","setStyle","element","styles","style","property","hasClass","classList","contains","className","indexOf","addClass","elem","add","trim","removeClass","remove","toggleClass","added","REGEXP_CAMEL_CASE","toParamCase","getData","dataset","getAttribute","setData","setAttribute","removeData","removeAttribute","REGEXP_SPACES","onceSupported","supported","once","listener","options","addEventListener","removeEventListener","removeListener","handler","event","listeners","addListener","_handler","_element$listeners","_len2","_key2","dispatchEvent","Event","CustomEvent","detail","bubbles","cancelable","createEvent","initCustomEvent","getOffset","box","getBoundingClientRect","left","pageXOffset","clientLeft","top","pageYOffset","clientTop","location","REGEXP_ORIGINS","isCrossOriginURL","addTimestamp","timestamp","Date","getTime","getTransforms","_ref","rotate","scaleX","scaleY","translateX","translateY","transform","WebkitTransform","msTransform","getMaxZoomRatio","pointers","pointers2","maxRatio","pointerId","pointer2","x1","abs","startX","y1","startY","x2","endX","y2","endY","z1","sqrt","z2","ratio","getPointer","_ref2","endOnly","pageX","pageY","end","getPointersCenter","count","_ref3","getAdjustedSizes","_ref4","height","width","isValidWidth","isValidHeight","adjustedWidth","getRotatedSizes","_ref5","degree","arc","PI","sinArc","sin","cosArc","cos","newWidth","newHeight","getSourceCanvas","image","_ref6","_ref7","_ref8","imageAspectRatio","imageNaturalWidth","naturalWidth","imageNaturalHeight","naturalHeight","_ref6$rotate","_ref6$scaleX","_ref6$scaleY","_ref8$fillColor","fillColor","_ref8$imageSmoothingE","imageSmoothingEnabled","_ref8$imageSmoothingQ","imageSmoothingQuality","_ref8$maxWidth","maxWidth","_ref8$maxHeight","maxHeight","_ref8$minWidth","minWidth","_ref8$minHeight","minHeight","canvas","createElement","context","getContext","maxSizes","minSizes","min","max","destMaxSizes","destMinSizes","destWidth","destHeight","fillStyle","fillRect","save","translate","scale","drawImage","map","param","getStringFromCharCode","dataView","start","str","getUint8","REGEXP_DATA_URL_HEAD","dataURLToArrayBuffer","dataURL","base64","binary","atob","arrayBuffer","ArrayBuffer","uint8","Uint8Array","arrayBufferToDataURL","mimeType","chunks","chunkSize","subarray","btoa","resetAndGetOrientation","orientation","DataView","littleEndian","app1Start","ifdStart","byteLength","offset","exifIDCode","tiffOffset","endianness","getUint16","firstIFDOffset","getUint32","_offset","_length","setUint16","parseOrientation","initContainer","initCanvas","initCropBox","renderCanvas","cropped","renderCropBox","container","cropper","containerData","offsetWidth","offsetHeight","imageData","rotated","canvasWidth","canvasHeight","canvasData","limited","limitCanvas","oldLeft","oldTop","initialCanvasData","sizeLimited","positionLimited","cropBoxData","_getAdjustedSizes","newCanvasLeft","newCanvasTop","minLeft","minTop","maxLeft","maxTop","changed","transformed","_getRotatedSizes","renderImage","limitCropBox","initialCropBoxData","maxCropBoxWidth","maxCropBoxHeight","face","cropBox","disabled","initPreview","crossOrigin","crossOriginUrl","alt","src","viewBox","appendChild","viewBoxImage","previews","ownerDocument","querySelectorAll","querySelector","el","img","html","innerHTML","cssText","resetPreview","cropBoxWidth","cropBoxHeight","originalWidth","originalHeight","getElementsByTagName","events","onCropStart","cropStart","onWheel","wheel","passive","capture","onDblclick","dblclick","onCropMove","cropMove","onCropEnd","cropEnd","onResize","resize","unbind","handlers","ratioX","ratioY","getCanvasData","getCropBoxData","setCanvasData","setCropBoxData","setDragMode","dragBox","_this","preventDefault","wheeling","setTimeout","deltaY","wheelDelta","buttons","button","pointerType","ctrlKey","action","changedTouches","touch","identifier","originalEvent","cropping","change","right","bottom","renderable","shiftKey","range","x","y","check","side","move","p","methods","reset","initialImageData","clear","hasSameSize","isImg","replaced","uncreate","load","enable","disable","destroy","originalUrl","offsetX","offsetY","_this$canvasData","moveTo","_originalEvent","zoomTo","pivot","oldRatio","rotateTo","_scaleX","_scaleY","rounded","getContainerData","getImageData","sized","widthChanged","heightChanged","getCroppedCanvas","HTMLCanvasElement","_this$getData","initialX","initialY","initialWidth","initialHeight","_options$imageSmoothi","srcWidth","srcHeight","dstX","dstY","dstWidth","dstHeight","sourceWidth","sourceHeight","srcX","srcY","setAspectRatio","mode","croppable","AnotherCropper","Cropper","tagName","Error","reloading","sizing","toDataURL","read","clone","xhr","XMLHttpRequest","onabort","onerror","ontimeout","onprogress","getResponseHeader","abort","onload","response","onloadend","open","responseType","withCredentials","send","_parseOrientation","stop","parentNode","insertBefore","nextSibling","_this2","isIOSWebKit","navigator","userAgent","build","sizingImage","removeChild","template","getElementsByClassName","unbuild"],"mappings":"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","file":"js/chunk-11a079c2.57a60406.js","sourcesContent":["var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line unicorn/relative-url-style -- required for testing\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{class:_vm.fv_atril_video ? 'lds-dual-ring-fv' : 'lds-dual-ring'})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Spinner.vue?vue&type=template&id=60c7c7fa&scoped=true&lang=pug&\"\nimport script from \"./Spinner.vue?vue&type=script&lang=js&\"\nexport * from \"./Spinner.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Spinner.vue?vue&type=style&index=0&id=60c7c7fa&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60c7c7fa\",\n null\n \n)\n\nexport default component.exports","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url.constructor');\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has-own-property');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar arraySlice = require('../internals/array-slice-simple');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar $toString = require('../internals/to-string');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar URLSearchParamsModule = require('../modules/web.url-search-params.constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\n\nvar NativeURL = global.URL;\nvar TypeError = global.TypeError;\nvar parseInt = global.parseInt;\nvar floor = Math.floor;\nvar pow = Math.pow;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(/./.exec);\nvar join = uncurryThis([].join);\nvar numberToString = uncurryThis(1.0.toString);\nvar pop = uncurryThis([].pop);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\nvar toLowerCase = uncurryThis(''.toLowerCase);\nvar unshift = uncurryThis([].unshift);\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[a-z]/i;\n// eslint-disable-next-line regexp/no-obscure-range -- safe\nvar ALPHANUMERIC = /[\\d+-.a-z]/i;\nvar DIGIT = /\\d/;\nvar HEX_START = /^0x/i;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\da-f]+$/i;\n/* eslint-disable regexp/no-control-character -- safe */\nvar FORBIDDEN_HOST_CODE_POINT = /[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/;\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/;\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u0020]+|[\\u0000-\\u0020]+$/g;\nvar TAB_AND_NEW_LINE = /[\\t\\n\\r]/g;\n/* eslint-enable regexp/no-control-character -- safe */\nvar EOF;\n\n// https://url.spec.whatwg.org/#ipv4-number-parser\nvar parseIPv4 = function (input) {\n var parts = split(input, '.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.length--;\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && charAt(part, 0) == '0') {\n radix = exec(HEX_START, part) ? 16 : 8;\n part = stringSlice(part, radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\n number = parseInt(part, radix);\n }\n push(numbers, number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = pop(numbers);\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// https://url.spec.whatwg.org/#concept-ipv6-parser\n// eslint-disable-next-line max-statements -- TODO\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var chr = function () {\n return charAt(input, pointer);\n };\n\n if (chr() == ':') {\n if (charAt(input, 1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (chr()) {\n if (pieceIndex == 8) return;\n if (chr() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && exec(HEX, chr())) {\n value = value * 16 + parseInt(chr(), 16);\n pointer++;\n length++;\n }\n if (chr() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (chr()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (chr() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!exec(DIGIT, chr())) return;\n while (exec(DIGIT, chr())) {\n number = parseInt(chr(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (chr() == ':') {\n pointer++;\n if (!chr()) return;\n } else if (chr()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\n// https://url.spec.whatwg.org/#host-serializing\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n unshift(result, host % 256);\n host = floor(host / 256);\n } return join(result, '.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += numberToString(host[index], 16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (chr, set) {\n var code = codeAt(chr, 0);\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\n};\n\n// https://url.spec.whatwg.org/#special-scheme\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\n// https://url.spec.whatwg.org/#windows-drive-letter\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\n};\n\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\n string.length == 2 ||\n ((third = charAt(string, 2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\n// https://url.spec.whatwg.org/#single-dot-path-segment\nvar isSingleDot = function (segment) {\n return segment === '.' || toLowerCase(segment) === '%2e';\n};\n\n// https://url.spec.whatwg.org/#double-dot-path-segment\nvar isDoubleDot = function (segment) {\n segment = toLowerCase(segment);\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\nvar URLState = function (url, isBase, base) {\n var urlString = $toString(url);\n var baseState, failure, searchParams;\n if (isBase) {\n failure = this.parse(urlString);\n if (failure) throw TypeError(failure);\n this.searchParams = null;\n } else {\n if (base !== undefined) baseState = new URLState(base, true);\n failure = this.parse(urlString, null, baseState);\n if (failure) throw TypeError(failure);\n searchParams = getInternalSearchParamsState(new URLSearchParams());\n searchParams.bindURL(this);\n this.searchParams = searchParams;\n }\n};\n\nURLState.prototype = {\n type: 'URL',\n // https://url.spec.whatwg.org/#url-parsing\n // eslint-disable-next-line max-statements -- TODO\n parse: function (input, stateOverride, base) {\n var url = this;\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, chr, bufferCodePoints, failure;\n\n input = $toString(input);\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = replace(input, LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = replace(input, TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n chr = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (chr && exec(ALPHA, chr)) {\n buffer += toLowerCase(chr);\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\n buffer += toLowerCase(chr);\n } else if (chr == ':') {\n if (stateOverride && (\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (url.isSpecial()) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n push(url.path, '');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && chr == '#') {\n url.scheme = base.scheme;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (chr == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (chr == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (chr == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '/' || (chr == '\\\\' && url.isSpecial())) {\n state = RELATIVE_SLASH;\n } else if (chr == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = arraySlice(base.path);\n url.path.length--;\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (url.isSpecial() && (chr == '/' || chr == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (chr == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (chr != '/' && chr != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (chr == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += chr;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (chr == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial())\n ) {\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\n failure = url.parseHost(buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (chr == '[') seenBracket = true;\n else if (chr == ']') seenBracket = false;\n buffer += chr;\n } break;\n\n case PORT:\n if (exec(DIGIT, chr)) {\n buffer += chr;\n } else if (\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\n (chr == '\\\\' && url.isSpecial()) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (chr == '/' || chr == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (chr == EOF) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n } else if (chr == '?') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n url.host = base.host;\n url.path = arraySlice(base.path);\n url.shortenPath();\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (chr == '/' || chr == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (chr == EOF || chr == '/' || chr == '\\\\' || chr == '?' || chr == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = url.parseHost(buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += chr;\n break;\n\n case PATH_START:\n if (url.isSpecial()) {\n state = PATH;\n if (chr != '/' && chr != '\\\\') continue;\n } else if (!stateOverride && chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n state = PATH;\n if (chr != '/') continue;\n } break;\n\n case PATH:\n if (\n chr == EOF || chr == '/' ||\n (chr == '\\\\' && url.isSpecial()) ||\n (!stateOverride && (chr == '?' || chr == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n url.shortenPath();\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else if (isSingleDot(buffer)) {\n if (chr != '/' && !(chr == '\\\\' && url.isSpecial())) {\n push(url.path, '');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\n }\n push(url.path, buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n shift(url.path);\n }\n }\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(chr, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (chr == '?') {\n url.query = '';\n state = QUERY;\n } else if (chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && chr == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (chr != EOF) {\n if (chr == \"'\" && url.isSpecial()) url.query += '%27';\n else if (chr == '#') url.query += '%23';\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n },\n // https://url.spec.whatwg.org/#host-parsing\n parseHost: function (input) {\n var result, codePoints, index;\n if (charAt(input, 0) == '[') {\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(stringSlice(input, 1, -1));\n if (!result) return INVALID_HOST;\n this.host = result;\n // opaque host\n } else if (!this.isSpecial()) {\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n this.host = result;\n } else {\n input = toASCII(input);\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n this.host = result;\n }\n },\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\n cannotHaveUsernamePasswordPort: function () {\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\n },\n // https://url.spec.whatwg.org/#include-credentials\n includesCredentials: function () {\n return this.username != '' || this.password != '';\n },\n // https://url.spec.whatwg.org/#is-special\n isSpecial: function () {\n return hasOwn(specialSchemes, this.scheme);\n },\n // https://url.spec.whatwg.org/#shorten-a-urls-path\n shortenPath: function () {\n var path = this.path;\n var pathSize = path.length;\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.length--;\n }\n },\n // https://url.spec.whatwg.org/#concept-url-serializer\n serialize: function () {\n var url = this;\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (url.includesCredentials()) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n },\n // https://url.spec.whatwg.org/#dom-url-href\n setHref: function (href) {\n var failure = this.parse(href);\n if (failure) throw TypeError(failure);\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-origin\n getOrigin: function () {\n var scheme = this.scheme;\n var port = this.port;\n if (scheme == 'blob') try {\n return new URLConstructor(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !this.isSpecial()) return 'null';\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\n },\n // https://url.spec.whatwg.org/#dom-url-protocol\n getProtocol: function () {\n return this.scheme + ':';\n },\n setProtocol: function (protocol) {\n this.parse($toString(protocol) + ':', SCHEME_START);\n },\n // https://url.spec.whatwg.org/#dom-url-username\n getUsername: function () {\n return this.username;\n },\n setUsername: function (username) {\n var codePoints = arrayFrom($toString(username));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-password\n getPassword: function () {\n return this.password;\n },\n setPassword: function (password) {\n var codePoints = arrayFrom($toString(password));\n if (this.cannotHaveUsernamePasswordPort()) return;\n this.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n },\n // https://url.spec.whatwg.org/#dom-url-host\n getHost: function () {\n var host = this.host;\n var port = this.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n },\n setHost: function (host) {\n if (this.cannotBeABaseURL) return;\n this.parse(host, HOST);\n },\n // https://url.spec.whatwg.org/#dom-url-hostname\n getHostname: function () {\n var host = this.host;\n return host === null ? '' : serializeHost(host);\n },\n setHostname: function (hostname) {\n if (this.cannotBeABaseURL) return;\n this.parse(hostname, HOSTNAME);\n },\n // https://url.spec.whatwg.org/#dom-url-port\n getPort: function () {\n var port = this.port;\n return port === null ? '' : $toString(port);\n },\n setPort: function (port) {\n if (this.cannotHaveUsernamePasswordPort()) return;\n port = $toString(port);\n if (port == '') this.port = null;\n else this.parse(port, PORT);\n },\n // https://url.spec.whatwg.org/#dom-url-pathname\n getPathname: function () {\n var path = this.path;\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\n },\n setPathname: function (pathname) {\n if (this.cannotBeABaseURL) return;\n this.path = [];\n this.parse(pathname, PATH_START);\n },\n // https://url.spec.whatwg.org/#dom-url-search\n getSearch: function () {\n var query = this.query;\n return query ? '?' + query : '';\n },\n setSearch: function (search) {\n search = $toString(search);\n if (search == '') {\n this.query = null;\n } else {\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\n this.query = '';\n this.parse(search, QUERY);\n }\n this.searchParams.update();\n },\n // https://url.spec.whatwg.org/#dom-url-searchparams\n getSearchParams: function () {\n return this.searchParams.facade;\n },\n // https://url.spec.whatwg.org/#dom-url-hash\n getHash: function () {\n var fragment = this.fragment;\n return fragment ? '#' + fragment : '';\n },\n setHash: function (hash) {\n hash = $toString(hash);\n if (hash == '') {\n this.fragment = null;\n return;\n }\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\n this.fragment = '';\n this.parse(hash, FRAGMENT);\n },\n update: function () {\n this.query = this.searchParams.serialize() || null;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLPrototype);\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\n var state = setInternalState(that, new URLState(url, false, base));\n if (!DESCRIPTORS) {\n that.href = state.serialize();\n that.origin = state.getOrigin();\n that.protocol = state.getProtocol();\n that.username = state.getUsername();\n that.password = state.getPassword();\n that.host = state.getHost();\n that.hostname = state.getHostname();\n that.port = state.getPort();\n that.pathname = state.getPathname();\n that.search = state.getSearch();\n that.searchParams = state.getSearchParams();\n that.hash = state.getHash();\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar accessorDescriptor = function (getter, setter) {\n return {\n get: function () {\n return getInternalURLState(this)[getter]();\n },\n set: setter && function (value) {\n return getInternalURLState(this)[setter](value);\n },\n configurable: true,\n enumerable: true\n };\n};\n\nif (DESCRIPTORS) {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\n return getInternalURLState(this).serialize();\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=style&index=0&id=60c7c7fa&scoped=true&lang=css&\"","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar $toString = require('../internals/to-string');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arraySort = require('../internals/array-sort');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Avoid NodeJS experimental warning\nvar safeGetBuiltIn = function (name) {\n if (!DESCRIPTORS) return global[name];\n var descriptor = getOwnPropertyDescriptor(global, name);\n return descriptor && descriptor.value;\n};\n\nvar nativeFetch = safeGetBuiltIn('fetch');\nvar NativeRequest = safeGetBuiltIn('Request');\nvar Headers = safeGetBuiltIn('Headers');\nvar RequestPrototype = NativeRequest && NativeRequest.prototype;\nvar HeadersPrototype = Headers && Headers.prototype;\nvar RegExp = global.RegExp;\nvar TypeError = global.TypeError;\nvar decodeURIComponent = global.decodeURIComponent;\nvar encodeURIComponent = global.encodeURIComponent;\nvar charAt = uncurryThis(''.charAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar shift = uncurryThis([].shift);\nvar splice = uncurryThis([].splice);\nvar split = uncurryThis(''.split);\nvar stringSlice = uncurryThis(''.slice);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = replace(it, plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = replace(result, percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replacements = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replacements[match];\n};\n\nvar serialize = function (it) {\n return replace(encodeURIComponent(it), find, replacer);\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n}, true);\n\nvar URLSearchParamsState = function (init) {\n this.entries = [];\n this.url = null;\n\n if (init !== undefined) {\n if (isObject(init)) this.parseObject(init);\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\n }\n};\n\nURLSearchParamsState.prototype = {\n type: URL_SEARCH_PARAMS,\n bindURL: function (url) {\n this.url = url;\n this.update();\n },\n parseObject: function (object) {\n var iteratorMethod = getIteratorMethod(object);\n var iterator, next, step, entryIterator, entryNext, first, second;\n\n if (iteratorMethod) {\n iterator = getIterator(object, iteratorMethod);\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = call(entryNext, entryIterator)).done ||\n (second = call(entryNext, entryIterator)).done ||\n !call(entryNext, entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\n }\n } else for (var key in object) if (hasOwn(object, key)) {\n push(this.entries, { key: key, value: $toString(object[key]) });\n }\n },\n parseQuery: function (query) {\n if (query) {\n var attributes = split(query, '&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = split(attribute, '=');\n push(this.entries, {\n key: deserialize(shift(entry)),\n value: deserialize(join(entry, '='))\n });\n }\n }\n }\n },\n serialize: function () {\n var entries = this.entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\n } return join(result, '&');\n },\n update: function () {\n this.entries.length = 0;\n this.parseQuery(this.url.query);\n },\n updateURL: function () {\n if (this.url) this.url.update();\n }\n};\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsPrototype);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n setInternalState(this, new URLSearchParamsState(init));\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\ndefineBuiltIns(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.append` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n push(state.entries, { key: $toString(name), value: $toString(value) });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) splice(entries, index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) push(result, entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = $toString(name);\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = $toString(name);\n var val = $toString(value);\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) splice(entries, index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) push(entries, { key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n arraySort(state.entries, function (a, b) {\n return a.key > b.key ? 1 : -1;\n });\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\ndefineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\ndefineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() {\n return getInternalParamsState(this).serialize();\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` and `Request` for correct work with polyfilled `URLSearchParams`\nif (!USE_NATIVE_URL && isCallable(Headers)) {\n var headersHas = uncurryThis(HeadersPrototype.has);\n var headersSet = uncurryThis(HeadersPrototype.set);\n\n var wrapRequestOptions = function (init) {\n if (isObject(init)) {\n var body = init.body;\n var headers;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headersHas(headers, 'content-type')) {\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n return create(init, {\n body: createPropertyDescriptor(0, $toString(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n } return init;\n };\n\n if (isCallable(nativeFetch)) {\n $({ global: true, enumerable: true, noTargetGet: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n }\n });\n }\n\n if (isCallable(NativeRequest)) {\n var RequestConstructor = function Request(input /* , init */) {\n anInstance(this, RequestPrototype);\n return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\n };\n\n RequestPrototype.constructor = RequestConstructor;\n RequestConstructor.prototype = RequestPrototype;\n\n $({ global: true, constructor: true, noTargetGet: true, forced: true }, {\n Request: RequestConstructor\n });\n }\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\n\nvar RangeError = global.RangeError;\nvar exec = uncurryThis(regexSeparators.exec);\nvar floor = Math.floor;\nvar fromCharCode = String.fromCharCode;\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar join = uncurryThis([].join);\nvar push = uncurryThis([].push);\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar toLowerCase = uncurryThis(''.toLowerCase);\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = charCodeAt(string, counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = charCodeAt(string, counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n push(output, value);\n counter--;\n }\n } else {\n push(output, value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n while (delta > baseMinusTMin * tMax >> 1) {\n delta = floor(delta / baseMinusTMin);\n k += base;\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n push(output, fromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n push(output, delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's state to , but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n var k = base;\n while (true) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n k += base;\n }\n\n push(output, fromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n handledCPCount++;\n }\n }\n\n delta++;\n n++;\n }\n return join(output, '');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\u002E'), '.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\n }\n return join(encoded, '.');\n};\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/web.url-search-params.constructor');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","/*!\n * Cropper.js v1.5.13\n * https://fengyuanchen.github.io/cropperjs\n *\n * Copyright 2015-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2022-11-20T05:30:46.114Z\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Cropper = factory());\n})(this, (function () { 'use strict';\n\n function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n }\n function _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n }\n function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n }\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n }\n function _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n }\n function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n }\n function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n }\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n }\n function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var WINDOW = IS_BROWSER ? window : {};\n var IS_TOUCH_DEVICE = IS_BROWSER && WINDOW.document.documentElement ? 'ontouchstart' in WINDOW.document.documentElement : false;\n var HAS_POINTER_EVENT = IS_BROWSER ? 'PointerEvent' in WINDOW : false;\n var NAMESPACE = 'cropper';\n\n // Actions\n var ACTION_ALL = 'all';\n var ACTION_CROP = 'crop';\n var ACTION_MOVE = 'move';\n var ACTION_ZOOM = 'zoom';\n var ACTION_EAST = 'e';\n var ACTION_WEST = 'w';\n var ACTION_SOUTH = 's';\n var ACTION_NORTH = 'n';\n var ACTION_NORTH_EAST = 'ne';\n var ACTION_NORTH_WEST = 'nw';\n var ACTION_SOUTH_EAST = 'se';\n var ACTION_SOUTH_WEST = 'sw';\n\n // Classes\n var CLASS_CROP = \"\".concat(NAMESPACE, \"-crop\");\n var CLASS_DISABLED = \"\".concat(NAMESPACE, \"-disabled\");\n var CLASS_HIDDEN = \"\".concat(NAMESPACE, \"-hidden\");\n var CLASS_HIDE = \"\".concat(NAMESPACE, \"-hide\");\n var CLASS_INVISIBLE = \"\".concat(NAMESPACE, \"-invisible\");\n var CLASS_MODAL = \"\".concat(NAMESPACE, \"-modal\");\n var CLASS_MOVE = \"\".concat(NAMESPACE, \"-move\");\n\n // Data keys\n var DATA_ACTION = \"\".concat(NAMESPACE, \"Action\");\n var DATA_PREVIEW = \"\".concat(NAMESPACE, \"Preview\");\n\n // Drag modes\n var DRAG_MODE_CROP = 'crop';\n var DRAG_MODE_MOVE = 'move';\n var DRAG_MODE_NONE = 'none';\n\n // Events\n var EVENT_CROP = 'crop';\n var EVENT_CROP_END = 'cropend';\n var EVENT_CROP_MOVE = 'cropmove';\n var EVENT_CROP_START = 'cropstart';\n var EVENT_DBLCLICK = 'dblclick';\n var EVENT_TOUCH_START = IS_TOUCH_DEVICE ? 'touchstart' : 'mousedown';\n var EVENT_TOUCH_MOVE = IS_TOUCH_DEVICE ? 'touchmove' : 'mousemove';\n var EVENT_TOUCH_END = IS_TOUCH_DEVICE ? 'touchend touchcancel' : 'mouseup';\n var EVENT_POINTER_DOWN = HAS_POINTER_EVENT ? 'pointerdown' : EVENT_TOUCH_START;\n var EVENT_POINTER_MOVE = HAS_POINTER_EVENT ? 'pointermove' : EVENT_TOUCH_MOVE;\n var EVENT_POINTER_UP = HAS_POINTER_EVENT ? 'pointerup pointercancel' : EVENT_TOUCH_END;\n var EVENT_READY = 'ready';\n var EVENT_RESIZE = 'resize';\n var EVENT_WHEEL = 'wheel';\n var EVENT_ZOOM = 'zoom';\n\n // Mime types\n var MIME_TYPE_JPEG = 'image/jpeg';\n\n // RegExps\n var REGEXP_ACTIONS = /^e|w|s|n|se|sw|ne|nw|all|crop|move|zoom$/;\n var REGEXP_DATA_URL = /^data:/;\n var REGEXP_DATA_URL_JPEG = /^data:image\\/jpeg;base64,/;\n var REGEXP_TAG_NAME = /^img|canvas$/i;\n\n // Misc\n // Inspired by the default width and height of a canvas element.\n var MIN_CONTAINER_WIDTH = 200;\n var MIN_CONTAINER_HEIGHT = 100;\n\n var DEFAULTS = {\n // Define the view mode of the cropper\n viewMode: 0,\n // 0, 1, 2, 3\n\n // Define the dragging mode of the cropper\n dragMode: DRAG_MODE_CROP,\n // 'crop', 'move' or 'none'\n\n // Define the initial aspect ratio of the crop box\n initialAspectRatio: NaN,\n // Define the aspect ratio of the crop box\n aspectRatio: NaN,\n // An object with the previous cropping result data\n data: null,\n // A selector for adding extra containers to preview\n preview: '',\n // Re-render the cropper when resize the window\n responsive: true,\n // Restore the cropped area after resize the window\n restore: true,\n // Check if the current image is a cross-origin image\n checkCrossOrigin: true,\n // Check the current image's Exif Orientation information\n checkOrientation: true,\n // Show the black modal\n modal: true,\n // Show the dashed lines for guiding\n guides: true,\n // Show the center indicator for guiding\n center: true,\n // Show the white modal to highlight the crop box\n highlight: true,\n // Show the grid background\n background: true,\n // Enable to crop the image automatically when initialize\n autoCrop: true,\n // Define the percentage of automatic cropping area when initializes\n autoCropArea: 0.8,\n // Enable to move the image\n movable: true,\n // Enable to rotate the image\n rotatable: true,\n // Enable to scale the image\n scalable: true,\n // Enable to zoom the image\n zoomable: true,\n // Enable to zoom the image by dragging touch\n zoomOnTouch: true,\n // Enable to zoom the image by wheeling mouse\n zoomOnWheel: true,\n // Define zoom ratio when zoom the image by wheeling mouse\n wheelZoomRatio: 0.1,\n // Enable to move the crop box\n cropBoxMovable: true,\n // Enable to resize the crop box\n cropBoxResizable: true,\n // Toggle drag mode between \"crop\" and \"move\" when click twice on the cropper\n toggleDragModeOnDblclick: true,\n // Size limitation\n minCanvasWidth: 0,\n minCanvasHeight: 0,\n minCropBoxWidth: 0,\n minCropBoxHeight: 0,\n minContainerWidth: MIN_CONTAINER_WIDTH,\n minContainerHeight: MIN_CONTAINER_HEIGHT,\n // Shortcuts of events\n ready: null,\n cropstart: null,\n cropmove: null,\n cropend: null,\n crop: null,\n zoom: null\n };\n\n var TEMPLATE = '
' + '
' + '
' + '
' + '
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
' + '
';\n\n /**\n * Check if the given value is not a number.\n */\n var isNaN = Number.isNaN || WINDOW.isNaN;\n\n /**\n * Check if the given value is a number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a number, else `false`.\n */\n function isNumber(value) {\n return typeof value === 'number' && !isNaN(value);\n }\n\n /**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\n var isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n };\n\n /**\n * Check if the given value is undefined.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is undefined, else `false`.\n */\n function isUndefined(value) {\n return typeof value === 'undefined';\n }\n\n /**\n * Check if the given value is an object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is an object, else `false`.\n */\n function isObject(value) {\n return _typeof(value) === 'object' && value !== null;\n }\n var hasOwnProperty = Object.prototype.hasOwnProperty;\n\n /**\n * Check if the given value is a plain object.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a plain object, else `false`.\n */\n function isPlainObject(value) {\n if (!isObject(value)) {\n return false;\n }\n try {\n var _constructor = value.constructor;\n var prototype = _constructor.prototype;\n return _constructor && prototype && hasOwnProperty.call(prototype, 'isPrototypeOf');\n } catch (error) {\n return false;\n }\n }\n\n /**\n * Check if the given value is a function.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a function, else `false`.\n */\n function isFunction(value) {\n return typeof value === 'function';\n }\n var slice = Array.prototype.slice;\n\n /**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\n function toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n }\n\n /**\n * Iterate the given data.\n * @param {*} data - The data to iterate.\n * @param {Function} callback - The process function for each element.\n * @returns {*} The original data.\n */\n function forEach(data, callback) {\n if (data && isFunction(callback)) {\n if (Array.isArray(data) || isNumber(data.length) /* array-like */) {\n toArray(data).forEach(function (value, key) {\n callback.call(data, value, key, data);\n });\n } else if (isObject(data)) {\n Object.keys(data).forEach(function (key) {\n callback.call(data, data[key], key, data);\n });\n }\n }\n return data;\n }\n\n /**\n * Extend the given object.\n * @param {*} target - The target object to extend.\n * @param {*} args - The rest objects for merging to the target object.\n * @returns {Object} The extended object.\n */\n var assign = Object.assign || function assign(target) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (isObject(target) && args.length > 0) {\n args.forEach(function (arg) {\n if (isObject(arg)) {\n Object.keys(arg).forEach(function (key) {\n target[key] = arg[key];\n });\n }\n });\n }\n return target;\n };\n var REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n /**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\n function normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n }\n var REGEXP_SUFFIX = /^width|height|left|top|marginLeft|marginTop$/;\n\n /**\n * Apply styles to the given element.\n * @param {Element} element - The target element.\n * @param {Object} styles - The styles for applying.\n */\n function setStyle(element, styles) {\n var style = element.style;\n forEach(styles, function (value, property) {\n if (REGEXP_SUFFIX.test(property) && isNumber(value)) {\n value = \"\".concat(value, \"px\");\n }\n style[property] = value;\n });\n }\n\n /**\n * Check if the given element has a special class.\n * @param {Element} element - The element to check.\n * @param {string} value - The class to search.\n * @returns {boolean} Returns `true` if the special class was found.\n */\n function hasClass(element, value) {\n return element.classList ? element.classList.contains(value) : element.className.indexOf(value) > -1;\n }\n\n /**\n * Add classes to the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be added.\n */\n function addClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n addClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.add(value);\n return;\n }\n var className = element.className.trim();\n if (!className) {\n element.className = value;\n } else if (className.indexOf(value) < 0) {\n element.className = \"\".concat(className, \" \").concat(value);\n }\n }\n\n /**\n * Remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be removed.\n */\n function removeClass(element, value) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n removeClass(elem, value);\n });\n return;\n }\n if (element.classList) {\n element.classList.remove(value);\n return;\n }\n if (element.className.indexOf(value) >= 0) {\n element.className = element.className.replace(value, '');\n }\n }\n\n /**\n * Add or remove classes from the given element.\n * @param {Element} element - The target element.\n * @param {string} value - The classes to be toggled.\n * @param {boolean} added - Add only.\n */\n function toggleClass(element, value, added) {\n if (!value) {\n return;\n }\n if (isNumber(element.length)) {\n forEach(element, function (elem) {\n toggleClass(elem, value, added);\n });\n return;\n }\n\n // IE10-11 doesn't support the second parameter of `classList.toggle`\n if (added) {\n addClass(element, value);\n } else {\n removeClass(element, value);\n }\n }\n var REGEXP_CAMEL_CASE = /([a-z\\d])([A-Z])/g;\n\n /**\n * Transform the given string from camelCase to kebab-case\n * @param {string} value - The value to transform.\n * @returns {string} The transformed value.\n */\n function toParamCase(value) {\n return value.replace(REGEXP_CAMEL_CASE, '$1-$2').toLowerCase();\n }\n\n /**\n * Get data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to get.\n * @returns {string} The data value.\n */\n function getData(element, name) {\n if (isObject(element[name])) {\n return element[name];\n }\n if (element.dataset) {\n return element.dataset[name];\n }\n return element.getAttribute(\"data-\".concat(toParamCase(name)));\n }\n\n /**\n * Set data to the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to set.\n * @param {string} data - The data value.\n */\n function setData(element, name, data) {\n if (isObject(data)) {\n element[name] = data;\n } else if (element.dataset) {\n element.dataset[name] = data;\n } else {\n element.setAttribute(\"data-\".concat(toParamCase(name)), data);\n }\n }\n\n /**\n * Remove data from the given element.\n * @param {Element} element - The target element.\n * @param {string} name - The data key to remove.\n */\n function removeData(element, name) {\n if (isObject(element[name])) {\n try {\n delete element[name];\n } catch (error) {\n element[name] = undefined;\n }\n } else if (element.dataset) {\n // #128 Safari not allows to delete dataset property\n try {\n delete element.dataset[name];\n } catch (error) {\n element.dataset[name] = undefined;\n }\n } else {\n element.removeAttribute(\"data-\".concat(toParamCase(name)));\n }\n }\n var REGEXP_SPACES = /\\s\\s*/;\n var onceSupported = function () {\n var supported = false;\n if (IS_BROWSER) {\n var once = false;\n var listener = function listener() {};\n var options = Object.defineProperty({}, 'once', {\n get: function get() {\n supported = true;\n return once;\n },\n /**\n * This setter can fix a `TypeError` in strict mode\n * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only}\n * @param {boolean} value - The value to set\n */\n set: function set(value) {\n once = value;\n }\n });\n WINDOW.addEventListener('test', listener, options);\n WINDOW.removeEventListener('test', listener, options);\n }\n return supported;\n }();\n\n /**\n * Remove event listener from the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function removeListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (!onceSupported) {\n var listeners = element.listeners;\n if (listeners && listeners[event] && listeners[event][listener]) {\n handler = listeners[event][listener];\n delete listeners[event][listener];\n if (Object.keys(listeners[event]).length === 0) {\n delete listeners[event];\n }\n if (Object.keys(listeners).length === 0) {\n delete element.listeners;\n }\n }\n }\n element.removeEventListener(event, handler, options);\n });\n }\n\n /**\n * Add event listener to the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Function} listener - The event listener.\n * @param {Object} options - The event options.\n */\n function addListener(element, type, listener) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var _handler = listener;\n type.trim().split(REGEXP_SPACES).forEach(function (event) {\n if (options.once && !onceSupported) {\n var _element$listeners = element.listeners,\n listeners = _element$listeners === void 0 ? {} : _element$listeners;\n _handler = function handler() {\n delete listeners[event][listener];\n element.removeEventListener(event, _handler, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n listener.apply(element, args);\n };\n if (!listeners[event]) {\n listeners[event] = {};\n }\n if (listeners[event][listener]) {\n element.removeEventListener(event, listeners[event][listener], options);\n }\n listeners[event][listener] = _handler;\n element.listeners = listeners;\n }\n element.addEventListener(event, _handler, options);\n });\n }\n\n /**\n * Dispatch event on the target element.\n * @param {Element} element - The event target.\n * @param {string} type - The event type(s).\n * @param {Object} data - The additional event data.\n * @returns {boolean} Indicate if the event is default prevented or not.\n */\n function dispatchEvent(element, type, data) {\n var event;\n\n // Event and CustomEvent on IE9-11 are global objects, not constructors\n if (isFunction(Event) && isFunction(CustomEvent)) {\n event = new CustomEvent(type, {\n detail: data,\n bubbles: true,\n cancelable: true\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(type, true, true, data);\n }\n return element.dispatchEvent(event);\n }\n\n /**\n * Get the offset base on the document.\n * @param {Element} element - The target element.\n * @returns {Object} The offset data.\n */\n function getOffset(element) {\n var box = element.getBoundingClientRect();\n return {\n left: box.left + (window.pageXOffset - document.documentElement.clientLeft),\n top: box.top + (window.pageYOffset - document.documentElement.clientTop)\n };\n }\n var location = WINDOW.location;\n var REGEXP_ORIGINS = /^(\\w+:)\\/\\/([^:/?#]*):?(\\d*)/i;\n\n /**\n * Check if the given URL is a cross origin URL.\n * @param {string} url - The target URL.\n * @returns {boolean} Returns `true` if the given URL is a cross origin URL, else `false`.\n */\n function isCrossOriginURL(url) {\n var parts = url.match(REGEXP_ORIGINS);\n return parts !== null && (parts[1] !== location.protocol || parts[2] !== location.hostname || parts[3] !== location.port);\n }\n\n /**\n * Add timestamp to the given URL.\n * @param {string} url - The target URL.\n * @returns {string} The result URL.\n */\n function addTimestamp(url) {\n var timestamp = \"timestamp=\".concat(new Date().getTime());\n return url + (url.indexOf('?') === -1 ? '?' : '&') + timestamp;\n }\n\n /**\n * Get transforms base on the given object.\n * @param {Object} obj - The target object.\n * @returns {string} A string contains transform values.\n */\n function getTransforms(_ref) {\n var rotate = _ref.rotate,\n scaleX = _ref.scaleX,\n scaleY = _ref.scaleY,\n translateX = _ref.translateX,\n translateY = _ref.translateY;\n var values = [];\n if (isNumber(translateX) && translateX !== 0) {\n values.push(\"translateX(\".concat(translateX, \"px)\"));\n }\n if (isNumber(translateY) && translateY !== 0) {\n values.push(\"translateY(\".concat(translateY, \"px)\"));\n }\n\n // Rotate should come first before scale to match orientation transform\n if (isNumber(rotate) && rotate !== 0) {\n values.push(\"rotate(\".concat(rotate, \"deg)\"));\n }\n if (isNumber(scaleX) && scaleX !== 1) {\n values.push(\"scaleX(\".concat(scaleX, \")\"));\n }\n if (isNumber(scaleY) && scaleY !== 1) {\n values.push(\"scaleY(\".concat(scaleY, \")\"));\n }\n var transform = values.length ? values.join(' ') : 'none';\n return {\n WebkitTransform: transform,\n msTransform: transform,\n transform: transform\n };\n }\n\n /**\n * Get the max ratio of a group of pointers.\n * @param {string} pointers - The target pointers.\n * @returns {number} The result ratio.\n */\n function getMaxZoomRatio(pointers) {\n var pointers2 = _objectSpread2({}, pointers);\n var maxRatio = 0;\n forEach(pointers, function (pointer, pointerId) {\n delete pointers2[pointerId];\n forEach(pointers2, function (pointer2) {\n var x1 = Math.abs(pointer.startX - pointer2.startX);\n var y1 = Math.abs(pointer.startY - pointer2.startY);\n var x2 = Math.abs(pointer.endX - pointer2.endX);\n var y2 = Math.abs(pointer.endY - pointer2.endY);\n var z1 = Math.sqrt(x1 * x1 + y1 * y1);\n var z2 = Math.sqrt(x2 * x2 + y2 * y2);\n var ratio = (z2 - z1) / z1;\n if (Math.abs(ratio) > Math.abs(maxRatio)) {\n maxRatio = ratio;\n }\n });\n });\n return maxRatio;\n }\n\n /**\n * Get a pointer from an event object.\n * @param {Object} event - The target event object.\n * @param {boolean} endOnly - Indicates if only returns the end point coordinate or not.\n * @returns {Object} The result pointer contains start and/or end point coordinates.\n */\n function getPointer(_ref2, endOnly) {\n var pageX = _ref2.pageX,\n pageY = _ref2.pageY;\n var end = {\n endX: pageX,\n endY: pageY\n };\n return endOnly ? end : _objectSpread2({\n startX: pageX,\n startY: pageY\n }, end);\n }\n\n /**\n * Get the center point coordinate of a group of pointers.\n * @param {Object} pointers - The target pointers.\n * @returns {Object} The center point coordinate.\n */\n function getPointersCenter(pointers) {\n var pageX = 0;\n var pageY = 0;\n var count = 0;\n forEach(pointers, function (_ref3) {\n var startX = _ref3.startX,\n startY = _ref3.startY;\n pageX += startX;\n pageY += startY;\n count += 1;\n });\n pageX /= count;\n pageY /= count;\n return {\n pageX: pageX,\n pageY: pageY\n };\n }\n\n /**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\n function getAdjustedSizes(_ref4) {\n var aspectRatio = _ref4.aspectRatio,\n height = _ref4.height,\n width = _ref4.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'contain';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if (type === 'contain' && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n }\n\n /**\n * Get the new sizes of a rectangle after rotated.\n * @param {Object} data - The original sizes.\n * @returns {Object} The result sizes.\n */\n function getRotatedSizes(_ref5) {\n var width = _ref5.width,\n height = _ref5.height,\n degree = _ref5.degree;\n degree = Math.abs(degree) % 180;\n if (degree === 90) {\n return {\n width: height,\n height: width\n };\n }\n var arc = degree % 90 * Math.PI / 180;\n var sinArc = Math.sin(arc);\n var cosArc = Math.cos(arc);\n var newWidth = width * cosArc + height * sinArc;\n var newHeight = width * sinArc + height * cosArc;\n return degree > 90 ? {\n width: newHeight,\n height: newWidth\n } : {\n width: newWidth,\n height: newHeight\n };\n }\n\n /**\n * Get a canvas which drew the given image.\n * @param {HTMLImageElement} image - The image for drawing.\n * @param {Object} imageData - The image data.\n * @param {Object} canvasData - The canvas data.\n * @param {Object} options - The options.\n * @returns {HTMLCanvasElement} The result canvas.\n */\n function getSourceCanvas(image, _ref6, _ref7, _ref8) {\n var imageAspectRatio = _ref6.aspectRatio,\n imageNaturalWidth = _ref6.naturalWidth,\n imageNaturalHeight = _ref6.naturalHeight,\n _ref6$rotate = _ref6.rotate,\n rotate = _ref6$rotate === void 0 ? 0 : _ref6$rotate,\n _ref6$scaleX = _ref6.scaleX,\n scaleX = _ref6$scaleX === void 0 ? 1 : _ref6$scaleX,\n _ref6$scaleY = _ref6.scaleY,\n scaleY = _ref6$scaleY === void 0 ? 1 : _ref6$scaleY;\n var aspectRatio = _ref7.aspectRatio,\n naturalWidth = _ref7.naturalWidth,\n naturalHeight = _ref7.naturalHeight;\n var _ref8$fillColor = _ref8.fillColor,\n fillColor = _ref8$fillColor === void 0 ? 'transparent' : _ref8$fillColor,\n _ref8$imageSmoothingE = _ref8.imageSmoothingEnabled,\n imageSmoothingEnabled = _ref8$imageSmoothingE === void 0 ? true : _ref8$imageSmoothingE,\n _ref8$imageSmoothingQ = _ref8.imageSmoothingQuality,\n imageSmoothingQuality = _ref8$imageSmoothingQ === void 0 ? 'low' : _ref8$imageSmoothingQ,\n _ref8$maxWidth = _ref8.maxWidth,\n maxWidth = _ref8$maxWidth === void 0 ? Infinity : _ref8$maxWidth,\n _ref8$maxHeight = _ref8.maxHeight,\n maxHeight = _ref8$maxHeight === void 0 ? Infinity : _ref8$maxHeight,\n _ref8$minWidth = _ref8.minWidth,\n minWidth = _ref8$minWidth === void 0 ? 0 : _ref8$minWidth,\n _ref8$minHeight = _ref8.minHeight,\n minHeight = _ref8$minHeight === void 0 ? 0 : _ref8$minHeight;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var width = Math.min(maxSizes.width, Math.max(minSizes.width, naturalWidth));\n var height = Math.min(maxSizes.height, Math.max(minSizes.height, naturalHeight));\n\n // Note: should always use image's natural sizes for drawing as\n // imageData.naturalWidth === canvasData.naturalHeight when rotate % 180 === 90\n var destMaxSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: maxWidth,\n height: maxHeight\n });\n var destMinSizes = getAdjustedSizes({\n aspectRatio: imageAspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n var destWidth = Math.min(destMaxSizes.width, Math.max(destMinSizes.width, imageNaturalWidth));\n var destHeight = Math.min(destMaxSizes.height, Math.max(destMinSizes.height, imageNaturalHeight));\n var params = [-destWidth / 2, -destHeight / 2, destWidth, destHeight];\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = fillColor;\n context.fillRect(0, 0, width, height);\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n context.imageSmoothingQuality = imageSmoothingQuality;\n context.drawImage.apply(context, [image].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n context.restore();\n return canvas;\n }\n var fromCharCode = String.fromCharCode;\n\n /**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\n function getStringFromCharCode(dataView, start, length) {\n var str = '';\n length += start;\n for (var i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n }\n var REGEXP_DATA_URL_HEAD = /^data:.*,/;\n\n /**\n * Transform Data URL to array buffer.\n * @param {string} dataURL - The Data URL to transform.\n * @returns {ArrayBuffer} The result array buffer.\n */\n function dataURLToArrayBuffer(dataURL) {\n var base64 = dataURL.replace(REGEXP_DATA_URL_HEAD, '');\n var binary = atob(base64);\n var arrayBuffer = new ArrayBuffer(binary.length);\n var uint8 = new Uint8Array(arrayBuffer);\n forEach(uint8, function (value, i) {\n uint8[i] = binary.charCodeAt(i);\n });\n return arrayBuffer;\n }\n\n /**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\n function arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n\n // Chunk Typed Array for better performance (#435)\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n }\n\n /**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\n function resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (error) {\n orientation = 1;\n }\n return orientation;\n }\n\n /**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\n function parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n }\n\n var render = {\n render: function render() {\n this.initContainer();\n this.initCanvas();\n this.initCropBox();\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n },\n initContainer: function initContainer() {\n var element = this.element,\n options = this.options,\n container = this.container,\n cropper = this.cropper;\n var minWidth = Number(options.minContainerWidth);\n var minHeight = Number(options.minContainerHeight);\n addClass(cropper, CLASS_HIDDEN);\n removeClass(element, CLASS_HIDDEN);\n var containerData = {\n width: Math.max(container.offsetWidth, minWidth >= 0 ? minWidth : MIN_CONTAINER_WIDTH),\n height: Math.max(container.offsetHeight, minHeight >= 0 ? minHeight : MIN_CONTAINER_HEIGHT)\n };\n this.containerData = containerData;\n setStyle(cropper, {\n width: containerData.width,\n height: containerData.height\n });\n addClass(element, CLASS_HIDDEN);\n removeClass(cropper, CLASS_HIDDEN);\n },\n // Canvas (image wrapper)\n initCanvas: function initCanvas() {\n var containerData = this.containerData,\n imageData = this.imageData;\n var viewMode = this.options.viewMode;\n var rotated = Math.abs(imageData.rotate) % 180 === 90;\n var naturalWidth = rotated ? imageData.naturalHeight : imageData.naturalWidth;\n var naturalHeight = rotated ? imageData.naturalWidth : imageData.naturalHeight;\n var aspectRatio = naturalWidth / naturalHeight;\n var canvasWidth = containerData.width;\n var canvasHeight = containerData.height;\n if (containerData.height * aspectRatio > containerData.width) {\n if (viewMode === 3) {\n canvasWidth = containerData.height * aspectRatio;\n } else {\n canvasHeight = containerData.width / aspectRatio;\n }\n } else if (viewMode === 3) {\n canvasHeight = containerData.width / aspectRatio;\n } else {\n canvasWidth = containerData.height * aspectRatio;\n }\n var canvasData = {\n aspectRatio: aspectRatio,\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n width: canvasWidth,\n height: canvasHeight\n };\n this.canvasData = canvasData;\n this.limited = viewMode === 1 || viewMode === 2;\n this.limitCanvas(true, true);\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n canvasData.left = (containerData.width - canvasData.width) / 2;\n canvasData.top = (containerData.height - canvasData.height) / 2;\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n this.initialCanvasData = assign({}, canvasData);\n },\n limitCanvas: function limitCanvas(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var viewMode = options.viewMode;\n var aspectRatio = canvasData.aspectRatio;\n var cropped = this.cropped && cropBoxData;\n if (sizeLimited) {\n var minCanvasWidth = Number(options.minCanvasWidth) || 0;\n var minCanvasHeight = Number(options.minCanvasHeight) || 0;\n if (viewMode > 1) {\n minCanvasWidth = Math.max(minCanvasWidth, containerData.width);\n minCanvasHeight = Math.max(minCanvasHeight, containerData.height);\n if (viewMode === 3) {\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n } else if (viewMode > 0) {\n if (minCanvasWidth) {\n minCanvasWidth = Math.max(minCanvasWidth, cropped ? cropBoxData.width : 0);\n } else if (minCanvasHeight) {\n minCanvasHeight = Math.max(minCanvasHeight, cropped ? cropBoxData.height : 0);\n } else if (cropped) {\n minCanvasWidth = cropBoxData.width;\n minCanvasHeight = cropBoxData.height;\n if (minCanvasHeight * aspectRatio > minCanvasWidth) {\n minCanvasWidth = minCanvasHeight * aspectRatio;\n } else {\n minCanvasHeight = minCanvasWidth / aspectRatio;\n }\n }\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minCanvasWidth,\n height: minCanvasHeight\n });\n minCanvasWidth = _getAdjustedSizes.width;\n minCanvasHeight = _getAdjustedSizes.height;\n canvasData.minWidth = minCanvasWidth;\n canvasData.minHeight = minCanvasHeight;\n canvasData.maxWidth = Infinity;\n canvasData.maxHeight = Infinity;\n }\n if (positionLimited) {\n if (viewMode > (cropped ? 0 : 1)) {\n var newCanvasLeft = containerData.width - canvasData.width;\n var newCanvasTop = containerData.height - canvasData.height;\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n if (cropped && this.limited) {\n canvasData.minLeft = Math.min(cropBoxData.left, cropBoxData.left + (cropBoxData.width - canvasData.width));\n canvasData.minTop = Math.min(cropBoxData.top, cropBoxData.top + (cropBoxData.height - canvasData.height));\n canvasData.maxLeft = cropBoxData.left;\n canvasData.maxTop = cropBoxData.top;\n if (viewMode === 2) {\n if (canvasData.width >= containerData.width) {\n canvasData.minLeft = Math.min(0, newCanvasLeft);\n canvasData.maxLeft = Math.max(0, newCanvasLeft);\n }\n if (canvasData.height >= containerData.height) {\n canvasData.minTop = Math.min(0, newCanvasTop);\n canvasData.maxTop = Math.max(0, newCanvasTop);\n }\n }\n }\n } else {\n canvasData.minLeft = -canvasData.width;\n canvasData.minTop = -canvasData.height;\n canvasData.maxLeft = containerData.width;\n canvasData.maxTop = containerData.height;\n }\n }\n },\n renderCanvas: function renderCanvas(changed, transformed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n if (transformed) {\n var _getRotatedSizes = getRotatedSizes({\n width: imageData.naturalWidth * Math.abs(imageData.scaleX || 1),\n height: imageData.naturalHeight * Math.abs(imageData.scaleY || 1),\n degree: imageData.rotate || 0\n }),\n naturalWidth = _getRotatedSizes.width,\n naturalHeight = _getRotatedSizes.height;\n var width = canvasData.width * (naturalWidth / canvasData.naturalWidth);\n var height = canvasData.height * (naturalHeight / canvasData.naturalHeight);\n canvasData.left -= (width - canvasData.width) / 2;\n canvasData.top -= (height - canvasData.height) / 2;\n canvasData.width = width;\n canvasData.height = height;\n canvasData.aspectRatio = naturalWidth / naturalHeight;\n canvasData.naturalWidth = naturalWidth;\n canvasData.naturalHeight = naturalHeight;\n this.limitCanvas(true, false);\n }\n if (canvasData.width > canvasData.maxWidth || canvasData.width < canvasData.minWidth) {\n canvasData.left = canvasData.oldLeft;\n }\n if (canvasData.height > canvasData.maxHeight || canvasData.height < canvasData.minHeight) {\n canvasData.top = canvasData.oldTop;\n }\n canvasData.width = Math.min(Math.max(canvasData.width, canvasData.minWidth), canvasData.maxWidth);\n canvasData.height = Math.min(Math.max(canvasData.height, canvasData.minHeight), canvasData.maxHeight);\n this.limitCanvas(false, true);\n canvasData.left = Math.min(Math.max(canvasData.left, canvasData.minLeft), canvasData.maxLeft);\n canvasData.top = Math.min(Math.max(canvasData.top, canvasData.minTop), canvasData.maxTop);\n canvasData.oldLeft = canvasData.left;\n canvasData.oldTop = canvasData.top;\n setStyle(this.canvas, assign({\n width: canvasData.width,\n height: canvasData.height\n }, getTransforms({\n translateX: canvasData.left,\n translateY: canvasData.top\n })));\n this.renderImage(changed);\n if (this.cropped && this.limited) {\n this.limitCropBox(true, true);\n }\n },\n renderImage: function renderImage(changed) {\n var canvasData = this.canvasData,\n imageData = this.imageData;\n var width = imageData.naturalWidth * (canvasData.width / canvasData.naturalWidth);\n var height = imageData.naturalHeight * (canvasData.height / canvasData.naturalHeight);\n assign(imageData, {\n width: width,\n height: height,\n left: (canvasData.width - width) / 2,\n top: (canvasData.height - height) / 2\n });\n setStyle(this.image, assign({\n width: imageData.width,\n height: imageData.height\n }, getTransforms(assign({\n translateX: imageData.left,\n translateY: imageData.top\n }, imageData))));\n if (changed) {\n this.output();\n }\n },\n initCropBox: function initCropBox() {\n var options = this.options,\n canvasData = this.canvasData;\n var aspectRatio = options.aspectRatio || options.initialAspectRatio;\n var autoCropArea = Number(options.autoCropArea) || 0.8;\n var cropBoxData = {\n width: canvasData.width,\n height: canvasData.height\n };\n if (aspectRatio) {\n if (canvasData.height * aspectRatio > canvasData.width) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.cropBoxData = cropBoxData;\n this.limitCropBox(true, true);\n\n // Initialize auto crop area\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n\n // The width/height of auto crop area must large than \"minWidth/Height\"\n cropBoxData.width = Math.max(cropBoxData.minWidth, cropBoxData.width * autoCropArea);\n cropBoxData.height = Math.max(cropBoxData.minHeight, cropBoxData.height * autoCropArea);\n cropBoxData.left = canvasData.left + (canvasData.width - cropBoxData.width) / 2;\n cropBoxData.top = canvasData.top + (canvasData.height - cropBoxData.height) / 2;\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n this.initialCropBoxData = assign({}, cropBoxData);\n },\n limitCropBox: function limitCropBox(sizeLimited, positionLimited) {\n var options = this.options,\n containerData = this.containerData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData,\n limited = this.limited;\n var aspectRatio = options.aspectRatio;\n if (sizeLimited) {\n var minCropBoxWidth = Number(options.minCropBoxWidth) || 0;\n var minCropBoxHeight = Number(options.minCropBoxHeight) || 0;\n var maxCropBoxWidth = limited ? Math.min(containerData.width, canvasData.width, canvasData.width + canvasData.left, containerData.width - canvasData.left) : containerData.width;\n var maxCropBoxHeight = limited ? Math.min(containerData.height, canvasData.height, canvasData.height + canvasData.top, containerData.height - canvasData.top) : containerData.height;\n\n // The min/maxCropBoxWidth/Height must be less than container's width/height\n minCropBoxWidth = Math.min(minCropBoxWidth, containerData.width);\n minCropBoxHeight = Math.min(minCropBoxHeight, containerData.height);\n if (aspectRatio) {\n if (minCropBoxWidth && minCropBoxHeight) {\n if (minCropBoxHeight * aspectRatio > minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n } else if (minCropBoxWidth) {\n minCropBoxHeight = minCropBoxWidth / aspectRatio;\n } else if (minCropBoxHeight) {\n minCropBoxWidth = minCropBoxHeight * aspectRatio;\n }\n if (maxCropBoxHeight * aspectRatio > maxCropBoxWidth) {\n maxCropBoxHeight = maxCropBoxWidth / aspectRatio;\n } else {\n maxCropBoxWidth = maxCropBoxHeight * aspectRatio;\n }\n }\n\n // The minWidth/Height must be less than maxWidth/Height\n cropBoxData.minWidth = Math.min(minCropBoxWidth, maxCropBoxWidth);\n cropBoxData.minHeight = Math.min(minCropBoxHeight, maxCropBoxHeight);\n cropBoxData.maxWidth = maxCropBoxWidth;\n cropBoxData.maxHeight = maxCropBoxHeight;\n }\n if (positionLimited) {\n if (limited) {\n cropBoxData.minLeft = Math.max(0, canvasData.left);\n cropBoxData.minTop = Math.max(0, canvasData.top);\n cropBoxData.maxLeft = Math.min(containerData.width, canvasData.left + canvasData.width) - cropBoxData.width;\n cropBoxData.maxTop = Math.min(containerData.height, canvasData.top + canvasData.height) - cropBoxData.height;\n } else {\n cropBoxData.minLeft = 0;\n cropBoxData.minTop = 0;\n cropBoxData.maxLeft = containerData.width - cropBoxData.width;\n cropBoxData.maxTop = containerData.height - cropBoxData.height;\n }\n }\n },\n renderCropBox: function renderCropBox() {\n var options = this.options,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData;\n if (cropBoxData.width > cropBoxData.maxWidth || cropBoxData.width < cropBoxData.minWidth) {\n cropBoxData.left = cropBoxData.oldLeft;\n }\n if (cropBoxData.height > cropBoxData.maxHeight || cropBoxData.height < cropBoxData.minHeight) {\n cropBoxData.top = cropBoxData.oldTop;\n }\n cropBoxData.width = Math.min(Math.max(cropBoxData.width, cropBoxData.minWidth), cropBoxData.maxWidth);\n cropBoxData.height = Math.min(Math.max(cropBoxData.height, cropBoxData.minHeight), cropBoxData.maxHeight);\n this.limitCropBox(false, true);\n cropBoxData.left = Math.min(Math.max(cropBoxData.left, cropBoxData.minLeft), cropBoxData.maxLeft);\n cropBoxData.top = Math.min(Math.max(cropBoxData.top, cropBoxData.minTop), cropBoxData.maxTop);\n cropBoxData.oldLeft = cropBoxData.left;\n cropBoxData.oldTop = cropBoxData.top;\n if (options.movable && options.cropBoxMovable) {\n // Turn to move the canvas when the crop box is equal to the container\n setData(this.face, DATA_ACTION, cropBoxData.width >= containerData.width && cropBoxData.height >= containerData.height ? ACTION_MOVE : ACTION_ALL);\n }\n setStyle(this.cropBox, assign({\n width: cropBoxData.width,\n height: cropBoxData.height\n }, getTransforms({\n translateX: cropBoxData.left,\n translateY: cropBoxData.top\n })));\n if (this.cropped && this.limited) {\n this.limitCanvas(true, true);\n }\n if (!this.disabled) {\n this.output();\n }\n },\n output: function output() {\n this.preview();\n dispatchEvent(this.element, EVENT_CROP, this.getData());\n }\n };\n\n var preview = {\n initPreview: function initPreview() {\n var element = this.element,\n crossOrigin = this.crossOrigin;\n var preview = this.options.preview;\n var url = crossOrigin ? this.crossOriginUrl : this.url;\n var alt = element.alt || 'The image to preview';\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = url;\n image.alt = alt;\n this.viewBox.appendChild(image);\n this.viewBoxImage = image;\n if (!preview) {\n return;\n }\n var previews = preview;\n if (typeof preview === 'string') {\n previews = element.ownerDocument.querySelectorAll(preview);\n } else if (preview.querySelector) {\n previews = [preview];\n }\n this.previews = previews;\n forEach(previews, function (el) {\n var img = document.createElement('img');\n\n // Save the original size for recover\n setData(el, DATA_PREVIEW, {\n width: el.offsetWidth,\n height: el.offsetHeight,\n html: el.innerHTML\n });\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.src = url;\n img.alt = alt;\n\n /**\n * Override img element styles\n * Add `display:block` to avoid margin top issue\n * Add `height:auto` to override `height` attribute on IE8\n * (Occur only when margin-top <= -height)\n */\n img.style.cssText = 'display:block;' + 'width:100%;' + 'height:auto;' + 'min-width:0!important;' + 'min-height:0!important;' + 'max-width:none!important;' + 'max-height:none!important;' + 'image-orientation:0deg!important;\"';\n el.innerHTML = '';\n el.appendChild(img);\n });\n },\n resetPreview: function resetPreview() {\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n setStyle(element, {\n width: data.width,\n height: data.height\n });\n element.innerHTML = data.html;\n removeData(element, DATA_PREVIEW);\n });\n },\n preview: function preview() {\n var imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var cropBoxWidth = cropBoxData.width,\n cropBoxHeight = cropBoxData.height;\n var width = imageData.width,\n height = imageData.height;\n var left = cropBoxData.left - canvasData.left - imageData.left;\n var top = cropBoxData.top - canvasData.top - imageData.top;\n if (!this.cropped || this.disabled) {\n return;\n }\n setStyle(this.viewBoxImage, assign({\n width: width,\n height: height\n }, getTransforms(assign({\n translateX: -left,\n translateY: -top\n }, imageData))));\n forEach(this.previews, function (element) {\n var data = getData(element, DATA_PREVIEW);\n var originalWidth = data.width;\n var originalHeight = data.height;\n var newWidth = originalWidth;\n var newHeight = originalHeight;\n var ratio = 1;\n if (cropBoxWidth) {\n ratio = originalWidth / cropBoxWidth;\n newHeight = cropBoxHeight * ratio;\n }\n if (cropBoxHeight && newHeight > originalHeight) {\n ratio = originalHeight / cropBoxHeight;\n newWidth = cropBoxWidth * ratio;\n newHeight = originalHeight;\n }\n setStyle(element, {\n width: newWidth,\n height: newHeight\n });\n setStyle(element.getElementsByTagName('img')[0], assign({\n width: width * ratio,\n height: height * ratio\n }, getTransforms(assign({\n translateX: -left * ratio,\n translateY: -top * ratio\n }, imageData))));\n });\n }\n };\n\n var events = {\n bind: function bind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n addListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n addListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n addListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n addListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n addListener(element, EVENT_ZOOM, options.zoom);\n }\n addListener(cropper, EVENT_POINTER_DOWN, this.onCropStart = this.cropStart.bind(this));\n if (options.zoomable && options.zoomOnWheel) {\n addListener(cropper, EVENT_WHEEL, this.onWheel = this.wheel.bind(this), {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n addListener(cropper, EVENT_DBLCLICK, this.onDblclick = this.dblclick.bind(this));\n }\n addListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove = this.cropMove.bind(this));\n addListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd = this.cropEnd.bind(this));\n if (options.responsive) {\n addListener(window, EVENT_RESIZE, this.onResize = this.resize.bind(this));\n }\n },\n unbind: function unbind() {\n var element = this.element,\n options = this.options,\n cropper = this.cropper;\n if (isFunction(options.cropstart)) {\n removeListener(element, EVENT_CROP_START, options.cropstart);\n }\n if (isFunction(options.cropmove)) {\n removeListener(element, EVENT_CROP_MOVE, options.cropmove);\n }\n if (isFunction(options.cropend)) {\n removeListener(element, EVENT_CROP_END, options.cropend);\n }\n if (isFunction(options.crop)) {\n removeListener(element, EVENT_CROP, options.crop);\n }\n if (isFunction(options.zoom)) {\n removeListener(element, EVENT_ZOOM, options.zoom);\n }\n removeListener(cropper, EVENT_POINTER_DOWN, this.onCropStart);\n if (options.zoomable && options.zoomOnWheel) {\n removeListener(cropper, EVENT_WHEEL, this.onWheel, {\n passive: false,\n capture: true\n });\n }\n if (options.toggleDragModeOnDblclick) {\n removeListener(cropper, EVENT_DBLCLICK, this.onDblclick);\n }\n removeListener(element.ownerDocument, EVENT_POINTER_MOVE, this.onCropMove);\n removeListener(element.ownerDocument, EVENT_POINTER_UP, this.onCropEnd);\n if (options.responsive) {\n removeListener(window, EVENT_RESIZE, this.onResize);\n }\n }\n };\n\n var handlers = {\n resize: function resize() {\n if (this.disabled) {\n return;\n }\n var options = this.options,\n container = this.container,\n containerData = this.containerData;\n var ratioX = container.offsetWidth / containerData.width;\n var ratioY = container.offsetHeight / containerData.height;\n var ratio = Math.abs(ratioX - 1) > Math.abs(ratioY - 1) ? ratioX : ratioY;\n\n // Resize when width changed or height changed\n if (ratio !== 1) {\n var canvasData;\n var cropBoxData;\n if (options.restore) {\n canvasData = this.getCanvasData();\n cropBoxData = this.getCropBoxData();\n }\n this.render();\n if (options.restore) {\n this.setCanvasData(forEach(canvasData, function (n, i) {\n canvasData[i] = n * ratio;\n }));\n this.setCropBoxData(forEach(cropBoxData, function (n, i) {\n cropBoxData[i] = n * ratio;\n }));\n }\n }\n },\n dblclick: function dblclick() {\n if (this.disabled || this.options.dragMode === DRAG_MODE_NONE) {\n return;\n }\n this.setDragMode(hasClass(this.dragBox, CLASS_CROP) ? DRAG_MODE_MOVE : DRAG_MODE_CROP);\n },\n wheel: function wheel(event) {\n var _this = this;\n var ratio = Number(this.options.wheelZoomRatio) || 0.1;\n var delta = 1;\n if (this.disabled) {\n return;\n }\n event.preventDefault();\n\n // Limit wheel speed to prevent zoom too fast (#21)\n if (this.wheeling) {\n return;\n }\n this.wheeling = true;\n setTimeout(function () {\n _this.wheeling = false;\n }, 50);\n if (event.deltaY) {\n delta = event.deltaY > 0 ? 1 : -1;\n } else if (event.wheelDelta) {\n delta = -event.wheelDelta / 120;\n } else if (event.detail) {\n delta = event.detail > 0 ? 1 : -1;\n }\n this.zoom(-delta * ratio, event);\n },\n cropStart: function cropStart(event) {\n var buttons = event.buttons,\n button = event.button;\n if (this.disabled\n\n // Handle mouse event and pointer event and ignore touch event\n || (event.type === 'mousedown' || event.type === 'pointerdown' && event.pointerType === 'mouse') && (\n // No primary button (Usually the left button)\n isNumber(buttons) && buttons !== 1 || isNumber(button) && button !== 0\n\n // Open context menu\n || event.ctrlKey)) {\n return;\n }\n var options = this.options,\n pointers = this.pointers;\n var action;\n if (event.changedTouches) {\n // Handle touch event\n forEach(event.changedTouches, function (touch) {\n pointers[touch.identifier] = getPointer(touch);\n });\n } else {\n // Handle mouse event and pointer event\n pointers[event.pointerId || 0] = getPointer(event);\n }\n if (Object.keys(pointers).length > 1 && options.zoomable && options.zoomOnTouch) {\n action = ACTION_ZOOM;\n } else {\n action = getData(event.target, DATA_ACTION);\n }\n if (!REGEXP_ACTIONS.test(action)) {\n return;\n }\n if (dispatchEvent(this.element, EVENT_CROP_START, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n\n // This line is required for preventing page zooming in iOS browsers\n event.preventDefault();\n this.action = action;\n this.cropping = false;\n if (action === ACTION_CROP) {\n this.cropping = true;\n addClass(this.dragBox, CLASS_MODAL);\n }\n },\n cropMove: function cropMove(event) {\n var action = this.action;\n if (this.disabled || !action) {\n return;\n }\n var pointers = this.pointers;\n event.preventDefault();\n if (dispatchEvent(this.element, EVENT_CROP_MOVE, {\n originalEvent: event,\n action: action\n }) === false) {\n return;\n }\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n // The first parameter should not be undefined (#432)\n assign(pointers[touch.identifier] || {}, getPointer(touch, true));\n });\n } else {\n assign(pointers[event.pointerId || 0] || {}, getPointer(event, true));\n }\n this.change(event);\n },\n cropEnd: function cropEnd(event) {\n if (this.disabled) {\n return;\n }\n var action = this.action,\n pointers = this.pointers;\n if (event.changedTouches) {\n forEach(event.changedTouches, function (touch) {\n delete pointers[touch.identifier];\n });\n } else {\n delete pointers[event.pointerId || 0];\n }\n if (!action) {\n return;\n }\n event.preventDefault();\n if (!Object.keys(pointers).length) {\n this.action = '';\n }\n if (this.cropping) {\n this.cropping = false;\n toggleClass(this.dragBox, CLASS_MODAL, this.cropped && this.options.modal);\n }\n dispatchEvent(this.element, EVENT_CROP_END, {\n originalEvent: event,\n action: action\n });\n }\n };\n\n var change = {\n change: function change(event) {\n var options = this.options,\n canvasData = this.canvasData,\n containerData = this.containerData,\n cropBoxData = this.cropBoxData,\n pointers = this.pointers;\n var action = this.action;\n var aspectRatio = options.aspectRatio;\n var left = cropBoxData.left,\n top = cropBoxData.top,\n width = cropBoxData.width,\n height = cropBoxData.height;\n var right = left + width;\n var bottom = top + height;\n var minLeft = 0;\n var minTop = 0;\n var maxWidth = containerData.width;\n var maxHeight = containerData.height;\n var renderable = true;\n var offset;\n\n // Locking aspect ratio in \"free mode\" by holding shift key\n if (!aspectRatio && event.shiftKey) {\n aspectRatio = width && height ? width / height : 1;\n }\n if (this.limited) {\n minLeft = cropBoxData.minLeft;\n minTop = cropBoxData.minTop;\n maxWidth = minLeft + Math.min(containerData.width, canvasData.width, canvasData.left + canvasData.width);\n maxHeight = minTop + Math.min(containerData.height, canvasData.height, canvasData.top + canvasData.height);\n }\n var pointer = pointers[Object.keys(pointers)[0]];\n var range = {\n x: pointer.endX - pointer.startX,\n y: pointer.endY - pointer.startY\n };\n var check = function check(side) {\n switch (side) {\n case ACTION_EAST:\n if (right + range.x > maxWidth) {\n range.x = maxWidth - right;\n }\n break;\n case ACTION_WEST:\n if (left + range.x < minLeft) {\n range.x = minLeft - left;\n }\n break;\n case ACTION_NORTH:\n if (top + range.y < minTop) {\n range.y = minTop - top;\n }\n break;\n case ACTION_SOUTH:\n if (bottom + range.y > maxHeight) {\n range.y = maxHeight - bottom;\n }\n break;\n }\n };\n switch (action) {\n // Move crop box\n case ACTION_ALL:\n left += range.x;\n top += range.y;\n break;\n\n // Resize crop box\n case ACTION_EAST:\n if (range.x >= 0 && (right >= maxWidth || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n if (width < 0) {\n action = ACTION_WEST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_NORTH:\n if (range.y <= 0 && (top <= minTop || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n if (height < 0) {\n action = ACTION_SOUTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_WEST:\n if (range.x <= 0 && (left <= minLeft || aspectRatio && (top <= minTop || bottom >= maxHeight))) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n if (width < 0) {\n action = ACTION_EAST;\n width = -width;\n left -= width;\n }\n if (aspectRatio) {\n height = width / aspectRatio;\n top += (cropBoxData.height - height) / 2;\n }\n break;\n case ACTION_SOUTH:\n if (range.y >= 0 && (bottom >= maxHeight || aspectRatio && (left <= minLeft || right >= maxWidth))) {\n renderable = false;\n break;\n }\n check(ACTION_SOUTH);\n height += range.y;\n if (height < 0) {\n action = ACTION_NORTH;\n height = -height;\n top -= height;\n }\n if (aspectRatio) {\n width = height * aspectRatio;\n left += (cropBoxData.width - width) / 2;\n }\n break;\n case ACTION_NORTH_EAST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || right >= maxWidth)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n } else {\n check(ACTION_NORTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_NORTH_WEST:\n if (aspectRatio) {\n if (range.y <= 0 && (top <= minTop || left <= minLeft)) {\n renderable = false;\n break;\n }\n check(ACTION_NORTH);\n height -= range.y;\n top += range.y;\n width = height * aspectRatio;\n left += cropBoxData.width - width;\n } else {\n check(ACTION_NORTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y <= 0 && top <= minTop) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y <= 0) {\n if (top > minTop) {\n height -= range.y;\n top += range.y;\n }\n } else {\n height -= range.y;\n top += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_SOUTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_NORTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_SOUTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_WEST:\n if (aspectRatio) {\n if (range.x <= 0 && (left <= minLeft || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_WEST);\n width -= range.x;\n left += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_WEST);\n if (range.x <= 0) {\n if (left > minLeft) {\n width -= range.x;\n left += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width -= range.x;\n left += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_EAST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n top -= height;\n }\n break;\n case ACTION_SOUTH_EAST:\n if (aspectRatio) {\n if (range.x >= 0 && (right >= maxWidth || bottom >= maxHeight)) {\n renderable = false;\n break;\n }\n check(ACTION_EAST);\n width += range.x;\n height = width / aspectRatio;\n } else {\n check(ACTION_SOUTH);\n check(ACTION_EAST);\n if (range.x >= 0) {\n if (right < maxWidth) {\n width += range.x;\n } else if (range.y >= 0 && bottom >= maxHeight) {\n renderable = false;\n }\n } else {\n width += range.x;\n }\n if (range.y >= 0) {\n if (bottom < maxHeight) {\n height += range.y;\n }\n } else {\n height += range.y;\n }\n }\n if (width < 0 && height < 0) {\n action = ACTION_NORTH_WEST;\n height = -height;\n width = -width;\n top -= height;\n left -= width;\n } else if (width < 0) {\n action = ACTION_SOUTH_WEST;\n width = -width;\n left -= width;\n } else if (height < 0) {\n action = ACTION_NORTH_EAST;\n height = -height;\n top -= height;\n }\n break;\n\n // Move canvas\n case ACTION_MOVE:\n this.move(range.x, range.y);\n renderable = false;\n break;\n\n // Zoom canvas\n case ACTION_ZOOM:\n this.zoom(getMaxZoomRatio(pointers), event);\n renderable = false;\n break;\n\n // Create crop box\n case ACTION_CROP:\n if (!range.x || !range.y) {\n renderable = false;\n break;\n }\n offset = getOffset(this.cropper);\n left = pointer.startX - offset.left;\n top = pointer.startY - offset.top;\n width = cropBoxData.minWidth;\n height = cropBoxData.minHeight;\n if (range.x > 0) {\n action = range.y > 0 ? ACTION_SOUTH_EAST : ACTION_NORTH_EAST;\n } else if (range.x < 0) {\n left -= width;\n action = range.y > 0 ? ACTION_SOUTH_WEST : ACTION_NORTH_WEST;\n }\n if (range.y < 0) {\n top -= height;\n }\n\n // Show the crop box if is hidden\n if (!this.cropped) {\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.cropped = true;\n if (this.limited) {\n this.limitCropBox(true, true);\n }\n }\n break;\n }\n if (renderable) {\n cropBoxData.width = width;\n cropBoxData.height = height;\n cropBoxData.left = left;\n cropBoxData.top = top;\n this.action = action;\n this.renderCropBox();\n }\n\n // Override\n forEach(pointers, function (p) {\n p.startX = p.endX;\n p.startY = p.endY;\n });\n }\n };\n\n var methods = {\n // Show the crop box manually\n crop: function crop() {\n if (this.ready && !this.cropped && !this.disabled) {\n this.cropped = true;\n this.limitCropBox(true, true);\n if (this.options.modal) {\n addClass(this.dragBox, CLASS_MODAL);\n }\n removeClass(this.cropBox, CLASS_HIDDEN);\n this.setCropBoxData(this.initialCropBoxData);\n }\n return this;\n },\n // Reset the image and crop box to their initial states\n reset: function reset() {\n if (this.ready && !this.disabled) {\n this.imageData = assign({}, this.initialImageData);\n this.canvasData = assign({}, this.initialCanvasData);\n this.cropBoxData = assign({}, this.initialCropBoxData);\n this.renderCanvas();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n return this;\n },\n // Clear the crop box\n clear: function clear() {\n if (this.cropped && !this.disabled) {\n assign(this.cropBoxData, {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n });\n this.cropped = false;\n this.renderCropBox();\n this.limitCanvas(true, true);\n\n // Render canvas after crop box rendered\n this.renderCanvas();\n removeClass(this.dragBox, CLASS_MODAL);\n addClass(this.cropBox, CLASS_HIDDEN);\n }\n return this;\n },\n /**\n * Replace the image's src and rebuild the cropper\n * @param {string} url - The new URL.\n * @param {boolean} [hasSameSize] - Indicate if the new image has the same size as the old one.\n * @returns {Cropper} this\n */\n replace: function replace(url) {\n var hasSameSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n if (!this.disabled && url) {\n if (this.isImg) {\n this.element.src = url;\n }\n if (hasSameSize) {\n this.url = url;\n this.image.src = url;\n if (this.ready) {\n this.viewBoxImage.src = url;\n forEach(this.previews, function (element) {\n element.getElementsByTagName('img')[0].src = url;\n });\n }\n } else {\n if (this.isImg) {\n this.replaced = true;\n }\n this.options.data = null;\n this.uncreate();\n this.load(url);\n }\n }\n return this;\n },\n // Enable (unfreeze) the cropper\n enable: function enable() {\n if (this.ready && this.disabled) {\n this.disabled = false;\n removeClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n // Disable (freeze) the cropper\n disable: function disable() {\n if (this.ready && !this.disabled) {\n this.disabled = true;\n addClass(this.cropper, CLASS_DISABLED);\n }\n return this;\n },\n /**\n * Destroy the cropper and remove the instance from the image\n * @returns {Cropper} this\n */\n destroy: function destroy() {\n var element = this.element;\n if (!element[NAMESPACE]) {\n return this;\n }\n element[NAMESPACE] = undefined;\n if (this.isImg && this.replaced) {\n element.src = this.originalUrl;\n }\n this.uncreate();\n return this;\n },\n /**\n * Move the canvas with relative offsets\n * @param {number} offsetX - The relative offset distance on the x-axis.\n * @param {number} [offsetY=offsetX] - The relative offset distance on the y-axis.\n * @returns {Cropper} this\n */\n move: function move(offsetX) {\n var offsetY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : offsetX;\n var _this$canvasData = this.canvasData,\n left = _this$canvasData.left,\n top = _this$canvasData.top;\n return this.moveTo(isUndefined(offsetX) ? offsetX : left + Number(offsetX), isUndefined(offsetY) ? offsetY : top + Number(offsetY));\n },\n /**\n * Move the canvas to an absolute point\n * @param {number} x - The x-axis coordinate.\n * @param {number} [y=x] - The y-axis coordinate.\n * @returns {Cropper} this\n */\n moveTo: function moveTo(x) {\n var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : x;\n var canvasData = this.canvasData;\n var changed = false;\n x = Number(x);\n y = Number(y);\n if (this.ready && !this.disabled && this.options.movable) {\n if (isNumber(x)) {\n canvasData.left = x;\n changed = true;\n }\n if (isNumber(y)) {\n canvasData.top = y;\n changed = true;\n }\n if (changed) {\n this.renderCanvas(true);\n }\n }\n return this;\n },\n /**\n * Zoom the canvas with a relative ratio\n * @param {number} ratio - The target ratio.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoom: function zoom(ratio, _originalEvent) {\n var canvasData = this.canvasData;\n ratio = Number(ratio);\n if (ratio < 0) {\n ratio = 1 / (1 - ratio);\n } else {\n ratio = 1 + ratio;\n }\n return this.zoomTo(canvasData.width * ratio / canvasData.naturalWidth, null, _originalEvent);\n },\n /**\n * Zoom the canvas to an absolute ratio\n * @param {number} ratio - The target ratio.\n * @param {Object} pivot - The zoom pivot point coordinate.\n * @param {Event} _originalEvent - The original event if any.\n * @returns {Cropper} this\n */\n zoomTo: function zoomTo(ratio, pivot, _originalEvent) {\n var options = this.options,\n canvasData = this.canvasData;\n var width = canvasData.width,\n height = canvasData.height,\n naturalWidth = canvasData.naturalWidth,\n naturalHeight = canvasData.naturalHeight;\n ratio = Number(ratio);\n if (ratio >= 0 && this.ready && !this.disabled && options.zoomable) {\n var newWidth = naturalWidth * ratio;\n var newHeight = naturalHeight * ratio;\n if (dispatchEvent(this.element, EVENT_ZOOM, {\n ratio: ratio,\n oldRatio: width / naturalWidth,\n originalEvent: _originalEvent\n }) === false) {\n return this;\n }\n if (_originalEvent) {\n var pointers = this.pointers;\n var offset = getOffset(this.cropper);\n var center = pointers && Object.keys(pointers).length ? getPointersCenter(pointers) : {\n pageX: _originalEvent.pageX,\n pageY: _originalEvent.pageY\n };\n\n // Zoom from the triggering point of the event\n canvasData.left -= (newWidth - width) * ((center.pageX - offset.left - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((center.pageY - offset.top - canvasData.top) / height);\n } else if (isPlainObject(pivot) && isNumber(pivot.x) && isNumber(pivot.y)) {\n canvasData.left -= (newWidth - width) * ((pivot.x - canvasData.left) / width);\n canvasData.top -= (newHeight - height) * ((pivot.y - canvasData.top) / height);\n } else {\n // Zoom from the center of the canvas\n canvasData.left -= (newWidth - width) / 2;\n canvasData.top -= (newHeight - height) / 2;\n }\n canvasData.width = newWidth;\n canvasData.height = newHeight;\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Rotate the canvas with a relative degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotate: function rotate(degree) {\n return this.rotateTo((this.imageData.rotate || 0) + Number(degree));\n },\n /**\n * Rotate the canvas to an absolute degree\n * @param {number} degree - The rotate degree.\n * @returns {Cropper} this\n */\n rotateTo: function rotateTo(degree) {\n degree = Number(degree);\n if (isNumber(degree) && this.ready && !this.disabled && this.options.rotatable) {\n this.imageData.rotate = degree % 360;\n this.renderCanvas(true, true);\n }\n return this;\n },\n /**\n * Scale the image on the x-axis.\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @returns {Cropper} this\n */\n scaleX: function scaleX(_scaleX) {\n var scaleY = this.imageData.scaleY;\n return this.scale(_scaleX, isNumber(scaleY) ? scaleY : 1);\n },\n /**\n * Scale the image on the y-axis.\n * @param {number} scaleY - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scaleY: function scaleY(_scaleY) {\n var scaleX = this.imageData.scaleX;\n return this.scale(isNumber(scaleX) ? scaleX : 1, _scaleY);\n },\n /**\n * Scale the image\n * @param {number} scaleX - The scale ratio on the x-axis.\n * @param {number} [scaleY=scaleX] - The scale ratio on the y-axis.\n * @returns {Cropper} this\n */\n scale: function scale(scaleX) {\n var scaleY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : scaleX;\n var imageData = this.imageData;\n var transformed = false;\n scaleX = Number(scaleX);\n scaleY = Number(scaleY);\n if (this.ready && !this.disabled && this.options.scalable) {\n if (isNumber(scaleX)) {\n imageData.scaleX = scaleX;\n transformed = true;\n }\n if (isNumber(scaleY)) {\n imageData.scaleY = scaleY;\n transformed = true;\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n }\n return this;\n },\n /**\n * Get the cropped area position and size data (base on the original image)\n * @param {boolean} [rounded=false] - Indicate if round the data values or not.\n * @returns {Object} The result cropped data.\n */\n getData: function getData() {\n var rounded = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData,\n cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n x: cropBoxData.left - canvasData.left,\n y: cropBoxData.top - canvasData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n var ratio = imageData.width / imageData.naturalWidth;\n forEach(data, function (n, i) {\n data[i] = n / ratio;\n });\n if (rounded) {\n // In case rounding off leads to extra 1px in right or bottom border\n // we should round the top-left corner and the dimension (#343).\n var bottom = Math.round(data.y + data.height);\n var right = Math.round(data.x + data.width);\n data.x = Math.round(data.x);\n data.y = Math.round(data.y);\n data.width = right - data.x;\n data.height = bottom - data.y;\n }\n } else {\n data = {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n if (options.rotatable) {\n data.rotate = imageData.rotate || 0;\n }\n if (options.scalable) {\n data.scaleX = imageData.scaleX || 1;\n data.scaleY = imageData.scaleY || 1;\n }\n return data;\n },\n /**\n * Set the cropped area position and size with new data\n * @param {Object} data - The new data.\n * @returns {Cropper} this\n */\n setData: function setData(data) {\n var options = this.options,\n imageData = this.imageData,\n canvasData = this.canvasData;\n var cropBoxData = {};\n if (this.ready && !this.disabled && isPlainObject(data)) {\n var transformed = false;\n if (options.rotatable) {\n if (isNumber(data.rotate) && data.rotate !== imageData.rotate) {\n imageData.rotate = data.rotate;\n transformed = true;\n }\n }\n if (options.scalable) {\n if (isNumber(data.scaleX) && data.scaleX !== imageData.scaleX) {\n imageData.scaleX = data.scaleX;\n transformed = true;\n }\n if (isNumber(data.scaleY) && data.scaleY !== imageData.scaleY) {\n imageData.scaleY = data.scaleY;\n transformed = true;\n }\n }\n if (transformed) {\n this.renderCanvas(true, true);\n }\n var ratio = imageData.width / imageData.naturalWidth;\n if (isNumber(data.x)) {\n cropBoxData.left = data.x * ratio + canvasData.left;\n }\n if (isNumber(data.y)) {\n cropBoxData.top = data.y * ratio + canvasData.top;\n }\n if (isNumber(data.width)) {\n cropBoxData.width = data.width * ratio;\n }\n if (isNumber(data.height)) {\n cropBoxData.height = data.height * ratio;\n }\n this.setCropBoxData(cropBoxData);\n }\n return this;\n },\n /**\n * Get the container size data.\n * @returns {Object} The result container data.\n */\n getContainerData: function getContainerData() {\n return this.ready ? assign({}, this.containerData) : {};\n },\n /**\n * Get the image position and size data.\n * @returns {Object} The result image data.\n */\n getImageData: function getImageData() {\n return this.sized ? assign({}, this.imageData) : {};\n },\n /**\n * Get the canvas position and size data.\n * @returns {Object} The result canvas data.\n */\n getCanvasData: function getCanvasData() {\n var canvasData = this.canvasData;\n var data = {};\n if (this.ready) {\n forEach(['left', 'top', 'width', 'height', 'naturalWidth', 'naturalHeight'], function (n) {\n data[n] = canvasData[n];\n });\n }\n return data;\n },\n /**\n * Set the canvas position and size with new data.\n * @param {Object} data - The new canvas data.\n * @returns {Cropper} this\n */\n setCanvasData: function setCanvasData(data) {\n var canvasData = this.canvasData;\n var aspectRatio = canvasData.aspectRatio;\n if (this.ready && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n canvasData.left = data.left;\n }\n if (isNumber(data.top)) {\n canvasData.top = data.top;\n }\n if (isNumber(data.width)) {\n canvasData.width = data.width;\n canvasData.height = data.width / aspectRatio;\n } else if (isNumber(data.height)) {\n canvasData.height = data.height;\n canvasData.width = data.height * aspectRatio;\n }\n this.renderCanvas(true);\n }\n return this;\n },\n /**\n * Get the crop box position and size data.\n * @returns {Object} The result crop box data.\n */\n getCropBoxData: function getCropBoxData() {\n var cropBoxData = this.cropBoxData;\n var data;\n if (this.ready && this.cropped) {\n data = {\n left: cropBoxData.left,\n top: cropBoxData.top,\n width: cropBoxData.width,\n height: cropBoxData.height\n };\n }\n return data || {};\n },\n /**\n * Set the crop box position and size with new data.\n * @param {Object} data - The new crop box data.\n * @returns {Cropper} this\n */\n setCropBoxData: function setCropBoxData(data) {\n var cropBoxData = this.cropBoxData;\n var aspectRatio = this.options.aspectRatio;\n var widthChanged;\n var heightChanged;\n if (this.ready && this.cropped && !this.disabled && isPlainObject(data)) {\n if (isNumber(data.left)) {\n cropBoxData.left = data.left;\n }\n if (isNumber(data.top)) {\n cropBoxData.top = data.top;\n }\n if (isNumber(data.width) && data.width !== cropBoxData.width) {\n widthChanged = true;\n cropBoxData.width = data.width;\n }\n if (isNumber(data.height) && data.height !== cropBoxData.height) {\n heightChanged = true;\n cropBoxData.height = data.height;\n }\n if (aspectRatio) {\n if (widthChanged) {\n cropBoxData.height = cropBoxData.width / aspectRatio;\n } else if (heightChanged) {\n cropBoxData.width = cropBoxData.height * aspectRatio;\n }\n }\n this.renderCropBox();\n }\n return this;\n },\n /**\n * Get a canvas drawn the cropped image.\n * @param {Object} [options={}] - The config options.\n * @returns {HTMLCanvasElement} - The result canvas.\n */\n getCroppedCanvas: function getCroppedCanvas() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!this.ready || !window.HTMLCanvasElement) {\n return null;\n }\n var canvasData = this.canvasData;\n var source = getSourceCanvas(this.image, this.imageData, canvasData, options);\n\n // Returns the source canvas if it is not cropped.\n if (!this.cropped) {\n return source;\n }\n var _this$getData = this.getData(),\n initialX = _this$getData.x,\n initialY = _this$getData.y,\n initialWidth = _this$getData.width,\n initialHeight = _this$getData.height;\n var ratio = source.width / Math.floor(canvasData.naturalWidth);\n if (ratio !== 1) {\n initialX *= ratio;\n initialY *= ratio;\n initialWidth *= ratio;\n initialHeight *= ratio;\n }\n var aspectRatio = initialWidth / initialHeight;\n var maxSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.maxWidth || Infinity,\n height: options.maxHeight || Infinity\n });\n var minSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.minWidth || 0,\n height: options.minHeight || 0\n }, 'cover');\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: options.width || (ratio !== 1 ? source.width : initialWidth),\n height: options.height || (ratio !== 1 ? source.height : initialHeight)\n }),\n width = _getAdjustedSizes.width,\n height = _getAdjustedSizes.height;\n width = Math.min(maxSizes.width, Math.max(minSizes.width, width));\n height = Math.min(maxSizes.height, Math.max(minSizes.height, height));\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n canvas.width = normalizeDecimalNumber(width);\n canvas.height = normalizeDecimalNumber(height);\n context.fillStyle = options.fillColor || 'transparent';\n context.fillRect(0, 0, width, height);\n var _options$imageSmoothi = options.imageSmoothingEnabled,\n imageSmoothingEnabled = _options$imageSmoothi === void 0 ? true : _options$imageSmoothi,\n imageSmoothingQuality = options.imageSmoothingQuality;\n context.imageSmoothingEnabled = imageSmoothingEnabled;\n if (imageSmoothingQuality) {\n context.imageSmoothingQuality = imageSmoothingQuality;\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D.drawImage\n var sourceWidth = source.width;\n var sourceHeight = source.height;\n\n // Source canvas parameters\n var srcX = initialX;\n var srcY = initialY;\n var srcWidth;\n var srcHeight;\n\n // Destination canvas parameters\n var dstX;\n var dstY;\n var dstWidth;\n var dstHeight;\n if (srcX <= -initialWidth || srcX > sourceWidth) {\n srcX = 0;\n srcWidth = 0;\n dstX = 0;\n dstWidth = 0;\n } else if (srcX <= 0) {\n dstX = -srcX;\n srcX = 0;\n srcWidth = Math.min(sourceWidth, initialWidth + srcX);\n dstWidth = srcWidth;\n } else if (srcX <= sourceWidth) {\n dstX = 0;\n srcWidth = Math.min(initialWidth, sourceWidth - srcX);\n dstWidth = srcWidth;\n }\n if (srcWidth <= 0 || srcY <= -initialHeight || srcY > sourceHeight) {\n srcY = 0;\n srcHeight = 0;\n dstY = 0;\n dstHeight = 0;\n } else if (srcY <= 0) {\n dstY = -srcY;\n srcY = 0;\n srcHeight = Math.min(sourceHeight, initialHeight + srcY);\n dstHeight = srcHeight;\n } else if (srcY <= sourceHeight) {\n dstY = 0;\n srcHeight = Math.min(initialHeight, sourceHeight - srcY);\n dstHeight = srcHeight;\n }\n var params = [srcX, srcY, srcWidth, srcHeight];\n\n // Avoid \"IndexSizeError\"\n if (dstWidth > 0 && dstHeight > 0) {\n var scale = width / initialWidth;\n params.push(dstX * scale, dstY * scale, dstWidth * scale, dstHeight * scale);\n }\n\n // All the numerical parameters should be integer for `drawImage`\n // https://github.com/fengyuanchen/cropper/issues/476\n context.drawImage.apply(context, [source].concat(_toConsumableArray(params.map(function (param) {\n return Math.floor(normalizeDecimalNumber(param));\n }))));\n return canvas;\n },\n /**\n * Change the aspect ratio of the crop box.\n * @param {number} aspectRatio - The new aspect ratio.\n * @returns {Cropper} this\n */\n setAspectRatio: function setAspectRatio(aspectRatio) {\n var options = this.options;\n if (!this.disabled && !isUndefined(aspectRatio)) {\n // 0 -> NaN\n options.aspectRatio = Math.max(0, aspectRatio) || NaN;\n if (this.ready) {\n this.initCropBox();\n if (this.cropped) {\n this.renderCropBox();\n }\n }\n }\n return this;\n },\n /**\n * Change the drag mode.\n * @param {string} mode - The new drag mode.\n * @returns {Cropper} this\n */\n setDragMode: function setDragMode(mode) {\n var options = this.options,\n dragBox = this.dragBox,\n face = this.face;\n if (this.ready && !this.disabled) {\n var croppable = mode === DRAG_MODE_CROP;\n var movable = options.movable && mode === DRAG_MODE_MOVE;\n mode = croppable || movable ? mode : DRAG_MODE_NONE;\n options.dragMode = mode;\n setData(dragBox, DATA_ACTION, mode);\n toggleClass(dragBox, CLASS_CROP, croppable);\n toggleClass(dragBox, CLASS_MOVE, movable);\n if (!options.cropBoxMovable) {\n // Sync drag mode to crop box when it is not movable\n setData(face, DATA_ACTION, mode);\n toggleClass(face, CLASS_CROP, croppable);\n toggleClass(face, CLASS_MOVE, movable);\n }\n }\n return this;\n }\n };\n\n var AnotherCropper = WINDOW.Cropper;\n var Cropper = /*#__PURE__*/function () {\n /**\n * Create a new Cropper.\n * @param {Element} element - The target element for cropping.\n * @param {Object} [options={}] - The configuration options.\n */\n function Cropper(element) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n _classCallCheck(this, Cropper);\n if (!element || !REGEXP_TAG_NAME.test(element.tagName)) {\n throw new Error('The first argument is required and must be an or element.');\n }\n this.element = element;\n this.options = assign({}, DEFAULTS, isPlainObject(options) && options);\n this.cropped = false;\n this.disabled = false;\n this.pointers = {};\n this.ready = false;\n this.reloading = false;\n this.replaced = false;\n this.sized = false;\n this.sizing = false;\n this.init();\n }\n _createClass(Cropper, [{\n key: \"init\",\n value: function init() {\n var element = this.element;\n var tagName = element.tagName.toLowerCase();\n var url;\n if (element[NAMESPACE]) {\n return;\n }\n element[NAMESPACE] = this;\n if (tagName === 'img') {\n this.isImg = true;\n\n // e.g.: \"img/picture.jpg\"\n url = element.getAttribute('src') || '';\n this.originalUrl = url;\n\n // Stop when it's a blank image\n if (!url) {\n return;\n }\n\n // e.g.: \"https://example.com/img/picture.jpg\"\n url = element.src;\n } else if (tagName === 'canvas' && window.HTMLCanvasElement) {\n url = element.toDataURL();\n }\n this.load(url);\n }\n }, {\n key: \"load\",\n value: function load(url) {\n var _this = this;\n if (!url) {\n return;\n }\n this.url = url;\n this.imageData = {};\n var element = this.element,\n options = this.options;\n if (!options.rotatable && !options.scalable) {\n options.checkOrientation = false;\n }\n\n // Only IE10+ supports Typed Arrays\n if (!options.checkOrientation || !window.ArrayBuffer) {\n this.clone();\n return;\n }\n\n // Detect the mime type of the image directly if it is a Data URL\n if (REGEXP_DATA_URL.test(url)) {\n // Read ArrayBuffer from Data URL of JPEG images directly for better performance\n if (REGEXP_DATA_URL_JPEG.test(url)) {\n this.read(dataURLToArrayBuffer(url));\n } else {\n // Only a JPEG image may contains Exif Orientation information,\n // the rest types of Data URLs are not necessary to check orientation at all.\n this.clone();\n }\n return;\n }\n\n // 1. Detect the mime type of the image by a XMLHttpRequest.\n // 2. Load the image as ArrayBuffer for reading orientation if its a JPEG image.\n var xhr = new XMLHttpRequest();\n var clone = this.clone.bind(this);\n this.reloading = true;\n this.xhr = xhr;\n\n // 1. Cross origin requests are only supported for protocol schemes:\n // http, https, data, chrome, chrome-extension.\n // 2. Access to XMLHttpRequest from a Data URL will be blocked by CORS policy\n // in some browsers as IE11 and Safari.\n xhr.onabort = clone;\n xhr.onerror = clone;\n xhr.ontimeout = clone;\n xhr.onprogress = function () {\n // Abort the request directly if it not a JPEG image for better performance\n if (xhr.getResponseHeader('content-type') !== MIME_TYPE_JPEG) {\n xhr.abort();\n }\n };\n xhr.onload = function () {\n _this.read(xhr.response);\n };\n xhr.onloadend = function () {\n _this.reloading = false;\n _this.xhr = null;\n };\n\n // Bust cache when there is a \"crossOrigin\" property to avoid browser cache error\n if (options.checkCrossOrigin && isCrossOriginURL(url) && element.crossOrigin) {\n url = addTimestamp(url);\n }\n\n // The third parameter is required for avoiding side-effect (#682)\n xhr.open('GET', url, true);\n xhr.responseType = 'arraybuffer';\n xhr.withCredentials = element.crossOrigin === 'use-credentials';\n xhr.send();\n }\n }, {\n key: \"read\",\n value: function read(arrayBuffer) {\n var options = this.options,\n imageData = this.imageData;\n\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n var orientation = resetAndGetOrientation(arrayBuffer);\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n if (orientation > 1) {\n // Generate a new URL which has the default orientation value\n this.url = arrayBufferToDataURL(arrayBuffer, MIME_TYPE_JPEG);\n var _parseOrientation = parseOrientation(orientation);\n rotate = _parseOrientation.rotate;\n scaleX = _parseOrientation.scaleX;\n scaleY = _parseOrientation.scaleY;\n }\n if (options.rotatable) {\n imageData.rotate = rotate;\n }\n if (options.scalable) {\n imageData.scaleX = scaleX;\n imageData.scaleY = scaleY;\n }\n this.clone();\n }\n }, {\n key: \"clone\",\n value: function clone() {\n var element = this.element,\n url = this.url;\n var crossOrigin = element.crossOrigin;\n var crossOriginUrl = url;\n if (this.options.checkCrossOrigin && isCrossOriginURL(url)) {\n if (!crossOrigin) {\n crossOrigin = 'anonymous';\n }\n\n // Bust cache when there is not a \"crossOrigin\" property (#519)\n crossOriginUrl = addTimestamp(url);\n }\n this.crossOrigin = crossOrigin;\n this.crossOriginUrl = crossOriginUrl;\n var image = document.createElement('img');\n if (crossOrigin) {\n image.crossOrigin = crossOrigin;\n }\n image.src = crossOriginUrl || url;\n image.alt = element.alt || 'The image to crop';\n this.image = image;\n image.onload = this.start.bind(this);\n image.onerror = this.stop.bind(this);\n addClass(image, CLASS_HIDE);\n element.parentNode.insertBefore(image, element.nextSibling);\n }\n }, {\n key: \"start\",\n value: function start() {\n var _this2 = this;\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n this.sizing = true;\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n var isIOSWebKit = WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent);\n var done = function done(naturalWidth, naturalHeight) {\n assign(_this2.imageData, {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n aspectRatio: naturalWidth / naturalHeight\n });\n _this2.initialImageData = assign({}, _this2.imageData);\n _this2.sizing = false;\n _this2.sized = true;\n _this2.build();\n };\n\n // Most modern browsers (excepts iOS WebKit)\n if (image.naturalWidth && !isIOSWebKit) {\n done(image.naturalWidth, image.naturalHeight);\n return;\n }\n var sizingImage = document.createElement('img');\n var body = document.body || document.documentElement;\n this.sizingImage = sizingImage;\n sizingImage.onload = function () {\n done(sizingImage.width, sizingImage.height);\n if (!isIOSWebKit) {\n body.removeChild(sizingImage);\n }\n };\n sizingImage.src = image.src;\n\n // iOS WebKit will convert the image automatically\n // with its orientation once append it into DOM (#279)\n if (!isIOSWebKit) {\n sizingImage.style.cssText = 'left:0;' + 'max-height:none!important;' + 'max-width:none!important;' + 'min-height:0!important;' + 'min-width:0!important;' + 'opacity:0;' + 'position:absolute;' + 'top:0;' + 'z-index:-1;';\n body.appendChild(sizingImage);\n }\n }\n }, {\n key: \"stop\",\n value: function stop() {\n var image = this.image;\n image.onload = null;\n image.onerror = null;\n image.parentNode.removeChild(image);\n this.image = null;\n }\n }, {\n key: \"build\",\n value: function build() {\n if (!this.sized || this.ready) {\n return;\n }\n var element = this.element,\n options = this.options,\n image = this.image;\n\n // Create cropper elements\n var container = element.parentNode;\n var template = document.createElement('div');\n template.innerHTML = TEMPLATE;\n var cropper = template.querySelector(\".\".concat(NAMESPACE, \"-container\"));\n var canvas = cropper.querySelector(\".\".concat(NAMESPACE, \"-canvas\"));\n var dragBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-drag-box\"));\n var cropBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-crop-box\"));\n var face = cropBox.querySelector(\".\".concat(NAMESPACE, \"-face\"));\n this.container = container;\n this.cropper = cropper;\n this.canvas = canvas;\n this.dragBox = dragBox;\n this.cropBox = cropBox;\n this.viewBox = cropper.querySelector(\".\".concat(NAMESPACE, \"-view-box\"));\n this.face = face;\n canvas.appendChild(image);\n\n // Hide the original image\n addClass(element, CLASS_HIDDEN);\n\n // Inserts the cropper after to the current image\n container.insertBefore(cropper, element.nextSibling);\n\n // Show the hidden image\n removeClass(image, CLASS_HIDE);\n this.initPreview();\n this.bind();\n options.initialAspectRatio = Math.max(0, options.initialAspectRatio) || NaN;\n options.aspectRatio = Math.max(0, options.aspectRatio) || NaN;\n options.viewMode = Math.max(0, Math.min(3, Math.round(options.viewMode))) || 0;\n addClass(cropBox, CLASS_HIDDEN);\n if (!options.guides) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-dashed\")), CLASS_HIDDEN);\n }\n if (!options.center) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-center\")), CLASS_HIDDEN);\n }\n if (options.background) {\n addClass(cropper, \"\".concat(NAMESPACE, \"-bg\"));\n }\n if (!options.highlight) {\n addClass(face, CLASS_INVISIBLE);\n }\n if (options.cropBoxMovable) {\n addClass(face, CLASS_MOVE);\n setData(face, DATA_ACTION, ACTION_ALL);\n }\n if (!options.cropBoxResizable) {\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-line\")), CLASS_HIDDEN);\n addClass(cropBox.getElementsByClassName(\"\".concat(NAMESPACE, \"-point\")), CLASS_HIDDEN);\n }\n this.render();\n this.ready = true;\n this.setDragMode(options.dragMode);\n if (options.autoCrop) {\n this.crop();\n }\n this.setData(options.data);\n if (isFunction(options.ready)) {\n addListener(element, EVENT_READY, options.ready, {\n once: true\n });\n }\n dispatchEvent(element, EVENT_READY);\n }\n }, {\n key: \"unbuild\",\n value: function unbuild() {\n if (!this.ready) {\n return;\n }\n this.ready = false;\n this.unbind();\n this.resetPreview();\n var parentNode = this.cropper.parentNode;\n if (parentNode) {\n parentNode.removeChild(this.cropper);\n }\n removeClass(this.element, CLASS_HIDDEN);\n }\n }, {\n key: \"uncreate\",\n value: function uncreate() {\n if (this.ready) {\n this.unbuild();\n this.ready = false;\n this.cropped = false;\n } else if (this.sizing) {\n this.sizingImage.onload = null;\n this.sizing = false;\n this.sized = false;\n } else if (this.reloading) {\n this.xhr.onabort = null;\n this.xhr.abort();\n } else if (this.image) {\n this.stop();\n }\n }\n\n /**\n * Get the no conflict cropper class.\n * @returns {Cropper} The cropper class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Cropper = AnotherCropper;\n return Cropper;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n assign(DEFAULTS, isPlainObject(options) && options);\n }\n }]);\n return Cropper;\n }();\n assign(Cropper.prototype, render, preview, events, handlers, change, methods);\n\n return Cropper;\n\n}));\n"],"sourceRoot":""}