An error occurred while processing the template.
The following has evaluated to null or missing:
==> bCode  [in template "10154#10192#18372589" at line 14, column 70]

----
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 fiData = utilServ.makeCall("c...  [in template "10154#10192#18372589" at line 14, column 1]
----
1<#assign uniqueID = randomNamespace /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign environment = url?replace('/11t2/index.*','','r')> 
5<#assign projectIds = ["12", "13", "14", "15", "16"]> 
6<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
7 
8<#if qstringmap["bankercode"]?has_content> 
9	<#assign bCode= qstringmap["bankercode"]?first> 
10	<#assign bCode = htmlUtil.escape(bCode)> 
11	<#assign bCode = htmlUtil.escapeJS(bCode)> 
12</#if> 
13 
14<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
15<#if fiData?first?has_content> 
16    <#assign fi = fiData?first> 
17    <#if projectIds?seq_index_of(fi.projectId) != -1> 
18        <#assign subbu_special = fi.offerId> 
19    </#if> 
20</#if> 
21 
22 
23<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
24<#list bData as b>      
25    <#assign lc = b.locationcode > 
26    <#assign rLC = b.reallocationcode > 
27    <#assign mappedLC = b.mappedLocationCode >    
28</#list> 
29 
30<#if mappedLC?has_content> 
31    <#assign lc = mappedLC > 
32</#if> 
33 
34<#if lc?has_content> 
35	<#assign prefix = "00000" > 
36	<#assign lcWithPrefix = prefix + lc > 
37	<#assign withPrefixLength = lcWithPrefix?length > 
38	<#assign startHere = withPrefixLength - 5> 
39	<#assign lc = lcWithPrefix?substring(startHere)> 
40</#if> 
41 
42<#if qstringmap["ecid"]?has_content> 
43    <#assign ecidExt = qstringmap["ecid"]?first> 
44    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
45    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
46    <#assign ecidExt = "&ecid=" + ecidExt> 
47<#else> 
48    <#assign ecidExt=""> 
49</#if> 
50 
51 
52<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
53<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
54<#assign clientProfile = clientProfileList?first> 
55<#assign pbu = clientProfile.getPbu()> 
56<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
57<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
58<#assign partnerName = clientProfile.getMarketingNameLong()> 
59 
60<#if (subbu_special?has_content)> 
61	<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu_special)>  
62<#else> 
63	<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu)> 
64</#if> 
65 
66<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')> 
67 
68<#assign personalOfferTypes = []> 
69<#assign businessOfferTypes = []> 
70 
71<#list personalBusinessOfferTypes as pbOfferType> 
72    <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content> 
73        <#if pbOfferType.groupname == "Personal"> 
74            <#assign personalOfferTypes += [pbOfferType.offertype]> 
75        <#elseif pbOfferType.groupname == "Business"> 
76            <#assign businessOfferTypes += [pbOfferType.offertype]> 
77        </#if> 
78    </#if> 
79</#list> 
80 
81 
82<#assign productTypeValue = ""> 
83<#if productType.getData()?has_content> 
84    <#assign productKey = productType.getData()> 
85	<#assign productTypeValue = productType.optionsMap[productKey]> 
86	   
87</#if> 
88 
89<#assign personalCards = []> 
90<#assign businessCards = []>  
91<#assign finalList = []>  
92<#assign index = 0> 
93 
94<#list fiCardsData as fib> 	 
95    <#if (fib.offerType?has_content)> 
96        <#if (personalOfferTypes?seq_contains(fib.offerType))> 
97            <#assign personalCards = personalCards + fiCardsData[index..index]> 
98        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
99            <#assign businessCards = businessCards + fiCardsData[index..index]> 
100        </#if>                            
101    </#if>   
102    <#assign index = index + 1>               
103</#list>  
104 
105 
106<#if productTypeValue == "Personal"> 
107	<#list personalCards as personalCard> 
108		<#if product.getSiblings()?has_content> 
109			<#list product.getSiblings() as productItem> 
110				<#if personalCard.offerType == productItem.productOfferType.getData()> 
111				   <#assign finalList = finalList + [personalCard]> 
112				</#if> 
113			</#list> 
114		</#if>   
115	 </#list> 
116<#elseif productTypeValue == "Business"> 
117	<#list businessCards as businessCard> 
118		 <#if product.getSiblings()?has_content> 
119			<#list product.getSiblings() as productItem> 
120				<#if businessCard.offerType == productItem.productOfferType.getData()> 
121				   <#assign finalList = finalList + [businessCard]> 
122				</#if> 
123			</#list> 
124		</#if>  
125	 </#list> 
126</#if> 
127 
128<#macro renderCards finalListMacro> 
129    <#assign count = 0>   
130    <#list finalListMacro as result> 
131        <#if count < 3>   
132            <#if product.getSiblings()?has_content> 
133                <#list product.getSiblings() as productItem> 
134                    <#if result.offerType == productItem.productOfferType.getData()> 
135                         
136                        <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]> 
137                        <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''> 
138 
139                        <div class="card"> 
140                            <div class="card__content"> 
141                                 
142                                <div class="card__content-left"> 
143                                    <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" > 
144                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" > 
145                                    <#assign cardArtImageAltText = partnerName + " " + productOfferType> 
146                                    <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
147                                     
148                                    <#if (productItem.learnMoreURL.getData())??> 
149                                            <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"  rel="noopener noreferrer"> 
150                                                Learn More <span class="sr-only">about ${productOfferType?upper_case!}</span> 
151                                            </a> 
152                                    </#if> 
153 
154                                </div> 
155                                 
156                             
157                                <div class="card__content-right"> 
158                                    <h3 class="product-offer-type"> 
159                                        ${productOfferType?upper_case!} 
160                                         
161                                        <#if (productItem.cardNameFootnotes.getData())??> 
162                                            <sup>${productItem.cardNameFootnotes.getData()}</sup> 
163                                        </#if> 
164                                    </h3> 
165                                     
166                                    <#if (productItem.offerCopy.getData())??> 
167                                        <div class="offer-copy"> 
168                                            ${productItem.offerCopy.getData()} 
169                                        </div> 
170                                    </#if>                                        
171                                     
172                                </div> 
173                            </div> 
174                        </div> 
175                         
176                    </#if> 
177                </#list> 
178            </#if> 
179            <#assign count = count + 1> 
180        </#if> 
181    </#list> 
182</#macro> 
183 
184<#if (finalList?? && finalList?has_content && finalList?size > 1)> 
185    <#assign count = 0> 
186    <#assign countGlider = 0> 
187    <div class="${productTypeValue}-featured-cards saa-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}"> 
188        <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2> 
189        <div class="card-container"> 
190            <@renderCards finalListMacro=finalList /> 
191        </div> 
192        <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label"> 
193            <div id="featured-glider-slides" class="featured-glider">    
194                <@renderCards finalListMacro=finalList /> 
195            </div> 
196            <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button> 
197            <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button> 
198            <div role="tablist" class="dots"></div> 
199        </div> 
200    </div> 
201</#if> 
202<style> 
203    #content .saa-featured-cards-2024 { 
204        max-width: 1336px; 
205        padding: 0 20px; 
206        margin: 0 auto; 
207
208    @media (min-width: 1376px) { 
209        #content .saa-featured-cards-2024 { 
210            margin-top: 30px; 
211
212
213    #content .saa-featured-cards-2024 .featured-glider-container { 
214        display: block !important; 
215        position: relative; 
216        margin-bottom: 20px; 
217
218    #content .saa-featured-cards-2024 .featured-glider-container .card { 
219        flex: 375px; 
220
221    @media (min-width: 1200px) { 
222        #content .saa-featured-cards-2024 .featured-glider-container { 
223            display: none !important; 
224
225
226    #content .saa-featured-cards-2024 .featured-glider { 
227        padding-top: 40px; 
228        margin-bottom: 15px; 
229        overflow-x: hidden; 
230
231    #content .saa-featured-cards-2024 .card-container { 
232        display: flex; 
233        gap: 30px; 
234        flex-wrap: nowrap; 
235        justify-content: space-between; 
236        margin-top: 40px; 
237        margin-bottom: 60px; 
238        display: none !important; 
239        justify-content: center; 
240
241    @media (min-width: 1200px) { 
242        #content .saa-featured-cards-2024 .card-container { 
243            display: flex !important; 
244
245
246    #content .saa-featured-cards-2024 .card { 
247        background-color: var(--ecdma-bg-color); 
248        border-radius: 10px; 
249        padding: 0 20px 15px 20px; 
250        margin: 0 20px; 
251        flex: 33%; 
252        flex-grow: 0; 
253        visibility: unset !important; 
254
255    @media (min-width: 1200px) { 
256        #content .saa-featured-cards-2024 .card { 
257            margin: 0; 
258
259
260    #content .saa-featured-cards-2024 .card__content { 
261        display: flex; 
262        height: 100%; 
263
264    #content .saa-featured-cards-2024 .card__content-left { 
265        display: flex; 
266        flex-direction: column; 
267        margin-right: 20px; 
268        justify-content: space-between; 
269        height: 100%; 
270
271    #content .saa-featured-cards-2024 .card__content-right { 
272        flex: 1; 
273        margin-top: 20px; 
274
275     #content .saa-featured-cards-2024 .card__image { 
276        border-radius: 12px; 
277        width: 100%; 
278        height: auto; 
279        border-radius: 8px; 
280        max-width: 112px !important; 
281        max-height: 112px; 
282        margin-top: -10px; 
283        object-fit: contain; 
284
285    #content .saa-featured-cards-2024 .card__image--vertical { 
286        margin-top: -20px; 
287
288    #content .saa-featured-cards-2024 .product-offer-type { 
289        margin-bottom: 6px; 
290        color: white; 
291        letter-spacing: 1px; 
292        font-size: 13px; 
293        font-weight: 400; 
294        line-height: 1.5; 
295
296    #content .saa-featured-cards-2024 .product-offer-type sup { 
297        font-size: 10px; 
298        line-height: 13px; 
299
300    #content .saa-featured-cards-2024 .offer-copy { 
301        color: white; 
302
303    #content .saa-featured-cards-2024 .card__learn-more { 
304        background-color: #fff; 
305        border: 1px solid white; 
306        color: var(--ecdma-text-color); 
307        font-size: 13px; 
308        cursor: pointer; 
309        text-decoration: none; 
310        text-align: center; 
311        text-transform: capitalize; 
312        line-height: 15px; 
313        margin-top: 5px; 
314        min-width: 112px; 
315        height: 35px; 
316        line-height: 35px; 
317
318    #content .saa-featured-cards-2024 .card__learn-more:hover { 
319        background-color: var(--ecdma-hover-color); 
320        color: #fff; 
321
322    #content .saa-featured-cards-2024 .card__learn-more:focus { 
323        outline: 1px solid white; 
324        outline-offset: 3px; 
325
326</style> 
327<script> 
328/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */ 
329(() => { 
330    let featuredGlider = null; 
331    if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')) { 
332        featuredGlider = new Glider(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider'), { 
333            slidesToShow: 'auto', 
334            itemWidth: 375, 
335            slidesToScroll: 1, 
336            scrollLockDelay: 100, 
337            draggable: true, 
338            scrollLock: true, 
339            arrows: { 
340                prev: '#${uniqueID}.saa-featured-cards-2024 .glider-prev', 
341                next: '#${uniqueID}.saa-featured-cards-2024 .glider-next' 
342            }, 
343            dots: '#${uniqueID}.saa-featured-cards-2024 .dots', 
344        });  
345
346    const images = document.querySelectorAll('#${uniqueID}.saa-featured-cards-2024 .card__image'); 
347        images.forEach(img => { 
348            const width = img.naturalWidth; 
349            const height = img.naturalHeight;   
350            if(height > width) { 
351                img.classList.add('card__image--vertical'); 
352
353        });   
354 
355    AUI().ready(() => { 
356        /* Make the slider the correct size after the theme and everything is loaded*/ 
357        if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')){ 
358            featuredGlider.refresh(false); 
359
360 
361        const productTypeValue = '${productTypeValue}'; 
362        const thisTabSelector =  productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business'; 
363        /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */ 
364        document.querySelectorAll(thisTabSelector).forEach(tab => { 
365            tab.onclick = () => { 
366                setTimeout(() => {featuredGlider.refresh(false);}, 0); 
367            }; 
368        });   
369    }) 
370})(); 
371</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> bCode  [in template "10154#10192#18372589" at line 14, column 70]

----
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 fiData = utilServ.makeCall("c...  [in template "10154#10192#18372589" at line 14, column 1]
----
1<#assign uniqueID = randomNamespace /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign environment = url?replace('/11t2/index.*','','r')> 
5<#assign projectIds = ["12", "13", "14", "15", "16"]> 
6<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
7 
8<#if qstringmap["bankercode"]?has_content> 
9	<#assign bCode= qstringmap["bankercode"]?first> 
10	<#assign bCode = htmlUtil.escape(bCode)> 
11	<#assign bCode = htmlUtil.escapeJS(bCode)> 
12</#if> 
13 
14<#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
15<#if fiData?first?has_content> 
16    <#assign fi = fiData?first> 
17    <#if projectIds?seq_index_of(fi.projectId) != -1> 
18        <#assign subbu_special = fi.offerId> 
19    </#if> 
20</#if> 
21 
22 
23<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
24<#list bData as b>      
25    <#assign lc = b.locationcode > 
26    <#assign rLC = b.reallocationcode > 
27    <#assign mappedLC = b.mappedLocationCode >    
28</#list> 
29 
30<#if mappedLC?has_content> 
31    <#assign lc = mappedLC > 
32</#if> 
33 
34<#if lc?has_content> 
35	<#assign prefix = "00000" > 
36	<#assign lcWithPrefix = prefix + lc > 
37	<#assign withPrefixLength = lcWithPrefix?length > 
38	<#assign startHere = withPrefixLength - 5> 
39	<#assign lc = lcWithPrefix?substring(startHere)> 
40</#if> 
41 
42<#if qstringmap["ecid"]?has_content> 
43    <#assign ecidExt = qstringmap["ecid"]?first> 
44    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
45    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
46    <#assign ecidExt = "&ecid=" + ecidExt> 
47<#else> 
48    <#assign ecidExt=""> 
49</#if> 
50 
51 
52<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
53<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
54<#assign clientProfile = clientProfileList?first> 
55<#assign pbu = clientProfile.getPbu()> 
56<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
57<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
58<#assign partnerName = clientProfile.getMarketingNameLong()> 
59 
60<#if (subbu_special?has_content)> 
61	<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu_special)>  
62<#else> 
63	<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuDataByFeaturedCard','0&' + pbu + '&' + subbu)> 
64</#if> 
65 
66<#assign personalBusinessOfferTypes = utilServ.makeCall('SAA_DistinctCardOffers', '0')> 
67 
68<#assign personalOfferTypes = []> 
69<#assign businessOfferTypes = []> 
70 
71<#list personalBusinessOfferTypes as pbOfferType> 
72    <#if pbOfferType.groupname?has_content && pbOfferType.offertype?has_content> 
73        <#if pbOfferType.groupname == "Personal"> 
74            <#assign personalOfferTypes += [pbOfferType.offertype]> 
75        <#elseif pbOfferType.groupname == "Business"> 
76            <#assign businessOfferTypes += [pbOfferType.offertype]> 
77        </#if> 
78    </#if> 
79</#list> 
80 
81 
82<#assign productTypeValue = ""> 
83<#if productType.getData()?has_content> 
84    <#assign productKey = productType.getData()> 
85	<#assign productTypeValue = productType.optionsMap[productKey]> 
86	   
87</#if> 
88 
89<#assign personalCards = []> 
90<#assign businessCards = []>  
91<#assign finalList = []>  
92<#assign index = 0> 
93 
94<#list fiCardsData as fib> 	 
95    <#if (fib.offerType?has_content)> 
96        <#if (personalOfferTypes?seq_contains(fib.offerType))> 
97            <#assign personalCards = personalCards + fiCardsData[index..index]> 
98        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
99            <#assign businessCards = businessCards + fiCardsData[index..index]> 
100        </#if>                            
101    </#if>   
102    <#assign index = index + 1>               
103</#list>  
104 
105 
106<#if productTypeValue == "Personal"> 
107	<#list personalCards as personalCard> 
108		<#if product.getSiblings()?has_content> 
109			<#list product.getSiblings() as productItem> 
110				<#if personalCard.offerType == productItem.productOfferType.getData()> 
111				   <#assign finalList = finalList + [personalCard]> 
112				</#if> 
113			</#list> 
114		</#if>   
115	 </#list> 
116<#elseif productTypeValue == "Business"> 
117	<#list businessCards as businessCard> 
118		 <#if product.getSiblings()?has_content> 
119			<#list product.getSiblings() as productItem> 
120				<#if businessCard.offerType == productItem.productOfferType.getData()> 
121				   <#assign finalList = finalList + [businessCard]> 
122				</#if> 
123			</#list> 
124		</#if>  
125	 </#list> 
126</#if> 
127 
128<#macro renderCards finalListMacro> 
129    <#assign count = 0>   
130    <#list finalListMacro as result> 
131        <#if count < 3>   
132            <#if product.getSiblings()?has_content> 
133                <#list product.getSiblings() as productItem> 
134                    <#if result.offerType == productItem.productOfferType.getData()> 
135                         
136                        <#assign productOfferTypeValue = product.productOfferType.optionsMap[productItem.productOfferType.getData()]> 
137                        <#assign productOfferType = productOfferTypeValue?substring(productOfferTypeValue?index_of(" - ") + 3)!''> 
138 
139                        <div class="card"> 
140                            <div class="card__content"> 
141                                 
142                                <div class="card__content-left"> 
143                                    <#assign cardArtImage = cdnCardArtUrl + "/" + result.filename + ".png" > 
144                                    <#assign cardArtImageAlt = cdnCardArtUrl + "/" + result.filename + ".jpg" > 
145                                    <#assign cardArtImageAltText = partnerName + " " + productOfferType> 
146                                    <img class="card__image" src="${cardArtImage!''}" alt="${cardArtImageAltText}" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'"> 
147                                     
148                                    <#if (productItem.learnMoreURL.getData())??> 
149                                            <a class="card__learn-more" href="${environment}${productItem.learnMoreURL.getData()!''}?bankercode=${bCode}&ecdma-lc=${lc}${ecidExt}"  rel="noopener noreferrer"> 
150                                                Learn More <span class="sr-only">about ${productOfferType?upper_case!}</span> 
151                                            </a> 
152                                    </#if> 
153 
154                                </div> 
155                                 
156                             
157                                <div class="card__content-right"> 
158                                    <h3 class="product-offer-type"> 
159                                        ${productOfferType?upper_case!} 
160                                         
161                                        <#if (productItem.cardNameFootnotes.getData())??> 
162                                            <sup>${productItem.cardNameFootnotes.getData()}</sup> 
163                                        </#if> 
164                                    </h3> 
165                                     
166                                    <#if (productItem.offerCopy.getData())??> 
167                                        <div class="offer-copy"> 
168                                            ${productItem.offerCopy.getData()} 
169                                        </div> 
170                                    </#if>                                        
171                                     
172                                </div> 
173                            </div> 
174                        </div> 
175                         
176                    </#if> 
177                </#list> 
178            </#if> 
179            <#assign count = count + 1> 
180        </#if> 
181    </#list> 
182</#macro> 
183 
184<#if (finalList?? && finalList?has_content && finalList?size > 1)> 
185    <#assign count = 0> 
186    <#assign countGlider = 0> 
187    <div class="${productTypeValue}-featured-cards saa-featured-cards-2024 <#if productTypeValue == 'Business'>hide</#if>" id="${uniqueID}"> 
188        <h2 id="featured-glider-label" class="super-head">FEATURED CREDIT CARD OFFERS</h2> 
189        <div class="card-container"> 
190            <@renderCards finalListMacro=finalList /> 
191        </div> 
192        <div class="featured-glider-container" aria-roledescription="carousel" aria-labelledby="featured-glider-label"> 
193            <div id="featured-glider-slides" class="featured-glider">    
194                <@renderCards finalListMacro=finalList /> 
195            </div> 
196            <button aria-label="Previous slide" class="glider-prev" aria-controls="featured-glider-slides"></button> 
197            <button aria-label="Next slide" class="glider-next" aria-controls="featured-glider-slides"></button> 
198            <div role="tablist" class="dots"></div> 
199        </div> 
200    </div> 
201</#if> 
202<style> 
203    #content .saa-featured-cards-2024 { 
204        max-width: 1336px; 
205        padding: 0 20px; 
206        margin: 0 auto; 
207
208    @media (min-width: 1376px) { 
209        #content .saa-featured-cards-2024 { 
210            margin-top: 30px; 
211
212
213    #content .saa-featured-cards-2024 .featured-glider-container { 
214        display: block !important; 
215        position: relative; 
216        margin-bottom: 20px; 
217
218    #content .saa-featured-cards-2024 .featured-glider-container .card { 
219        flex: 375px; 
220
221    @media (min-width: 1200px) { 
222        #content .saa-featured-cards-2024 .featured-glider-container { 
223            display: none !important; 
224
225
226    #content .saa-featured-cards-2024 .featured-glider { 
227        padding-top: 40px; 
228        margin-bottom: 15px; 
229        overflow-x: hidden; 
230
231    #content .saa-featured-cards-2024 .card-container { 
232        display: flex; 
233        gap: 30px; 
234        flex-wrap: nowrap; 
235        justify-content: space-between; 
236        margin-top: 40px; 
237        margin-bottom: 60px; 
238        display: none !important; 
239        justify-content: center; 
240
241    @media (min-width: 1200px) { 
242        #content .saa-featured-cards-2024 .card-container { 
243            display: flex !important; 
244
245
246    #content .saa-featured-cards-2024 .card { 
247        background-color: var(--ecdma-bg-color); 
248        border-radius: 10px; 
249        padding: 0 20px 15px 20px; 
250        margin: 0 20px; 
251        flex: 33%; 
252        flex-grow: 0; 
253        visibility: unset !important; 
254
255    @media (min-width: 1200px) { 
256        #content .saa-featured-cards-2024 .card { 
257            margin: 0; 
258
259
260    #content .saa-featured-cards-2024 .card__content { 
261        display: flex; 
262        height: 100%; 
263
264    #content .saa-featured-cards-2024 .card__content-left { 
265        display: flex; 
266        flex-direction: column; 
267        margin-right: 20px; 
268        justify-content: space-between; 
269        height: 100%; 
270
271    #content .saa-featured-cards-2024 .card__content-right { 
272        flex: 1; 
273        margin-top: 20px; 
274
275     #content .saa-featured-cards-2024 .card__image { 
276        border-radius: 12px; 
277        width: 100%; 
278        height: auto; 
279        border-radius: 8px; 
280        max-width: 112px !important; 
281        max-height: 112px; 
282        margin-top: -10px; 
283        object-fit: contain; 
284
285    #content .saa-featured-cards-2024 .card__image--vertical { 
286        margin-top: -20px; 
287
288    #content .saa-featured-cards-2024 .product-offer-type { 
289        margin-bottom: 6px; 
290        color: white; 
291        letter-spacing: 1px; 
292        font-size: 13px; 
293        font-weight: 400; 
294        line-height: 1.5; 
295
296    #content .saa-featured-cards-2024 .product-offer-type sup { 
297        font-size: 10px; 
298        line-height: 13px; 
299
300    #content .saa-featured-cards-2024 .offer-copy { 
301        color: white; 
302
303    #content .saa-featured-cards-2024 .card__learn-more { 
304        background-color: #fff; 
305        border: 1px solid white; 
306        color: var(--ecdma-text-color); 
307        font-size: 13px; 
308        cursor: pointer; 
309        text-decoration: none; 
310        text-align: center; 
311        text-transform: capitalize; 
312        line-height: 15px; 
313        margin-top: 5px; 
314        min-width: 112px; 
315        height: 35px; 
316        line-height: 35px; 
317
318    #content .saa-featured-cards-2024 .card__learn-more:hover { 
319        background-color: var(--ecdma-hover-color); 
320        color: #fff; 
321
322    #content .saa-featured-cards-2024 .card__learn-more:focus { 
323        outline: 1px solid white; 
324        outline-offset: 3px; 
325
326</style> 
327<script> 
328/* This template is added to a single page multiple times. iife keeps glider/vars from overriding each other */ 
329(() => { 
330    let featuredGlider = null; 
331    if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')) { 
332        featuredGlider = new Glider(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider'), { 
333            slidesToShow: 'auto', 
334            itemWidth: 375, 
335            slidesToScroll: 1, 
336            scrollLockDelay: 100, 
337            draggable: true, 
338            scrollLock: true, 
339            arrows: { 
340                prev: '#${uniqueID}.saa-featured-cards-2024 .glider-prev', 
341                next: '#${uniqueID}.saa-featured-cards-2024 .glider-next' 
342            }, 
343            dots: '#${uniqueID}.saa-featured-cards-2024 .dots', 
344        });  
345
346    const images = document.querySelectorAll('#${uniqueID}.saa-featured-cards-2024 .card__image'); 
347        images.forEach(img => { 
348            const width = img.naturalWidth; 
349            const height = img.naturalHeight;   
350            if(height > width) { 
351                img.classList.add('card__image--vertical'); 
352
353        });   
354 
355    AUI().ready(() => { 
356        /* Make the slider the correct size after the theme and everything is loaded*/ 
357        if(document.querySelector('#${uniqueID}.saa-featured-cards-2024 .featured-glider')){ 
358            featuredGlider.refresh(false); 
359
360 
361        const productTypeValue = '${productTypeValue}'; 
362        const thisTabSelector =  productTypeValue === "Personal"? '#tab-Personal' : '#tab-Business'; 
363        /* If the resize the screen and one of the featured card glider is hidden. The hidden glider dose not resize. On show of glider resize it. */ 
364        document.querySelectorAll(thisTabSelector).forEach(tab => { 
365            tab.onclick = () => { 
366                setTimeout(() => {featuredGlider.refresh(false);}, 0); 
367            }; 
368        });   
369    }) 
370})(); 
371</script> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> lc  [in template "10154#10192#460248067" at line 38, column 34]

----
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 lcWithPrefix = prefix + lc  [in template "10154#10192#460248067" at line 38, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
3<#assign projectIds = ["12", "13", "14", "15", "16"]> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! > 
5 
6<#if qstringmap["bankercode"]?has_content> 
7    <#assign bCode= qstringmap["bankercode"]?first> 
8    <#assign bCode= htmlUtil.escapeJS(bCode)> 
9    <#assign bCode= htmlUtil.escape(bCode)> 
10	<#assign isEmployee = false> 
11	 
12    <#assign fiData= utilServ.makeCall('crcDDCBankerAssistedAppSql','0&'+bCode)> 
13    <#if fiData?first?has_content> 
14        <#assign fi = fiData?first> 
15        <#if projectIds?seq_index_of(fi.projectId) != -1> 
16            <#assign subbu_special = fi.offerId> 
17        </#if> 
18 
19		<#if fi.projectType == "emp"> 
20            <#assign isEmployee = true> 
21        </#if> 
22    </#if> 
23	 
24	<#assign bData = utilServ.makeCall('crcDDCBankerAssistedAppDetailSql','0&'+bCode)> 
25    <#list bData as b>      
26        <#assign lc = b.locationcode > 
27        <#assign bName = b.branch > 
28        <#assign bPhone = b.businessphone > 
29        <#assign boeid = b.oeid?trim> 
30        <#assign fName = b.firstname?trim> 
31        <#assign lName = b.lastname?trim> 
32        <#assign rLC = b.reallocationcode > 
33        <#assign mappedLC = b.mappedLocationCode > 
34    </#list>  
35</#if> 
36 
37<#assign prefix = "00000" > 
38<#assign lcWithPrefix = prefix + lc > 
39<#assign withPrefixLength = lcWithPrefix?length > 
40<#assign startHere = withPrefixLength - 5> 
41<#assign lc = lcWithPrefix?substring(startHere)> 
42 
43 
44<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
45<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
46<#assign clientProfile = clientProfileList?first> 
47<#assign pbu = clientProfile.getPbu()> 
48<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
49 
50<#if (subbu_special?has_content)> 
51	<#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu_special)>  
52<#else> 
53	<#assign fiCardsDataWT = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)>  
54</#if> 
55 
56<#assign personalBusinessWT = utilServ.makeCall('SAA_PillGrouping', '0')> 
57<#assign personalWT = []> 
58<#assign businessWT = []> 
59 
60<#list personalBusinessWT as pbWT> 
61    <#if pbWT.groupName?has_content && pbWT.offerType?has_content && pbWT.pillName?has_content>		<#if pbWT.groupName == "Personal"> 
62            <#assign personalWT += [pbWT]> 
63			 
64        <#elseif pbWT.groupName == "Business"> 
65            <#assign businessWT += [pbWT]> 
66			 
67        </#if> 
68    </#if> 
69</#list> 
70 
71 
72<#assign fiPersonalRaw = personalWT?filter(personalPill -> fiCardsDataWT?filter(fib -> personalPill.offerType == fib.offerType)?size > 0)> 
73<#assign fiBusinessRaw = businessWT?filter(businessPill -> fiCardsDataWT?filter(fib -> businessPill.offerType == fib.offerType)?size > 0)> 
74 
75<#assign fiPersonalWT = []> 
76<#list fiPersonalRaw as item> 
77    <#if !(fiPersonalWT?map(it -> it.offerType)?seq_contains(item.offerType))> 
78        <#assign fiPersonalWT += [item]> 
79    </#if> 
80</#list> 
81 
82<#assign fiBusinessWT = []> 
83<#list fiBusinessRaw as item> 
84    <#if !(fiBusinessWT?map(it -> it.offerType)?seq_contains(item.offerType))> 
85        <#assign fiBusinessWT += [item]> 
86    </#if> 
87</#list> 
88 
89<#assign fiPersonalSizeWT = fiPersonalWT?size /> 
90<#assign fiBusinessSizeWT = fiBusinessWT?size /> 
91 
92<#assign hasTabs = entries?has_content> 
93<#assign PersonalTab = "Personal"> 
94<#assign BusinessTab = "Business"> 
95 
96<#if hasTabs> 
97    <div class="saa-tabs-2024-feature"> 
98	<#if (fiPersonalSizeWT > 0 && fiBusinessSizeWT > 0 && !isEmployee) > 
99		<div role="tablist" class="card-type-tabs" aria-label="Choose a credit card type to explore details"> 
100			 
101				<button  
102					id="tab-Personal"  
103					role="tab"  
104					class="card-type-tabs__button"  
105					aria-selected="true"  
106					aria-controls="content-Personal"  
107					data-tab="content-Personal"> 
108					${PersonalTab} 
109				</button> 
110			 
111				<button  
112					id="tab-Business"  
113					role="tab"  
114					class="card-type-tabs__button"  
115					aria-selected="false"  
116					aria-controls="content-Business"  
117					data-tab="content-Business"> 
118					${BusinessTab} 
119				</button> 
120		 
121		</div> 
122	</#if> 
123		<div class="all-card-types-content"> 
124			<#if (fiPersonalSizeWT > 0)> 
125				<div  
126					id="content-Personal"  
127					class="card-type-content"  
128					role="tabpanel"  
129					aria-labelledby="tab-Personal"  
130					style="display: block;"> 
131					 
132					<#list entries as entry> 
133						<#if entry_index == 0>  
134							<#assign assetRenderer = entry.getAssetRenderer() /> 
135							<@liferay_journal["journal-article"] 
136								articleId=assetRenderer.getAssetObject().articleId 
137								ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey 
138								groupId=assetRenderer.getAssetObject().groupId /> 
139						</#if> 
140					</#list> 
141				</div> 
142			</#if> 
143			<#if (fiBusinessSizeWT > 0 && !isEmployee)> 
144				<div  
145					id="content-Business"  
146					class="card-type-content"  
147					role="tabpanel"  
148					aria-labelledby="tab-Business"  
149					style="display: none;"> 
150					 
151					<#list entries as entry> 
152						<#if entry_index == 1>  
153							<#assign assetRenderer = entry.getAssetRenderer() /> 
154							<@liferay_journal["journal-article"] 
155								articleId=assetRenderer.getAssetObject().articleId 
156								ddmTemplateKey=assetRenderer.getAssetObject().ddmTemplateKey 
157								groupId=assetRenderer.getAssetObject().groupId /> 
158						</#if> 
159					</#list> 
160				</div> 
161			</#if> 
162		</div> 
163	</div> 
164</#if> 
165 
166<script> 
167	AUI().ready(() => { 
168		if(${fiPersonalSizeWT} > 0) { 
169			hideOrShowDisclaimers("Personal"); 
170		} else { 
171			hideOrShowDisclaimers("Business"); 
172
173	}); 
174	function setPillAndSelectToDefault() { 
175		const buttons = document.querySelectorAll('.saa-tabs-2024 .card-feature-pills__button'); 
176		buttons.forEach(button => { 
177			button.classList.remove('active'); 
178			button.setAttribute('aria-selected', 'false'); 
179		}); 
180 
181		buttons.forEach(button => { 
182			if (button.getAttribute('data-pill') === 'All Cards') { 
183				button.classList.add('active'); 
184				button.setAttribute('aria-selected', 'true'); 
185
186		}); 
187 
188		const cardFeatureSelect = document.querySelectorAll('.saa-tabs-2024 .card-feature-select' ); 
189		cardFeatureSelect.forEach(select=> { 
190			if(select.value) { 
191				select.value = 'All Cards'; 
192
193		}); 
194
195	document.addEventListener("DOMContentLoaded", function () { 
196		const tabs = document.querySelectorAll(".card-type-tabs__button"); 
197		const tabContents = document.querySelectorAll(".card-type-content");		 
198 
199		tabs.forEach((tab) => { 
200			tab.addEventListener("click", () => { 
201			 
202				tabs.forEach((t) => t.setAttribute("aria-selected", "false")); 
203 
204				tabContents.forEach((content) => { 
205					content.style.display = "none"; 
206				}); 
207 
208				tab.setAttribute("aria-selected", "true"); 
209 
210				const targetContent = document.getElementById(tab.dataset.tab); 
211				targetContent.style.display = "block"; 
212				 
213				const productType = tab.textContent.trim(); // Get the tab label as the product type 
214				widgetButtonSlection(productType);			 
215			}); 
216		}); 
217	}); 
218 
219	function widgetButtonSlection( productType) { 
220		hideOrShowFeaturedCards(productType); 
221		hideOrShowDisclaimers(productType); 
222		hideAllPillSections(); 
223		document.getElementById("allcards-container-"+productType).style.display = "block";	 
224		setPillAndSelectToDefault(); 
225
226	 
227	function hideAllPillSections() { 
228		document.getElementById("allcards-container-Personal").style.display = "none"; 
229		document.getElementById("cashback-container-Personal").style.display = "none"; 
230		document.getElementById("points-container-Personal").style.display = "none"; 
231		document.getElementById("travel-container-Personal").style.display = "none"; 
232		document.getElementById("noannualfee-container-Personal").style.display = "none"; 
233		document.getElementById("buildcredit-container-Personal").style.display = "none"; 
234		document.getElementById("lowintrorate-container-Personal").style.display = "none"; 
235 
236		document.getElementById("allcards-container-Business").style.display = "none"; 
237		document.getElementById("cashback-container-Business").style.display = "none"; 
238		document.getElementById("points-container-Business").style.display = "none"; 
239		document.getElementById("travel-container-Business").style.display = "none"; 
240		document.getElementById("noannualfee-container-Business").style.display = "none"; 
241		document.getElementById("buildcredit-container-Business").style.display = "none"; 
242		document.getElementById("lowintrorate-container-Business").style.display = "none"; 
243
244	 
245	function hideOrShowFeaturedCards(type) { 
246		const personalFeaturedCards = document.querySelector('.Personal-featured-cards'); 
247		const businessFeaturedCards = document.querySelector('.Business-featured-cards'); 
248 
249		if (type === "Personal") { 
250			if (personalFeaturedCards) { 
251				personalFeaturedCards.classList.remove('hide'); 
252
253			if (businessFeaturedCards) { 
254				businessFeaturedCards.classList.add('hide'); 
255
256		} else if (type === "Business") { 
257			if (businessFeaturedCards) { 
258				businessFeaturedCards.classList.remove('hide'); 
259
260			if (personalFeaturedCards) { 
261				personalFeaturedCards.classList.add('hide'); 
262
263
264
265 
266	function hideOrShowDisclaimers(type) { 
267		const personalDisclaimers = document.querySelector('.tier1-disclaimer-landing-consumer'); 
268		const businessDisclaimers = document.querySelector('.tier1-disclaimer-landing-business'); 
269		if (type === "Personal") { 
270			if (personalDisclaimers) { 
271				personalDisclaimers.classList.remove('hide'); 
272
273			if (businessDisclaimers) { 
274				businessDisclaimers.classList.add('hide'); 
275
276		} else if (type === "Business") { 
277			if (businessDisclaimers) { 
278				businessDisclaimers.classList.remove('hide'); 
279
280			if (personalDisclaimers) { 
281				personalDisclaimers.classList.add('hide'); 
282
283
284
285</script> 
286 
287<style> 
288	.saa-tabs-2024-feature { 
289		max-width: 1336px; 
290		margin: 0 20px; 
291
292	@media (min-width: 1376px) { 
293		.saa-tabs-2024-feature { 
294			margin: 0 auto; 
295
296
297	.card-type-tabs { 
298		display: flex; 
299		justify-content: flex-start; 
300		border-bottom: 1px solid #cccccc; 
301
302 
303	.card-type-tabs__button { 
304		align-items: center; 
305		background-color: transparent; 
306		border: none; 
307		border-bottom: 4px solid transparent; 
308		color: #333; 
309		display: flex; 
310		flex-direction: column; 
311		justify-content: center; 
312		padding: 10px 30px; 
313		text-align: center; 
314		font-size: 20px; 
315		font-weight: 700; 
316		line-height: 25px;  
317		margin-bottom: -1px; 
318		flex: 1; 
319
320	@media (min-width: 992px) { 
321		.card-type-tabs__button { 
322			flex: 0; 
323
324
325	.card-type-tabs__button:focus { 
326		outline: 1px solid #173989;  
327
328	.card-type-tabs__button[aria-selected="true"] { 
329		color: var(--ecdma-text-color); 
330		border-bottom: 4px solid  var(--ecdma-text-color); 
331
332	.card-type-tabs__button:hover { 
333		color: var(--ecdma-hover-color); 
334		border-bottom: 4px solid  var(--ecdma-hover-color); 
335
336 
337	.all-card-types-content { 
338
339 
340	.card-type-content { 
341		display: none; 
342
343 
344	.card-type-content[style="display: block;"] { 
345		display: block !important; 
346
347 
348</style> 
An error occurred while processing the template.
The following has evaluated to null or missing:
==> qstringmap["bankercode"]  [in template "10154#10192#18386847" at line 5, column 17]

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

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

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

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

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

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