Why Christopher Nolan Fell in Love With Bulky, Expensive, Way-Too-Loud Film
Imax used to be considered odd. The Oppenheimer director can’t resist it.
ByBilge Ebiri,
a film critic for New York and Vulture
“Imax is very often seen as a format of vistas and landscapes,” Nolan’s cinematographer Hoyte Van Hoytema says. “But the face is a landscape. It’s essentially a beautiful three-dimensional shape that has emotions and depth.”
Photo: Melinda Sue Gordon/Universal Pictures
“Imax is very often seen as a format of vistas and landscapes,” Nolan’s cinematographer Hoyte Van Hoytema says. “But the face is a landscape. It’s essentially a beautiful three-dimensional shape that has emotions and depth.”
Photo: Melinda Sue Gordon/Universal Pictures
Christopher Nolan was a teenager when he first fell in love with Imax, watching documentaries at the Chicago Museum of Science and Industry’s five-story wraparound dome theater. Like many of us, he was transfixed by the massive screens and the crystal-clear images projected on them. Imax was not only a lot bigger than ordinary movies, it had higher resolution. You could lose yourself in those images, which made the format ideal for immersive documentaries like Ring of Fire, The Living Sea, and, later, Blue Planet.
Back in those days, the idea of feature films shot or presented in Imax seemed like an odd, maybe even foolish, idea. Imax was a hugely expensive format — shot on gigantic and unwieldy cameras that required massive amounts of celluloid. Projectors could only handle so much Imax film running through them, so Imax movies tended to run under 40 minutes. And what about the viewer? Exhibitors worried that audiences would get nauseous looking at huge Imax images for too long, especially if the cuts were too quick or the camera moved too fast. Obviously, such fears turned out to be unwarranted. With Nolan’s three-hour Oppenheimer, shot entirely in Imax and 65-mm., and his 2020 action thriller Tenetreturning to Imax, it’s worth looking at how we got here.
Hollywood began releasing big features in Imax in the early 2000s. Disney’s Fantasia 2000 was a pioneer, and several other animated Disney pictures followed. As Imax the company itself courted more mainstream productions, other studios entered the fray, including Warner Bros. with The Matrix Reloaded and The Matrix Revolutions. These pictures hadn’t been shot in Imax; they were shot on 35-mm. film, the standard film format before digital took over.But because the Imax image is 70-mm., digital remastering (DRM) from 35-mm. to Imax required a careful process of grain removal; otherwise, the movie at that size would look distractingly fuzzy. In removing the grain, one had to make sure that the process didn’t accidentally remove actual information (dust in the air, stray hairs) from the original image as well.
David Keighley, a 50-year veteran of Imax who is now the company’s chief quality officer, remembers going through this process with Nolan and cinematographer Wally Pfister on Batman Begins (2005). During the DRM conversion of Batman Begins for Imax release, Keighley suggested to Nolan that they do a higher-resolution test on a couple of minutes of existing footage of that film, to see how it would look. “Remember the blue flower at the beginning of the movie?” Keighley asks, referring to an early moment when Christian Bale’s Bruce Wayne picks up a rare and strikingly blue flower on his way to meet Liam Neeson’s Ra’s al Ghul. “We did about three minutes of that in 6K” — as opposed to the standard Imax upconversion at the time, 4K. “Most people couldn’t tell the difference, but Chris and I could.”
Impressed, Nolan decided to shoot one effects sequence in Imax for his subsequent feature The Prestige, during the scene where Christian Bale, playing identical twins, sacrifices one of his fingers to ensure that nobody will be able to tell him and his brother apart. The Prestige never actually screened in Imax, but when Nolan began work on his Batman sequel The Dark Knight, he was prepared to shoot several key sequences in Imax — including the opening bank heist, which he thought could also make a good teaser for the film. Keighley says that Imax did four months of testing to prove they could handle such a task. Nolan and Pfister themselves conducted tests in Nolan’s backyard and garage with a 65-pound Imax camera. Knowing that Nolan wanted to shoot car chases in Imax, Pfister put the camera on a tripod in the back of a pickup truck and sped down Sunset Boulevard to see what the footage would look like.
In the summer of 2008, The Dark Knight became the first feature film to include multiple scenes shot in Imax (six, to be exact). While viewers seeing the movie on regular theater screens might not have noticed much difference, those watching in Imax theaters were treated to something quite striking: During the Imax-shot scenes, the aspect ratio of the film would suddenly change. Imax film has a 1.43:1 aspect ratio, meaning the image is a bit more “boxy,” with more information on the top and bottom of the frame. The effect was enthralling, as if the movie were opening up and becoming more immersive before our eyes. Amid its already massive box-office bonanza, The Dark Knight made $6.3 million on opening weekend from 94 Imax venues, a resounding exhibition success.
Since then, more and more of Nolan’s pictures have been shot in the format, including his 2017 masterpiece Dunkirk, about 70 percent of which was filmed on Imax. When I interviewed him last year, the director told me that when he’s discussing a new project with cinematographer Hoyte van Hoytema (who’s shot all of Nolan’s films since Interstellar), the decision to shoot on Imax is not automatic. “The films that we’ve done so far, they’ve all begun with the same conversation: ‘Well, maybe we should do this 16 millimeter, grainy, or whatever,’” Nolan said. Then, his eyes brightened. “‘Or maybe we should do it in Imax.’ In the end, we just can’t resist Imax, because it gives you the finest immersion in the story.”
With Dunkirk, Interstellar, the Dark Knight movies, and Tenet, Nolan has mastered shooting action and wartime spectacle in Imax, but Oppenheimer, aside from a couple of admittedly large explosions, was a different type of movie — a historical drama filled with scientists and politicians arguing. “Imax is very often seen as a format of vistas and landscapes,” van Hoytema says. “But the face is a landscape. It’s essentially a beautiful three-dimensional shape that has emotions and depth. So, for this film, we wanted the human face to have exactly the same wideness, epicness, and bigness that you normally would shoot landscapes in.”
The cinematographer admits Oppenheimer was the biggest challenge of his career. Technically speaking, the large-format film cameras were not designed for shooting in intimate settings. In order to shoot a close-up in Imax, you need to stand farther away from the actor and use a longer lens, which has the effect of flattening out the subject. “You could never, ever put your camera as close as you wanted to your subject,” van Hoytema says. For this reason, he and others have worked to create new lenses that allowed them to heighten a sense of closeness within scenes. “We’ve built lenses that could be brighter, that needed a lot less artificial light in order to do the same thing.”
Because Oppenheimer switches between color and black-and-white, the filmmakers also needed to find a way to shoot black-and-white in Imax, which had never been done before. Keighley says that the emulsion used for black-and-white Imax is actually the same 5222 black-and-white emulsion that’s been around since the 1950s (also known as “Double X”) and has been used in films like Raging Bull, Schindler’s List, and The Lighthouse. What makes it different is its adaptation for Imax cameras. “Kodak makes film in wide rolls,” Keighley explains, “and then they slit it for cameras depending on what gauge film it is, whether it’s 16-mm., 35-mm., or 65-mm.. This is the first time they’ve slit black-and-white for the Imax camera.”
That too required some reengineering on van Hoytema’s part. Black-and-white celluloid film has thicker emulsion, and running it through an Imax camera could have scratched the footage. New gates and pressure plates had to be made for the Imax cameras. Meanwhile, FotoKem labs (which processes Imax film) had to reconfigure their color developer so that they could process the black-and-white negative.
If you get the chance to see Oppenheimer again in a theater in Imax, pay close attention to the black-and-white images of Robert Downey Jr.’s Lewis Strauss, particularly in the early scene where he’s watching Cillian Murphy’s Robert Oppenheimer and Tom Conti’s Albert Einstein by the pond in Princeton. The clarity of the image is downright supernatural. Black-and-white has always looked crisper than color film, but in Imax, the effect is multiplied — you can read every single detail of Strauss’s expression. It’s like being back in the science museum’s dome theater again, watching a nature documentary about Robert Downey’s face.
Photo: Melinda Sue Gordon/Universal Pictures
Besides being massive and unwieldy, Imax cameras pose another problem on set: They are way too loud. “Deafening” is how Emily Blunt, who plays Kitty Oppenheimer in the film, put it. This makes shooting sound takes with Imax nearly impossible. Pay close attention to the scenes in action movies shot on Imax film; very often, they hide the spoken dialogue in clever ways — as in The Dark Knight’s opening bank heist, during which most of the characters are wearing masks. Pretty much all the sound in such scenes is added later.
Benny Safdie, who plays Edward Teller in Oppenheimer, recalls that on his first day on set shooting with an Imax camera, the machine was so loud that he thought something had malfunctioned. “I’m just like, ‘Oh my God, something is going wrong here!’” Safdie says. “So I turn around and I make eye contact with Chris like, ‘Are you going to cut?’ He just gave me the most gentle look. His hands were like, ‘Just go forward, just go forward.’ So I realized I had to act like it’s not happening.”
“My first film with Chris was Tenet, and I was just like, ‘Oh my God, how are we going to do this?’” says Willie Burton, the two-time Academy Award–winning sound mixer on both that film and Oppenheimer. Nolan and his team have managed to solve this problem in a couple of different ways. For starters, they will sometimes film key dialogue shots in 65-mm., which uses quieter cameras. He and his sound crew will also record wild tracks after shooting on Imax — which is to say, they’ll have the actors repeat a scene just as they did during the take, only without the film cameras. “We do it right away once we do the Imax take and we have it and we’re good to go. ‘Okay, let’s do a sound take right away.’ The actors are in there, they’re in the zone,” says Burton.
Nolan prefers doing this to the more common ADR (automated dialogue replacement) method, which requires actors to come back months later, sit in an empty recording booth, and redeliver their lines. (Indeed, sometimes, what we think of as a bad performance in a given movie is just too-obvious ADR work.) That’s one of the reasons Nolan films have sometimes famously had dialogue that’s hard to make out; his brother Jonathan even quipped about it earlier this year while presenting Christopher the Best Director Award from the New York Film Critics Circle. But supervising sound editor Richard King (who’s won four Oscars, three for his work with Nolan) puts it a different way, noting that Nolan’s movies have a big sound to match the size of the image the audience is encountering. That may result in dialogue getting swallowed up, though King insists we hear what Nolan wants us to hear. “A lot of Chris’s movies, it’s the whole experience that he’s going for,” says King. “You’re not just following word for word, like you’re reading something. It’s a whole-body experience.”
In Oppenheimer, King admits that with so much science, history, and characters to keep track of, it was important to make sure the dialogue scenes were extra clear. Such scenes are also cleaned up in post by dialogue editor Gary Rizzo, who works to take any background camera noises out of the footage, be it Imax or 65-mm. Software to help clean audio tracks has developed quite a bit over the past decade, but this still remains a very delicate operation. “It’s kind of a broadband noise, so you really risk changing the frequencies and the tonalities of the dialogue,” says King. “Gary’s a master at finding that razor’s edge of clarity.”
Then there’s the additional challenge of mixing that dialogue with the music and sound effects while maintaining its clarity. On Oppenheimer, that task fell to postproduction sound mixer Kevin O’Connell. “He was able to do a little bob and weave with the music especially,” says King. “He would just do tiny imperceptible moves in the music to keep a word audible, or a syllable even. It was a real dance in the mix to make that work.”
Photo: Universal Pictures
It’s worth asking, even now, why Nolan does things this way. King feels that Nolan’s now-famous fondness for all these tangible things — shooting on celluloid, finishing on film, screening on film, creating practical visual effects and real-world sound effects — stems from a desire to make sure the viewer connects to his work on an intuitive level. “He feels there’s a natural human connection to actual photographed images,” King says. This extends to the natural sound as well, King feels. “As animals, I think we subconsciously recognize a lot of this.”
It sounds almost mystical, but Nolan takes the philosophy even further. He and his editor will watch a cut of a film every Friday. A few weeks into this process, once they’re “somewhat comfortable” with their result, they’ll invite one or two other people to screen it. Nolan finds that he watches his films completely differently when someone new is present in the room. He believes a necessary exchange of narrative information is taking place — not verbally, but by hearing and feeling other people’s reactions to his work.
“When you’re watching a film, you’re very aware of the audience, and you’re aware that they’re seeing the same thing that you’re seeing. And knowing that other people are watching the same thing at the same time has a very different effect on the way you watch it,” Nolan says. “At the end of the screening, you’ll ask them what they think and they will say the things that you were thinking as you watched it, nine times out of ten. That’s the process of audience empathy. That’s the basis of cinema. That’s what distinguishes it from streaming or anything else.”
Animated movies tended to be shorter, which made them potentially more friendly — and cheaper — for Imax conversion.
The terms 65-mm. and 70-mm. are sometimes used interchangeably: 65-mm. is the shooting format, while 70-mm. is the projection format, as 5 mm. of the frame were needed for the audio track. But Imax cameras also use 70-mm. celluloid film, which is run horizontally through the camera, thus further increasing the potential size of the frame — which is why celluloid Imax is sometimes referred to as Imax 70-mm., to distinguish it from digital Imax. (Yes, there are digital Imax projectors today. There are also digital Imax cameras, but that’s for another article. Those look good, but they still don’t look as good as Imax film.)
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(3),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(136),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(408),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"408":408,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]