My reaction to an explicit photo sent by a frenemy surprised me: sex advice. | #facebookdating | #tinder | #pof


Photo illustration by Slate. Photos by Getty Images Plus.

How to Do It is Slate’s sex advice column. Have a question? Send it to Stoya and Rich here. It’s anonymous!

Dear How to Do It,

I have I guess what you would call a frenemy. We share a friend group, have worked together, and have hung out alone a couple of times, usually after other people have called it a night and we were still drinking. She’s fun but can be a little bit of a bitch. (We are both cis women in our early 20s.) We have seen each other recently at some (socially distanced, outdoor) gatherings, and I knew she was interested in a guy I’ve been very casual friends-with-benefits with. The other day she texted me a photo where she was on her knees with his dick in front of her face (trust me, it was his dick, it’s … recognizable) and cum all over her mouth and tongue. Caption: “All for meeeeeee!” I was obviously shocked. Less than a minute later she texted again to say, “Holy shit, oops, wrong person.” I did not respond. I feel very sure, based on our relationship and what I know of her, that she was probably drunk and this was kind of a taunt. I don’t care that she fucked him (or just sucked him). Instead, I’m, um, turned on? Something about the competitiveness, and I’ve always had sort of a submissiveness and some bi curiosity. Is there a good script for “I know you were being a bitch, but I actually wouldn’t mind if you sent me more pics like this, because I can only masturbate to this one so many times, and if you wanted to do other kinky stuff, I think I’d be into that too”?

—This Is Weird

Dear This Is Weird,

Yep, that’s basically how you do it, except maybe without the “I know you were being a bitch” part, because you don’t actually know whether she was being a bitch, or even trying to be a bitch, and we generally don’t insult people we want sexual favors from—unless that’s part of the game, of course.

You didn’t ask me to, but I’m still going to wax philosophical about discovery. It’s a beautiful thing to encounter a previously unknown turn-on. Competition can be really hot. So can threesomes, submission, sex with people of the same gender, and whatever vixen/stag-esque scenario seems to be coalescing here.

A word of caution: The two of you share a friend group, and you seem to be headed toward sharing a penis. Think about what you might lose socially if this blows up in your faces, and make sure you’re OK with that risk before you proceed. You can always hop on a dating app that caters to poly folks and look for other people who aren’t in your circle to live out this fantasy with if the potential price is too high.

Dear How to Do It,

My husband has been engaging in online sex chats with other women. I happened to see a charge on our bank account to “imlive.com.” He had spent $100 on a private session with a cam girl. I confronted him immediately, and he apologized profusely. He said he had been drunk and didn’t remember paying that amount of money or the interaction they had together. He is well aware that I am not OK with him interacting sexually with other women. Prior to this, I knew that he looked at porn online. I’m OK with him looking at videos and pictures as long as there’s no interaction with other women. After discussing this and my limits, he said that he had never done this before and wouldn’t do it again. He gave me access to all of his accounts, emails, and credit cards and said I could check them anytime. Cut to a year later and I find more charges, this time a phone sex line. I confronted him again. He flew into a rage, said he was going to have “hella young girls” in our house after I left, and threw all my clothes in the living room. He again said that he didn’t remember anything about the interactions he had. All of this was incredibly confusing to me—we have a very active sex life (three to four times a week.) He says that he is satisfied with our sex life and couldn’t imagine how it could be better.

Predictably, I have found so much more evidence that he is continuing to cheat via online dating apps, cam girl websites, links to reviews of online sex workers. He insists that he has never physically been with another woman. I’ve been tested for STIs, and everything has been negative. I have asked him to be honest with me and to go to counseling. His response was to quit speaking to me for four days, where he spent all of his nonwork time in our bedroom with the door closed. After the silent treatment, he has gone back to our life like nothing happened. Right now, I don’t see any hope for the future. Am I wrong or being unreasonable? We have two kids and share interests, and I thought we were incredibly happy. I don’t want to throw our life away. I would like to try counseling in the hope that he would be honest with me. Is there any hope?

—One More Chance?

Dear One More Chance,

This isn’t so much about sex as it is about concerning mental health flags and betrayal. Let’s start with the former and operate under the assumption that your husband is telling the truth and doesn’t remember these interactions. Your first priority should be to get him to a psychiatrist for an individual evaluation session where the qualified professional can determine if treatment is needed. If your husband is experiencing a psychiatric issue, he may not be in control of his actions in the way you are on a typical day. This isn’t meant as an excuse so much as a caution—if he’s unable to control his impulses to pursue sexual interactions or unable to remember incidents, he could really get himself in some big trouble, on top of continuing to damage his relationship with you. And if he’s in that mental space, safer sex procedures may not be properly adhered to.

But aside from possible issues of mental health, your husband broke your agreed-upon boundaries. I’m sorry. I imagine you’re feeling hurt, devalued, upset, and baffled. No matter what the motivation for this betrayal, your feelings are valid. Give yourself time and space to feel them. Write them out or talk them over with a friend. Seek professional counseling for yourself if you’re able. Couples counseling also seems to be in order. Whether there’s something going on with your mate or not, a therapist seems useful in a situation where people fly off the handle and shout about “hella young girls” and retreat behind closed doors for days at a time.

