An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5883698" 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 "10153#10191#5883698" at line 8, 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 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','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<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
19    <#assign ameriprise = true> 
20<#else> 
21    <#assign ameriprise = false> 
22</#if> 
23 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
29<#if fiData?first?has_content> 
30    <#assign fi = fiData?first> 
31    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
32        <#assign subbu_special = fi.offerId> 
33    </#if> 
34</#if> 
35 
36 
37<#if lc?has_content> 
38    <#assign prefix = "00000" > 
39    <#assign lcWithPrefix = prefix + lc> 
40    <#assign withPrefixLength = lcWithPrefix?length > 
41    <#assign startHere = withPrefixLength - 5> 
42    <#assign lc = lcWithPrefix?substring(startHere)> 
43    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
44    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
45 
46    <#assign clientProfile = clientProfileList?first> 
47    <#assign partnerName = clientProfile.getMarketingNameLong()> 
48    <#assign pbu = clientProfile.getPbu()> 
49    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
50    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
51    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
52    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
53    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
54        <#assign partnerUrl = 'https://' + partnerUrl> 
55    </#if> 
56 
57    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
58    <#if clientdataList?has_content > 
59        <#assign clientdata = clientdataList?first > 
60    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
61		<#assign backgroundImage = clientdata["backgroundImage"] > 
62		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
63		<#assign AprMin = clientdata["AprMin"] > 
64		<#assign AprMax = clientdata["AprMax"] > 
65		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
66		<#assign BillingCycles = clientdata["BillingCycles"] > 
67		<#assign textHexColor = clientdata["textHexColor"] > 
68		<#assign linkHexColor = clientdata["linkHexColor"] > 
69		<#assign hoverColor = clientdata["hoverColor"] > 
70		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
71		<#assign transparency = clientdata["transparency"] > 
72		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
73		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
74		<#assign businessTransparency = clientdata["businessTransparency"] > 
75		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
76		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
77	</#if> --> 
78 
79    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
80    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
81    <script> 
82        console.log('logo url', '${cdnLogoUrl}${logoFileName}'); 
83    </script> 
84    <#if pbu == "0864054"> 
85        <#assign override = "berkshire"> 
86    <#else> 
87        <#assign override = " "> 
88    </#if> 
89<#--  this one should be delete for prod  --> 
90 
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com"> 
92<#assign logoFileName = pbu + "-" + subbu + ".png">--> 
93 
94    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
95    <#if (subbu_special?has_content)> 
96        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)> 
97        <script> 
98            console.log('new subbu', '${subbu_special!''}'); 
99        </script> 
100    <#else> 
101        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
102    </#if> 
103    <#assign temp = []> 
104    <#assign consumerCards = []> 
105    <#assign businessCards = []> 
106    <#assign offerTypeList = []> 
107    <#assign index = 0> 
108    <#assign ameriprise_cards= []> 
109    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
110    <#assign businessOfferTypes =['128', '121', '144', '143']> 
111    <#list fiCardsData as fib> 
112        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
113            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
114            <#assign temp = temp + fiCardsData[index..index]> 
115            <#if ameriprise> 
116                <#if (fib.offerType == "101" || fib.offerType == "103")> 
117                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
118                </#if> 
119            <#else> 
120                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
121                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
122                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
123                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
124                </#if> 
125            </#if> 
126        </#if> 
127        <#assign index = index + 1> 
128 
129    </#list> 
130    <#assign fiCardsData = temp> 
131    <#if ameriprise> 
132        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
133    </#if> 
134 
135    <#if (fiCardsData?size > 0)> 
136        <#if (subbu_special?has_content)> 
137            <#assign lc_used = fiCardsData?first.WebLocationCode> 
138        <#else> 
139            <#if ameriprise> 
140                <#assign lc_used = mappedLC> 
141            <#else> 
142                <#assign lc_used = lc> 
143            </#if> 
144        </#if> 
145        <#assign offerId = ""> 
146        <#assign sourceCode = ""> 
147        <#assign cardArtImage = ""> 
148        <#assign productUrl = ""> 
149        <#assign product = ""> 
150        <#assign preparerType = "customer"> 
151        <#assign apr = ""> 
152        <#assign cardIndex = 0> 
153        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
154            <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))> 
155                <#list consumerCards as card> 
156                    <#if (card.offerType=="101" || card.offerType=="103") > 
157                        <#assign offerId = card.offerId> 
158                        <#assign sourceCode = card.sourceCode> 
159                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
160                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
161 
162                        <#assign productUrl="consumer-edr2112"> 
163                        <#assign product="Everyday Rewards+"> 
164                        <#assign cardIndex = 1> 
165 
166                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
167                        <#if (scrapedData?size > 0)> 
168                            <#list scrapedData as sItem> 
169                                <script> 
170                                    console.log("scrapped item", "${sItem.scrapedLabel}"); 
171                                </script> 
172                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
173                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
174                                    <#break> 
175                                </#if> 
176                            </#list> 
177                            <script> 
178                                $(document).ready(function () { 
179                                    var aprText = "${apr}"; 
180                                    if (aprText) { 
181                                        console.log("apr: " + aprText); 
182                                        try { 
183                                            $(".apr-full-text").html(aprText); 
184                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
185                                            var billing_cycle = matches[1]; 
186                                            var apr_min = apr_min = matches[2]; 
187                                            var apr_max = apr_max = matches[3]; 
188                                            if (billing_cycle) { 
189                                                $(".scraped-billing-cycle").html(billing_cycle); 
190
191                                            if (apr_min) { 
192                                                $(".scraped-apr-min").html(apr_min); 
193
194                                            if (apr_max) { 
195                                                $('.scraped-apr-max').html(apr_max); 
196
197 
198                                        } catch (e) { 
199                                            console.log(e); 
200
201                                    } else { 
202                                        $(".apr-full-text").html(''); 
203
204                                }); 
205                            </script> 
206                        </#if> 
207                        <script> 
208                            var product = "${product}"; 
209                            var partnerName = "${partnerName}"; 
210                            $(document).ready(function () { 
211                                $(".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>'); 
212                            }); 
213                        </script> 
214                    </#if> 
215                </#list> 
216            <#else> 
217                <#assign displayedCard = consumerCards[0]> 
218                <#assign offerId = displayedCard.offerId> 
219                <#assign sourceCode = displayedCard.sourceCode> 
220                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
221                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
222                <#if ameriprise> 
223                    <#if (displayedCard.offerType == "101")> 
224                        <#assign productUrl="ameriprise-premier-visa-signature"> 
225                        <#assign product="Premier Visa Signature"> 
226                        <#assign cardIndex = 0> 
227                    <#elseif (displayedCard.offerType == "103")> 
228                        <#assign productUrl = "ameriprise-visa-signature"> 
229                        <#assign product="Visa Signature"> 
230                        <#assign cardIndex = 1> 
231                    </#if> 
232                <#else> 
233                    <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
234                        <#assign productUrl = "consumer-platinum2103"> 
235                        <#assign product="Platinum"> 
236                        <#assign cardIndex = 4> 
237                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
238                        <#if (scrapedData?size > 0)> 
239                            <#list scrapedData as sItem> 
240                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
241                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
242                                    <#break> 
243                                </#if> 
244                            </#list> 
245                            <script> 
246                                $(document).ready(function () { 
247                                    var aprText = "${apr}"; 
248                                    if (aprText) { 
249                                        console.log("apr:" + aprText); 
250                                        try { 
251                                            $(".apr-full-text").html(aprText); 
252                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
253                                            var billing_cycle = matches[1]; 
254                                            var apr_min = apr_min = matches[2]; 
255                                            var apr_max = apr_max = matches[3]; 
256                                            if (billing_cycle) { 
257                                                $(".scraped-billing-cycle").html(billing_cycle); 
258
259                                            if (apr_min) { 
260                                                $(".scraped-apr-min").html(apr_min); 
261
262                                            if (apr_max) { 
263                                                $('.scraped-apr-max').html(apr_max); 
264
265 
266                                        } catch (e) { 
267                                            console.log(e); 
268
269                                    } else { 
270                                        $(".apr-full-text").html(''); 
271
272                                }); 
273                            </script> 
274                        </#if> 
275                    <#elseif (displayedCard.offerType == "104")> 
276                        <#assign productUrl = "max-cash"> 
277                        <#assign product="Max Cash Preferred"> 
278                        <#assign cardIndex = 0> 
279                    <#elseif (displayedCard.offerType == "141")> 
280                        <#assign productUrl = "college-real-rewards"> 
281                        <#assign product="College Real Rewards"> 
282                        <#assign cardIndex = 2> 
283                    <#elseif (displayedCard.offerType == "115")> 
284                        <#assign productUrl = "secured"> 
285                        <#assign product="Secured"> 
286                        <#assign cardIndex = 3> 
287                    </#if> 
288                </#if> 
289            </#if> 
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign offerId = card.offerId> 
296                        <#assign sourceCode = card.sourceCode> 
297                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
298                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
299                        <#assign productUrl = "business-cash-preferred"> 
300                        <#assign product="Business Cash Preferred"> 
301                        <#assign cardIndex = 0> 
302                    </#if> 
303                </#list> 
304            <#else> 
305                <#assign displayedCard = businessCards[0]> 
306                <#assign offerId = displayedCard.offerId> 
307                <#assign sourceCode = displayedCard.sourceCode> 
308                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
309                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
310 
311                <#if (displayedCard.offerType=="143")> 
312                    <#assign productUrl="business-real-rewards"> 
313                    <#assign product="Business Real Rewards"> 
314                    <#assign cardIndex = 2> 
315                <#elseif (displayedCard.offerType=="144")> 
316                    <#assign productUrl = "smart-business-rewards"> 
317                    <#assign product="Smart Business Rewards"> 
318                    <#assign cardIndex = 1> 
319                <#elseif (displayedCard.offerType=="121")> 
320                    <#assign productUrl = "business-platinum2103"> 
321                    <#assign product="Business Card"> 
322                    <#assign cardIndex = 3> 
323                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ 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?replace("(\n|\r\n|\r)+", " ","r")> 
328                                <#break> 
329                            </#if> 
330                        </#list> 
331                        <script> 
332                            console.log("apr"); 
333                            $(document).ready(function () { 
334                                var aprText = "${apr}"; 
335                                if (aprText) { 
336                                    console.log("apr: " + aprText); 
337                                    try { 
338                                        $(".apr-full-text").html(aprText); 
339                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
340                                        var billing_cycle = matches[1]; 
341                                        var apr_min = apr_min = matches[2]; 
342                                        var apr_max = apr_max = matches[3]; 
343                                        if (billing_cycle) { 
344                                            $(".scraped-billing-cycle").html(billing_cycle); 
345
346                                        if (apr_min) { 
347                                            $(".scraped-apr-min").html(apr_min); 
348
349                                        if (apr_max) { 
350                                            $('.scraped-apr-max').html(apr_max); 
351
352 
353                                    } catch (e) { 
354                                        console.log(e); 
355
356                                } else { 
357                                    $(".apr-full-text").html(''); 
358
359                            }); 
360                        </script> 
361                    </#if> 
362                </#if> 
363            </#if> 
364        </#if> 
365        <#if product != ""> 
366            <#if ameriprise> 
367                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
368                <#assign rollover_text =  partnerName + " " + product + " Card"> 
369            <#else> 
370                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
371                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
372                <#assign card_text = product + " Card"> 
373            </#if> 
374        </#if> 
375        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
376            <div class="hero-main"> 
377                <div class="hero-main-logo"> 
378                    <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"> 
379                </div> 
380                <div class="hero-main-container"> 
381                    <div class="hero-main-offer bg-color-white"> 
382                        <div class="offer-detail"> 
383 
384                            <div class="offer-detail-cardArt cardArtImg"> 
385                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
386                                <p>${card_text!''}</p> 
387                            </div> 
388                            <div class="offer-detail-text text-color-default hide-desktop"> 
389                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
390                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
391                            </div> 
392 
393                            <#if ameriprise> 
394                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
395                            <#else> 
396                                <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop"> 
397                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
398                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
399                                    <button 
400                                            type="submit" 
401                                            data-button-name="cta-button-top" 
402                                            data-product-name="${productUrl!''}" 
403                                            class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
404                                            disabled 
405
406                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
407                                    </button> 
408                                </form> 
409                            </#if> 
410                        </div> 
411 
412                        <div class="offer-header"> 
413                            <div class="offer-text-top"> 
414                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
415                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
416                            </div> 
417                            <div class="offer-text-bottom hide-mobile"> 
418                                <div class="offer-detail-text text-color-default"> 
419                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
420                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
421                                </div> 
422 
423                                <#if ameriprise> 
424                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
425                                <#else> 
426                                    <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm"> 
427                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
428                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
429                                        <button 
430                                                type="submit" 
431                                                data-button-name="cta-button-top" 
432                                                data-product-name="${productUrl!''}" 
433                                                class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
434                                                disabled 
435
436                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
437                                        </button> 
438                                    </form> 
439                                </#if> 
440                            </div> 
441                        </div> 
442                    </div> 
443                </div> 
444            </div> 
445        </div> 
446 
447    </#if> 
448</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5883698" 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 "10153#10191#5883698" at line 8, 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 
8<#assign bCode= qstringmap["bankercode"]?first> 
9<#assign bCode = htmlUtil.escape(bCode)> 
10<#assign bCode = htmlUtil.escapeJS(bCode)> 
11 
12<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','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<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
19    <#assign ameriprise = true> 
20<#else> 
21    <#assign ameriprise = false> 
22</#if> 
23 
24<#if mappedLC?has_content && !ameriprise> 
25    <#assign lc = mappedLC > 
26</#if> 
27 
28<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
29<#if fiData?first?has_content> 
30    <#assign fi = fiData?first> 
31    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14") || (fi.projectId == "15"))> 
32        <#assign subbu_special = fi.offerId> 
33    </#if> 
34</#if> 
35 
36 
37<#if lc?has_content> 
38    <#assign prefix = "00000" > 
39    <#assign lcWithPrefix = prefix + lc> 
40    <#assign withPrefixLength = lcWithPrefix?length > 
41    <#assign startHere = withPrefixLength - 5> 
42    <#assign lc = lcWithPrefix?substring(startHere)> 
43    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
44    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
45 
46    <#assign clientProfile = clientProfileList?first> 
47    <#assign partnerName = clientProfile.getMarketingNameLong()> 
48    <#assign pbu = clientProfile.getPbu()> 
49    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
50    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
51    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
52    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
53    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
54        <#assign partnerUrl = 'https://' + partnerUrl> 
55    </#if> 
56 
57    <!-- <#assign clientdataList = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
58    <#if clientdataList?has_content > 
59        <#assign clientdata = clientdataList?first > 
60    	<#assign backgroundHexColor = clientdata["backgroundHexColor"] > 
61		<#assign backgroundImage = clientdata["backgroundImage"] > 
62		<#assign buttonHexColor = clientdata["buttonHexColor"] > 
63		<#assign AprMin = clientdata["AprMin"] > 
64		<#assign AprMax = clientdata["AprMax"] > 
65		<#assign cashAdvanceRate = clientdata["cashAdvanceRate"] > 
66		<#assign BillingCycles = clientdata["BillingCycles"] > 
67		<#assign textHexColor = clientdata["textHexColor"] > 
68		<#assign linkHexColor = clientdata["linkHexColor"] > 
69		<#assign hoverColor = clientdata["hoverColor"] > 
70		<#assign secondaryBackgroundImage = clientdata["secondaryBackgroundImage"] > 
71		<#assign transparency = clientdata["transparency"] > 
72		<#assign businessBackgroundImageLarge = clientdata["businessBackgroundImageLarge"] > 
73		<#assign businessBackgroundImageSmall = clientdata["businessBackgroundImageSmall"] > 
74		<#assign businessTransparency = clientdata["businessTransparency"] > 
75		<#assign dmaBackgroundImage = clientdata["dmaBackgroundImage"] > 
76		<#assign secondaryDmaBackgroundImage = clientdata["secondaryDmaBackgroundImage"] > 
77	</#if> --> 
78 
79    <#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
80    <#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
81    <script> 
82        console.log('logo url', '${cdnLogoUrl}${logoFileName}'); 
83    </script> 
84    <#if pbu == "0864054"> 
85        <#assign override = "berkshire"> 
86    <#else> 
87        <#assign override = " "> 
88    </#if> 
89<#--  this one should be delete for prod  --> 
90 
91<#-- <#assign cdnLogoUrl = "https://4f61efb10f32ceb57895-3733e103896f37259213d6ad72acbe68.ssl.cf2.rackcdn.com"> 
92<#assign logoFileName = pbu + "-" + subbu + ".png">--> 
93 
94    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
95    <#if (subbu_special?has_content)> 
96        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)> 
97        <script> 
98            console.log('new subbu', '${subbu_special!''}'); 
99        </script> 
100    <#else> 
101        <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
102    </#if> 
103    <#assign temp = []> 
104    <#assign consumerCards = []> 
105    <#assign businessCards = []> 
106    <#assign offerTypeList = []> 
107    <#assign index = 0> 
108    <#assign ameriprise_cards= []> 
109    <#assign consumerOfferTypes =['101', '108', '109', '104', '138', '154', '141', '147', '115']> 
110    <#assign businessOfferTypes =['128', '121', '144', '143']> 
111    <#list fiCardsData as fib> 
112        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
113            <#assign offerTypeList = offerTypeList + [fib.offerType]> 
114            <#assign temp = temp + fiCardsData[index..index]> 
115            <#if ameriprise> 
116                <#if (fib.offerType == "101" || fib.offerType == "103")> 
117                    <#assign ameriprise_cards= ameriprise_cards + fiCardsData[index..index]> 
118                </#if> 
119            <#else> 
120                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
121                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
122                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
123                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
124                </#if> 
125            </#if> 
126        </#if> 
127        <#assign index = index + 1> 
128 
129    </#list> 
130    <#assign fiCardsData = temp> 
131    <#if ameriprise> 
132        <#assign consumerCards = ameriprise_cards?sort_by("offerType")> 
133    </#if> 
134 
135    <#if (fiCardsData?size > 0)> 
136        <#if (subbu_special?has_content)> 
137            <#assign lc_used = fiCardsData?first.WebLocationCode> 
138        <#else> 
139            <#if ameriprise> 
140                <#assign lc_used = mappedLC> 
141            <#else> 
142                <#assign lc_used = lc> 
143            </#if> 
144        </#if> 
145        <#assign offerId = ""> 
146        <#assign sourceCode = ""> 
147        <#assign cardArtImage = ""> 
148        <#assign productUrl = ""> 
149        <#assign product = ""> 
150        <#assign preparerType = "customer"> 
151        <#assign apr = ""> 
152        <#assign cardIndex = 0> 
153        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
154            <#if (offerTypeList?seq_contains("101") || offerTypeList?seq_contains("103"))> 
155                <#list consumerCards as card> 
156                    <#if (card.offerType=="101" || card.offerType=="103") > 
157                        <#assign offerId = card.offerId> 
158                        <#assign sourceCode = card.sourceCode> 
159                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
160                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
161 
162                        <#assign productUrl="consumer-edr2112"> 
163                        <#assign product="Everyday Rewards+"> 
164                        <#assign cardIndex = 1> 
165 
166                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
167                        <#if (scrapedData?size > 0)> 
168                            <#list scrapedData as sItem> 
169                                <script> 
170                                    console.log("scrapped item", "${sItem.scrapedLabel}"); 
171                                </script> 
172                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
173                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
174                                    <#break> 
175                                </#if> 
176                            </#list> 
177                            <script> 
178                                $(document).ready(function () { 
179                                    var aprText = "${apr}"; 
180                                    if (aprText) { 
181                                        console.log("apr: " + aprText); 
182                                        try { 
183                                            $(".apr-full-text").html(aprText); 
184                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
185                                            var billing_cycle = matches[1]; 
186                                            var apr_min = apr_min = matches[2]; 
187                                            var apr_max = apr_max = matches[3]; 
188                                            if (billing_cycle) { 
189                                                $(".scraped-billing-cycle").html(billing_cycle); 
190
191                                            if (apr_min) { 
192                                                $(".scraped-apr-min").html(apr_min); 
193
194                                            if (apr_max) { 
195                                                $('.scraped-apr-max').html(apr_max); 
196
197 
198                                        } catch (e) { 
199                                            console.log(e); 
200
201                                    } else { 
202                                        $(".apr-full-text").html(''); 
203
204                                }); 
205                            </script> 
206                        </#if> 
207                        <script> 
208                            var product = "${product}"; 
209                            var partnerName = "${partnerName}"; 
210                            $(document).ready(function () { 
211                                $(".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>'); 
212                            }); 
213                        </script> 
214                    </#if> 
215                </#list> 
216            <#else> 
217                <#assign displayedCard = consumerCards[0]> 
218                <#assign offerId = displayedCard.offerId> 
219                <#assign sourceCode = displayedCard.sourceCode> 
220                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
221                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
222                <#if ameriprise> 
223                    <#if (displayedCard.offerType == "101")> 
224                        <#assign productUrl="ameriprise-premier-visa-signature"> 
225                        <#assign product="Premier Visa Signature"> 
226                        <#assign cardIndex = 0> 
227                    <#elseif (displayedCard.offerType == "103")> 
228                        <#assign productUrl = "ameriprise-visa-signature"> 
229                        <#assign product="Visa Signature"> 
230                        <#assign cardIndex = 1> 
231                    </#if> 
232                <#else> 
233                    <#if (displayedCard.offerType == "108" || displayedCard.offerType == "109")> 
234                        <#assign productUrl = "consumer-platinum2103"> 
235                        <#assign product="Platinum"> 
236                        <#assign cardIndex = 4> 
237                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ sourceCode)> 
238                        <#if (scrapedData?size > 0)> 
239                            <#list scrapedData as sItem> 
240                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
241                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
242                                    <#break> 
243                                </#if> 
244                            </#list> 
245                            <script> 
246                                $(document).ready(function () { 
247                                    var aprText = "${apr}"; 
248                                    if (aprText) { 
249                                        console.log("apr:" + aprText); 
250                                        try { 
251                                            $(".apr-full-text").html(aprText); 
252                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
253                                            var billing_cycle = matches[1]; 
254                                            var apr_min = apr_min = matches[2]; 
255                                            var apr_max = apr_max = matches[3]; 
256                                            if (billing_cycle) { 
257                                                $(".scraped-billing-cycle").html(billing_cycle); 
258
259                                            if (apr_min) { 
260                                                $(".scraped-apr-min").html(apr_min); 
261
262                                            if (apr_max) { 
263                                                $('.scraped-apr-max').html(apr_max); 
264
265 
266                                        } catch (e) { 
267                                            console.log(e); 
268
269                                    } else { 
270                                        $(".apr-full-text").html(''); 
271
272                                }); 
273                            </script> 
274                        </#if> 
275                    <#elseif (displayedCard.offerType == "104")> 
276                        <#assign productUrl = "max-cash"> 
277                        <#assign product="Max Cash Preferred"> 
278                        <#assign cardIndex = 0> 
279                    <#elseif (displayedCard.offerType == "141")> 
280                        <#assign productUrl = "college-real-rewards"> 
281                        <#assign product="College Real Rewards"> 
282                        <#assign cardIndex = 2> 
283                    <#elseif (displayedCard.offerType == "115")> 
284                        <#assign productUrl = "secured"> 
285                        <#assign product="Secured"> 
286                        <#assign cardIndex = 3> 
287                    </#if> 
288                </#if> 
289            </#if> 
290        </#if> 
291        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
292            <#if (offerTypeList?seq_contains("128")) > 
293                <#list businessCards as card> 
294                    <#if (card.offerType=="128")> 
295                        <#assign offerId = card.offerId> 
296                        <#assign sourceCode = card.sourceCode> 
297                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
298                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
299                        <#assign productUrl = "business-cash-preferred"> 
300                        <#assign product="Business Cash Preferred"> 
301                        <#assign cardIndex = 0> 
302                    </#if> 
303                </#list> 
304            <#else> 
305                <#assign displayedCard = businessCards[0]> 
306                <#assign offerId = displayedCard.offerId> 
307                <#assign sourceCode = displayedCard.sourceCode> 
308                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
309                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
310 
311                <#if (displayedCard.offerType=="143")> 
312                    <#assign productUrl="business-real-rewards"> 
313                    <#assign product="Business Real Rewards"> 
314                    <#assign cardIndex = 2> 
315                <#elseif (displayedCard.offerType=="144")> 
316                    <#assign productUrl = "smart-business-rewards"> 
317                    <#assign product="Smart Business Rewards"> 
318                    <#assign cardIndex = 1> 
319                <#elseif (displayedCard.offerType=="121")> 
320                    <#assign productUrl = "business-platinum2103"> 
321                    <#assign product="Business Card"> 
322                    <#assign cardIndex = 3> 
323                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&'+ 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?replace("(\n|\r\n|\r)+", " ","r")> 
328                                <#break> 
329                            </#if> 
330                        </#list> 
331                        <script> 
332                            console.log("apr"); 
333                            $(document).ready(function () { 
334                                var aprText = "${apr}"; 
335                                if (aprText) { 
336                                    console.log("apr: " + aprText); 
337                                    try { 
338                                        $(".apr-full-text").html(aprText); 
339                                        var matches= aprText.match(/\d+(\.\d+)?%?/g); 
340                                        var billing_cycle = matches[1]; 
341                                        var apr_min = apr_min = matches[2]; 
342                                        var apr_max = apr_max = matches[3]; 
343                                        if (billing_cycle) { 
344                                            $(".scraped-billing-cycle").html(billing_cycle); 
345
346                                        if (apr_min) { 
347                                            $(".scraped-apr-min").html(apr_min); 
348
349                                        if (apr_max) { 
350                                            $('.scraped-apr-max').html(apr_max); 
351
352 
353                                    } catch (e) { 
354                                        console.log(e); 
355
356                                } else { 
357                                    $(".apr-full-text").html(''); 
358
359                            }); 
360                        </script> 
361                    </#if> 
362                </#if> 
363            </#if> 
364        </#if> 
365        <#if product != ""> 
366            <#if ameriprise> 
367                <#assign card_art_alt =  partnerName + " " + product + " Card"> 
368                <#assign rollover_text =  partnerName + " " + product + " Card"> 
369            <#else> 
370                <#assign card_art_alt = partnerName + " " + product + "  Card"> 
371                <#assign rollover_text =  partnerName + " " + product + " Credit Card"> 
372                <#assign card_text = product + " Card"> 
373            </#if> 
374        </#if> 
375        <div class="jn-hero-container product-${productUrl} tier1-hero-${class.getData()}" title="${rollover_text!''}"> 
376            <div class="hero-main"> 
377                <div class="hero-main-logo"> 
378                    <img src="${cdnLogoUrl!''}/${logoFileName!''}" title="${partnerName!''} Logo" alt="${partnerName!''} Logo"> 
379                </div> 
380                <div class="hero-main-container"> 
381                    <div class="hero-main-offer bg-color-white"> 
382                        <div class="offer-detail"> 
383 
384                            <div class="offer-detail-cardArt cardArtImg"> 
385                                <img src="${cardArtImage!''}" alt="${card_art_alt!''}" srcset="" title="${card_art_alt!''}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
386                                <p>${card_text!''}</p> 
387                            </div> 
388                            <div class="offer-detail-text text-color-default hide-desktop"> 
389                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
390                                ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
391                            </div> 
392 
393                            <#if ameriprise> 
394                                <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
395                            <#else> 
396                                <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm hide-desktop"> 
397                                    <label for="appDataBAAMobile-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
398                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAAMobile-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
399                                    <button 
400                                            type="submit" 
401                                            data-button-name="cta-button-top" 
402                                            data-product-name="${productUrl!''}" 
403                                            class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
404                                            disabled 
405
406                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()} <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
407                                    </button> 
408                                </form> 
409                            </#if> 
410                        </div> 
411 
412                        <div class="offer-header"> 
413                            <div class="offer-text-top"> 
414                                <div class="offer-title">${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()}</div> 
415                                <h1 class="offer-subtitle">${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}</h1> 
416                            </div> 
417                            <div class="offer-text-bottom hide-mobile"> 
418                                <div class="offer-detail-text text-color-default"> 
419                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureTop.getData()} 
420                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeatureBottom.getData()} 
421                                </div> 
422 
423                                <#if ameriprise> 
424                                    <a data-button-name="cta-button-top" title="Learn More about ${partnerName!''} credit cards" class="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> 
425                                <#else> 
426                                    <form action="${oadURL}?locationCode=${lc_used}&offerId=${offerId}&preparerType=${preparerType}&sourceCode=${sourceCode}" method="post" class="BAAForm"> 
427                                        <label for="appDataBAA-${sourceCode}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
428                                        <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${sourceCode}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
429                                        <button 
430                                                type="submit" 
431                                                data-button-name="cta-button-top" 
432                                                data-product-name="${productUrl!''}" 
433                                                class="jn-button apply-button apply-now-button text-bold button-bg-color-custom text-color-white" 
434                                                disabled 
435
436                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card</span> 
437                                        </button> 
438                                    </form> 
439                                </#if> 
440                            </div> 
441                        </div> 
442                    </div> 
443                </div> 
444            </div> 
445        </div> 
446 
447    </#if> 
448</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843849" at line 39, 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 "10153#10191#5843849" at line 39, column 1]
----
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 
9 
10<#assign text_to_apply_source = "vanity url" > 
11<#if qstringmap["sms"]?has_content> 
12    <#assign sms = 1 > 
13    <#assign text_to_apply_source = "sms" > 
14</#if> 
15<#if qstringmap["qrCode"]?has_content> 
16    <#assign text_to_apply_source = "qr code" > 
17</#if> 
18 
19<#if qstringmap["ecid"]?has_content> 
20    <#assign ecidExt = qstringmap["ecid"]?first> 
21    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
22    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
23    <#assign ecidExt = "&ecid=" + ecidExt> 
24    
25 
26    <#assign campaignId = qstringmap["ecid"]?first > 
27    <#assign campaignId  = htmlUtil.escape(campaignId)> 
28    <#assign campaignId  = htmlUtil.escapeJS(campaignId)> 
29<#else> 
30    <#assign ecidExt=""> 
31    <#assign campaignId = "" > 
32</#if> 
33<#--  check bankercode validity  --> 
34<#if oadURL?contains("uat-")> 
35    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
36<#else> 
37    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
38</#if> 
39<#assign bCode= qstringmap["bankercode"]?first> 
40<#assign bCode= htmlUtil.escapeJS(bCode)> 
41<#assign bCode= htmlUtil.escape(bCode)> 
42 
43<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
44<#if fiData?first?has_content> 
45    <#assign fi = fiData?first> 
46    <#if ((fi.projectId == "12") || (fi.projectId == "13") || (fi.projectId == "14"))> 
47        <#assign subbu_special = fi.offerId> 
48    </#if> 
49</#if> 
50 
51<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
52<#list bData as b>      
53    <#assign lc = b.locationcode > 
54    <#assign bName = b.branch > 
55    <#assign bPhone = b.businessphone > 
56    <#assign boeid = b.oeid > 
57    <#assign fName = b.firstname?trim > 
58    <#assign lName = b.lastname?trim > 
59    <#assign rLC = b.reallocationcode > 
60    <#assign mappedLC = b.mappedLocationCode > 
61</#list>  
62 
63<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
64    <#assign ameriprise = true> 
65<#else> 
66    <#assign ameriprise = false> 
67</#if> 
68<#if mappedLC?has_content && !ameriprise> 
69    <#assign lc = mappedLC > 
70</#if> 
71 
72           
73<#if lc?has_content> 
74    <#assign firstNameLength = fName?length > 
75    <#assign lastNameLength = lName?length > 
76    <#if firstNameLength + lastNameLength &gt; 19 > 
77        <#if lastNameLength &gt; 18 > 
78            <#assign bLName = lName?substring(0,18)> 
79        <#else> 
80            <#assign bLName = lName> 
81        </#if> 
82        <#assign maxFirstName = 19 - bLName?length > 
83        <#if firstNameLength &gt; maxFirstName > 
84            <#assign bFName = fName?substring(0,maxFirstName)> 
85        <#else> 
86            <#assign bFName = fName> 
87        </#if> 
88    <#else> 
89        <#assign bFName = fName> 
90        <#assign bLName = lName> 
91    </#if>  
92 
93    <#assign prefix = "00000" > 
94    <#assign lcWithPrefix = prefix + lc > 
95    <#assign withPrefixLength = lcWithPrefix?length > 
96    <#assign startHere = withPrefixLength - 5> 
97    <#assign lc = lcWithPrefix?substring(startHere)>   
98    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
99    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
100    <#if (clientProfileList?first?has_content)> 
101        <#assign clientProfile = clientProfileList?first> 
102        <#assign partnerName = clientProfile.getMarketingNameLong()> 
103        <#assign pbu = clientProfile.getPbu()> 
104        <#assign subbu = clientProfile.getSUBBRANDBUNBR()>          
105        <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!>  
106        <#if (subbu_special?has_content)> 
107            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
108        <#else> 
109            <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
110 
111        </#if> 
112 
113        <#-- Begin: filter cards by sourceCode and offerId and remove duplicated cards--> 
114        <#assign temp = []> 
115        <#assign consumerCards = []> 
116        <#assign businessCards = []>  
117        <#assign offerTypeList = []>  
118        <#assign consumerOfferTypes =['104', '101', '103', '108', '109', '115', '141', '147', '138', '154']> 
119        <#assign businessOfferTypes =['144', '128', '143', '121']>     
120        <#assign index = 0> 
121        <#list fiCardsData as fib> 
122            <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>   
123                <#assign offerTypeList = offerTypeList + [fib.offerType]> 
124                <#assign temp = temp + fiCardsData[index..index]>   
125                <#if consumerOfferTypes?seq_contains(fib.offerType)> 
126                    <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
127                <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
128                    <#assign businessCards = businessCards + fiCardsData[index..index]> 
129                </#if>                 
130            </#if>  
131            <#assign index = index + 1>                
132        </#list>  
133 
134 
135        <#assign fiCardsData = temp> 
136 
137        <#if (fiCardsData?size > 0)>   
138            <#if (subbu_special?has_content)> 
139                <#assign lc_used = fiCardsData?first.WebLocationCode>   
140            <#else> 
141                <#if ameriprise> 
142                    <#assign lc_used = mappedLC>  
143                <#else> 
144                    <#assign lc_used = lc>  
145                </#if> 
146            </#if>  
147        </#if>  
148 
149        <#if (consumerCards?size > 0 || businessCards?size > 0)>  
150         
151            <div class="content-container content-container-main jn-consumer-content" id="product-display"> 
152                <#if ((consumerCards?size > 0) && (businessCards?size > 0))> 
153                    <nav class="jn-primary-nav two-tabs"> 
154                        <ul> 
155                            <li title="${partnerName!''} - Personal products"> 
156                                <a href="#" class="tab-nav active" id="consumerTab"><span>Personal</span></a> 
157                            </li> 
158                            <li title="${partnerName!''} - Business products"> 
159                                <a href="#" class="tab-nav" id="businessTab"><span>Business</span></a> 
160                            </li> 
161                        </ul> 
162                    </nav> 
163                <#else> 
164                    <#if (consumerCards?size > 0)> 
165                        <nav class="jn-primary-nav" title="${partnerName!''} - Personal products"> 
166                            <ul> 
167                                <li> 
168                                    <p class="tab-nav" id="consumerTab"><span>Personal</span></p> 
169                                </li> 
170                            </ul> 
171                        </nav> 
172                    </#if> 
173                    <#if (businessCards?size > 0)> 
174                        <nav class="jn-primary-nav" title="${partnerName!''} - Business products"> 
175                            <ul> 
176                                <li> 
177                                    <p class="tab-nav" id="businessTab"><span>Business</span></p> 
178                                </li> 
179                            </ul> 
180                        </nav> 
181                    </#if> 
182                </#if> 
183                <#if (consumerCards?size > 0)> 
184                    <div class="tab-more-wrapper"> 
185                        <div class="jn-consumer-content-wrapper jn-tab-content active transition-start" data-id="consumerTab" title="${partnerName!''} - Personal products"> 
186                            <#list consumerCards as fib> 
187                                <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png" > 
188                                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg">                         
189                                <#if ameriprise>                                
190                                    <#if (fib.offerType == "101")> 
191                                            <#assign productName = "premier-visa-signature"> 
192                                            <#assign product="Premier Visa Signature"> 
193                                            <#assign cardIndex = 0> 
194                                    <#elseif (fib.offerType == "103")> 
195                                            <#assign productName = "visa-signature"> 
196                                            <#assign product="Visa Signature"> 
197                                            <#assign cardIndex = 1> 
198                                    </#if> 
199                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
200                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
201                                <#else> 
202                                    <#switch fib.offerType> 
203                                        <#case "101"> 
204                                            <#assign productName = "consumer-edr2112"> 
205                                            <#assign product="Everyday Rewards+"> 
206                                            <#assign cardIndex = 0> 
207                                            <#break> 
208                                        <#case "108"> 
209                                            <#assign productName = "consumer-platinum2103"> 
210                                            <#assign product="Platinum"> 
211                                            <#assign cardIndex = 2> 
212                                            <#break> 
213                                        <#case "109"> 
214                                            <#assign productName = "consumer-platinum2103"> 
215                                            <#assign product="Platinum"> 
216                                            <#assign cardIndex = 2> 
217                                            <#break>                                            
218                                        <#case "115"> 
219                                            <#assign productName = "secured"> 
220                                            <#assign product="Secured"> 
221                                            <#assign cardIndex = 5> 
222                                            <#break> 
223                                        <#case "104"> 
224                                            <#assign productName = "max-cash"> 
225                                            <#assign product="Max Cash Preferred"> 
226                                            <#assign cardIndex = 1> 
227                                            <#break> 
228                                        <#case "147"> 
229                                            <#assign productName = "max-cash-secured"> 
230                                            <#assign product="Max Cash Secured"> 
231                                            <#assign cardIndex = 4> 
232                                            <#break> 
233                                        <#case "141"> 
234                                            <#assign productName = "college-real-rewards"> 
235                                            <#assign product="College Real Rewards"> 
236                                            <#assign cardIndex = 3> 
237                                            <#break> 
238                                        <#case "138"> 
239                                            <#assign productName = "travel-rewards-plus"> 
240                                            <#assign product="Travel Rewards+"> 
241                                            <#assign cardIndex = 10> 
242                                            <#break> 
243                                        <#case "154"> 
244                                            <#assign productName = "reserve-rewards-plus"> 
245                                            <#assign product="Reserve Rewards+"> 
246                                            <#assign cardIndex = 11> 
247                                            <#break> 
248                                        <#default> 
249                                    </#switch> 
250 
251                                    <#assign newTag = ""> 
252                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
253                                        <#assign newTag = "with-new-tag"> 
254                                    </#if> 
255                                     
256                                    <#assign titleText = consumerTitle.getSiblings()[cardIndex].Title.getData()> 
257                                    <#assign titleText = titleText?replace('<[^>]+>','','r')> 
258                                     
259 
260                                    <#assign APR=""> 
261                                    <#assign AMF=""> 
262                                    <#assign BAL=""> 
263                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
264                                    <#if (scrapedData?size > 0)> 
265                                        <#list scrapedData as sItem> 
266                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
267                                                <#assign APR = sItem.scrapedValue> 
268                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
269                                                <#assign AMF = sItem.scrapedValue> 
270                                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
271                                                <#assign BAL = sItem.scrapedValue> 
272                                            </#if> 
273                                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
274                                                <#break> 
275                                            </#if> 
276                                        </#list> 
277                                    </#if> 
278                                </#if> 
279                                <#if ameriprise> 
280                                    <#assign rollover_text =  partnerName + " " + product + " " + " Card"> 
281                                <#else> 
282                                    <#assign rollover_text =  partnerName + " " + product + " " + " Credit Card"> 
283                                </#if>                             
284                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${rollover_text!''}"> 
285                                    <div class="tag-container"> 
286                                        <div class="tag-corner"> 
287                                            <div class="tag-label">NEW</div> 
288                                        </div> 
289                                    </div> 
290                                    <div class="consumer-card-heading hide-desktop"> 
291                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
292                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
293                                    </div> 
294                                    <div class="jn-consumer-card-image"> 
295                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
296 
297                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
298                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
299                                        </#if> 
300                                    </div> 
301 
302                                    <div class="jn-consumer-card-info"> 
303                                        <div class="consumer-card-heading hide-mobile"> 
304                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
305                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
306                                        </div> 
307                                        <div class="jn-additional"> 
308                                            <ul class="${fib.offerType}"> 
309                                                <#if !ameriprise>                                            
310                                                    <#if (fib.offerType == "104")> 
311                                                        <li class="${fib.offerType}"> 
312                                                            <p> 
313                                                                <strong>APR for Purchases: </strong> 
314                                                                ${APR!''} 
315                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
316                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
317                                                                </a> 
318                                                            </p>                                                             
319                                                        </li> 
320                                                        <li class="${fib.offerType}"> 
321                                                            <p> 
322                                                                <strong>Intro APR<sup>*</sup> for Balance Transfers: </strong> 
323                                                                ${BAL!''}  
324                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
325                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
326                                                                </a> 
327                                                            </p> 
328                                                        </li> 
329                                                    <#else> 
330                                                        <li class="${fib.offerType}"> 
331                                                            <p> 
332                                                                <#if (fib.offerType == "147" || fib.offerType== "115" || fib.offerType== "138" || fib.offerType== "154")> 
333                                                                    <strong>APR for Purchases and Balance Transfers: </strong> 
334                                                                <#elseif (fib.offerType== "101")> 
335                                                                    <strong>INTRO APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
336                                                                <#else> 
337                                                                    <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
338                                                                </#if> 
339 
340                                                                ${APR!''}  
341                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
342                                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
343                                                                </a> 
344                                                            </p> 
345                                                        </li> 
346                                                    </#if> 
347                                                </#if> 
348                                                <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
349                                                    <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
350                                                        <li>${marketingInfo.getData()}</li> 
351                                                    </#list> 
352                                                </#if> 
353                                                <#if !ameriprise> 
354                                                    <li> 
355                                                        <p> 
356                                                            Annual Fee: ${AMF!''}  
357                                                            <a  href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}"  target="_blank"> 
358                                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
359                                                            </a> 
360                                                        </p> 
361                                                    </li> 
362                                                </#if> 
363                                            </ul> 
364                                        </div> 
365                                        <ul class="actions"> 
366                                            <li> 
367                                                <form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" method="post" class="BAAForm"> 
368                                                    <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
369                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea> 
370                                                    <a  
371                                                        class="applyNowLink apply-now-button"  
372                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" 
373                                                        data-button-name="apply-now-link"  
374                                                        data-product-name="${productName}"                 
375
376                                                            ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()}<span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
377                                                    </a> 
378                                                </form> 
379                                            </li> 
380                                            <li> 
381                                            <#if ameriprise> 
382                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc_used}${ecidExt}"> 
383                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only"> about ${partnerName!''} ${product!''} Card </span> 
384                                                </a> 
385                                            <#else> 
386                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
387                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
388                                                </a> 
389                                            </#if> 
390                                            </li> 
391                                        </ul> 
392                                    </div>                             
393                                </div> 
394                            </#list> 
395                        </div> 
396                    </div>                 
397                </#if> 
398                <#if (businessCards?size > 0)>  
399                    <div class="tab-more-wrapper">    
400                        <div class="jn-consumer-content-wrapper jn-tab-content transition-start" data-id="businessTab" title="${partnerName!''} - Business products"> 
401                             
402                            <#list businessCards as fib> 
403                                    <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
404                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/"+fib.filename+".jpg"> 
405                                    <#switch fib.offerType>                                   
406                                        <#case "144"> 
407                                            <#assign productName = "smart-business-rewards"> 
408                                            <#assign product="Smart Business Rewards"> 
409                                            <#assign cardIndex = 8> 
410                                            <#break> 
411                                        <#case "128"> 
412                                            <#assign productName = "business-cash-preferred"> 
413                                            <#assign product="Business Cash Preferred"> 
414                                            <#assign cardIndex = 6>   
415                                            <#break> 
416                                        <#case "143"> 
417                                            <#assign productName = "business-real-rewards"> 
418                                            <#assign product="Business Real Rewards"> 
419                                            <#assign cardIndex = 9> 
420                                            <#break> 
421                                        <#case "121"> 
422                                            <#assign productName = "business-platinum2103"> 
423                                            <#assign product="Business Card"> 
424                                            <#assign cardIndex = 7> 
425                                            <#break> 
426                                        <#default> 
427                                    </#switch> 
428 
429                                    <#assign newTag = ""> 
430                                    <#if (consumerTitle.getSiblings()[cardIndex].addNewTag?has_content && consumerTitle.getSiblings()[cardIndex].addNewTag.getData() == "true")> 
431                                        <#assign newTag = "with-new-tag"> 
432                                    </#if> 
433                                    <#assign APR=""> 
434                                    <#assign AMF=""> 
435                                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', fib.offerId + '&'+ fib.sourceCode)> 
436                                    <#if (scrapedData?size > 0)> 
437                                        <#list scrapedData as sItem> 
438                                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
439                                                <#assign APR = sItem.scrapedValue> 
440                                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
441                                                <#assign AMF = sItem.scrapedValue> 
442                                            </#if> 
443                                            <#if (APR?has_content && AMF?has_content)> 
444                                                <#break> 
445                                            </#if> 
446                                        </#list> 
447                                    </#if> 
448                                     
449                                <div class="${newTag} jn-consumer-item item-${fib.offerType}" title="${partnerName!''} ${product!''} Credit Card"> 
450                                    <div class="tag-container"> 
451                                        <div class="tag-corner"> 
452                                            <div class="tag-label">NEW</div> 
453                                        </div> 
454                                    </div> 
455                                    <div class="consumer-card-heading hide-desktop"> 
456                                        <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
457                                        ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
458                                    </div> 
459                                    <div class="jn-consumer-card-image"> 
460                                        <img src="${cardArtImage!''}" alt="${rollover_text!''}"  class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
461                                 
462                                        <#if (consumerTitle.getSiblings()[cardIndex].cardArtDescription?has_content) > 
463                                            <p class="jn-card-art-description">${consumerTitle.getSiblings()[cardIndex].cardArtDescription.getData()}</p> 
464                                        </#if> 
465                                    </div> 
466 
467                                    <div class="jn-consumer-card-info"> 
468                                        <div class="consumer-card-heading hide-mobile"> 
469                                            <div class="consumer-card-heading__subheading">${consumerTitle.getSiblings()[cardIndex].Title.getData()}</div> 
470                                            ${consumerTitle.getSiblings()[cardIndex].headlineText.getData()} 
471                                        </div> 
472                                        <div class="jn-additional"> 
473                                            <ul> 
474                                                <li class="${fib.offerType}"> 
475                                                    <p> 
476                                                        <#if (fib.offerType == "144")> 
477                                                            <strong>APR for Purchases and Balance Transfers: </strong> 
478                                                        <#else> 
479                                                            <strong>Intro APR<sup>*</sup> for Purchases and Balance Transfers: </strong> 
480                                                        </#if> 
481 
482                                                        ${APR!''} 
483                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
484                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
485                                                        </a> 
486                                                    </p> 
487                                                </li> 
488                                                <#if consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings()?has_content> 
489                                                    <#list consumerTitle.getSiblings()[cardIndex].additionalInfo.getSiblings() as marketingInfo> 
490                                                        <li>${marketingInfo.getData()}</li> 
491                                                    </#list> 
492                                                </#if> 
493                                                <li> 
494                                                    <p> 
495                                                        Annual Fee: ${AMF!''} <a 
496                                                        href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc_used}" target="_blank"> 
497                                                            <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms &amp; conditions 
498                                                        </a> 
499                                                    </p> 
500                                                </li> 
501                                            </ul> 
502                                        </div> 
503                                        <ul class="actions">                                     
504                                            <li> 
505                                                <form action="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}" method="post" class="BAAForm"> 
506                                                    <label for="appDataBAA-${fib.offerId}" style="position:absolute; clip:rect(0 0 0 0);">Application Data</label> 
507                                                    <textarea rows="20" cols="100" name="applicationData" id="appDataBAA-${fib.offerId}" class="appDataBAA" style="display:none;" title="application data"></textarea>                                         
508                                                    <a  
509                                                        class="applyNowLink apply-now-button"  
510                                                        href="${oadURL}?locationCode=${lc_used}&amp;offerId=${fib.offerId}&amp;preparerType=customer&amp;sourceCode=${fib.sourceCode}"  
511                                                        data-button-name="apply-now-link"  
512                                                        data-product-name="${productName}" 
513
514                                                        ${consumerTitle.getSiblings()[cardIndex].applyNow.getData()} 
515                                                        <span class="screen-reader-only"> for ${partnerName!''} ${product!''} Card </span> 
516                                                    </a> 
517                                                </form> 
518                                            </li> 
519                                            <li> 
520                                                <a href="${environment}/${productName}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"> 
521                                                    ${consumerTitle.getSiblings()[cardIndex].LearnMore.getData()}<span class="screen-reader-only">about ${partnerName!''} ${product!''} Card </span> 
522                                                </a> 
523                                            </li> 
524                                        </ul> 
525                                    </div> 
526                                </div> 
527                                 
528                            </#list> 
529                             
530                        </div> 
531                    </div> 
532                </#if>  
533            </div> 
534            <script> 
535                var consumerSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="consumerTab"]'; 
536                var businessSelector = '.jn-consumer-content-wrapper.jn-tab-content[data-id="businessTab"]'; 
537                 $(document).ready(function () { 
538                    var banker_code = "${bCode!''}"; 
539                    var tabs=$('.tab-nav'); 
540                    var slideDiv = $('.jn-tab-content.active');                    
541                    var screenWidthMobile = 768; 
542                    var screenWidth = window.innerWidth; 
543 
544                    if (tabs.length == 1) { 
545                        if ($(consumerSelector).length > 0) { 
546                            if(banker_code && (banker_code.indexOf("amp") == 0) && (banker_code.length > 6)) { 
547                                $("nav.jn-primary-nav").hide(); 
548                                changeCardLayout(consumerSelector); 
549                                createMetaTag("consumer"); 
550                            } else { 
551                                hideHeroAndDisclaimer('business'); 
552                                showHeroAndDisclaimer('consumer'); 
553                                changeCardLayout(consumerSelector); 
554                                renumberFootnote("consumer"); 
555                                createMetaTag("consumer");  
556
557                        }  
558                        if ($(businessSelector).length > 0) { 
559                            $(businessSelector).addClass('active'); 
560                            hideHeroAndDisclaimer('consumer'); 
561                            showHeroAndDisclaimer('business'); 
562                            changeCardLayout(businessSelector); 
563                            renumberFootnote("business"); 
564                            createMetaTag("business");  
565
566
567                    if (tabs.length == 2) { 
568                        renumberFootnote("consumer"); 
569                        renumberFootnote("business"); 
570                        createMetaTag("consumer"); 
571                        if ($(consumerSelector + ' .jn-consumer-item').length < 3) { 
572                            changeCardLayout(consumerSelector); 
573
574                        if ($(businessSelector + ' .jn-consumer-item').length < 3) { 
575                            changeCardLayout(businessSelector); 
576
577                             
578                        var tabsNav = document.querySelectorAll('.tab-nav'); 
579                        togglePrimaryNav(tabsNav); 
580 
581                        if(window.location.href.indexOf('#business') > -1 ) { 
582                            $(consumerSelector).removeClass('active'); 
583                            $(businessSelector).addClass('active'); 
584                            $('#consumerTab').removeClass('active'); 
585                            $('#businessTab').addClass('active'); 
586                            hideHeroAndDisclaimer('consumer'); 
587                            showHeroAndDisclaimer('business'); 
588                            changeCardLayout(businessSelector); 
589                            renumberFootnote("business"); 
590                            createMetaTag("business"); 
591 
592                            $(tabs).click(function(){ 
593                                if ($(this).attr('id') === "consumerTab") { 
594                                    var newUrl = window.location.toString(); 
595                                    window.location = newUrl.replace(/#business/, '#consumer'); 
596
597                                if ($(this).attr('id') === "businessTab") { 
598                                    var url = window.location.toString(); 
599                                    window.location = url.replace(/#consumer/, '#business'); 
600
601                            }); 
602
603
604                     
605                }); 
606                // Primary Nav function 
607                 
608                function togglePrimaryNav(elem) { 
609                    for (var i = 0; i < elem.length; i++) { 
610                        elem[i].addEventListener("click", function(e) { 
611 
612                            var current = this, 
613                                allSections = document.querySelectorAll('[data-id]'), 
614                                section = document.querySelector("[data-id='"+ current.id +"']"); 
615 
616                            for (var a = 0; a < allSections.length; a++) { 
617                                allSections[a].classList.remove('active'); 
618
619                            for (var c = 0; c < elem.length; c++) { 
620                                if (current != elem[c]) { 
621                                    elem[c].classList.remove('active'); 
622                                } else { 
623                                    current.classList.add('active'); 
624                                    section.classList.add('active'); 
625                                    hideHeroAndDisclaimer('consumer'); 
626                                    hideHeroAndDisclaimer('business'); 
627                                    if(current.getAttribute('id') === "consumerTab"){ 
628                                        showHeroAndDisclaimer('consumer'); 
629                                    } else if(current.getAttribute('id') === "businessTab"){ 
630                                        showHeroAndDisclaimer('business'); 
631
632
633
634                            e.preventDefault(); 
635                        }); 
636
637
638 
639                function renumberFootnote(type) { 
640                    var discriptionSelector = '.jn-consumer-content-wrapper.jn-tab-content' + '[data-id="' + type + 'Tab"]'; 
641                    var disclaimerSelector = '.tier1-disclaimer-landing-' + type; 
642                    var heroSelector = '.tier1-hero-landing-' + type; 
643                    var numOfFootnote = $(disclaimerSelector + ' sup').length; 
644                    var showList = []; 
645                    var hideList=[]; 
646                    for (var i = 1; i <= numOfFootnote; i++) { 
647                    var cssClass="tag-" + i; 
648                    if ($(discriptionSelector + ' sup').hasClass(cssClass) || $(heroSelector + ' sup').hasClass(cssClass)) { 
649                        showList.push(i);      
650                    } else { 
651                        hideList.push(i); 
652
653                    }  
654                    /* 
655                    for (var i = 1; i < showList.length + 1; i++) { 
656                        if(showList[i-1] != i) { 
657                            var className="tag-" + showList[i-1]; 
658                            $(heroSelector).find("." +  className).html(i); 
659                            // $(discriptionSelector).find("." +  className).html(i); 
660                            $(disclaimerSelector).find("." +  className).html(i); 
661
662
663                    */ 
664                    for (var i = 0; i <hideList.length; i++) { 
665                        var cname="tag-" + hideList[i]; 
666                        $(disclaimerSelector).find("." + cname).parent().hide(); 
667                    }    
668
669 
670                function changeCardLayout(cssSelector) { 
671                    var numOfCards = $(cssSelector + ' .jn-consumer-item').length; 
672                    if(numOfCards == 1) { 
673                        $(cssSelector).addClass('one-card'); 
674                    } else if (numOfCards == 2) { 
675                        $(cssSelector).addClass('two-card'); 
676                    }   
677
678                function hideHeroAndDisclaimer(type) { 
679                    try { 
680                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('show'); 
681                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('hide'); 
682                    } catch (e) { 
683                        console.log(e); 
684
685 
686                    try { 
687                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('show'); 
688                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('hide');  
689                    } catch (e) { 
690                        console.log(e); 
691
692 
693
694                function showHeroAndDisclaimer(type) { 
695                    try { 
696                        document.querySelector('.tier1-hero-landing-'+ type).classList.add('show'); 
697                        document.querySelector('.tier1-hero-landing-'+ type).classList.remove('hide'); 
698                    } catch (e) { 
699                        console.log(e); 
700
701                     
702                    try { 
703                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.add('show'); 
704                        document.querySelector('.tier1-disclaimer-landing-'+ type).classList.remove('hide');  
705                    } catch (e) { 
706                        console.log(e); 
707
708 
709
710                function createMetaTag(type) { 
711                    var partnerName = "${partnerName!0}"; 
712                    var product_name = $('.jn-hero-container .jn-button').data('product-name'); 
713                    var metaDesc = ""; 
714                    if (type == "consumer") {     
715                        if(location.pathname.indexOf("11t1m") != -1) { 
716                            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." 
717                        } else {                                    
718                            if(product_name ==  "consumer-platinum2103") { 
719                                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."; 
720                            } else if(product_name ==  "real-rewards") { 
721                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Take home 2,500 bonus points after your first purchase."; 
722                            } else if(product_name ==  "secured") { 
723                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
724                            } else if(product_name ==  "max-cash") { 
725                                metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select."; 
726
727
728 
729                    } else if (type == "business") { 
730                        if(product_name ==  "business-cashback") {               
731                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
732                        } else if(product_name ==  "business-real-rewards") { 
733                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on."; 
734                        } else if(product_name ==  "business-visa") { 
735                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
736                        } else if(product_name ==  "smart-business-rewards") { 
737                            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."; 
738
739
740                    var m = document.createElement('meta');  
741                    m.name = 'description';  
742                    m.content = metaDesc;  
743                    document.head.appendChild(m); 
744
745                function goToByScroll(id) { 
746                    var element = document.getElementById(id); 
747                    element.scrollIntoView(true); 
748
749                 
750            </script> 
751            <script> 
752                var reportingData = window.reportingData || {}; 
753                document.addEventListener('DOMContentLoaded', function() {                    
754                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
755                    var hostName = location.hostname;                                     
756                    function getDomainFromHostname(hostname) { 
757                        var parts = hostname.split('.'); 
758                        return parts.length === 3 ? parts[1] : parts[0]; 
759
760                    var domain = getDomainFromHostname(hostName); 
761                    var partnerName = "${partnerName!0}"; 
762                    var ameriprise = '${ameriprise?string("yes", "no")}'; 
763                    var locationCode = "${rLC!lc}"; 
764                    var eidAmp = ""; 
765                    var heroCardImgs = document.querySelectorAll('.jn-consumer-card-image img, .cardArtImg img'); 
766                    for (var index = 0; index < heroCardImgs.length; index++) { 
767                        var heroCardImg = heroCardImgs[index]; 
768                        var heroCardSrc = heroCardImg.getAttribute("src"); 
769                        if(heroCardSrc != "") { 
770                            resizeImg(heroCardImg); 
771
772
773                    if (ameriprise == "yes") { 
774                        var bankercode_amp = '${bCode}'; 
775                        eidAmp = bankercode_amp.substring(3); 
776                        locationCode =""; 
777                        document.title = "Ameriprise Financial Credit Card Overview Page"; 
778                    } else { 
779                        document.title = partnerName + " Credit Card Index Page"; 
780
781                     
782                    var lc = '${lc!0}'; 
783 
784                    var regex = /\d+/g; 
785                    var bdNumber = "${bPhone!''}"; 
786                    var phoneNum = bdNumber.match(regex); 
787                    var areaCode = ""; 
788                    var exchangeCode = ""; 
789                    var num = ""; 
790                    if(phoneNum != null) { 
791                        phoneNum = phoneNum.join(""); 
792                        areaCode = phoneNum.substring(0,3); 
793                        exchangeCode = phoneNum.substring(3,6); 
794                        num = phoneNum.substring(6,10); 
795
796 
797                        /* update SiteCatalyst data object */ 
798                    reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
799                    reportingData.page_type = 'product';  
800                    reportingData.site_section = 'credit cards'; 
801                    reportingData.platform = 'microsite'; 
802                    reportingData.campaign_id = '${campaignId}'; 
803                    reportingData.location_code = '${rLC!0}'; 
804                    reportingData.partner_name = "${partnerName}"; 
805                    reportingData.product = 'All Cards'; 
806                    reportingData.text_to_apply_source = '${text_to_apply_source}'; 
807                    reportingData.visitor_type = 'prospect';         
808                    reportingData.Banker_id = '${boeid}'; 
809                    reportingData.Banker_code = '${bCode}'; 
810 
811                                                     
812                    /* SiteCatalyst  pageView tracking */ 
813                    AUI().ready(function() { 
814                        if (window.publisherFW) {                            
815                            window.publisherFW.publishEvent("pageView", reportingData); 
816
817                    });  
818 
819                                     
820                    $('.jn-button').removeAttr('disabled'); 
821                    $('.jn-button').removeClass('jn-disabled'); 
822 
823                    jQuery('.applyNowLink').on('click', function(e){ 
824                        $(this).closest('.BAAForm').submit(); 
825                        ga("send", { 
826                            hitType: "event", 
827                            eventAction: "ApplyNow", 
828                            eventCategory: "click", 
829                            eventLabel: "BottomButton" 
830                        }); 
831                        return false; 
832                    }); 
833                    jQuery(".BAAForm").on("submit", function(e){ 
834                        e.preventDefault();                         
835                        var xmlData; 
836                        if(ameriprise == "yes") { 
837                            xmlData = '<?xml version="1.0"?>'+ 
838                                "<prefillData>"+  
839                                "<versionNumber>1.0</versionNumber>"+  
840                                "<applicationData>"+  
841                                "<referral>" +  
842                                "<employeeId>" + eidAmp + "</employeeId>" + 
843                                "<storeNumber>"+"${bName!'0'}"+"</storeNumber>"+ 
844                                "<divisionNumber></divisionNumber>"+ 
845                                "</referral>" +  
846                                "<bankerInformation>"+  
847                                "<locationCode>" + locationCode + "</locationCode>"+ 
848                                "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
849                                "<employeeID>${boeid!0}</employeeID>"+ 
850                                "<name>" + 
851                                "<first>${bFName!'0'}</first>" + 
852                                "<last>${bLName!'0'}</last>" + 
853                                "</name>"+ 
854                                "<phone>"+ 
855                                "<areaCode>"+areaCode+"</areaCode>"+  
856                                "<exchange>"+exchangeCode+"</exchange>"+ 
857                                "<number>"+num+"</number>"+  
858                                "</phone>"+  
859                                "</bankerInformation>"+  
860                                "</applicationData>"+  
861                                "</prefillData>" 
862                        } else { 
863                            xmlData = '<?xml version="1.0"?>'+ 
864                                "<prefillData>"+  
865                                "<versionNumber>1.0</versionNumber>"+  
866                                "<applicationData>"+  
867                                "<bankerInformation>"+  
868                                "<locationCode>" + locationCode + "</locationCode>"+ 
869                                "<originatingBranchNumber>"+"${bName!'0'}"+"</originatingBranchNumber>"+ 
870                                "<employeeID>${boeid!0}</employeeID>"+ 
871                                "<name>" + 
872                                "<first>${bFName!'0'}</first>" + 
873                                "<last>${bLName!'0'}</last>" + 
874                                "</name>"+ 
875                                "<phone>"+ 
876                                "<areaCode>"+areaCode+"</areaCode>"+  
877                                "<exchange>"+exchangeCode+"</exchange>"+ 
878                                "<number>"+num+"</number>"+  
879                                "</phone>"+  
880                                "</bankerInformation>"+  
881                                "</applicationData>"+  
882                                "</prefillData>" 
883
884                        $(this).children(".appDataBAA").val(xmlData); 
885                        var buttonName = $(this).find(".apply-now-button").data("button-name"); 
886                        var productName = $(this).find(".apply-now-button").data("product-name"); 
887                        /* SiteCatalyst  onClick tracking */ 
888                        reportingData.apply_button = buttonName; 
889                        reportingData.product = productName; 
890 
891                        if (window.publisherFW) {                            
892                            window.publisherFW.publishEvent("onClick", reportingData); 
893
894 
895                        var paramString = '${bCode}' + "&" + xmlData + "&" + '${htmlUtil.escapeURL(htmlUtil.escapeJS(url))}'; 
896                            /* CRC service call */ 
897                            Liferay.Service( 
898                                '/crc-utilities-portlet#crcremote/make-call', 
899
900                                    storedProcedure: 'crcDDCTextApplyLog', 
901                                    parameters: paramString 
902                                }, 
903                                function(obj){                                   
904
905                            ); 
906 
907                        this.submit();                   
908                    });                                                                                   
909                }); 
910                function resizeImg(img) { 
911                    img.addEventListener("load", function() { 
912                        var cardImgWidth = img.width; 
913                        var cardImgHeight = img.height; 
914                        if(cardImgWidth > cardImgHeight) { 
915                            img.style.width = "285px"; 
916                        } else { 
917                            img.style.width = "150px"; 
918
919                    }); 
920
921            </script>                    
922                 
923        </#if>  
924    </#if> 
925</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843858" 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 "10153#10191#5843858" 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    <#if (fiCardsData?size > 0) > 
41        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
42     
43        <#if (cardProvider?size > 0)> 
44            <#-- This will be V for visa or M for mastercard. --> 
45            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
46        <#else> 
47            <script> 
48                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
49            </script> 
50        </#if> 
51 
52 
53        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
54            <div class="disclaimer" > 
55                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
56                    ${disclaimersVisa.getData()} 
57                </#if> 
58                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
59                    ${disclaimersMasterCard.getData()} 
60                </#if> 
61            </div> 
62        </div> 
63    </#if> 
64<#else> 
65    <script> 
66        console.log("No lc for disclaimer"); 
67    </script> 
68</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#5843858" 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 "10153#10191#5843858" 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    <#if (fiCardsData?size > 0) > 
41        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fiCardsData[0].offerType + '&' + lc)> 
42     
43        <#if (cardProvider?size > 0)> 
44            <#-- This will be V for visa or M for mastercard. --> 
45            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
46        <#else> 
47            <script> 
48                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
49            </script> 
50        </#if> 
51 
52 
53        <div class="jn-disclaimer tier1-disclaimer-${class.getData()}" title="${partnerName} - Disclaimer"> 
54            <div class="disclaimer" > 
55                <#if (disclaimersVisa?has_content && cardProviderAbbreviated?contains("V"))> 
56                    ${disclaimersVisa.getData()} 
57                </#if> 
58                <#if (disclaimersMasterCard?has_content && cardProviderAbbreviated?contains("M")) > 
59                    ${disclaimersMasterCard.getData()} 
60                </#if> 
61            </div> 
62        </div> 
63    </#if> 
64<#else> 
65    <script> 
66        console.log("No lc for disclaimer"); 
67    </script> 
68</#if> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10153#10191#6590080" 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 "10153#10191#6590080" at line 8, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
4<#assign url404 = '/error/404.html'> 
5<#assign aDateTime = .now> 
6<#assign currentYear = aDateTime?string.yyyy> 
7 
8<#assign bCode= qstringmap["bankercode"]?first> 
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 
16<#if bCode?starts_with("amp") && (url?contains("11t1m"))> 
17    <#assign ameriprise = true> 
18<#else> 
19    <#assign ameriprise = false> 
20</#if> 
21<#if mappedLC?has_content && !ameriprise> 
22    <#assign lc = mappedLC > 
23</#if> 
24 
25<#if lc?has_content> 
26 
27    <#assign prefix = "00000" > 
28    <#assign lcWithPrefix = prefix + lc > 
29    <#assign withPrefixLength = lcWithPrefix?length > 
30    <#assign startHere = withPrefixLength - 5> 
31    <#assign lc = lcWithPrefix?substring(startHere)> 
32    <#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
33    <#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
34 
35    <#assign clientProfile = clientProfileList?first> 
36    <#assign pbu = clientProfile.getPbu()> 
37    <#assign subbu = clientProfile.getSUBBRANDBUNBR()>   
38    <#assign partnerName=clientProfile.getMarketingNameLong()> 
39    <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
40    <#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
41    <#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
42    <#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*") && !partnerUrl?matches(r"(?i)^https?\:&#x2F;&#x2F;.*")> 
43        <#-- add protocal if missing  --> 
44        <#assign partnerUrl = 'https://' + partnerUrl> 
45    </#if> 
46 
47 
48    <footer class="footer bg-color-black text-color-white"> 
49        ${footerContent.getData()} 
50    </footer> 
51 
52    <#if url?contains("11t1m")> 
53        <script>                 
54            document.querySelector('.footer .copyright').classList.add("ecdma-footer-client-name-copyright"); 
55            document.querySelector('.footer .fdic').innerHTML='<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
56        </script> 
57    <#else> 
58        <!-- BEGIN CALIFORNIA OPT-OUT MODAL --> 
59        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
60 
61        <style> 
62          #opt-out-button, 
63          .modal__btn.learn-more { 
64              background: #0C2074; 
65              border: 1px solid #0C2074; 
66              color: white; 
67              text-transform: uppercase; 
68              text-decoration: none; 
69              font-size: 16px; 
70              padding: 0.5rem 2rem; 
71              display: inline-block; 
72              border-radius: 0; 
73
74          #opt-out-button:hover, 
75          .modal__btn.learn-more:hover { 
76              color: white; 
77              border-color: #2C76AF !important; 
78              background-color: #2C76AF !important; 
79
80          .modal__btn.learn-more { 
81              background: white; 
82              border: 1px solid #0C2074; 
83              color: #0C2074; 
84
85          #opt-out-button[disabled="true"] { 
86              background-color: rgba(0,0,0,.15); 
87              color: rgba(0,0,0,.45); 
88              border-color: rgba(0,0,0,.25); 
89
90          #opt-out-button:hover[disabled="true"] { 
91              background-color: rgba(0,0,0,.15) !important; 
92              color: rgba(0,0,0,.45) !important; 
93              border-color: rgba(0,0,0,.25) !important; 
94
95            #opt-out-button:focus { 
96                outline-style: solid; 
97                outline-color: white; 
98                outline-offset: -3px; 
99                outline-width: 1px; 
100
101            .opt-out-link svg { 
102                width: 30px; 
103                height: 14px; 
104                width: auto; 
105                vertical-align: middle; 
106
107          .modal__overlay { 
108              position: fixed; 
109              top: 0; 
110              left: 0; 
111              right: 0; 
112              bottom: 0; 
113              background: rgba(0,0,0,0.6); 
114              display: flex; 
115              justify-content: center; 
116              align-items: center; 
117
118       
119          .modal__container { 
120              background-color: #fff; 
121              padding: 30px; 
122              max-width: 500px; 
123              max-height: 100vh; 
124              border-radius: 4px; 
125              overflow-y: auto; 
126              box-sizing: border-box; 
127
128       
129          .modal__header { 
130              display: flex; 
131              justify-content: space-between; 
132              align-items: center; 
133
134       
135          .modal__title { 
136              margin-top: 0; 
137              margin-bottom: 0; 
138              font-weight: 600; 
139              font-size: 20px; 
140              line-height: 1.25; 
141              color: #00449e; 
142              box-sizing: border-box; 
143
144       
145    .modal__close { 
146        background: transparent; 
147        border: 1px solid white; 
148        padding: 4px 8px; 
149
150    .modal__close:hover { 
151        border: 1px solid black; 
152
153       
154          .modal__header .modal__close:before { content: "\2715"; } 
155       
156          .modal__content { 
157              margin-top: 2rem; 
158              margin-bottom: 2rem; 
159              line-height: 1.5; 
160
161       
162          @keyframes mmfadeIn { 
163              from { opacity: 0; } 
164              to { opacity: 1; } 
165
166       
167          @keyframes mmfadeOut { 
168              from { opacity: 1; } 
169              to { opacity: 0; } 
170
171       
172          @keyframes mmslideIn { 
173              from { transform: translateY(15%); } 
174              to { transform: translateY(0); } 
175
176       
177          @keyframes mmslideOut { 
178              from { transform: translateY(0); } 
179              to { transform: translateY(-10%); } 
180
181       
182          .micromodal-slide { 
183              display: none; 
184
185       
186          .micromodal-slide.is-open { 
187              display: block; 
188
189       
190          .micromodal-slide[aria-hidden="false"] .modal__overlay { 
191              animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
192
193       
194          .micromodal-slide[aria-hidden="false"] .modal__container { 
195              animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
196
197       
198          .micromodal-slide[aria-hidden="true"] .modal__overlay { 
199              animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
200
201       
202          .micromodal-slide[aria-hidden="true"] .modal__container { 
203              animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
204
205       
206          .micromodal-slide .modal__container, 
207          .micromodal-slide .modal__overlay { 
208              will-change: transform; 
209
210      </style> 
211        <div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
212            <div class="modal__overlay" tabindex="-1" data-micromodal-close> 
213                <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
214                    <header class="modal__header"> 
215                        <h2 class="modal__title" id="modal-1-title"> 
216                        Your California privacy choices 
217                        </h2> 
218                        <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
219                    </header> 
220                    <div class="modal__content" id="modal-1-content"> 
221                        <div id="message-no-cookie"> 
222                            <p> 
223                            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> 
224                             
225                            <p>&nbsp;</p> 
226 
227                            <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> 
228                        </div> 
229                        <div id="message-with-cookie"> 
230                            <p>You have successfully opted-out.</p> 
231                        </div> 
232                    </div> 
233                    <div class="modal__footer"> 
234                      <a href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank" class="modal__btn learn-more" aria-label="Learn more">Learn More</a>                        <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
235                    </div> 
236                </div> 
237            </div> 
238        </div> 
239        <!-- END CALIFORNIA OPT-OUT MODAL --> 
240        <script>   
241            const copyrightNode = document.querySelector('.footer .copyright'); 
242            const fdicNode = document.querySelector('.footer .fdic'); 
243            if(copyrightNode) { 
244                copyrightNode.innerHTML = '<sup>©</sup> Elan Financial Services ' + ${currentYear};               
245                copyrightNode.classList.add("ecdma-footer-client-name-copyright"); 
246
247            if (fdicNode) { 
248                fdicNode.innerHTML='<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
249                fdicNode.insertAdjacentHTML('beforebegin', '<div class="member-agreement"><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></div>'); 
250                fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a class="text-color-white opt-out-link" href="javascript:void(0);" 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>'); 
251
252        </script> 
253 
254       <!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
255 
256<script> 
257  window.getCookieDomain = function() { 
258      var hostname = window.location.hostname.split("."); 
259      return hostname && hostname.slice(hostname.length - 2).join("."); 
260
261  window.setToOptOut = function() { 
262      if (window.getCookie('privacy_optout')) { 
263              document.getElementById('message-no-cookie').style.display = 'none'; 
264              document.getElementById('message-with-cookie').style.display = 'block'; 
265              document.getElementById('opt-out-button').setAttribute('disabled', true) 
266          } else { 
267              document.getElementById('message-no-cookie').style.display = 'block'; 
268              document.getElementById('message-with-cookie').style.display = 'none'; 
269
270
271  window.getCookie = function(name) { 
272      var value = '; ' + document.cookie; 
273      var parts = value.split('; ' + name + '='); 
274      if (parts.length === 2) return parts.pop().split(';').shift(); 
275
276  window.californiaOptOut = function() { 
277      if (!window.getCookie('privacy_optout')) { 
278          document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
279          try { 
280           if (window.CustomEvent) { 
281              window.dispatchEvent(new CustomEvent('privacy_optout')); 
282           } else { 
283              var privacyOptoutEvent = document.createEvent('Event'); 
284              privacyOptoutEvent.initEvent('privacy_optout', true, true); 
285              window.dispatchEvent(privacyOptoutEvent); 
286
287           window.setToOptOut(); 
288          } catch (err) { 
289           console.error(err); 
290
291
292
293  MicroModal.init({ 
294      onShow: window.setToOptOut 
295  }); 
296    AUI().ready(function() { 
297        // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
298        const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
299        if(isBrowserGpcOptOut === true) { 
300        window.californiaOptOut(); 
301
302    }); 
303</script> 
304<!-- END CALIFORNIA OPT-OUT MODAL LOGIC --> 
305    </#if> 
306 
307    <#if partnerUrl?has_content> 
308        <script> 
309            const homelinkNode = document.querySelector('.footer .copyright .homelink'); 
310            if (homelinkNode) { 
311                homelinkNode.innerHTML="<a class='text-color-white' href='${partnerUrl!''}' title='${partnerName!''}' target='_blank'>Home</a>"; 
312
313        </script> 
314    </#if> 
315</#if>