An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411750" at line 10, column 17]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign bCode = qstringmap["bankercod...  [in template "10154#10192#153411750" at line 10, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign applicationType = "saa" > 
8<#assign useprcaValue = "" > 
9<#assign prcaURL = propsUtil.get('elan.prca.url')> 
10<#assign bCode= qstringmap["bankercode"]?first> 
11<#assign bCode = htmlUtil.escape(bCode)> 
12<#assign bCode = htmlUtil.escapeJS(bCode)> 
13 
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
15<#list bData as b>      
16    <#assign lc = b.locationcode > 
17    <#assign rLC = b.reallocationcode > 
18    <#assign mappedLC = b.mappedLocationCode > 
19    
20</#list>  
21   
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
23    <#assign ameriprise = true> 
24<#else> 
25    <#assign ameriprise = false> 
26</#if> 
27 
28<#if mappedLC?has_content && !ameriprise> 
29    <#assign lc = mappedLC > 
30</#if> 
31<#assign isEmployee = false> 
32 
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
34<#if fiData?first?has_content> 
35    <#assign fi = fiData?first> 
36    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
37        <#assign subbu_special = fi.offerId> 
38    </#if> 
39    <#if fi.projectType == "emp"> 
40        <#assign isEmployee = true> 
41    </#if> 
42</#if>  
43 
44<#if lc?has_content> 
45    <#assign prefix = "00000" > 
46    <#assign lcWithPrefix = prefix + lc> 
47    <#assign withPrefixLength = lcWithPrefix?length > 
48    <#assign startHere = withPrefixLength - 5> 
49    <#assign lc = lcWithPrefix?substring(startHere)>     
50    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
51    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52 
53    <#assign clientProfile = clientProfileList?first> 
54    <#assign partnerName = clientProfile.getMarketingNameLong()> 
55    <#assign pbu = clientProfile.getPbu()> 
56    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>     
57    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")>             
61        <#assign partnerUrl = 'https://' + partnerUrl> 
62    </#if> 
63 
64    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
65    <#if clientdataList?has_content > 
66        <#assign clientdata = clientdataList?first > 
67    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
68		<#assign backgroundImage = clientdata["backgroundImage"] > 
69		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
70		<#assign AprMin = clientdata["AprMin"] > 
71		<#assign AprMax = clientdata["AprMax"] > 
72		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
73		<#assign BillingCycles = clientdata["BillingCycles"] > 
74		<#assign textHexColor = clientdata["textHexColor"] > 
75		<#assign linkHexColor = clientdata["linkHexColor"] > 
76		<#assign hoverColor = clientdata["hoverColor"] > 
77		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
78		<#assign transparency = clientdata["transparency"] > 
79		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
80		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
81		<#assign businessTransparency = clientdata["businessTransparency"] > 
82		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
83		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
84	</#if> --> 
85	 
86    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
87    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
88    <#if pbu == "0864054"> 
89        <#assign override = "berkshire"> 
90    <#else> 
91        <#assign override = " "> 
92    </#if> 
93    <#--  this one should be delete for prod  --> 
94                 
95    <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">   
96    <#assign logoFileName = pbu + "-" + subbu + ".png">--> 
97 
98    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
99    <#if (subbu_special?has_content)> 
100        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
101    <#else> 
102        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
103    </#if> 
104    <#assign temp = []> 
105    <#assign consumerCards = []> 
106    <#assign businessCards = []>  
107    <#assign offerTypeList = []>       
108    <#assign index = 0> 
109    <#assign ameriprise_cards= []> 
110    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
111    <#assign businessOfferTypes =['128', '121', '144', '143']> 
112    <#list fiCardsData as fib> 
113		 
114        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
115            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
116            <#assign temp = temp + fiCardsData[index..index]>    
117            <#if ameriprise> 
118                <#if (fib.offerType == "101" || fib.offerType == "103")> 
119                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
120                </#if>                      
121            <#else> 
122                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
123                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
124                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
125                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
126                </#if>             
127            </#if>                 
128        </#if>  
129        <#assign index = index + 1>   
130                     
131    </#list>        
132    <#assign fiCardsData = temp> 
133    <#if ameriprise> 
134        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
135    </#if> 
136 
137    <#if (fiCardsData?size > 0)>   
138        <#if (subbu_special?has_content)> 
139            <#assign lc_used = fiCardsData?first.WebLocationCode>   
140        <#else> 
141            <#if ameriprise> 
142                <#assign lc_used = mappedLC>  
143            <#else> 
144                <#assign lc_used = lc>  
145            </#if> 
146        </#if>               
147        <#assign offerId = ""> 
148        <#assign sourceCode = ""> 
149        <#assign cardArtImage = ""> 
150        <#assign productUrl = ""> 
151        <#assign product = ""> 
152        <#assign preparerType = "customer"> 
153        <#assign apr = ""> 
154        <#assign cardIndex = 0>  
155        <#assign empOfferId = "">  
156        <#if consumerCards[0]?has_content> 
157            <#assign empOfferId = consumerCards[0].empofferId!""> 
158        </#if> 
159        <#assign marketingChannel = 'SAT2A'> 
160        <#if isEmployee> 
161            <#assign marketingChannel = 'EMPL'> 
162            <#assign offerId = empOfferId>       
163        </#if> 
164 
165        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
166            <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))> 
167                <#list consumerCards as card> 
168					<#assign useprcaValue = card.useprca!""> 
169                    <#if (card.offerType=="108" || card.offerType=="109") > 
170                        <#assign offerId = card.saaofferId> 
171                        <#if isEmployee> 
172                            <#assign offerId = card.empofferId!""> 
173                        </#if> 
174                        <#assign sourceCode = card.sourceCode> 
175                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
176                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
177 
178                        <#assign productUrl="consumer-platinum2103"> 
179                        <#assign product="Platinum"> 
180                        <#assign cardIndex = 4> 
181 
182                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
183                        <#if (scrapedData?size > 0)> 
184                            <#list scrapedData as sItem> 
185                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
186                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
187                                    <#break> 
188                                </#if> 
189                            </#list> 
190                            <script> 
191                                $(document).ready(function () { 
192                                    var aprText = "${apr}"; 
193                                    if (aprText) { 
194                                        try { 
195                                            $(".apr-full-text").html(aprText); 
196                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
197                                            var billing_cycle = matches[1]; 
198                                            var apr_min = apr_min = matches[2]; 
199                                            var apr_max = apr_max = matches[3]; 
200                                            if (billing_cycle) { 
201                                                $(".scraped-billing-cycle").html(billing_cycle); 
202
203                                            if (apr_min) { 
204                                                $(".scraped-apr-min").html(apr_min); 
205
206                                            if (apr_max) { 
207                                                $('.scraped-apr-max').html(apr_max); 
208
209 
210                                        } catch (e) { 
211                                            console.log(e); 
212
213                                    } else { 
214                                      $(".apr-full-text").html(''); 
215
216                                }); 
217                            </script> 
218                        </#if> 
219                        <script> 
220                        var product = "${product}"; 
221                        var partnerName = "${partnerName}"; 
222                          $(document).ready(function () { 
223                            $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms &amp; conditions</a>'); 
224                          }); 
225                        </script> 
226                    </#if> 
227                </#list> 
228            <#else> 
229                <#assign displayedCard = consumerCards[0]> 
230                <#assign offerId = displayedCard.saaofferId> 
231                <#if isEmployee> 
232                    <#assign offerId = displayedCard.empofferId!""> 
233                </#if> 
234                <#assign sourceCode = displayedCard.sourceCode> 
235                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
236                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
237                <#if ameriprise> 
238                    <#if (displayedCard.offerType == "101")> 
239                        <#assign productUrl="ameriprise-premier-visa-signature"> 
240                        <#assign product="Premier Visa Signature"> 
241                        <#assign cardIndex = 0> 
242                    <#elseif (displayedCard.offerType == "103")> 
243                        <#assign productUrl = "ameriprise-visa-signature"> 
244                        <#assign product="Visa Signature"> 
245                        <#assign cardIndex = 1> 
246                    </#if> 
247                <#else>                   
248                        <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
249                            <#assign productUrl = "consumer-platinum2103"> 
250                            <#assign product="Platinum">    
251                            <#assign cardIndex = 4>    
252                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
253                            <#if (scrapedData?size > 0)> 
254                                <#list scrapedData as sItem> 
255                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
256                                        <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
257                                        <#break> 
258                                    </#if> 
259                                </#list> 
260                                <script> 
261                                    $(document).ready(function () { 
262                                        var aprText = "${apr}"; 
263                                        if (aprText) { 
264                                            try { 
265                                                $(".apr-full-text").html(aprText); 
266                                                var matches= aprText.match(/\d+(\.\d+)?%?/g); 
267                                                var billing_cycle = matches[1]; 
268                                                var apr_min = apr_min = matches[2]; 
269                                                var apr_max = apr_max = matches[3]; 
270                                                if (billing_cycle) { 
271                                                    $(".scraped-billing-cycle").html(billing_cycle); 
272
273                                                if (apr_min) { 
274                                                    $(".scraped-apr-min").html(apr_min); 
275
276                                                if (apr_max) { 
277                                                    $('.scraped-apr-max').html(apr_max); 
278
279 
280                                            } catch (e) { 
281                                                console.log(e); 
282
283                                        } else { 
284                                          $(".apr-full-text").html(''); 
285
286                                    }); 
287                                </script> 
288                            </#if>     
289                        <#elseif (displayedCard.offerType == "104")> 
290                            <#assign productUrl = "max-cash"> 
291                            <#assign product="Max Cash Preferred"> 
292                            <#assign cardIndex = 0>    
293                        <#elseif (displayedCard.offerType == "141")> 
294                            <#assign productUrl = "college-real-rewards"> 
295                            <#assign product="College Real Rewards"> 
296                            <#assign cardIndex = 2>                                                
297                        <#elseif (displayedCard.offerType == "115")> 
298                            <#assign productUrl = "secured"> 
299                            <#assign product="Secured"> 
300                            <#assign cardIndex = 3> 
301                        </#if> 
302                </#if> 
303            </#if> 
304        </#if> 
305        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
306             
307            <#if (offerTypeList?seq_contains("128")) > 
308                <#list businessCards as card> 
309					<#assign useprcaValue = card.useprca!""> 
310                    <#if (card.offerType=="128")> 
311                        <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
312                        <#assign offerId = card.saaofferId> 
313                        <#assign sourceCode = card.sourceCode> 
314                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
315                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
316                        <#assign productUrl = "business-cash-preferred"> 
317                        <#assign product="Business Cash Preferred">                 
318                        <#assign cardIndex = 0> 
319                    </#if> 
320                </#list> 
321            <#else> 
322                <#assign displayedCard = businessCards[0]> 
323                <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
324                <#assign offerId = displayedCard.saaofferId> 
325                <#assign sourceCode = displayedCard.sourceCode> 
326                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
327                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
328 
329                <#if (displayedCard.offerType=="143")> 
330                    <#assign productUrl="business-real-rewards"> 
331                    <#assign product="Business Real Rewards"> 
332                    <#assign cardIndex = 2>    
333                <#elseif (displayedCard.offerType=="144")> 
334                    <#assign productUrl = "smart-business-rewards"> 
335                    <#assign product="Smart Business Rewards"> 
336                    <#assign cardIndex = 1>                     
337                <#elseif (displayedCard.offerType=="121")> 
338                    <#assign productUrl = "business-platinum2103"> 
339                    <#assign product="Business Card"> 
340                    <#assign cardIndex = 3> 
341                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
342                    <#if (scrapedData?size > 0)> 
343                        <#list scrapedData as sItem> 
344                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
345                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
346                                <#break> 
347                            </#if> 
348                        </#list> 
349                        <script> 
350                            $(document).ready(function () { 
351                                var aprText = "${apr}"; 
352                                if (aprText) { 
353                                    try { 
354                                        $(".apr-full-text").html(aprText); 
355                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
356                                        var billing_cycle = matches[1]; 
357                                        var apr_min = apr_min = matches[2]; 
358                                        var apr_max = apr_max = matches[3]; 
359                                        if (billing_cycle) { 
360                                            $(".scraped-billing-cycle").html(billing_cycle); 
361
362                                        if (apr_min) { 
363                                            $(".scraped-apr-min").html(apr_min); 
364
365                                        if (apr_max) { 
366                                            $('.scraped-apr-max').html(apr_max); 
367
368 
369                                    } catch (e) { 
370                                        console.log(e); 
371
372                                } else { 
373                                  $(".apr-full-text").html(''); 
374
375                            }); 
376                        </script> 
377                    </#if>                       
378                </#if> 
379            </#if> 
380        </#if>    
381        <#if product != ""> 
382            <#if ameriprise> 
383                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
384                <#assign rollover_text =  partnerName + " " + product + " Card"> 
385            <#else> 
386                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
387                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
388                <#assign card_text = product + " Card"> 
389            </#if>  
390        </#if>  
391        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
392            <div class="hero-main"> 
393                <div class="hero-main-logo"> 
394                    <#if partnerUrl?has_content> 
395                        <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
396                    <#else> 
397                        <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
398                    </#if> 
399                </div> 
400                <div class="hero-main-container"> 
401                    <div class="hero-main-offer bg-color-white"> 
402                    <div class="offer-detail"> 
403 
404                            <div class="offer-detail-cardArt cardArtImg">                                                  
405                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
406                                <p>${card_text!''}</p> 
407                            </div> 
408                            <div class="offer-detail-text text-color-default hide-desktop"> 
409                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
410                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
411                            </div> 
412 
413                            <#if ameriprise> 
414                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
415                            <#else>  
416								<#if (useprcaValue == "1")> 
417                                <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm hide-desktop"> 
418                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
419                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
420                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
421                                    <button  
422                                        type="submit"  
423                                        data-button-name="cta-button-top"   
424                                        data-product-name="${productUrl!''}"                                        
425                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
426                                        disabled  
427
428                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
429                                    </button> 
430                                </form> 
431								<#else> 
432								<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop"> 
433                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
434                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
435                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
436                                    <button  
437                                        type="submit"  
438                                        data-button-name="cta-button-top"   
439                                        data-product-name="${productUrl!''}"                                        
440                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
441                                        disabled  
442
443                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
444                                    </button> 
445                                </form> 
446								</#if> 
447                            </#if> 
448                        </div> 
449 
450                        <div class="offer-header"> 
451                             <div class="offer-text-top"> 
452                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
453                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
454                            </div> 
455                            <div class="offer-text-bottom hide-mobile"> 
456                                <div class="offer-detail-text text-color-default"> 
457                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
458                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
459                                </div> 
460 
461                                <#if ameriprise> 
462                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
463                                <#else>  
464									<#if (useprcaValue == "1")> 
465                                    <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
466                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
467                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
468                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
469                                        <button  
470                                            type="submit"  
471                                            data-button-name="cta-button-top"   
472                                            data-product-name="${productUrl!''}"  
473                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
474                                            disabled 
475
476                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
477                                        </button> 
478                                    </form> 
479									<#else>  
480									<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm"> 
481                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
482                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
483                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
484                                        <button  
485                                            type="submit"  
486                                            data-button-name="cta-button-top"   
487                                            data-product-name="${productUrl!''}"  
488                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
489                                            disabled 
490
491                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
492                                        </button> 
493                                    </form> 
494									</#if> 
495                                </#if> 
496                            </div> 
497                        </div>                        
498                    </div> 
499                </div> 
500            </div> 
501        </div>   
502 
503    </#if> 
504</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411750" at line 10, column 17]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign bCode = qstringmap["bankercod...  [in template "10154#10192#153411750" at line 10, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign applicationType = "saa" > 
8<#assign useprcaValue = "" > 
9<#assign prcaURL = propsUtil.get('elan.prca.url')> 
10<#assign bCode= qstringmap["bankercode"]?first> 
11<#assign bCode = htmlUtil.escape(bCode)> 
12<#assign bCode = htmlUtil.escapeJS(bCode)> 
13 
14<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
15<#list bData as b>      
16    <#assign lc = b.locationcode > 
17    <#assign rLC = b.reallocationcode > 
18    <#assign mappedLC = b.mappedLocationCode > 
19    
20</#list>  
21   
22<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
23    <#assign ameriprise = true> 
24<#else> 
25    <#assign ameriprise = false> 
26</#if> 
27 
28<#if mappedLC?has_content && !ameriprise> 
29    <#assign lc = mappedLC > 
30</#if> 
31<#assign isEmployee = false> 
32 
33<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
34<#if fiData?first?has_content> 
35    <#assign fi = fiData?first> 
36    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
37        <#assign subbu_special = fi.offerId> 
38    </#if> 
39    <#if fi.projectType == "emp"> 
40        <#assign isEmployee = true> 
41    </#if> 
42</#if>  
43 
44<#if lc?has_content> 
45    <#assign prefix = "00000" > 
46    <#assign lcWithPrefix = prefix + lc> 
47    <#assign withPrefixLength = lcWithPrefix?length > 
48    <#assign startHere = withPrefixLength - 5> 
49    <#assign lc = lcWithPrefix?substring(startHere)>     
50    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
51    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
52 
53    <#assign clientProfile = clientProfileList?first> 
54    <#assign partnerName = clientProfile.getMarketingNameLong()> 
55    <#assign pbu = clientProfile.getPbu()> 
56    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>     
57    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
58    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
59    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
60    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")>             
61        <#assign partnerUrl = 'https://' + partnerUrl> 
62    </#if> 
63 
64    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
65    <#if clientdataList?has_content > 
66        <#assign clientdata = clientdataList?first > 
67    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
68		<#assign backgroundImage = clientdata["backgroundImage"] > 
69		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
70		<#assign AprMin = clientdata["AprMin"] > 
71		<#assign AprMax = clientdata["AprMax"] > 
72		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
73		<#assign BillingCycles = clientdata["BillingCycles"] > 
74		<#assign textHexColor = clientdata["textHexColor"] > 
75		<#assign linkHexColor = clientdata["linkHexColor"] > 
76		<#assign hoverColor = clientdata["hoverColor"] > 
77		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
78		<#assign transparency = clientdata["transparency"] > 
79		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
80		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
81		<#assign businessTransparency = clientdata["businessTransparency"] > 
82		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
83		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
84	</#if> --> 
85	 
86    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
87    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
88    <#if pbu == "0864054"> 
89        <#assign override = "berkshire"> 
90    <#else> 
91        <#assign override = " "> 
92    </#if> 
93    <#--  this one should be delete for prod  --> 
94                 
95    <#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com">   
96    <#assign logoFileName = pbu + "-" + subbu + ".png">--> 
97 
98    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
99    <#if (subbu_special?has_content)> 
100        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
101    <#else> 
102        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
103    </#if> 
104    <#assign temp = []> 
105    <#assign consumerCards = []> 
106    <#assign businessCards = []>  
107    <#assign offerTypeList = []>       
108    <#assign index = 0> 
109    <#assign ameriprise_cards= []> 
110    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
111    <#assign businessOfferTypes =['128', '121', '144', '143']> 
112    <#list fiCardsData as fib> 
113		 
114        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
115            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
116            <#assign temp = temp + fiCardsData[index..index]>    
117            <#if ameriprise> 
118                <#if (fib.offerType == "101" || fib.offerType == "103")> 
119                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
120                </#if>                      
121            <#else> 
122                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
123                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
124                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
125                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
126                </#if>             
127            </#if>                 
128        </#if>  
129        <#assign index = index + 1>   
130                     
131    </#list>        
132    <#assign fiCardsData = temp> 
133    <#if ameriprise> 
134        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
135    </#if> 
136 
137    <#if (fiCardsData?size > 0)>   
138        <#if (subbu_special?has_content)> 
139            <#assign lc_used = fiCardsData?first.WebLocationCode>   
140        <#else> 
141            <#if ameriprise> 
142                <#assign lc_used = mappedLC>  
143            <#else> 
144                <#assign lc_used = lc>  
145            </#if> 
146        </#if>               
147        <#assign offerId = ""> 
148        <#assign sourceCode = ""> 
149        <#assign cardArtImage = ""> 
150        <#assign productUrl = ""> 
151        <#assign product = ""> 
152        <#assign preparerType = "customer"> 
153        <#assign apr = ""> 
154        <#assign cardIndex = 0>  
155        <#assign empOfferId = "">  
156        <#if consumerCards[0]?has_content> 
157            <#assign empOfferId = consumerCards[0].empofferId!""> 
158        </#if> 
159        <#assign marketingChannel = 'SAT2A'> 
160        <#if isEmployee> 
161            <#assign marketingChannel = 'EMPL'> 
162            <#assign offerId = empOfferId>       
163        </#if> 
164 
165        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
166            <#if (offerTypeList?seq_contains("108") || offerTypeList?seq_contains("109"))> 
167                <#list consumerCards as card> 
168					<#assign useprcaValue = card.useprca!""> 
169                    <#if (card.offerType=="108" || card.offerType=="109") > 
170                        <#assign offerId = card.saaofferId> 
171                        <#if isEmployee> 
172                            <#assign offerId = card.empofferId!""> 
173                        </#if> 
174                        <#assign sourceCode = card.sourceCode> 
175                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
176                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
177 
178                        <#assign productUrl="consumer-platinum2103"> 
179                        <#assign product="Platinum"> 
180                        <#assign cardIndex = 4> 
181 
182                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
183                        <#if (scrapedData?size > 0)> 
184                            <#list scrapedData as sItem> 
185                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
186                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
187                                    <#break> 
188                                </#if> 
189                            </#list> 
190                            <script> 
191                                $(document).ready(function () { 
192                                    var aprText = "${apr}"; 
193                                    if (aprText) { 
194                                        try { 
195                                            $(".apr-full-text").html(aprText); 
196                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
197                                            var billing_cycle = matches[1]; 
198                                            var apr_min = apr_min = matches[2]; 
199                                            var apr_max = apr_max = matches[3]; 
200                                            if (billing_cycle) { 
201                                                $(".scraped-billing-cycle").html(billing_cycle); 
202
203                                            if (apr_min) { 
204                                                $(".scraped-apr-min").html(apr_min); 
205
206                                            if (apr_max) { 
207                                                $('.scraped-apr-max').html(apr_max); 
208
209 
210                                        } catch (e) { 
211                                            console.log(e); 
212
213                                    } else { 
214                                      $(".apr-full-text").html(''); 
215
216                                }); 
217                            </script> 
218                        </#if> 
219                        <script> 
220                        var product = "${product}"; 
221                        var partnerName = "${partnerName}"; 
222                          $(document).ready(function () { 
223                            $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"><span class="screen-reader-only">' + partnerName + ' ' + product + ' Card</span>See terms &amp; conditions</a>'); 
224                          }); 
225                        </script> 
226                    </#if> 
227                </#list> 
228            <#else> 
229                <#assign displayedCard = consumerCards[0]> 
230                <#assign offerId = displayedCard.saaofferId> 
231                <#if isEmployee> 
232                    <#assign offerId = displayedCard.empofferId!""> 
233                </#if> 
234                <#assign sourceCode = displayedCard.sourceCode> 
235                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
236                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
237                <#if ameriprise> 
238                    <#if (displayedCard.offerType == "101")> 
239                        <#assign productUrl="ameriprise-premier-visa-signature"> 
240                        <#assign product="Premier Visa Signature"> 
241                        <#assign cardIndex = 0> 
242                    <#elseif (displayedCard.offerType == "103")> 
243                        <#assign productUrl = "ameriprise-visa-signature"> 
244                        <#assign product="Visa Signature"> 
245                        <#assign cardIndex = 1> 
246                    </#if> 
247                <#else>                   
248                        <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
249                            <#assign productUrl = "consumer-platinum2103"> 
250                            <#assign product="Platinum">    
251                            <#assign cardIndex = 4>    
252                            <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
253                            <#if (scrapedData?size > 0)> 
254                                <#list scrapedData as sItem> 
255                                    <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
256                                        <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
257                                        <#break> 
258                                    </#if> 
259                                </#list> 
260                                <script> 
261                                    $(document).ready(function () { 
262                                        var aprText = "${apr}"; 
263                                        if (aprText) { 
264                                            try { 
265                                                $(".apr-full-text").html(aprText); 
266                                                var matches= aprText.match(/\d+(\.\d+)?%?/g); 
267                                                var billing_cycle = matches[1]; 
268                                                var apr_min = apr_min = matches[2]; 
269                                                var apr_max = apr_max = matches[3]; 
270                                                if (billing_cycle) { 
271                                                    $(".scraped-billing-cycle").html(billing_cycle); 
272
273                                                if (apr_min) { 
274                                                    $(".scraped-apr-min").html(apr_min); 
275
276                                                if (apr_max) { 
277                                                    $('.scraped-apr-max').html(apr_max); 
278
279 
280                                            } catch (e) { 
281                                                console.log(e); 
282
283                                        } else { 
284                                          $(".apr-full-text").html(''); 
285
286                                    }); 
287                                </script> 
288                            </#if>     
289                        <#elseif (displayedCard.offerType == "104")> 
290                            <#assign productUrl = "max-cash"> 
291                            <#assign product="Max Cash Preferred"> 
292                            <#assign cardIndex = 0>    
293                        <#elseif (displayedCard.offerType == "141")> 
294                            <#assign productUrl = "college-real-rewards"> 
295                            <#assign product="College Real Rewards"> 
296                            <#assign cardIndex = 2>                                                
297                        <#elseif (displayedCard.offerType == "115")> 
298                            <#assign productUrl = "secured"> 
299                            <#assign product="Secured"> 
300                            <#assign cardIndex = 3> 
301                        </#if> 
302                </#if> 
303            </#if> 
304        </#if> 
305        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
306             
307            <#if (offerTypeList?seq_contains("128")) > 
308                <#list businessCards as card> 
309					<#assign useprcaValue = card.useprca!""> 
310                    <#if (card.offerType=="128")> 
311                        <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
312                        <#assign offerId = card.saaofferId> 
313                        <#assign sourceCode = card.sourceCode> 
314                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
315                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
316                        <#assign productUrl = "business-cash-preferred"> 
317                        <#assign product="Business Cash Preferred">                 
318                        <#assign cardIndex = 0> 
319                    </#if> 
320                </#list> 
321            <#else> 
322                <#assign displayedCard = businessCards[0]> 
323                <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
324                <#assign offerId = displayedCard.saaofferId> 
325                <#assign sourceCode = displayedCard.sourceCode> 
326                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
327                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
328 
329                <#if (displayedCard.offerType=="143")> 
330                    <#assign productUrl="business-real-rewards"> 
331                    <#assign product="Business Real Rewards"> 
332                    <#assign cardIndex = 2>    
333                <#elseif (displayedCard.offerType=="144")> 
334                    <#assign productUrl = "smart-business-rewards"> 
335                    <#assign product="Smart Business Rewards"> 
336                    <#assign cardIndex = 1>                     
337                <#elseif (displayedCard.offerType=="121")> 
338                    <#assign productUrl = "business-platinum2103"> 
339                    <#assign product="Business Card"> 
340                    <#assign cardIndex = 3> 
341                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
342                    <#if (scrapedData?size > 0)> 
343                        <#list scrapedData as sItem> 
344                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
345                                <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
346                                <#break> 
347                            </#if> 
348                        </#list> 
349                        <script> 
350                            $(document).ready(function () { 
351                                var aprText = "${apr}"; 
352                                if (aprText) { 
353                                    try { 
354                                        $(".apr-full-text").html(aprText); 
355                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
356                                        var billing_cycle = matches[1]; 
357                                        var apr_min = apr_min = matches[2]; 
358                                        var apr_max = apr_max = matches[3]; 
359                                        if (billing_cycle) { 
360                                            $(".scraped-billing-cycle").html(billing_cycle); 
361
362                                        if (apr_min) { 
363                                            $(".scraped-apr-min").html(apr_min); 
364
365                                        if (apr_max) { 
366                                            $('.scraped-apr-max').html(apr_max); 
367
368 
369                                    } catch (e) { 
370                                        console.log(e); 
371
372                                } else { 
373                                  $(".apr-full-text").html(''); 
374
375                            }); 
376                        </script> 
377                    </#if>                       
378                </#if> 
379            </#if> 
380        </#if>    
381        <#if product != ""> 
382            <#if ameriprise> 
383                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
384                <#assign rollover_text =  partnerName + " " + product + " Card"> 
385            <#else> 
386                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
387                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
388                <#assign card_text = product + " Card"> 
389            </#if>  
390        </#if>  
391        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
392            <div class="hero-main"> 
393                <div class="hero-main-logo"> 
394                    <#if partnerUrl?has_content> 
395                        <a href="${partnerUrl!''}" title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
396                    <#else> 
397                        <a title="${partnerName!''} Logo"><img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"></a> 
398                    </#if> 
399                </div> 
400                <div class="hero-main-container"> 
401                    <div class="hero-main-offer bg-color-white"> 
402                    <div class="offer-detail"> 
403 
404                            <div class="offer-detail-cardArt cardArtImg">                                                  
405                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
406                                <p>${card_text!''}</p> 
407                            </div> 
408                            <div class="offer-detail-text text-color-default hide-desktop"> 
409                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
410                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
411                            </div> 
412 
413                            <#if ameriprise> 
414                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white hide-desktop" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
415                            <#else>  
416								<#if (useprcaValue == "1")> 
417                                <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm hide-desktop"> 
418                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
419                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
420                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
421                                    <button  
422                                        type="submit"  
423                                        data-button-name="cta-button-top"   
424                                        data-product-name="${productUrl!''}"                                        
425                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
426                                        disabled  
427
428                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
429                                    </button> 
430                                </form> 
431								<#else> 
432								<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm hide-desktop"> 
433                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
434                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
435                                    <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
436                                    <button  
437                                        type="submit"  
438                                        data-button-name="cta-button-top"   
439                                        data-product-name="${productUrl!''}"                                        
440                                        class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
441                                        disabled  
442
443                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
444                                    </button> 
445                                </form> 
446								</#if> 
447                            </#if> 
448                        </div> 
449 
450                        <div class="offer-header"> 
451                             <div class="offer-text-top"> 
452                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
453                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
454                            </div> 
455                            <div class="offer-text-bottom hide-mobile"> 
456                                <div class="offer-detail-text text-color-default"> 
457                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
458                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
459                                </div> 
460 
461                                <#if ameriprise> 
462                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="applyNowLink jn-button apply-button text-bold button-bg-color-custom text-color-white" href="javascript:void(0);" onclick="goToByScroll('product-display')">${productTitle.getSiblings()[cardIndex].ctaText.getData()}</a>                                 
463                                <#else>  
464									<#if (useprcaValue == "1")> 
465                                    <form action="${prcaURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
466                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
467                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
468                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
469                                        <button  
470                                            type="submit"  
471                                            data-button-name="cta-button-top"   
472                                            data-product-name="${productUrl!''}"  
473                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
474                                            disabled 
475
476                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
477                                        </button> 
478                                    </form> 
479									<#else>  
480									<form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&mktChl=${marketingChannel}" method="post" class="BAAForm"> 
481                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
482                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
483                                        <!-- applyNowLink class is used for ga4 analytics call in other template on page --> 
484                                        <button  
485                                            type="submit"  
486                                            data-button-name="cta-button-top"   
487                                            data-product-name="${productUrl!''}"  
488                                            class="applyNowLink jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
489                                            disabled 
490
491                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
492                                        </button> 
493                                    </form> 
494									</#if> 
495                                </#if> 
496                            </div> 
497                        </div>                        
498                    </div> 
499                </div> 
500            </div> 
501        </div>   
502 
503    </#if> 
504</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> url404  [in template "10154#10192#153411738" at line 81, column 28]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${url404}  [in template "10154#10192#153411738" at line 81, column 26]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign url = themeDisplay.getURLCurrent() > 
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
5<#-- <#assign url404 = '/error/404.html'> --> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign environment = url?replace('/index.*','','r')> 
8<#assign prcaURL = propsUtil.get('elan.prca.url')> 
9<#assign useprcaValue = "" > 
10<#assign applicationType = "saa" > 
11<#assign text_to_apply_source = "vanity url" > 
12<#if qstringmap["sms"]?has_content> 
13    <#assign sms = 1 > 
14    <#assign text_to_apply_source = "sms" > 
15</#if> 
16<#if qstringmap["qrCode"]?has_content> 
17    <#assign text_to_apply_source = "qr code" > 
18</#if> 
19 
20<#if qstringmap["ecid"]?has_content> 
21    <#assign ecidExt = qstringmap["ecid"]?first> 
22    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
23    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
24    <#assign ecidExt = "&ecid=" + ecidExt> 
25    
26    <#assign campaignId = qstringmap["ecid"]?first > 
27    <#assign campaignId  = htmlUtil.escape(campaignId)> 
28    <#assign campaignId  = htmlUtil.escapeJS(campaignId)> 
29<#else> 
30    <#assign ecidExt=""> 
31    <#assign campaignId = "" > 
32</#if> 
33<#--  check bankercode validity  --> 
34<#if oadURL?contains("uat-")> 
35    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
36<#else> 
37    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
38</#if> 
39<#if qstringmap["bankercode"]?has_content> 
40    <#assign bCode= qstringmap["bankercode"]?first> 
41    <#assign bCode= htmlUtil.escapeJS(bCode)> 
42    <#assign bCode= htmlUtil.escape(bCode)> 
43    <#assign isEmployee = false> 
44 
45    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
46    <#if fiData?first?has_content> 
47        <#assign fi = fiData?first> 
48        <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
49            <#assign subbu_special = fi.offerId> 
50        </#if> 
51        <#if fi.projectType == "emp"> 
52            <#assign isEmployee = true> 
53        </#if> 
54    <#else> 
55        <script> 
56            console.log("fiData missing"); 
57            location.href = '${url404}'; 
58        </script> 
59    </#if> 
60 
61    <#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
62    <#if !bData?first?has_content> 
63        <script> 
64            console.log("bData missing"); 
65            location.href = '${url404}'; 
66        </script> 
67    </#if> 
68    <#list bData as b>      
69        <#assign lc = b.locationcode > 
70        <#assign bName = b.branch > 
71        <#assign bPhone = b.businessphone > 
72        <#assign boeid = b.oeid?trim> 
73        <#assign fName = b.firstname?trim> 
74        <#assign lName = b.lastname?trim> 
75        <#assign rLC = b.reallocationcode > 
76        <#assign mappedLC = b.mappedLocationCode > 
77    </#list>  
78<#else> 
79    <script> 
80        console.log("MainProductBcode missing"); 
81        location.href = '${url404}'; 
82    </script> 
83</#if> 
84 
85<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
86    <#assign ameriprise = true> 
87<#else> 
88    <#assign ameriprise = false> 
89</#if> 
90<#if mappedLC?has_content && !ameriprise> 
91    <#assign lc = mappedLC > 
92</#if> 
93 
94           
95<#if lc?has_content> 
96    <#assign firstNameLength = fName?length > 
97    <#assign lastNameLength = lName?length > 
98    <#if firstNameLength + lastNameLength &gt; 19 > 
99        <#if lastNameLength &gt; 18 > 
100            <#assign bLName = lName?substring(0,18)> 
101        <#else> 
102            <#assign bLName = lName> 
103        </#if> 
104        <#assign maxFirstName = 19 - bLName?length > 
105        <#if firstNameLength &gt; maxFirstName > 
106            <#assign bFName = fName?substring(0,maxFirstName)> 
107        <#else> 
108            <#assign bFName = fName> 
109        </#if> 
110    <#else> 
111        <#assign bFName = fName> 
112        <#assign bLName = lName> 
113    </#if>  
114 
115    <#assign prefix = "00000" > 
116    <#assign lcWithPrefix = prefix + lc > 
117    <#assign withPrefixLength = lcWithPrefix?length > 
118    <#assign startHere = withPrefixLength - 5> 
119    <#assign lc = lcWithPrefix?substring(startHere)>   
120    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
121    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
122    <#if (clientProfileList?first?has_content)> 
123        <#assign clientProfile = clientProfileList?first> 
124        <#assign partnerName = clientProfile.getMarketingNameLong()> 
125        <#assign pbu = clientProfile.getPbu()> 
126        <#assign subbu = clientProfile.getSUBBRANDBUNBR()>          
127        <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>  
128        <#if (subbu_special?has_content)> 
129            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
130        <#else> 
131            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
132        </#if> 
133 
134        <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards--> 
135        <#assign temp = []> 
136        <#assign consumerCards = []> 
137        <#assign businessCards = []>  
138        <#assign offerTypeList = []>  
139        <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']> 
140        <#assign businessOfferTypes =['144', '128', '143', '121']>     
141        <#assign index = 0> 
142        <#list fiCardsData as fib> 
143            <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
144                <#assign offerTypeList = offerTypeList + [fib.offerType]> 
145                <#assign temp = temp + fiCardsData[index..index]>   
146                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
147                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
148                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
149                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
150                </#if>                 
151            </#if>  
152            <#assign index = index + 1>                
153        </#list>  
154 
155        <#assign fiCardsData = temp> 
156 
157        <#if (fiCardsData?size > 0)>   
158            <#if (subbu_special?has_content)> 
159                <#assign lc_used = fiCardsData?first.WebLocationCode>   
160            <#else> 
161                <#if ameriprise> 
162                    <#assign lc_used = mappedLC>  
163                <#else> 
164                    <#assign lc_used = lc>  
165                </#if> 
166            </#if>  
167        </#if>  
168 
169        <#assign offerId = ""> 
170        <#assign empOfferId = "">  
171        <#if consumerCards[0]?has_content> 
172            <#assign empOfferId = consumerCards[0].empofferId!""> 
173        </#if> 
174        <#assign marketingChannel = 'SAT2A'> 
175        <#if isEmployee> 
176				<#assign marketingChannel = 'EMPL'> 
177				<#assign offerId = empOfferId> 
178				<#assign consumerCardsEmployee = []> 
179				<#list consumerCards as card> 
180					<#if card.empofferId?has_content> 
181						<#assign consumerCardsEmployee = consumerCardsEmployee + [card]> 
182					</#if> 
183				</#list> 
184				<#assign consumerCards = consumerCardsEmployee /> 
185			</#if> 
186        
187        <#if (consumerCards?size > 0 || businessCards?size > 0)>  
188         
189            <div class="content-container content-container-main jn-consumer-content" id="product-display"> 
190                <#if ((consumerCards?size > 0) && (businessCards?size > 0) && (isEmployee == false))> 
191                    <nav class="jn-primary-nav two-tabs"> 
192                        <ul> 
193                            <li title="${partnerName!''} - Personal products"> 
194                                <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a> 
195                            </li> 
196                            <li title="${partnerName!''} - Business products"> 
197                                <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a> 
198                            </li> 
199                        </ul> 
200                    </nav> 
201                <#else> 
202                    <#if (consumerCards?size > 0)> 
203                        <nav class="jn-primary-nav" title="${partnerName!''} - Personal products"> 
204                            <ul> 
205                                <li> 
206                                    <p class="tab-nav" id="consumerTab"><span>Personal</span></p> 
207                                </li> 
208                            </ul> 
209                        </nav> 
210                    </#if> 
211                    <#if (businessCards?size > 0 && (isEmployee == false))> 
212                        <nav class="jn-primary-nav" title="${partnerName!''} - Business products"> 
213                            <ul> 
214                                <li> 
215                                    <p class="tab-nav" id="businessTab"><span>Business</span></p> 
216                                </li> 
217                            </ul> 
218                        </nav> 
219                    </#if> 
220                </#if> 
221                <#if (consumerCards?size > 0)> 
222                    <div class="tab-more-wrapper"> 
223                        <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products"> 
224                            <#list consumerCards as fib> 
225							    <#assign useprcaValue = fib.useprca!"">  
226                                <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" > 
227                                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">      
228                                <#assign hasBalanceTransferCalculator = false>    
229                                <#assign offerId = fib.saaofferId> 
230                                <#if isEmployee> 
231                                    <#assign offerId = fib.empofferId!""> 
232                                </#if> 
233 
234                                <#if ameriprise>                                
235                                    <#if (fib.offerType == "101")> 
236                                            <#assign productName = "premier-visa-signature"> 
237                                            <#assign product="Premier Visa Signature"> 
238                                            <#assign cardIndex = 0> 
239                                    <#elseif (fib.offerType == "103")> 
240                                            <#assign productName = "visa-signature"> 
241                                            <#assign product="Visa Signature"> 
242                                            <#assign cardIndex = 1> 
243                                    </#if> 
244                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
245                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
246                                <#else> 
247                                    <#switch fib.offerType> 
248                                        <#case "101"> 
249                                            <#assign productName = "consumer-edr2112"> 
250                                            <#assign product="Everyday Rewards+"> 
251                                            <#assign cardIndex = 0> 
252                                            <#break> 
253                                        <#case "108"> 
254                                            <#assign productName = "consumer-platinum2103"> 
255                                            <#assign product="Platinum"> 
256                                            <#assign cardIndex = 2> 
257                                            <#assign hasBalanceTransferCalculator = true>  
258                                            <#break> 
259                                        <#case "109"> 
260                                            <#assign productName = "consumer-platinum2103"> 
261                                            <#assign product="Platinum"> 
262                                            <#assign cardIndex = 2> 
263                                            <#assign hasBalanceTransferCalculator = true>  
264                                            <#break>                                            
265                                        <#case "115"> 
266                                            <#assign productName = "secured"> 
267                                            <#assign product="Secured"> 
268                                            <#assign cardIndex = 5> 
269                                            <#break> 
270                                        <#case "104"> 
271                                            <#assign productName = "max-cash"> 
272                                            <#assign product="Max Cash Preferred"> 
273                                            <#assign cardIndex = 1> 
274                                            <#break> 
275                                        <#case "147"> 
276                                            <#assign productName = "max-cash-secured"> 
277                                            <#assign product="Max Cash Secured"> 
278                                            <#assign cardIndex = 4> 
279                                            <#break> 
280                                        <#case "141"> 
281                                            <#assign productName = "college-real-rewards"> 
282                                            <#assign product="College Real Rewards"> 
283                                            <#assign cardIndex = 3> 
284                                            <#break> 
285                                        <#case "138"> 
286                                            <#assign productName = "travel-rewards-plus"> 
287                                            <#assign product="Travel Rewards+"> 
288                                            <#assign cardIndex = 10> 
289                                            <#break> 
290                                        <#case "154"> 
291                                            <#assign productName = "reserve-rewards-plus"> 
292                                            <#assign product="Reserve Rewards+"> 
293                                            <#assign cardIndex = 11> 
294                                            <#break> 
295                                        <#default> 
296                                    </#switch> 
297 
298                                    <#assign newTag = ""> 
299                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
300                                        <#assign newTag = "with-new-tag"> 
301                                    </#if> 
302                                     
303                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
304                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
305                                     
306 
307                                    <#assign APR=""> 
308                                    <#assign AMF=""> 
309                                    <#assign BAL=""> 
310                                     
311 
312                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)> 
313                                    <#if (scrapedData?size > 0)> 
314                                        <#list scrapedData as sItem> 
315                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
316                                                <#assign APR = sItem.scrapedValue> 
317                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
318                                                <#assign AMF = sItem.scrapedValue> 
319                                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
320                                                <#assign BAL = sItem.scrapedValue> 
321                                            </#if> 
322                                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
323                                                <#break> 
324                                            </#if> 
325                                        </#list> 
326                                    </#if> 
327                                </#if> 
328                                <#if ameriprise> 
329                                    <#assign rollover_text =  partnerName + " " + product + " " + " Card"> 
330                                <#else> 
331                                    <#assign rollover_text =  partnerName + " " + product + " " + " Credit Card"> 
332                                </#if>                             
333                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}"> 
334                                    <div class="tag-container"> 
335                                        <div class="tag-corner"> 
336                                            <div class="tag-label">NEW</div> 
337                                        </div> 
338                                    </div> 
339                                    <div class="consumer-card-heading hide-desktop"> 
340                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
341                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
342                                    </div> 
343                                    <div class="jn-consumer-card-image"> 
344                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
345 
346                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
347                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
348                                        </#if> 
349                                        <#if (hasBalanceTransferCalculator)> 
350                                            <a style="display: block; text-align: center; max-width: 285px; margin: auto;" href="javascript:void(0);" data-micromodal-trigger="modal-2">See how much you could save with a balance transfer</a> 
351                                        </#if> 
352                                    </div> 
353 
354                                    <div class="jn-consumer-card-info"> 
355                                        <div class="consumer-card-heading hide-mobile"> 
356                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
357                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
358                                        </div> 
359                                        <div class="jn-additional"> 
360                                            <ul class="${fib.offerType}"> 
361                                                <#if !ameriprise>                                            
362                                                    <#if (fib.offerType == "104")> 
363                                                        <li class="${fib.offerType}"> 
364                                                            <p> 
365                                                                <strong>APR for Purchases: </strong> 
366                                                                ${APR!''} 
367                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
368                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
369                                                                </a> 
370                                                            </p>                                                             
371                                                        </li> 
372                                                        <li class="${fib.offerType}"> 
373                                                            <p> 
374                                                                <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong> 
375                                                                ${BAL!''}  
376                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
377                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
378                                                                </a> 
379                                                            </p> 
380                                                        </li> 
381                                                    <#else> 
382                                                        <li class="${fib.offerType}"> 
383                                                            <p> 
384                                                                <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")> 
385                                                                    <strong>APR for Purchases and Balance Transfers: </strong> 
386                                                                <#elseif (fib.offerType== "101")> 
387                                                                    <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
388                                                                <#else> 
389                                                                    <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
390                                                                </#if> 
391 
392                                                                ${APR!''}  
393                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
394                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
395                                                                </a> 
396                                                            </p> 
397                                                        </li> 
398                                                    </#if> 
399                                                </#if> 
400                                                <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content> 
401                                                    <#if  consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content> 
402                                                        <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo> 
403                                                            <li>${marketingInfo.getData()}</li> 
404                                                        </#list> 
405                                                    </#if> 
406                                                <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content> 
407                                                    <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
408                                                        <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
409                                                            <li>${marketingInfo.getData()}</li> 
410                                                        </#list> 
411                                                    </#if> 
412                                                </#if> 
413                                                <#if !ameriprise> 
414                                                    <li> 
415                                                        <p> 
416                                                            Annual Fee: ${AMF!''}  
417                                                            <a  href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}"  target="_blank"> 
418                                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
419                                                            </a> 
420                                                        </p> 
421                                                    </li> 
422                                                </#if> 
423                                            </ul> 
424                                        </div> 
425                                        <ul class="actions"> 
426                                            <li> 
427											<#if (useprcaValue == "1")> 
428                                                <form action="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm" id="BAAForm"> 
429                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
430                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
431                                                    <a  
432                                                        class="applyNowLink apply-now-button"  
433                                                        href="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" 
434                                                        data-button-name="apply-now-link"  
435                                                        data-product-name="${productName}"                 
436
437                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
438                                                    </a> 
439                                                </form> 
440												<#else> 
441													<form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" method="post" class="BAAForm" id="BAAForm"> 
442                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
443                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
444                                                    <a  
445                                                        class="applyNowLink apply-now-button"  
446                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" 
447                                                        data-button-name="apply-now-link"  
448                                                        data-product-name="${productName}"                 
449
450                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
451                                                    </a> 
452                                                </form> 
453												</#if> 
454                                            </li> 
455                                            <li> 
456                                            <#if ameriprise> 
457                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}"> 
458                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span> 
459                                                </a> 
460                                            <#else> 
461                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
462                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
463                                                </a> 
464                                            </#if> 
465                                            </li> 
466                                        </ul> 
467                                    </div>                             
468                                </div> 
469                            </#list> 
470                        </div> 
471                    </div>                 
472                </#if> 
473                <#if ((businessCards?size > 0) && (isEmployee == false))>  
474                    <div class="tab-more-wrapper">    
475                        <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products"> 
476                             
477                            <#list businessCards as fib> 
478							       <#assign useprcaValue = fib.useprca!"">  
479                                    <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
480                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg"> 
481                                    <#switch fib.offerType>                                   
482                                        <#case "144"> 
483                                            <#assign productName = "smart-business-rewards"> 
484                                            <#assign product="Smart Business Rewards"> 
485                                            <#assign cardIndex = 8> 
486                                            <#break> 
487                                        <#case "128"> 
488                                            <#assign productName = "business-cash-preferred"> 
489                                            <#assign product="Business Cash Preferred"> 
490                                            <#assign cardIndex = 6>   
491                                            <#break> 
492                                        <#case "143"> 
493                                            <#assign productName = "business-real-rewards"> 
494                                            <#assign product="Business Real Rewards"> 
495                                            <#assign cardIndex = 9> 
496                                            <#break> 
497                                        <#case "121"> 
498                                            <#assign productName = "business-platinum2103"> 
499                                            <#assign product="Business Card"> 
500                                            <#assign cardIndex = 7> 
501                                            <#break> 
502                                        <#default> 
503                                    </#switch> 
504                                    <!-- bussiness cards offerId dose not check for isEmployee because employees can't have business cards --> 
505                                    <#assign offerId = fib.saaofferId> 
506 
507                                    <#assign newTag = ""> 
508                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
509                                        <#assign newTag = "with-new-tag"> 
510                                    </#if> 
511                                    <#assign APR=""> 
512                                    <#assign AMF=""> 
513                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ fib.sourceCode)> 
514                                    <#if (scrapedData?size > 0)> 
515                                        <#list scrapedData as sItem> 
516                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
517                                                <#assign APR = sItem.scrapedValue> 
518                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
519                                                <#assign AMF = sItem.scrapedValue> 
520                                            </#if> 
521                                            <#if (APR?has_content && AMF?has_content)> 
522                                                <#break> 
523                                            </#if> 
524                                        </#list> 
525                                    </#if> 
526                                     
527                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
528                                    <div class="tag-container"> 
529                                        <div class="tag-corner"> 
530                                            <div class="tag-label">NEW</div> 
531                                        </div> 
532                                    </div> 
533                                    <div class="consumer-card-heading hide-desktop"> 
534                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
535                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
536                                    </div> 
537                                    <div class="jn-consumer-card-image"> 
538                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
539                                 
540                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
541                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
542                                        </#if> 
543                                    </div> 
544 
545                                    <div class="jn-consumer-card-info"> 
546                                        <div class="consumer-card-heading hide-mobile"> 
547                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
548                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
549                                        </div> 
550                                        <div class="jn-additional"> 
551                                            <ul> 
552                                                <li class="${fib.offerType}"> 
553                                                    <p> 
554                                                        <#if (fib.offerType == "144")> 
555                                                            <strong>APR for Purchases and Balance Transfers: </strong> 
556                                                        <#else> 
557                                                            <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
558                                                        </#if> 
559 
560                                                        ${APR!''} 
561                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
562                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
563                                                        </a> 
564                                                    </p> 
565                                                </li> 
566                                                <#if isEmployee && consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getData()?has_content> 
567                                                    <#if  consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings()?has_content> 
568                                                        <#list consumerTitle.getSiblings()[cardIndex].employeeAdditionalInfo.getSiblings() as marketingInfo> 
569                                                            <li>${marketingInfo.getData()}</li> 
570                                                        </#list> 
571                                                    </#if> 
572                                                <#elseif consumerTitle.getSiblings()[cardIndex].additionalInfo.getData()?has_content> 
573                                                    <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
574                                                        <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
575                                                            <li>${marketingInfo.getData()}</li> 
576                                                        </#list> 
577                                                    </#if> 
578                                                </#if> 
579                                                <li> 
580                                                    <p> 
581                                                        Annual Fee: ${AMF!''} <a 
582                                                        href="${oadURL_TC}?step=display&amp;offerId=${offerId}&amp;locationCode=${lc_used}" target="_blank"> 
583                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
584                                                        </a> 
585                                                    </p> 
586                                                </li> 
587                                            </ul> 
588                                        </div> 
589                                        <ul class="actions">                                     
590                                            <li> 
591											<#if (useprcaValue == "1")> 
592                                                <form action="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}" method="post" class="BAAForm"> 
593                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
594                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
595                                                    <a  
596                                                        class="applyNowLink apply-now-button"  
597                                                        href="${prcaURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}&amp;applicationType=${applicationType}"  
598                                                        data-button-name="apply-now-link"  
599                                                        data-product-name="${productName}" 
600
601                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
602                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
603                                                    </a> 
604                                                </form> 
605												<#else> 
606													<form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}" method="post" class="BAAForm"> 
607                                                    <label for="appDataBAA-${offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
608                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
609                                                    <a  
610                                                        class="applyNowLink apply-now-button"  
611                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${offerId}&amp;preparerType=customer&amp;mktChl=${marketingChannel}"  
612                                                        data-button-name="apply-now-link"  
613                                                        data-product-name="${productName}" 
614
615                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
616                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
617                                                    </a> 
618                                                </form> 
619												</#if> 
620												 
621												 
622                                            </li> 
623                                            <li> 
624                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
625                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
626                                                </a> 
627                                            </li> 
628                                        </ul> 
629                                    </div> 
630                                </div> 
631                                 
632                            </#list> 
633                             
634                        </div> 
635                    </div> 
636                </#if>  
637            </div> 
638            <script> 
639                var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]'; 
640                var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]'; 
641                 $(document).ready(function () { 
642                    var banker_code = "${bCode!''}"; 
643                    var tabs=$('.tab-nav'); 
644                    var slideDiv = $('.jn-tab-content.active');                    
645                    var screenWidthMobile = 768; 
646                    var screenWidth = window.innerWidth; 
647 
648                    if (tabs.length == 1) { 
649                        if ($(consumerSelector).length > 0) { 
650                            if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) { 
651                                $("nav.jn-primary-nav").hide(); 
652                                changeCardLayout(consumerSelector); 
653                                createMetaTag("consumer"); 
654                            } else { 
655                                hideHeroAndDisclaimer('business'); 
656                                showHeroAndDisclaimer('consumer'); 
657                                changeCardLayout(consumerSelector); 
658                                renumberFootnote("consumer"); 
659                                createMetaTag("consumer");  
660
661                        }  
662                        if ($(businessSelector).length > 0) { 
663                            $(businessSelector).addClass('active'); 
664                            hideHeroAndDisclaimer('consumer'); 
665                            showHeroAndDisclaimer('business'); 
666                            changeCardLayout(businessSelector); 
667                            renumberFootnote("business"); 
668                            createMetaTag("business");  
669
670
671                    if (tabs.length == 2) { 
672                        renumberFootnote("consumer"); 
673                        renumberFootnote("business"); 
674                        createMetaTag("consumer"); 
675                        if ($(consumerSelector + ' .jn-consumer-item').length < 3) { 
676                            changeCardLayout(consumerSelector); 
677
678                        if ($(businessSelector + ' .jn-consumer-item').length < 3) { 
679                            changeCardLayout(businessSelector); 
680
681                             
682                        var tabsNav = document.querySelectorAll('.tab-nav'); 
683                        togglePrimaryNav(tabsNav); 
684 
685                        if(window.location.href.indexOf('#business') > -1 ) { 
686                            $(consumerSelector).removeClass('active'); 
687                            $(businessSelector).addClass('active'); 
688                            $('#consumerTab').removeClass('active'); 
689                            $('#businessTab').addClass('active'); 
690                            hideHeroAndDisclaimer('consumer'); 
691                            showHeroAndDisclaimer('business'); 
692                            changeCardLayout(businessSelector); 
693                            renumberFootnote("business"); 
694                            createMetaTag("business"); 
695 
696                            $(tabs).click(function(){ 
697                                if ($(this).attr('id') === "consumerTab") { 
698                                    var newUrl = window.location.toString(); 
699                                    window.location = newUrl.replace(/#business/, '#consumer'); 
700
701                                if ($(this).attr('id') === "businessTab") { 
702                                    var url = window.location.toString(); 
703                                    window.location = url.replace(/#consumer/, '#business'); 
704
705                            }); 
706
707
708                     
709                }); 
710                // Primary Nav function 
711                 
712                function togglePrimaryNav(elem) { 
713                    for (var i = 0; i < elem.length; i++) { 
714                        elem[i].addEventListener("click", function(e) { 
715 
716                            var current = this, 
717                                allSections = document.querySelectorAll('[data-id]'), 
718                                section = document.querySelector("[data-id='"+ current.id +"']"); 
719 
720                            for (var a = 0; a < allSections.length; a++) { 
721                                allSections[a].classList.remove('active'); 
722
723                            for (var c = 0; c < elem.length; c++) { 
724                                if (current != elem[c]) { 
725                                    elem[c].classList.remove('active'); 
726                                } else { 
727                                    current.classList.add('active'); 
728                                    section.classList.add('active'); 
729                                    hideHeroAndDisclaimer('consumer'); 
730                                    hideHeroAndDisclaimer('business'); 
731                                    if(current.getAttribute('id') === "consumerTab"){ 
732                                        showHeroAndDisclaimer('consumer'); 
733                                    } else if(current.getAttribute('id') === "businessTab"){ 
734                                        showHeroAndDisclaimer('business'); 
735
736
737
738                            e.preventDefault(); 
739                        }); 
740
741
742 
743                function renumberFootnote(type) { 
744                    var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]'; 
745                    var disclaimerSelector = '.tier1-disclaimer-landing-' + type; 
746                    var heroSelector = '.tier1-hero-landing-' + type; 
747                    var numOfFootnote = $(disclaimerSelector + ' sup').length; 
748                    var showList = []; 
749                    var hideList=[]; 
750                    for (var i = 1; i <= numOfFootnote; i++) { 
751                    var cssClass="tag-" + i; 
752                    if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) { 
753                        showList.push(i);      
754                    } else { 
755                        hideList.push(i); 
756
757                    }  
758                    /* 
759                    for (var i = 1; i < showList.length + 1; i++) { 
760                        if(showList[i-1] != i) { 
761                            var className="tag-" + showList[i-1]; 
762                            $(heroSelector).find("." +  className).html(i); 
763                            // $(discriptionSelector).find("." +  className).html(i); 
764                            $(disclaimerSelector).find("." +  className).html(i); 
765
766
767                    */ 
768                    for (var i = 0; i <hideList.length; i++) { 
769                        var cname="tag-" + hideList[i]; 
770                        $(disclaimerSelector).find("." + cname).parent().hide(); 
771                    }    
772
773 
774                function changeCardLayout(cssSelector) { 
775                    var numOfCards = $(cssSelector + ' .jn-consumer-item').length; 
776                    if(numOfCards == 1) { 
777                        $(cssSelector).addClass('one-card'); 
778                    } else if (numOfCards == 2) { 
779                        $(cssSelector).addClass('two-card'); 
780                    }   
781
782                function hideHeroAndDisclaimer(type) { 
783                    try { 
784                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show'); 
785                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide'); 
786                    } catch (e) { 
787                        console.log(e); 
788
789 
790                    try { 
791                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show'); 
792                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');  
793                    } catch (e) { 
794                        console.log(e); 
795
796 
797
798                function showHeroAndDisclaimer(type) { 
799                    try { 
800                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('show'); 
801                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide'); 
802                    } catch (e) { 
803                        console.log(e); 
804
805                     
806                    try { 
807                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show'); 
808                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');  
809                    } catch (e) { 
810                        console.log(e); 
811
812 
813
814                function createMetaTag(type) { 
815                    var partnerName = "${partnerName!0}"; 
816                    var product_name = $('.jn-hero-container .jn-button').data('product-name'); 
817                    var metaDesc = ""; 
818                    if (type == "consumer") {     
819                        if(location.pathname.indexOf("11t1m") != -1) { 
820                            metaDesc = "Apply Today for an Ameriprise Financial Credit Card. Earn Rewards Points worth $375 cash value when deposited into an eligible account after spending $3,000 in eligible net purchases within the first 90 days of account opening." 
821                        } else {                                    
822                            if(product_name ==  "consumer-platinum2103") { 
823                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Limited Time Offer. 0% Intro APR on Purchases and Balance Transfers for 20 Billing Cycles Consolidate your Balances with the "+partnerName+" Intro APR Card."; 
824                            } else if(product_name ==  "real-rewards") { 
825                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase."; 
826                            } else if(product_name ==  "secured") { 
827                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
828                            } else if(product_name ==  "max-cash") { 
829                                if('${isEmployee?string("yes", "no")}' == "yes") { 
830                                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $200 Bonus and 5% cash back on the two categories you select."; 
831                                } else { 
832                                    metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select."; 
833
834
835
836 
837                    } else if (type == "business") { 
838                        if(product_name ==  "business-cashback") {               
839                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
840                        } else if(product_name ==  "business-real-rewards") { 
841                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on."; 
842                        } else if(product_name ==  "business-visa") { 
843                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
844                        } else if(product_name ==  "smart-business-rewards") { 
845                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. More choices. More value for your business. Earn a $200 Bonus and 2x Rewards on your top 2 spend categories each month with the "+partnerName+" Credit Card."; 
846
847
848                    var m = document.createElement('meta');  
849                    m.name = 'description';  
850                    m.content = metaDesc;  
851                    document.head.appendChild(m); 
852
853                function goToByScroll(id) { 
854                    var element = document.getElementById(id); 
855                    element.scrollIntoView(true); 
856
857                 
858            </script> 
859            <script> 
860                var reportingData = window.reportingData || {}; 
861                document.addEventListener('DOMContentLoaded', function() {                    
862                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
863                    var hostName = location.hostname;                                     
864                    function getDomainFromHostname(hostname) { 
865                        var parts = hostname.split('.'); 
866                        return parts.length === 3 ? parts[1] : parts[0]; 
867
868                    var domain = getDomainFromHostname(hostName); 
869                    var partnerName = "${partnerName!0}"; 
870                    var ameriprise = '${ameriprise?string("yes", "no")}'; 
871                    var locationCode = "${rLC!lc}"; 
872                    var eidAmp = ""; 
873                    var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img'); 
874                    for (var index = 0; index < heroCardImgs.length; index++) { 
875                        var heroCardImg = heroCardImgs[index]; 
876                        var heroCardSrc = heroCardImg.getAttribute("src"); 
877                        if(heroCardSrc != "") { 
878                            resizeImg(heroCardImg); 
879
880
881                    if (ameriprise == "yes") { 
882                        var bankercode_amp = '${bCode}'; 
883                        eidAmp = bankercode_amp.substring(3); 
884                        locationCode =""; 
885                        document.title = "Ameriprise Financial Credit Card Overview Page"; 
886                    } else { 
887                        document.title = partnerName + " Credit Card Index Page"; 
888
889                     
890                    var lc = '${lc!0}'; 
891 
892                    var regex = /\d+/g; 
893                    var bdNumber = "${bPhone!''}"; 
894                    var phoneNum = bdNumber.match(regex); 
895                    var areaCode = ""; 
896                    var exchangeCode = ""; 
897                    var num = ""; 
898                    if(phoneNum != null) { 
899                        phoneNum = phoneNum.join(""); 
900                        areaCode = phoneNum.substring(0,3); 
901                        exchangeCode = phoneNum.substring(3,6); 
902                        num = phoneNum.substring(6,10); 
903
904                     
905                        /* update SiteCatalyst data object */ 
906                    reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
907                    reportingData.page_type = 'product';  
908                    reportingData.site_section = 'credit cards'; 
909                    reportingData.platform = 'microsite'; 
910                    reportingData.campaign_id = '${campaignId}'; 
911                    reportingData.location_code = '${rLC!0}'; 
912                    reportingData.partner_name = "${partnerName}"; 
913                    reportingData.product = 'All Cards'; 
914                    reportingData.text_to_apply_source = '${text_to_apply_source}'; 
915                    reportingData.visitor_type = 'prospect';         
916                    reportingData.Banker_id = '${boeid}'; 
917                    reportingData.Banker_code = '${bCode}'; 
918 
919                                                     
920                    /* SiteCatalyst  pageView tracking */ 
921                    AUI().ready(function() { 
922                        if (window.publisherFW) {                            
923                            window.publisherFW.publishEvent("pageView", reportingData); 
924
925                    });  
926                                   
927                    $('.jn-button').removeAttr('disabled'); 
928                    $('.jn-button').removeClass('jn-disabled'); 
929 
930                    jQuery('.applyNowLink').on('click', function(e) { 
931                        $(this).closest('.BAAForm').submit(); 
932                        const bankerId = '${boeid}'; 
933                        const employeeId = ""; 
934                        let visitorId = bankerId; 
935                         
936                        if('${isEmployee?string("yes", "no")}' == "yes") { 
937                            visitorId = employeeId; 
938
939                        const htmlElementName = e.target.nodeName; 
940                        const isButton = (htmlElementName ==='BUTTON'); 
941                        // gets href of clicked anchor tag 
942                        let href = e.target.href; 
943 
944                        // get action url of form submit button  
945                        if(isButton) { 
946                            href = document.getElementById('BAAForm').action; 
947
948 
949                        const urlParams = new URLSearchParams(href);                    
950                        let offerId = ""; 
951 
952                        if(urlParams.has('offerid')) { 
953                            offerId = urlParams.get('offerid'); 
954
955 
956                        if(urlParams.has('offerId')) { 
957                            offerId = urlParams.get('offerId'); 
958
959                         
960                        window.dataLayer.push({ 
961                            'event' : 'apply_payload', 
962                            'location_code': locationCode, 
963                            'banker_code': '${bCode}', 
964                            'offer_id': offerId, 
965                            'visitor_id': visitorId, 
966                        }); 
967                        return false; 
968                    }); 
969                    jQuery(".BAAForm").on("submit", function(e){ 
970                        e.preventDefault();                         
971                        var xmlData; 
972                        if('${isEmployee?string("yes", "no")}' == "yes") { 
973
974                        if(ameriprise == "yes") { 
975                            xmlData = '<?xml version="1.0"?>'+ 
976                                "<prefillData>"+  
977                                    "<versionNumber>1.0</versionNumber>"+  
978                                    "<applicationData>"+  
979                                        "<referral>" +  
980                                            "<employeeId>" + eidAmp + "</employeeId>" + 
981                                            "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+ 
982                                            "<divisionNumber></divisionNumber>"+ 
983                                        "</referral>" +  
984                                        "<bankerInformation>"+  
985                                            "<locationCode>" + locationCode + "</locationCode>"+ 
986                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
987                                            "<employeeID>${boeid!0}</employeeID>"+ 
988                                            "<name>" + 
989                                            "<first>${bFName!'0'}</first>" + 
990                                            "<last>${bLName!'0'}</last>" + 
991                                            "</name>"+ 
992                                            "<phone>"+ 
993                                            "<areaCode>"+areaCode+"</areaCode>"+  
994                                            "<exchange>"+exchangeCode+"</exchange>"+ 
995                                            "<number>"+num+"</number>"+  
996                                            "</phone>"+  
997                                        "</bankerInformation>"+  
998                                    "</applicationData>"+  
999                                "</prefillData>" 
1000                        } else if ('${isEmployee?string("yes", "no")}' == "yes") {  
1001                            xmlData = '<?xml version="1.0"?>'+ 
1002                                "<prefillData>"+  
1003                                    "<versionNumber>1.0</versionNumber>"+  
1004                                    "<applicationData>"+                                         
1005                                        "<bankerInformation>"+  
1006                                            "<employeeFullName>Employee Product</employeeFullName>"+ 
1007                                            "<employeeId>EMPPROD</employeeId>"+ 
1008                                            "<employeePhoneNumber></employeePhoneNumber>"+ 
1009                                            "<locationCode>" + locationCode + "</locationCode>"+ 
1010                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
1011                                            "<originatingBranchId></originatingBranchId>"+ 
1012                                            "<name>" + 
1013                                                "<first>${bFName!'0'}</first>" + 
1014                                                "<last>${bLName!'0'}</last>" + 
1015                                            "</name>"+ 
1016                                            "<phone>"+ 
1017                                                "<areaCode>" + areaCode + "</areaCode>"+  
1018                                                "<exchange>" + exchangeCode + "</exchange>"+ 
1019                                                "<number>" + num + "</number>"+  
1020                                            "</phone>"+  
1021                                        "</bankerInformation>"+  
1022                                        "<referral>" +  
1023                                            "<divisionNumber></divisionNumber>" +       
1024                                            "<partnerLocationID>" + locationCode + "</partnerLocationID>" +                          
1025                                            "<referralId>EMPPROD</referralId>" + 
1026                                        "</referral>" +  
1027                                    "</applicationData>"+  
1028                                "</prefillData>";                             
1029                        } else { 
1030                            xmlData = '<?xml version="1.0"?>'+ 
1031                                "<prefillData>"+  
1032                                    "<versionNumber>1.0</versionNumber>"+  
1033                                    "<applicationData>"+  
1034                                        "<bankerInformation>"+  
1035                                            "<locationCode>" + locationCode + "</locationCode>"+ 
1036                                            "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
1037                                            "<employeeID>${boeid!0}</employeeID>"+ 
1038                                            "<name>" + 
1039                                                "<first>${bFName!'0'}</first>" + 
1040                                                "<last>${bLName!'0'}</last>" + 
1041                                            "</name>"+ 
1042                                            "<phone>"+ 
1043                                                "<areaCode>"+areaCode+"</areaCode>"+  
1044                                                "<exchange>"+exchangeCode+"</exchange>"+ 
1045                                                "<number>"+num+"</number>"+  
1046                                            "</phone>"+  
1047                                        "</bankerInformation>"+  
1048                                    "</applicationData>"+  
1049                                "</prefillData>" 
1050
1051                        console.log("useprcaValue---->"+${useprcaValue}) 
1052						if('${useprcaValue}' =='1'){ 
1053                          if('${isEmployee?string("yes", "no")}' == "yes"){   						 
1054							var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}"; 
1055							var firstName = "${fName!'0'}".trim(); 
1056							var lastName = "${lName!'0'}".trim(); 
1057							var fullName = employeeFullName.trim();  
1058								 
1059							if (fullName.length <= 20) { 
1060								employeeFullName = fullName;  
1061							} else if (firstName.length + 1 + lastName.length <= 20) { 
1062								employeeFullName = firstName.charAt(0) + ' ' + lastName;  
1063							} else { 
1064								employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 19);  
1065							}							 
1066							 var applicationJsonData = { 
1067												  "prefillData": { 
1068													"versionNumber": "1.0", 
1069													"applicationData": { 
1070													  "bankerInformation": { 
1071														"locationCode": locationCode, 
1072														"originatingBranchId": "${bName!'0'}", 
1073														"employeeId": "EMPPROD", 
1074														"employeeFullName": "Employee Product", 
1075														"employeePhoneNumber": phoneNum 
1076
1077
1078
1079												}; 
1080                            }else{ 
1081							var employeeFullName = "${fName!'0'}" + ' ' + "${lName!'0'}"; 
1082							var firstName = "${fName!'0'}".trim(); 
1083							var lastName = "${lName!'0'}".trim(); 
1084							var fullName = employeeFullName.trim();  
1085								 
1086							if (fullName.length <= 20) { 
1087								employeeFullName = fullName;  
1088							} else if (firstName.length + 1 + lastName.length <= 20) { 
1089								employeeFullName = firstName.charAt(0) + ' ' + lastName;  
1090							} else { 
1091								employeeFullName = firstName.charAt(0) + ' ' + lastName.substring(0, 19);  
1092							}							 
1093							 var applicationJsonData = { 
1094												  "prefillData": { 
1095													"versionNumber": "1.0", 
1096													"applicationData": { 
1097													  "bankerInformation": { 
1098														"locationCode": locationCode, 
1099														"originatingBranchId": "${bName!'0'}", 
1100														"employeeId": "${boeid!0}", 
1101														"employeeFullName": employeeFullName, 
1102														"employeePhoneNumber": phoneNum 
1103
1104
1105
1106												}; 
1107
1108							var jsonData = JSON.stringify(applicationJsonData); 
1109							$(this).children(".appDataBAA").val(jsonData); 
1110						}else{ 
1111						  $(this).children(".appDataBAA").val(xmlData); 
1112
1113                         
1114                        var buttonName = $(this).find(".apply-now-button").data("button-name"); 
1115                        var productName = $(this).find(".apply-now-button").data("product-name"); 
1116                        /* SiteCatalyst  onClick tracking */ 
1117                        reportingData.apply_button = buttonName; 
1118                        reportingData.product = productName; 
1119 
1120                        if (window.publisherFW) {                            
1121                            window.publisherFW.publishEvent("onClick", reportingData); 
1122
1123                        var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}'; 
1124                            /* CRC service call */ 
1125                            Liferay.Service( 
1126                                '/crc-utilities-portlet#crcremote/make-call', 
1127
1128                                    storedProcedure: 'crcDDCTextApplyLog', 
1129                                    parameters: paramString 
1130                                }, 
1131                                function(obj){                                   
1132
1133                            ); 
1134 
1135                        this.submit();                   
1136                    });                                                                                   
1137                }); 
1138                function resizeImg(img) { 
1139                    img.addEventListener("load", function() { 
1140                        var cardImgWidth = img.width; 
1141                        var cardImgHeight = img.height; 
1142                        if(cardImgWidth > cardImgHeight) { 
1143                            img.style.width = "285px"; 
1144                        } else { 
1145                            img.style.width = "150px"; 
1146
1147                    }); 
1148
1149            </script>                    
1150                 
1151        </#if>  
1152    </#if> 
1153</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411744" at line 5, column 17]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign bCode = qstringmap["bankercod...  [in template "10154#10192#153411744" at line 5, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4 
5<#assign bCode= qstringmap["bankercode"]?first> 
6<#assign bCode = htmlUtil.escape(bCode)> 
7<#assign bCode = htmlUtil.escapeJS(bCode)> 
8 
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
10<#list bData as b>      
11    <#assign lc = b.locationcode > 
12    <#assign rLC = b.reallocationcode > 
13    <#assign mappedLC = b.mappedLocationCode > 
14</#list>  
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
16    <#assign ameriprise = true> 
17<#else> 
18    <#assign ameriprise = false> 
19</#if> 
20<#if mappedLC?has_content && !ameriprise> 
21    <#assign lc = mappedLC > 
22</#if> 
23 
24 
25<#if lc?has_content> 
26    <#assign prefix = "00000" > 
27    <#assign lcWithPrefix = prefix + lc > 
28    <#assign withPrefixLength = lcWithPrefix?length > 
29    <#assign startHere = withPrefixLength - 5> 
30    <#assign lc = lcWithPrefix?substring(startHere)> 
31    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
32    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
33 
34    <#assign clientProfile = clientProfileList?first>  
35    <#assign partnerName=clientProfile.getMarketingNameLong()> 
36 
37    <#assign pbu = clientProfile.getPbu()> 
38    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
39    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
40    <#assign isEmployee = false> 
41 
42    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
43    <#if fiData?first?has_content> 
44        <#assign fi = fiData?first> 
45        <#if fi.projectType == "emp"> 
46            <#assign isEmployee = true> 
47        </#if> 
48    </#if> 
49 
50 
51    <#if (fiCardsData?size > 0) > 
52        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
53     
54        <#if (cardProvider?size > 0)> 
55            <#-- This will be V for visa or M for mastercard. --> 
56            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
57        <#else> 
58            <script> 
59                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
60            </script> 
61        </#if> 
62 
63        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
64            <div class="disclaimer" > 
65                <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
66                    ${employeeDisclaimersVisa.getData()} 
67                <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
68                    ${employeeDisclaimersMasterCard.getData()}> 
69                <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
70                    ${disclaimersVisa.getData()} 
71                <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
72                    ${disclaimersMasterCard.getData()} 
73                </#if> 
74            </div> 
75        </div> 
76    </#if> 
77<#else> 
78    <script> 
79        console.log("No lc for disclaimer"); 
80    </script> 
81</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411744" at line 5, column 17]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign bCode = qstringmap["bankercod...  [in template "10154#10192#153411744" at line 5, column 1]
----
1<#assign url = themeDisplay.getURLCurrent() > 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4 
5<#assign bCode= qstringmap["bankercode"]?first> 
6<#assign bCode = htmlUtil.escape(bCode)> 
7<#assign bCode = htmlUtil.escapeJS(bCode)> 
8 
9<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
10<#list bData as b>      
11    <#assign lc = b.locationcode > 
12    <#assign rLC = b.reallocationcode > 
13    <#assign mappedLC = b.mappedLocationCode > 
14</#list>  
15<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
16    <#assign ameriprise = true> 
17<#else> 
18    <#assign ameriprise = false> 
19</#if> 
20<#if mappedLC?has_content && !ameriprise> 
21    <#assign lc = mappedLC > 
22</#if> 
23 
24 
25<#if lc?has_content> 
26    <#assign prefix = "00000" > 
27    <#assign lcWithPrefix = prefix + lc > 
28    <#assign withPrefixLength = lcWithPrefix?length > 
29    <#assign startHere = withPrefixLength - 5> 
30    <#assign lc = lcWithPrefix?substring(startHere)> 
31    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
32    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
33 
34    <#assign clientProfile = clientProfileList?first>  
35    <#assign partnerName=clientProfile.getMarketingNameLong()> 
36 
37    <#assign pbu = clientProfile.getPbu()> 
38    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
39    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
40    <#assign isEmployee = false> 
41 
42    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
43    <#if fiData?first?has_content> 
44        <#assign fi = fiData?first> 
45        <#if fi.projectType == "emp"> 
46            <#assign isEmployee = true> 
47        </#if> 
48    </#if> 
49 
50 
51    <#if (fiCardsData?size > 0) > 
52        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
53     
54        <#if (cardProvider?size > 0)> 
55            <#-- This will be V for visa or M for mastercard. --> 
56            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
57        <#else> 
58            <script> 
59                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
60            </script> 
61        </#if> 
62 
63        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
64            <div class="disclaimer" > 
65                <#if isEmployee && employeeDisclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
66                    ${employeeDisclaimersVisa.getData()} 
67                <#elseif isEmployee && employeeDisclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
68                    ${employeeDisclaimersMasterCard.getData()}> 
69                <#elseif disclaimersVisa?has_content && cardProviderAbbreviated?contains("V")> 
70                    ${disclaimersVisa.getData()} 
71                <#elseif disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M") > 
72                    ${disclaimersMasterCard.getData()} 
73                </#if> 
74            </div> 
75        </div> 
76    </#if> 
77<#else> 
78    <script> 
79        console.log("No lc for disclaimer"); 
80    </script> 
81</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#153411747" at line 8, column 17]

----
Tip: It's the final [] step that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign bCode = qstringmap["bankercod...  [in template "10154#10192#153411747" at line 8, column 1]
----
1<#assign aDateTime = .now> 
2<#assign currentYear = aDateTime?string.yyyy> 
3<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
4<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
5<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
6<#assign url404 = '/error/404.html'> 
7 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetail','0&'+bCode)> 
13<#list bData as b>      
14    <#assign lc = b.locationcode > 
15    <#assign rLC = b.reallocationcode > 
16    <#assign mappedLC = b.mappedLocationCode > 
17</#list>  
18 
19<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
20    <#assign ameriprise = true> 
21<#else> 
22    <#assign ameriprise = false> 
23</#if> 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#if lc?has_content> 
29 
30    <#assign prefix = "00000" > 
31    <#assign lcWithPrefix = prefix + lc > 
32    <#assign withPrefixLength = lcWithPrefix?length > 
33    <#assign startHere = withPrefixLength - 5> 
34    <#assign lc = lcWithPrefix?substring(startHere)> 
35<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
36    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
37 
38    <#assign clientProfile = clientProfileList?first> 
39    <#assign pbu = clientProfile.getPbu()> 
40    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>   
41    <#assign partnerName=clientProfile.getMarketingNameLong()> 
42    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
43    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
44    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
45    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
46        <#-- add protocal if missing  --> 
47        <#assign partnerUrl = 'https://' + partnerUrl> 
48    </#if> 
49    <footer class="footer bg-color-black text-color-white"> 
50        ${footerContent.getData()} 
51    </footer> 
52 
53    <!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
54        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
55        <style> 
56            #opt-out-button, 
57            .modal__btn.learn-more { 
58                background: #0C2074; 
59                border: 1px solid #0C2074; 
60                color: white; 
61                text-transform: uppercase; 
62                text-decoration: none; 
63                font-size: 16px; 
64                padding: 0.5rem 2rem; 
65                display: inline-block; 
66                border-radius: 0; 
67
68            #opt-out-button:hover, 
69            .modal__btn.learn-more:hover { 
70                color: white; 
71                border-color: #2C76AF !important; 
72                background-color: #2C76AF !important; 
73
74            .modal__btn.learn-more { 
75                background: white; 
76                border: 1px solid #0C2074; 
77                color: #0C2074; 
78
79            #opt-out-button[disabled="true"] { 
80                background-color: rgba(0,0,0,.15); 
81                color: rgba(0,0,0,.45); 
82                border-color: rgba(0,0,0,.25); 
83
84            #opt-out-button:hover[disabled="true"] { 
85                background-color: rgba(0,0,0,.15) !important; 
86                color: rgba(0,0,0,.45) !important; 
87                border-color: rgba(0,0,0,.25) !important; 
88
89            #opt-out-button:focus { 
90                outline-style: solid; 
91                outline-color: white; 
92                outline-offset: -3px; 
93                outline-width: 1px; 
94
95            .opt-out-link svg { 
96                width: 30px; 
97                height: 14px; 
98                width: auto; 
99                vertical-align: middle; 
100
101            .modal__overlay { 
102                position: fixed; 
103                top: 0; 
104                left: 0; 
105                right: 0; 
106                bottom: 0; 
107                background: rgba(0,0,0,0.6); 
108                display: flex; 
109                justify-content: center; 
110                align-items: center; 
111
112 
113            .modal__container { 
114                background-color: #fff; 
115                padding: 30px; 
116                max-width: 500px; 
117                max-height: 100vh; 
118                border-radius: 4px; 
119                overflow-y: auto; 
120                box-sizing: border-box; 
121
122 
123            .modal__header { 
124                display: flex; 
125                justify-content: space-between; 
126                align-items: center; 
127
128 
129            .modal__title { 
130                margin-top: 0; 
131                margin-bottom: 0; 
132                font-weight: 600; 
133                font-size: 20px; 
134                line-height: 1.25; 
135                color: #00449e; 
136                box-sizing: border-box; 
137
138 
139            .modal__close { 
140                background: transparent; 
141                border: 1px solid white; 
142                padding: 4px 8px; 
143
144            .modal__close:hover { 
145                border: 1px solid black; 
146
147 
148            .modal__header .modal__close:before { content: "\2715"; } 
149 
150            .modal__content { 
151                margin-top: 2rem; 
152                margin-bottom: 2rem; 
153                line-height: 1.5; 
154
155 
156            @keyframes mmfadeIn { 
157                from { opacity: 0; } 
158                to { opacity: 1; } 
159
160 
161            @keyframes mmfadeOut { 
162                from { opacity: 1; } 
163                to { opacity: 0; } 
164
165 
166            @keyframes mmslideIn { 
167                from { transform: translateY(15%); } 
168                to { transform: translateY(0); } 
169
170 
171            @keyframes mmslideOut { 
172                from { transform: translateY(0); } 
173                to { transform: translateY(-10%); } 
174
175 
176            .micromodal-slide { 
177                display: none; 
178
179 
180            .micromodal-slide.is-open { 
181                display: block; 
182
183 
184            .micromodal-slide[aria-hidden="false"] .modal__overlay { 
185                animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
186
187 
188            .micromodal-slide[aria-hidden="false"] .modal__container { 
189                animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
190
191 
192            .micromodal-slide[aria-hidden="true"] .modal__overlay { 
193                animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
194
195 
196            .micromodal-slide[aria-hidden="true"] .modal__container { 
197                animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
198
199 
200            .micromodal-slide .modal__container, 
201            .micromodal-slide .modal__overlay { 
202                will-change: transform; 
203
204        </style> 
205 
206        <div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
207        <div class="modal__overlay" tabindex="-1" data-micromodal-close> 
208            <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
209            <header class="modal__header"> 
210                <h2 class="modal__title" id="modal-1-title"> 
211                Your California privacy choices 
212                </h2> 
213                <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
214            </header> 
215            <div class="modal__content" id="modal-1-content"> 
216                <div id="message-no-cookie"> 
217                    <p> 
218                    We use technologies, such as cookies, that gather information on our website. That information is used for a variety of purposes, such as to understand how visitors interact with our websites, or to serve advertisements on our websites or on other websites. The use of technologies, such as cookies, constitutes a ‘share’ or ‘sale’ of personal information under the California Privacy Rights Act. You can stop the use of certain third-party tracking technologies that are not considered our service providers by clicking on “Opt-Out” below or by broadcasting the global privacy control signal.</p> 
219                     
220        <p>&nbsp;</p> 
221 
222        <p>Note that due to technological limitations, if you visit our website from a different computer or device, or clear cookies on your browser that store your preferences, you will need to return to this screen to opt-out and/or rebroadcast the signal. You can find a description of the types of tracking technologies, and your options with respect to those technologies, by clicking “Learn more” below.</p> 
223            </div> 
224            <div id="message-with-cookie"> 
225                <p>You have successfully opted-out.</p> 
226            </div> 
227            </div> 
228            <div class="modal__footer"> 
229                <a href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a> 
230                <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
231            </div> 
232            </div> 
233        </div> 
234        </div> 
235    <!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
236    <script> 
237        const fdicNode = document.querySelector('.footer .fdic');                          
238    </script> 
239    <script> 
240        const copyrightNode = document.querySelector('.footer .copyright'); 
241        if (copyrightNode) { 
242            copyrightNode.innerHTML = '<sup>©</sup> Elan Financial Services ' + ${currentYear}; 
243
244 
245    </script> 
246    <#if url?contains("11t1m")> 
247        <script>        
248            copyrightNode.classList.add("ecdma-footer-client-name-copyright"); 
249            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
250        </script> 
251    <#else> 
252        <script> 
253            copyrightNode.classList.add("ecdma-footer-client-name-copyright"); 
254            fdicNode.innerHTML='<a class="text-color-white" href="https://login.elancreditcard.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
255            var newNode = document.createElement("div");  
256            newNode.classList.add("member-agreement"); 
257            newNode.innerHTML='<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!0}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>'; 
258            var parent = fdicNode.parentNode; 
259            parent.insertBefore(newNode, fdicNode); 
260        </script> 
261    </#if> 
262 
263    <#if partnerUrl?has_content> 
264        <script> 
265            document.querySelector('.copyright .homelink').innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>"; 
266        </script> 
267    </#if> 
268 
269    <script> 
270        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
271        fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link text-color-white" data-micromodal-trigger="modal-1">Your California privacy choices <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve"><path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#fff"/><path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" fill-rule="evenodd" clip-rule="evenodd" fill="#06f"/><path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" fill="#fff"/><path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" fill="#06f"/></svg></a></div>'); 
272        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
273    </script> 
274    <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
275 
276    <script> 
277        window.getCookieDomain = function() { 
278            var hostname = window.location.hostname.split("."); 
279            return hostname && hostname.slice(hostname.length - 2).join("."); 
280
281        window.setToOptOut = function() { 
282            if (window.getCookie('privacy_optout')) { 
283                    document.getElementById('message-no-cookie').style.display = 'none'; 
284                    document.getElementById('message-with-cookie').style.display = 'block'; 
285                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
286                } else { 
287                    document.getElementById('message-no-cookie').style.display = 'block'; 
288                    document.getElementById('message-with-cookie').style.display = 'none'; 
289
290
291        window.getCookie = function(name) { 
292            var value = '; ' + document.cookie; 
293            var parts = value.split('; ' + name + '='); 
294            if (parts.length === 2) return parts.pop().split(';').shift(); 
295
296        window.californiaOptOut = function() { 
297            if (!window.getCookie('privacy_optout')) { 
298                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
299                try { 
300                if (window.CustomEvent) { 
301                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
302                } else { 
303                    var privacyOptoutEvent = document.createEvent('Event'); 
304                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
305                    window.dispatchEvent(privacyOptoutEvent); 
306
307                window.setToOptOut(); 
308                } catch (err) { 
309                console.error(err); 
310
311
312
313        MicroModal.init({ 
314            onShow: window.setToOptOut 
315        }); 
316        AUI().ready(function() { 
317            // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
318            const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
319            if(isBrowserGpcOptOut === true) { 
320            window.californiaOptOut(); 
321
322        }); 
323    </script> 
324    <!-- END CALIFORNIA OPT-OUT MODAL LOGIC --> 
325 
326</#if>