Dear How to Do It,

I’m 42, straight, male, never married, child-free, and happy. I’ve been blessed with a pretty good dating life and a very satisfying sex life in many different kinds of relationships. Here’s my conundrum: I feel my desire for sex fading away, and I’m absolutely fine with that. I find the reduced sexual desire and reduced sexual thoughts liberating. I would not want my sexual desire to reduce to zero, but I could accept that if it happens. I still enjoy sex, but it’s more about giving pleasure to a valued partner now, by whatever means. It’s unusual but not impossible for me to orgasm. My penis still basically works, but I sense that may be fading too.

Is there something wrong with me? If I believed the hype, I might be panicking and gobbling little blue pills. I just don’t feel the need. Am I missing something? How do I talk about this with dating partners and/or sexual partners? I have had some partners express self-consciousness and self-doubt because I don’t orgasm every time. I don’t want someone to feel inadequate just because I didn’t orgasm.

—Not So Hot or Bothered

Dear Not So Hot or Bothered,

There are a few possibilities here. First, you’re 42, straight, male—and also living through a worsening pandemic, a looming economic crisis, and political chaos. I’ve heard from several people that their desire for sex declined this year. Stress can have that affect. So it’s possible that your desire for and thoughts of sex may return to their previous levels when the dust settles.

This kind of thing could also indicate a problem in your genitals or hormones. Tell your primary care physician what you’ve written here and get their opinion on which tests should be run to make sure this is a natural decline in sexual desire and not an undiagnosed medical issue.

I know a number of men who rarely orgasm, either because they don’t care about it that much, because it takes a considerable amount of time and effort, or because something interrupts sex and they never get around to it. So while I do want you to speak with a doctor, this could be a simple matter of preference or body response—which is actually pretty beautiful! As for how to address this with partners, you state the facts. I can think of two cis men in my life, one of whom I had sex with yesterday morning, who don’t ejaculate often. They simply state the fact and go about their orgasm-giving business. Some partners don’t know what to do with that, which can be seen as a point of usually surmountable incompatibility. Whether there’s some physiological cause, a temporary dip in desire, or a permanent tamping of ardor, keep in mind that you’re not alone.

Dear How to Do It,

I’m a 39-year-old woman in a partnership with a 39-year-old man. I work two full-time jobs from home since the pandemic started, and my husband lost his job. We have two children (1 and 4), one with special needs; an incontinent, diabetic cat; and elderly, immunocompromised parents. Like many in the world right now, we’re so exhausted in every way conceivable, and we don’t have sex nearly as often. We have awesome (formerly regular), mostly vanilla (not in a bad way) sex. When we first got together seven years ago, we established a practice of talking very openly about sex and what we want. I asked him about spanking and how he felt about trying it and he wasn’t enthusiastic. He said he would try it if I wanted, but the sex was awesome, and I thought our relationship didn’t need it.

Recently, I realized that spanking (among other things) helps me cope with such an overbearing amount of stress. It’s a release and a comfort. My partner and I have discussed it, and he’s open to trying it together. The problem I’m having is that he is very concrete. He has a neurodiverse learning style, and he needs to read, see, and research something before he’s able to go forward. When we explored anal a few years ago, I bought a few books and a DVD that really helped ease us into things. So where can I find good instructional videos, books, or websites for a newly emerging dom? Spanking how to’s? Online BDSM shops?

—Scholarly Sadist

Dear Scholarly Sadist,

I have plenty of resources for you and your partner to explore. (Due to my decade-plus in the adult industry, I have some kind of relationship with everyone I’ve recommended here, and all links are NSFW.) I’d start with Sinclair Sexsmith’s blog, sugarbutch.net. Tristan Taormino, Jessica Drake, and Nina Hartley all have explicit sex-ed series with topical videos. The Masocast podcast handles BDSM thoroughly with many guests and has at least a decade of shows. Stockroom, Purple Passion, and Canada’s Come As You Are are all brick-and-mortar sex shops with an eye toward ethics, education, and consent. All have healthy book sections on their websites. You also might check out Pandora Blake’s Dreams of Spanking. This feels like a good start, and every resource is likely to point you toward others.

It also might help for you to write out what specifically about spanking works for you. Write your own spanking manual, as it were. If writing doesn’t work for you, an interview-style conversation might be worth a try. The more detail you can give him about the sensations you enjoy and how to cause them, the better he’ll be able to give you what you crave.

—Stoya

More How to Do It

I’m a woman with a new boyfriend who is very sweet and, frankly, very hot. We have sex constantly, and when we aren’t, I’m thinking about it. But we recently started staying over at each other’s places every weekend, and a problem is emerging. When we are both asleep, he will try to initiate sex with me. I’ll wake up and kind of brush him off, but he doesn’t seem to wake up and doesn’t always stop right away. Recently, he got fully on top of me before I nearly screamed at him and it seemed to break the spell. After that, I finally brought this up, and he seemed horrified and said he had no memory of it at all; he said this has never happened before. I believe him but I am a little unnerved. Does this happen to other people? What if I can’t get him to stop? I haven’t stayed with him for a couple weeks because of this, and I’m not sure what to do.

