Gossip & News

Mandy Moore’s Dating History: Zach Braff, Wilmer Valderrama and More


master mentalism tricks

[]

A dating history to remember. Mandy Moore had relationships with several high-profile stars before marrying Dawes frontman Taylor Goldsmith in 2018.

The This Is Us star began dating Wilmer Valderrama in 2000, when she was just 16 years old. “We’re not that close, but we’re friendly. We have some mutual friends,” Moore said of the That ‘70s Show alum during a 2018 interview with Howard Stern. “We’ll see each other around every now and then. He came to my house a couple months ago. I had some friends over. He’s a good guy, he really is.”

After dating several stars, including Zach Braff, Moore married musician Ryan Adams in 2009. “I’m in awe of him — his brain, his passion. He’s truly one of a kind,” the Walk to Remember actress said of Adams to Marie Claire that same year. The duo announced their split in January 2015 after six years of marriage. The “Candy” singer told Glamour in October 2018 she had no regrets about the failed relationship.

{ let bidders = [‘a9’, ‘ix’, ‘iris’]; // create a requestManager to keep track of bidder state to determine when to send ad server // request and what amazonSlots to request from the ad server var requestManager = { adserverRequestSent: false, }; //loop through bidder array and add the bidders to the request manager: bidders.forEach( function( bidder ) { requestManager[bidder] = false; } ); // return true if all bidders have returned function allBiddersBack() { var allBiddersBack = bidders // get the booleans from the object .map( function( bidder ) { return requestManager[bidder]; } ) // get rid of false values – indicates that the bidder has responded .filter( Boolean ) // if length is equal to bidders, all bidders are back .length === bidders.length; return allBiddersBack; } // handler for header bidder responses function headerBidderBack( bidder ) { // return early if request to adserver is already sent if ( requestManager.adserverRequestSent === true ) { return; } // flip bidder back flag if ( bidder === ‘a9’ ) { requestManager.a9 = true; console.log(‘second promise a9 ready’); } else if ( bidder === ‘ix’ ) { requestManager.ix = true; console.log(‘second promise ix ready’); } else if ( bidder === ‘iris’ ) { requestManager.iris = true; console.log(‘second promise iris ready’); } // if all bidders are back, send the request to the ad server if ( allBiddersBack() ) { resolve( url ); } } if ( typeof apstag == ‘object’ && apstag ) { apstag.fetchBids({ slots: [{ slotID: window.prerollTag[vHash], mediaType: ‘video’ }] }, function( bids ) { console.log( “AMI jwp amazon bid callback”, new Date().getTime(), bids ); window.jwpBids[vHash].amazon = true; if ( bids.length > 0 ) { //If we have received any bids back try { console.log(“AMI jwp amazon bid request ad”, bids[0].encodedQsParams); url = url + ‘&scp=’ + bids[0].encodedQsParams; } catch ( e ) { console.log(e); } } else { console.log(“AMI jwp amazon no bids”); } headerBidderBack(‘a9’); }); } else { headerBidderBack(‘a9’); } headertag.cmd.push( function() { headertag.retrieveVideoDemand( [{‘htSlotName’: ‘preroll’}], function( demand ) { console.log( “AMI jwp IX callback”, demand ); if ( ‘undefined’ !== typeof demand.preroll && demand.preroll.length ){ window.jwpBids[vHash].ixBids = demand.preroll[0].targeting.price; console.log( ‘AMI jwp IX Bids’, new Date().getTime(), demand.preroll[0].targeting ); var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } var keys = Object.keys( demand.preroll[0].targeting.price ); for ( var key of keys ) { custParams.set( key, demand.preroll[0].targeting.price[key][0]); } vastParams.set( ‘cust_params’, custParams.toString() ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘ix’); } ); } ); // Get main item context data window.irisContext.getContext(jwplayer(el).getPlaylistItem().mediaid).then(function(data) { // Encode the context data console.log( ‘AMI jwp IrisTV Bids’, new Date().getTime(), data.context ); // Replace the server url with the context data (this is for simple ad requests), // If you have the serverUrl dynamically configured, then you will need to append the context data // under cust_params, so this is just for testing purpose if ( data.context && Object.keys( data.context ).length ) { var vastURL = new URL( url ); var vastParams = new URLSearchParams( vastURL.search ); if ( vastParams.has( ‘cust_params’ ) ) { var custParams = new URLSearchParams( vastParams.get( ‘cust_params’ ) ); } else { var custParams = new URLSearchParams(); } custParams.set( ‘iris_context’, data.context.join(‘,’)); vastParams.set( ‘cust_params’, decodeURIComponent( custParams.toString() ) ); vastURL.search = vastParams.toString(); url = vastURL.toString(); } headerBidderBack(‘iris’); }); setTimeout(function(){ resolve( url ); }, 10000); }); } var player_jwplayer_AvH4n4fZ_zhNYySv2_div = jwplayer(el).setup(videoParams).on(“ready”, function(){ var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var playerInstance = jwplayer(el); ns_.StreamingAnalytics.JWPlayer( playerInstance, { publisherId: “6036076”, labelmapping: “ns_st_pu=”AMI”, c3=”Us Weekly”, ns_st_ge=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ia=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_ce=”” + decodeURIComponent( “1” ) + “”, ns_st_ddt=”” + decodeURIComponent( “%2Anull” ) + “”, ns_st_tdt=”” + decodeURIComponent( “%2Anull” ) + “””, }); }).on(‘adsManager’, (e) => { var vHash = ‘ami’ + decodeURIComponent( ‘AvH4n4fZ’ ); const { adsManager, videoElement } = e; const iasConfig = { anId: ‘928572’, campId: `${jwplayer().getWidth()}x${jwplayer().getHeight()}`, // This is dynamic based on player dimensions, but can be hard coded chanId: window.prerollTag[vHash], placementId: ‘Open Auction’, pubOrder: ‘Video’, pubId: ‘Direct’ }; if (googleImaVansAdapter) { googleImaVansAdapter.init(window.google, adsManager, videoElement, iasConfig); } }).on( ‘time’, function( e ) { var id = this.id; var pct = Math.round( e.position ); if ( ! window.amiPlayersData ) { window.amiPlayersData = {}; } if ( ! window.amiPlayersData[id] ) { window.amiPlayersData[id] = { m3: false, m10: false }; } if ( window.amiPlayersData[id][‘m3’] === false && pct >= 3 ) { window.amiPlayersData[id][‘m3’] = true; console.log( ‘3sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ‘3s played’} ); } if ( window.amiPlayersData[id][‘m10’] === false && pct >= 10 ) { window.amiPlayersData[id][‘m10’] = true; console.log( ’10sec played: ‘, id ); window.dataLayer = window.dataLayer || []; dataLayer.push( {event: ‘JWPlayEvent’, jwTime: ’10s played’} ); } }).on( ‘complete’, function( e ) { if ( window.amiPlayersData && window.amiPlayersData[ this.id ] ) { window.amiPlayersData[ this.id ][‘m3’] = false; window.amiPlayersData[ this.id ][‘m10’] = false; console.log( ‘clear played: ‘, this.id ); } }).once(“play”, function(){ var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var playerInstance = jwplayer(el); loadIrisPlugin(playerInstance, playerInstance.getConfig().plugins[“https://ovp.iris.tv/plugins/jwplayer/v2/iris-jwplayer8.adaptive.min.js”]) }).on(‘play’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language:”English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video play”); }).on(‘complete’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); // skip if the video was paused and trying to resume if (jwplayer(el).getState() !== ‘idle’ && jwplayer(el).getState() !== ‘complete’) { return; } window.permutive.track(“VideoComplete”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video event:”, e); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; }).on(‘time’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.currentTime/e.duration).toFixed(2); if ( (0.25 === progress && false === window.lock_25) || (0.5 === progress && false === window.lock_50) || (0.75 === progress && false === window.lock_75) || (100 === progress && false === window.lock_100) ) { window.permutive.track(“VideoProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 === progress ) { window.lock_25 = true; } if ( 0.5 === progress ) { window.lock_50 = true; } if ( 0.75 === progress ) { window.lock_75 = true; } if ( 1 === progress ) { window.lock_100 = true; } console.log(“Permutive video play progress ” + progress); } }).on(‘mute’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.mute) ? “sound off” : “sound on”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘fullscreen’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoEvent”, { play_id: el, //this will stay constant for all of the events emitted during the same video play event: (e.fullscreen) ? “fullscreen on” : “fullscreen off”, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() } }); console.log(“Permutive video event:”, e); }).on(‘ready’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); console.log(jwInfo); window.lock_25 = false; window.lock_50 = false; window.lock_75 = false; window.lock_100 = false; window.permutive.track(“VideoLoad”, { play_id: el, //this will stay constant for all of the events emitted during the same video play video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video load event”); }).on(‘adPlay’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); window.adInfo = e; var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.adlock_25 = false; window.adlock_50 = false; window.adlock_75 = false; window.adlock_100 = false; window.permutive.track(“VideoAdPlay”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad play”); }).on(‘adClick’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); window.permutive.track(“VideoAdClick”, { play_id: el, //this will stay constant for all of the events emitted during the same video play ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); console.log(“Permutive video ad click”); }).on(‘adTime’, (e) => { var el = decodeURIComponent( “jwplayer_AvH4n4fZ_zhNYySv2_div” ); var vHash = “ami” + decodeURIComponent( “AvH4n4fZ” ); var jwInfo = jwplayer(el).getPlaylistItem(jwplayer(el).getPlaylistIndex()); var progress = (e.position/e.duration).toFixed(2); if ( (0.25 >= progress && false === window.adlock_25) || (0.5 >= progress && false === window.adlock_50) || (0.75 >= progress && false === window.adlock_75) || (0.95 >= progress && false === window.adlock_100) ) { window.permutive.track(“VideoAdProgress”, { play_id: el, //this will stay constant for all of the events emitted during the same video play progress: Number(progress), ad: { duration: Math.round(window.adInfo.duration), creative_name: window.adInfo.adtitle, ad_id: window.adInfo.adId, title: window.adInfo.adtitle, video_type: “instream” //outstream }, video: { duration: Math.round(jwInfo.duration), // in seconds name: jwInfo.title, video_id: decodeURIComponent( “AvH4n4fZ” ), description: jwInfo.description, published_at: new Date(jwInfo.pubdate).toISOString() }, enriched_data:{ tvchannel: decodeURIComponent( “Us%20Weekly” ), //tv channel name language: “English”, //language of the content type: “video”, keywords: jwInfo.tags.split(“,”), //keywords for the page } }); if ( 0.25 >= progress ) { window.adlock_25 = true; } if ( 0.5 >= progress ) { window.adlock_50 = true; } if ( 0.75 >= progress ) { window.adlock_75 = true; } if ( 0.95 >= progress ) { window.adlock_100 = true; } console.log(“Permutive video ad progress ” + progress); } }).setPlaylistItemCallback(function(item, index) { return waitForAmazon // Wait until Amazon is loaded. .then(() => performAsyncBidding( player_jwplayer_AvH4n4fZ_zhNYySv2_div, item, index ), () => { console.log(“AMI JWP bidding FAILER”); }) // External bidding. .then(tag => { // Update the playlist item. console.log(“AMI jwp new headerbid”, tag); return Object.assign({}, item, { adschedule: [{ tag, offset: “pre” }] }); }).catch(function(e){ console.log(“AMI jwp bidding failed”, e); return item; }); // If bidding fails, use unmodified playlist item. });; clearInterval(checkJWReady); } }, 500); })(); ]]>

“I don’t feel guilty for [the divorce]. I don’t fault myself for it. When people said, ‘I’m sorry,’ I was like, ‘No. Sorry would have been had I stayed in a very unhealthy situation.’ I didn’t. I found my way out. And when I did, things opened back up again,” she said.

Moore further elaborated on the nature of her relationship with Adams in a 2019 New York Times exposé in which six other women accused the Whiskeytown alum of various forms of abuse.

“Music was a point of control for him,” she said. “He would always tell me, ‘You’re not a real musician because you don’t play an instrument.’ … His controlling behavior essentially did block my ability to make new connections in the industry during a very pivotal and potentially lucrative time — my entire mid-to-late 20s.”

The Princess Diaries actress told Glamour that she was “still dealing with the trauma of my divorce” when she met Goldsmith in 2015. “Taylor was steadfast in his support — that was a huge sign for me.” The duo met via Instagram after Moore posted about her excitement for a new Dawes album on her Story.

“We have a modern kind of love story,” she told InStyle in March 2019. “If someone would have told me three years ago, ‘That’s your future husband, and you’re going to meet him through Instagram,’ I would have thought that they were absolutely bonkers. It proves that you have to stay open-minded because you just never know.”

The couple welcomed their first child together, August “Gus” Harrison, in February 2021. They announced they were expecting baby No. 2. In June 2022.

Keep scrolling for a look back at Moore’s dating history over the years:

Read The Full Article Here


trick photography
Simone Biles Takes in a Cardinals Game During Her St. Louis Trip
Simone Biles Takes in a Cardinals Game During Her St. Louis Trip
Janel Parrish and Boyfriend Sasha Farber Gush About Unexpected Romance During Red Carpet Debut
Janel Parrish and Boyfriend Sasha Farber Gush About Unexpected Romance During Red Carpet Debut
Tribeca Film Festival 2026 Lineup: The Shorts, Feature Movies & More
Tribeca Film Festival 2026 Lineup: The Shorts, Feature Movies & More
Three Words From Serena Williams Have the Sports World Holding Its Breath
Three Words From Serena Williams Have the Sports World Holding Its Breath
Netflix Adds Beloved Sci-Fi TV Shows Last Season Today
Netflix Adds Beloved Sci-Fi TV Shows Last Season Today
Mares Nest review – a burnished gem from a British master
Mares Nest review – a burnished gem from a British master
Masters of the Universe Proves Jared Letos DCEU Failure Was No Fluke
Masters of the Universe Proves Jared Letos DCEU Failure Was No Fluke
The Ending of Obsession Is Even Darker Than You Realized
The Ending of Obsession Is Even Darker Than You Realized
Blue Bloods Spin-Off Boston Blue Started As A Pitch For A Different Series – TVLine
Blue Bloods Spin-Off Boston Blue Started As A Pitch For A Different Series – TVLine
Megan Thee Stallion Sizzles in Bikini for Baywatch Reboot Cameo
Megan Thee Stallion Sizzles in Bikini for Baywatch Reboot Cameo
Hacks Creators Talk Spin-Off Chances, That Perfect Judy And Barbra Duet, And Why We Didnt See DJs Reaction To Deborahs Illness – TVLine
Hacks Creators Talk Spin-Off Chances, That Perfect Judy And Barbra Duet, And Why We Didnt See DJs Reaction To Deborahs Illness – TVLine
Mary McDonnell Tells All About Surprise The Boroughs Role
Mary McDonnell Tells All About Surprise The Boroughs Role
Boza Serves as Panamas Musical Ambassador for World Cup 2026 & More Uplifting Moments in Latin Music
Boza Serves as Panamas Musical Ambassador for World Cup 2026 & More Uplifting Moments in Latin Music
The 9 Biggest Rock + Metal Stars From Indiana
The 9 Biggest Rock + Metal Stars From Indiana
Earl Sweatshirt Postpones North American Tour With MIKE
Earl Sweatshirt Postpones North American Tour With MIKE
Bruce Springsteen and Dropkick Murphys Perform Im Shipping Up to Boston in New Jersey
Bruce Springsteen and Dropkick Murphys Perform Im Shipping Up to Boston in New Jersey
Dark Schemes and Deadly Puzzles: Mystery & Thriller Novels For You – NewInBooks
Dark Schemes and Deadly Puzzles: Mystery & Thriller Novels For You – NewInBooks
Interview with Lexxi James, Author of Sealed: The Wedding – NewInBooks
Interview with Lexxi James, Author of Sealed: The Wedding – NewInBooks
Interview with T.L. Johnson, Author of Nothing Important, Everything Important – NewInBooks
Interview with T.L. Johnson, Author of Nothing Important, Everything Important – NewInBooks
New Business and Finance Books to Read | June 2 – NewInBooks
New Business and Finance Books to Read | June 2 – NewInBooks
7 Summer Beauty Essentials Worthy of Wearing to the French Open
7 Summer Beauty Essentials Worthy of Wearing to the French Open
Turn the Page: The Second Chapter of Hermèss Fall 2026 Unfolds Behind the Gates of Bel Air
Turn the Page: The Second Chapter of Hermèss Fall 2026 Unfolds Behind the Gates of Bel Air
Not Black—the Unexpected Heel Color Alexandra Just Wore in the Monaco Paddock
Not Black—the Unexpected Heel Color Alexandra Just Wore in the Monaco Paddock
Ciara Miller and the Art of Dressing for Revenge
Ciara Miller and the Art of Dressing for Revenge
Key of Bones: Curse of the Ghost Pirate Drops Its Official Trailer!
Key of Bones: Curse of the Ghost Pirate Drops Its Official Trailer!
This Week in Horror: Scary Movie 6 Divides, YouTubers Dominate, and Eli Roth Has Ice Cream
This Week in Horror: Scary Movie 6 Divides, YouTubers Dominate, and Eli Roth Has Ice Cream
Movie Review: Southern Scares | HNN
Movie Review: Southern Scares | HNN
Movie Review: Hacked: A Double Entendre Of Rage Fueled Karma | HNN
Movie Review: Hacked: A Double Entendre Of Rage Fueled Karma | HNN