1var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.createTemplateTagFirstArg=function(l){return l.raw=l};$jscomp.createTemplateTagFirstArgWithRaw=function(l,v){l.raw=v;return l};$jscomp.arrayIteratorImpl=function(l){var v=0;return function(){return v<l.length?{done:!1,value:l[v++]}:{done:!0}}};$jscomp.arrayIterator=function(l){return{next:$jscomp.arrayIteratorImpl(l)}}; 2$jscomp.makeIterator=function(l){var v="undefined"!=typeof Symbol&&Symbol.iterator&&l[Symbol.iterator];if(v)return v.call(l);if("number"==typeof l.length)return $jscomp.arrayIterator(l);throw Error(String(l)+" is not an iterable or ArrayLike");};$jscomp.arrayFromIterator=function(l){for(var v,E=[];!(v=l.next()).done;)E.push(v.value);return E};$jscomp.arrayFromIterable=function(l){return l instanceof Array?l:$jscomp.arrayFromIterator($jscomp.makeIterator(l))}; 3$jscomp.owns=function(l,v){return Object.prototype.hasOwnProperty.call(l,v)};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;$jscomp.ISOLATE_POLYFILLS=!1;$jscomp.FORCE_POLYFILL_PROMISE=!1;$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION=!1; 4$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(l,v,E){if(l==Array.prototype||l==Object.prototype)return l;l[v]=E.value;return l};$jscomp.getGlobal=function(l){l=["object"==typeof globalThis&&globalThis,l,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof global&&global];for(var v=0;v<l.length;++v){var E=l[v];if(E&&E.Math==Math)return E}throw Error("Cannot find global object");};$jscomp.global=$jscomp.getGlobal(this); 5$jscomp.IS_SYMBOL_NATIVE="function"===typeof Symbol&&"symbol"===typeof Symbol("x");$jscomp.TRUST_ES6_POLYFILLS=!$jscomp.ISOLATE_POLYFILLS||$jscomp.IS_SYMBOL_NATIVE;$jscomp.polyfills={};$jscomp.propertyToPolyfillSymbol={};$jscomp.POLYFILL_PREFIX="$jscp$";var $jscomp$lookupPolyfilledValue=function(l,v,E){if(!E||null!=l){E=$jscomp.propertyToPolyfillSymbol[v];if(null==E)return l[v];E=l[E];return void 0!==E?E:l[v]}}; 6$jscomp.polyfill=function(l,v,E,N){v&&($jscomp.ISOLATE_POLYFILLS?$jscomp.polyfillIsolated(l,v,E,N):$jscomp.polyfillUnisolated(l,v,E,N))};$jscomp.polyfillUnisolated=function(l,v,E,N){E=$jscomp.global;l=l.split(".");for(N=0;N<l.length-1;N++){var O=l[N];if(!(O in E))return;E=E[O]}l=l[l.length-1];N=E[l];v=v(N);v!=N&&null!=v&&$jscomp.defineProperty(E,l,{configurable:!0,writable:!0,value:v})}; 7$jscomp.polyfillIsolated=function(l,v,E,N){var O=l.split(".");l=1===O.length;N=O[0];N=!l&&N in $jscomp.polyfills?$jscomp.polyfills:$jscomp.global;for(var db=0;db<O.length-1;db++){var sb=O[db];if(!(sb in N))return;N=N[sb]}O=O[O.length-1];E=$jscomp.IS_SYMBOL_NATIVE&&"es6"===E?N[O]:null;v=v(E);null!=v&&(l?$jscomp.defineProperty($jscomp.polyfills,O,{configurable:!0,writable:!0,value:v}):v!==E&&(void 0===$jscomp.propertyToPolyfillSymbol[O]&&(E=1E9*Math.random()>>>0,$jscomp.propertyToPolyfillSymbol[O]= 8$jscomp.IS_SYMBOL_NATIVE?$jscomp.global.Symbol(O):$jscomp.POLYFILL_PREFIX+E+"$"+O),$jscomp.defineProperty(N,$jscomp.propertyToPolyfillSymbol[O],{configurable:!0,writable:!0,value:v})))};$jscomp.assign=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.assign?Object.assign:function(l,v){for(var E=1;E<arguments.length;E++){var N=arguments[E];if(N)for(var O in N)$jscomp.owns(N,O)&&(l[O]=N[O])}return l};$jscomp.polyfill("Object.assign",function(l){return l||$jscomp.assign},"es6","es3"); 9$jscomp.underscoreProtoCanBeSet=function(){var l={a:!0},v={};try{return v.__proto__=l,v.a}catch(E){}return!1};$jscomp.setPrototypeOf=$jscomp.TRUST_ES6_POLYFILLS&&"function"==typeof Object.setPrototypeOf?Object.setPrototypeOf:$jscomp.underscoreProtoCanBeSet()?function(l,v){l.__proto__=v;if(l.__proto__!==v)throw new TypeError(l+" is not extensible");return l}:null;$jscomp.generator={}; 10$jscomp.generator.ensureIteratorResultIsObject_=function(l){if(!(l instanceof Object))throw new TypeError("Iterator result "+l+" is not an object");};$jscomp.generator.Context=function(){this.isRunning_=!1;this.yieldAllIterator_=null;this.yieldResult=void 0;this.nextAddress=1;this.finallyAddress_=this.catchAddress_=0;this.finallyContexts_=this.abruptCompletion_=null}; 11$jscomp.generator.Context.prototype.start_=function(){if(this.isRunning_)throw new TypeError("Generator is already running");this.isRunning_=!0};$jscomp.generator.Context.prototype.stop_=function(){this.isRunning_=!1};$jscomp.generator.Context.prototype.jumpToErrorHandler_=function(){this.nextAddress=this.catchAddress_||this.finallyAddress_};$jscomp.generator.Context.prototype.next_=function(l){this.yieldResult=l}; 12$jscomp.generator.Context.prototype.throw_=function(l){this.abruptCompletion_={exception:l,isException:!0};this.jumpToErrorHandler_()};$jscomp.generator.Context.prototype["return"]=function(l){this.abruptCompletion_={"return":l};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.jumpThroughFinallyBlocks=function(l){this.abruptCompletion_={jumpTo:l};this.nextAddress=this.finallyAddress_};$jscomp.generator.Context.prototype.yield=function(l,v){this.nextAddress=v;return{value:l}}; 13$jscomp.generator.Context.prototype.yieldAll=function(l,v){var E=$jscomp.makeIterator(l),N=E.next();$jscomp.generator.ensureIteratorResultIsObject_(N);if(N.done)this.yieldResult=N.value,this.nextAddress=v;else return this.yieldAllIterator_=E,this.yield(N.value,v)};$jscomp.generator.Context.prototype.jumpTo=function(l){this.nextAddress=l};$jscomp.generator.Context.prototype.jumpToEnd=function(){this.nextAddress=0}; 14$jscomp.generator.Context.prototype.setCatchFinallyBlocks=function(l,v){this.catchAddress_=l;void 0!=v&&(this.finallyAddress_=v)};$jscomp.generator.Context.prototype.setFinallyBlock=function(l){this.catchAddress_=0;this.finallyAddress_=l||0};$jscomp.generator.Context.prototype.leaveTryBlock=function(l,v){this.nextAddress=l;this.catchAddress_=v||0}; 15$jscomp.generator.Context.prototype.enterCatchBlock=function(l){this.catchAddress_=l||0;l=this.abruptCompletion_.exception;this.abruptCompletion_=null;return l};$jscomp.generator.Context.prototype.enterFinallyBlock=function(l,v,E){E?this.finallyContexts_[E]=this.abruptCompletion_:this.finallyContexts_=[this.abruptCompletion_];this.catchAddress_=l||0;this.finallyAddress_=v||0}; 16$jscomp.generator.Context.prototype.leaveFinallyBlock=function(l,v){var E=this.finallyContexts_.splice(v||0)[0];if(E=this.abruptCompletion_=this.abruptCompletion_||E){if(E.isException)return this.jumpToErrorHandler_();void 0!=E.jumpTo&&this.finallyAddress_<E.jumpTo?(this.nextAddress=E.jumpTo,this.abruptCompletion_=null):this.nextAddress=this.finallyAddress_}else this.nextAddress=l};$jscomp.generator.Context.prototype.forIn=function(l){return new $jscomp.generator.Context.PropertyIterator(l)}; 17$jscomp.generator.Context.PropertyIterator=function(l){this.object_=l;this.properties_=[];for(var v in l)this.properties_.push(v);this.properties_.reverse()};$jscomp.generator.Context.PropertyIterator.prototype.getNext=function(){for(;0<this.properties_.length;){var l=this.properties_.pop();if(l in this.object_)return l}return null};$jscomp.generator.Engine_=function(l){this.context_=new $jscomp.generator.Context;this.program_=l}; 18$jscomp.generator.Engine_.prototype.next_=function(l){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_.next,l,this.context_.next_);this.context_.next_(l);return this.nextStep_()}; 19$jscomp.generator.Engine_.prototype.return_=function(l){this.context_.start_();var v=this.context_.yieldAllIterator_;if(v)return this.yieldAllStep_("return"in v?v["return"]:function(E){return{value:E,done:!0}},l,this.context_["return"]);this.context_["return"](l);return this.nextStep_()}; 20$jscomp.generator.Engine_.prototype.throw_=function(l){this.context_.start_();if(this.context_.yieldAllIterator_)return this.yieldAllStep_(this.context_.yieldAllIterator_["throw"],l,this.context_.next_);this.context_.throw_(l);return this.nextStep_()}; 21$jscomp.generator.Engine_.prototype.yieldAllStep_=function(l,v,E){try{var N=l.call(this.context_.yieldAllIterator_,v);$jscomp.generator.ensureIteratorResultIsObject_(N);if(!N.done)return this.context_.stop_(),N;var O=N.value}catch(db){return this.context_.yieldAllIterator_=null,this.context_.throw_(db),this.nextStep_()}this.context_.yieldAllIterator_=null;E.call(this.context_,O);return this.nextStep_()}; 22$jscomp.generator.Engine_.prototype.nextStep_=function(){for(;this.context_.nextAddress;)try{var l=this.program_(this.context_);if(l)return this.context_.stop_(),{value:l.value,done:!1}}catch(v){this.context_.yieldResult=void 0,this.context_.throw_(v)}this.context_.stop_();if(this.context_.abruptCompletion_){l=this.context_.abruptCompletion_;this.context_.abruptCompletion_=null;if(l.isException)throw l.exception;return{value:l["return"],done:!0}}return{value:void 0,done:!0}}; 23$jscomp.generator.Generator_=function(l){this.next=function(v){return l.next_(v)};this["throw"]=function(v){return l.throw_(v)};this["return"]=function(v){return l.return_(v)};this[Symbol.iterator]=function(){return this}};$jscomp.generator.createGenerator=function(l,v){var E=new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(v));$jscomp.setPrototypeOf&&l.prototype&&$jscomp.setPrototypeOf(E,l.prototype);return E}; 24$jscomp.asyncExecutePromiseGenerator=function(l){function v(N){return l.next(N)}function E(N){return l["throw"](N)}return new Promise(function(N,O){function db(sb){sb.done?N(sb.value):Promise.resolve(sb.value).then(v,E).then(db,O)}db(l.next())})};$jscomp.asyncExecutePromiseGeneratorFunction=function(l){return $jscomp.asyncExecutePromiseGenerator(l())};$jscomp.asyncExecutePromiseGeneratorProgram=function(l){return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(l)))}; 25$jscomp.getRestArguments=function(){for(var l=Number(this),v=[],E=l;E<arguments.length;E++)v[E-l]=arguments[E];return v}; 26(function(l,v,E,N,O){function db(u,B){"toBlob"in u&&l.URL&&URL.createObjectURL?u.toBlob(function(F){B.src=URL.createObjectURL(F)}):B.src=u.toDataURL("image/png")}
26function sb(u){var B;return $jscomp.asyncExecutePromiseGeneratorProgram(function(F){if(1==F.nextAddress)return"toBlob"in u&&l.URL&&URL.createObjectURL?F.yield(new Promise(function(J){return u.toBlob(J)}),3):F["return"](u.toDataURL("image/png"));B=F.yieldResult;return F["return"](URL.createObjectURL(B))})}function Fc(u,B,F){function J(){N.off("vmouseup", 27J).off("vmousemove",pa)}function pa(ba){Ha(xa+(ba.pageX-Fa),ka+(ba.pageY-Na));F&&F(na/va,fa/Ga);ba.preventDefault()}function Ha(ba,wa){na=0>ba?0:ba>va-1?va:ba;fa=0>wa?0:wa>Ga-1?Ga:wa;B.css({left:na,top:fa})}var va=u.width(),Ga=u.height(),ya=B.offset(),na=ya.left,fa=ya.top,xa,ka,Fa,Na;u.on("vmousedown",function(ba){Fa=ba.pageX;Na=ba.pageY;var wa=u.offset();Ha(Fa-wa.left,Na-wa.top);xa=na;ka=fa;F&&F(na/va,fa/Ga);N.on("vmouseup",J).on("vmousemove",pa);ba.preventDefault()})}function Ib(){try{var u=l.localStorage; 28u.setItem("__test__","__test__");u.removeItem("__test__");return!0}catch(B){return!1}}function rc(u,B,F,J,pa,Ha,va){if(!(sc||kb&&kb.el().closest("body")[0])){sc=!0;B=B?1:"";J=J||"canvas";var Ga=$(".gen-anon").hasClass("checked")&&!B?1:"",ya=$(".gen-private").hasClass("checked")&&!B?1:"",na=mm.ctx(),fa=mm.canv(),xa=mm.getText();Gc(na,fa,pa);na=fa.toDataURL("image/jpeg");mm.preview();pa=null;F?Hc(na,!0,fa.width,fa.height):Ha&&(pa=Ic(na,!0,fa.width,fa.height));B=Object.assign({},mm.memeData(),{imgData:na.substr(na.search(",")+ 291),text:xa,type:"jpeg",anon:Ga,"private":ya,isReply:B,source:J},mm.watermarkController.getPostParams(),{ai_context:va});$.ajax({url:"/ajax_meme_done_canvas",type:"post",data:B,dataType:"json",success:function(ka){ka.error?(loading(!1),error_dialog(ka.error),kb&&kb.hide()):u(ka,ya)},error:function(){handleRequestError();kb&&kb.hide()},complete:function(){sc=!1}});return pa}}function Gc(u,B,F,J){var pa=mm.watermarkController.getOpts();F&&(pa.text="custom",pa.custom=F);watermarkCanvas(u,B.width,B.height, 30pa,67600,!0,O,J)}function Jc(u,B){Kc(u,B,"meme",function(){mm.reset();kb.hide();Lc()},mm.currentMeme().name||"Untitled")}function Lc(){var u=$(".head");u.find(".ad")[0]&&l.deployads&&(deployads.push(function(){deployads.gpt.pubadsRefresh()}),u=u.position().top,$w.scrollTop()>u&&l.scrollTo(0,u))}function Ic(u,B,F,J){return'<div id="done"><div id="done-img-wrap-wrap" style="width:'+~~F+'px"><div id="done-img-wrap" style="padding-bottom:'+(F?J/F*100:0)+'%"><img id="done-img"'+(u?' src="'+u+'"':"")+'/></div></div><div id="done-info"></div><div id="done-msgs"></div><div id="done-share"></div><div id="done-embed-codes">'+ 31(B?'<div class="load"></div>':"")+'</div><div id="done-btns"></div></div>'}function Hc(u,B,F,J){l.scrollTo(0,0);u=Ic(u,B,F,J);kb=l.imgDoneBox=new Box({html:u,bg:"transparent",top:20,hideX:!0,noMaskClick:!0})}function Kc(u,B,F,J,pa,Ha,va,Ga){var ya={meme:"jpg",gif:"gif",pie:"png",demotivational:"jpg"}[F],na=parseInt(u.iid).toString(36),fa=!0,xa=$("#done-img"),ka=$("#done-embed-codes");$("#done-img-wrap-wrap").css("width",va);$("#done-img-wrap").css("padding-bottom",Ga/va*100+"%");if(!xa.attr("src"))B|| 32xa.attr("crossorigin","anonymous"),xa.attr("src",(B?I.user.id?"/i-view/":"//i2.imgflip.com/":IMAGE_DOMAIN)+na+"."+ya);else if(!B){var Fa=new Image;$(Fa).load(function(){xa.attr("src",$(this).attr("src"))});Fa.src=IMAGE_DOMAIN+na+"."+ya}N.on("contextmenu","#done-img",function(){fa=!1});ka.html(embedCodes(na,ya,B,!B&&"gif"!==F,F,u.has_gif_video,va,Ga)).find(".img-code").click(function(){$(this).select();fa=!1}).on("focus",function(){fa=!1});B||I.user.id?B||(F="",(F=(F=GET().stream)?'<button type="button" id="done-submit" class="b but">Post to '+ 33esc(F)+" stream</button>":'<button type="button" id="done-submit" class="a">Post to an Imgflip stream</button>')&&ka.after('<div class="done-msg">'+F+"</div>"),$("#done-submit").click(function(){fa=!1;submitImg(u.iid)})):ka.after('<div class="done-msg">To claim or delete this image, <b><a class="done-link" target="_blank" href="/login?claim_iid='+(u.iid+'">Log In</a></b></div>'));F=$('<button type="button" class="l but">'+l.BACK_SVG+"Edit</button>").click(function(){fa&&$.ajax({url:"/ajax_delete_creation", 34type:"post",data:{iid:u.iid}});kb.hide();Lc();Ha&&Ha()});J=$('<button type="button" class="l but">New'+l.NEXT_SVG+"</button>").click(J);ka=$("#done-btns");ka.html(F);if(!B||I.user.id)F=$("<a class='l but' href='"+((B?"/i-page/":"gif"===ya?"/gif/":"/i/")+na)+"'>Image page</a>"),F.click(function(){fa=!1}),ka.append(F);if(B)B="This image is private. It will only be stored on imgflip servers long enough for you to download it.",I.user.id&&(B='This image is private. Only you can view or download it. View or delete it from <a href="/creations">My Images</a>.'), 35$("#done-msgs").append('<div class="done-msg">'+B+"</div>");else $("#done-share").html(getShareButtonsHtml(na,ya,pa,!0)).on("click",".shr-btn,.shr-btn-device",function(){fa=!1});ka.append(J)}function Mc(u,B){var F='<div class="pro-popup">';u&&(F+='<div class="pro-popup-msg msg msg-green">'+u+"</div>");F+=$("#pro-popup-wrap").html();var J=BOX.show({html:F+"</div>"});initProBtn(J.el(),"pro",function(){return J.hide()});proEvent("pro","Clicked "+B)}var gd=l.File&&l.FileReader&&l.FileList,kb,tc=!1,hd= 36{blank:"Blank Template",ai:"Template from AI",random:"Random Meme"},Nc="Cartoon;Digital Art;Painting;Pencil Drawing;Minimalism;Pixel Art;Watercolor;Line Art;Retro;Vintage;Psychedelic;Cyberpunk;Grunge;Gothic;Surreal;Abstract;Pop Art".split(";");MemeMaker=function(u,B,F,J){function pa(a,b,e,f){var c,k,g,q,d,h,n,p,r,G;return $jscomp.asyncExecutePromiseGeneratorProgram(function(A){if(1==A.nextAddress)return c={id:a,file_type:b,"private":e},k=Fa(c),g=new Image,"http"===k.substr(0,4)&&g.setAttribute("crossorigin",
37"anonymous"),q=new Promise(function(X){return $(g).load(X)}),g.src=k,A.yield(q,2);d=$("<canvas/>")[0];h=$jscomp.makeIterator(90===f.rotation||270===f.rotation?[g.naturalHeight,g.naturalWidth]:[g.naturalWidth,g.naturalHeight]);n=h.next().value;p=h.next().value;d.width=n;d.height=p;r=d.getContext("2d");r.translate(n/2,p/2);r.rotate(f.rotation/180*Math.PI);r.scale(f.flipHorizontal?-1:1,1);r.drawImage(g,-g.naturalWidth/2,-g.naturalHeight/2,g.naturalWidth,g.naturalHeight);G=r.getImageData(f.x,f.y,f.w, 38f.h);d=$("<canvas/>")[0];d.width=G.width;d.height=G.height;d.getContext("2d").putImageData(G,0,0);return A["return"](d.toDataURL("image/png"))})}function Ha(a){va(a);for(a=0;a<m.length;a++)m[a].autoResize(Q().w,Q().h,!1)}function va(a){a>oa&&(a=oa);var b=Q().h/Q().w*a;fc&&b>fc&&(a*=fc/b);uc=Ya||a;Ya=a;ta=Ya/Q().w;Qa.width(Ya)}function Ga(a,b){if(La&&!(1>Math.abs(La.width-a)&&1>Math.abs(La.height-b))&&(hb&&(!lb||1<=Math.abs(lb.width-a)||1<=Math.abs(lb.height-b))&&(lb=v.createElement("canvas"),lb.width= 39La.width,lb.height=La.height,lb.getContext("2d").drawImage(La,0,0)),La.width=a,La.height=b,hb)){var e=za.imageSmoothingQuality;za.imageSmoothingQuality="high";za.drawImage(lb,0,0,oa,Za);za.imageSmoothingQuality=e}}function ya(){var a=$b.find(".im.random");loadingEl(a,!0);$.ajax({url:"/ajax_get_random_meme",type:"get",dataType:"json",success:function(b){Oc("random"+b.id,b)},complete:function(){loadingEl(a,!1)}})}function na(){var a="Generate meme text with AI.";
39I.done&&(a=proType()?a+' <span class="mm-ai-pro-tag">PRO</span>': 40I.user.id?a+(' <span class="mm-ai-nowrap">'+I.user.free_openai_memes_left+"/25 free left.</span>"):a+' <span class="mm-ai-nowrap">25 free per 30 days. Requires <span class="a show-login">login</span>.</span>');Z.find(".mm-ai-info").html(a)}function fa(){return I.done?I.user.id?I.user.email_verified||proType()?!0:(error_dialog("Your account email must be verified to use AI features. This is to prevent abuse (Imgflip does not send marketing spam). If you recently signed up, just click the link in your email. Otherwise visit your Imgflip settings to change your email or send another verification email. You can also subscribe to Pro to bypass verification."), 41!1):(showLogin("Login is required to use AI features.",null,function(){}),!1):notLoadedError()}function xa(){if(fa())if(0>=I.user.free_openai_memes_left&&!proType())vb("AI Gen","You have used your 25 free AI generations per 30 days. Upgrade for unlimited access.");else{var a=mm.memeData(1,1);loadingEl(Z.find(".mm-ai-generate"),!0);$.ajax({url:"/ajax_ai_meme_custom",type:"post",dataType:"json",data:{subject:Z.find(".mm-ai-subject").val(),num_boxes:a.boxes.length,template:a.template,template_url:a.template_url}, 42success:function(b){if(b.error)error_dialog(b.error);else{for(var e=0;e<b.texts.length;e++)m[e]&&m[e].$edit.find(".mm-text").val(b.texts[e]).change();I.user.free_openai_memes_left--;na()}},complete:function(){loadingEl(Z.find(".mm-ai-generate"),!1)}})}}function ka(){return Math.round(Math.max(50,.1*(oa||0)))}function Fa(a){return a.effect_img?a.effect_img.src:0===a.id?a.img?a.img.src:"":a.url_name?"/s/meme/"+a.url_name+"."+a.file_type:(a["private"]?"/i-view/":"https:"+IMAGE_DOMAIN)+(+a.id).toString(36)+ 43"."+a.file_type+"?a"+Math.round(Date.now()/1E3/3600)+("imgflip.com"!==l.location.hostname?"&j":"")}function Na(a,b,e){if(e)return a;500>a&&(b*=500/a,a=500);25E4>a*b&&(b/=a,a=Math.sqrt(25E4/b),b*=a);return Math.min(a,Math.max(500,a/b*500))}function ba(){var a={};Z.find(".mm-effect").each(function(){var f=$(this).find("input").val();0<f&&(a[$(this).data("type")]=+f)});u[Ma].effect_img=null;if(Object.keys(a).length){var b=Fa(Q()),e=new Image;"http"===b.substr(0,4)&&e.setAttribute("crossorigin","anonymous"); 44$(e).load(function(){var f=v.createElement("canvas"),c=f.getContext("2d");f.width=oa;f.height=Za;c.drawImage(e,0,0,e.width,e.height,0,0,oa,Za);var k=c.getImageData(0,0,oa,Za),g=function(q){c.putImageData(q,0,0);var d=new Image;$(d).load(function(){u[Ma].effects=a;u[Ma].effect_img=d;D.select(Ma,!1)});d.src=f.toDataURL("image/png")};a.smart_posterize&&(k=wa(c,k,.01*a.smart_posterize));a.median_filter&&(k=$a(c,k,a.median_filter));a.blur&&(k=eb(c,k,a.blur));a.sharpen&&(k=Ia(c,k,3,.05*a.sharpen));a.grayscale&& 45(k=ib(c,k,.01*a.grayscale));a.sepia&&(k=Ua(c,k,.01*a.sepia));a.invert&&(k=wb(c,k,.01*a.invert));a.brightness&&(k=Jb(c,k,.01*a.brightness-1));a.jpeg_degrade?R(k,a.jpeg_degrade,O,function(q){a.jpeg_min_quality?R(q,1,1-.01*a.jpeg_min_quality,g):g(q)}):a.jpeg_min_quality?R(k,1,1-.01*a.jpeg_min_quality,g):g(k)});e.src=b}else u[Ma].effects=null,D.select(Ma,!1)}function wa(a,b,e){var f=255*e;b=Ia(a,b,1,2);e=a.createImageData(b);var c=b.width,k=b.height,g=b.data,q=Array(c*k),d=0;b=[];for(var h=0;h<k;h++)for(var n= 460;n<c;n++){var p=h*c+n;if(!q[p]){q[p]=!0;d++;for(var r=g[4*p],G=g[4*p+1],A=g[4*p+2],X=g[4*p+3],T=[p],t=[p];t.length;){var y=t.pop();p=[y-1,y+1,y-c,y+c];for(var L=0;L<p.length;L++){var V=p[L];if(!(q[V]||0>V||V>=c*k)){var aa=g[4*V],K=g[4*V+1],x=g[4*V+2];y=g[4*V+3];Math.abs(aa-r)<f&&Math.abs(K-G)<f&&Math.abs(x-A)<f&&Math.abs(y-X)<f&&(T.push(V),t.unshift(V),q[V]=!0,d++,r+=(aa-r)/T.length,G+=(K-G)/T.length,A+=(x-A)/T.length,X+=(y-X)/T.length)}}}r=Math.round(r);G=Math.round(G);A=Math.round(A);X=Math.round(X); 4750>T.length&&b.push([T,r,G,A,X]);for(L=0;L<T.length;L++)y=T[L],e.data[4*y]=r,e.data[4*y+1]=G,e.data[4*y+2]=A,e.data[4*y+3]=X}}for(L=0;L<b.length;L++){T=b[L][0];f=b[L][1];g=b[L][2];q=b[L][3];d=b[L][4];p=[];for(h=0;h<T.length;h++)y=T[h],p.push(y-1,y+1,y-c,y+c);n=Infinity;for(h=0;h<p.length;h++)if(y=p[h],!(0>y||y>=c*k)&&(aa=e.data[4*y],K=e.data[4*y+1],x=e.data[4*y+2],y=e.data[4*y+3],r=Math.abs(aa-f)+Math.abs(K-g)+Math.abs(x-q)+Math.abs(y-d),0<r&&r<n)){n=r;var M=[aa,K,x,y]}for(h=0;h<T.length;h++)y=T[h], 48e.data[4*y]=M[0],e.data[4*y+1]=M[1],e.data[4*y+2]=M[2],e.data[4*y+3]=M[3]}return e=$a(a,e,2)}function $a(a,b,e){e=Math.round(e);a=a.createImageData(b);var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g=0;g<c;g++){for(var q=Array(103),d=0,h=k-e;h<=k+e;h++)for(var n=g-e;n<=g+e;n++)if(0<=h&&h<f&&0<=n&&n<c){var p=[b[n*f*4+4*h],b[n*f*4+4*h+1],b[n*f*4+4*h+2],b[n*f*4+4*h+3]],r=Math.round((p[0]+p[1]+p[2]+p[3])/10);q[r]=q[r]||[];q[r].push(p);d++}p=0;d=Math.floor(d/2);h=0;a:for(;h<q.length;h++)if(q[h])for(n= 490;n<q[h].length;n++)if(p++,p>=d){var G=q[h][n];break a}a.data[g*f*4+4*k]=G[0];a.data[g*f*4+4*k+1]=G[1];a.data[g*f*4+4*k+2]=G[2];a.data[g*f*4+4*k+3]=G[3]}return a}function Ia(a,b,e,f){a=a.createImageData(b);var c=b.width,k=b.height;b=b.data;for(var g=0;g<c;g++)for(var q=0;q<k;q++){for(var d=b[q*c*4+4*g],h=b[q*c*4+4*g+1],n=b[q*c*4+4*g+2],p=b[q*c*4+4*g+3],r=0,G=0,A=0,X=0,T=0,t=g-e;t<=g+e;t++)for(var y=q-e;y<=q+e;y++)0<=t&&t<c&&0<=y&&y<k&&(t!==g||y!==q)&&(r+=b[y*c*4+4*t]-d,G+=b[y*c*4+4*t+1]-h,A+=b[y* 50c*4+4*t+2]-n,X+=b[y*c*4+4*t+3]-p,T++);a.data[q*c*4+4*g]=Math.min(255,Math.max(0,d-Math.round(r/T*f)));a.data[q*c*4+4*g+1]=Math.min(255,Math.max(0,h-Math.round(G/T*f)));a.data[q*c*4+4*g+2]=Math.min(255,Math.max(0,n-Math.round(A/T*f)));a.data[q*c*4+4*g+3]=Math.min(255,Math.max(0,p-Math.round(X/T*f)))}return a}function eb(a,b,e){e=Math.round(e);a=a.createImageData(b);var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g=0;g<c;g++){for(var q=0,d=0,h=0,n=0,p=0,r=k-e;r<=k+e;r++)for(var G=g-e;G<= 51g+e;G++)0<=r&&r<f&&0<=G&&G<c&&(q+=b[G*f*4+4*r],d+=b[G*f*4+4*r+1],h+=b[G*f*4+4*r+2],n+=b[G*f*4+4*r+3],p++);a.data[g*f*4+4*k]=Math.round(q/p);a.data[g*f*4+4*k+1]=Math.round(d/p);a.data[g*f*4+4*k+2]=Math.round(h/p);a.data[g*f*4+4*k+3]=Math.round(n/p)}return a}function R(a,b,e,f){var c=a.width,k=a.height,g=v.createElement("canvas");g.width=c;g.height=k;var q=g.getContext("2d");q.putImageData(a,0,0);var d=function(){var h=g.toDataURL("image/jpeg",e!==O?e:.5+.3*Math.random()),n=new Image;$(n).load(function(){q.drawImage(n, 520,0);b--;0<b?d():f(q.getImageData(0,0,c,k))});n.src=h};d()}function ib(a,b,e){a=a.createImageData(b);var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g=0;g<c;g++){var q=b[g*f*4+4*k],d=b[g*f*4+4*k+1],h=b[g*f*4+4*k+2],n=b[g*f*4+4*k+3],p=Math.round((q+d+h)/3);a.data[g*f*4+4*k]=Math.min(255,Math.max(0,q+(p-q)*e));a.data[g*f*4+4*k+1]=Math.min(255,Math.max(0,d+(p-d)*e));a.data[g*f*4+4*k+2]=Math.min(255,Math.max(0,h+(p-h)*e));a.data[g*f*4+4*k+3]=n}return a}function Ua(a,b,e){a=a.createImageData(b); 53var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g=0;g<c;g++){var q=b[g*f*4+4*k],d=b[g*f*4+4*k+1],h=b[g*f*4+4*k+2],n=b[g*f*4+4*k+3];a.data[g*f*4+4*k]=Math.min(255,Math.max(0,q*(1-.607*e)+.769*d*e+.189*h*e));a.data[g*f*4+4*k+1]=Math.min(255,Math.max(0,.349*q*e+d*(1-.314*e)+.168*h*e));a.data[g*f*4+4*k+2]=Math.min(255,Math.max(0,.272*q*e+.534*d*e+h*(1-.869*e)));a.data[g*f*4+4*k+3]=n}return a}function wb(a,b,e){a=a.createImageData(b);var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g= 540;g<c;g++){var q=b[g*f*4+4*k],d=b[g*f*4+4*k+1],h=b[g*f*4+4*k+2],n=b[g*f*4+4*k+3],p=(255-d-d)*e,r=(255-h-h)*e;a.data[g*f*4+4*k]=Math.min(255,Math.max(0,q+(255-q-q)*e));a.data[g*f*4+4*k+1]=Math.min(255,Math.max(0,d+p));a.data[g*f*4+4*k+2]=Math.min(255,Math.max(0,h+r));a.data[g*f*4+4*k+3]=n}return a}function Jb(a,b,e){a=a.createImageData(b);var f=b.width,c=b.height;b=b.data;for(var k=0;k<f;k++)for(var g=0;g<c;g++){var q=b[g*f*4+4*k+1],d=b[g*f*4+4*k+2],h=b[g*f*4+4*k+3];a.data[g*f*4+4*k]=Math.min(255, 55Math.max(0,b[g*f*4+4*k]+255*e));a.data[g*f*4+4*k+1]=Math.min(255,Math.max(0,q+255*e));a.data[g*f*4+4*k+2]=Math.min(255,Math.max(0,d+255*e));a.data[g*f*4+4*k+3]=h}return a}function xb(){var a,b,e,f,c,k,g,q,d,h,n,p,r,G,A,X,T,t,y,L,V,aa,K;return $jscomp.asyncExecutePromiseGeneratorProgram(function(x){switch(x.nextAddress){case 1:Aa=la.find(".mm-spacing-type").val();fb=la.find(".mm-spacing-color").val();la.find(".mm-spacing-color-picker").toggleClass("display-none","custom"!==fb);fb="custom"===fb?ac: 56fb;Kb=la.find(".mm-spacing-size").val();a=la.find(".mm-spacing-settings");b=u.spaced?u.spaced.w:Q().w;e=u.spaced?u.spaced.h:Q().h;if(!Aa)return Ja!==O&&("top"===u.spaced.spacing_type||"top_bottom"===u.spaced.spacing_type?Lb(-u.spaced.spacing_height,u[Ja].h,u[Ja].h,b,e):Lb(0,u[Ja].h,u[Ja].h,b,e),D.select(Ja,!1,!1),Ja=O),delete u.spaced,a.hide(),J.spacingUpdated&&J.spacingUpdated(0,0),x["return"]();a.show();f=Ja!==O?Ja:Ma;c=u[f];k=Fa(c);g=new Image;"http"===k.substr(0,4)&&g.setAttribute("crossorigin", 57"anonymous");if(!k){x.jumpTo(2);break}q=new Promise(function(M){return $(g).load(M)});g.src=k;return x.yield(q,2);case 2:d=v.createElement("canvas");h=d.getContext("2d");n=k?g.width:c.w;p=k?g.height:c.h;r=Math.round(Kb/100*p);d.width=n;d.height=p+r*("top_bottom"===Aa?2:1);G="white"===fb?"#fff":"black"===fb?"#000":fb;if("auto"===fb){h.drawImage(g,0,0,n,r,0,0,n,r);X=Mb(h.getImageData(0,0,n,r));h.drawImage(g,0,p-r,n,r,0,0,n,r);T=Mb(h.getImageData(0,0,n,r));if("top"===Aa)A=X;else if("bottom"===Aa)A=T; 58else if("top_bottom"===Aa)for(A=[],t=0;4>t;t++)A[t]=Math.round((X[t]+T[t])/2);G="rgba("+A[0]+","+A[1]+","+A[2]+","+A[3]+")"}y=0;if("top"===Aa||"top_bottom"===Aa)y+=r,h.fillStyle=G,h.fillRect(0,0,n,r);k?h.drawImage(g,0,y):h.clearRect(0,y,n,p);if("bottom"===Aa||"top_bottom"===Aa)y+=p,h.fillStyle=G,h.fillRect(0,y,n,r);L=new Image;V=new Promise(function(M){return $(L).load(M)});aa=L;return x.yield(sb(d),4);case 4:return aa.src=x.yieldResult,x.yield(V,5);case 5:K=0,u.spaced&&"bottom"!==u.spaced.spacing_type&& 59(K-=u.spaced.spacing_height),"bottom"!==Aa&&(K+=r),Lb(K,L.height,c.h,b,e),Ja=f,u.spaced={id:0,templates:c.templates||[{id:c.id,url:c.template_url}],name:"Spaced Image",spacing_type:Aa,spacing_height:r,img:L,w:L.width,h:L.height},D.select("spaced",!1),yb(!0),J.spacingUpdated&&J.spacingUpdated("bottom"!==Aa?r:0,"top"!==Aa?r:0),x.jumpToEnd()}})}function Mb(a){for(var b=a.data,e=0,f=0,c=0,k=0,g=0;100>g;g++){var q=Math.random()*a.width>>0,d=Math.random()*a.height>>0;e+=b[d*a.width*4+4*q];f+=b[d*a.width* 604+4*q+1];c+=b[d*a.width*4+4*q+2];k+=b[d*a.width*4+4*q+3]}return[Math.round(e/100),Math.round(f/100),Math.round(c/100),Math.round(k/100)]}
60function Lb(a,b,e,f,c){for(var k=!1,g=!1,q=0;q<m.length;q++){var d=m[q].getVals();!k&&("top"===Aa||"top_bottom"===Aa)&&d.w>.8*f&&d.y<.1*c?(d.x=5,d.y=5,d.w=f-10,d.h=Kb/100*e-10,k=!0):!g&&("bottom"===Aa||"top_bottom"===Aa)&&d.w>.8*f&&d.y+d.h>.9*c?(d.x=5,d.y=b-Kb/100*e+5,d.w=f-10,d.h=Kb/100*e-5-13,g=!0):(d.y+=a,5>d.y&&(d.y=5),d.y+d.h>b-13&&(d.y=b-d.h-13));m[q].setVals(d.x, 61d.y,d.w,d.h,d.rotation)}}function mb(){var a=~~la.find(".mm-blank-width").val(),b=~~la.find(".mm-blank-height").val();if(20<a/b||20<b/a)error_dialog('Ratio of image dimensions cannot be greater than 20:1. If you are trying to add multiple images in a chain, you can use the "Add Image" button instead.');else{la.find(".mm-blank-ratio").each(function(){$(this).toggleClass("selected",.01>Math.abs($(this).data("w")/$(this).data("h")-a/b))});var e=v.createElement("canvas");e.width=a;e.height=b;var f=new Image; 62$(f).load(function(){u.blank={id:0,name:"Blank Template",img:f,w:f.width,h:f.height,has_transparency:1,template_url:"_blank:"+a+"x"+b};D.select("blank","blank"!==Ma);for(var c=0;c<m.length;c++)m[c].constrainVals()});db(e,f)}}function gc(){var a=$(this);a=a.data("w")/a.data("h");var b=~~la.find(".mm-blank-width").val();la.find(".mm-blank-height").val(Math.round(b/a));mb()}function w(){if(!z()||confirm("Rotating the template will remove the extra text/image boxes that you added. Continue?")){Aa&&la.find(".mm-spacing-type").val("").change(); 63var a=Q(),b=a.w;a.w=a.h;a.h=b;a.rotation=270===a.rotation?0:~~a.rotation+90;D.select(Ma)}}function z(){var a=Q().default_settings?JSON.parse(Q().default_settings).length:2;return m.length>a?!0:!1}function H(){for(var a="",b=$jscomp.makeIterator(Nc),e=b.next();!e.done;e=b.next())e=e.value,a+=cb(e,!1,{className:"mm-ai-img-tag-"+e.replace(" ","-")});b="pro"===proType()?icon("check")+"You have unlimited AI templates with Pro":"pro_basic"===proType()?icon("check")+"You have 720 AI templates/mo with Pro Basic": 64I.user.id?I.user.email_verified?I.user.free_ai_imgs_left+'/3 free AI templates left per 30 days.\n\t\t\t\t\t<span class="mm-ai-img-upgrade a">Upgrade</span>':"To use AI features, verify your email (check your inbox or visit your Settings)":'<div>To use AI features, <span class="a show-login">Log in</span> with a verified email</div>';var f=new Box({html:'<div class="mm-ai-img-popup">\n\t\t\t\t\t<div class="mm-ai-img-title">'+b+'</div>\n\t\t\t\t\t<div class="mm-ai-img-label">Describe the template</div>\n\t\t\t\t\t<input type="text" class="mm-ai-img-subject" placeholder="Cute kitten sitting on a puppy"/>\n\t\t\t\t\t<div class="mm-ai-img-label">Style tags (optional)</div>\n\t\t\t\t\t<div class="mm-ai-img-tags">'+ 65a+'</div>\n\t\t\t\t\t<div class="mm-ai-img-label quality">Quality</div>\n\t\t\t\t\t<fieldset class="mm-ai-img-quality">\n\t\t\t\t\t\t<input type="radio" name="quality" id="q-good" value="good" checked>\n\t\t\t\t\t\t<label for="q-good">Good</label>\n\t\t\t\t\t\t<input type="radio" name="quality" id="q-ultra" value="ultra">\n\t\t\t\t\t\t<label for="q-ultra">Ultra</label>\n\t\t\t\t\t\t<span class="mm-ai-img-warn-wrap">\n\t\t\t\t\t\t\t<svg class="mm-ai-img-warn" viewBox="0 0 200 200"><path fill="currentColor" fill-rule="evenodd" d="M 100,0 A 100,100 0 1,1 100,200 A 100,100 0 1,1 100,0 Z M 85,175 L 115,175 115,145 85,145 Z M 85,125 L 115,125 115,25 85,25 Z" /></svg>\n\t\t\t\t\t\t\t<div class="mm-ai-img-tooltip ibox">Heads up: Ultra quality generation can take up to 30s.</div>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</fieldset>\n\t\t\t\t\t<div class="mm-ai-img-btns">\n\t\t\t\t\t\t<button type="button" class="mm-ai-img-generate-btn b but">AI-Generate</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class="mm-ai-img-choices-wrap display-none">\n\t\t\t\t\t\t<div class="mm-ai-img-label">Choose an image</div>\n\t\t\t\t\t\t<div class="mm-ai-img-choices"></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>', 66noMaskClick:!0}),c=f.el(),k=c.find(".mm-ai-img-generate-btn");c.find('input[name="quality"]').on("change",function(){"ultra"===$(this).val()&&"pro"!==l.proType()?(l.showProPopup("Generate ultra quality AI memes with Imgflip Pro!","AI Img Gen"),c.find('input[name="quality"][value="good"]').prop("checked",!0)):c.find(".mm-ai-img-warn").toggle("ultra"===$(this).val())});
66k.on("click",function(){if(fa()&&!k.hasClass("load-wrap"))if(0>=I.user.free_ai_imgs_left&&!proType())vb("AI Img Gen","You have used your limit of AI templates for the past 30 days. Upgrade to Pro for unlimited, or Basic for 720/30 days."); 67else{var g=c.find(".mm-ai-img-subject").val(),q=Nc.filter(function(r){return c.find(".mm-ai-img-tag-"+r.replace(" ","-")).hasClass("checked")});if(g||q.length){loadingEl(k,!0);for(var d=c.find('input[name="quality"]:checked').val(),h=[],n=proType()?2:1,p=0;p<n;p++)h.push($.ajax({url:"/ajax_ai_img_create",type:"post",dataType:"json",data:{subject:g,tags:q,quality:d}}));$.when.apply($,$jscomp.arrayFromIterable(h)).done(function(){var r=$jscomp.getRestArguments.apply(0,arguments);r=1===h.length?[r]: 68r;var G=[];r=$jscomp.makeIterator(r);for(var A=r.next();!A.done;A=r.next())if(A=A.value[0],A.error)error_dialog(A.error);else{proType()||I.user.free_ai_imgs_left--;A=atob(A.base64);for(var X=[],T=0;T<A.length;T+=512){for(var t=A.slice(T,T+512),y=Array(t.length),L=0;L<t.length;L++)y[L]=t.charCodeAt(L);t=new Uint8Array(y);X.push(t)}A=new Blob(X,{type:"image/jpeg"});X=URL.createObjectURL(A);G.push({blob:A,url:X})}r=G.map(function(V){return'<img src="'+esc(V.url)+'"/>'}).join("");c.find(".mm-ai-img-choices").html(r); 69for(r=0;r<G.length;r++)c.find(".mm-ai-img-choices img").eq(r).data("blob",G[r].blob);c.find(".mm-ai-img-choices-wrap").removeClass("display-none");loadingEl(k,!1)})}else MSG("Please enter a subject or select styles","red")}});c.on("click",".mm-ai-img-choices img",function(){var g=$(this).data("blob");f.hide();P();var q=c.find(".mm-ai-img-subject").val().trim();$("#mm-upload-name").val(q);$("#mm-upload-url").val("").data("blob",g).change();URL.revokeObjectURL($(this).attr("src"))});c.on("click",".mm-ai-img-upgrade", 70function(){vb("AI Img Gen","Upgrade to Pro for unlimited AI templates, or Basic for 720 per 30 days.")})}function P(){var a=!Ib()||"0"!==localStorage.getItem("save_template");a='<div id="mm-upload"><div id="mm-upload-file-btn" class="l but">Upload image from your device<input id="mm-upload-file" type="file" class="hidden-file-input"/></div><div id="mm-upload-or">OR</div><input id="mm-upload-url" type="url" placeholder="Paste image or image URL"/><div id="mm-upload-btns" class="display-none"><button type="button" class="mm-upload-rotate l but sml">'+ 71ROTATE_SVG+'</button><button type="button" class="mm-upload-flip l but sml">flip</button></div><div id="mm-upload-img-preview-wrap"></div>'+(I.user.id?cb("Save to my library",a,{id:"mm-template-save",className:"display-none"}):"")+'<p class="mm-no-save-warning">NOTE: This will prevent you from remixing creations with this template in the future.</p><div id="mm-upload-public-wrap" class="display-none">'+cb("Allow this template to be shared publicly",!1,{id:"mm-upload-public"})+'</div><div id="mm-upload-settings">Name <input id="mm-upload-name" type="text" maxlength="64" placeholder="e.g. X All the Y"/>Alternate Names (comma-separated) <input id="mm-upload-alt-names" type="text" maxlength="255" placeholder="e.g. All the Things"/>Description <textarea id="mm-upload-description" maxlength="512" placeholder="e.g. history of the meme and how it should be used"></textarea>'+ 72(I.user.id?cb("Anonymous <small>(not shown with your username)</small>",!1,{id:"mm-upload-anon"}):"")+'</div><button type="button" id="mm-upload-btn" class="l but display-none">Upload</button></div>';hc=new Box({html:a,w:360});a=hc.el();var b=$("#mm-upload-img-preview-wrap");$("#mm-upload-public").change(function(){$("#mm-upload-settings").toggle($(this).hasClass("checked"))});$("#mm-template-save").change(function(){$(".mm-no-save-warning").toggle(!$(this).hasClass("checked"));$("#mm-upload-public-wrap").toggleClass("display-none", 73!$(this).hasClass("checked"));$("#mm-upload-settings").toggle($(this).hasClass("checked")&&$("#mm-upload-public").hasClass("checked"))});$("#mm-upload-btn").on("click",function(){ab?(I.user.id&&Ib()&&localStorage.setItem("save_template",$("#mm-template-save").hasClass("checked")?"1":"0"),I.user.id&&!$("#mm-template-save").hasClass("checked")||!I.user.id&&!$("#mm-upload-public").hasClass("checked")?ab?(loading("Uploading image"),ca(ab.getFinalDataUrl("image/png"),ic)):MSG("No image selected","red"): 74(loading("Uploading new template"),$.ajax({url:"/ajax_upload_template",type:"post",dataType:"json",data:{img_data:ab.getFinalDataUrl("image/png"),template_url:ic,template_name:$("#mm-upload-name").val()||($("#mm-upload-public").hasClass("checked")?"":Pc),template_alt_names:$("#mm-upload-alt-names").val(),template_description:$("#mm-upload-description").val(),template_anon:$("#mm-upload-anon").hasClass("checked")?1:0,"private":$("#mm-upload-public").hasClass("checked")?0:1},success:function(e){e.error? 75(loading(!1),error_dialog(e.error)):(history.replaceState(null,v.title,e.url),hc.hide(),loading(!1),D.selectNewTemplate("N-"+e.id,e.meme))}}))):MSG("No file or URL selected","red")});$("#mm-upload-file").change(function(){this.files[0]&&(Pc=this.files[0].name,ia(b,this.files[0]))});$("#mm-upload-url").on("keyup change paste",function(e){var f=$(this).data("blob");if(f)return $(this).data("blob",null),f=new File([f],"imgflip-ai-template.jpg",{type:"image/jpeg"}),ia(b,f,"ai:"),cancelEvent(e);
75if((f= 76(e.originalEvent||e).clipboardData)&&f.items){f=f.items;for(var c=0;c<f.length;c++)if(0===f[c].type.indexOf("image")){var k=f[c].getAsFile();if(k)return ia(b,k,"paste:"),cancelEvent(e)}}id($(this),b)});a.on("click",".mm-upload-rotate",function(){ab&&ab.rotateClockwise()});a.on("click",".mm-upload-flip",function(){ab&&ab.flipHorizontal()})}function ia(a,b,e){if(0!==b.type.indexOf("image"))MSG("File is not an image","red");else{a.show();var f=new FileReader;f.onload=function(c){ab=new ImageCropper(a, 77a.width(),a.width());ab.setSrc(c.target.result,b.name);$("#mm-upload-btns").removeClass("display-none");$("#mm-upload-public-wrap").removeClass("display-none");$("#mm-upload-btn").removeClass("display-none");$("#mm-template-save").removeClass("display-none").change();ic=(e||"")+b.name};f.readAsDataURL(b)}}function ca(a,b){var e=new Image;$(e).load(function(f){u.custom={id:0,name:"Custom Image",img:e,w:e.width,h:e.height,template_url:b||""};D.select("custom");loading(!1)});e.src=a;hc.hide()}function Ba(a){if(Nb[a]!== 78O)return Nb[a];if("fonts"in v&&"check"in v.fonts)return Nb[a]=v.fonts.check("15px '"+a+"'"),Nb[a];Ob||(Ob=$("<canvas/>")[0].getContext("2d"),Ob.font="72px monospace",Qc=Ob.measureText("abcdefghijklmnopqrstuvwxyz0123456789\u4f60\u3053\u0645\u0c4b\u0bb5").width);Ob.font="72px '"+a+"', monospace";var b=Ob.measureText("abcdefghijklmnopqrstuvwxyz0123456789\u4f60\u3053\u0645\u0c4b\u0bb5").width!==Qc;return Nb[a]=b}function ma(a,b){for(var e=0;e<a.length;e++)if(a[e].toLowerCase()===b)return!0;return!1}function Ra(a){var b= 79'<div class="mm-font-selector">',e=zb();if(e.length){b+='<div class="mm-font-section-label">Recent Fonts</div>';for(var f=0;f<e.length;f++)b+=nb(e[f].name,e[f].src);ua(e)}b+='<div class="mm-font-section-label">Web Fonts</div>';for(f=0;f<bc.length;f++)e=bc[f],Ba(e)&&(b+=nb(e));b=Nb[vc[0]]!==O?b+Ab():b+'<button type="button" class="mm-font-show-more l but down-arrow">More fonts on your device</button>';b=tb.length?b+Pb():b+'<button type="button" class="mm-font-show-google l but down-arrow">Google free fonts</button>'; 80var c=new Box({html:b}),k=c.el().find(".mm-font-selector");k.on("click",".mm-font-item",function(){var g=$(this).data("font"),q=$(this).data("src");c.hide();a&&a(g);a:{for(var d=g.toUpperCase(),h=0;h<bc.length;h++)if(bc[h].toUpperCase()===d)break a;if(Ib()){d=(d=localStorage.getItem("fonts_used"))?JSON.parse(d):{};d[g]=d[g]||{name:g,src:q};d[g].last_used=Date.now();d=JSON.stringify(d);try{localStorage.setItem("fonts_used",d)}catch(n){}}}});k.on("click",".mm-font-show-more",function(){$(this).after(Ab()); 81$(this).remove()});k.on("click",".mm-font-add-btn",function(){var g=k.find(".mm-font-add-input"),q=g.val();if(q){for(var d=wc.concat(vc).concat(Rc),h=0;h<d.length;h++)if(q.toLowerCase()===d[h].toLowerCase()){error_dialog("This font is already in the list below!");return}Ba(q)?(wc.push(q),$(this).after(nb(q)),g.val("")):error_dialog("This font was not detected on your device. Try checking the spelling and ensuring the font is installed on your device.")}});k.on("click",".mm-font-show-google",function(){var g= 82$(this),q=$('<div class="load">');g.hide().after(q);jc(function(){q.remove();g.after(Pb())},function(){q.remove();g.show()})});k.on("click",".mm-font-item-more-btn",function(){var g=$(this).closest(".mm-font-items").find(".mm-font-item").length;(g=cc(g))?$(this).before(g):$(this).remove()});k.on("change",".mm-font-latin-only",function(){xc=$(this).hasClass("checked");$(this).closest(".mm-google-fonts").html(Pb())})}function nb(a,b){var e=esc(a),f="Impact"===a?"impact,impac":e;return'<div class="mm-font-item" title="'+ 83e+'" data-font="'+e+'" data-src="'+esc(b||"")+'" style="font-family:'+f+'">'+e+"</div>"}function Ab(){for(var a=wc.concat(vc).concat(Rc),b={},e=[],f=0;f<a.length;f++){var c=a[f];b[c]||(b[c]=!0,Ba(c)&&e.push(c))}if(!e.length)return"";a='<div class="mm-font-section-label">Other fonts on your device</div><div class="mm-font-add-label">Not seeing a font you have? Add it:</div><input class="mm-font-add-input" type="text" placeholder="Font name"/><button type="button" class="mm-font-add-btn l but">Add</button><div class="mm-font-items">'; 84for(f=0;f<e.length;f++)a+=nb(e[f]);return a+"</div>"}function Pb(){ua(tb);var a='<div class="mm-google-fonts"><div class="mm-font-section-label">Google Free Fonts<br/><small>sorted by popularity</small></div>'+cb("Latin Only",xc,{className:"mm-font-latin-only"});a=a+'<div class="mm-font-items">'+cc(0);return a+'<div class="mm-font-item-more-btn l but">more</div></div></div>'}function cc(a){for(var b="",e=0,f=0,c=0;c<tb.length&&(xc&&1E6<tb[c].filesize||(e>=a&&(b+=nb(tb[c].family,tb[c].src),f++),e++, 85!(30<=f)));c++);return b}function jc(a,b){kc||(kc=!0,$.ajax({url:"/ajax_get_google_fonts",dataType:"json",success:function(e){kc=!1;tb=e.fonts;ua(tb);da();a&&a()},error:function(){kc=!1;handleRequestError();b&&b()}}))}function ua(a){for(var b="",e=0;e<a.length;e++){var f=a[e];
85f.src&&!Sc[f.src]&&(b+="@font-face{font-family:'"+esc(f.family||f.name)+"';src:url("+f.src+")}",Sc[f.src]=!0)}b&&$("head").append("<style>"+b+"</style>")}function zb(){if(!Ib())return[];var a=localStorage.getItem("fonts_used"); 86a=a?JSON.parse(a):{};var b=[],e;for(e in a)a.hasOwnProperty(e)&&2592E6>Date.now()-a[e].last_used&&b.push(a[e]);b.sort(function(f,c){return c.last_used-f.last_used});return b}function qa(a,b,e,f){function c(){g.updateColors()}function k(h){h=$(h.target);h.closest(d)[0]||h.closest(q)[0]||h.closest(".BOX,.mask-back")[0]||!$.contains(v.documentElement,h[0])||q.addClass("display-none")}e=e||{};b='<div class="mm-box-edit"><div class="mm-text-wrap"><textarea placeholder="'+esc(b)+'" class="mm-text"></textarea></div><div class="mm-font-options"><div class="color-picker mm-font-color-picker"></div>'; 87b=b+'<div class="color-picker mm-outline-color-picker"></div><div class="mm-font-options-btn-wrap"><button type="button" class="l but mm-font-options-btn" title="Font settings"><svg class="gear-icon" viewBox="0 0 22 22"><path d="M18.92 9.63a.33.33 0 0 0-.22-.13l-1.9-.3c-.1-.32-.25-.67-.43-1.01.12-.18.31-.42.56-.74.25-.31.43-.54.53-.69a.4.4 0 0 0 .09-.24c0-.1-.03-.17-.08-.23-.25-.35-.82-.94-1.72-1.77a.4.4 0 0 0-.26-.1c-.1 0-.18.03-.25.09l-1.48 1.11c-.28-.14-.6-.27-.93-.38l-.3-1.92a.3.3 0 0 0-.11-.22.4.4 0 0 0-.26-.09H9.85c-.2 0-.33.1-.38.3-.09.34-.19.98-.3 1.93-.33.1-.64.23-.95.4L6.78 4.51a.44.44 0 0 0-.27-.1c-.15 0-.48.24-.98.74s-.85.87-1.03 1.12a.44.44 0 0 0-.1.24c0 .08.04.17.11.25.47.56.84 1.04 1.12 1.44-.18.32-.31.64-.4.96l-1.95.29a.31.31 0 0 0-.2.13.4.4 0 0 0-.08.24v2.32c0 .09.03.17.09.24.05.07.12.12.22.13l1.9.28c.1.34.24.69.43 1.03l-.56.74c-.25.31-.43.54-.53.69a.4.4 0 0 0-.02.48c.28.37.85.96 1.72 1.75.08.08.17.11.26.11.1 0 .2-.03.26-.09l1.47-1.12c.29.15.6.28.94.4l.3 1.9c0 .1.04.17.11.23a.4.4 0 0 0 .26.09h2.31c.2 0 .33-.1.38-.3.09-.34.19-.98.3-1.93.32-.1.64-.23.95-.4l1.43 1.13c.1.06.2.1.27.1.16 0 .48-.25.98-.75.5-.49.85-.86 1.03-1.12.07-.07.1-.15.1-.24a.4.4 0 0 0-.1-.26c-.5-.61-.88-1.1-1.12-1.44.14-.26.27-.57.4-.95l1.93-.29a.32.32 0 0 0 .21-.13.4.4 0 0 0 .08-.24V9.87a.4.4 0 0 0-.08-.24m-6.03 3.27c-.52.52-1.15.78-1.89.78-.73 0-1.36-.26-1.88-.78A2.57 2.57 0 0 1 8.34 11c0-.74.26-1.36.78-1.89A2.57 2.57 0 0 1 11 8.34c.74 0 1.37.26 1.89.78.52.53.78 1.15.78 1.89s-.26 1.36-.78 1.89"/></svg></button><div class="mm-font-options-popup display-none ibox"><button type="button" class="lr but sml mm-box-remove-btn">remove</button><div class="mm-font-opt">Font <button type="button" class="mm-font-btn l but sml down-arrow"><span class="mm-font-label">Impact</span></button><input type="hidden" class="mm-font" name="font" value="impact"/></div><div class="mm-font-opt">'+ 88cb("ALL CAPS",!0,{className:"mm-all-caps"});b+=cb("<b>Bold</b>",!1,{className:"mm-font-bold"});b+=cb("<i>Italic</i>",!1,{className:"mm-font-italic"});b=b+'</div><div class="mm-font-opt">'+radioBtn("Shadow",!0,{className:"mm-outline-type"},"shadow");b+=radioBtn("Outline",!1,{className:"mm-outline-type"},"outline");b+=radioBtn("None",!1,{className:"mm-outline-type"},"none");b=b+'</div><div class="mm-font-opt">Outline Width <input class="ow" type="number" maxlength="2" min="0" max="99"/></div><div class="mm-font-opt">Max Font Size (px) <input class="mm-size" type="number" name="size" value="'+ 89((e.maxFontSize||ka())+'" min="1" max="999"/></div>');b=$(b+'<div class="mm-font-opt">Text Align <div class="select sml"><select class="mm-text-align"><option value="center">Center</option><option value="left">Left</option><option value="right">Right</option></select></div></div><div class="mm-font-opt">Vertical Align <div class="select sml"><select class="mm-vertical-align"><option value="middle">Middle</option><option value="top">Top</option><option value="bottom">Bottom</option></select></div></div><div class="mm-font-opt">Opacity<div class="mm-box-opacity-slider"></div><input class="mm-box-opacity" type="number" value="1" min="0" max="1" step="0.1"/></div><div class="mm-font-opt"><div class="l but sml mm-box-bring-top-btn">Bring to top layer</div></div><div class="mm-font-opt"><button type="button" class="l but sml mm-font-apply-to-all">Apply these settings to ALL text boxes</button></div></div></div></div></div>'); 90Z.find(".mm-boxes").append(b);var g=new bb(b,a,e);m.push(g);f&&g.autoResize(Q().w,Q().h,!0);var q=b.find(".mm-font-options-popup"),d=b.find(".mm-font-options-btn");d.on("click",function(){if(q.hasClass("display-none"))$d.on("click",k);else $d.off("click",k);q.toggleClass("display-none")});new dc(b.find(".mm-font-color-picker"),ub[1],ub,c,"Change Font Color",function(){return W});new dc(b.find(".mm-outline-color-picker"),ub[0],ub,c,"Change Outline Color",function(){return W});2<m.length&&Va(g.$box); 91lc&&lc(b)}function Va(a){a.css({background:"#fff"}).animate({opacity:0}
91,500,function(){$(this).css({background:"none",opacity:1})})}function Ka(){Wa.naturalWidth?(Qb?(C.save(),C.fillStyle=Qb,C.fillRect(0,0,W.width,W.height),C.restore()):C.clearRect(0,0,W.width,W.height),0<Q().rotation?(C.translate(W.width/2,W.height/2),C.rotate(Q().rotation/180*Math.PI),180===Q().rotation?(C.translate(-W.width/2,-W.height/2),C.drawImage(Wa,0,0,W.width,W.height),C.translate(W.width/2,W.height/2)):(C.translate(-W.height/ 922,-W.width/2),C.drawImage(Wa,0,0,W.height,W.width),C.translate(W.height/2,W.width/2)),C.rotate(-Q().rotation/180*Math.PI),C.translate(-W.width/2,-W.height/2)):C.drawImage(Wa,0,0,W.width,W.height)):C.clearRect(0,0,W.width,W.height);Tc&&Tc(C,W);C.shadowBlur=0;La&&hb&&C.drawImage(La,0,0);for(var a=!1,b=0;b<m.length;b++)if("image"!==m[b].type||m[b].hidden||m[b].draw(),"image"===m[b].type){var e=m[b].getVals();.85<e.w*e.h/(Q().w*Q().h)&&(a=!0)}a!==mc&&(mc=a,la.find(".mm-preview-msg").toggleClass("display-none", 93!mc).text(mc?'NOTE: The image you added covers most of the template. It might look better if you select it with "Upload new template" or search.':""));for(b=0;b<m.length;b++)"text"!==m[b].type||m[b].hidden||m[b].draw();tc=D.watermarkController.isDefault()?!1:watermarkCanvas(C,W.width,W.height,D.watermarkController.getOpts(),67600,!0);yc();Uc=new Promise(function(f){return yc=f})}function Oa(){}function bb(a,b,e){function f(t){if(7!==t.length||1===c.opacity)return t;var y=parseInt(t.substr(1,2),16), 94L=parseInt(t.substr(3,2),16);t=parseInt(t.substr(5,2),16);return"rgba("+y+","+L+","+t+","+c.opacity+")"}e=e||{};var c=this;c.init(a);var k,g=a.find(".mm-all-caps").hasClass("checked"),q=a.find(".mm-outline-type.checked").data("value"),d=a.find(".mm-font-bold").hasClass("checked"),h=a.find(".mm-font-italic").hasClass("checked"),n=a.find(".mm-text-align").val(),p=e.maxFontSize||a.find(".mm-size").val()>>0||ka();c.type="text";c.outline_width=nc[q];c.text="";c.font_color="#ffffff";c.outline_color="#000000"; 95c.font=a.find(".mm-font").val()||"impact";var r=new Dragger(c.$box,Qa,function(){da();Rb&&Rb()},{enforceBoundary:!0,enableRotate:Vc});r.bindMoveKeyEvents();var G=a.find(".mm-text");c.initEditSettings();a.find(".mm-font-btn").click(function(){Ra(function(t){T(t)})});a.find(".mm-all-caps").change(function(){g=$(this).hasClass("checked");da()});a.find(".mm-size").change(function(){p=k=Math.max(1,ob($(this).val()));da()}).keyup(function(){p=k=Math.max(1,ob($(this).val()));da()});a.find(".mm-outline-type").change(function(){q= 96$(this).data("value");c.outline_width=nc[q];a.find(".ow").val(c.outline_width);da()});a.find(".mm-font-bold").change(function(){d=$(this).hasClass("checked");da()});a.find(".mm-font-italic").change(function(){h=$(this).hasClass("checked");da()});var A=function(){c.outline_width=ob($(this).val());"none"===q&&0<c.outline_width&&(q="shadow",a.find(".mm-outline-type").removeClass("checked"),a.find('.mm-outline-type[data-value="shadow"]').addClass("checked"));da()};a.find(".ow").change(A).keyup(A).val(c.outline_width); 97a.find(".mm-vertical-align").change(function(){b=$(this).val();da()});a.find(".mm-text-align").change(function(){n=$(this).val();da()});a.find(".mm-font-apply-to-all").click(function(){for(var t=0;t<m.length;t++){var y=m[t],L=y.$edit;y!==c&&"text"===y.type&&(y.setFont(c.font),y.setFontMaxSize(p),y.setForceCaps(g),L.find(".mm-outline-type").removeClass("checked"),L.find('.mm-outline-type[data-value="'+q+'"]').addClass("checked").change(),L.find(".mm-font-bold").toggleClass("checked",d).change(),L.find(".mm-font-italic").toggleClass("checked", 98h).change(),L.find(".ow").val(c.outline_width).change(),L.find(".mm-text-align").val(n).change(),L.find(".mm-box-opacity").val(c.opacity).change())}});var X=c.setText=function(t){t=t!==O?t:G.val();t!==c.text&&(c.text=t,da())},T=c.setFont=function(t){t=t.toLowerCase()||"impact";a.find(".mm-font").val(t);a.find(".mm-font-label").text(t).attr("title",t);c.font=t;da()};c.getFont=function(){return c.font};c.isForcedCaps=function(){return g};c.setForceCaps=function(t){g=!!t;a.find(".mm-all-caps").toggleClass("checked", 99g);X()};c.outlineType=function(){return q};c.setOutlineType=function(t){q=t;a.find('.mm-outline-type[data-value="'+t+'"]').click();da()};c.isFontBold=function(){return d};c.setFontBold=function(t){a.find(".mm-font-bold").toggleClass("checked",t).change()};
99c.isFontItalic=function(){return h};c.setFontItalic=function(t){a.find(".mm-font-italic").toggleClass("checked",t).change()};c.getFontMaxSize=function(){return p};c.setFontMaxSize=function(t){a.find(".mm-size").val(t).change()};c.verticalAlign=function(){return b}; 100c.textAlign=function(){return n};c.updateColors=function(){c.font_color=a.find(".mm-font-color-picker").data("picker").getColor();c.outline_color=a.find(".mm-outline-color-picker").data("picker").getColor();da()};c.setFontColor=function(t){a.find(".mm-font-color-picker").data("picker").setColor(t)};c.setOutlineWidth=function(t){a.find(".ow").val(t).change()};c.setOutlineColor=function(t){a.find(".mm-outline-color-picker").data("picker").setColor(t)};c.getVals=function(){var t=r.getVals();return{x:t.x/ 101ta,y:t.y/ta,w:t.w/ta,h:t.h/ta,rotation:t.rotation,font:c.font,font_size:k/1.32/ta>>0,font_max_size:p,font_color:c.font_color,font_shadow:"shadow"===q?1:0,outline_width:c.outline_width,outline_color:c.outline_color,force_caps:g?1:0,text_align:n,vertical_align:b}};c.setVals=function(t,y,L,V,aa){r.setVals(t*ta,y*ta,L*ta,V*ta,aa)};c.constrainVals=function(){r.constrainVals()};c.toggleDrag=function(t){r.toggleDrag(t)};c.dragEnabled=function(){return r.dragEnabled()};c.setVerticalAlign=function(t){a.find(".mm-vertical-align").val(t).change()}; 102c.setTextAlign=function(t){a.find(".mm-text-align").val(t).change()};c.setPlaceholder=function(t){a.find(".mm-text").attr("placeholder",t)};c.autoResize=function(t,y,L){if(L){t=t*ta-10;var V=y*ta/4;L=y=5;"bottom"===b?L=3*V-13:"middle"===b&&(L=1.5*V-2);var aa=0}else V=Ya/uc,aa=r.getVals(),y=V*aa.x,L=V*aa.y,t=V*aa.w,V*=aa.h,aa=aa.rotation;r.setVals(y,L,t,V,aa)};c.draw=function(){var t=r.getVals(),y=oa/Ya,L=t.x,V=t.y,aa=t.w,K=t.h;12<t.w&&(L=Math.round(y*t.x)+3,aa=Math.round(y*t.w)-6);12<t.h&&(V=Math.round(y* 103t.y)+3,K=Math.round(y*t.h)-6);C.save();C.shadowBlur="shadow"===q?c.outline_width:0;C.shadowColor="shadow"===q?f(c.outline_color):"";C.fillStyle=f(c.font_color);for(var x=g?c.text.toUpperCase():c.text,M=x.length,ra=2+M/30>>0,ha=x.trim().split(/\s+/).length,Pa=[],ja=/\r\n?|\n/g;y=ja.exec(x);)Pa.push(y.index);y=Math.sqrt(M*K/aa/2.8)+.5>>0;y=Math.max(Pa.length+1,Math.min(ha,y));ja=M/y;var ea=[];ha=[];for(var Sa=[],Y=0;Y<M-1;){var Ca=x.slice(Y+1).search(/\s/);if(-1!==Ca)Y=Y+Ca+1,Sa.push(Y);else break}Ca= 104p;do{C.font=(d?"bold ":"")+(h?"italic ":"")+Ca+"px "+c.font+("impact"===c.font?",impac":"");for(var U=0;U<=y;U++)if(0===U)ea[U]=0;else if(U===y)ea[U]=M;else{var Da=(ja*U>>0)-ra;0>Da&&(Da=0);var Xa=-1,S=Infinity;for(Y=0;Y<Sa.length;Y++){var sa=Math.abs(Sa[Y]-Da);sa<S&&(Xa=Sa[Y],S=sa)}ea[U]=Xa}for(U=0;U<Pa.length;U++)if(Da=Pa[U],-1===ea.indexOf(Da)){Xa={};var Bb=-1;S=Infinity;for(Y=1;Y<ea.length-1;Y++){var Ta=ea[Y];sa=Math.abs(Ta-Da);sa<S&&(-1===Pa.indexOf(Ta)||Xa[Ta])&&(Bb=Y,S=sa);Xa[Ta]=!0}ea[Bb]= 105Da}Pa.length&&ea.sort(function(Sb,Cb){return Sb>Cb?1:-1});for(U=0;U<y;U++)Ta=U?ea[U]+1:0,sa=x.substr(Ta,ea[U+1]-Ta),ha[U]={text:sa};S=4+.1*Ca;for(U=sa=Y=0;U<y;U++)ha[U].w=C.measureText(ha[U].text).width,ha[U].h=ha[U].text?.86*Ca:0,ha[U].w>Y&&(Y=ha[U].w),sa+=ha[U].h+(U&&ha[U].text?S:0);U=Math.ceil(Ca*Math.min(aa/Y,K/sa));Ca=U<Ca?U:Ca-1}while(Y>aa||sa>K);k=Ca;x=K-sa;"top"===b&&(x=0);"middle"===b&&(x/=2);t.rotation&&(C.translate(L+aa/2,V+K/2),C.rotate(t.rotation/180*Math.PI),C.translate(-L-aa/2,-V-K/ 1062));M=x;for(Y=0;Y<y;Y++)if(x="left"===n?0:"right"===n?aa-ha[Y].w:(aa-ha[Y].w)/2,M+=ha[Y].h+(Y&&ha[Y].text?S:0),sa=ha[Y].text,"shadow"===q)for(ra=0;ra<(c.outline_width?6:1);ra++)C.fillText(sa,L+x,V+M-2);else C.fillText(sa,L+x,V+M-2),c.outline_width&&(C.strokeStyle=f(c.outline_color),C.lineWidth=c.outline_width,C.strokeText(sa,L+x,V+M-2));t.rotation&&(C.translate(L+aa/2,V+K/2),C.rotate(-t.rotation/180*Math.PI),C.translate(-L-aa/2,-V-K/2));C.restore()};c.restoreEditState=function(t,y,L){c.setVals(t.x* 107y,t.y*L,t.w*y,t.h*L,t.rotation);G.val(t.text).change();c.setFont(t.font);c.setForceCaps(0!==t.force_caps);c.setFontBold(0!==t.font_bold);c.setFontItalic(0!==t.font_italic);t.font_color&&c.setFontColor(t.font_color);null===t.outline_width?c.setOutlineType(t.font_shadow?"shadow":"outline"):(c.setOutlineType(0===t.outline_width?"none":t.font_shadow?"shadow":"outline"),c.setOutlineWidth(t.outline_width));t.outline_color&&c.setOutlineColor(t.outline_color);null!==t.font_max_size&&c.setFontMaxSize(t.font_max_size); 108c.setTextAlign(t.text_align);c.setVerticalAlign(t.vertical_align);null!==t.opacity&&c.setOpacity(t.opacity)};G.on("keyup change",function(){X()});jb.after(c.$box);e.coords&&(e=e.coords,r.setVals(e[0],e[1],e[2],e[3]))}function pb(a,b,e,f,c,k){var g=this;g.init(a);g.id=randHash(32);g.type="image";g.element=b;g.displayName=e;g.isPreset=!!f;g.templateId=c;g.radius=0;g.flipH=!1;g.srcTransforms=k;var q=new Dragger(g.$box,Qa,function(){da();Rb&&Rb()},{enforceBoundary:!1,enableRotate:Vc});q.bindMoveKeyEvents(); 109g.initEditSettings();new Slider(this.$edit.find(".mm-box-radius"),this.$edit.find(".mm-box-radius-slider"),0,{min:0,max:50,step:1,val:0,update:function(d){g.radius=d;da()}});this.$edit.on("change",".mm-box-radius",function(){g.radius=Math.min(50,Math.max(0,$(this).val()));da()});g.setRadius=function(d){d=Math.min(50,Math.max(0,d));g.$edit.find(".mm-box-radius").val(d).change()};g.getVals=function(){var d=q.getVals();return{x:d.x/ta,y:d.y/ta,w:d.w/ta,h:d.h/ta,rotation:d.rotation,flipH:g.flipH}};g.setVals= 110function(d,h,n,p,r,G){q.setVals(d*ta,h*ta,n*ta,p*ta,r);G!==O&&(g.flipH=G)};g.constrainVals=function(){q.constrainVals()};g.toggleDrag=function(d){q.toggleDrag(d)};g.dragEnabled=function(){return q.dragEnabled()};g.autoResize=function(d,h,n){if(n)if(d=h=Math.min(d*ta/3>>0,h*ta/3>>0),b.width>b.height){n=d;var p=b.height/b.width*n}else p=d,n=b.width/b.height*p;else{p=Ya/uc;var r=q.getVals();d=p*r.x;h=p*r.y;n=p*r.w;p*=r.h}q.setVals(d,h,n,p)};g.draw=function(){var d=q.getVals(),h=oa/Ya,n=~~Math.round(h* 111d.x),p=~~Math.round(h*d.y),r=~~Math.round(h*d.w);h=~~Math.round(h*d.h);d.rotation&&(C.translate(n+r/2,p+h/2),C.rotate(d.rotation/180*Math.PI),C.translate(-n-r/2,-p-h/2));g.flipH&&(C.translate(n+r/2,p+h/2),C.scale(-1,1),C.translate(-n-r/2,-p-h/2));
111if(1!==g.opacity||g.radius)C.save(),C.globalAlpha=g.opacity;if(g.radius){var G=g.radius/100*Math.min(r,h);C.beginPath();C.moveTo(n+G,p);C.arcTo(n+r,p,n+r,p+h,G);C.arcTo(n+r,p+h,n,p+h,G);C.arcTo(n,p+h,n,p,G);C.arcTo(n,p,n+r,p,G);C.closePath();C.clip()}C.drawImage(b, 112n,p,r,h);(1!==g.opacity||g.radius)&&C.restore();g.flipH&&(C.translate(n+r/2,p+h/2),C.scale(-1,1),C.translate(-n-r/2,-p-h/2));d.rotation&&(C.translate(n+r/2,p+h/2),C.rotate(-d.rotation/180*Math.PI),C.translate(-n-r/2,-p-h/2))};g.restoreEditState=function(d,h,n){g.setOpacity(d.opacity);g.setRadius(d.radius);g.setVals(d.x*h,d.y*n,d.w*h,d.h*n,d.rotation,d.flip_h)};jb.after(g.$box);g.autoResize(Q().w,Q().h,!0);q.lockRatio()}function qb(a){a.preventDefault();var b=a.clientX-$(this).offset().left+$(l).scrollLeft(); 113a=a.clientY-$(this).offset().top+$(l).scrollTop();var e=oa/Ya;b=Math.round(e*b);a=Math.round(e*a);za.beginPath();C.beginPath();za.moveTo(b,a);C.moveTo(b,a);C.save();C.lineCap="round";C.lineWidth=oc;C.strokeStyle=Db;C.shadowColor=Db;C.shadowBlur=2;za.lineCap="round";za.lineWidth=oc;za.strokeStyle=Db;za.shadowColor=Db;za.shadowBlur=2;lb=O;Tb(b+.001,a+.001);$("body").addClass("nosel");jb.on("vmousemove",Eb);$d.on("vmouseup",Ub)}function Eb(a){var b=a.clientX-$(this).offset().left+$(l).scrollLeft();a= 114a.clientY-$(this).offset().top+$(l).scrollTop();var e=oa/Ya;b=Math.round(e*b);a=Math.round(e*a);Tb(b,a)}function Tb(a,b){za.lineTo(a,b);C.lineTo(a,b);pc?(za.save(),za.globalCompositeOperation="destination-out",za.stroke(),za.restore(
114),Ka()):(za.stroke(),C.stroke());za.beginPath();C.beginPath();za.moveTo(a,b);C.moveTo(a,b);pc||(hb=!0)}function Ub(){C.restore();$("body").removeClass("nosel");jb.off("vmousemove",Eb);$d.off("vmouseup",Ub)}function Vb(){$(".mm-select").hide();$b.show();$(".mm-tab").removeClass("set"); 115$("#memetab").addClass("set");if(!$b.html()){var a='<div class="im blank" data-key="blank" alt="Blank custom template" title="Make blank custom meme">Blank</div><div class="im ai" data-key="ai" alt="Custom template from AI" title="Make custom meme from AI">'+(icon("sparkle")+"AI</div>");a+='<div class="im random" data-key="random" alt="Random meme" title="Make meme from random template">'+icon("random")+"</div>";var b=0,e="//s.imgflip.com/ms"+spriteNum+".jpg",f;for(f in u)if(u.hasOwnProperty(f)&& 116!isNaN(f)){var c='style="background:url('+e+") "+-50*b+'px 0px;"';b++;var k=esc(u[f].name);a+='<div class="im" '+c+' data-key="'+esc(f)+'" alt="'+k+' Meme Image" title="Make '+k+' Meme"></div>'}$b.append(a+'<a class="l but" tabindex="-1" id="allTemplates" href="/memetemplates">View All Meme Templates</a>')}}function jd(){$(".mm-select").hide();var a=$("#mm-select-my");a.show();$(".mm-tab").removeClass("set");$("#mytab").addClass("set");Wc||(I.user.id||-1===l.location.href.search("memegenerator")? 117($.getJSON("/ajax_get_my_memes",function(b){if(b.error)MSG(b.error,"red");else{$.extend(u,b);var e="",f;for(f in b){b=u[f];var c=b.img?b.img.src:(b["private"]?"/i-view/":IMAGE_DOMAIN)+"4/"+(+b.id).toString(36)+"."+(b.has_transparency?"png":"jpg");e+="<img class='im um' src='"+esc(c)+"' data-key='"+esc(f)+"' title='"+esc(b.name)+"'/>"}a.html(e||"<div style='line-height:50px;padding-left:10px;'>Upload an image to create your first custom generator!</div>")}}),Wc=!0):a.html()||a.html("<div style='line-height:50px;padding-left:10px;'><button type='button' class='a show-login'>Log in</button> to view and edit any custom templates you upload!</div>"))} 118function kd(){$(".mm-select").hide();var a=$("#mm-select-hot");a.show();$(".mm-tab").removeClass("set");$("#hottab").addClass("set");Xc||($.getJSON("/ajax_get_hot_memes",function(b){if(b.error)MSG(b.error,"red");else{$.extend(u,b);var e="";b=$jscomp.makeIterator(Object.entries(b));for(var f=b.next();!f.done;f=b.next()){var c=$jscomp.makeIterator(f.value);f=c.next().value;c=c.next().value;var k=(c["private"]?"/i-view/":IMAGE_DOMAIN)+"4/"+(+c.id).toString(36)+"."+(c.has_transparency?"png":"jpg");e+= 119'<img class="im hot-meme" src="'+esc(k)+'" data-key="'+esc(f)+'" title="'+esc(c.name)+'"/>'}a.html(e||'<div style="line-height:50px;padding-left:10px;">There are currently no hot memes. Check back later!</div>')}}),Xc=!0)}function Fb(a,b,e,f,c,k,g,q){b.removeClass("mm-hidden");var d=a.val().trim();if(!0===c||d!==a.data("previous_query")){k=!1!==k;var h=Date.now();Yc=h;a.data("previous_query",d);var n=d+(e?"@^":"")+(f?"^@":"")+(k?"^":"")+(g?"*":"")+(d?"":q);zc[n]?Zc(b,zc[n],d):(b.find(".mm-search-loading").addClass("mm-search-visible"), 120$.ajax({url:"/ajax_meme_search_new",data:{q:d,event_type:q,limit:100,transparent_only:f?1:0,include_nsfw:e?1:0,gifs_only:g?1:0,allow_gifs:k?1:0},dataType:"json",success:function(p){var r=h===Yc;r&&b.find(".mm-search-loading").removeClass("mm-search-visible");if(p.error)error_dialog(p.error);else{for(var G=0;G<p.results.length;G++)Wb[+p.results[G].id]=p.results[G];zc[n]=p.results;r&&Zc(b,p.results,d)}}}))}}function Zc(a,b,e){for(var f="",c={},k=0;k<b.length;k++){c[b[k].result_type]=c[b[k].result_type]|| 121[];var g=c[b[k].result_type],q=g.push,d=b[k],h=d["private"]?"/i-view/":"https:"+IMAGE_DOMAIN;var n='<tr class="mm-search-result'+(10<=c[b[k].result_type].length?" display-none":"")+'" data-id="'+d.id+'">';n=n+'<td class="mm-search-result-img-td"><img class="mm-search-result-img" src="'+(h+"2/"+(+d.id).toString(36)+'.jpg"/>');n=n+'</td><td class="mm-search-result-text">'+esc(d.name);"mp4"===d.file_type&&(n+='<div class="mm-search-result-subtitle">animated</div>');+d.has_transparency&&(n+='<div class="mm-search-result-subtitle">contains transparency</div>'); 122+d.pro_only&&(n+='<div class="mm-search-result-subtitle">premium</div>');q.call(g,n+"</td></tr>")}
122f=c.recent||""===e?f+Ac(c.recent,"recent","Recent Templates"):f+Ac(c.user,"user","Meme Templates");c.my&&(f+=Ac(c.my,"my","My Templates"));f+='<div class="mm-search-view-all">';b=e?"/memesearch?q="+esc(encodeURIComponent(e)):"/memetemplates";f+='<a class="l but mm-search-view-all-btn" href="'+b+'">View All Meme Templates</a></div>';a.find(".mm-search-results-tables").html(f);a.removeClass("mm-hidden"); 123a.data("latest_query",e)}function Ac(a,b,e){a=a||[];if("my"===b&&!a.length)return"";b='<table class="mm-search-results-table"><tr class="mm-search-section-title"><td colspan="2">'+e;a.length||(b+='<div class="mm-search-no-results">no results</div>');b=b+"</td></tr>"+a.join("");10<a.length&&(b+='<tr class="mm-search-nav"><td colspan="2"><div class="l but mm-search-prev disabled">‹ Prev</div><div class="l but mm-search-next">Next ›</div></td></tr>');return b+"</table>"}function qc(a,b, 124e){$.ajax({url:"/ajax_meme_search_event",type:"post",dataType:"json",data:{meme_id:a,type:b,query:e.data("latest_query")}})}function $c(a,b,e,f){for(var c="";b<e;b++)if(!f||a[b].pro_only)if(f||!a[b].pro_only){var k=~~a[b].id,g=a[b].name,q=a[b].pro_only?1:"",d="https:"+IMAGE_DOMAIN+(a[b].use_thumbnail?"4/":"")+k.toString(36)+"."+a[b].file_type;c+='<div class="mm-quick-img-wrap" data-id="'+k+'" data-name="'+esc(g)+'" data-pro_only="'+q+'" title="'+esc(g)+'">';c+='<img class="mm-quick-img" src="'+esc(d)+ 125'"/>';c+="</div>"}return c}function Bc(a,b,e,f,c){function k(r){r=$(r.target);r.closest(p)[0]||r.closest(n)[0]||n.addClass("display-none")}var g,q,d,h,n,p;return $jscomp.asyncExecutePromiseGeneratorProgram(function(r){if(1==r.nextAddress)return g=new Image,"http"===a.substr(0,4)&&g.setAttribute("crossorigin","anonymous"),q=new Promise(function(G){return $(g).load(G)}),g.src=a,r.yield(q,2);d=$("<div class='mm-box-edit'>\n\t\t\t\t\t<button type='button' class='mm-box-remove' title='remove this image'>"+ 126X_SVG+"</button>\n\t\t\t\t\t<div class='mm-box-options-wrap'>\n\t\t\t\t\t\t<button type='button' class='mm-box-options-btn l but' title='image settings'><svg class=\"gear-icon\" viewBox=\"0 0 22 22\"><path d=\"M18.92 9.63a.33.33 0 0 0-.22-.13l-1.9-.3c-.1-.32-.25-.67-.43-1.01.12-.18.31-.42.56-.74.25-.31.43-.54.53-.69a.4.4 0 0 0 .09-.24c0-.1-.03-.17-.08-.23-.25-.35-.82-.94-1.72-1.77a.4.4 0 0 0-.26-.1c-.1 0-.18.03-.25.09l-1.48 1.11c-.28-.14-.6-.27-.93-.38l-.3-1.92a.3.3 0 0 0-.11-.22.4.4 0 0 0-.26-.09H9.85c-.2 0-.33.1-.38.3-.09.34-.19.98-.3 1.93-.33.1-.64.23-.95.4L6.78 4.51a.44.44 0 0 0-.27-.1c-.15 0-.48.24-.98.74s-.85.87-1.03 1.12a.44.44 0 0 0-.1.24c0 .08.04.17.11.25.47.56.84 1.04 1.12 1.44-.18.32-.31.64-.4.96l-1.95.29a.31.31 0 0 0-.2.13.4.4 0 0 0-.08.24v2.32c0 .09.03.17.09.24.05.07.12.12.22.13l1.9.28c.1.34.24.69.43 1.03l-.56.74c-.25.31-.43.54-.53.69a.4.4 0 0 0-.02.48c.28.37.85.96 1.72 1.75.08.08.17.11.26.11.1 0 .2-.03.26-.09l1.47-1.12c.29.15.6.28.94.4l.3 1.9c0 .1.04.17.11.23a.4.4 0 0 0 .26.09h2.31c.2 0 .33-.1.38-.3.09-.34.19-.98.3-1.93.32-.1.64-.23.95-.4l1.43 1.13c.1.06.2.1.27.1.16 0 .48-.25.98-.75.5-.49.85-.86 1.03-1.12.07-.07.1-.15.1-.24a.4.4 0 0 0-.1-.26c-.5-.61-.88-1.1-1.12-1.44.14-.26.27-.57.4-.95l1.93-.29a.32.32 0 0 0 .21-.13.4.4 0 0 0 .08-.24V9.87a.4.4 0 0 0-.08-.24m-6.03 3.27c-.52.52-1.15.78-1.89.78-.73 0-1.36-.26-1.88-.78A2.57 2.57 0 0 1 8.34 11c0-.74.26-1.36.78-1.89A2.57 2.57 0 0 1 11 8.34c.74 0 1.37.26 1.89.78.52.53.78 1.15.78 1.89s-.26 1.36-.78 1.89\"/></svg></button>\n\t\t\t\t\t\t<div class='mm-box-options-popup display-none ibox'>\n\t\t\t\t\t\t\t<div class='mm-font-opt'>\n\t\t\t\t\t\t\t\tOpacity\n\t\t\t\t\t\t\t\t<input class='mm-box-opacity' type='number' value='1' min='0' max='1' step='0.1'/>\n\t\t\t\t\t\t\t\t<div class='mm-box-opacity-slider'></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class='mm-font-opt'>\n\t\t\t\t\t\t\t\tRadius\n\t\t\t\t\t\t\t\t<input class='mm-box-radius' type='number' value='0' min='0' max='50' step='1'/>\n\t\t\t\t\t\t\t\t<div class='mm-box-radius-slider'></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class='mm-font-opt mm-font-opt-row'><div class='l but sml mm-box-bring-top-btn'>Bring to top layer</div><div class='l but sml mm-box-flip-btn'>Flip</div></div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class='mm-img-box-name'>"+ 127esc(b)+"</div>\n\t\t\t\t</div>");Z.find(".mm-boxes").append(d);h=new pb(d,g,b,e,f,c);m.push(h);d.find(".mm-box-flip-btn").on("click",function(){h.flipH=!h.flipH;da();Rb&&Rb()});n=d.find(".mm-box-options-popup");p=d.find(".mm-box-options-btn");p.on("click",function(){if(n.hasClass("display-none"))$d.on("click",k);else $d.off("click",k);n.toggleClass("display-none")});da();loading(!1);yb(!0);lc&&lc(d);r.jumpToEnd()})}function ob(a){return Math.round(1E3*a)/1E3}J=J||{};var D=this,nc={shadow:5,outline:1, 128none:0},la=$(J.$main||".mm-main"),Xb=$(J.$previewOuter||"#mm-preview-outer"),Qa=$(J.$preview||".mm-preview"),jb=Qa.find(".mm-canv"),Wa=Qa.find(".mm-img")[0],Z=$(J.$settings||"#mm-settings"),rb=$("#mm-search"),$b=$("#mm-select-popular"),Yb=J.$drawPanel||Xb.find(".mm-draw-panel"),oa,Za,Ya=Xb.width(),uc=Ya,fc,ld=J.noDraw,Cc=J.numTexts>>0,Zb=!1,ub="#000000 #ffffff #995555 #ff3333 #ff8800 #eeee00 #22ee22 #00bff3 #3333ff #dd00cc".split(" "),hb=!1,Gb=!1,pc=!1,ta=1,Vc=J.allowBoxRotation,Qb="#ffffff",Ja,Aa= 129"",fb="",ac="#000000",Kb="",ad=!1,mc=!1,yc=null,Uc=new Promise(function(a){return yc=a}),bd=J.selectCallback,Rb=J.draggerCallback,lc=J.boxAdded,cd=J.boxRemoved,Tc=J.preDraw,La,lb,za,Db,oc=5,m,Ma,W=jb[0],ec,dd;W.getContext&&W.toDataURL&&W.getContext("2d")||alert("The Meme Generator requires a modern browser with HTML5 canvas support. Your browser is too old. Try Chrome or Firefox.");var C=W.getContext("2d");D.remix=function(){return ec};D.previewComplete=function(){return Uc};D.restoreEditStateIid= 130function(a){a=parseInt(a);$.ajax({url:"/ajax_get_remix_data",type:"post",data:{iid:a},dataType:"json",success:function(b){b.error?error_dialog(b.error):D.restoreEditState(b)}})};D.restoreEditState=function(a){var b,e,f,c,k,g,q,d,h,n,p,r,G;return $jscomp.asyncExecutePromiseGeneratorProgram(function(A){if(1==A.nextAddress){ec={iid:a.iid,template_id:a.template_id};if(Q().id!==a.template_id)return A["return"]();a.original_resolution&&Z.find(".mm-output-original-resolution").addClass("checked").change(); 131if(0!==a.rotation){b=Q();e=b.w;if(90===a.rotation||270===a.rotation)b.w=b.h,b.h=e;b.rotation=a.rotation;D.select(Ma)}a.transparency_color&&D.setTransparencyColor(a.transparency_color);if(!a.spacing_type||"none"===a.spacing_type)return A.jumpTo(2);la.find(".mm-spacing-type").val(a.spacing_type);la.find(".mm-spacing-size").val(a.spacing_size);["auto","white","black"].includes(a.spacing_color)?la.find(".mm-spacing-color").val(a.spacing_color):(la.find(".mm-spacing-color").val("custom"),ac=a.spacing_color, 132dd.setColor(a.spacing_color,!0));return A.yield(xb(),2)}if(4!=A.nextAddress){f=$jscomp.makeIterator(a.effects);for(c=f.next();!c.done;c=f.next())k=c.value,g=Z.find('.mm-effect[data-type="'+k.type+'"]'),g.find(".check-wrap").addClass("checked"),g.find("input").val(k.amount).change();for(q=m.length-1;0<=q;q--)D.removeBox(q);d=Q().w/a.width;h=Q().h/a.height;n=[];for(p={$jscomp$loop$prop$i$4$13:0};p.$jscomp$loop$prop$i$4$13<a.positions.length;
132p={$jscomp$loop$prop$i$4$13:p.$jscomp$loop$prop$i$4$13,$jscomp$loop$prop$srcTransforms$12:p.$jscomp$loop$prop$srcTransforms$12}, 133p.$jscomp$loop$prop$i$4$13++)"text"===a.positions[p.$jscomp$loop$prop$i$4$13].type?(r=D.boxCount("text"),qa(1<r?"middle":"top","Text #"+(r+1),{},!1),yb(!0),m[m.length-1].restoreEditState(a.positions[p.$jscomp$loop$prop$i$4$13],d,h)):"image"===a.positions[p.$jscomp$loop$prop$i$4$13].type&&(p.$jscomp$loop$prop$srcTransforms$12={x:a.positions[p.$jscomp$loop$prop$i$4$13].crop_x,y:a.positions[p.$jscomp$loop$prop$i$4$13].crop_y,w:a.positions[p.$jscomp$loop$prop$i$4$13].crop_w,h:a.positions[p.$jscomp$loop$prop$i$4$13].crop_h, 134rotation:a.positions[p.$jscomp$loop$prop$i$4$13].crop_rotation,flipHorizontal:0!==a.positions[p.$jscomp$loop$prop$i$4$13].crop_flip_h},G=pa(a.positions[p.$jscomp$loop$prop$i$4$13].template_id,a.positions[p.$jscomp$loop$prop$i$4$13].file_type,a.positions[p.$jscomp$loop$prop$i$4$13]["private"],p.$jscomp$loop$prop$srcTransforms$12).then(function(X){return function(T){return Bc(T,a.positions[X.$jscomp$loop$prop$i$4$13].display_name,!0,a.positions[X.$jscomp$loop$prop$i$4$13].template_id,X.$jscomp$loop$prop$srcTransforms$12)}}(p)).then(function(X){return function(){return m[m.length- 1351].restoreEditState(a.positions[X.$jscomp$loop$prop$i$4$13],d,h)}}(p)),n.push(G));return A.yield(Promise.all(n),4)}!a.watermark||["off","custom"].includes(a.watermark.text)&&!D.watermarkController.hasRequiredPro()||D.watermarkController.setOpts(a.watermark);A.jumpToEnd()})};D.hideBox=function(a,b){return m[a].hidden?!1:(m[a].hidden=!0,b?Ka():da(),!0)};D.showBox=function(a,b){return m[a].hidden?(m[a].hidden=!1,b?Ka():da(),!0):!1};D.previewWidth=function(){return Ya};D.setMaxPreviewHeight=function(a){fc= 136a};D.canvasWidth=function(){return oa};D.canvasHeight=function(){return Za};D.setCanvasWidth=function(a){ka();var b=Q(),e=oa;oa=Math.round(a);Za=Math.round(b.h/b.w*oa);jb.attr({width:oa,height:Za});Ga(oa,Za);hb&&da();a=oa/e;for(b=0;b<m.length;b++)"text"===m[b].type&&(m[b].setOutlineWidth(ob(m[b].outline_width*a)),m[b].setFontMaxSize(ob(m[b].getFontMaxSize()*a)));Ha(Math.min(oa,Xb.width()))};D.setTransparencyColor=function(a){Qb=a};D.setFont=function(a){for(var b=0;b<m.length;b++)"text"===m[b].type&& 137m[b].setFont(a)};D.setForceCaps=function(a){for(var b=0;b<m.length;b++)m[b].setForceCaps&&m[b].setForceCaps(a)};D.ctx=function(){return C};D.canv=function(){return W};var Q=D.currentMeme=function(){return u[Ma]};D.text=D.getText=function(a){if(a!==O)return m[a]?(m[a].text||"").trim():"";a="";for(var b=0;b<m.length;b++)m[b].text&&(a+=(a?" ":"")+m[b].text.trim());return a};D.boxCount=function(a){for(var b=0,e=m.length-1;0<=e;e--)a&&m[e].type!==a||b++;return b};D.isEmpty=function(){return!D.getText()&& 138!D.boxCount("image")&&!hb};D.memeData=function(a,b){var e=[],f=0,c=0;a=a||oa/Q().w;b=b||Za/Q().h;for(var k=0;k<m.length;k++){var g=m[k].getVals();e.push({type:m[k].type,x:ob(a*g.x),y:ob(b*g.y),w:ob(a*g.w),h:ob(b*g.h),rotation:g.rotation,opacity:m[k].opacity,flipH:g.flipH});"text"===m[k].type?$.extend(e[k],{font_color:m[k].font_color,outline_width:m[k].outline_width,outline_color:m[k].outline_color,font:m[k].getFont(),font_size:g.font_size*b>>0,font_max_size:m[k].getFontMaxSize(),font_shadow:"shadow"=== 139m[k].outlineType()?1:0,font_bold:m[k].isFontBold()?1:0,font_italic:m[k].isFontItalic()?1:0,force_caps:m[k].isForcedCaps()?1:0,text_align:m[k].textAlign(),vertical_align:m[k].verticalAlign(),text:m[k].text}):"image"===m[k].type&&($.extend(e[k],Object.assign({},{template_id:m[k].templateId,display_name:m[k].displayName,radius:m[k].radius,flip_h:m[k].flipH?1:0},m[k].srcTransforms?{crop_x:m[k].srcTransforms.x,crop_y:m[k].srcTransforms.y,crop_w:m[k].srcTransforms.w,crop_h:m[k].srcTransforms.h,crop_rotation:m[k].srcTransforms.rotation, 140crop_flip_h:m[k].srcTransforms.flipHorizontal?1:0}:{})),f++,m[k].isPreset&&c++)}g=Ja!==O?u[Ja]:Q();k=Ja!==O?u[Ja].effects:Q().effects;return Object.assign({},{boxes:e,template:100<g.id?g.id:"",template_url:Q().template_url||"",templates:Q().templates,num_imgs:f,num_scumbag_hats:c,transparency_color:Z.find(".mm-transparency-color-wrap").hasClass("display-none")?"":Qb,spacing_type:Aa,spacing_color:"custom"===fb?ac:fb,spacing_size:Kb,effects:k||"",has_drawing:hb?1:0,rotation:Q().rotation||0},ec&&ec.template_id=== 141g.id?{remix:ec}:{})};var md=D.toggleSetDefaultSettingsBtn=function(){var a=I.user.id&&(3<=I.user.priv||I.user.id===u[Ma].uid);Z.find(".mm-set-default-settings").toggle(!!a)};D.ajaxSetDefaultSettings=function(){if(confirm("This will change the default text box settings for everyone who uses this template in the future, including text box positions, font family, and font colors. Are you sure you want to save your current text box settings as the default?")){for(var a=[],b=0;b<m.length;b++)"text"=== 142m[b].type&&a.push(m[b].getVals());loading("Saving text box settings");$.ajax({url:"/ajax_set_meme_positions",type:"post",dataType:"json",data:{meme_id:Q().id,settings:a},success:function(e){loading(!1);e.error?error_dialog(e.error):MSG("Settings Saved!","green")}})}};D.reset=function(){if(D.isEmpty()||confirm("Are you sure you want to reset to an empty template?"))hb&&(La.width=La.width,hb=!1),$(".mm-text").val("").change(),$(".gen-anon,.gen-private").removeClass("checked"),D.select(Ja||Ma),Gb&&ed()}; 143D.removeBox=function(a){m[a].$box.remove();m[a].$edit.remove();m.splice(a,1);cd&&cd(a)};D.getBoxes=function(){return m};D.select=function(a,b,e){if("ai"===a)H();else if("random"===a)ya();else{"spaced"!==a&&Ja!==O&&!1!==e&&la.find(".mm-spacing-type").val("").change();if("blank"!==a||u.blank){var f=u[Ma];if(e=Zb&&!1!==b)Zb=!1,D.setCanvasWidth(Na(f.w,f.h,!1));Ma=a;var c=u[a],k=c.w,g=c.h,q=Na(k,g,!1);q===k?Z.find(".mm-output-original-resolution").addClass("hidden"):(q=k<q?" (lower)":" (higher)",Z.find(".mm-output-original-resolution small").text(q), 144Z.find(".mm-output-original-resolution").removeClass("hidden"));oa=Math.round(Na(c.w,c.h,Zb));Za=Math.round(c.h/c.w*oa);va(Math.min(oa,Xb.width()));if(!1!==b){for(b=m.length-1;0<=b;b--)"text"!==m[b].type&&D.removeBox(b);q=Math.min(2,m.length);if(c.default_settings){var d=JSON.parse(c.default_settings);q=d.length-m.length;for(b=0;b<q;b++)D.addText("middle");q=d.length}else 1<m.length&&(m[0].setVerticalAlign("top"),m[1].setVerticalAlign("bottom"),m[0].setPlaceholder("Top Text"),m[1].setPlaceholder("Bottom Text")); 145for(b=m.length-1;b>=q;b--)D.removeBox(b);q=[];f&&f.default_settings&&(q=JSON.parse(f.default_settings));for(b=0;b<m.length;b++)if(m[b].autoResize(k,g,!0),d&&d[b]){f=d[b];c.rotation||m[b].setVals(f.x,f.y,f.w,f.h,f.rotation);ma(bc,f.font)||Ba(f.font)||jc();m[b].setFont(f.font);m[b].setFontMaxSize(f.font_max_size!==O?f.font_max_size:ka());m[b].setFontColor(f.font_color);var h=f.font_shadow!==O?f.font_shadow?"shadow":0<f.outline_width?"outline":"none":"shadow";m[b].setOutlineType(h);m[b].setOutlineWidth(f.outline_width!== 146O?f.outline_width:nc[h]);m[b].setOutlineColor(f.outline_color);m[b].setForceCaps(f.force_caps);m[b].setTextAlign(f.text_align);m[b].setVerticalAlign(f.vertical_align);m[b].setPlaceholder("Text #"+(b+1))}else{f=q[b]||{};f.font===m[b].getFont()&&m[b].setFont("impact");f.font_max_size===m[b].getFontMaxSize()&&m[b].setFontMaxSize(ka());f.font_color===m[b].font_color&&m[b].setFontColor("#ffffff");if(f.font_shadow===m[b].font_shadow||f.outline_width===m[b].outline_width)m[b].setOutlineType("shadow"),m[b].setOutlineWidth(nc.shadow); 147f.outline_color===m[b].outline_color&&m[b].setOutlineColor("#000000");f.force_caps===m[b].isForcedCaps()&&m[b].setForceCaps(!0);f.text_align===m[b].textAlign()&&m[b].setTextAlign("center")}}e&&(Zb=!0,D.setCanvasWidth(Na(k,g,!0)));d=Fa(c);jb.attr({width:oa,height:Za});Ga(oa,Za);var n=null;e=new Promise(function(p){return n=p});k=$(Wa).attr("src");d!==k?($(Wa).off("load").on("load",function(){n();var p=u[Ja]||c;if(0!==p.has_transparency&&1!==p.has_transparency&&C.getImageData){var r=v.createElement("canvas"),
148G=Wa.naturalWidth,A=Wa.naturalHeight;r.width=G;r.height=A;r.getContext("2d").drawImage(Wa,0,0,G,A);p.has_transparency=nd(r)?1:0}r=Z.find(".mm-transparency-color-picker");p.has_transparency&&(r.data("picker")||new dc(r,Qb,ub,function(X){Qb=X;da()},"Change Transparency Color",function(){return W}));r.closest(".mm-transparency-color-wrap").toggleClass("display-none",!p.has_transparency);da()}),d?("http"===d.substr(0,4)?Wa.setAttribute("crossorigin","anonymous"):Wa.removeAttribute("crossorigin"),$(Wa).attr("src", 149d)):k&&$(Wa).removeAttr("src")):n();da();$("#mm-meme-title").text(c.name||"Untitled Template").css({"font-weight":700});Z.find(".mm-effect").each(function(){var p=$(this).find(".check-wrap");c.effects&&c.effects[$(this).data("type")]?(p.addClass("checked"),$(this).find("input").val(c.effects[$(this).data("type")]),$(this).find("input,.mm-effect-slider").removeClass("display-none")):p.hasClass("checked")&&p.removeClass("checked").change()});Z.find(".mm-blank-opts").toggleClass("display-none","blank"!== 150a);md();bd&&bd(c);return e}mb()}};D.setMemes=function(a){u=a};D.addTextAuto=function(){var a=D.boxCount("text");qa(1<a?"middle":"top","Text #"+(a+1),{},!0);yb(!0)};D.init=function(){m=[];Ma=0;if(!ld){Yb.html('<button type="button" class="mm-erase lr but sml">erase</button><button type="button" class="mm-erase-all lr but sml">erase all</button><button type="button" class="mm-draw-done-btn l but sml">Done</button><div class="mm-draw-color-picker"></div><div class="mm-draw-width-slider"></div>');La= 151$("<canvas/>")[0];za=La.getContext("2d");Yb.on("click",".mm-erase",function(){pc=!pc;$(this).toggleClass("lr").toggleClass("r")});Yb.on("click",".mm-erase-all",function(){confirm("Are you sure you want to erase your entire drawing?")&&(La.width=La.width,hb=!1,da())});var a=new Slider("",Yb.find(".mm-draw-width-slider"),0,{min:1,max:32,val:oc,showVal:!0,update:function(d){oc=d}});Db=ub[3];a.setBG(Db);new dc(Yb.find(".mm-draw-color-picker"),ub[3],ub,function(d){Db=d;a.setBG(d)},"Change Line Color", 152function(){return W})}1<Cc&&qa("top","Top Text");0<Cc&&qa("bottom","Bottom Text");for(var b=2;b<Cc;b++)qa("middle","Text #"+(b+1));var e=$("#mm-search-dropdown"),f=e.find(".mm-search-nsfw"),c=e.find(".mm-search-gifs-only");rb.on("keyup change paste focus",debounce(function(){rb.is(":focus")&&Fb(rb,e,f.hasClass("checked"),!1,!1,!0,c.hasClass("checked"),"select")},300));f.on("change",function(){Fb(rb,e,f.hasClass("checked"),!1,!0,!0,c.hasClass("checked"),"select")});c.on("change",function(){Fb(rb,e, 153f.hasClass("checked"),!1,!0,!0,c.hasClass("checked"),"select")});rb.on("keydown",function(d){13===d.which&&(rb.blur(),e.find(".mm-search-result").eq(0).click())});$d.on("click",function(d){d=$(d.target);d.closest(rb)[0]||d.closest(e)[0]||e.addClass("mm-hidden")});e.on("click",".mm-search-result",function(){var d=+$(this).data("id"),h;for(h in u)if(u.hasOwnProperty(h)&&+u[h].id===d){mm.select(h);e.addClass("mm-hidden");qc(d,"select_meme_click",e);return}"mp4"===Wb[d].file_type?confirm("This meme is animated so you will be redirected to the GIF Maker. Continue?")&& 154(loading("Opening GIF Maker"),setTimeout(function(){var n=Wb[d],p=n.name.trim().replace(/\s+/,"-").replace(/[^a-zA-Z0-9\-]/,"");l.location="/gif-maker/"+(p?n.id+"/"+p:n.id)},500),qc(d,"select_meme_click",e)):(Oc("search"+d,Wb[d]),e.addClass("mm-hidden"),qc(d,"select_meme_click",e))});$d.on("click",".mm-search-prev,.mm-search-next",function(){for(var d=$(this).closest(".mm-search-results-table").find(".mm-search-result"),h=0,n=0;n<d.length;n++)if(!d.eq(n).hasClass("display-none")){h=n;break}$(this).hasClass("mm-search-next")? 155h<d.length-1&&(h+=10):0<h&&(h-=10);d.addClass("display-none");for(n=h;n<h+10;n++)d.eq(n).removeClass("display-none");$(this).parent().find(".mm-search-prev").toggleClass("disabled",0===h);$(this).parent().find(".mm-search-next").toggleClass("disabled",h>=d.length-10)});Z.on("click","#allTemplates",function(){var d=rb.val();d&&$(this).attr("href","/memesearch?q="+encodeURIComponent(d))});Qa.hover(function(){m[0]&&m[0].dragEnabled()&&Qa.find(".drag-box").removeClass("off")},function(){m[0]&&m[0].dragEnabled()&& 156Qa.find(".drag-box").addClass("off")});Z.find(".mm-add-text").click(D.addTextAuto);Z.on("click",".mm-box-remove,.mm-box-remove-btn",function(){for(var d=$(this).closest(".mm-box-edit"),h=0;h<m.length;h++)if(m[h].$edit.is(d)){if(!confirm("Are you sure you want to remove this "+("image"===m[h].type?"image":"text box")+"?"))break;D.removeBox(h);D.preview();break}});N.on("copy",function(d){var h=$(v.activeElement).closest(".drag-box");if(h.hasClass("drag-top"))for(var n=0;n<m.length;n++)m[n].$box.is(h)&& 157"image"===m[n].type&&((d.originalEvent||d).clipboardData.setData("text/plain","imgflip-box:"+m[n].id),d.preventDefault(),MSG(esc(m[n].displayName)+" copied!","green",2E3))});N.on("paste",function(d){var h=(d.originalEvent||d).clipboardData.getData("text");if(h=h?h.split("imgflip-box:")[1]:"")for(d.preventDefault(),d=0;d<m.length;d++)m[d].id===h&&"image"===m[d].type&&Bc(m[d].element.src,m[d].displayName,m[d].isPreset,m[d].templateId)});Z.find(".mm-reset").click(D.reset);D.watermarkController=od.init(Z.find(".gen-watermark-wrap"), 158function(){return da()});Z.find(".mm-output-original-resolution").change(function(){Zb=$(this).hasClass("checked");var d=Q();D.setCanvasWidth(Na(d.w,d.h,Zb));da()});Z.find(".mm-add-effects").on("click",function(){Z.find(".mm-effect-opts").toggleClass("display-none")});Z.find(".mm-toggle-ai").on("click",function(){Z.find(".mm-ai-opts").toggleClass("display-none");na()});Z.find(".mm-ai-generate").on("click",function(){xa()});var k=debounce(ba,200);Z.find(".mm-effect").each(function(){var d=$(this), 159h=d.find(".check-wrap"),n=d.find("input"),p=d.find(".mm-effect-slider");Slider(n,p,0,{min:+n.attr("min"),max:+n.attr("max"),step:+n.attr("step"),update:k});h.on("change",function(){h.hasClass("checked")?(n.add(p).removeClass("display-none"),n.val(d.data("initial")).change()):(n.add(p).addClass("display-none"),n.val(0).change())})});$("#mm-show-upload").click(P);la.on("click",".mm-add-img",function(){pd()});la.on("click",".mm-rotate",w);la.on("click",".mm-add-spacing",function(){var d=la.find(".mm-spacing-type"); 160""===d.val()?d.val("top").change():d.val("").change()});la.on("change",".mm-spacing-type,.mm-spacing-color,.mm-spacing-size",xb);var g=debounce(xb,100);dd=new dc(la.find(".mm-spacing-color-picker"),ac,["#000000","#ffffff"],function(d){ac=d;g()},"",function(){return W});la.on("change",".mm-blank-width,.mm-blank-height",mb);la.on("click",".mm-blank-ratio",gc);la.on("click",".mm-draw-btn,.mm-draw-done-btn",ed);Qa.on("click",".drag-box",function(){for(var d=$(this),h=0;h<m.length;h++)if(m[h].$box[0]=== 161d[0]&&(m[h].text||"image"===m[h].type)&&!m[h].dragEnabled()){yb(!0);break}});Z.on("click","#memetab",Vb);Z.on("click","#mytab",jd);Z.on("click","#hottab",kd);Z.on("click",".im",function(){z()&&!confirm("Switching templates will remove extra text and images you added. Continue?")||D.select($(this).data("key"))});Z.on("mouseenter",".im",function(){var d=$(this).data("key");d=hd[d]||u[d].name||"Untitled Template";$("#mm-meme-title").text(d).css({fontWeight:d===Q().name?700:400})});Z.on("mouseleave", 162".im",function(){$("#mm-meme-title").text(Q().name||"Untitled Template").css({fontWeight:700})});jb.on("contextmenu",function(){l.ilog("canvas contextmenu")});var q=E.width();700>q&&yb(!1);E.resize(debounce(function(){var d=E.width();d!==q&&(q=d,Ha(Xb.width()))}))};D.initPopMemes=function(){Vb()};var Oc=D.selectNewTemplate=function(a,b){u[a]=b;var e=(b["private"]?"/i-view/":IMAGE_DOMAIN)+"2/"+(+b.id).toString(36)+".jpg";
162$b.find(".im.random").after('<img class="im" src="'+esc(e)+'" data-key="'+esc(a)+ 163'" alt="'+esc(b.name)+'" title="Caption '+esc('"'+b.name+'"')+'"/>');return mm.select(a)},yb=D.toggleDrag=function(a){Qa.toggleClass("drag-disabled",!a);a?Qa.find(".drag-box").removeClass("off drag-top"):Qa.find(".drag-box").removeClass("drag-top");for(var b=0;b<m.length;b++)m[b].toggleDrag(a)},hc,ic,ab,Pc,fd,id=debounce(function(a,b){var e=a.val();e!==fd&&(fd=e,a.removeClass("error"),e&&(isValidImgUrl(e)?(loading("Uploading image"),getDataUrlFromImgUrl(e,function(f,c){loading(!1);b.show();ab=new ImageCropper(b, 164b.width(),b.width());ab.setSrc(f,c);$("#mm-upload-btns").removeClass("display-none");$("#mm-upload-public-wrap").removeClass("display-none");$("#mm-upload-btn").removeClass("display-none");$("#mm-template-save").removeClass("display-none").change();ic=e})):a.addClass("error")))},100),Ob,Qc,Nb={"Courier New":!0,Impact:!0},bc="Impact;Arial;Comic Sans MS;Helvetica;Times New Roman;Times;Courier New;Courier;Verdana;Georgia;Palatino;Garamond;Bookman;Trebuchet MS;Arial Black".split(";"),vc="Al Bayan;Al Nile;Al Tarikh;American Typewriter;Andale Mono;Apple Braille;Apple Chancery;Apple Color Emoji;Apple SD Gothic Neo;Apple Symbols;AppleGothic;AppleMyungjo;Arial Hebrew;Arial Hebrew Scholar;Arial Narrow;Arial Unicode MS;Avenir;Avenir Next;Ayuthaya;Baghdad;Bangla MN;Bangla Sangam MN;Baskerville;Beirut;Big Caslon Medium;Bodoni 72;Bodoni Ornaments;Chalkboard;Chalkboard SE;Chalkduster;Cochin;Copperplate;Corsiva Hebrew;Damascus;DecoType Naskh;Devanagari MT;Devanagari Sangam MN;Didot;Diwan Kufi;Diwan Thuluth;Euphemia UCAS;Farah;Farisi;Futura;GB18030 Bitmap;Geeza Pro;Geneva;Gill Sans;Gujarati MT;Gujarati Sangam MN;Gurmukhi MN;Gurmukhi MT;Gurmukhi Sangam MN;Heiti SC;Heiti TC;Helvetica Neue;Herculanum;Hiragino Kaku Gothic StdN;Hiragino Maru Gothic ProN;Hiragino Mincho ProN;Hiragino Sans GB;Hiragino Sans;Hoefler Text;ITF Devanagari;ITF Devanagari Marathi;InaiMathi;Kailasa;Kannada MN;Kannada Sangam MN;Kefa;Khmer MN;Khmer Sangam MN;Kohinoor Bangla;Kohinoor Devanagari;Kohinoor Telugu;Kokonor;Krungthep;KufiStandardGK;Lao MN;Lao Sangam MN;Lucida Grande;Luminari;Malayalam MN;Malayalam Sangam MN;Marker Felt;Menlo;Microsoft Sans Serif;Mishafi Gold;Mishafi;Monaco;Mshtakan;Muna;Myanmar MN;Myanmar Sangam MN;Nadeem;New Peninim MT;Noteworthy;Optima;Oriya MN;Oriya Sangam MN;PT Mono;PT Sans;PT Sans Caption;PT Sans Narrow;PT Serif;PT Serif Caption;Papyrus;Phosphate;PingFang HK;PingFang SC;PingFang TC;Plantagenet Cherokee;Raanana;STIXGeneral;STIXIntegralsD;STIXIntegralsSm;STIXIntegralsUp;STIXIntegralsUpD;STIXIntegralsUpSm;STIXNonUnicode;STIXSizeFiveSym;STIXSizeFourSym;STIXSizeOneSym;STIXSizeThreeSym;STIXSizeTwoSym;STIXVariants;STSong;Sana;Sathu;Savoye LET Plain:1.0;Shree Devanagari 714;SignPainter-HouseScript;Silom;Sinhala MN;Sinhala Sangam MN;Skia;Snell Roundhand;Songti SC;Songti TC;Sukhumvit Set;Symbol;Tahoma;Tahoma Negreta;Tamil MN;Tamil Sangam MN;Telugu MN;Telugu Sangam MN;Thonburi;Times Roman;Trattatello;Waseem;Webdings;Wingdings;Wingdings2;Wingdings3;Zapf Dingbats;Zapfino".split(";"), 165Rc="Andalus;Angsana New;AngsanaUPC;Aparajita;Arabic Typesetting;Batang;BatangChe;Browallia New;BrowalliaUPC;Calibri;Cambria;Cambria Math;Candara;Consolas;Constantia;Corbel;Cordia New;CordiaUPC;DaunPenh;David;DFKai-SB;DilleniaUPC;DokChampa;Dotum;DotumChe;Ebrima;Estrangelo Edessa;EucrosiaUPC;Euphemia;FangSong;Franklin Gothic Medium;FrankRuehl;FreesiaUPC;Gabriola;Gautami;Gisha;Gulim;GulimChe;Gungsuh;GungsuhChe;IrisUPC;Iskoola Pota;JasmineUPC;KaiTi;Kalinga;Kartika;Khmer UI;KodchiangUPC;Kokila;Lao UI;Latha;Leelawadee;Levenim MT;LilyUPC;Lucida Console;Lucida Sans Unicode;Malgun Gothic;Mangal;Marlett;Meiryo;Meiryo UI;Microsoft Himalaya;Microsoft JhengHei;Microsoft New Tai Lue;Microsoft PhagsPa;Microsoft Sans Serif;Microsoft Tai Le;Microsoft Uighur;Microsoft YaHei;Microsoft Yi Baiti;MingLiU;MingLiU_HKSCS;MingLiU_HKSCS-ExtB;MingLiU-ExtB;Miriam;Miriam Fixed;Mongolian Baiti;MoolBoran;MS Gothic;MS Mincho;MS PGothic;MS PMincho;MS UI Gothic;MV Boli;Narkisim;NSimSun;Nyala;Palatino Linotype;Plantagenet Cherokee;PMingLiU;PMingLiU-ExtB;Raavi;Rod;Sakkal Majalla;Segoe Print;Segoe Script;Segoe UI;Segoe UI Light;Segoe UI Semibold;Segoe UI Symbol;Shonar Bangla;Shruti;SimHei;Simplified Arabic;Simplified Arabic Fixed;SimSun;SimSun-ExtB;Sylfaen;Symbol;Tahoma;Traditional Arabic;Tunga;Utsaah;Vani;Vijaya;Vrinda;Webdings;Wingdings".split(";"), 166wc=[],tb=[],xc=!0,kc=!1,Sc={};D.addText=qa;var da=debounce(Ka,100,!1,100,!0);D.preview=da;D.previewInstantly=Ka;Oa.prototype.init=function(a){this.$edit=a;this.opacity=1;this.$box=$("<div/>",{"class":"drag-box off"})};Oa.prototype.initEditSettings=function(){var a=this;new Slider(this.$edit.find(".mm-box-opacity"),this.$edit.find(".mm-box-opacity-slider"),0,{min:0,max:1,step:.
16601,val:1,update:function(e){a.opacity=e;da()}});this.$edit.on("change",".mm-box-opacity",function(){a.opacity=Math.min(1,Math.max(0, 167$(this).val()));da()});a.setOpacity=function(e){e=Math.min(1,Math.max(0,e));a.$edit.find(".mm-box-opacity").val(e).change()};var b=function(){Qa.find(".drag-box").removeClass("off").removeClass("drag-top");a.$box.addClass("drag-top")};this.$box.on("vmousedown",function(){b();a.$box.attr("tabindex",0).focus()});this.$edit.on("click",".mm-box-bring-top-btn",b)};inherits(bb,Oa);inherits(pb,Oa);var ed=D.toggleDraw=function(){Xb.find(".mm-top-panel").toggleClass("display-none",!Gb);Yb.toggleClass("display-none", 168Gb);Qa.toggleClass("mm-drawing",!Gb);if(Gb)jb.off("vmousedown",qb);else jb.on("vmousedown",qb);Gb=!Gb},Wc=!1,Xc=!1,zc={},Wb={},Yc,pd=D.showAddImagePopup=function(a,b,e){function f(){return h.find(".mm-add-img-show-nsfw").hasClass("checked")}function c(){return h.find(".mm-add-img-transparent-only").hasClass("checked")}function k(K,x,M,ra,ha){var Pa=Fa(Q()),ja=new Image,ea=new Image;"http"===Pa.substr(0,4)&&ja.setAttribute("crossorigin","anonymous");"http"===K.substr(0,4)&&ea.setAttribute("crossorigin", 169"anonymous");var Sa=ha.hasClass("mm-add-img-type-below"),Y=ha.hasClass("mm-add-img-type-above"),Ca=ha.hasClass("mm-add-img-type-left"),U=!1;ha=function(){if(U){var Da=v.createElement("canvas"),Xa=Da.getContext("2d");if(Sa||Y){var S=Math.max(ja.width,ea.width),sa=S/ja.width*ja.height;var Bb=S/ea.width*ea.height;var Ta=S/ja.width;Da.width=S;Da.height=sa+Bb;Xa.drawImage(ja,0,0,ja.width,ja.height,0,Sa?0:Bb,S,sa);Xa.drawImage(ea,0,0,ea.width,ea.height,0,Sa?sa:0,S,Bb)}else{S=Math.max(ja.height,ea.height); 170sa=S/ja.height*ja.width;var Sb=S/ea.height*ea.width;Ta=S/ja.height;Da.width=sa+Sb;Da.height=S;Xa.drawImage(ja,0,0,ja.width,ja.height,Ca?Sb:0,0,sa,S);Xa.drawImage(ea,0,0,ea.width,ea.height,Ca?0:sa,0,Sb,S)}var Cb=new Image;$(Cb).load(function(){var Hb=Q().templates||[{id:Q().id,url:Q().template_url}],gb={id:x,url:ra,display_name:M};Y||Ca?Hb.unshift(gb):Hb.push(gb);u.custom={id:0,templates:Hb,name:"Custom Image",img:Cb,w:Cb.width,h:Cb.height};Hb=[];for(gb=0;gb<m.length;gb++){var Ea=m[gb].getVals();1< 171Ta&&(Ea.x=Math.round(Ea.x*Ta),Ea.y=Math.round(Ea.y*Ta),Ea.w=Math.round(Ea.w*Ta),Ea.h=Math.round(Ea.h*Ta));Y?Ea.y+=Bb:Ca&&(Ea.x+=Sb);Hb.push(Ea)}D.select("custom",!1);for(gb=0;gb<Hb.length;gb++)Ea=Hb[gb],m[gb].setVals(Ea.x,Ea.y,Ea.w,Ea.h,Ea.rotation);yb(!0);loading(!1)});db(Da,Cb)}else U=!0};$(ja).load(ha);$(ea).load(ha);ja.src=Pa;ea.src=K}function g(K,x){if(0!==K.type.indexOf("image"))error_dialog("That file is not an image!");else{var M=new FileReader;M.onload=function(ra){r.show();A=new ImageCropper(r, 172r.width(),r.width());A.setSrc(ra.target.result,K.name);T=ra.target.result;t=null;h.find(".mm-add-img-btns,.mm-add-img-submit,.mm-add-img-public-wrap").removeClass("display-none");h.find(".mm-add-img-remove-bg").removeClass("checked");h.find(".mm-add-img-search-wrap,.mm-quick-imgs").hide();X=(x?"paste:":"")+K.name};M.readAsDataURL(K)}}function q(K){loading("Loading template");var x=Fa(K);"/"===x[0]&&(x=location.protocol+"//"+location.host+x);getDataUrlFromImgUrl(x,function(M){loading(!1);r.show(); 173A=new ImageCropper(r,r.width(),r.width());A.setSrc(M,K.name,K.id);y={};T=M;t=null;h.find(".mm-add-img-btns,.mm-add-img-submit").removeClass("display-none");h.find(".mm-add-img-remove-bg").removeClass("checked")})}function d(){if(proType())return!0;I.done?l.showProPopup?Mc("You can use premium images and much more with Imgflip Pro!",currentMediaSource()+"_pro_img"):vb("Pro Img","You can use premium images with Imgflip Pro Basic"):error_dialog("Page is not finished loading yet. Try again in a few seconds or refresh."); 174return!1}b=b||Bc;e=!1!==e;a='<div class="mm-add-img-popup"><div class="mm-add-img-types concise'+((a?" display-none":"")+'"><div class="mm-add-img-type mm-add-img-type-inside selected"><div class="mm-add-img-type-title">Inside</div>');a+='<div class="mm-add-img-type-diagram"><div class="mm-add-img-current"></div><div class="mm-add-img-new"></div></div>';a+="</div>";
174a+='<div class="mm-add-img-type mm-add-img-type-below">';a+='<div class="mm-add-img-type-title">Below</div>';a+='<div class="mm-add-img-type-diagram"><div class="mm-add-img-current"></div><div class="mm-add-img-new"></div></div>'; 175a+="</div>";a+='<div class="mm-add-img-type-more a" data-swap="Less">More</div>';a+='<div class="mm-add-img-type mm-add-img-type-above">';a+='<div class="mm-add-img-type-title">Above</div>';a+='<div class="mm-add-img-type-diagram"><div class="mm-add-img-current"></div><div class="mm-add-img-new"></div></div>';a+="</div>";a+='<div class="mm-add-img-type mm-add-img-type-left">';a+='<div class="mm-add-img-type-title">Left</div>';a+='<div class="mm-add-img-type-diagram"><div class="mm-add-img-current"></div><div class="mm-add-img-new"></div></div>'; 176a+="</div>";a+='<div class="mm-add-img-type mm-add-img-type-right">';a+='<div class="mm-add-img-type-title">Right</div>';a+='<div class="mm-add-img-type-diagram"><div class="mm-add-img-current"></div><div class="mm-add-img-new"></div></div>';a+="</div>";a+="</div>";e&&(a+='<div class="mm-quick-imgs">',a+=$c(B,0,B.length),a+='<button type="button" class="mm-quick-img-more-btn a">More</button>',a+='<div class="mm-quick-imgs-more display-none"></div>',a+="</div>");a+='<div class="mm-add-img-choose-img">'; 177a+='<div class="mm-add-img-upload-btn file-button l but">Upload Image<input type="file" class="hidden-file-input"/></div>';a+='<input class="mm-add-img-url" type="url" placeholder="Paste image URL"/>';a+='<div class="mm-add-img-btns display-none">';a+='<button type="button" class="mm-add-img-rotate l but sml">'+ROTATE_SVG+"</button>";a+='<button type="button" class="mm-add-img-flip l but sml">flip</button>';a+=cb("Remove background "+icon("sparkle"),!1,{className:"mm-add-img-remove-bg"});a+="</div>"; 178a+='<div class="mm-add-img-preview-wrap"></div>';a+='<div class="mm-add-img-public-wrap display-none">'+cb("Allow this image to be shared publicly",!1,{className:"mm-add-img-public"})+'</div><div class="mm-add-img-public-settings">Name <input class="mm-add-img-name" type="text" maxlength="64" placeholder="e.g. Funny Hat"/>Alternate Names (comma-separated) <input class="mm-add-img-alt-names" type="text" maxlength="255" placeholder="e.g. Silly Hat, Weird Top Hat"/>Description <textarea class="mm-add-img-description" maxlength="512" placeholder="e.g. more info about this image and how it could be used"></textarea>'+ 179(I.user.id?cb("Anonymous <small>(not shown with your username)</small>",!1,{className:"mm-add-img-anon"}):"")+"</div>";a+='<button type="button" class="mm-add-img-submit b but display-none">Add Image</button>';a+='<div class="mm-add-img-search-wrap">';a+='<div class="mm-add-img-or">OR</div>';a+='<input class="mm-add-img-search" type="text" placeholder="Search Memes"/>';a+='<div class="mm-add-img-search-opts hidden">';a+=cb("Include NSFW",!1,{className:"mm-add-img-show-nsfw",title:"Include not-safe-for-work templates"});
180a+=cb("Transparent Background",e,{className:"mm-add-img-transparent-only",title:"Only show templates containing transparency"});a+="</div>";a+='<div class="mm-search-results mm-hidden shadow ibox">';a+='<div class="mm-search-loading">loading...</div>';a+='<div class="mm-search-results-tables"></div>';a+="</div>";a+="</div>";a+="</div>";a+="</div>";var h=$(a),n=h.find(".mm-add-img-search"),p=h.find(".mm-search-results"),r=h.find(".mm-add-img-preview-wrap"),G=new Box({html:h,w:360}),A,X,T,t,y,L,V=debounce(function(K){var x= 181K.val();x!==L&&(L=x,K.removeClass("error"),x&&(isValidImgUrl(x)?(loading("Uploading image"),getDataUrlFromImgUrl(x,function(M,ra){loading(!1);r.show();A=new ImageCropper(r,r.width(),r.width());A.setSrc(M,ra,0,x);T=M;t=null;h.find(".mm-add-img-btns,.mm-add-img-submit,.mm-add-img-public-wrap").removeClass("display-none");h.find(".mm-add-img-remove-bg").removeClass("checked");h.find(".mm-add-img-search-wrap,.mm-quick-imgs").hide();X=x})):K.addClass("error")))},100);h.on("vclick",".mm-add-img-type",function(K){var x= 182$(this);x.parent().find(".mm-add-img-type").removeClass("selected");x.addClass("selected");x=x.hasClass("mm-add-img-type-inside");h.find(".mm-quick-imgs").toggle(x);var M=h.find(".mm-add-img-transparent-only");M.toggleClass("checked",x);p.hasClass("mm-hidden")||M.change();return cancelEvent(K)});h.on("vclick",".mm-add-img-type-more",function(){$(".mm-add-img-types").toggleClass("concise");var K=$(this),x=K.data("swap");K.data("swap",K.text());K.text(x)});h.on("change",".mm-add-img-show-nsfw",function(){$(this).hasClass("checked")? 183(ad||confirm("This will allow any user-uploaded meme template to display in the search results, which may contain not-safe-for-work content. Are you sure you want to include NSFW templates?")?Fb(n,p,f(),c(),!0,!1,!1,"add"):$(this).removeClass("checked"),ad=!0):Fb(n,p,f(),c(),!0,!1,!1,"add")});h.on("change",".mm-add-img-transparent-only",function(){Fb(n,p,f(),c(),!0,!1,!1,"add")});var aa=!0;h.on("keyup change paste focus",".mm-add-img-search",debounce(function(){Fb(n,p,f(),c(),!1,!1,!1,"add");aa&& 184(h.find(".mm-add-img-search-opts").removeClass("hidden"),aa=!1)},300));h.on("vclick",".mm-search-result",function(K){var x=$(this).data("id");if(x){if(+Wb[x].pro_only&&!d())return cancelEvent(K);qc(x,"add_image_click",p);q(Wb[x]);return cancelEvent(K)}});h.on("change",".mm-add-img-upload-btn input",function(){gd?this.files[0]&&g(this.files[0]):error_dialog("Your browser must have HTML5 File support to upload an image. Try upgrading to a modern browser.")});h.on("keyup change paste",".mm-add-img-url", 185function(K){var x=(K.originalEvent||K).clipboardData;if(x&&x.items){x=x.items;for(var M=0;M<x.length;M++)if(0===x[M].type.indexOf("image")){var ra=x[M].getAsFile();if(ra)return g(ra,!0),cancelEvent(K)}}V($(this))});h.on("click",".mm-add-img-submit",function(){var K=function(){if(y){var x=A.getFlipHorizontal(),M=A.getRotation();A.getFlipVertical()&&(x=!x,M=(A.getRotation()+180)%360);Object.assign(y,Object.assign({},A.getVals(),{rotation:M,flipHorizontal:x}))}x=A.getFinalDataUrl("image/png");M=A.getTemplateId(); 186var ra=A.getFilename(),ha=A.getOriginalUrl(),Pa=y;loading("Adding image");h.find(".mm-add-img-type-inside").hasClass("selected")?b(x,ra,!1,M,Pa):k(x,M,ra,ha,h.find(".mm-add-img-type.selected"));G.hide()};h.find(".mm-add-img-public").hasClass("checked")?(loading("Uploading new image"),$.ajax({url:"/ajax_upload_template",type:"post",dataType:"json",data:{img_data:A.getFinalDataUrl("image/png"),template_url:X,template_name:h.find(".mm-add-img-name").val(),template_alt_names:h.find(".mm-add-img-alt-names").val(), 187template_description:h.find(".mm-add-img-description").val(),template_anon:h.find(".mm-add-img-anon").hasClass("checked")?1:0},success:function(x){x.error?(loading(!1),error_dialog(x.error)):(A.setTemplateId(x.id),K())}})):K()});h.on("click",".mm-add-img-rotate",function(){A.rotateClockwise()});h.on("click",".mm-add-img-flip",function(){A.flipHorizontal()});h.on("change",".mm-add-img-remove-bg",function(){var K=this,x,M,ra,ha,Pa,ja,ea,Sa,Y,Ca,U,Da,Xa;return $jscomp.asyncExecutePromiseGeneratorProgram(function(S){switch(S.nextAddress){case 1:x= 188$(K);if(x.hasClass("load-wrap"))return x.toggleClass("checked"),S["return"]();
188if(!x.hasClass("checked"))return A.setSrc(T,A.getFilename()),S["return"]();if(t)return A.setSrc(t,A.getFilename()),S["return"]();if(!fa())return x.removeClass("checked"),S["return"]();M=I.user.remove_bg_used_30_days||0;ra=2-M;if(0>=ra&&!proType())return x.removeClass("checked"),vb("Remove Background","You have used your 2 free background removals. Upgrade to Pro for unlimited, or Basic for 100 per 30 days."),S["return"](); 189if(!proType()&&!confirm("You have "+ra+" of 2 free background removals left in this 30-day period. Continue?"))return x.removeClass("checked"),S["return"]();loadingEl(x,!0);ha=atob(T.split(",")[1]);Pa=new Uint8Array(ha.length);for(ja=0;ja<ha.length;ja++)Pa[ja]=ha.charCodeAt(ja);ea=new FormData;ea.append("image",new Blob([Pa],{type:"image/png"}),"image.png");ea.append("__tok",getCsrfToken());S.setCatchFinallyBlocks(2);return S.yield(fetch("/ajax_remove_background",{method:"POST",body:ea}),4);case 4:Sa= 190S.yieldResult;if(null==(Y=Sa.headers.get("content-type"))||!Y.includes("application/json")){S.jumpTo(5);break}return S.yield(Sa.json(),6);case 6:throw Ca=S.yieldResult,Error(Ca.error);case 5:if(!Sa.ok)throw Error("Background removal failed.");proType()||I.user.remove_bg_used_30_days++;return S.yield(Sa.blob(),7);case 7:U=S.yieldResult;Da=new FileReader;Da.onload=function(){loadingEl(x,!1);
190t=Da.result;A.setSrc(t,A.getFilename());"pro_basic"===proType()&&MSG(I.user.remove_bg_used_30_days+"/100 removals used (per 30 days)", 191"green")};Da.readAsDataURL(U);S.leaveTryBlock(0);break;case 2:Xa=S.enterCatchBlock(),loadingEl(x,!1),x.removeClass("checked"),error_dialog(Xa.message||"Background removal failed."),S.jumpToEnd()}})});h.on("click",".mm-quick-img-wrap",function(){if(!$(this).data("pro_only")||d()){var K=$(this).find("img").attr("src").replace("/4/","/"),x=$(this).data("name"),M=$(this).data("id");loading("Loading image");getDataUrlFromImgUrl(K,function(ra){loading(!1);r.show();A=new ImageCropper(r,r.width(),r.width()); 192A.setSrc(ra,x,M);y={};T=ra;t=null;h.find(".mm-add-img-btns,.mm-add-img-submit").removeClass("display-none");h.find(".mm-add-img-remove-bg").removeClass("checked");h.find(".mm-add-img-search-wrap").hide();h.find(".mm-quick-imgs-more").addClass("display-none")})}});h.on("click",".mm-quick-img-more-btn",function(){var K=h.find(".mm-quick-imgs-more"),x=K.hasClass("display-none");if(x){if(!K.children().length){var M='<div class="mm-quick-img-note">Popular User Uploads</div>'+$c(F,0,F.length);K.html(M)}K.removeClass("display-none")}else K.addClass("display-none"); 193$(this).text(x?"Less":"More")});h.on("change",".mm-add-img-public",function(){h.find(".mm-add-img-public-settings").toggle($(this).hasClass("checked"))})}};var vb=l.showProBasicPopup=function(u,B){var F=$("#pro-basic-popup-wrap").html();F='<div class="pro-basic-popup"><div class="pro-popup-msg-plain">'+(B||"")+"</div>"+F+'</div><div class="pro-popup display-none"><button type="button" class="pro-popup-back-btn a">← Back to Pro Basic</button>';F+=$("#pro-popup-wrap").html();F+="</div>";var J= 194BOX.show({html:F});initProBtn(J.el().find(".pro-basic-popup"),"pro_basic",function(){return J.hide()});J.el().on("click",".pro-popup-back-btn",function(){J.el().find(".pro-basic-popup,.pro-popup").toggleClass("display-none");proEvent("pro_basic","Switch back from pro");J.recenter();initProBtn(J.el().find(".pro-basic-popup"),"pro_basic",function(){return J.hide()})});J.el().on("click",".pro-basic-popup-pro-btn",function(){J.el().find(".pro-basic-popup,.pro-popup").toggleClass("display-none");proEvent("pro", 195"Switch from pro basic");J.recenter();initProBtn(J.el().find(".pro-popup"),"pro",function(){return J.hide()})});proEvent("pro_basic","Clicked "+u)},dc=l.ColorPicker=function(u,B,F,J,pa,Ha){function va(w,z,H){return"#"+(16>w?"0":"")+w.toString(16)+(16>z?"0":"")+z.toString(16)+(16>H?"0":"")+H.toString(16)}function Ga(w,z){var H=parseInt(w.substr(1,2),16),P=parseInt(w.substr(3,2),16),ia=parseInt(w.substr(5,2),16),ca=parseInt(z.substr(1,2),16),Ba=parseInt(z.substr(3,2),16),ma=parseInt(z.substr(5,2),16); 196return Math.sqrt(Math.pow(H-ca,2)+Math.pow(P-Ba,2)+Math.pow(ia-ma,2))}function ya(){if(!Ha)return[];var w=Ha(),z=w&&(w.naturalWidth||w.width),H=w&&(w.naturalHeight||w.height);if(!z)return[];var P=v.createElement("canvas");z=Math.min(z,100);H=Math.min(H,100);P.width=z;P.height=H;P=P.getContext("2d");P.drawImage(w,0,0,z,H);w=P.getImageData(0,0,z,H).data;P={};for(z=0;z<w.length;z+=16){var ia=w[z],ca=w[z+1],Ba=w[z+2];128>w[z+3]||(H=32*Math.round(ia/32)+","+32*Math.round(ca/32)+","+32*Math.round(Ba/32), 197ia=ia+","+ca+","+Ba,P[H]||(P[H]={count:0,exactColors:{}}),P[H].count++,P[H].exactColors[ia]=(P[H].exactColors[ia]||0)+1)}w=Object.values(P).sort(function(Ra,nb){return nb.count-Ra.count});P=[];for(z=0;z<w.length&&5>P.length;z++){H=w[z];ia=null;ca=0;for(var ma in H.exactColors)H.exactColors[ma]>ca&&(ca=H.exactColors[ma],ia=ma);H=ia.split(",");H=va(+H[0],+H[1],+H[2]);ia=!1;for(ca=0;ca<P.length;ca++)if(60>Ga(H,P[ca])){ia=!0;break}if(!ia)for(ca=0;ca<F.length;ca++)if(60>Ga(H,F[ca])){ia=!0;break}ia||P.push(H)}return P} 198function na(w){function z(ua,zb){ma.show();var qa=P.getBoundingClientRect();Pb=ua>=qa.left&&ua<=qa.right&&zb>=qa.top&&zb<=qa.bottom;var Va=Math.floor(Math.max(0,Math.min(1,(ua-qa.left)/qa.width))*ca.width),Ka=Math.floor(Math.max(0,Math.min(1,(zb-qa.top)/qa.height))*ca.height);qa=ca.width;for(var Oa=ca.height,bb=0,pb=0,qb=0,Eb=0,Tb=-1;1>=Tb;Tb++)for(var Ub=-1;1>=Ub;Ub++){var Vb=Ba.getImageData(Math.max(0,Math.min(qa-1,Math.round(Va+Ub))),Math.max(0,Math.min(Oa-1,Math.round(Ka+Tb))),1,1).data;bb+=Vb[0]; 199pb+=Vb[1];qb+=Vb[2];Eb++}qa=va(Math.round(bb/Eb),Math.round(pb/Eb),Math.round(qb/Eb));Ra.clearRect(0,0,13,13);Oa=Va-6;bb=Ka-6;Va=0>Oa?-Oa:0;Ka=0>bb?-bb:0;Oa=Math.max(0,Oa);bb=Math.max(0,bb);
199pb=Math.min(13-Va,ca.width-Oa);qb=Math.min(13-Ka,ca.height-bb);0<pb&&0<qb&&Ra.drawImage(ca,Oa,bb,pb,qb,Va,Ka,pb,qb);Va=parseInt(qa.substr(1,2),16);Ka=parseInt(qa.substr(3,2),16);Oa=parseInt(qa.substr(5,2),16);nb.css("box-shadow","inset 0 0 0 1px "+(128<(299*Va+587*Ka+114*Oa)/1E3?"rgba(0,0,0,0.5)":"rgba(255,255,255,0.5)")); 200ma.find(".eye-dropper-color").css("background",qa);ma.find(".eye-dropper-hex").text(qa.toUpperCase());Va=ua+20;Ka=zb-jc-20;Va+cc>l.innerWidth&&(Va=ua-cc-20);0>Ka&&(Ka=zb+20);ma.css({left:Va,top:Ka});return qa}function H(){Pb&&Ab&&(mb(Ab),xa(!1));fa()}cancelEvent(w);var P=Ha();w=P&&(P.naturalWidth||P.width);var ia=P&&(P.naturalHeight||P.height);if(w){xa();var ca=v.createElement("canvas");ca.width=w;ca.height=ia;var Ba=ca.getContext("2d");Ba.drawImage(P,0,0);Ua=$('<div class="eye-dropper-overlay"></div>'); 201var ma=$('<div class="eye-dropper-preview"><div class="eye-dropper-zoom"><canvas width="13" height="13"></canvas><div class="eye-dropper-zoom-grid"></div></div><div class="eye-dropper-result"><div class="eye-dropper-color"></div><div class="eye-dropper-hex"></div></div></div>');Ua.append(ma);$("body").append(Ua);var Ra=ma.find("canvas")[0].getContext("2d"),nb=ma.find(".eye-dropper-zoom-grid");Ra.imageSmoothingEnabled=!1;var Ab=null,Pb=!1;ma.css("visibility","hidden");var cc=ma.outerWidth(),jc=ma.outerHeight(); 202ma.hide().css("visibility","");Ua.on("mousemove",function(ua){Ab=z(ua.clientX,ua.clientY)});Ua.on("click",H);Ua.on("touchstart touchmove",function(ua){ua.preventDefault();ua=ua.originalEvent.touches[0];Ab=z(ua.clientX,ua.clientY)});Ua.on("touchend",H);$(v).on("keydown.eyedropper",function(ua){27===ua.keyCode&&fa()});Ua.on("contextmenu",function(ua){ua.preventDefault();fa()})}}function fa(){Ua&&(Ua.remove(),Ua=null);$(v).off("keydown.eyedropper")}function xa(w){R.hide();wb&&(N.off("click",wb),wb=null); 203if(w&&B!==Lb)a:{w=B;for(var z=w.toUpperCase(),H=0;H<F.length;H++)if(F[H].toUpperCase()===z)break a;if(Ib()){z=(z=localStorage.getItem("colors_used"))?JSON.parse(z):{};z[w]=z[w]||{name:w};z[w].last_used=Date.now();z=JSON.stringify(z);try{localStorage.setItem("colors_used",z)}catch(P){}}}}function ka(w){w=Na(w,1,1);R.find(".color-slider-2d-wrap").css("background","rgb("+w.r+","+w.g+","+w.b+")")}function Fa(w,z,H){w=Na(w,z,H);return va(w.r,w.g,w.b)}function Na(w,z,H){var P=Math.floor(6*w),ia=6*w-P;w= 204H*(1-z);var ca=H*(1-ia*z);z=H*(1-(1-ia)*z);switch(P%6){case 0:var Ba=H;var ma=z;var Ra=w;break;case 1:Ba=ca;ma=H;Ra=w;break;case 2:Ba=w;ma=H;Ra=z;break;case 3:Ba=w;ma=ca;Ra=H;break;case 4:Ba=z;ma=w;Ra=H;break;case 5:Ba=H,ma=w,Ra=ca}return{r:Math.round(255*Ba),g:Math.round(255*ma),b:Math.round(255*Ra)}}function ba(){if(!Ib())return[];var w=JSON.parse(localStorage.getItem("colors_used")||"{}"),z=[],H;for(H in w)w.hasOwnProperty(H)&&2592E6>Date.now()-w[H].last_used&&z.push(H);z.sort(function(P,ia){return w[ia].last_used- 205w[P].last_used});return z.slice(0,5)}function wa(){var w=ba();if(!w.length)return"";var z='<div class="color-section-label">Recent:</div><div class="color-section">';for(var H=0;H<w.length;H++)z+='<div class="color-box" data-color="'+esc(w[H])+'" style="background:'+esc(w[H])+'"></div>';return z+"</div>"}function $a(){var w=ya();if(!w.length)return"";var z='<div class="color-section-label">From image:</div><div class="color-section">';for(var H=0;H<w.length;H++)z+='<div class="color-box" data-color="'+ 206esc(w[H])+'" data-auto="1" style="background:'+esc(w[H])+'"></div>';return z+'<div class="color-eyedropper-btn" title="Pick color from image"><svg viewBox="0 0 100 100"><path d="m71.3 40.08 1.9-1.88 10.33-10.33a6.47 6.47 0 0 0 0-9.2l-1.58-1.58c-1.23-1.23-2.86-1.9-4.6-1.9s-3.37.67-4.6 1.9L62.42 27.41l-1.88 1.89-5.1-5.1a1.34 1.34 0 0 0-1.89 0l-7.88 7.89a1.34 1.34 0 0 0 0 1.9l4.93 4.92-24.04 24.2q-.12.11-.2.26L19.34 75.2l-.98.95c-1.54 1.46-2.87 2.72-2.9 4.42q-.02 1.55 1.47 3.03 1.47 1.46 3.02 1.44c1.75-.03 3.09-1.44 4.5-2.93l.87-.9 11.98-6.85q.15-.1.29-.22l24.04-24.2 5 5c.52.53 1.37.53 1.9 0l7.87-7.87c.53-.53.53-1.37 0-1.9zM35.77 72.07l-9.47 5.48-3.3-3.3 5.56-9.37L52.48 40.8l7.25 7.25z"/></svg></div></div>'} 207function Ia(){for(var w='<div class="color-section">',z=0;z<F.length;z++)w+='<div class="color-box" data-color="'+esc(F[z])+'" style="background:'+esc(F[z])+'"></div>';return w+"</div>"}function eb(){R||(R=$('<div class="color-popup ibox"><div class="color-panel"><div class="color-boxes"></div><input class="color-input" type="text" maxlength="9" tabindex="-1" value="'+esc(B)+'"/></div><div class="color-slider-2d-wrap"><div class="color-slider-2d"></div><div class="color-bg1"></div><div class="color-bg2"></div></div><div class="color-slider-wrap"><div class="color-slider"></div></div></div>'), 208ib=R.find(".color-input"),ib.change(function(){var w=ib.val();mb(w);xa(!0)}),R.on("click",".color-box",function(){var w=$(this),z=w.data("c
208olor");w=!w.data("auto");mb(z);xa(w)}),R.on("click",".color-eyedropper-btn",na),R.click(cancelEvent),u.append(R),Fc(R.find(".color-slider-2d-wrap"),R.find(".color-slider-2d"),function(w,z){xb=w;Mb=1-z;mb(Fa(Jb,xb,Mb))}),Fc(R.find(".color-slider-wrap"),R.find(".color-slider"),function(w,z){Jb=z;ka(Jb);mb(Fa(Jb,xb,Mb))}),ka(0))}var R,ib,Ua,wb,Jb=0,xb=1,Mb=1,Lb;this.getColor= 209function(){return B};var mb=this.setColor=function(w,z){B=w;ib&&ib.val(w);gc.css("background",w);!z&&J(w)},gc=$('<div class="color-btn" style="background:'+B+'" title="'+(pa||"")+'"></div>');u.addClass("color-picker").append(gc).data("picker",this).click(function(w){cancelEvent(w);eb();if("none"===R.css("display")){R.find(".color-boxes").html(wa()+$a()+Ia());w=R.width();var z=u.offset(),H=z.left+u.width();z=E.width()-z.left;var P=Math.max(H,z),ia=0;P<w+10&&(ia=-(w-P)-10);R.css(z>H?"left":"right", 210ia);R.show();wb=function(){xa(!0)};N.on("click",wb);Lb=B}else xa(!0)})},od=l.WatermarkController=function(){var u={off:"off","imgflip.com":"imgflip.com","made at imgflip.com":"made at imgflip.com",custom:"custom"},B={"bottom-left":"bottom left","bottom-right":"bottom right","top-left":"top left","top-right":"top right",huge:"HUGE"};return{init:function(F,J,pa,Ha){function va(){return pa?"pro"===proType():!!proType()}function Ga(Ia){Ia&&(ba=u[Ia.text]?Ia.text:"imgflip.com",wa=B[Ia.position]?Ia.position: 211"bottom-left",$a=Ia.custom||"","off"!==ba&&"custom"!==ba||va()||(ba="imgflip.com",$a=""),Ha&&"huge"===wa&&(wa="bottom-left"),ya())}function ya(){Fa.text("custom"===ba?$a||"custom":ba);xa.toggleClass("checked","off"!==ba);"off"===ba?Na.hide():Na.text(B[wa]||wa).show();J&&J()}function na(){var Ia=Object.keys(u).map(function(R){return'<option value="'+esc(R)+'"'+(R===ba?" selected":"")+">"+esc(u[R])+"</option>"}).join(""),eb=Object.keys(B).filter(function(R){return!Ha||"huge"!==R}).map(function(R){return'<option value="'+ 212esc(R)+'"'+(R===wa?" selected":"")+">"+esc(B[R])+"</option>"}).join("");return'<div class="watermark-popup"><div class="form-label">Watermark text</div><span class="select"><select class="watermark-text">'+Ia+'</select></span><input type="text" class="watermark-custom'+("custom"!==ba?" display-none":"")+'" placeholder="Your watermark text..." maxlength="255" value="'+esc($a)+'"><div class="form-label">Watermark position</div><span class="select"><select class="watermark-pos">'+eb+'</select></span><div class="form-btns"><button type="button" class="watermark-done-btn l but">Done</button></div></div>'} 213function fa(){var Ia=new Box({html:na(),w:280,pad:20,hideX:!0}),eb=$(".watermark-popup");eb.find(".watermark-done-btn").on("click",function(){return Ia.hide()});eb.find(".watermark-text").on("change",function(){var R=$(this).val();if("off"!==R&&"custom"!==R||va())ba=R,eb.find(".watermark-custom").toggleClass("display-none","custom"!==R),ya();else{var ib=pa?"Imgflip Pro":"Imgflip Pro Basic";R="off"===R?"Remove the imgflip.com watermark with "+ib+"!":"Use custom watermarks with "+ib+"!";pa?l.showProPopup(R, 214"watermark"):vb("Watermark",R);$(this).val(ba)}});eb.find(".watermark-pos").on("change",function(){wa=$(this).val();ya()});eb.find(".watermark-custom").on("input",debounce(function(){$a=$(this).val();ya()},150))}var xa=F.find(".watermark-check"),ka=F.find(".watermark-bubble"),Fa=ka.find(".watermark-bubble-text"),Na=ka.find(".watermark-bubble-pos"),ba="imgflip.com",wa="bottom-left",$a="";F.on("click",".watermark-check, .watermark-bubble",function(Ia){Ia.stopPropagation();fa()});Ga(I.watermark_opts); 215return{getOpts:function(){return{text:ba,position:wa,custom:"custom"===ba?$a:""}},getPostParams:function(){return{watermark_text:ba,watermark_position:wa,watermark_custom:$a}},isDefault:function(){return"imgflip.com"===ba&&"bottom-left"===wa},setOpts:Ga,hasRequiredPro:va}}}}(),nd=l.containsTransparency=function(u){var B=u.width,F=u.height;u=u.getContext("2d");if(!u.getImageData)return!1;u=u.getImageData(0,0,B,F).data;for(var J=0,pa=0;1E3>pa;pa++)if(255>u[(Math.random()*F>>0)*B*4+4*(Math.random()* 216B>>0)+3]&&(J++,.01<J/1E3))return!0;return!1},sc=!1;l.generate=rc;l.memeDone=Jc;l.imgDonePopup=Hc;l.imgDone=Kc;var Dc=l.memes&&l.memes[l.initMeme]?l.memes[l.initMeme].id:0,Ec={};l.ajaxUpdateRecommendedMemes=function(u){u&&u.id&&u.id!==Dc&&(Dc=u.id,Ec[u.id]?$("#mm-recs-wrap").html(Ec[u.id]):$.ajax({url:"/ajax_get_meme_recs",data:{meme_id:u.id},success:function(B){B.error||(Ec[B.meme_id]=B.html,+B.meme_id===+Dc&&$("#mm-recs-wrap").html(B.html))}}))};l.showProPopup=Mc;memeInit=function(){$(".mm-generate").click(function(){rc(Jc, 217!1,!0)});$(".mm-canv").on("contextmenu",function(){tc||(Gc(mm.ctx(),mm.canv(),"",!0),tc=!0)});
217N.on("click",".mm-set-default-settings",function(){mm.ajaxSetDefaultSettings()});N.on("click",".mm-show-pro-basic",function(){vb("FAQ","You can remove the imgflip.com watermark with Imgflip Pro Basic!")});if("#imgUrl="===location.hash.substr(0,8)){var u=location.hash.substr(8).split("&")[0];u&&($("#mm-show-upload").click(),$("#mm-upload-url").val(decodeURIComponent(u)).change(),history.replaceState(null, 218v.title,location.href.split("#")[0]))}$w.on("beforeunload",function(){return $("#done")[0]||mm.isEmpty()?O:!0});!proType()&&l.sfw&&($(".head").prepend(adCode("ad","leaderboard_atf")),$(".gen-bottom-ad").append(adCode("","leaderboard_btf")))};showGenerator=function(u){if(!I.user.id)showLogin();else if(!u.data("meme-iid")||confirm("You already have a meme attached to this comment, are you sure you want to overwrite it?"))loading("Materializing Meme Generator"),$.ajax({dataType:"json",url:"/ajax_get_meme_generator", 219success:function(B){loading(!1);if(B.error)error_dialog(B.error);else{var F=BOX.show({html:B.html,bg:"transparent",noMaskClick:!0});mm=new MemeMaker(B.memes,B.quick_add_imgs,B.quick_trans_imgs,{allowBoxRotation:!0,numTexts:2});mm.init();mm.watermarkController.setOpts(B.watermark_opts);mm.initPopMemes();mm.select(0);proType()||$(".gen-no-watermark-wrap").hide();F.el().on("click",".mm-generate",function(){loading("Generating Meme");rc(function(J){u.find(".c-pending-img").remove();u.data("meme-iid", 220J.iid).addClass("has-pending-img").prepend('<img class="c-pending-img" src="'+IMAGE_DOMAIN+(+J.iid).toString(36)+'.jpg"/>');loading(!1);F.hide()},!0)})}}})}})(window,document,$(window),$(document));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.