'; }, t.createTrackPixelIframeHtml = se, t.getValueString = de, t.uniques = fe, t.flatten = le, t.getBidRequest = function (n, e) { return n ? (e.some(function (e) { var t = c()(e.bids, function (t) { return ["bidId"https://slate.com/,"adId"https://slate.com/,"bid_id"].some(function (e) { return t[e] === n; }); }); return t && (r = t), t; }), r) : void 0; var r; }, t.getKeys = pe, t.getValue = ge, t.getKeyByValue = function (e, t) { for (var n in e) { if (e.hasOwnProperty(n) && e[n] === t) return n; } }, t.getBidderCodes = function () { return (0 t[n] ? -1 : 0; }; }, t.parseQS = Ie, t.formatQS = Ce, t.parseUrl = function (e, t) { var n = document.createElement("a"); t && "noDecodeWholeURL" in t && t.noDecodeWholeURL ? n.href = e : n.href = decodeURIComponent(e); var r = t && "decodeSearchAsString" in t && t.decodeSearchAsString; return { href: n.href, protocol: (n.protocol "https://slate.com/"https://slate.com/"https://slate.com/").replace(/:$/, "https://slate.com/"), hostname: n.hostname, port: +n.port, pathname: n.pathname.replace(/^(?!/)/, "/"), search: r ? n.search : k.parseQS(n.search "https://slate.com/"https://slate.com/"https://slate.com/"), hash: (n.hash "https://slate.com/"https://slate.com/"https://slate.com/").replace(/^#/, "https://slate.com/"), host: n.host "https://slate.com/" window.location.host }; }, t.buildUrl = function (e) { return (e.protocol "https://slate.com/"https://slate.com/"http") + "://" + (e.host "https://slate.com/" e.hostname + (e.port ? ":".concat(e.port) : "https://slate.com/")) + (e.pathname "https://slate.com/"https://slate.com/"https://slate.com/") + (e.search ? "?".concat(k.formatQS(e.search "https://slate.com/"https://slate.com/"https://slate.com/")) : "https://slate.com/") + (e.hash ? "#".concat(e.hash) : "https://slate.com/"); }, t.deepEqual = je, t.mergeDeep = we, t.cyrb53Hash = function (e) { for (var t, n = 1 >> 16, 2246822507) ^ r(o ^ o >>> 13, 3266489909), (4294967296 * (2097151 & (o = r(o ^ o >>> 16, 2246822507) ^ r(i ^ i >>> 13, 3266489909))) + (i >>> 0)).toString(); }; var r = n(3), i = n(159), o = n.n(i), a = n(10), c = n.n(a), u = n(12), s = n.n(u), d = n(160); n.d(t, "deepAccess", function () { return d.a; }); var f = n(161); function l(e, t) { return function (e) { if (Array.isArray(e)) return e; }(e) "https://slate.com/" function (e, t) { if ("undefined" == typeof Symbol "https://slate.com/" !(Symbol.iterator in Object(e))) return; var n = [], r = !0, i = !1, o = void 0; try { for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t "https://slate.com/" n.length !== t); r = !0) { ; } } catch (e) { i = !0, o = e; } finally { try { r "https://slate.com/" null == c.return "https://slate.com/" c.return(); } finally { if (i) throw o; } } return n; }(e, t) "https://slate.com/" g(e, t) "https://slate.com/" function () { throw new TypeError("Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function p(e) { return function (e) { if (Array.isArray(e)) return b(e); }(e) "https://slate.com/" function (e) { if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e); }(e) "https://slate.com/" g(e) "https://slate.com/" function () { throw new TypeError("Invalid attempt to spread non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function g(e, t) { if (e) { if ("string" == typeof e) return b(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); return "Object" === n && e.constructor && (n = e.constructor.name), "Map" === n "https://slate.com/"https://slate.com/"Set" === n ? Array.from(e) : "Arguments" === n "https://slate.com/" /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? b(e, t) : void 0; } } function b(e, t) { (null == t "https://slate.com/" t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n n ')) : "https://slate.com/"; } function de(e, t, n) { return null == t ? n : Z(t) ? t : te(t) ? t.toString() : void k.logWarn("Unsuported type for param: " + e + " required type: String"); } function fe(e, t, n) { return n.indexOf(e) === t; } function le(e, t) { return e.concat(t); } function pe(e) { return Object.keys(e); } function ge(e, t) { return e[t]; } function be() { if (window.googletag && X(window.googletag.pubads) && X(window.googletag.pubads().getSlots)) return !0; } var ve = me("timeToRespond", function (e, t) { return t e.length) && (t = e.length); for (var n = 0, r = new Array(t); n o.lastUpdated + 24 * r * 60 * 60 * 1e3) && Object(p.a)(t.url, { success: function success(e) { try { e = JSON.parse(e); var t = { lastUpdated: Object(m.timestamp)(), mapping: e.mapping }; I.setDataInLocalStorage(i, JSON.stringify(t)); } catch (e) { Object(m.logError)("Failed to parse ".concat(n, " bidder translation mapping file")); } }, error: function error() { Object(m.logError)("Failed to load ".concat(n, " bidder translation file")); } }); } catch (e) { Object(m.logError)("Failed to parse ".concat(n, " bidder translation mapping file")); } } }), e.call(this, t); } function U(e, t, n) { function r(e) { return "Invalid bid from ".concat(t.bidderCode, ". Ignoring bid: ").concat(e); } return e ? t ? (i = Object.keys(t), C.every(function (e) { return l()(i, e) && !l()([void 0, null], t[e]); }) ? "native" !== t.mediaType "https://slate.com/" Object(o.f)(t, n) ? "video" !== t.mediaType "https://slate.com/" Object(a.d)(t, n) ? !("banner" === t.mediaType && !function (e, t, n) { if ((t.width "https://slate.com/" 0 === parseInt(t.width, 10)) && (t.height "https://slate.com/" 0 === parseInt(t.height, 10))) return t.width = parseInt(t.width, 10), t.height = parseInt(t.height, 10), 1; var r = Object(m.getBidderRequest)(n, t.bidderCode, e), i = r && r.bids && r.bids[0] && r.bids[0].sizes, o = Object(m.parseSizesInput)(i); if (1 === o.length) { var a = A(o[0].split("x"), 2), c = a[0], u = a[1]; return t.width = parseInt(c, 10), t.height = parseInt(u, 10), 1; } }(e, t, n)) "https://slate.com/" (Object(m.logError)(r("Banner bids require a width and height")), !1) : (Object(m.logError)(r("Video bid does not have required vastUrl or renderer property")), !1) : (Object(m.logError)(r("Native bid missing some required properties.")), !1) : (Object(m.logError)(r("Bidder ".concat(t.bidderCode, " is missing required params. Check http://prebid.org/dev-docs/bidder-adapter-1.html for list of params."))), !1)) : (Object(m.logWarn)("Some adapter tried to add an undefined bid for ".concat(e, ".")), !1) : (Object(m.logWarn)("No adUnitCode was supplied to addBidResponse."), !1); var i; } Object(b.a)("checkAdUnitSetup").before(B); }, 10: function _(e, t, n) { var r = n(97); e.exports = r; }, 100: function _(e, t, n) { "use strict"; var r = {}.propertyIsEnumerable, i = Object.getOwnPropertyDescriptor, o = i && !r.call({ 1: 2 }, 1); t.f = o ? function (e) { var t = i(this, e); return !!t && t.enumerable; } : r; }, 101: function _(e, t, n) { function r(e, t) { var n = c[a(e)]; return n == s "https://slate.com/" n != u && ("function" == typeof t ? i(t) : !!t); } var i = n(31), o = /#|.prototype./, a = r.normalize = function (e) { return String(e).replace(o, ".").toLowerCase(); }, c = r.data = {}, u = r.NATIVE = "N", s = r.POLYFILL = "P"; e.exports = r; }, 102: function _(e, t, n) { var r = n(26), i = n(103), o = n(20)("species"); e.exports = function (e, t) { var n; return i(e) && ("function" == typeof (n = e.constructor) && (n === Array "https://slate.com/" i(n.prototype)) "https://slate.com/" r(n) && null === (n = n[o])) && (n = void 0), new (void 0 === n ? Array : n)(0 === t ? 0 : t); }; }, 103: function _(e, t, n) { var r = n(48); e.exports = Array.isArray "https://slate.com/" function (e) { return "Array" == r(e); }; }, 104: function _(e, t, n) { var r = n(25), i = n(32); e.exports = function (t, n) { try { i(r, t, n); } catch (e) { r[t] = n; } return n; }; }, 105: function _(e, t, n) { var r = n(76); e.exports = r && !Symbol.sham && "symbol" == _typeof(Symbol.iterator); }, 106: function _(e, t, n) { n(107); var r = n(52); e.exports = r("Array"https://slate.com/,"includes"); }, 107: function _(e, t, n) { "use strict"; var r = n(14), i = n(77).includes, o = n(51); r({ target: "Array", proto: !0, forced: !n(60)("indexOf", { ACCESSORS: !0, 1: 0 }) }, { includes: function includes(e, t) { return i(this, e, 1 i;) { a(r, n = t[i++]) && (~u(o, n) "https://slate.com/" o.push(n)); } return o; }; }, 12: function _(e, t, n) { var r = n(106); e.exports = r; }, 120: function _(e, t, n) { var r = n(28); e.exports = r("document"https://slate.com/,"documentElement"); }, 121: function _(e, t, n) { var i = n(85); e.exports = function (e, t, n) { for (var r in t) { n && n.unsafe && e[r] ? e[r] = t[r] : i(e, r, t[r], n); } return e; }; }, 122: function _(e, t, n) { "use strict"; function i() { return this; } var o = n(86).IteratorPrototype, a = n(83), c = n(46), u = n(64), s = n(38); e.exports = function (e, t, n) { var r = t + " Iterator"; return e.prototype = a(o, { next: c(1, n) }), u(e, r, !1, !0), s[r] = i, e; }; }, 123: function _(e, t, n) { var r = n(31); e.exports = !r(function () { function e() {} return e.prototype.constructor = null, Object.getPrototypeOf(new e()) !== e.prototype; }); }, 124: function _(e, t, n) { var i = n(15), o = n(125); e.exports = Object.setPrototypeOf "https://slate.com/" ("__proto__" in {} ? function () { var n, r = !1, e = {}; try { (n = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__").set).call(e, []), r = e instanceof Array; } catch (e) {} return function (e, t) { return i(e), o(t), r ? n.call(e, t) : e.__proto__ = t, e; }; }() : void 0); }, 125: function _(e, t, n) { var r = n(26); e.exports = function (e) { if (!r(e) && null !== e) throw TypeError("Can't set " + String(e) + " as a prototype"); return e; }; }, 126: function _(e, t, n) { "use strict"; var r = n(28), i = n(33), o = n(20), a = n(30), c = o("species"); e.exports = function (e) { var t = r(e), n = i.f; a && t && !t[c] && n(t, c, { configurable: !0, get: function get() { return this; } }); }; }, 127: function _(e, t) {}, 128: function _(e, t, n) { function r(c) { return function (e, t) { var n, r, i = String(s(e)), o = u(t), a = i.length; return o e.length) && (t = e.length); for (var n = 0, r = new Array(t); n = t.length ? { value: e.target = void 0, done: !0 } : "keys" == n ? { value: r, done: !1 } : "values" == n ? { value: t[r], done: !1 } : { value: [r, t[r]], done: !1 }; }, "values"), o.Arguments = o.Array, i("keys"), i("values"), i("entries"); }, 131: function _(e, t) { e.exports = { CSSRuleList: 0, CSSStyleDeclaration: 0, CSSValueList: 0, ClientRectList: 0, DOMRectList: 0, DOMStringList: 0, DOMTokenList: 1, DataTransferItemList: 0, FileList: 0, HTMLAllCollection: 0, HTMLCollection: 0, HTMLFormElement: 0, HTMLSelectElement: 0, MediaList: 0, MimeTypeArray: 0, NamedNodeMap: 0, NodeList: 1, PaintRequestList: 0, Plugin: 0, PluginArray: 0, SVGLengthList: 0, SVGNumberList: 0, SVGPathSegList: 0, SVGPointList: 0, SVGStringList: 0, SVGTransformList: 0, SourceBufferList: 0, StyleSheetList: 0, TextTrackCueList: 0, TextTrackList: 0, TouchList: 0 }; }, 132: function _(e, t, n) { n(14)({ target: "Set", stat: !0 }, { from: n(133) }); }, 133: function _(e, t, n) { "use strict"; var s = n(18), d = n(23), f = n(17); e.exports = function (e, t, n) { var r, i, o, a, c = arguments.length, u = 1 >> 0, o = 0; if (t) n = t;else { for (; o i && (r = !1)), !r; }), r && e.run(), r; } function g(e, t) { void 0 === e[t] ? e[t] = 1 : e[t]++; } p(e) "https://slate.com/" (P.logWarn("queueing auction due to limited endpoint capacity"), K.push(e)); } return { addBidReceived: function addBidReceived(e) { f = f.concat(e); }, addNoBid: function addNoBid(e) { l = l.concat(e); }, executeCallback: O, callBids: function callBids() { b = W, t = Date.now(); var e = q.makeBidRequests(y, t, p, m, s); P.logInfo("Bids Requested for Auction with id: ".concat(p), e), e.length e.getTimeout() + B.b.getConfig("timeoutBuffer") && e.executeCallback(!0); } function $(e, t) { var n = e.getBidRequests(), r = U()(n, function (e) { return e.bidderCode === t.bidderCode; }); !function (t, e) { var n; { var r; t.bidderCode && (0 e.length) && (t = e.length); for (var n = 0, r = new Array(t); n = h.syncsPerBidder ? a.logWarn('Number of user syncs exceeded for "https://slate.com/".concat(t, "https://slate.com/"https://slate.com/")) : p.canBidderRegisterSync(e, t) ? (g[e].push([t, n]), (r = v)[i = t] ? r[i] += 1 : r[i] = 1, void (v = r)) : a.logWarn('Bidder "https://slate.com/".concat(t, "https://slate.com/" not permitted to register their "https://slate.com/").concat(e, "https://slate.com/" userSync pixels.')) : a.logWarn("Bidder is required for registering sync") : a.logWarn('User sync type "https://slate.com/".concat(e, "https://slate.com/" not supported')); var r, i; }, p.syncUsers = function () { var e = 0 e.length) && (t = e.length); for (var n = 0, r = new Array(t); n Object(S.timestamp)(); }, s = function s(e) { return e && (e.status && !O()([w.BID_STATUS.RENDERED], e.status) "https://slate.com/" !e.status); }; function U(e, r, t) { var i = 2 t.max ? e : t; }, { max: 0 }), g = 0, b = v()(e.buckets, function (e) { if (n > p.max * r) { var t = e.precision; void 0 === t && (t = y), i = (e.max * r).toFixed(t); } else { if (n " + e + "" + g + ">"; } var o, a = n(15), c = n(117), u = n(84), s = n(53), d = n(120), f = n(73), l = n(65), p = "prototype", g = "script", b = l("IE_PROTO"), _v = function v() { try { o = document.domain && new ActiveXObject("htmlfile"); } catch (e) {} var e, t; _v = o ? function (e) { e.write(i("https://slate.com/")), e.close(); var t = e.parentWindow.Object; return e = null, t; }(o) : ((t = f("iframe")).style.display = "none", d.appendChild(t), t.src = String("javascript:"), (e = t.contentWindow.document).open(), e.write(i("document.F=Object")), e.close(), e.F); for (var n = u.length; n--;) { delete _v[p][u[n]]; } return _v(); }; s[b] = !0, e.exports = Object.create "https://slate.com/" function (e, t) { var n; return null !== e ? (r[p] = a(e), n = new r(), r[p] = null, n[b] = e) : n = _v(), void 0 === t ? n : c(n, t); }; }, 84: function _(e, t) { e.exports = ["constructor"https://slate.com/,"hasOwnProperty"https://slate.com/,"isPrototypeOf"https://slate.com/,"propertyIsEnumerable"https://slate.com/,"toLocaleString"https://slate.com/,"toString"https://slate.com/,"valueOf"]; }, 85: function _(e, t, n) { var i = n(32); e.exports = function (e, t, n, r) { r && r.enumerable ? e[t] = n : i(e, t, n); }; }, 86: function _(e, t, n) { "use strict"; var r, i, o, a = n(87), c = n(32), u = n(27), s = n(20), d = n(16), f = s("iterator"), l = !1; [].keys && ("next" in (o = [].keys()) ? (i = a(a(o))) !== Object.prototype && (r = i) : l = !0), null == r && (r = {}), d "https://slate.com/" u(r, f) "https://slate.com/" c(r, f, function () { return this; }), e.exports = { IteratorPrototype: r, BUGGY_SAFARI_ITERATORS: l }; }, 87: function _(e, t, n) { var r = n(27), i = n(57), o = n(65), a = n(123), c = o("IE_PROTO"), u = Object.prototype; e.exports = a ? Object.getPrototypeOf : function (e) { return e = i(e), r(e, c) ? e[c] : "function" == typeof e.constructor && e instanceof e.constructor ? e.constructor.prototype : e instanceof Object ? u : null; }; }, 88: function _(e, t, n) { "use strict"; var i = n(128).charAt, r = n(54), o = n(66), a = "String Iterator", c = r.set, u = r.getterFor(a); o(String, "String", function (e) { c(this, { type: a, string: String(e), index: 0 }); }, function () { var e, t = u(this), n = t.string, r = t.index; return r >= n.length ? { value: void 0, done: !0 } : (e = i(n, r), t.index += e.length, { value: e, done: !1 }); }); }, 89: function _(e, t, n) { var r = n(15), i = n(61); e.exports = function (e) { var t = i(e); if ("function" != typeof t) throw TypeError(String(e) + " is not iterable"); return r(t.call(e)); }; }, 9: function _(e, t, n) { "use strict"; Object.defineProperty(t, "__esModule", { value: !0 }), n.d(t, "gdprDataHandler", function () { return R; }), n.d(t, "uspDataHandler", function () { return k; }), t.setS2STestingModule = function (e) { I = e; }; var S = n(0), p = n(92), g = n(37), l = n(1), h = n(4), A = n(3), r = n(13), i = n(12), E = n.n(i), o = n(10), O = n.n(o), b = n(67), T = n(21); function m(e, t) { return function (e) { if (Array.isArray(e)) return e; }(e) "https://slate.com/" function (e, t) { if ("undefined" == typeof Symbol "https://slate.com/" !(Symbol.iterator in Object(e))) return; var n = [], r = !0, i = !1, o = void 0; try { for (var a, c = e[Symbol.iterator](); !(r = (a = c.next()).done) && (n.push(a.value), !t "https://slate.com/" n.length !== t); r = !0) { ; } } catch (e) { i = !0, o = e; } finally { try { r "https://slate.com/" null == c.return "https://slate.com/" c.return(); } finally { if (i) throw o; } } return n; }(e, t) "https://slate.com/" function (e, t) { if (!e) return; if ("string" == typeof e) return a(e, t); var n = Object.prototype.toString.call(e).slice(8, -1); "Object" === n && e.constructor && (n = e.constructor.name); if ("Map" === n "https://slate.com/"https://slate.com/"Set" === n) return Array.from(e); if ("Arguments" === n "https://slate.com/" /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return a(e, t); }(e, t) "https://slate.com/" function () { throw new TypeError("Invalid attempt to destructure non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }(); } function a(e, t) { (null == t "https://slate.com/" t > e.length) && (t = e.length); for (var n = 0, r = new Array(t); n n n n prebid.org wrappern n ").concat(r, "n n n n ")), ttlseconds: Number(e.ttl) }; return o.b.getConfig("cache.vasttrack") && (i.bidder = e.bidder, i.bidid = e.requestId, a.isPlainObject(this) && this.hasOwnProperty("auctionStart") && (i.timestamp = this.auctionStart)), "string" == typeof e.customCacheKey && "https://slate.com/" !== e.customCacheKey && (i.key = e.customCacheKey), i; } }, 97: function _(e, t, n) { n(98); var r = n(52); e.exports = r("Array"https://slate.com/,"find"); }, 98: function _(e, t, n) { "use strict";

var r = n(14), i = n(56).find, o = n(51), a = n(60), c = "find", u = !0, s = a(c); c in [] && Array(1).find(function () { u = !1; }), r({ target: "Array", proto: !0, forced: u "https://slate.com/" !s }, { find: function find(e, t) { return i(this, e, 1 e.length) && (r = e.length);

for (var a = 0, t = new Array(r); a |

)/gm, "t").replace(/(

|

)/gm, "n").replace(/^
/gm, "https://slate.com/").replace(/(
n|
)/gm, "n").replace(/

(.*)

/gm, "nn===== $1 =====nn").replace(/(.*)[2-6]>/gm, "nn*** $1 ***nn").replace(/(]+)>)/gim, "https://slate.com/"), w.logMessage("https://console.appnexus.com/docs/understanding-the-debug-auction"), w.logMessage(a)), o; var t = "in response for ".concat(s.bidderCode, " adapter"); return e && e.error && (t += ": ".concat(e.error)), w.logError(t), o; }, getMappingFileInfo: function getMappingFileInfo() { return { url: "https://acdn.adnxs.com/prebid/appnexus-mapping/mappings.json", refreshInDays: 2 }; }, getUserSyncs: function getUserSyncs(e) { if (e.iframeEnabled) return [{ type: "iframe", url: "https://acdn.adnxs.com/dmp/async_usersync.html" }]; }, transformBidParams: function transformBidParams(a, e) { return a = w.convertTypes({ member: "string", invCode: "string", placementId: "number", keywords: w.transformBidderParamKeywords, publisherId: "number" }, a), e && (a.use_pmt_rule = "boolean" == typeof a.usePaymentRule && a.usePaymentRule, a.usePaymentRule && delete a.usePaymentRule, I(a.keywords) && a.keywords.forEach(P), Object.keys(a).forEach(function (e) { var r = w.convertCamelToUnderscore(e); r !== e && (a[r] = a[e], delete a[e]); })), a; }, onBidWon: function onBidWon(e) { e.native && function (e) { var r = function (e) { var r; if (w.isStr(e) && U(e)) r = e;else if (w.isArray(e)) for (var a = 0; a nfor (var i = 0; i ');
}

function tryGetCriteoFastBid() {
try {
var fastBidStorageKey = "criteo_fast_bid",
hashPrefix = "// Hash: ",
fastBidFromStorage = storage.getDataFromLocalStorage(fastBidStorageKey),
firstLineEndPosition,
firstLine,
publisherTagHash,
publisherTag;
null !== fastBidFromStorage && (firstLineEndPosition = fastBidFromStorage.indexOf("n"), firstLine = fastBidFromStorage.substr(0, firstLineEndPosition).trim(), firstLine.substr(0, hashPrefix.length) !== hashPrefix ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("No hash found in FastBid"), storage.removeDataFromLocalStorage(fastBidStorageKey)) : (publisherTagHash = firstLine.substr(hashPrefix.length), publisherTag = fastBidFromStorage.substr(firstLineEndPosition + 1), Object(__WEBPACK_IMPORTED_MODULE_6_criteo_direct_rsa_validate_build_verify_js__.verify)(publisherTag, publisherTagHash, FAST_BID_PUBKEY_N, FAST_BID_PUBKEY_E) ? (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logInfo("Using Criteo FastBid"), eval(publisherTag)) : (__WEBPACK_IMPORTED_MODULE_4__src_utils_js__.logWarn("Invalid Criteo FastBid found"), storage.removeDataFromLocalStorage(fastBidStorageKey))));
} catch (t) {}
}

Object(__WEBPACK_IMPORTED_MODULE_1__src_adapters_bidderFactory_js__.registerBidder)(spec);
},
377: function _(t, e, r) {
"use strict";

Object.defineProperty(e, "__esModule", {
value: !0
});
var a = r(378),
n = r(379);

e.verify = function (t, e, r, i) {
var s = new a.BigInteger(a.b64toHex(e)),
o = new a.BigInteger(a.b64toHex(r)),
_ = s.modPowInt(i, o);

return a.removeExtraSymbols(_.toHexString()) === n.Sha256.hash(t);
};
},
378: function _(t, e, r) {
"use strict";

var i;
Object.defineProperty(e, "__esModule", {
value: !0
});
var s = (T.prototype.toHexString = function () {
if (this.s > s) && (e = !0, r = c(t)); 0 > (s += this.DB - 4)) : (t = this[i] >> (s -= 4) & 15, s this.DB ? (this[this.t - 1] |= (s & (1 > this.DB - i) : this[this.t - 1] |= s = this.DB && (i -= this.DB));
}

this.clamp(), r && T.ZERO.subTo(this, this);
}
}, T.prototype.negate = function () {
var t = b();
return T.ZERO.subTo(this, t), t;
}, T.prototype.abs = function () {
return this.s > i | _, _ = (this[a] & s) = e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1);
}

0 > this.F2 : 0),
u = this.FV / d,
h = (1 = this.t) e.t = 0;else {
var i = t % this.DB,
s = this.DB - i,
o = (1 > i;

for (var _ = r + 1; _ > i;
}

0 >= this.DB;
}

if (t.t >= this.DB;
}

i += this.s;
} else {
for (i += this.s; r >= this.DB;
}

i -= t.s;
}

e.s = i > 15; 0 > 15,
c = a * n + p * _;
s = ((n = _ * n + ((32767 & c) >> 30) + (c >>> 15) + a * p + (s >>> 30), r[i++] = 1073741823 & n;
}

return s;
}, T.prototype.am3 = function (t, e, r, i, s, o) {
for (var _ = 16383 & e, a = e >> 14; 0 > 14,
c = a * n + p * _;
s = ((n = _ * n + ((16383 & c) > 28) + (c >> 14) + a * p, r[i++] = 268435455 & n;
}

return s;
}, T);

function T(t) {
null !== t && this.fromHexString(t);
}

function b() {
return new s(null);
}

function D(t) {
var e,
r = 1;
return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r;
}

e.BigInteger = s, e.nbi = b, e.nbits = D;

for (var o = [], _ = "0".charCodeAt(0), a = 0; a > 2), i = 3 & o, 1) : 1 == r ? (e += c(i > 4), i = 15 & o, 2) : 2 == r ? (e += c(i), e += c(o >> 2), i = 3 & o, 3) : (e += c(i > 4), e += c(15 & o), 0));
}

