PageSourceSearch

https://shop.ford.com/aemservices/common/api/component/v2/loader.js/golf-spc?make=Ford&region=US

js ford.com collected 2026-10-09 21:34:27 UTC 39,686 bytes, 1 lines download raw bytes

1!function(e){var t={};function a(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,t){if(1&t&&(e=a(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(a.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)a.d(n,i,function(t){return e[t]}.bind(null,i));return n},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=0)}([function(e,t,a){"use strict";a.r(t);const n=e=>"object"==typeof e&&!!e;var i=e=>!Array.isArray(e)&&e-parseFloat(e)+1>=0,r=n,s=e=>"function"==typeof e,l=e=>null!=e&&(Array.isArray(e)?e:[e])||[],o=e=>JSON.parse(JSON.stringify(e));var c=e=>new Promise((t,a)=>{const n=document.createElement("script");n.type="text/javascript",n.addEventListener("load",()=>t(n),!1),n.addEventListener("error",()=>a(n),!1),n.src=e,document.body.appendChild(n)});class m extends Error{constructor(e){super(e.statusText),this.response=e}}const u={dataType:"json",headers:[]},d={json:{headers:{Accept:"application/json","Content-Type":"application/json"},data:e=>JSON.stringify(e),response:e=>e.json()}},p={},y={},f=async(e,t="GET",a=null,n={})=>{const i=Object.assign({},u,y,n),r="boolean"==typeof i.cache?i.cache:"GET"===t;if(r&&p[e])return p[e];const s=d[i.dataType];delete i.cache,delete i.dataType;const l={...i,method:t,headers:Object.assign(i.headers,s.headers,n.headers)};a&&(l.body=s.data&&s.data(a)||a);let o=fetch(e,l).then(e=>{if(!e.ok)throw new m(e);return s.response&&s.response(e)||e});return r&&(o=Promise.resolve(o),p[e]=o),o};var T=async(e,t={})=>f(e,"GET",null,t);var g=e=>{const t=[];return Object.entries(e).forEach(([e,a])=>{a&&t.push(encodeURIComponent(e)+"="+encodeURIComponent(a))}),t.join("&")},h=e=>{const t={};return(e||"").split("&").forEach(e=>{const a=e.indexOf("=");a>=0&&(t[decodeURIComponent(e.substring(0,a))]=decodeURIComponent(e.substring(a+1)))}),t};var b=e=>{const t={};return(...a)=>{const n=JSON.stringify(a);let i=t[n];return void 0===i&&(i=e.apply(void 0,a),t[n]=i),i}};const A=function(){if(null!=window.isDev)return window.isDev;const e=window.location.hostname.split(".")[0];return window.isDev=["localhost","internal","dev","dev2"].some(t=>e.includes(t)),window.isDev},v=function(){if(window.console&&window.console.log&&A())if(window.console.log.apply)window.console.log.apply(window.console,arguments);else for(var e=0;e<arguments.length;e++)window.console.log(arguments[e])},S=document.currentScript.src,P=S.indexOf("?"),{region:D,make:x}={...P<0?{}:h(S.substring(P+1)),...document.currentScript.dataset},E=new URL(S,window.location),C=/(?:^|\.)fr[a-z]*\./.test(window.location.hostname)?"fr":"en";document.documentElement.setAttribute("lang",C);const w=()=>{document.body&&document.body.classList.add("opt1")};/(?:^|\.)shop(?:us|ca)?\.ford\./.test(window.location.hostname)&&-1!==window.location.pathname.indexOf("/estimate-payment/")&&(document.body?w():document.addEventListener("DOMContentLoaded",w,{once:!0}));var F={make:x||"Ford",region:D||"US",serviceHost:E.origin,libHost:E.origin+(E.pathname.startsWith("/cmslibs")?"/cmslibs":"")};var M={defaults:{appContext:"T1",planType:"MSRP",term:60,tradeIn:0,downPaymentPercentage:"CA"===F.region?0:.1,requiredBuyTerms:[36,48,60,72,84],cash:{apr:"CA"===F.region?9:"Lincoln"===F.make?5:7,terms:[24,36,48,60,72,84],maxApr:26},inputConfig:{region:F.region,make:F.make,model:null,year:null,type:null,trim:null,configToken:null,vin:null,dealerPACode:null,zipcode:null,defaultTerm:null,paymentType:null,host:"BrandSite",plantype:"MSRP",changeVehicleUrl:null,includeTaxes:"CA"===F.region?1:0,includeLuxuryTax:!0,taxToggle:0,showFriendsAndNeighbors:null,paymentFrequency:"CA"===F.region&&"Ford"===F.make?"biweekly":"monthly",downPayment:null,tradeIn:null,options:{allowChangeVehicle:!0,allowChangeTrim:!0,allowChangeTab:!0,allowPrint:!0,allowSave:!1,allowSearchInventory:!1,allowPurchase:!0,showFooter:!0,isDealerConnect:!1,useOptionsLessAC:!1,enableFAFA:!1}}},localFeeTable:{AR:7.25,CT:12.25,KY:8,MA:13.75,MO:12.75,RI:16,"TX|C":6.5,"VA|C":17.75,"VA|R":13.25,WV:8.25},leaseOverrides:{"2021|Ford|Bronco|US":{LeaseTerm:[{Term:24,APR:5.66},{Term:36,APR:6.09},{Term:39,APR:6.28},{Term:48,APR:6.46}]}},creditOptions:{nameplateResiduals:{"2021|Ford|Mache|US":[{definers:["VS-KX","DR--B","EN-C1"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-KX","DR--B","EN-C1","ABFBP","J5XAB"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-KX","DR--B","EN-C1","HKLAG","J5XAB"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-KX","DR--F","EN-C2"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-KX","DR--F","EN-C2","ABFBP","J5XAB"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-KX","DR--F","EN-C2","HKLAG","J5XAB"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-KY","DR--B","EN-EH"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-LE","DR--B","EN-C1"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-LE","DR--B","EN-EH"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-LE","DR--F","EN-C2"],residuals:[{term:36,value:43},{term:48,value:36}]},{definers:["VS-LE","DR--F","EN-EJ"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-LE","DR--F","EN-EJ","ABJAJ"],residuals:[{term:36,value:42},{term:48,value:35}]},{definers:["VS-JZ","DR--E","EN-EK"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-JZ","DR--E","EN-EK","HKLAG"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-JZ","DR--E","EN-EK","CHABB"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-JZ","DR--E","EN-EK","CHABB","HKLAG"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-JZ","DR--E","EN-EL","DWBAP"],residuals:[{term:36,value:41},{term:48,value:34}]},{definers:["VS-JZ","DR--E","EN-EL","DWBAP","HKLAG"],residuals:[{term:36,value:41},{term:48,value:34}]}],"2022|Ford|F-150 Lightning|US":[{definers:["SE-JV","HTHAD"],residuals:[{term:36,value:52},{term:48,value:43}]},{definers:["SE-JV","HTHAE"],residuals:[{term:36,value:52},{term:48,value:43}]},{definers:["SE-GJ","HTHAD"],residuals:[{term:36,value:50},{term:48,value:42}]},{definers:["SE-GJ","HTHAE"],residuals:[{term:36,value:50},{term:48,value:42}]},{definers:["SE-GR","HTHAD"],residuals:[{term:36,value:47},{term:48,value:34}]},{definers:["SE-GR","HTHAE"],residuals:[{term:36,value:47},{term:48,value:34}]},{definers:["SE-GU","HTHAE"],residuals:[{term:36,value:45},{term:48,value:34}]}]},mileageAdjustments:[{mileage:7500,adjustment:4},{mileage:10500,adjustment:3},{mileage:12e3,adjustment:2},{mileage:13500,adjustment:1},{mileage:15e3,adjustment:0},{mileage:16500,adjustment:-1},{mileage:18e3,adjustment:-2},{mileage:19500,adjustment:-3}],defaultTerm:36,defaultAnnualMileage:10500,maxCashPercentage:45},flexBuy:{decrementRate:15,initialCalcTerm:{66:60,75:72},initialLimitTerm:36}};const R=(e,t,a,n,i)=>{const r=i&&i.options&&!0===i.options.enableFAFA,s="true"===String(e.isFAFAEnabled_shop||"").toLowerCase();if(!r||!s)return!1;const l=(e=>{if(e&&e.excludedFAFAVehicles_shop)try{return String(e.excludedFAFAVehicles_shop).split(",").map(e=>e.trim())}catch(e){return[]}return[]})(e);if(l.length>0){const e=l.some(e=>{const[i,r,s]=e.split("|").map(e=>e.toLowerCase()),l="*"===i||i===String(a).toLowerCase(),o="*"===r||r===t.toLowerCase(),c="*"===s||s===(n||"").toLowerCase();return l&&o&&c});return e?console.log("FAFA: Vehicle excluded from FAFA pricing:",{year:a,model:t,trim:n}):console.log("FAFA: Vehicle eligible for FAFA pricing:",{year:a,model:t,trim:n}),!e}return!0},L=F.serviceHost,I="trimName,nameplateDisplayNameShort,enable_tradeInLink,enable_creditLink,enable_disclaimer,enable_promoFriends
1Family,enable_standardLease,incentivesLink,configurationDisclaimer,applyDealerDiscount,dealerDiscountPercentage,globalDealerDiscountPercentage,isFAFAEnabled_shop,excludedFAFAVehicles_shop,isSevoEnabled,trimidOverride",O={MSRP:"MSRP",AZ:"AZPlan",FNX:"XPlan",PRX:"XPlan",SPX:"XPlan"},N=M.defaults,k={},_=(e,t,a)=>T(L+"/aemservices/common/api/attributes/proxy?"+g({client:"spc",region:F.region,url:e+"?"+g(t),filter:a})),j=e=>(v("SPC: api failure",e),null),V=e=>{if(r(e))Object.entries(e).forEach(([t,a])=>e[t]=V(a));else if(Array.isArray(e))e.forEach((t,a)=>e[a]=V(t));else if(/^[-+]?[0-9]*\.?[0-9]+$/.test(e))e=+e;else if(/^\d\d\d\d-\d\d-\d\d$/.test(e)){const t=e.split("-");e=new Date(t[0],t[1]-1,t[2])}return e},B=e=>(e&&l(e)||[]).map(e=>({id:e.Id,type:e.Type,name:e.Name,disclaimer:e.Disclaimer,amount:e.Amount||0,startDate:e.StartDate,endDate:e.ExpiryDate})),G=e=>(e&&l(e)||[]).reduce((e,t)=>("SUPPLEMENT_DA_CASH"!==t.Type&&"GOVT_EV_REBATE"!==t.Type&&(e+=t.Amount||0),e),0),z=e=>(l(e)||[]).map(e=>r(e)?{term:e.Term,apr:e.APR,cash:e.Cash}:{term:e}).sort((e,t)=>e.term>t.term?1:-1),H=e=>i(e)?e:0,q=(e,t)=>e+t,U=e=>k[e]||"NONE",J=e=>{const{applyDealerDiscount:t,dealerDiscountPercentage:a,globalDealerDiscountPercentage:n}=e._attributes||{};return t&&"false"!==t?isNaN(a)||isNaN(parseFloat(a))?isNaN(n)||isNaN(parseFloat(n))?0:Number(n):Number(a):0},K=(e,t,a,n,i=!1,s={})=>{if(!(e&&e.PaymentEstimator&&e.Pricing))return null;n=n||N.planType;const o=V(e.PaymentEstimator),c=V(e.Pricing),m="true"===c.PlanApplicability[n],u=O[n]||"MSRP",d=o.CashOffers&&o.CashOffers.CashOffer,p=(e=>{const t=(e.VehicleAttributes||e).Attribute;return Object.assign({},t&&l(t).reduce((e,t)=>(e[t.name]=t.Value,e),{}),e._attributes)})(e),y=s&&s.options&&!0===s.options.enableFAFA,f="true"===String(p.isFAFAEnabled_shop||"").toLowerCase(),T=f&&y,g=R(p,t,a,p.trimName,s);console.log("FAFA:",{jams:f,options:y,eligible:g});const h={modelLabel:p.nameplateDisplayNameShort||t,trimName:p.trimName,configToken:e.ConfigToken||e.NewConfigToken,imageToken:e.ImageToken||e.NewImageToken,configurationDisclaimer:p.configurationDisclaimer||p.BP2_Pages_VehicleName_Disclaimer,price:{planPrefix:u,planApplicable:m,full:c[u]||0,base:c["Base"+u]||0,options:c["Options"+("MSRP"===u?"":u)]||0,accessories:c["Accessories"+("MSRP"===u?"":u)]||0,discount:c[u+"Discount"]||0,dealerDiscountPercentage:J(e),residualizable:c["Residualizable"+u]||0,gasGuzzlerTax:c.GasGuzzlerTax||0,destinationCharges:c.DestinationDeliveryCharge||0,adjustments:B(c.Adjustments&&c.Adjustments.Adjustment),msrpPrice:c.MSRP||0,azplanPrice:c.AZPlan||0,specialEventMSRPDiscount:c.SpecialEventMSRPDiscount||0,isFAFAEnabled:T,isFAFAEligible:g,..."CA"===F.region?{deliveryAllowance:c.CADeliveryAllowance||0,optionsLessAc:c.CAOptionsLessAC||0,fepDiscount:c.CAFEPDiscount||0,acTax:c.CAACTax||0,greenLevy:c.CAGreenLevy||0,stewardship:c.CAStewardship||0,salesTaxMethod:c.CASalesTaxRateMethod,salesTaxRateEffective:H(c.CASalesTaxRateEffective),salesTaxRateHst:H(c.CASalesTaxRateHST),salesTaxRateGst:H(c.CASalesTaxRateGST),salesTaxRatePst:H(c.CASalesTaxRatePST),luxuryTax:i?c.LuxuryTax:0}:{}},payment:{fordCreditParams:o.FordCreditParams,cash:{maxRate:d&&d.MaxCustomRate||N.cash.maxApr,terms:z(d.Terms&&d.Terms.Term||N.cash.terms),defaultTerm:d.DefaultTerm||N.term,incentives:d&&B(d.Incentives.Incentive)||null}},attributes:p};if(r(o.LeasePayment)){const e=o.LeasePayment,n=(l(e.Residuals&&e.Residuals.Residual)||[]).map(e=>({term:e.Term,value:e.Value}));if("true"!==p.enable_standardLease||e.LeaseTerms&&e.LeaseTerms.LeaseTerm||!o.LeaseFactors||!o.LeaseFactors.LeaseFactor){const e=M.leaseOverrides[[a,F.make,t,F.region].join("|")];e&&(o.LeasePayment.LeaseTerms=e)}else{const t={LeaseTerm:l(o.LeaseFactors.LeaseFactor).map(e=>({APR:e.Rate,Term:e.EndTerm})).filter(e=>n.find(t=>t.term===e.Term))};t.LeaseTerm.length>0&&(e.LeaseTerms=t)}e.LeaseTerms&&e.LeaseTerms.LeaseTerm&&h.price.residualizable>0&&(h.payment.lease={minExpiryDate:e.LeaseIncentives&&e.LeaseIncentives.MinExpiryDate,terms:z(e.LeaseTerms.LeaseTerm),defaultTerm:e.DefaultTerm||N.term,disclaimer:e.LeaseTermsDisclaimer,maxCombinedValue:e.MaxCombinedValue||0,maxDownPayment:e.MaxDownPayment||0,maxTradeIn:e.MaxTradeIn||
10,acquisitionFee:e.AcquisitionFee||0,startDate:e.StartDate,endDate:e.EndDate,mileageAdjustments:(l(e.AnnualMileageAdjustments&&e.AnnualMileageAdjustments.AnnualMileageAdjustment&&e.AnnualMileageAdjustments.AnnualMileageAdjustment)||[]).map(e=>({mileage:e.Mileage,adjustment:e.Adjustment})).sort((e,t)=>e.mileage-t.mileage),defaultAnnualMileage:e.DefaultAnnualMileage,residuals:n,incentives:B(e.LeaseIncentives.Incentive)})}if(o.FinanceOffers&&o.FinanceOffers.FinanceOffer){const n=(l(o.FinanceOffers.FinanceOffer)||[]).filter(e=>"Options"!==e.FinanceType&&"Flex Buy"!==e.FinanceType);h.payment.finance={offers:n.map((e,t)=>({offerIdx:t,terms:z(e.APRTerms.APRTerm),defaultTerm:e.DefaultTerm||N.term,disclaimer:e.Disclaimer,startDate:e.StartDate,endDate:e.EndDate,incentives:B(e.Incentives&&e.Incentives.Incentive),incentiveAmount:G(e.Incentives&&e.Incentives.Incentive)}))};const i={};let r=null;h.payment.finance.offers.forEach(e=>{e.terms.forEach(t=>{let a=i[t.term];a||(a={term:t.term,offers:[]},i[t.term]=a),a.offers.push({...t,...e})}),(!r||r<e.defaultTerm)&&(r=e.defaultTerm)}),h.payment.finance.terms=Object.values(i).sort((e,t)=>e.term>t.term?1:-1),h.payment.finance.defaultTerm=r;const s=(l(o.FinanceOffers.FinanceOffer)||[]).filter(e=>"Options"===e.FinanceType);if(s.length>0){const n=e.Parts?(l(e.Parts&&e.Parts.Part)||[]).reduce((e,t)=>(e[t.PartID]=1,e),{}):l(e.PartState&&e.PartState.PartClass||[]).reduce((e,t)=>(l(t.Part||[]).forEach(t=>{({Selectable:1,Excluded:1})[t.State]||(e[t.PartID]=1)}),e),{}),i=M.creditOptions,r=i.nameplateResiduals[`${a}|${F.make}|${t}|${F.region}`];if(r){let e=r.reduce((e,t)=>t.definers.every(e=>n[e])&&(null===e||e.definers.length<t.definers.length)?t:e,null);if(e){const t=s[0],a=Math.round(h.price.full*i.maxCashPercentage/100);h.payment.creditOptions={terms:z(t.APRTerms.APRTerm),defaultTerm:i.defaultTerm,defaultAnnualMileage:i.defaultAnnualMileage,mileageAdjustments:i.mileageAdjustments,residuals:e.residuals,disclaimer:t.Disclaimer,maxCombinedValue:a,maxDownPayment:a,maxTradeIn:a,startDate:t.StartDate,endDate:t.EndDate,incentives:B(t.Incentives&&t.Incentives.Incentive),incentiveAmount:G(t.Incentives&&t.Incentives.Incentive)}}}}const c=(l(o.FinanceOffers.FinanceOffer)||[]).filter(e=>"Flex Buy"===e.FinanceType);if(c.length>0){const e=c[0],t=M.flexBuy;h.payment.flexBuy={terms:z(e.APRTerms.APRTerm),defaultTerm:e.DefaultTerm,decrementRate:t.decrementRate,initialCalcTerm:t.initialCalcTerm,initialLimitTerm:t.initialLimitTerm,disclaimer:e.Disclaimer,startDate:e.StartDate,endDate:e.EndDate,incentives:B(e.Incentives&&e.Incentives.Incentive),incentiveAmount:G(e.Incentives&&e.Incentives.Incentive)}}}return function(){const e=N.requiredBuyTerms,t=l(o.StandardRates&&o.StandardRates.StandardRate);if(!t.length)return;h.payment.finance||(h.payment.finance={offers:[],terms:[],defaultTerm:null});const a=h.payment.finance.offers||[],n=h.payment.finance.terms||[];h.payment.finance.offers=a,h.payment.finance.terms=n;const i=new Set(n.map(e=>parseInt(e.term,10))),r=[];if(e.forEach(e=>{if(i.has(e))return;const a=(e=>{for(const a of t){const t=parseInt(a.StartTerm,10),n=parseInt(a.EndTerm,10);if(!isNaN(t)&&!isNaN(n)&&e>=t&&e<=n)return Number(a.Rate)}return null})(e);null!=a&&r.push({term:e,apr:a})}),!r.length)return;const s=a.length,c={offerIdx:s,terms:r.map(({term:e,apr:t})=>({term:e,apr:t,cash:0})),defaultTerm:null,disclaimer:"",startDate:null,endDate:null,incentives:null,incentiveAmount:0,_isStandardRate:!0};a.push(c),r.forEach(({term:e,apr:t})=>{n.push({term:e,_isStandardRate:!0,offers:[{offerIdx:s,term:e,apr:t,cash:0,defaultTerm:null,disclaimer:"",startDate:null,endDate:null,incentives:null,incentiveAmount:0,_isStandardRate:!0}]})}),n.sort((e,t)=>parseInt(e.term,10)-parseInt(t.term,10))}(),h.fullTrimName=h.modelLabel+" "+h.trimName,h},X=b(e=>_("/geo/PostalCodes.json",{postalCode:e}).then(e=>{if(e&&e.Response&&e.Response.PostalCode){const t=e.Response.PostalCode,a=e=>{const a=l(t.Regions&&t.Regions.Region||[]).find(t=>t.type===e);return a&&a.Code||""};return"CA"===F.region?{geokey:t.Provinces&&t.Provinces.Province&&t.Provinces.Province.content,userProvince:t.Provinces&&t.Provinces.Province&&t.Provinces.Province.content}:{geokey:t.GeoKey,userFordRegion:a("Marketing"),userFDAFCode:a("Lincoln"===F.make?"LMDA":"FDAF"),userState:t.States&&t.States.State&&t.States.State.content}}}
1,j)),$=b((e,t,a,n,i,r=!1,s={})=>_("/products/ModelSlices.json",{appContext:N.appContext,planType:i||N.planType,staging:"false",showPaymentEstimatorV2:"true",sdlRates:"true",modelSliceDefiners:"modelTrimName",make:e,model:t,year:a,..."CA"===F.region?{province:n}:{geoKey:n}},"nameplateDisplayNameShort,trimName,enable_promoFriendsFamily,enable_standardLease,incentivesLink,brandNameplateTrimLink,configurationDisclaimerPartClasses,applyDealerDiscount,dealerDiscountPercentage,globalDealerDiscountPercentage,isFAFAEnabled_shop,excludedFAFAVehicles_shop,isSevoEnabled,trimidOverride").then(e=>{const n=e&&e.Response&&e.Response.Model;var o,c;return o=q(t,a),(c=n._attributes&&n._attributes.configurationDisclaimerPartClasses)&&(k[o]=c.replace(/,/g,";")),n&&{category:n.VehicleType,trims:l(n.ModelSlices&&n.ModelSlices.ModelSlice||[]).map(e=>{const n=K(e,t,a,i,r,s);return n.modelSliceTrim=e.name,n})}},j)),Z=b((e,t,a,n,i,r=!1,s={})=>_("/config/Details.json",{appContext:N.appContext,planType:i||N.planType,staging:"false",partClass:U(q(e,t)),showPaymentEstimatorV2:"true",sdlRates:"true",configToken:a,..."CA"===F.region?{province:n}:{geoKey:n}},I).then(e=>e&&e.Response&&K(e.Response,e.Response.Model,e.Response.Year,i,r,s)),j),Y=b((e,t,a,n,i,r,s=!1,l={})=>_("/inventory/Search.json",{appContext:N.appContext,planType:r||N.planType,partClass:U(q(e,t)),staging:"false",vehicleAttributes:"BP2_Pages_VehicleName_Disclaimer;",showPaymentEstimatorV2:"true",sdlRates:"true",vehicleStageFilter:"inproduction;onlot;intransit",make:F.make,model:e,year:t,vin:a,dealerPACode:n,postalCode:i},I).then(e=>{const t=e&&e.Response&&e.Response.VehicleSearch&&e.Response.VehicleSearch.Vehicles&&e.Response.VehicleSearch.Vehicles.Vehicle,a=K(t,t.Model.ModelName,t.Model.Year,r,s,l);return"US"===F.region?_("/dealer/Details.json",{make:F.make,dealerPACode:n}).then(e=>(e&&e.Response&&e.Response.Dealer&&"true"!==e.Response.Dealer.FordDirect&&(a.attributes.enable_creditLink="false",a.attributes.enable_tradeInLink="false"),a)):a},j)),W=b(()=>T(L+"/aemservices/common/api/attributes?"+g({client:"spc",region:F.region,make:F.make})).then(e=>e));var Q={ngpProxy:_,geoDetail:X,modelList:$,configDetail:Z,vehicleDetail:Y,attributesMap:W,isEligibleForFAFA:R};const ee=["January","February","March","April","May","June","July","August","September","October","November","December"],te={yyyy:e=>e.getFullYear().toString(),yy:e=>te.yyyy(e).substring(2),m:e=>(e.getMonth()+1).toString(),mm:e=>te.m(e).padStart(2,"0"),mmmm:e=>ee[e.getMonth()],d:e=>e.getDate().toString(),dd:e=>te.d(e).padStart(2,"0"),h:e=>e.getHours().toString(),hh:e=>te.h(e).padStart(2,"0"),n:e=>e.getMinutes().toString(),nn:e=>te.n(e).padStart(2,"0"),s:e=>e.getSeconds().toString(),ss:e=>te.s(e).padStart(2,"0")};var ae={trim:e=>e.replace(/^\s+|\s+$/g,""),number:(e,{decimals:t=0,symbol:a="$",grouping:n=","})=>{const i=e<0?"-":"",r=parseInt(e=Math.abs(+e||0).toFixed(t))+"",s=r.length>3?r.length%3:0;return i+a+(s?r.substr(0,s)+n:"")+r.substr(s).replace(/(\d{3})(?=\d)/g,"$1"+n)+(+t?"."+Math.abs(e-r).toFixed(t).slice(2):"")},date:(e,t)=>{let a="",n=[];const i=()=>{const t=n.join("");a+=te[t]&&te[t](e)||t};for(let e=0;e<t.length;e++){const a=t.charAt(e);n.length>0&&a!==n[0]?(i(),n=[a]):n.push(a)}return i(),a},template:(e,t)=>
1e.replace(/\${([a-zA-Z0-9_]*)\}/gm,(e,a)=>t[a]||"")};const ne={US:{number:{decimals:0,symbol:"",grouping:","},currency:{decimals:0,symbol:"$",grouping:","},shortDate:"mm/dd/yyyy",longDate:"mmmm dd, yyyy"},CA:{number:{decimals:0,symbol:"",grouping:","},currency:{decimals:0,symbol:"$",grouping:","},shortDate:"dd/mm/yyyy",longDate:"dd mmmm yyyy"}}[F.region];var ie={number:e=>i(e)&&ae.number(e,ne.number)||"",currency:e=>i(e)&&ae.number(e,ne.currency)||"",shortDate:e=>e&&ae.date(e,ne.shortDate)||"",longDate:e=>e&&ae.date(e,ne.longDate)||"",customDate:ae.date};const re=M.defaults,se="CA"===F.region,le="US"===F.region;var oe=(e,t,a)=>{const n=e.price,r=e.payment,s=i(a.defaultCustomApr)?Number.parseFloat(a.defaultCustomApr):re.cash.apr,l=(e,t,a,n)=>e.find(e=>e[t]===a)||n&&l(e,t,n),o=e=>void 0===e.includeTaxes?t.includeTaxes:e.includeTaxes,c=e=>"monthly"===(e.paymentFrequency||t.paymentFrequency),m=()=>r.lease&&r.lease.terms&&n.residualizable>0,u=e=>"buy"===e.paymentType&&!e.buy.useCash,d=e=>m()&&"lease"===e.paymentType,p=e=>"buy"===e.paymentType&&e.buy.useFlexBuy,y=e=>u(e)&&r.finance.offers&&r.finance.offers[e.buy.offerIdx]||null,f=(e,t)=>{let a;if((e=>"creditOptions"===e.paymentType)(e)&&(a=r.creditOptions.incentives),p(e)&&(a=r.flexBuy.incentives),d(e))a=r.lease.incentives;else if(u(e)){const t=y(e);a=t&&t.incentives}else(e=>"buy"===e.paymentType&&e.buy.useCash)(e)&&(a=r.cash.incentives);const n=(e=>{let t,a;if(u(e)?(t=y(e),a=e.buy.term):d(e)&&(t=r.lease,a=e.lease.term),t){const e=t.terms.find(e=>e.term===a);if(e&&e.cash)return{amount:e.cash,disclaimer:(t.disclaimer||"").replace("[BENEFIT]",ie.number(e.cash))}}return null})(e);return a=[...n&&[n]||[],...a||[]].filter(e=>t?e.type===t:"SUPPLEMENT_DA_CASH"!==e.type&&"GOVT_EV_REBATE"!==e.type),a.length>0?a:null},T=e=>{let t=(f(e)||[]).reduce((e,t)=>e+t.amount,0);return o(e)&&d(e)&&(t=Math.ceil(t/(1+n.salesTaxRateEffective/100))),t},g=e=>{let t;if(d(e))t=r.lease.minExpiryDate;else if(p(e))t=r.flexBuy.endDate;else{const a=y(e);t=a&&a.endDate}return t&&ie.customDate(t,"yyyy-mm-dd")||null},h=e=>{const t=f(e,"GOVT_EV_REBATE");return t&&t[0]},b=e=>{let t=0;const a=h(e);if(a)if(d(e)){const a=l(r.lease.terms,"term",e.lease.term);t=a&&a.amount||0,o(e)&&(t=Math.ceil(t/(1+n.salesTaxRateEffective)))}else t=Math.abs(a.amount);return t},A=()=>l(n.adjustments,"type","SUPPLEMENT_DA_CASH"),S=()=>{const e=A();return e&&Math.abs(e.amount)||0},P=e=>{if("US"!==F.region)return 0;if("MSRP"!==n.planPrefix)return 0;if(!n.isFAFAEnabled)return 0;if(!n.isFAFAEligible)return 0;return n.specialEventMSRPDiscount},D=e=>{let a=n.full-(n.discount||0);const i=P();let r;i>0&&(a-=i),se&&(a=a-(n.deliveryAllowance||0)-S()-n.fepDiscount+n.acTax+n.luxuryTax+n.greenLevy+n.stewardship,t.useOptionsLessAC&&n.optionsLessAc>0&&(a-=n.acTax),"buy"===e.paymentType&&(r=Math.min(e.tradeIn,a),o(e)&&(a+=Math.ceil((a-r)*(n.salesTaxRateEffective/100)))));return a-T(e)-b(e)},x=(e,t)=>{const a=Math.ceil(D(e))-1,n="tradeIn"===t?[1,0]:[0,1];let i=e.downPayment,s=e.tradeIn;if("lease"===e.paymentType||"creditOptions"===e.paymentType){const t=T(e)+b(e);if(m()||"creditOptions"===e.paymentType){const l=r[e.paymentType];n.forEach(e=>{0===e?i=Math.min(i,Math.max(Math.min(a,l.maxCombinedValue-t)-s,0),l.maxDownPayment):s=Math.min(s,Math.max(Math.min(a,l.maxCombinedValue-t)-i,0),l.maxTradeIn)})}}else n.forEach(e=>{0===e?i=Math.max(Math.min(i,a-s),0):s=Math.max(Math.min(s,a-i),0)});return{downPayment:i,tradeIn:s}},E=(e,t,a)=>{const n=c(e),i=y(e),r=P(),s=D(e)-(a?0:e.downPayment)-e.tradeIn+(t||0),l=e.buy.apr/(n?1200:2600),o=e.buy.term*(n?1:26/12),m=0===Math.trunc(100*e.buy.apr)?s/o:l*s/(1-Math.pow(1/(1+l),o)),u=Math.ceil(o*m);return{paymentTotal:u,borrowingCost:u-s,payment:Math.ceil(m),employeeDiscount:r,initiativeStartDate:i&&i.startDate,initiativeEndDate:i&&i.endDate}},C=(e,a,i)=>{if(!m())return null;const{lease:s}=r,u=P(),p=n.full+n.gasGuzzlerTax+s.acquisitionFee,y=T(e)+b(e),f=(e=>{let a,i=n.full-(n.discount||0);return se&&(i=i-(n.deliveryAllowance||0)-S()-n.fepDiscount+n.acTax+n.luxuryTax+n.greenLevy+n.stewardship,t.useOptionsLessAC&&n.optionsLessAc>0&&(i-=n.acTax),"buy"===e.paymentType&&(a=Math.min(e.tradeIn,i),o(e)&&(i+=Math.ceil((i-a)*(n.salesTaxRateEffective/100))))),i-T(e)-b(e)}
1)(e)+(a||0),g=c(e)?12:26,h=l(s.mileageAdjustments,"mileage",e.lease.annualMileage,s.defaultAnnualMileage),A=l(s.terms,"term",e.lease.term,s.defaultTerm),v=l(s.residuals,"term",e.lease.term,s.defaultTerm),D=f+y,x=n.residualizable-n.discount+(i||0)+(se?n.acTax+n.greenLevy+n.stewardship:0),E=D-x+(se?n.deliveryAllowance+n.fepDiscount+S():0),C=((e,t)=>{if(!e||e<0)return 0;if(!d(t)||n.dealerDiscountPercentage<=0)return 0;const a=.01*n.dealerDiscountPercentage;return Math.round(e*a*100)/100})(n.full,e),w=D-(le?C:0)-e.downPayment-E-e.tradeIn-(D-f)+(se?0:s.acquisitionFee)-(u||0),F=x*(((v?v.value:0)+(h.adjustment||0))/100),R=A?A.apr/(100*g):0,L=Math.pow(1+R,e.lease.term/12*g);let I,O=(w*L-F)*R/((L-1)*(1+R));se&&(I=((e,t)=>{const a={HST:0,GST:0,PST:0};if(o(e))switch(n.salesTaxMethod){case"HST":a.HST=Math.ceil(t*(n.salesTaxRateHst/100));break;case"GST":a.GST=Math.ceil(t*(n.salesTaxRateGst/100));break;case"PST_GST_Separate":a.GST=Math.ceil(t*(n.salesTaxRateGst/100)),a.PST=Math.ceil(t*(n.salesTaxRatePst/100));break;case"QST_GST_Separate":a.GST=Math.ceil(t*(n.salesTaxRateGst/100));const e=n.salesTaxRateEffective-n.salesTaxRateGst;a.PST=Math.ceil(t*(e/100));break;case"GST_before_PST":a.GST=Math.ceil(t*(n.salesTaxRateGst/100)),a.PST=Math.ceil((t+a.GST)*(n.salesTaxRatePst/100))}return a.Total=a.HST+a.GST+a.PST,a})(e,O),O+=I.Total);const N=s.incentives[0],k=M.localFeeTable[t.userState]||M.localFeeTable[t.userState+("comm"===t.type?"|C":"|R")]||0,_=("MA"===t.userState?n.base:p)/100*(k/100);return{payment:O+_,capitalizedCost:p,adjustedCapitalizedCost:p-e.downPayment-e.tradeIn,employeeDiscount:u,signingAmount:Math.ceil(O)+e.downPayment+e.tradeIn+E+(se?s.acquisitionFee:0),securityDeposit:25*Math.ceil(O/25),accessoryPrice:E,acquisitionFee:s.acquisitionFee,apr:A?A.apr:0,residual:v?v.value:0,initiativeStartDate:N?N.startDate:s.startDate,initiativeEndDate:N?N.endDate:s.endDate,paymentSalesTax:I,localFeeRate:k,localFee:_}},w=(e,t)=>{const a=r.creditOptions;if(!a)return null;const i=T(e)+b(e),s=l(a.mileageAdjustments,"mileage",e.creditOptions.annualMileage,a.defaultAnnualMileage),o=l(a.terms,"term",e.creditOptions.term,a.defaultTerm),c=l(a.residuals,"term",e.creditOptions.term,a.defaultTerm),m=(c?c.value:0)+(s.adjustment||0),u=D(e)+(t||0),d=u+i,p=Math.trunc(d*m/100),y=u-e.downPayment-e.tradeIn+n.gasGuzzlerTax,f=o.term,g=(o.apr||0)/100;let h;if(g>0){const e=Math.pow(1+g/12,f-1),t=g*e/(12*(e-1)),a=g/(12*(Math.pow(1+g/12,f)-(1+g/12)));h=Math.trunc(y*t-p*a)}else h=Math.trunc((y-p)/(f-1));return{payment:h,balloonPayment:p,apr:o.apr||0,initiativeStartDate:a.startDate,initiativeEndDate:a.endDate}},R=(e,t)=>{const a=r.flexBuy,n=l(a.terms,"term",e.buy.term,a.defaultTerm),i=D(e)-e.downPayment-e.tradeIn+(t||0),s=n.apr/1200,o=0===Math.trunc(100*n.apr),c=a.initialCalcTerm[n.term],m=(100-a.decrementRate)/100*(o?i/c:s*i/(1-Math.pow(1/(1+s),c))),u=n.term-a.initialLimitTerm,d=Math.pow(1+s,a.initialLimitTerm),p=o?i-m*a.initialLimitTerm:m*(1-d)/s+i*d,y=o?p/u:s*p/(1-Math.pow(1/(1+s),n.term-a.initialLimitTerm)),f=Math.ceil(a.initialLimitTerm*m+u*y);return{paymentTotal:f,borrowingCost:f-i,payment:Math.ceil(m),initiativeStartDate:a.startDate,initiativeEndDate:a.endDate,initialPayment:Math.ceil(m),initialTerms:"1-"+a.initialLimitTerm,finalPayment:Math.ceil(y),finalTerms:`${a.initialLimitTerm+1}-${n.term}`}},L=(e,t,a,r)=>{let s=null,l={...e};return i(a)||e.downPaymentEntered||(l.downPayment=Math.ceil((n.full-n.discount)*re.downPaymentPercentage),l={...l,...x(l,"downPayment")}),d(l)&&(s=C(l,a,r)),"buy"!==e.paymentType&&"purchase"!==e.paymentType||(s=e.buy.useFlexBuy&&"buy"===e.paymentType?R(l,a):E(l,a,"purchase"===e.paymentType)),"creditOptions"===e.paymentType&&(s=w(l,a)),s&&!1!==t&&(s.payment=Math.ceil(s.payment)),{payment:s,selections:l}};return{limitDownPaymentTradeIn:x,calculateLowestPayment:e=>{const t={downPaymentEntered:!1,downPayment:e.downPayment>0?e.downPayment:Math.ceil((n.full-n.discount)*re.downPaymentPercentage),paymentFrequency:e.paymentFrequency,tradeIn:e.tradeIn>0?e.tradeIn:re.tradeIn,buy:{apr:s,aprCash:s,aprSpecial:0,term:re.term,useCash:!1,cashOnly:!1,useFlexBuy:!1,offerIdx:-1,paymentFrequency:e.paymentFrequency},lease:{term:re.term,annualMileage:0,enabled:!1,paymentFrequency:e.paymentFrequency},creditOptions:{term:M.creditOptions.defaultTerm,annualMileage:M.creditOptions.defaultAnnualMileage,enabled:!1},paymentType:"lease"};let a=Number.MAX_VALUE,i=Number.MAX_VALUE,l=Number.MAX_VALUE,o=null,c=null,u=-1,d=e.paymentType;if(m()){t.paymentType="lease",t.lease.annualMileage=r.lease.defaultAnnualMileage,o=r.lease.defaultTerm;for(const e of r.lease.terms){t.lease.enabled=!0,t.lease.term=e.term;const n=Math.ceil(C(t).payment);(n<a||n===a&&o>e.term)&&(o=e.term,a=n)}t.lease.term=o}if(t.paymentType="buy",r.finance&&r.finance.offers&&r.finance.offers.length>0){o=null;for(let e=0;e<r.finance.offers.length;e++){t.buy.offerIdx=e;const a=r.finance.offers[e];for(const n of a.terms){t.buy.term=n.term,t.buy.apr=n.apr||0,t.buy.aprSpecial=t.buy.apr;const a=E(t).payment;(a<i||a===i&&o>n.term)&&(u=e,o=n.term,c=t.buy.apr,i=a,t.buy.useCash=!1)}}}else o=r.cash.defaultTerm||re.term,t.buy.term=o,t.buy.useCash=!0,t.buy.cashOnly=!0,i=E(t).payment;return c&&(t.buy.apr=c,t.buy.aprSpecial=c),u>=0&&(t.buy.offerIdx=u),t.buy.term=o,r.creditOptions&&(t.paymentType="creditOptions",t.creditOptions.enabled=!0,l=w(t).payment),d&&("buy"===d||"purchase"===d||t.creditOptions.enabled&&"creditOptions"===d||t.lease.enabled&&"lease"===d)?t.paymentType=d:t.paymentType=t.creditOptions.enabled?"creditOptions":t.lease.enabled&&a<i?"lease":"buy",t.buy.paymentFrequency=e.paymentFrequency,t.lease.paymentFrequency=e.paymentFrequency,{payment:"creditOptions"===t.paymentType?l:"lease"===t.paymentType?a:i,selections:t}},calculatePayment:L,calculatePartPayments:(e,t)=>{const a=L(e).payment.payment;if(a){const n=t=>L(e,!0,t.price||0,t.res||0).payment.payment-a;return Array.isArray(t)?t.map(n):Object.entries(t).reduce((e,[t,a
1])=>(e[t]=n(a),e),{})}},priceDetail:(e,a)=>{const i=a&&a.acquisitionFee||0,r=D(e),s="purchase"===e.paymentType?0:e.downPayment,l=P(),c=n.base+n.options+n.accessories+n.destinationCharges+i+n.gasGuzzlerTax,u=c-l,p={price:u-T(e)-b(e),basePrice:n.base,options:n.options,accessories:n.accessories,discount:n.discount,discountedOptions:n.options-n.discount,incentives:T(e),incentiveList:f(e)||[],destinationCharges:n.destinationCharges,fullPrice:n.full,sellingPrice:u,capitalizedCost:c,planApplicable:n.planApplicable,payment:a?a.payment:null,downPayment:s,tradeIn:e.tradeIn,financeAmount:r-s-e.tradeIn+n.gasGuzzlerTax+i,paymentType:e.paymentType,optionsLessAC:n.optionsLessAc,employeeDiscount:l,isFAFAEnabled:n.isFAFAEnabled||!1,isFAFAEligible:n.isFAFAEligible||!1};if(d(e)&&a&&(p.capitalizedCost=a.capitalizedCost,p.adjustedCapitalizedCost=a.adjustedCapitalizedCost),se&&t.useOptionsLessAC&&(p.discountedOptions=n.optionsLessAc-n.discount),se||(p.gasGuzzlerTax=n.gasGuzzlerTax),p.baseAsShown=p.basePrice+p.discountedOptions,"buy"===e.paymentType||"purchase"===e.paymentType?(p.buy={apr:e.buy.apr,term:e.buy.term,paymentFrequency:e.paymentFrequency,specialApr:e.buy.useFlexBuy||!e.buy.useCash,flexBuy:!!e.buy.useFlexBuy,paymentTotal:a.paymentTotal,borrowingCost:a.borrowingCost,initiativeStartDate:a.initiativeStartDate,initiativeEndDate:a.initiativeEndDate,goodThruDate:g(e)},e.buy.useFlexBuy&&(p.buy.initialPayment=a.initialPayment,p.buy.initialTerms=a.initialTerms,p.buy.finalPayment=a.finalPayment,p.buy.finalTerms=a.finalTerms)):"creditOptions"===e.paymentType?p.creditOptions={apr:a.apr,balloonPayment:a.balloonPayment,term:e.creditOptions.term,initiativeStartDate:a.initiativeStartDate,initiativeEndDate:a.initiativeEndDate,goodThruDate:g(e)}:(m()&&!se&&(a.signingAmount=a.payment+e.downPayment+e.tradeIn+a.accessoryPrice+(se?a.acquisitionFee:0)),p.lease=m()?{term:e.lease.term,annualMileage:e.lease.annualMileage,signingAmount:a.signingAmount,securityDeposit:a.securityDeposit,accessoryPrice:a.accessoryPrice,acquisitionFee:a.acquisitionFee,apr:Math.round(100*a.apr)/100,initiativeStartDate:a.initiativeStartDate,initiativeEndDate:a.initiativeEndDate,residualValue:a.residual,paymentFrequency:e.paymentFrequency,localFee:a.localFee,goodThruDate:g(e)}:{}),se){if(p.caDeliveryAllowance=n.deliveryAllowance,p.caSupplementDeliveryAllowanceIncentive=A()||[],p.caSupplementDeliveryAllowance=S(),p.caEmployeePricingDiscount=n.fepDiscount,p.caEvRebateIncentive=h(e),p.caEvRebate=b(e),p.caAcTax=n.acTax,p.caGreenLevy=n.greenLevy,p.caStewardshipFee=n.stewardship,p.luxuryTax=n.luxuryTax||0,p.caSalesTaxMethod=n.salesTaxMethod,p.caProvincialTaxLabel="QST_GST_Separate"===n.salesTaxMethod?"QST":"PST",p.caTotalFees=p.destinationCharges+p.caAcTax+p.caGreenLevy+p.caStewardshipFee,p.caSalesTaxableAmount=p.basePrice+p.discountedOptions+p.accessories+p.luxuryTax+p.caTotalFees-p.caDeliveryAllowance-p.caSupplementDeliveryAllowance-p.caEmployeePricingDiscount-p.tradeIn,p.lease){if(m){const e=a&&a.paymentSalesTax;e&&(p.caLeasePaymentSalesTax=e.Total,p.caLeasePaymentHST=e.HST,p.caLeasePaymentGST=e.GST,p.caLeasePaymentPST=e.PST)}p.caSalesTax=0}else o(e)?p.caSalesTax=Math.ceil(p.caSalesTaxableAmount*(n.salesTaxRateEffective/100)):p.caSalesTax=0;p.price=p.caSalesTaxableAmount+p.tradeIn+p.caSalesTax-p.incentives-p.caEvRebate,p.financeAmount=p.caSalesTaxableAmount+p.caSalesTax-p.incentives-p.caEvRebate-p.downPayment}return v(p),p}}};var ce=(e,t)=>{let a=null;const n=(document.cookie||"").split("; ");for(const i of n){const n=i.indexOf("=");if(i.substring(0,n)===e){a=i.substring(n+1),t&&(a=decodeURIComponent(a));break}}return a};const me=M.defaults,ue=window,de=e=>!!(e.make&&e.model&&e.year&&e.zipcode),pe=e=>[e.make,e.model,e.year,e.zipcode,e.plantype,e.trim,e.vin,e.paymentType].join("|"),ye=M.defaults.inputConfig,fe=e=>({...ye,...e||{},zipcode:Te(e),options:{...ye.options,...e&&e.options||{}}}),Te=e=>{let t=e.zipcode||"";if(!t){const e=h(ce("FPI"));e.zip&&(t=e.zip)}return t||"BrandSite"!==e.host||"US"!==F.region||(ce("userInfo")||"").split(",").every(e=>{if("zip="===e.substr(0,4))return t=e.substr(4,5),!0}),t},ge=()=>{window.sessionStorage.removeItem("SPC_USER_SELECTIONS")},he=(e,t)=>{const a=pe(e),n=window.sessionStorage.getItem("SPC_USER_SELECTIONS");let i={_reset:!0};if(n){const{configKey:e,selections:t}=JSON.parse(n);a===e&&(i=t)}return["paymentType","downPayment","tradeIn","paymentFrequency"].forEach(a=>
1{(t[a]||0===t[a])&&(i[a]=t[a]),a in i||(i[a]=e[a])}),i},be=(e,t)=>{window.sessionStorage.setItem("SPC_USER_SELECTIONS",JSON.stringify({configKey:pe(e),selections:t}))},Ae=(e,t)=>{if(s(e))try{e(t)}catch(e){}},ve=async(e,t,a)=>{let n=e.zipcode&&await Q.geoDetail(e.zipcode);n||(n={geokey:null}),e.includeLuxuryTax=!0;const i=Q.attributesMap(),r=Q.modelList(e.make,e.model,e.year,n.geokey,e.plantype,"CA"===F.region&&e.includeLuxuryTax,e),[s,l]=await Promise.all([i,r]),o=[s,l];if(!l)throw Ae(a,e),new Error("SPC: Unable to resolve trims");const c={type:e.type,userState:n.userState,useOptionsLessAC:e.options.useOptionsLessAC,includeTaxes:e.includeTaxes,includeLuxuryTax:"CA"===F.region&&e.includeLuxuryTax},m=l.trims.map(e=>{const a=oe(e,c,s),n=a.calculateLowestPayment(t);return{detail:e,calculator:a,lowestPayment:n}});return m.sort((e,t)=>e.lowestPayment.payment-t.lowestPayment.payment),{geo:n,attributesAndTrimdetail:o,paymentConfig:c,trimPricing:m}},Se=async(e,t,a)=>{const{geo:n,attributesAndTrimdetail:i,paymentConfig:r,trimPricing:s}=await ve(e,t,a),l=i[0],o=i[1];let c,m=e.configToken||e.trim;if(s.length>0)if(m){for(const t of s)if(t.detail.configToken===m){e.modelSliceTrim=t.detail.modelSliceTrim;break}}else{const t=s[0].detail;e.trim=t.configToken,e.modelSliceTrim=t.modelSliceTrim,m=e.trim}if(e.includeLuxuryTax=!0,c=e.vin&&e.dealerPACode?await Q.vehicleDetail(e.model,e.year,e.vin,e.dealerPACode,e.zipcode,e.plantype,"CA"===F.region&&e.includeLuxuryTax,e):await Q.configDetail(e.model,e.year,m,n.geokey,e.plantype,"CA"===F.region&&e.includeLuxuryTax,e),!c)throw Ae(a,e),new Error("SPC: Unable to resolve configuration");const u=oe(c,r,l);if(t._reset){t=u.calculateLowestPayment(t).selections}t={...t,...u.limitDownPaymentTradeIn(t)};const d=u.calculatePayment(t);return{geo:n,attributesMap:l,trims:o,selections:t,detail:c,calculator:u,payment:d}},Pe=(e,t,a,n,i)=>({...e,...t,...i,...a&&{creditParameters:a.payment.fordCreditParams,attr:a.attributes,configStr
1ing:a.configurationDisclaimer,configDisclaimer:a.configurationDisclaimer,modelLabel:a.modelLabel,label:a.fullTrimName,trimName:a.fullTrimName,stTrimName:a.trimName,configToken:a.configToken,imageToken:a.imageToken}||{},category:n&&n.category}),De=async(e,t,a)=>{const n=fe(t),i=he(n,t);if(!de(n))return Ae(e,n),void console.log("SPC: Invalid input configuration");const{geo:r,detail:s,calculator:l,payment:o,selections:c,trims:m}=await Se(n,i,e),u=l.priceDetail(c,o.payment),d=Pe(n,r,s,m,u);return a&&(d.partPayments=l.calculatePartPayments(c,a)),Ae(e,d),d},xe=async(e,t)=>{const a=fe(t),n=he(a,t);if(!de(a))throw Ae(e,a),new Error("SPC: Invalid input configuration");const r=await ve(a,n,e),s=await Q.attributesMap(),l=r.trimPricing.map(({calculator:e,detail:t,lowestPayment:a})=>{const n={},r=o(a.selections);return r.lease.enabled&&(r.paymentType="lease",n.lease=e.priceDetail(r,e.calculatePayment(r).payment)),r.paymentType="buy",r.buy.cashOnly||(n.finance=e.priceDetail(r,e.calculatePayment(r).payment)),r.buy.useCash=!0,r.buy.term=me.term,r.buy.apr=i(s.defaultCustomApr)?Number.parseFloat(s.defaultCustomApr):me.cash.apr,n.cash=e.priceDetail(r,e.calculatePayment(r).payment),{...n,trim:t.configToken,trimName:t.fullTrimName,stTrimName:t.trimName,modelSliceTrim:t.modelSliceTrim,brandNameplateTrimLink:t.attributes.brandNameplateTrimLink,configToken:t.configToken,imageToken:t.imageToken}}),c=l[0],m=r.trimPricing[0],u=r.attributesAndTrimdetail[1],d={...a,...r.geo,attr:m&&m.detail.attributes,configStr
1ing:m&&m.detail.configurationDisclaimer,configDisclaimer:m&&m.detail.configurationDisclaimer,modelLabel:m&&m.detail.modelLabel,label:m&&m.detail.fullTrimName,trimName:m&&m.detail.fullTrimName,category:u.category,trim:c&&c.configToken,stTrimName:c&&c.stTrimName,modelSliceTrim:c&&c.modelSliceTrim,configToken:c&&c.configToken,imageToken:c&&c.imageToken,trimPayments:l};return Ae(e,d),d};let Ee=null;const Ce=async(e,t,a,n)=>{let i,r,s,l,o,m,u;const d=async a=>{i=fe({...t,...a});const n=he(i,t);({geo:r,detail:s,calculator:l,payment:o,selections:m,trims:u}=await Se(i,n,e)),r.geokey||(i.zipcode="");const c=await Q.attributesMap(),y=((e,t)=>{const a={},n=new RegExp("^disc(\\w*)_"+({BrandSites:"brand",ShoppingTools:"shop",Ecommerce:"ecom"}[e]||"brand"));return Object.entries(t||{}).forEach(([e,t])=>{const i=n.exec(e);i&&(a[i[1]]=t)}),a})(i.host,c);return{context:F,config:i,trims:u,selections:m,detail:s,calculator:l,pricing:l.priceDetail(m,o.payment),reportEvent:p,setConfig:d,saveSelections:be,disclosuresMap:y}},p=(e,{config:t,detail
1:n,pricing:i})=>{if(a)try{a(e,Pe(t,r,n,u,i))}catch(e){}},y=d(),f=(async()=>(Ee||(await c(`${F.libHost}/etc.clientlibs/common/clientlibs/generated/common-vue-${F.make.toLowerCase()}.js`),ue.fdcc.component&&(Ee=ue.fdcc.component.load("spc"))),Ee))(),[T,g]=await Promise.all([y,f]);g.show(T,n).then(({config:t,detail:a,pricing:n})=>{const i=Pe(t,r,a,u,n);return Ae(e,i),i})};ue.fdcc||(ue.fdcc={init:e=>{e()},spc:{isBusy:()=>!1,calculate:De,calculateTrimPayments:xe,show:Ce,resolveConfigData:Se,saveSelections:be,reset:ge}})}]);

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.