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