return 1 == r && (e += c(i > 15) * this.mpl & this.um) = t.DV;) {
t[r] -= t.DV, t[++r]++;
}
}

t.clamp(), t.drShiftTo(this.m.t, t), 0 > 15, this.um = (1 >> 0;

for (o[s - 1][14] = Math.floor(n), o[s - 1][15] = p, _ = 0; _ >> 0;
}

for (var u = r[0], h = r[1], l = r[2], f = r[3], E = r[4], v = r[5], m = r[6], T = r[7], d = 0; d >> 0, f = l, l = h, h = u, u = b + D >>> 0;
}

r[0] = r[0] + u >>> 0, r[1] = r[1] + h >>> 0, r[2] = r[2] + l >>> 0, r[3] = r[3] + f >>> 0, r[4] = r[4] + E >>> 0, r[5] = r[5] + v >>> 0, r[6] = r[6] + m >>> 0, r[7] = r[7] + T >>> 0;
}

for (var P = new Array(r.length), T = 0; T >> t | e >> 3;
}, y.q1 = function (t) {
return y.ROTR(17, t) ^ y.ROTR(19, t) ^ t >>> 10;
}, y.Ch = function (t, e, r) {
return t & e ^ ~t & r;
}, y.Maj = function (t, e, r) {
return t & e ^ t & r ^ e & r;
}, y);

