/* https://hcaptcha.com/license */ var image_drag_drop = function(t, i, e, s, h, o, n, a, r) { "use strict"; h = h && Object.prototype.hasOwnProperty.call(h, "default") ? h["default"] : h, n = n && Object.prototype.hasOwnProperty.call(n, "default") ? n["default"] : n; var l = new s.Theme; function d(t) { i.Extend.self(this, i.BaseComponent), this.bounding = null, this.dimensions = null, this.scale = 1, this._image = null, this._aspect = 1, this._visible = !1, this._offset = 0, this.element = this.initComponent(o.Path) } function c() { i.Extend.self(this, i.BaseComponent), this.bounding = null, this._visible = !1, this._scale = 1, this.image = this.initComponent(d), this.element = this.initComponent(o.Path), this.element.fillColor = "#ebebeb", this.element.fill = !1 } function p() { i.Extend.self(this, i.BaseComponent), this.text = "", this.copy = "", this.visible = !1, this.scale = 1, this.size = 12, this.weight = 500, this.width = 0, this.offset = 0, this.typeface = "Helvetica", this.color = "#fff", this.align = "center", this.baseline = "middle", this.x = 0, this.y = 0 } l.add("contrast", { component: { prompt: { main: { fill: "#fff", text: "#000" } }, expandButton: { main: { fill: "#000" } } } }), l.add("grey-red", { component: { prompt: { main: { fill: "#6a6a6a" } }, task: { main: { fill: "#fff" }, selected: { border: "#FF0000" } }, expandButton: { main: { fill: "#6a6a6a" } } } }), i.Extend.proto(d, i.BaseComponent), d.prototype.load = function(t) { var e = this; return i.Loader.image(t, { crossOrigin: "Anonymous" }).then((function(t) { null !== e.dom && (e._image = t, e._aspect = t.width / t.height, e.size.call(e, e.areaWidth, e.areaHeight, e._offset)) } )) } , d.prototype.getImage = function() { return this._image && this._image.element.dom } , d.prototype.inBounds = function(t) { return t.x >= this.bounding.left && t.x <= this.bounding.right && t.y >= this.bounding.top && t.y <= this.bounding.bottom } , d.prototype.size = function(t, i, e) { var s = this._aspect , h = t - 20 , o = h / s; o > i - 20 && (h = (o = i - 20) * s); var n = (t - h) / 2 , a = e + (i - o) / 2 , r = n + h , l = a + o , d = [{ x: n, y: a }, { x: r, y: a }, { x: r, y: l }, { x: n, y: l }]; this.element.setPoints(d), this.dimensions = this.element.getDimensions(), this.bounding = this.element.getBounding(), this.areaWidth = t, this.areaHeight = i, this.scale = this._image ? h / this._image.width : 1, this._offset = e || this._offset } , d.prototype.draw = function(t) { this._visible && (t.ctx.save(), t.ctx.roundedRect(this.bounding.left, this.bounding.top, this.dimensions.width, this.dimensions.height, 4), t.ctx.clip(), this._image && t.ctx.drawImage(this._image.element.dom, this.bounding.left, this.bounding.top, this.dimensions.width, this.dimensions.height), t.ctx.restore()) } , d.prototype.display = function(t) { this._visible = t } , i.Extend.proto(c, i.BaseComponent), c.prototype.display = function(t) { this._visible = t, this.image.display(t) } , c.prototype.inImageBounds = function(t) { return this.image.inBounds(t) } , c.prototype.inBounds = function(t) { return t.x >= this.bounding.left && t.x <= this.bounding.right && t.y >= this.bounding.top && t.y <= this.bounding.bottom } , c.prototype.getBounding = function() { return this.image.bounding } , c.prototype.getDimensions = function() { return this.image.dimensions } , c.prototype.size = function(t, i, e, s) { var h = 0 + t , o = e + i , n = [{ x: 0, y: e }, { x: h, y: e }, { x: h, y: o }, { x: 0, y: o }]; this.element.setPoints(n), this.bounding = this.element.getBounding(), this.image.size(t, i, e), this.width = t, this.height = i, this._scale = s } , c.prototype.load = function(t) { return this.image.load(t) } , c.prototype.render = function(t) { var i = this.element.getPoint(0); t.ctx.roundedRect(i.x, i.y, this.width, this.height, 4 / t.scale), t.ctx.fillStyle = this.element.fillColor, t.ctx.fill(), this.image.draw(t) } , i.Extend.proto(p, i.BaseComponent), p.prototype.set = function(t) { this.copy !== t && (this.text = n.translate(t), this.copy = t) } , p.prototype.place = function(t) { this.x = t.x, this.y = t.y } , p.prototype.move = function(t, i) { this.x += t, this.y += i } , p.prototype.display = function(t) { this.visible = t } , p.prototype.draw = function(t) { this.width = t.ctx.measureText(this.text).width, this.visible && (t.ctx.fillStyle = this.color, t.ctx.textAlign = this.align, t.ctx.textBaseline = this.baseline, t.ctx.font = this.weight + " " + this.size / this.scale + "px " + this.typeface, t.ctx.fillText(this.text, this.x + this.offset, this.y)) } ; function g() { i.Extend.self(this, i.BaseComponent), this.x = 0, this.y = 0, this.isRTL = n.isRTL(), this.width = 0, this.height = 0, this.scale = 1, this.radius = 22, this.mobile = !1, this.updating = !1, this.hovered = !1, this.isPressed = !1, this.progress = 0, this.bounding = this.getBounding(), this.pathSVG = new o.PathSVG("data:image/svg+xml,%3csvg width='14' height='19' viewBox='0 0 14 19' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M1.99999 18.3334C1.54166 18.3334 1.1493 18.1702 0.822912 17.8438C0.496523 17.5174 0.333328 17.125 0.333328 16.6667V8.33337C0.333328 7.87504 0.496523 7.48268 0.822912 7.15629C1.1493 6.8299 1.54166 6.66671 1.99999 6.66671H2.83333V5.00004C2.83333 3.84726 3.23958 2.86462 4.05208 2.05212C4.86458 1.23962 5.84722 0.833374 7 0.833374C8.15277 0.833374 9.13541 1.23962 9.94791 2.05212C10.7604 2.86462 11.1667 3.84726 11.1667 5.00004V6.66671H12C12.4583 6.66671 12.8507 6.8299 13.1771 7.15629C13.5035 7.48268 13.6667 7.87504 13.6667 8.33337V16.6667C13.6667 17.125 13.5035 17.5174 13.1771 17.8438C12.8507 18.1702 12.4583 18.3334 12 18.3334H1.99999ZM1.99999 16.6667H12V8.33337H1.99999V16.6667ZM7 14.1667C7.45833 14.1667 7.85069 14.0035 8.17708 13.6771C8.50347 13.3507 8.66666 12.9584 8.66666 12.5C8.66666 12.0417 8.50347 11.6493 8.17708 11.323C7.85069 10.9966 7.45833 10.8334 7 10.8334C6.54166 10.8334 6.1493 10.9966 5.82291 11.323C5.49652 11.6493 5.33333 12.0417 5.33333 12.5C5.33333 12.9584 5.49652 13.3507 5.82291 13.6771C6.1493 14.0035 6.54166 14.1667 7 14.1667ZM4.5 6.66671H9.5V5.00004C9.5 4.3056 9.25694 3.71532 8.77083 3.22921C8.28472 2.7431 7.69444 2.50004 7 2.50004C6.30555 2.50004 5.71527 2.7431 5.22916 3.22921C4.74305 3.71532 4.5 4.3056 4.5 5.00004V6.66671Z' fill='white'/%3e%3c/svg%3e"), this.text = this.initComponent(p), this.text.set("Hold an item to unlock") } function u(t, i, e, s, h, o, n) { t.beginPath(), t.moveTo(i + o, e), t.lineTo(i + s - n, e), t.arcTo(i + s, e, i + s, e + n, n), t.lineTo(i + s, e + h - n), t.arcTo(i + s, e + h, i + s - n, e + h, n), t.lineTo(i + o, e + h), t.arcTo(i, e + h, i, e + h - o, o), t.lineTo(i, e + o), t.arcTo(i, e, i + o, e, o), t.closePath(), t.stroke() } i.Extend.proto(g, i.BaseComponent), g.prototype.size = function(t, i, e) { this.width = t, this.height = i, this.scale = e, this.bounding = this.getBounding(), this.text.scale = this.scale, this.text.size = 14 * this.scale, this.text.weight = 700, this.text.display(!0) } , g.prototype.place = function(t, i) { this.x = t, this.y = i, this.pathSVG.move(t + 20, i + this.height / 4), this.text.place({ x: this._parent.width / 2 + (this.updating ? 10 : 15), y: this.y + this.height / 2 }), this.bounding = this.getBounding() } , g.prototype.move = function(t, i) { this.x += t, this.y += i, this.bounding = this.getBounding(), this.text.move(t, i), this.pathSVG.move(t, i) } , g.prototype.getBounding = function() { return { left: this.x, top: this.y, right: this.width, bottom: this.height } } , g.prototype.draw = function(t) { var i, e; if (this.isRTL ? (e = (i = (this._parent.width - (this.text.width + (this.updating ? 50 : 60))) / 2) + this.text.width + 20, "landscape" === this._parent.orientation && (e += 10, i += 10)) : e = (i = (this._parent.width - (this.text.width + (this.updating ? 20 : 30))) / 2) + 14, this.pathSVG.move(e, this.y + this.height / 4), this.text.offset = this.isRTL ? !this.updating && this.isPressed ? -30 : -20 : !this.updating && this.isPressed ? 10 : 0, this.isPressed) { var s = n.translate(this.updating ? "Drag the item" : "Hold to unlock"); this.text.set(s) } else { var h = n.translate("Hold an item to unlock"); this.text.set(h) } t.ctx.beginPath(), t.ctx.fillStyle = r.Color.outline, t.ctx.strokeStyle = "transparent", u(t.ctx, i, this.y, this.text.width + (this.updating ? 40 : 52), this.height, this.radius, this.radius), t.ctx.lineWidth = 3, t.ctx.fill(), t.ctx.closePath(), this.isPressed && (t.ctx.beginPath(), t.ctx.globalAlpha = .25, t.ctx.fillStyle = this.updating ? "transparent" : r.Color.white, u(t.ctx, i, this.y, this.progress < 100 ? this.progress * (this.text.width + 24) / 100 : this.text.width + (this.updating ? 40 : 60), this.height, this.radius, this.progress < 100 ? this.progress >= 90 ? this.progress - 90 : 0 : this.radius), t.ctx.fill(), t.ctx.globalAlpha = 1, t.ctx.closePath()), this.text.draw(t), !this.updating && this.isPressed && (t.ctx.save(), this.pathSVG.drawSVG(t), t.ctx.fill(), t.ctx.restore()) } ; function f(t) { i.Extend.self(this, i.BaseComponent), this.x = 0, this.y = 0, this.width = 48, this.height = 48, this.tooltipHeight = 26, this.scale = 1, this.offset = 8, this.iconsoffset = 5, this.iconSize = 12, this.radius = 8, this.top = 0, this.right = 0, this.mobile = !1, this.hovered = !1, this.hasHold = t.hold, this.isRTL = t.isRTL, this.bounding = null, this.lockIcon = new o.PathSVG("data:image/svg+xml,%3csvg width='12' height='15' viewBox='0 0 12 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M2.00001 14.6666C1.63334 14.6666 1.31945 14.5361 1.05834 14.275C0.797227 14.0138 0.666672 13.7 0.666672 13.3333V6.66663C0.666672 6.29996 0.797227 5.98607 1.05834 5.72496C1.31945 5.46385 1.63334 5.33329 2.00001 5.33329H2.66667V3.99996C2.66667 3.07774 2.99167 2.29163 3.64167 1.64163C4.29167 0.991626 5.07778 0.666626 6.00001 0.666626C6.92223 0.666626 7.70834 0.991626 8.35834 1.64163C9.00834 2.29163 9.33334 3.07774 9.33334 3.99996V5.33329H10C10.3667 5.33329 10.6806 5.46385 10.9417 5.72496C11.2028 5.98607 11.3333 6.29996 11.3333 6.66663V13.3333C11.3333 13.7 11.2028 14.0138 10.9417 14.275C10.6806 14.5361 10.3667 14.6666 10 14.6666H2.00001ZM2.00001 13.3333H10V6.66663H2.00001V13.3333ZM6.00001 11.3333C6.36667 11.3333 6.68056 11.2027 6.94167 10.9416C7.20278 10.6805 7.33334 10.3666 7.33334 9.99996C7.33334 9.63329 7.20278 9.3194 6.94167 9.05829C6.68056 8.79718 6.36667 8.66663 6.00001 8.66663C5.63334 8.66663 5.31945 8.79718 5.05834 9.05829C4.79723 9.3194 4.66667 9.63329 4.66667 9.99996C4.66667 10.3666 4.79723 10.6805 5.05834 10.9416C5.31945 11.2027 5.63334 11.3333 6.00001 11.3333ZM4.00001 5.33329H8.00001V3.99996C8.00001 3.4444 7.80556 2.97218 7.41667 2.58329C7.02778 2.1944 6.55556 1.99996 6.00001 1.99996C5.44445 1.99996 4.97223 2.1944 4.58334 2.58329C4.19445 2.97218 4.00001 3.4444 4.00001 3.99996V5.33329Z' fill='white'/%3e%3c/svg%3e"), this.arrowIcon = new o.PathSVG("data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 1V15' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M1 8H15M1 8L3 10M1 8L3 6M15 8L13 6M15 8L13 10M10 3L8 1L6 3M6 13L8 15L10 13' stroke='white' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e"), this.currentIcon = this.hasHold ? this.arrowIcon : this.lockIcon, this.text = this.initComponent(p), this.text.set(n.translate("Locked")), this.responsiveWidth = this.width, this.tooltipX = this.x + .5 * this.width - this.responsiveWidth / 2 } function m() { i.Extend.self(this, i.BaseComponent), this.x = 0, this.y = 0, this.width = 48, this.height = 48, this.scale = 1, this.offset = 8, this.radius = 8, this.top = 0, this.right = 0, this.mobile = !1, this.hovered = !1, this.bgColor = "rgba(255, 255, 255, 0.4)", this.imageBgColor = "rgba(255, 255, 255, 0.85)", this.bounding = null, this.image = new Image } function y() { i.Extend.self(this, i.BaseComponent), this.x = 0, this.y = 0, this.width = 48, this.height = 48, this.scale = 1, this.offset = 8, this.radius = 8, this.top = 0, this.right = 0, this.mobile = !1, this.hovered = !1, this.bounding = null } function x(t) { i.Extend.self(this, i.BaseComponent), this.orientation = t.orientation || "portrait", this.hold = t.hold, this.x = 0, this.y = 0, this.width = 48, this.height = 48, this.scale = 1, this.offset = 8, this.unlockedStateOffset = 0, this.radius = 8, this.top = 0, this.right = 0, this.mobile = !1, this.bgColor = "rgba(255, 255, 255, 0.4)", this.imageBgColor = "rgba(255, 255, 255, 0.85)", this.exhausted = !1, this.hovered = !1, this.bounding = null, this.step = 0, this.icon = this.initComponent(f, { hold: this.hold }), this.image = this.initComponent(m), this.outline = this.initComponent(y) } function v(t, e) { i.Extend.self(this, i.BaseComponent), this.orientation = t || "portrait", this.hold = e, this.key = null, this.value = null, this.isPressed = !1, this.progress = 0, this.step = 0, this.scale = 1, this.mobile = !1, this.draggable = this.initComponent(x, { orientation: this.orientation, hold: this.hold }), this.x = 0, this.y = 0, this.bounding = null, this.coords = null, this.setExhausted(!1) } function b(t) { i.Extend.self(this, i.BaseComponent), this.orientation = t.orientation || "portrait", this.width = 0, this.height = 0, this.scale = 1, this.coords = { x: 0, y: 0 }, this.active = !1, this.visible = !1, this.hold = !1, this.image = null, this.bounding = null, this.dimensions = null, this.progressBar = this.initComponent(g), this.items = [] } function w(t) { i.Extend.self(this, i.BaseComponent), this.scale = 1, this.width = 0, this.height = 0, this.updated = !1, this.selectedIndex = -1, this.key = null, this.config = t.task || {}, this.hold = !t.hold, this.orientation = t.orientation || "portrait", this.cursor = "default", this.userDraw = !0, this.coords = null, this.area = this.initComponent(c), this.draggables = this.initComponent(b, { orientation: this.orientation }) } function _() { i.Extend.self(this, i.DomComponent, "challenge-view"), this.scale = 1, this.updated = !1, this._coords = { x: 0, y: 0 }, this._cursor = "default", this._lock = !1, this._task = null, this.config = { orientation: "portrait", skipText: !1, hold: !1 }, this.header = this.initComponent(a.ChallengeHeader, { theme: l }), this.canvas = this.initComponent(o.Canvas), this.canvas.setAttribute("tabindex", "0"); var t = n.translate("Image-based CAPTCHA challenge. Please use the 'Accessibility: Retrieve Cookie' or 'Accessibility: Text Challenge' options if available in the challenge menu."); this.canvas.setAttribute("role", "img"), this.canvas.setAttribute("aria-label", t); var e = C.bind(this) , s = k.bind(this); this.render = this.render.bind(this), this.canvas.addEventListener("down", e), this.canvas.addEventListener("move", e), this.canvas.addEventListener("up", e), this.canvas.addEventListener("out", e), this.addEventListener("keydown", s) } function C(t) { if (!this._lock && (h.System.desktop || t.preventDefault(), 3 !== t.keyNum)) { var i = this._task , e = "default" , s = { x: Math.round(t.elementX / this.scale), y: Math.round(t.elementY / this.scale) } , o = { x: s.x, y: s.y }; if (i) { var n = i.check(s) , a = i.area.inImageBounds(s) , r = i.area.inBounds(s); if (a && (e = n && i.selectedIndex > -1 ? "grabbing" : "pointer"), "down" === t.action) !n && i.userDraw ? a && i.create(s) : (i.selectUI(s), i.hoverOn(s), n && (e = "grabbing")); else if (!r && i.userDraw || "up" === t.action || "out" === t.action) n && (i.releaseUI(s), i.hoverOff(s), e = "pointer"); else if ("move" === t.action) if (n) { if (i.hoverOn(s), i.isUpdating()) { this.updated || (this.updated = !0, this.emit("update")); var l = { x: s.x - this._coords.x, y: s.y - this._coords.y }; o.x = i.draggables.items[i.selectedIndex].x, o.y = i.draggables.items[i.selectedIndex].y, e = "grabbing", i.moveElement(l) } } else i.releaseUI(s), i.hoverOff(s) } this._coords = s, this._cursor !== e && (this._cursor = e, this.canvas.css({ cursor: e })) } } function k(t) { 9 === t.keyNum && t.shiftKey && (this.emit("blur"), t.stopPropagation && t.stopPropagation(), t.preventDefault && t.preventDefault()) } function B(t) { i.Extend.self(this, i.DomComponent, "challenge"), this.type = "image_drag_drop", this.resolve = null, this.reject = null, this.breadcrumbs = 0, this.served = 0, this.mobile = !1, this.orientation = "portrait", this._data = null, this._answers = Object.create(null), this._total = 0, t && this.theme(t.theme.name, t.theme.config), this.syncCheckState = this.syncCheckState.bind(this); var s = this; this.view = this.initComponent(_), this.view.on("update", this.syncCheckState), this.view.on("blur", (function() { s.emit("focus-check") } )), this.renderLoop = null, e.Render.add(this.view.render) } return i.Extend.proto(f, i.BaseComponent), f.prototype.size = function(t, i, e) { this.width = t, this.height = i, this.scale = e, this.bounding = this.getBounding(), null !== this.text && this.text !== undefined && (this.text.scale = this.scale, this.text.size = 12 * this.scale, this.text.weight = 700, this.text.display(!0)), this.responsiveWidth = this.width, this.tooltipX = this.x + .5 * this.width - this.responsiveWidth / 2 } , f.prototype.place = function(t, i) { this.x = t, this.y = i, this.bounding = this.getBounding() } , f.prototype.move = function(t, i) { this.x += t, this.y += i, this.bounding = this.getBounding() } , f.prototype.hover = function(t) { this.hovered = t } , f.prototype.updateLabel = function(t, i, s) { if (null !== this.text && this.text !== undefined) { this.text.set(n.translate(!this._parent.exhausted && this.hasHold ? "Locked" : "Move")); var h = 25; "landscape" === this._parent.orientation ? (h = 15, this.text.offset = this.currentIcon.bounding.width + this.iconsoffset - 1, this.text.size = e.MathUtil.lerp(this.text.size, i ? 10 * this.scale : 7 * this.scale, .25)) : (this.text.offset = this.currentIcon.bounding.width + (i ? this.isRTL ? this.iconsoffset : this.iconsoffset + 6 : this.iconsoffset), this.text.size = e.MathUtil.lerp(this.text.size, i ? 14 * this.scale : 12 * this.scale, .25)), this.iconSize = i ? 12 : 10; var o = this.isRTL ? this.x + this.iconsoffset - this.offset - s + (this._parent.exhausted && this.hasHold ? 4 : 0) - h / 2 : this.x + this.width / 2 + this.iconsoffset - this.offset - s + (this._parent.exhausted && this.hasHold ? 4 : 0) - h; this.isRTL && "landscape" === this._parent.orientation && !i ? o -= 5 : this.isRTL && "landscape" === this._parent.orientation && i && (o -= 10), this.text.x = o, this._parent.mobile && i && (this.text.x += this.iconSize), this.text.y = this.y - this.offset - s, this.text.draw(t) } } , f.prototype.draw = function(t) { if (this.text && t) { this.tooltipX = this.x + .5 * this.width - this.responsiveWidth / 2; var i = "landscape" === this._parent.orientation ? this._parent.unlockedStateOffset + 10 : this._parent.unlockedStateOffset , s = this._parent.isOnHold , h = null !== this.text && this.text !== undefined ? this.text : "Locked" , o = h.width > 55 || !this.hasHold ? (this.width + 10 + h.width / 2) * (s ? 1.2 : 1) : s ? this.width + h.width / 2 : this.width + 10; this.responsiveWidth = e.MathUtil.lerp(this.responsiveWidth, "landscape" === this._parent.orientation ? o + 15 : o, .25), t.ctx.beginPath(), t.ctx.fillStyle = r.Color.outline, t.ctx.roundedRect(this.tooltipX, this.y - this.offset - i - (s ? .5 * this.tooltipHeight : .4 * this.tooltipHeight), this.responsiveWidth, s ? this.tooltipHeight : .8 * this.tooltipHeight, this.iconSize + 2), t.ctx.fill(), t.ctx.closePath(), this.updateLabel(t, s, i), t.ctx.beginPath(), this.hasHold ? (t.ctx.lineWidth = this._parent.exhausted ? 1 : .5, t.ctx.strokeStyle = this._parent.exhausted ? "white" : "transparent", t.ctx.fillStyle = this._parent.exhausted ? "transparent" : r.Color.white) : (t.ctx.lineWidth = 1, t.ctx.strokeStyle = "white", t.ctx.fillStyle = "white"), this.currentIcon.size(this.iconSize, this.iconSize); var n = this.y - (this.currentIcon.bounding.height + 1) - (this._parent.exhausted && this.hasHold ? i + 1 : i + 2) , a = this.isRTL ? s || "landscape" !== this._parent.orientation ? s && "landscape" === this._parent.orientation ? 28 : 20 : 25 : "landscape" === this._parent.orientation ? 10 : 25 , l = this.isRTL ? this.tooltipX + this.offset + this.width / 2 - this.currentIcon.bounding.width / 2 + a - 4 : this.tooltipX + this.offset + this.width / 2 - this.currentIcon.bounding.width / 2 - a; this.isRTL && !this._parent.exhausted && s && (l += 4), this.currentIcon.move(l, n), this.currentIcon.drawSVG(t), t.ctx.fill(), t.ctx.closePath(), this.currentIcon = !this._parent.exhausted && this.hasHold ? this.lockIcon : this.arrowIcon, this.iconsoffset = this.isRTL ? this._parent.exhausted && this.hasHold ? 14 : 16.5 : this._parent.exhausted && this.hasHold ? 12.5 : 15 } } , f.prototype.getBounding = function() { return { left: this.x - 10, top: this.y - 10, bottom: this.y + this.height + 10, right: this.x + this.width + 10 } } , i.Extend.proto(m, i.BaseComponent), m.prototype.size = function(t, i, e) { this.width = t, this.height = i, this.scale = e, this.bounding = this.getBounding() } , m.prototype.load = function(t, s) { var h = this; return i.Loader.image(t, { crossOrigin: "Anonymous" }).then((function(t) { null !== h.dom && (h.image = t.element.dom, h.width = e.MathUtil.clamp(h.image.width, 50, 200) * s, h.height = e.MathUtil.clamp(h.image.height, 50, 200) * s, e.ErrorUtil.sentryBreadcrumb("DND Asset Loaded: ", "challenge", "info", t)) } )) } , m.prototype.place = function(t, i) { this.x = t, this.y = i, this.bounding = this.getBounding() } , m.prototype.move = function(t, i) { this.x += t, this.y += i, this.bounding = this.getBounding() } , m.prototype.hover = function(t) { this.hovered = t } , m.prototype.draw = function(t) { if (this.image && this.image.src) { var i = this._parent.unlockedStateOffset; t.ctx.roundedRect(this.x - this.offset + 1 - i, this.y - this.offset + 1 - i, this.width + 2 * (this.offset + i) - 2, this.height + 2 * (this.offset + i) - 2, this.radius), t.ctx.fillStyle = this.bgColor, t.ctx.fill(), t.ctx.closePath(), t.ctx.beginPath(), t.ctx.fillStyle = this.imageBgColor, t.ctx.strokeStyle = this.imageBgColor, t.ctx.lineWidth = .5; var e = this.image.width , s = this.image.height , h = this.x + (this.width - e) / 2 , o = this.y + (this.height - s) / 2; t.ctx.drawImage(this.image, h, o, e, s), t.ctx.closePath(), t.ctx.stroke(), t.ctx.fill() } } , m.prototype.getBounding = function() { return { left: this.x - 10, top: this.y - 10, bottom: this.y + this.height + 10, right: this.x + this.width + 10 } } , i.Extend.proto(y, i.BaseComponent), y.prototype.size = function(t, i, e) { this.width = t, this.height = i, this.scale = e, this.bounding = this.getBounding() } , y.prototype.place = function(t, i) { this.x = t, this.y = i, this.bounding = this.getBounding() } , y.prototype.move = function(t, i) { this.x += t, this.y += i, this.bounding = this.getBounding() } , y.prototype.hover = function(t) { this.hovered = t } , y.prototype.draw = function(t) { var i = this._parent.unlockedStateOffset; if (t.ctx.beginPath(), t.ctx.roundedRect(this.x - this.offset - i, this.y - this.offset - i, this.width + 2 * (this.offset + i), this.height + 2 * (this.offset + i), this.radius), t.ctx.strokeStyle = this._parent.exhausted || this.hovered ? r.Color.outlineLight : "transparent", t.ctx.fillStyle = "transparent", t.ctx.lineWidth = 2, t.ctx.closePath(), this._parent.progress > 0 && this._parent.progress < 100) { var e = Math.round(this._parent.progress / 10 * 20 / 10 - 2 * this._parent.step / 10); t.ctx.setLineDash && t.ctx.setLineDash([e, 20 - e]) } t.ctx.stroke(), t.ctx.fill(), t.ctx.setLineDash && t.ctx.setLineDash([]) } , y.prototype.getBounding = function() { return { left: this.x - 10, top: this.y - 10, bottom: this.y + this.height + 10, right: this.x + this.width + 10 } } , i.Extend.proto(x, i.BaseComponent), x.prototype.size = function(t, i, e) { this.width = t, this.height = i, this.scale = e, this.outline.size(t, i, e), this.image.size(t, i, e), this.icon.size(t, i, e), this.bounding = this.getBounding() } , x.prototype.load = function(t, i) { var s = this; return e.ErrorUtil.sentryBreadcrumb("DND DraggableGraphic setData", "challenge", "info", { src: t }), this.image.load(t, i).then((function() { var t = 2 * s.image.offset , e = s.image.width + t , h = s.image.height + t; s.size(e, h, i), s.place(s._parent.x - s.width / 2, s._parent.y - s.height / 2) } )) } , x.prototype.place = function(t, i) { this.x = t, this.y = i, this.outline.place(t, i), this.image.place(t, i), this.icon.place(t, i), this.bounding = this.getBounding() } , x.prototype.move = function(t, i) { this.x += t, this.y += i, this.outline.move(t, i), this.image.move(t, i), this.icon.move(t, i), this.bounding = this.getBounding() } , x.prototype.hitTest = function(t) { var i = !1; return t.x >= this.bounding.left && t.x <= this.bounding.right && t.y >= this.bounding.top && t.y <= this.bounding.bottom && (i = { action: "move", target: this }), i } , x.prototype.hover = function(t) { this.hovered = t, this.outline.hover(t), this.image.hover(t), this.icon.hover(t) } , x.prototype.draw = function(t) { this.progress = this._parent.progress, this.step = this._parent.step, this.isOnHold = 0 !== this._parent.step && this._parent.progress > 0 || 0 === this._parent.step && this._parent.isPressed, this.unlockedStateOffset = e.MathUtil.lerp(this.unlockedStateOffset, (this.isOnHold ? this.mobile ? 18 : 8 : 0) * this.scale || 1, .25), t.ctx.save(), this.outline.draw(t), this.image.draw(t), this.icon.draw(t), t.ctx.restore() } , x.prototype.getBounding = function() { return { left: this.x - 10, top: this.y - 10, bottom: this.y + this.height + 10, right: this.x + this.width + 10 } } , i.Extend.proto(v, i.BaseComponent), v.prototype.load = function(t, i) { var e = this; return new Promise((function(s, h) { try { e.key = t.key, e.value = t.value; var o = e.value.entity_uri; e.draggable.step = e.step, e.draggable.load(o, i).then((function() { s(e.draggable) } ))["catch"]((function(t) { h(t) } )) } catch (n) { h(n) } } )) } , v.prototype.size = function(t, i, e, s, h, o) { this.width = t, this.height = i, this.scale = h, this.draggable.top = e, this.draggable.right = s, this.draggable.mobile = o, this.bounding = this.draggable.bounding } , v.prototype.place = function(t, i) { this.draggable.place(t - this.width / 2, i - this.height / 2), this.x = t, this.y = i, this.bounding = this.draggable.bounding } , v.prototype.getBounding = function() { return this.draggable.getBounding() } , v.prototype.move = function(t) { this.draggable.move(t.x, t.y), this.x += t.x, this.y += t.y, this.bounding = this.draggable.getBounding() } , v.prototype.hitTest = function(t) { return this.draggable.hitTest(t) } , v.prototype.render = function(t) { this.draggable.draw(t) } , v.prototype.replenish = function() { this.setExhausted(!1), this.progress = 0 } , v.prototype.hover = function(t) { return this.draggable.hover(t) } , v.prototype.setExhausted = function(t) { this.draggable.exhausted = t, this.isPressed = t } , i.Extend.proto(b, i.BaseComponent), b.prototype.inBounds = function(t) { return t.x >= this.bounding.left && t.x <= this.bounding.right && t.y >= this.bounding.top && t.y <= this.bounding.bottom } , b.prototype.display = function(t) { this.visible = t } , b.prototype.load = function(t) { var i = this; return new Promise((function(e, s) { try { i.active = !0; var h, o, n = "landscape" === i.orientation ? i.scale : 1, a = []; for (o = 0; o < t.length; o++) { h = new v(i.orientation,i.hold); var r = 0; if (i.hold) { var l = 1 + (new Date).getTime() % 1e3 / 1e3; r = 1 + (l + Math.random() * (3 - l)) } h.step = r, h.index = i.items.length, a.push(h.load(t[o], n)), i.items.push(h) } Promise.all(a).then((function(t) { e(t) } ))["catch"]((function(t) { s(t) } )) } catch (d) { s(d) } } )) } , b.prototype.size = function(t, i, e, s, h, o) { for (var n, a, r = this.items.length, l = "landscape" === this.orientation ? h : 1, d = -1; ++d < r; ) { var c = (n = this.items[d]).draggable.width , p = n.draggable.height; a = { x: n.value.coords[0] * l, y: n.value.coords[1] * l }, n.size(c, p, e, s + t, h, o), n.place(a.x + s, a.y + e) } this.height = i, this.width = t, this.scale = h, this.bounding = { left: s, top: e, bottom: e + i, right: s + t }, this.progressBar.size(162 * l, 46, h), this.progressBar.place(this.bounding.left + this.width * l / 2 - this.progressBar.width * l / 2, this.bounding.top - 8, this.width, this.height) } , b.prototype.handlePress = function(t) { var i = this.progressBar.isPressed , e = this.progressBar.progress < 100 , s = this.items[t]; return !(!s || !i) && (e && this.hold ? (s.progress += s.draggable.step, this.progressBar.progress = s.progress) : (this.progressBar.updating = !0, this.hover(this.coords, "out"), s.setExhausted(!0)), i) } , b.prototype.getLength = function() { return this.items.length } , b.prototype.check = function(t) { for (var i = !1, e = !1, s = this.items.length; --s > -1 && !1 === e; ) e = this.items[s].hitTest(t), i = this.items[s]; return !1 !== e && { action: e.action, target: e.target, draggable: i } } , b.prototype.select = function(t) { return !1 === t.draggable.exhausted && (t.draggable.action = "move", t) } , b.prototype.replenish = function(t) { t >= 0 && (this.items[t].replenish(), this.progressBar.isPressed = !1, this.progressBar.progress = 0, this.progressBar.updating = !1) } , b.prototype.hover = function(t) { for (var i = this.items.length; --i > -1; ) this.items[i].hitTest(t) ? this.items[i].hover(!0) : this.items[i].hover(!1) } , b.prototype.render = function(t) { if (this.visible) { for (var i = -1; ++i < this.items.length; ) i !== this._parent.selectedIndex && this.items[i].render(t); this._parent.selectedIndex >= 0 && this.items[this._parent.selectedIndex].render(t), this.hold && this.progressBar.draw(t) } } , i.Extend.proto(w, i.BaseComponent), w.prototype.display = function(t) { this.visible = t, this.area.display(t), this.draggables.display(t) } , w.prototype.load = function(t) { var i = this; return new Promise((function(e, s) { try { var h = t.task.datapoint_uri , o = t.task.entities; i.display.call(i, !1); for (var n = [i.area.load(h)], a = [], r = 0; r < o.length; r++) a.push({ key: r, value: o[r] }); i.draggables.hold = i.hold, n.push(i.draggables.load(a)), i.userDraw = !1, i.key = t.task.task_key, i.options = a, Promise.all(n).then((function(t) { e(t) } ))["catch"]((function(t) { s(t) } )) } catch (l) { s(l) } } )) } , w.prototype.size = function(t, i, e) { var s, h; "landscape" === this.orientation ? (h = 440, i = (s = 215) / 350) : (s = 350, h = 500), this.area.size(h, s, t, i); var o = this.area.getBounding(); this.draggables.size(h - 20, s, t, o.left, i, e), this.width = h, this.height = s, this.scale = i } , w.prototype.check = function(t) { return this.isUpdating() ? this.draggables.inBounds(t) && "label" : this.draggables.check(t) } , w.prototype.isUpdating = function() { var t = !this.draggables.hold && this.draggables.progressBar.isPressed , i = this.draggables.hold && this.draggables.progressBar.isPressed && this.draggables.progressBar.progress >= 100; return t || i } , w.prototype.selectUI = function(t) { this.coords = t; var i = this.draggables.check(t); if (i) { var e = this.draggables.select(i.draggable); e && (e.coords = t, this.selectedIndex = e.index, this.draggables.progressBar.isPressed = !0) } } , w.prototype.releaseUI = function() { this.draggables.replenish(this.selectedIndex), this.selectedIndex = -1, this.updated = !0 } , w.prototype.moveElement = function(t) { var i = this.draggables.items[this.selectedIndex] , e = i.draggable.getBounding() , s = this.area.getBounding(); t.x + e.right > s.right ? t.x = s.right - e.right : t.x + e.left < s.left && (t.x = s.left - e.left), t.y + e.bottom > s.bottom ? t.y = s.bottom - e.bottom : t.y + e.top < s.top && (t.y = s.top - e.top), i.move(t) } , w.prototype.hoverOn = function(t) { var i = null; return !!this.draggables.inBounds(t) && (i = this.draggables.check(t), this.draggables.hover(t, i ? "over" : "out"), !0) } , w.prototype.hoverOff = function(t) { this.draggables.hover(t, "out") } , w.prototype.getTaskImage = function() { return this.area.image } , w.prototype.prerender = function(t) { this.area.render(t) } , w.prototype.handleProgress = function() { this.selectedIndex >= 0 && (this.draggables.items[this.selectedIndex] && this.draggables.handlePress(this.selectedIndex)) } , w.prototype.render = function(t) { this.handleProgress(), this.area.render(t), this.draggables.render(t) } , w.prototype.getAnswers = function() { for (var t = [], i = this.draggables.items, e = this.area.getBounding(), s = this.area.image.scale, h = 0; h < i.length; h++) { for (var o = [i[h].x, i[h].y], n = i[h].value.entity_id, a = 0; a < o.length; a += 2) o[a] = Math.round((o[a] - e.left) / s), o[a + 1] = Math.round((o[a + 1] - e.top) / s); t.push({ entity_name: n, entity_type: "default", entity_coords: o }) } return t } , i.Extend.proto(_, i.DomComponent), _.prototype.lock = function(t) { this._lock = t } , _.prototype.display = function(t) { this.updated = !1, this.header.display(t) } , _.prototype.focus = function() { this.canvas.focus() } , _.prototype.style = function(t, i) { var e = "landscape" === this.config.orientation , s = i ? (e ? t + 60 : t) / 500 : 1 , o = this.header.style(t, 10, i).height + 10; this.header.setCopy(), this.top = o / s, this._task.size(this.top, s, i), this.canvas.css({ position: "absolute", top: 0, cursor: this._cursor, zIndex: 10 }), o += this._task.height * s, this.canvas.dpr = h.System.mobile && this.canvas.dpr > 1 ? Math.round(this.canvas.dpr) : 2, this.canvas.scale = s, this.canvas.dimensions(t, o), this.css({ width: t, height: o, borderRadius: 4, overflow: "hidden" }), this.width = t, this.height = o, this.scale = s, this.mobile = i } , _.prototype.render = function() { this.canvas.ctx && (this.canvas.clear(), this._task && this._task.render(this.canvas)) } , _.prototype.clear = function() { this._task && (this._task = this._task.destroy()) } , _.prototype.isEmpty = function() { return 0 === this._task.draggables.getLength() } , _.prototype.setup = function(t, i) { this.config = { orientation: i.orientation, skipText: t.show_skip_text, hold: t.normalized, prompt: t.requester_question, example: t.requester_question_example }, this.header.load(this.config.prompt, this.config.example, i), this.header.setCopy() } , _.prototype.createTask = function(t, i, s) { var h = this; return new Promise((function(o, n) { try { var a = []; e.ErrorUtil.sentryBreadcrumb("Create DND Task", "challenge", "info", i), h._task ? h._task = h._task.destroy() : (h.header.load(t, h.config.example, h.config), h.translate()), h._task = h.initComponent(w, { task: s, orientation: h.config.orientation, hold: h.config.hold }), h._task.size(h.top, h.scale, h.mobile); h._task.on("update", (function(t) { h.emit("update", !h.isEmpty()) } )), a.push(h._task.load(i)["catch"]((function(t) { throw t } ))), Promise.all(a).then((function(t) { return h.style.call(h, h.width, h.mobile), h._task.display(!0), o(t) } ))["catch"]((function(t) { return h._task = null, n(t) } )) } catch (r) { n(r) } } )) } , _.prototype.getResults = function() { try { if (!this._task) throw new Error("Task is missing"); var t = this._task.getAnswers(); return [{ key: this._task.key, answers: t }, null] } catch (i) { return [null, i] } } , _.prototype.translate = function() { if (this.header.setCopy(), this.canvas) { var t = n.translate("Image-based CAPTCHA challenge. Please use the 'Accessibility: Retrieve Cookie' or 'Accessibility: Text Challenge' options if available in the challenge menu."); this.canvas.setAttribute("role", "img"), this.canvas.setAttribute("aria-label", t) } } , i.Extend.proto(B, i.DomComponent), B.prototype.style = function(t, i) { var e = this; this.mobile = t <= 650; var s = this.mobile ? 300 : 500; return "landscape" === this.orientation && (this.mobile = !0, s = 440), new Promise((function(t, i) { e.view.style(s, e.mobile), e.css({ width: s, height: e.view.height }), t({ width: s, height: e.view.height, mobile: e.mobile }) } )) } , B.prototype.setup = function(i, s) { var h = this , o = this.view; return this._data = i, this._total = i.tasklist.length, this._answers = Object.create(null), this.served = 0, this.breadcrumbs = this._total, this.emit("display-check", !1), new Promise((function(n, a) { try { if (o.clear(), o.lock(!0), o.display(!1), e.ErrorUtil.sentryBreadcrumb("Serve DND Challenge", "challenge", "info", i), !i.tasklist || 0 === i.tasklist.length) return void a({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Missing tasklist" }); h.resolve = n, h.reject = a, h.orientation = s || "portrait"; var r = { task: i.tasklist[0], answers: i.requester_restricted_answer_set }; o.setup(i, { orientation: s }), o.createTask(i.requester_question, r, i.request_config).then((function() { h.served += 1, h.renderLoop = function() { try { o.render() } catch (i) { e.ErrorUtil.sentryBreadcrumb("DND Challenge render: " + i.message, "challenge", "error", i), a({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Failed to render: " + h.served + " / " + h._total, reason: i }) } } , e.Render.start(h.renderLoop), o.lock(!1), o.display(!0), h.syncCheckState() } ))["catch"]((function(i) { a({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Failed to setup task: " + h.served + " / " + h._total, reason: i }) } )) } catch (l) { a({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Failed to setup task: " + h.served + " / " + h._total, reason: l }) } } )) } , B.prototype.setFocus = function() { this.view.focus() } , B.prototype.syncCheckState = function() { this.emit("display-check", this.view.updated) } , B.prototype.submit = function() { var i = this , s = this._data , h = this.view; try { h.lock(!0); var o, n = this.served === this._total, a = this.view.getResults(), r = a[0], l = a[1]; if (l) throw l; if (this._answers[r.key] = r.answers, !n) { var d = { task: s.tasklist[this.served], answers: s.requester_restricted_answer_set }; return void this.view.createTask(s.requester_question, d, s.request_config).then((function() { i.served += 1, i.syncCheckState(), h.lock(!1) } ))["catch"]((function(e) { i.reject({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Failed to setup task: " + i.served + " / " + i._total, reason: e }) } )) } e.Render.stop(this.renderLoop); for (var c = !1, p = 0; p < s.tasklist.length; p++) if (o = s.tasklist[p].task_key, !this._answers[o]) { c = !0; break } !this._answers || c ? this.reject({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Answers are incomplete" }) : this.resolve(this._answers) } catch (l) { this.reject({ event: t.CaptchaError.CHALLENGE_ERROR, message: "Failed to submit task", reason: l }) } } , B.prototype.translate = function() { this.view.translate() } , B.prototype.onDestroy = function() { e.Render.stop(this.renderLoop) } , B.prototype.theme = function(t, i) { i ? (l.add("custom", l.extend(l.active(), i)), l.use("custom")) : l.use(t) } , B }(_sharedLibs.packages.constants, _sharedLibs.packages.core, _sharedLibs.packages.utils, _sharedLibs.packages.theme, _sharedLibs.packages.device, _sharedLibs.packages.canvas, _sharedLibs.packages.language, _sharedLibs.packages.ui, _sharedLibs.packages.config);