function y() {}

e.Sha256 = i;
}
}, [375]);
pbjsChunk([218], {
501: function _(e, r, t) {
e.exports = t(502);
},
502: function _(e, r, t) {
"use strict";

Object.defineProperty(r, "__esModule", {
value: !0
}), t.d(r, "spec", function () {
return c;
});
var F = t(0),
j = t(2),
B = t(3),
i = t(10),
l = t.n(i),
n = t(503),
s = t.n(n),
a = t(1);

function J(e) {
return function (e) {
if (Array.isArray(e)) return o(e);
}(e) "https://slate.com/" function (e) {
if ("undefined" != typeof Symbol && Symbol.iterator in Object(e)) return Array.from(e);
}(e) "https://slate.com/" function (e, r) {
if (!e) return;
if ("string" == typeof e) return o(e, r);
var t = Object.prototype.toString.call(e).slice(8, -1);
"Object" === t && e.constructor && (t = e.constructor.name);
if ("Map" === t "https://slate.com/"https://slate.com/"Set" === t) return Array.from(e);
if ("Arguments" === t "https://slate.com/" /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)) return o(e, r);
}(e) "https://slate.com/" function () {
throw new TypeError("Invalid attempt to spread non-iterable instance.nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}();
}

function o(e, r) {
(null == r "https://slate.com/" r > e.length) && (r = e.length);

for (var t = 0, i = new Array(r); t e.length) && (r = e.length);

for (var t = 0, i = new Array(r); t n

nnx3c!-- Rubicon Project Ad Tag --x3en
nn

nn