Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417670" at line 19, column 15]

----
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 lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417670" at line 19, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext() > 
4<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
5<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
6<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
7<#assign url404 = '/error/404.html' > 
8<#assign environment = url?replace('/11t3.*','','r')> 
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<#assign lc = qstringmap["ecdma-lc"]?first>  
20<#assign lc = htmlUtil.escape(lc)> 
21<#assign lc = htmlUtil.escapeJS(lc)> 
22 
23<#assign prefix = "00000" > 
24<#assign lcWithPrefix = prefix + lc > 
25<#assign withPrefixLength = lcWithPrefix?length > 
26<#assign startHere = withPrefixLength - 5> 
27<#assign lc = lcWithPrefix?substring(startHere)> 
28 
29<#if qstringmap["ecid"]?has_content> 
30    <#assign ecidExt = qstringmap["ecid"]?first> 
31    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
32    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
33    <#assign ecidExt = "&ecid=" + ecidExt> 
34 
35 
36    <#assign campaignId = qstringmap["ecid"]?first > 
37    <#assign campaignId = htmlUtil.escape(campaignId)> 
38    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
39<#else> 
40    <#assign ecidExt=""> 
41    <#assign campaignId = "" > 
42</#if> 
43 
44<#assign isFromDCOLink = false> 
45<#assign dcoSourceCode = ''> 
46<#if qstringmap["sourcecode"]?has_content> 
47    <#assign dcoSourceCode = qstringmap["sourcecode"]?first> 
48    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
49    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
50<#elseif qstringmap["sourceCode"]?has_content> 
51    <#assign dcoSourceCode = qstringmap["sourceCode"]?first> 
52    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
53    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
54</#if> 
55 
56<#if dcoSourceCode?has_content> 
57    <#assign isFromDCOLink = true> 
58</#if> 
59 
60<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! /> 
61<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
62<#assign clientProfile = clientProfileList?first> 
63<#assign partnerName = clientProfile.getMarketingNameLong()> 
64<#assign pbu = clientProfile.getPbu()> 
65<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
66 
67<#assign logoFileName = clientProfile.getLogoBFormat1()?replace(".", "-")?replace("-([^-]*)$", ".$1", "r")?lower_case> 
68<#assign cdnLogoUrl = (propsUtil.get('rackspace.cdn.web.url'))!> 
69<#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+pbu+'&'+subbu)> 
70 
71 <#assign clientDataService = (serviceLocator.findService("com.elan.crc.user.service.CrcPbuLocalService"))! /> 
72<#assign clientProfileDataList = clientDataService.getByPbuAndSubBu(pbu,subbu)> 
73<#assign partnerUrl = clientProfileDataList.getPartnerMainUrl()> 
74<script> 
75//console.log('Partner URL', ${partnerUrl}); 
76</script> 
77<#if partnerUrl?has_content && !partnerUrl?matches(r"(?i)^https?\:\/\/.*")>     
78    <#assign partnerUrl = 'https://' + partnerUrl> 
79</#if> 
80<script> 
81//console.log('Partner URL', ${partnerUrl}); 
82 
83</script> 
84<#-- Begin: filter duplicated cards--> 
85<#assign temp = []> 
86<#assign offerTypeList = []>   
87<#if (fiCardsData?size > 0)>      
88    <#assign index = 0> 
89    <#list fiCardsData as fib> 
90        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
91            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
92            <#assign temp = temp + fiCardsData[index..index]>  
93        </#if>   
94        <#assign index = index + 1>               
95    </#list>  
96    <#assign fiCardsData = temp> 
97    <#if (fiCardsData?size > 0)> 
98        <div class="content-container content-container-main" title="${partnerName!''}"> 
99            <#if url?contains("index")> 
100                <#assign product="All Cards"> 
101                <header class="jn-header"> 
102                    <div class="header-logo">  
103 
104                        <#if partnerUrl?has_content> 
105                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
106                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
107                            </a> 
108                        <#else> 
109                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
110                        </#if> 
111                    </div>  
112                </header>         
113            <#else> 
114                <header class="jn-header"> 
115                    <#if !isFromDCOLink> 
116                        <div class="back-overview hide-desktop">  
117                            <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
118                        </div>  
119                    </#if> 
120 
121                    <div class="header-main-logo" title="${partnerName!''}"> 
122                        <#if partnerUrl?has_content> 
123                            <a href="${partnerUrl!''}" title="${partnerName!''}"> 
124                                <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo"> 
125                            </a> 
126                        <#else>                            
127                            <img src="${cdnLogoUrl!''}/${logoFileName!''}" alt="${partnerName!''} Logo" title="${partnerName!''} Logo">                             
128                        </#if> 
129                    </div> 
130                    <#if !isFromDCOLink> 
131                        <div class="styled-select slate"> 
132                            <nav class="styled-select__dropdown"> 
133                                <div class="back-overview hide-mobile">  
134                                    <a href="${environment}/11t3/index?ecdma-lc=${lc}${ecidExt}">Home</a> 
135                                </div>   
136                                <a href="javascript:void(0)" class="dropdown-select" aria-expanded="false"> 
137                                    <span class="selected-option"></span>  
138                                    <div class="jn-arrow arrow arrow-right"></div> 
139                                </a> 
140                                <a href="javascript:void(0)" class="jn-hamburger hamburger" aria-expanded="false"> 
141                                    <div class="first-line transform transformed1"></div> 
142                                    <div></div> 
143                                    <div class="transform transformed2"></div> 
144                                    <div></div> 
145                                </a> 
146                                <ul> 
147                                    <#list fiCardsData as fib> 
148                                        <#switch fib.offerType> 
149                                            <#case "101"> 
150                                                <#assign productURL = "202302/consumer-edr"> 
151                                                <#assign productName = "Everyday Rewards+"> 
152                                                <#break> 
153                                            <#case "103"> 
154                                                <#assign productURL = "202302/consumer-edr"> 
155                                                <#assign productName = "Everyday Rewards+"> 
156                                                <#break> 
157                                            <#case "104"> 
158                                                <#assign productURL = "max-cash"> 
159                                                <#assign productName = "Max Cash Preferred Card">       
160                                                <#break> 
161                                            <#case "108"> 
162                                                <#assign productURL="202308/consumer-platinum"> 
163                                                <#assign productName="Platinum Card"> 
164                                                <#break> 
165                                            <#case "109"> 
166                                                <#assign productURL="202308/consumer-platinum"> 
167                                                <#assign productName="Platinum Card"> 
168                                                <#break> 
169                                            <#case "115"> 
170                                                <#assign productURL = "secured"> 
171                                                <#assign productName = "Secured Card" > 
172                                                <#break> 
173                                            <#case "138"> 
174                                                <#assign productURL = "202305/travel-rewards-plus"> 
175                                                <#assign productName = "Travel Rewards+" > 
176                                                <#break> 
177                                            <#case "141"> 
178                                                <#assign productURL = "college-real-rewards"> 
179                                                <#assign productName = "College Real Rewards" >     
180                                                <#break> 
181                                            <#case "147"> 
182                                                <#assign productURL = "max-cash-secured"> 
183                                                <#assign productName = "Max Cash Secured Card" >     
184                                                <#break> 
185                                            <#case "154"> 
186                                                <#assign productURL = "202305/reserve-rewards-plus"> 
187                                                <#assign productName = "Reserve Rewards+" > 
188                                                <#break> 
189                                            <#case "121"> 
190                                                <#assign productURL = "202208/business-platinum"> 
191                                                <#assign productName = "Business Card" > 
192                                                <#break> 
193                                            <#case "128"> 
194                                                <#assign productURL = "business-cash-preferred"> 
195                                                <#assign productName = "Business Cash Preferred" > 
196                                                <#break> 
197                                            <#case "143"> 
198                                                <#assign productURL = "business-real-rewards"> 
199                                                <#assign productName = "Business Real Rewards Card" > 
200                                                <#break> 
201                                            <#case "144"> 
202                                                <#assign productURL = "smart-business-rewards"> 
203                                                <#assign productName = "Smart Business Rewards Card" >     
204                                                <#break> 
205                                            <#default>                                                         
206                                        </#switch> 
207                                        <#if url?matches(".*/${productURL}\\?.*")> 
208                                            <li class="selected" data-value="${productName}" selected="selected"><a href="javascript:void(0)">${productName}</a></li> 
209                                        <#else>                                 
210                                            <li class="dropdown-item" data-value="${productName}"> 
211                                                <a href="${environment}/11t3/${productURL}?ecdma-lc=${lc}${ecidExt}"> 
212                                                ${productName}  
213                                                </a> 
214                                            </li>                                    
215                                        </#if> 
216                                    </#list> 
217                                </ul> 
218                            </nav> 
219                             
220                        </div> 
221                    </#if> 
222                </header> 
223                <script> 
224                    function toggleFlyOutMenu() { 
225                        $('.styled-select').toggleClass('show-select'); 
226                        var ariaExpanded = $('.styled-select__dropdown .dropdown-select').attr('aria-expanded'); 
227                        if(ariaExpanded !== null) { 
228                            var isAriaExpanded; 
229                            if(ariaExpanded === "true") { 
230                                isAriaExpanded = true; 
231                            } else {  
232                                isAriaExpanded = false  
233
234                            $('.styled-select__dropdown .dropdown-select').attr('aria-expanded', !isAriaExpanded); 
235                            $('.styled-select__dropdown .jn-hamburger').attr('aria-expanded', !isAriaExpanded); 
236
237
238                    AUI().ready(function () { 
239                        var pageSelected = $('.selected').attr('data-value'); 
240                        $('.jn-hamburger, .dropdown-select').click(function () { 
241                            toggleFlyOutMenu(); 
242                        }); 
243                        $('.styled-select__dropdown').keydown(function(event) { 
244                            var firstNavigationLink = $('.styled-select__dropdown ul li:visible a').first(); 
245                            var lastNavigationLink = $('.styled-select__dropdown ul li:visible a').last(); 
246 
247                            if(event.keyCode === 9 ) { 
248                                // if they tab outside of the nav close the navigation 
249                                //shift + tab pressed 
250                                if(event.shiftKey && firstNavigationLink.is(document.activeElement)) { 
251                                    toggleFlyOutMenu(); 
252                                } else if(!event.shiftKey && lastNavigationLink.is(document.activeElement)) { 
253                                    toggleFlyOutMenu(); 
254                                }                             
255
256                        }); 
257                        $('.selected-option').text(pageSelected); 
258                    }); 
259                </script>            
260            </#if> 
261        </div> 
262        <script> 
263                var reportingData = {}; 
264                                                             
265                //document.addEventListener('DOMContentLoaded', function() { 
266                AUI().ready(function () { 
267                    //console.log('inside ready'); 
268                    var page = location.pathname.split('/')[location.pathname.split('/').length-1]; 
269                    var hostName = location.hostname;                                 
270                    function getDomainFromHostname(hostname) { 
271                        var parts = hostname.split('.'); 
272                        return parts.length === 3 ? parts[1] : parts[0]; 
273
274                    var domain = getDomainFromHostname(hostName); 
275                    var partnerName = "${partnerName!''}"; 
276                    var product = "All Cards"; 
277                    var title = ""; 
278                    var metaDesc = ""; 
279                    var m = document.createElement('meta');  
280                    switch(page) { 
281                        case "max-cash-secured": 
282                            product="Max Cash Secured Card"; 
283                            title = "Earn more on the categories you pick | "+partnerName+" Max Cash Secured Card"; 
284                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
285                            break;  
286                        case "max-cash": 
287                            product="Max Cash Preferred Card"; 
288                            title = "Earn a $150 Bonus and 5% cash back | "+partnerName+" Max Cash Preferred Card"; 
289                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn a $150 Bonus and 5% cash back on the two categories you select"; 
290                            break;                         
291                        case "consumer-platinum": 
292                            product="Platinum Card"; 
293                            title = "The purchasing power of Zero | "+partnerName+" Platinum Card"; 
294                            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."; 
295                            break; 
296                        case "consumer-edr": 
297                            product="Everyday Rewards+"; 
298                            title = "Sign up and earn bonus points | "+partnerName+" Everyday Rewards+"; 
299                            break; 
300                        case "secured": 
301                            product="Secured Card"; 
302                            title = "Strengthen your finances | "+partnerName+" Secured Card"; 
303                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Use this card as a solid foundation to build your credit."; 
304                            break; 
305                        case "college-real-rewards": 
306                            product="College Real Rewards"; 
307                            title = "Sign up and earn bonus points. | "+partnerName+" College Real Rewards"; 
308                            break; 
309                        case "smart-business-rewards": 
310                            product="Smart Business Rewards Card"; 
311                            title = "2X rewards in your top 2 spend categories | "+partnerName+" Business Smart Business Rewards Card"; 
312                            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."; 
313                            break;                             
314                        case "business-cash-preferred": 
315                            product="Business Cash Preferred"; 
316                            title = "Flexible rewards for your business | "+partnerName+" Business Cash Preferred"; 
317                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Earn Cash back on common business expenses."; 
318                            break; 
319                        case "business-real-rewards": 
320                            product="Business Real Rewards Card"; 
321                            title = "Earn up to 3X points with no caps | "+partnerName+" Business Real Rewards Card"; 
322                            metaDesc = "Apply Today for a "+partnerName+" Credit Card. Get more rewards in the categories you spend the most on." ; 
323                            break; 
324                        case "business-platinum": 
325                            product="Business Card"; 
326                            title = "Pay down your other credit card balances faster | "+partnerName+" Business Card"; 
327                            metaDesc = "Apply Today for a "+partnerName+" Business Card. 0% Intro APR on Purchases and Balance Transfers for 15 Billing Cycles"; 
328                            break; 
329                        case "travel-rewards-plus": 
330                            product="Travel Rewards+" 
331                            title = partnerName + " | Travel Rewards+ Card"; 
332                            metaDesc = "Make travel more rewarding with unlimited 4x points on travel and frequent popular categories." 
333                            break; 
334                        case "reserve-rewards-plus": 
335                            product="Reserve Rewards+" 
336                            title = partnerName + " | Reserve Rewards+ Card"; 
337                            metaDesc = "Get exceptional rewards on travel and frequent purchases with this exclusive metal card."; 
338                            break; 
339                        default:   
340                            product = "All Cards";    
341                            title = partnerName + " Credit Card Index Page";                        
342
343                    document.title = title; 
344                    m.name = 'description';  
345                    m.content = metaDesc;  
346                    document.head.appendChild(m); 
347 
348                    var lc = "${lc!'0'}"; 
349 
350                    /* update SiteCatalyst data object */ 
351                        reportingData.current_page = "microsite:${partnerName}:" + domain + ':' + page.replace('-',' '); 
352                        reportingData.page_type = 'product';  
353                        reportingData.site_section = 'credit cards'; 
354                        reportingData.platform = 'microsite'; 
355                        reportingData.campaign_id = '${campaignId}'; 
356                        reportingData.location_code = lc; 
357                        reportingData.partner_name = partnerName; 
358                        reportingData.product = product; 
359                        reportingData.text_to_apply_source = '${text_to_apply_source}'; 
360                        reportingData.visitor_type = 'prospect';         
361                        reportingData.Banker_id = '0'; 
362                        reportingData.Banker_code = '0';        
363 
364 
365                    /* SiteCatalyst  pageView tracking */ 
366                        AUI().ready(function() { 
367                            if (window.publisherFW) { 
368                                //console.log("pageView"); 
369                                window.publisherFW.publishEvent("pageView", reportingData); 
370                            }  
371                        }); 
372 
373                    jQuery('.jn-button, .applyNowLink').on('click', function(e){ 
374                        var buttonName = $(this).data('button-name'); 
375                        var productName = $(this).data('product-name'); 
376                        /* SiteCatalyst  onClick tracking */ 
377                        reportingData.applyButton = buttonName; 
378                        reportingData.product = productName; 
379 
380                            if (window.publisherFW) { 
381                                //console.log('clicked', reportingData); 
382                                window.publisherFW.publishEvent("onClick", reportingData); 
383                            }   
384 
385                    }); 
386 
387                    jQuery('.applyNowLink').on('click', function(e){ 
388                        ga("send", { 
389                            hitType: "event", 
390                            eventAction: "ApplyNow", 
391                            eventCategory: "click", 
392                            eventLabel: "BottomButton" 
393                        }); 
394                    }); 
395             
396                }); 
397        </script>    
398    <#else> 
399        <script> 
400            console.log("Empty card list"); 
401            location.href = '${url404}'; 
402        </script> 
403    </#if>    
404<#else> 
405    <script> 
406        console.log("FI Cards Data empty", "pbu:", "${pbu}", ",subbu:","${subbu}"); 
407        location.href = '${url404}'; 
408    </script> 
409</#if> 
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417688" at line 9, column 14]

----
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 lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417688" at line 9, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign oadURL = propsUtil.get('elan.oad.url') > 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
5<#assign url404 = '/error/404.html'> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7<#assign currentEnvironment = 'prod' > 
8 
9<#assign lc= qstringmap["ecdma-lc"]?first>   
10<#assign lc = htmlUtil.escape(lc)> 
11<#assign lc = htmlUtil.escapeJS(lc)> 
12 
13<#assign prefix = "00000" > 
14<#assign lcWithPrefix = prefix + lc > 
15<#assign withPrefixLength = lcWithPrefix?length > 
16<#assign startHere = withPrefixLength - 5> 
17<#assign lc = lcWithPrefix?substring(startHere)> 
18 
19 
20<#if qstringmap["ecid"]?has_content> 
21    <#assign ecidExt = qstringmap["ecid"]?first> 
22    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
23    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
24    <#assign ecidExt = "&ecid=" + ecidExt> 
25<#else> 
26    <#assign ecidExt=""> 
27</#if> 
28<#if oadURL?contains("uat-")> 
29    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
30    <#assign currentEnvironment = 'uat' > 
31<#else> 
32    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
33</#if> 
34    <script> 
35        //console.log('%ccurrentEnvironment: ', 'font-weight: bold; color: green;', '${currentEnvironment}'); 
36    </script> 
37<#assign campaignId = "" > 
38<#assign ecidExt=""> 
39<#if qstringmap["ecid"]?has_content> 
40    <#assign campaignId = qstringmap["ecid"]?first > 
41    <#assign campaignId = htmlUtil.escape(campaignId)> 
42    <#assign campaignId = htmlUtil.escapeJS(campaignId)> 
43     
44    <#assign ecidExt = qstringmap["ecid"]?first> 
45    <#assign ecidExt = htmlUtil.escape(ecidExt)> 
46    <#assign ecidExt = htmlUtil.escapeJS(ecidExt)> 
47    <#assign ecidExt = "&ecid=" + ecidExt> 
48</#if> 
49 
50<#assign dcoSourceCode = ""> 
51<#assign dcoSourceCodeQueryParameter = ""> 
52 
53<#if qstringmap["sourcecode"]?has_content> 
54    <#assign dcoSourceCode = qstringmap["sourcecode"]?first> 
55    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
56    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
57    <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}"> 
58<#elseif qstringmap["sourceCode"]?has_content> 
59    <#assign dcoSourceCode = qstringmap["sourceCode"]?first> 
60    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
61    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
62    <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}"> 
63</#if> 
64 
65<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
66<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
67<#assign clientProfile = clientProfileList?first> 
68<#assign partnerName = clientProfile.getMarketingNameLong()> 
69<#assign pbu = clientProfile.getPbu()> 
70<#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
71<#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
72 
73<#assign fiCardsData=utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu + '&'+subbu + '&' + lc)> 
74<#assign temp = []> 
75<#assign consumerCards = []> 
76<#assign businessCards = []>  
77<#assign offerTypeList = []>       
78<#assign index = 0> 
79<#assign consumerOfferTypes = ["101", "103", "108", "109", "115", "104", "141", "147", "138", "154"]> 
80<#assign businessOfferTypes = ["128", "121", "143", "144"]> 
81<#list fiCardsData as fib>  
82    <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
83        <#assign offerTypeList = offerTypeList + [fib.offerType]>  
84        <#if (consumerOfferTypes?seq_contains(fib.offerType))> 
85            <#assign consumerCards = consumerCards + fiCardsData[index..index]> 
86        <#elseif (businessOfferTypes?seq_contains(fib.offerType))> 
87            <#assign businessCards = businessCards + fiCardsData[index..index]> 
88        </#if>                            
89        <#assign temp = temp + fiCardsData[index..index]>  
90    </#if>   
91    <#assign index = index + 1>               
92</#list>  
93 
94<#assign fiCardsData = temp> 
95 <script> 
96    //console.log("fi card data count", ${fiCardsData?size}) 
97</script> 
98 
99<#assign clientdata = utilServ.makeCall('crcDDCTier1Customizations','0&'+pbu+'&'+subbu+'&11')> 
100<#if (clientdata?size > 0)> 
101    <#assign backgroundColor = clientdata[0].backgroundHexColor>               
102</#if> 
103 
104<#if (fiCardsData?size > 0)>    
105    <style> 
106        .excludeModal__overlay { 
107            position: fixed; 
108            top: 0; 
109            left: 0; 
110            right: 0; 
111            bottom: 0; 
112            background: rgba(0,0,0,0.6); 
113            display: flex; 
114            justify-content: center; 
115            align-items: center; 
116
117 
118        .excludeModal__container { 
119            background-color: #fff; 
120            padding: 30px; 
121            min-width: 500px; 
122            max-width: 500px; 
123            max-height: 100vh; 
124            border-radius: 4px; 
125            overflow-y: auto; 
126            box-sizing: border-box; 
127
128 
129        .excludeModal__header { 
130            display: flex; 
131            justify-content: space-between; 
132            align-items: center; 
133
134 
135        .modal .excludeModal__container .excludeModal__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        .excludeModal__close { 
146            background: transparent; 
147            border: 1px solid white; 
148            padding: 4px 8px; 
149            float: right; 
150
151 
152        .excludeModal__close:hover { 
153            border: 1px solid black; 
154
155 
156        .excludeModal__close:before { content: "\2715"; } 
157 
158        @keyframes mmfadeIn { 
159            from { opacity: 0; } 
160            to { opacity: 1; } 
161
162 
163        @keyframes mmfadeOut { 
164            from { opacity: 1; } 
165            to { opacity: 0; } 
166
167 
168        @keyframes mmslideIn { 
169            from { transform: translateY(15%); } 
170            to { transform: translateY(0); } 
171
172 
173        @keyframes mmslideOut { 
174            from { transform: translateY(0); } 
175            to { transform: translateY(-10%); } 
176
177 
178        .micromodal-slide { 
179            display: none; 
180
181 
182        .micromodal-slide.is-open { 
183            display: block; 
184
185 
186        .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
187            animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
188
189 
190        .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
191            animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
192
193 
194        .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
195            animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
196
197 
198        .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
199            animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
200
201 
202        .micromodal-slide .excludeModal__container, 
203        .micromodal-slide .excludeModal__overlay { 
204            will-change: transform; 
205
206    </style> 
207    <#if url?contains("index")>   
208        <#assign isExcluded = 0>                
209        <#assign offerId = ""> 
210        <#assign sourceCode = ""> 
211        <#assign cardArtImage = ""> 
212        <#assign productUrlHero = ""> 
213        <#assign product = ""> 
214        <#assign cardIndex = 0> 
215        <#if (class.getData() == "landing-consumer" && consumerCards?size > 0)> 
216            <#if (offerTypeList?seq_contains("108")) ||  (offerTypeList?seq_contains("109"))> 
217                <#list consumerCards as card> 
218                    <#if (card.offerType=="108") || (card.offerType=="109")> 
219                        <#assign isExcluded = 0> 
220                        <#if card.dmaexclude??> 
221                            <#assign isExcluded = card.dmaexclude?number!0> 
222                        </#if>  
223                        <#assign offerId = card.offerId> 
224                        <#assign sourceCode = card.sourceCode> 
225                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
226                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
227 
228                        <#assign productUrlHero="consumer-platinum2103"> 
229                        <#assign product="Platinum"> 
230                        <#assign cardIndex = 1> 
231                        <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', offerId + '&' + sourceCode)> 
232                        <#if (scrapedData?size > 0)> 
233                            <#list scrapedData as sItem> 
234                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
235                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
236                                    <#break> 
237                                </#if> 
238                            </#list> 
239                            <script> 
240                                $(document).ready(function () { 
241                                    var aprText = "${apr}"; 
242                                    //console.log('aprText: ${aprText!''}'); 
243                                    if (aprText) { 
244                                        $(".apr-full-text").html(aprText); 
245                                        try { 
246                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
247                                            var billing_cycle = matches[1]; 
248                                            var apr_min = apr_min = matches[2]; 
249                                            var apr_max = apr_max = matches[3]; 
250                                            //console.log('billing_cycle', billing_cycle); 
251                                            //console.log('apr_min', apr_min); 
252                                            //console.log('apr_max', apr_max); 
253                                            if (billing_cycle) { 
254                                                //console.log($(".scraped-billing-cycle")); 
255                                                $(".scraped-billing-cycle").html(billing_cycle); 
256
257                                            if (apr_min) { 
258                                                $(".scraped-apr-min").html(apr_min); 
259
260                                            if (apr_max) { 
261                                                $('.scraped-apr-max').html(apr_max); 
262
263 
264                                        } catch (e) { 
265                                            console.log(e); 
266
267
268                                }); 
269                            </script> 
270                        </#if> 
271                        <script> 
272                            $(document).ready(function () { 
273                                $(".see-terms").replaceWith('<a href="${oadURL_TC}?step=display&offerId=${card.offerId}&locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions</a>'); 
274                            }); 
275                        </script> 
276                    </#if>                   
277                </#list> 
278            <#else> 
279                <#assign isExcluded = 0> 
280                <#if consumerCards[0].dmaexclude??> 
281                    <#assign isExcluded = consumerCards[0].dmaexclude?number!0> 
282                </#if>    
283                <#assign displayedCard = consumerCards[0]> 
284                <#assign offerId = displayedCard.offerId> 
285                <#assign sourceCode = displayedCard.sourceCode> 
286                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
287                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
288                <#if (displayedCard.offerType=="108" || displayedCard.offerType=="109")> 
289                    <#assign productUrlHero="consumer-platinum"> 
290                    <#assign product="Platinum"> 
291                    <#assign cardIndex = 1> 
292                <#elseif (displayedCard.offerType=="104")> 
293                    <#assign productUrlHero = "max-cash"> 
294                    <#assign product="Max Cash Preferred"> 
295                    <#assign cardIndex = 0> 
296                <#elseif (displayedCard.offerType=="115")> 
297                    <#assign productUrlHero = "secured"> 
298                    <#assign product="Secured"> 
299                    <#assign cardIndex = 2> 
300                </#if> 
301            </#if> 
302            <#if product?has_content && product != ""> 
303                <#assign card_text = product + " Card"> 
304            </#if>  
305        </#if> 
306        <#if (class.getData() == "landing-business" && businessCards?size > 0)> 
307            <#if (offerTypeList?seq_contains("128")) > 
308                <#list businessCards as card> 
309                    <#if (card.offerType=="128")> 
310                        <#assign isExcluded = 0> 
311                        <#if card.dmaexclude??> 
312                            <#assign isExcluded = card.dmaexclude?number!0>  
313                        </#if> 
314                        <#assign offerId = card.offerId> 
315                        <#assign sourceCode = card.sourceCode> 
316                        <#assign cardArtImage = cdnCardArtUrl + "/"+card.filename+".png"> 
317                        <#assign cardArtImageAlt = cdnCardArtUrl + "/"+card.filename+".jpg"> 
318 
319                        <#assign productUrlHero="business-cash-preferred"> 
320                        <#assign product="Business Cash Preferred"> 
321                        <#assign cardIndex = 1> 
322                    </#if> 
323                </#list> 
324            <#else> 
325                <#assign isExcluded = 0> 
326                <#if businessCards[0].dmaexclude??> 
327                    <#assign isExcluded = businessCards[0].dmaexclude?number!0> 
328                </#if>  
329                <#assign displayedCard = businessCards[0]> 
330                <#assign offerId = displayedCard.offerId> 
331                <#assign sourceCode = displayedCard.sourceCode> 
332                <#assign cardArtImage = cdnCardArtUrl + "/"+ displayedCard.filename + ".png"> 
333                <#assign cardArtImageAlt = cdnCardArtUrl + "/"+ displayedCard.filename + ".jpg"> 
334                <#if (displayedCard.offerType=="143")> 
335                    <#assign productUrlHero="business-real-rewards"> 
336                    <#assign product="Business Real Rewards"> 
337                    <#assign cardIndex = 2> 
338                <#elseif (displayedCard.offerType=="144")> 
339                    <#assign productUrlHero="smart-business-rewards"> 
340                    <#assign product="Smart Business Rewards"> 
341                    <#assign cardIndex = 0> 
342                <#elseif (displayedCard.offerType=="121")> 
343                    <#assign productUrlHero = "business-platinum"> 
344                    <#assign product="Business"> 
345                    <#assign cardIndex = 3>                     
346                </#if> 
347            </#if> 
348            <#if product?has_content && product != ""> 
349                <#assign card_text = product + " Card"> 
350            </#if>  
351        </#if>		 
352            <div class="hero-container product-${productUrlHero} tier3-hero-${class.getData()}"> 
353                <div class="hero-main"> 
354                    <div class="hero-main-container"> 
355                        <div class="hero-main-offer"> 
356                            <div class="offer-detail"> 
357                                <div class="offer-detail-cardArt cardArtImg"> 
358                                    <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
359                                    class="jn-img-responsive" onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'">  
360                                    <#-- <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!'' }" 
361                                     class="jn-img-responsive">--> 
362                                    <p>${card_text!''}</p> 
363                                </div> 
364                                <div class="offer-detail-text text-color-default hide-desktop"> 
365                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                 
366                                </div>                                                                        
367                                <#if isExcluded == 0>                                                                                  
368                                    <a  
369                                        class="jn-button hide-desktop btn"  
370                                        data-button-name="cta-button-top"  
371                                        data-product-name="${productUrlHero!''}"  
372                                        href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"                                    
373
374                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
375                                    </a> 
376                                <#else> 
377                                    <a  
378                                        class="jn-button hide-desktop btn"  
379                                        data-button-name="cta-button-top"  
380                                        data-product-name="${productUrlHero!''}"  
381                                        data-micromodal-trigger="modal-index-hero" 
382                                        href="javascript:void(0);" 
383
384                                        ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
385                                    </a> 
386                                </#if> 
387                            </div> 
388                            <div class="offer-header"> 
389                                <div class="offer-text-top"> 
390                                    ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
391                                </div> 
392                                <div class="offer-text-bottom hide-mobile"> 
393                                    <div class="offer-detail-text text-color-default "> 
394                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()}                                        
395                                    </div> 
396                                     
397                                    <#if isExcluded == 0>                                                                                  
398                                        <a  
399                                            class="jn-button"  
400                                            data-button-name="cta-button-top"  
401                                            data-product-name="${productUrlHero!''}" 
402                                            href="${oadURL}?locationCode=${lc}&offerId=${offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"  
403
404                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
405                                        </a> 
406                                    <#else> 
407                                        <a  
408                                            class="jn-button"  
409                                            data-button-name="cta-button-top"  
410                                            data-product-name="${productUrlHero!''}" 
411                                            data-micromodal-trigger="modal-index-hero" 
412                                            href="javascript:void(0);" 
413
414                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
415                                        </a> 
416                                    </#if> 
417                                </div> 
418                            </div>                           
419                        </div> 
420                    </div> 
421                </div> 
422            </div> 
423 
424            <div aria-hidden="true" class="modal micromodal-slide" id="modal-index-hero" > 
425                <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
426                    <div  
427                        aria-modal="true"  
428                        aria-labelledby="modal-index-hero-title"  
429                        class="excludeModal__container"  
430                        role="dialog" 
431
432                        <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
433                        <header class="excludeModal__header"> 
434                            <h2 class="excludeModal__title" id="modal-index-hero-title"> 
435                                <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
436                                    ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
437                                </#if> 
438                            </h2> 
439                        </header> 
440                    </div> 
441                </div> 
442            </div> 
443    <#else>      
444        <#assign hasBalanceTransferCalculator = false> 
445        <#list fiCardsData as fib>     
446            <#switch fib.offerType>     
447                <#case "101"> 
448                    <#assign cardIndex = 3 > 
449                    <#assign productUrlHero = "consumer-edr"> 
450                    <#assign product="Everyday Rewards+">                     
451                    <#assign hasBalanceTransferCalculator = false>                   
452                    <#break>  
453                <#case "103">              
454                    <#assign cardIndex = 3 > 
455                    <#assign productUrlHero = "consumer-edr"> 
456                    <#assign product="Everyday Rewards+">                     
457                     <#assign hasBalanceTransferCalculator = false>                   
458                   <#break>          
459                <#case "104"> 
460                    <#assign cardIndex = 0 > 
461                    <#assign productUrlHero="max-cash"> 
462                    <#assign product="Max Cash Preferred">                       
463                    <#assign hasBalanceTransferCalculator = false>                   
464                    <#break> 
465                <#case "108"> 
466                    <#assign cardIndex = 1 > 
467                    <#assign productUrlHero = "consumer-platinum"> 
468                    <#assign product="Platinum">     
469                    <#assign hasBalanceTransferCalculator = true>                   
470                    <#break> 
471                <#case "109"> 
472                    <#assign cardIndex = 1 > 
473                    <#assign productUrlHero = "consumer-platinum"> 
474                    <#assign product="Platinum">    
475                    <#assign hasBalanceTransferCalculator = true>                                                          
476                    <#break>                                         
477                 <#case "141">                  
478                    <#assign cardIndex = 4 > 
479                    <#assign productUrlHero = "college-real-rewards"> 
480                    <#assign product = "College Real Rewards" >  
481                     <#assign hasBalanceTransferCalculator = false>                   
482                   <#break>  
483                <#case "147"> 
484                    <#assign cardIndex = 5 > 
485                    <#assign productUrlHero = "max-cash-secured"> 
486                    <#assign product = "Max Cash Secured" >  
487                    <#assign hasBalanceTransferCalculator = false>                   
488                    <#break>   
489                <#case "115"> 
490                    <#assign cardIndex = 2 > 
491                    <#assign productUrlHero = "secured"> 
492                    <#assign product="Secured">                     
493                    <#assign hasBalanceTransferCalculator = false>                   
494                    <#break>  
495                <#case "138"> 
496                    <#assign cardIndex = 6 > 
497                    <#assign productUrlHero = "travel-rewards-plus"> 
498                    <#assign product="Travel Rewards+">                     
499                    <#assign hasBalanceTransferCalculator = false>                   
500                    <#break>  
501                <#case "154"> 
502                    <#assign cardIndex = 7 > 
503                    <#assign productUrlHero = "reserve-rewards-plus"> 
504                    <#assign product="Reserve Rewards+">                     
505                    <#assign hasBalanceTransferCalculator = false>                   
506                    <#break>  
507                <#case "128"> 
508                    <#assign cardIndex = 1 > 
509                    <#assign productUrlHero = "business-cash-preferred"> 
510                    <#assign product="Business Cash Preferred">                     
511                    <#assign hasBalanceTransferCalculator = false>                   
512                    <#break>     
513                <#case "143"> 
514                    <#assign cardIndex = 2 > 
515                    <#assign productUrlHero = "business-real-rewards"> 
516                    <#assign product="Business Real Rewards">                     
517                    <#assign hasBalanceTransferCalculator = false>                   
518                    <#break>     
519                <#case "144"> 
520                    <#assign cardIndex = 0 > 
521                    <#assign productUrlHero = "smart-business-rewards"> 
522                    <#assign product="Smart Business Rewards">                                          
523                    <#assign hasBalanceTransferCalculator = false>                   
524                    <#break>                                   
525                <#case "121"> 
526                    <#assign cardIndex = 3 > 
527                    <#assign productUrlHero = "business-platinum"> 
528                    <#assign product="Business">                      
529                    <#assign hasBalanceTransferCalculator = false>                   
530                    <#break>                                      
531                <#default> 
532            </#switch>                          
533            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png">  
534            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">   
535             
536            <script> 
537               console.log("offerType ${fib.offerType} productUrlHero ${productUrlHero} show calculator ${hasBalanceTransferCalculator?c}")                         
538            </script> 
539                                                                         
540            <#if url?matches(".*/${productUrlHero}\\?.*")>  
541                <#assign isExcluded = 0> 
542                <#if fib.dmaexclude??> 
543                    <#assign isExcluded = fib.dmaexclude?number!0> 
544                </#if>    
545                <#if (fib.offerType=="108" || fib.offerType=="109" || fib.offerType == "121")> 
546 
547                    <#assign scrapedData = utilServ.makeCall('crcDDCGetSchumerBox', '${fib.offerId}' + '&'+ '${fib.sourceCode}')> 
548                    <#if (scrapedData?size > 0)> 
549                            <#list scrapedData as sItem> 
550                                <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
551                                    <#assign apr = sItem.scrapedValue?replace("(\n|\r\n|\r)+", " ","r")> 
552                                    <#break> 
553                                </#if> 
554 
555                            </#list> 
556                            <script> 
557                                $(document).ready(function () { 
558                                    var aprText = "${apr}"; 
559                                    //console.log('aprText',aprText); 
560                                    if (aprText) { 
561                                      $(".apr-full-text").html(aprText); 
562                                        try { 
563                                            var matches= aprText.match(/\d+(\.\d+)?%?/g); 
564                                            var billing_cycle = matches[1]; 
565                                            var apr_min = apr_min = matches[2]; 
566                                            var apr_max = apr_max = matches[3]; 
567                                            //console.log('billing_cycle', billing_cycle); 
568                                            //console.log('apr_min', apr_min); 
569                                            //console.log('apr_max', apr_max); 
570                                            if (billing_cycle) { 
571                                                //console.log($(".scraped-billing-cycle")); 
572                                                $(".scraped-billing-cycle").html(billing_cycle); 
573
574                                            if (apr_min) { 
575                                                $(".scraped-apr-min").html(apr_min); 
576
577                                            if (apr_max) { 
578                                                $('.scraped-apr-max').html(apr_max); 
579
580 
581                                        } catch (e) { 
582                                            console.log(e); 
583
584
585                                }); 
586                            </script> 
587                    </#if>   
588                </#if>      
589                <#if product?has_content && product != ""> 
590                    <#assign card_text = product + " Card"> 
591                </#if>    
592                <#assign tc_offerTypes = ['108', '109', '121', '144']> 
593                <#assign calculator_offerTypes = ['101', '104', '138', '154', '128', '143', '144']> 
594                <div class="hero-container ${class.getData()}"> 
595                    <div class="hero-main"> 
596                        <div class="hero-main-container"> 
597                            <div class="hero-main-offer"> 
598                                <div class="offer-detail"> 
599                                    <div class="offer-detail-cardArt cardArtImg"> 
600                                        <img src="${cardArtImage!''}" alt="${partnerName!''}" title="${partnerName!''}" 
601                                        onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" class="jn-img-responsive"> 
602                                        <p>${card_text!''}</p> 
603                                        <#if (hasBalanceTransferCalculator)> 
604                                            <a href="javascript:void(0);" data-micromodal-trigger="modal-2"aria-hidden="true" >See how much you could save with a balance transfer</a> 
605                                        </#if> 
606                                    </div> 
607                                    <div class="offer-detail-text text-color-default hide-desktop"> 
608                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
609 
610                                        <#if (tc_offerTypes?seq_contains(fib.offerType))> 
611                                            <a href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
612                                                <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
613                                            </a> 
614                                        </#if> 
615                                        <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
616                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
617                                        </#if> 
618                                    </div> 
619                                     
620                                    <#if isExcluded == 0>   
621                                        <a  
622                                            class="jn-button hide-desktop btn"  
623                                            data-button-name="cta-button-top"  
624                                            data-product-name="${productUrlHero!''}"   
625                                            href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"                               
626
627                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
628                                        </a>    
629                                    <#else> 
630                                        <a                                              
631                                            class="jn-button hide-desktop btn"  
632                                            data-button-name="cta-button-top"  
633                                            data-product-name="${productUrlHero!''}"    
634                                            data-micromodal-trigger="modal-product-hero" 
635                                            href="javascript:void(0);"                             
636
637                                            ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
638                                        </a> 
639                                    </#if> 
640                                </div> 
641                                <div class="offer-header"> 
642                                    <div class="offer-text-top"> 
643                                        ${productTitle.getSiblings()[cardIndex].primaryHeadlineText.getData()} 
644                                    </div> 
645                                    <div class="offer-text-bottom hide-mobile"> 
646                                        <div class="offer-detail-text text-color-default "> 
647                                            ${productTitle.getSiblings()[cardIndex].primaryHeadlineFeature.getData()} 
648                                            <#if (tc_offerTypes?seq_contains(fib.offerType))> 
649                                                <a class="whiteLink" href="${oadURL_TC}?step=display&offerId=${fib.offerId}&locationCode=${lc}"  target="_blank"> 
650                                                    <span class="screen-reader-only">${partnerName!''} ${product!''} Card </span>See terms & conditions 
651                                                </a> 
652                                            </#if> 
653                                        </div> 
654                                         
655                                         <#if isExcluded == 0>   
656                                            <a  
657                                                class="jn-button"  
658                                                data-button-name="cta-button-top"  
659                                                data-product-name="${productUrlHero!''}"  
660                                                href="${oadURL}?locationCode=${lc}&offerId=${fib.offerId}&preparerType=customer${dcoSourceCodeQueryParameter}"  
661
662                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
663                                            </a> 
664                                         <#else> 
665                                            <a  
666                                                class="jn-button"  
667                                                data-button-name="cta-button-top"  
668                                                data-product-name="${productUrlHero!''}"  
669                                                data-micromodal-trigger="modal-product-hero" 
670                                                href="javascript:void(0);"  
671
672                                                ${productTitle.getSiblings()[cardIndex].ctaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${product!''} Credit Card </span> 
673                                            </a> 
674                                         </#if> 
675                                         <#if (calculator_offerTypes?seq_contains(fib.offerType))> 
676                                            <a class="whiteLink" onclick='ga("send", "event", "click", "Rewards Calculator", "Outbound Link");' target="_blank" href="http://www.myaccountbenefits.com/rewards-calculator?ecdma-lc=${lc}">Calculate Rewards</a> 
677                                        </#if> 
678                                    </div> 
679                                </div> 
680                                 
681                            </div> 
682                        </div> 
683                    </div> 
684                </div> 
685 
686                <div aria-hidden="true" class="modal micromodal-slide" id="modal-product-hero" > 
687                    <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
688                        <div  
689                            aria-modal="true"  
690                            aria-labelledby="modal-prodcut-hero-title"  
691                            class="excludeModal__container"  
692                            role="dialog" 
693
694                            <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
695                            <header class="excludeModal__header"> 
696                                <h2 class="excludeModal__title" id="modal-prodcut-hero-title"> 
697                                    <#if productTitle.getSiblings()[cardIndex].excludedMessage?? > 
698                                        ${productTitle.getSiblings()[cardIndex].excludedMessage.getData()!""} 
699                                    </#if> 
700                                </h2> 
701                            </header> 
702                        </div> 
703                    </div> 
704                </div> 
705                <#break /> 
706            </#if> 
707        </#list>    
708 
709    </#if> 
710</#if> 
711<!-- https://micromodal.vercel.app/ --> 
712<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
713 
714<script> 
715    AUI().ready(function(){ 
716        //The below script is there to add vertical card art in UAT only so that QA has an easier time auditing. Note that the script only applies to FI SouthState (location code 20419) which is currently the only bank with vertical card art at the moment  
717        var locationCodeParam = '${lc}'; 
718        var currentEnvironmentParam = '${currentEnvironment}'; 
719        if(locationCodeParam == '20419' && currentEnvironmentParam == 'uat'){ 
720            Array.prototype.slice.call(document.querySelectorAll('.cardArtImg')).map(function(e){e.firstElementChild.src = "https://39f6f821fa03de239594-9f1c16ccc3b26ce57656bb4af99947b6.ssl.cf2.rackcdn.com/f20cf80a-6aea-46ec-84fc-c2a6583773d9.png"}) 
721        }    
722 
723        MicroModal.init();      
724    }); 
725</script> 
726<script> 
727    if(typeof setHeaderBackground === 'undefined') { let setHeaderBackground = () => {};} 
728    setHeaderBackground = () => { 
729        // Makes the Header subtitle work if there is two lines of text  
730        //product page header 
731        var consumerHeader = document.getElementsByClassName("landing-consumer")[0]; 
732        if(!consumerHeader) { 
733            //index page header 
734            consumerHeader = document.getElementsByClassName("tier3-hero-landing-consumer")[0]; 
735
736         
737        if(consumerHeader) { 
738            var consumerHeroContainer = consumerHeader.getElementsByClassName("hero-main-container")[0]; 
739            var consumerOfferHeader = consumerHeader.getElementsByClassName("offer-subtitle")[0]; 
740            const offerTextTop = consumerHeader.querySelector(".offer-text-top"); 
741             
742            if (consumerOfferHeader.innerText.length >= 76){ 
743                const gradientHeight = Math.max(offerTextTop.offsetHeight + 40, 200) + "px"; 
744                //two lines 
745                //offerTextTop.style.marginTop = '0px'; 
746                //document.querySelector('.offer-text-bottom').style.marginTop = '25px'; 
747                //prevent button and text going into blue section 
748                //consumerHeader.querySelector('.offer-text-top h1').style.minHeight = "120px"; 
749                consumerHeroContainer.style.background = "linear-gradient(180deg, ${backgroundColor!'#173989'} " + gradientHeight + ", #f8f8f8 " + gradientHeight + ")"; 
750
751
752        //product page header 
753        var buisnessHeader = document.getElementsByClassName("landing-business")[0]; 
754        if(!buisnessHeader) { 
755            //index page header 
756            buisnessHeader = document.getElementsByClassName("tier3-hero-landing-business")[0]; 
757
758 
759        if(buisnessHeader) { 
760            var buisnessHeroContainer = buisnessHeader.getElementsByClassName("hero-main-container")[0]; 
761            var buisnessOfferHeader = buisnessHeader.getElementsByClassName("offer-subtitle")[0]; 
762 
763            if (buisnessOfferHeader.innerText.length >= 48){ 
764                //two lines 
765                buisnessHeroContainer.style.background = "linear-gradient(180deg, rgba(255,255,255,1) 45%, ${backgroundColor!'#173989'} 45%)"; 
766
767
768    }; 
769    /* 
770        sometimes this runs before the text height it is refercning is loaded. Resulting in incorect background styles. If only in aui.ready then it flashes incorect styles then goes to correct styles everytime. 
771        With the aui.ready and imediate call it normal loads correctly but if it loads before header text it will still flash incorect styles and then be fixed. 
772    */ 
773    setHeaderBackground(); 
774    AUI().ready(function(){setHeaderBackground();}); 
775 
776</script> 
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> clientProfileService.findByLocationCode(lc)  [in template "10154#10192#153417673" at line 34, column 30]

----
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 clientProfileList = clientPro...  [in template "10154#10192#153417673" at line 34, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url404 = '/error/404.html' > 
3<#assign oadURL = propsUtil.get('elan.oad.url') > 
4<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
5<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
6<#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
7 
8 
9<#--  check location id validity  --> 
10<#if qstringmap["ecdma-lc"]?has_content> 
11    <#assign lc = qstringmap["ecdma-lc"]?first>   
12    <#assign lc = htmlUtil.escape(lc)> 
13    <#assign lc = htmlUtil.escapeJS(lc)> 
14 
15    <#assign prefix = "00000" > 
16    <#assign lcWithPrefix = prefix + lc > 
17    <#assign withPrefixLength = lcWithPrefix?length > 
18    <#assign startHere = withPrefixLength - 5> 
19    <#assign lc = lcWithPrefix?substring(startHere)> 
20<#else> 
21    <script> 
22        console.log("location code missing"); 
23        location.href = '${url404}'; 
24    </script> 
25</#if> 
26 
27<#if oadURL?contains("uat-")> 
28    <#assign oadURL_TC = 'https://uat-online1.elancard.com/oad/terms.controller' > 
29<#else> 
30    <#assign oadURL_TC = 'https://online1.elancard.com/oad/terms.controller' > 
31</#if> 
32 
33<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
34<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
35<#if clientProfileList?first?has_content> 
36    <#assign clientProfile = clientProfileList?first> 
37    <#assign partnerName = clientProfile.getMarketingNameLong()> 
38    <#assign pbu = clientProfile.getPbu()> 
39    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
40     
41    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu)> 
42        <#if (fiCardsData?size > 0)> 
43            <#assign temp = []> 
44            <#assign offerTypeList = []>      
45             <#assign index = 0> 
46            <#list fiCardsData as fib> 
47                <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))> 
48                    <#assign offerTypeList = offerTypeList + [fib.offerType]>                    
49                    <#assign temp = temp + fiCardsData[index..index]>  
50                </#if> 
51                <#assign index = index + 1>                  
52            </#list>  
53            <#assign fiCardsData = temp> 
54            <#list fiCardsData as fib> 
55                <#switch fib.offerType> 
56                    <#case "101"> 
57                        <#assign productURL = "202302/consumer-edr"> 
58                        <#assign productName = "Everyday Rewards+"> 
59                        <#break> 
60                    <#case "103"> 
61                        <#assign productURL = "202302/consumer-edr"> 
62                        <#assign productName = "Everyday Rewards+"> 
63                        <#break> 
64                    <#case "104"> 
65                        <#assign productURL = "max-cash"> 
66                        <#assign productName = "Max Cash Preferred Card">       
67                        <#break> 
68                    <#case "108"> 
69                        <#assign productURL="202308/consumer-platinum"> 
70                        <#assign productName="Platinum Card"> 
71                        <#break> 
72                    <#case "109"> 
73                        <#assign productURL="202308/consumer-platinum"> 
74                        <#assign productName="Platinum Card"> 
75                        <#break> 
76                    <#case "115"> 
77                        <#assign productURL = "secured"> 
78                        <#assign productName = "Secured Card" > 
79                        <#break> 
80                    <#case "138"> 
81                        <#assign productURL = "202305/travel-rewards-plus"> 
82                        <#assign productName = "Travel Rewards+" > 
83                        <#break> 
84                    <#case "141"> 
85                        <#assign productURL = "college-real-rewards"> 
86                        <#assign productName = "College Real Rewards" >     
87                        <#break> 
88                    <#case "147"> 
89                        <#assign productURL = "max-cash-secured"> 
90                        <#assign productName = "Max Cash Secured Card" >     
91                        <#break> 
92                    <#case "154"> 
93                        <#assign productURL = "202305/reserve-rewards-plus"> 
94                        <#assign productName = "Reserve Rewards+" > 
95                        <#break> 
96                    <#case "121"> 
97                        <#assign productURL = "202208/business-platinum"> 
98                        <#assign productName = "Business Card" > 
99                        <#break> 
100                    <#case "128"> 
101                        <#assign productURL = "business-cash-preferred"> 
102                        <#assign productName = "Business Cash Preferred" > 
103                        <#break> 
104                    <#case "143"> 
105                        <#assign productURL = "business-real-rewards"> 
106                        <#assign productName = "Business Real Rewards Card" > 
107                        <#break> 
108                    <#case "144"> 
109                        <#assign productURL = "smart-business-rewards"> 
110                        <#assign productName = "Smart Business Rewards Card" >     
111                        <#break> 
112                    <#default>                                                         
113                </#switch> 
114 
115                <#assign newSourceCode = fib.sourceCode>  
116                <#assign newOfferId = fib.offerId>  
117 
118                <#if url?matches(".*/${productURL}\\?.*")> 
119                    <#assign APR=""> 
120                    <#assign AMF=""> 
121                    <#assign BAL=""> 
122                    <#assign sdata = utilServ.makeCall('crcDDCGetSchumerBox', newOfferId + '&' + newSourceCode)> 
123                    <#if (sdata?size > 0)> 
124                        <#list sdata as sItem> 
125                       
126                            <#if ((sItem.scrapedLabel?contains("Annual Percentage Rate (APR) for Purchases")) && (sItem.scrapedValue?has_content)) > 
127                                <#assign APR = sItem.scrapedValue> 
128                            <#elseif ((sItem.scrapedLabel?contains("Annual Membership Fee")) && (sItem.scrapedValue?has_content)) > 
129                                <#assign AMF = sItem.scrapedValue> 
130                            <#elseif ((sItem.scrapedLabel?contains("APR for Balance Transfers")) && (sItem.scrapedValue?has_content)) > 
131                                <#assign BAL = sItem.scrapedValue> 
132                            </#if> 
133                            <#if (APR?has_content && AMF?has_content && BAL?has_content)> 
134                                <#break> 
135                            </#if> 
136                        </#list>                 
137                    <#else> 
138                        <script> 
139                            console.log('no scraped data'); 
140                        </script> 
141                    </#if>                     
142                         
143                        <section> 
144                            <#if FeatureText.getData() != ""> 
145                                <#assign featureCounter = 0> 
146                                <div class="hero-primary-benefits offer-type-${fib.offerType}"> 
147                                    <#list FeatureText.getSiblings() as item> 
148                                        <div class="primary-benefit"> 
149                                            <div class="primary-benefit-wrapper"> 
150                                                ${item.getData()} 
151                                                <#if (fib.offerType=="108" || fib.offerType=="109") && (featureCounter == FeatureText.getSiblings()?size - 1)> 
152                                                    <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a> 
153                                                </#if> 
154                                            </div> 
155                                        </div> 
156                                        <#assign featureCounter = featureCounter + 1> 
157                                    </#list> 
158                                </div> 
159                            </#if> 
160                            <div class="standard-content-container" title="${partnerName!''} ${productName!''} Credit Card"> 
161                                <article class="product-details-container"> 
162                                    <div class="detail-background"> 
163                                        ${HeadlineInfo.getData()} 
164                                        <div class="secondary-benefits"> 
165                                            <div class="option"> 
166                                                <#foreach itemA in AdditionalInfoA.getSiblings()> 
167                                                    ${itemA.getData()} 
168                                                </#foreach>  
169                                                <#assign col1NotScrappedOfferTypes = ['108', '109', '147', '115']/>   
170                                                <#assign col1AprOfferTypes = ['104', '121', '144', '143'] > 
171                                                <#if !col1NotScrappedOfferTypes?seq_contains(fib.offerType)> 
172                                                    <#if col1AprOfferTypes?seq_contains(fib.offerType)> 
173                                                        <#if (fib.offerType == "104" )> 
174                                                            <h3>APR for Purchases:</h3> 
175                                                        <#elseif (fib.offerType == "144")> 
176                                                            <h3>APR for Purchases and Balance Transfers:</h3>   
177                                                        <#else> 
178                                                            <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
179                                                        </#if> 
180 
181                                                        <p> 
182                                                            ${APR!''}  
183                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
184                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
185                                                            </a> 
186                                                        </p> 
187                                                    <#else> 
188                                                        <h3>Annual Fee</h3> 
189                                                        <p> 
190                                                            ${AMF!''} 
191                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
192                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
193                                                            </a> 
194                                                        </p> 
195                                                    </#if> 
196                                                </#if> 
197                                            </div> 
198                                            <div class="option"> 
199                                                <#foreach itemB in AdditionalInfoB.getSiblings()> 
200                                                    ${itemB.getData()} 
201                                                </#foreach> 
202                                                <#assign col2NotScrappedOfferTypes = ['147'] >   
203                                                <#assign col2AprOfferTypes = ['138', '154', '128'] > 
204                                                <#assign col2AmfOfferTypes = ['108', '109', '115', '144'] > 
205                                                <#if !col2NotScrappedOfferTypes?seq_contains(fib.offerType)> 
206                                                    <#if col2AprOfferTypes?seq_contains(fib.offerType)> 
207                                                        <#if (fib.offerType == "128" )> 
208                                                            <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
209                                                        <#else> 
210                                                            <h3>APR for Purchases:</h3> 
211                                                        </#if> 
212                                                        <p> 
213                                                            ${APR!''}  
214                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
215                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
216                                                            </a> 
217                                                        </p> 
218                                                    <#elseif col2AmfOfferTypes?seq_contains(fib.offerType)> 
219                                                        <h3>Annual Fee</h3> 
220                                                        <p> 
221                                                            ${AMF!''} 
222                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
223                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
224                                                            </a> 
225                                                        </p> 
226                                                    <#else> 
227                                                        <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
228                                                        <p> 
229                                                            ${BAL!''} 
230                                                            <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
231                                                                <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
232                                                            </a> 
233                                                        </p> 
234                                                    </#if> 
235                                                </#if> 
236                                            </div>  
237                                            <#if (AdditionalInfoC?has_content)> 
238                                              <div class="option"> 
239                                                ${AdditionalInfoC.getData()} 
240                                                <#assign col3NotScrappedOfferTypes = ['144'] >   
241                                                <#assign col3BalOfferTypes = ['138', '154', '128'] > 
242                                                <#assign col3AmfOfferTypes = ['104', '121', '143'] > 
243                                                <#if !col3NotScrappedOfferTypes?seq_contains(fib.offerType)> 
244                                                    <#if col3BalOfferTypes?seq_contains(fib.offerType)> 
245                                                            <#if fib.offerType == "128"> 
246                                                                <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
247                                                            <#else> 
248                                                                <h3>APR for Balance Transfers:</h3> 
249                                                            </#if> 
250                                                            <p> 
251                                                                ${BAL!''} 
252                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
253                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
254                                                                </a> 
255                                                            </p> 
256                                                    <#elseif col3AmfOfferTypes?seq_contains(fib.offerType)> 
257                                                            <#if fib.offerType == "104"> 
258                                                                <h3>Annual Fee<sup>*</sup></h3> 
259                                                            <#else> 
260                                                                <h3>Annual Fee</h3> 
261                                                            </#if> 
262                                                            <p> 
263                                                                ${AMF!''} 
264                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
265                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
266                                                                </a> 
267                                                            </p> 
268                                                    <#else> 
269                                                            <#if (fib.offerType == "147" ||  
270                                                                fib.offerType == "115"  
271                                                            )> 
272                                                                <h3>APR for Purchases and Balance Transfers:</h3>  
273                                                            <#else> 
274                                                                <h3>Intro APR<sup>*</sup> for Purchases:</h3> 
275                                                            </#if> 
276                                                            <p> 
277                                                                ${APR!''}  
278                                                                <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
279                                                                    <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
280                                                                </a> 
281                                                            </p> 
282                                                    </#if> 
283                                                </#if> 
284                                                <#if (fib.offerType == "108" || fib.offerType == "109")> 
285                                                    <h3>Intro APR<sup>*</sup> for Balance Transfers:</h3> 
286                                                    <p>${BAL!''} <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}"  target="_blank"><span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions</a> 
287                                                    </p> 
288                                                </#if> 
289                                                <#if fib.offerType == "147"> 
290                                                    <h3>Annual Fee<sup>*</sup></h3> 
291                                                    <p> 
292                                                        ${AMF!''} 
293                                                        <a href="${oadURL_TC}?step=display&amp;offerId=${fib.offerId}&amp;locationCode=${lc}" target="_blank"> 
294                                                            <span class="screen-reader-only">${partnerName!''} ${productName!''} </span>Terms & Conditions 
295                                                        </a> 
296                                                    </p> 
297                                                </#if> 
298                                                 
299                                              </div> 
300                                            </#if> 
301                                        </div>  
302                                    </div> 
303                                                                                 
304                                </article> 
305                            </div> 
306                        </section> 
307                        <script> 
308                            AUI().ready(function() {  
309                                $('.jn-subhero ul').each(function() { 
310                                    var $this = $(this), 
311                                        li = $this.find('li').length; 
312                                        console.log($this.find('li').length) 
313                                    if(li === 2){ 
314                                        $this.addClass('two-items'); 
315
316                                }); 
317                                 
318                            }); 
319                        </script> 
320                        <#break /> 
321                </#if> 
322            </#list>  
323        <#else> 
324            <script> 
325                console.log("FI Cards Data empty"); 
326                //location.href = '${url404}'; 
327            </script> 
328        </#if> 
329<#else> 
330    <script> 
331        console.log("client profile empty"); 
332        //location.href = '${url404}'; 
333    </script> 
334</#if> 
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#157461212" at line 7, column 15]

----
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 lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#157461212" at line 7, column 1]
----
1<#assign oadURL = propsUtil.get('elan.oad.url') > 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
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 
7<#assign lc = qstringmap["ecdma-lc"]?first> 
8<#assign lc = htmlUtil.escape(lc)> 
9<#assign lc = htmlUtil.escapeJS(lc)> 
10 
11<#assign dcoSourceCode = ""> 
12<#assign dcoSourceCodeQueryParameter = ""> 
13 
14<#if qstringmap["sourcecode"]?has_content> 
15    <#assign dcoSourceCode = qstringmap["sourcecode"]?first> 
16    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
17    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
18    <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}"> 
19<#elseif qstringmap["sourceCode"]?has_content> 
20    <#assign dcoSourceCode = qstringmap["sourceCode"]?first> 
21    <#assign dcoSourceCode = htmlUtil.escape(dcoSourceCode)> 
22    <#assign dcoSourceCode = htmlUtil.escapeJS(dcoSourceCode)> 
23    <#assign dcoSourceCodeQueryParameter = "&sourcecode=${dcoSourceCode}"> 
24</#if> 
25  
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 
32<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
33<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
34 
35<#if clientProfileList?first?has_content> 
36    <#assign clientProfile = clientProfileList?first> 
37    <#assign partnerName = clientProfile.getMarketingNameLong()> 
38    <#assign pbu = clientProfile.getPbu()> 
39    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
40    <#assign cdnCardArtUrl = (propsUtil.get('rackspace.cdn.cardart.url'))!> 
41 
42    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&' + pbu + '&' + subbu + '&' + lc)> 
43    <#assign temp = []> 
44    <#assign offerTypeList = []>      
45    <#assign index = 0> 
46    <#list fiCardsData as fib> 
47        <#if (fib.offerType?has_content && !(offerTypeList?seq_contains(fib.offerType)))>  
48            <#assign offerTypeList = offerTypeList + [fib.offerType]>                   
49            <#assign temp = temp + fiCardsData[index..index]>  
50        </#if>  
51        <#assign index = index + 1>                
52    </#list>  
53    <#assign fiCardsData = temp>  
54 
55    <#if (fiCardsData?size > 0)>  
56        <#list fiCardsData as fib> 
57            <#switch fib.offerType> 
58                <#case "101"> 
59                    <#assign productURL = "consumer-edr"> 
60                    <#assign productName = "Everyday Rewards+"> 
61                    <#break> 
62                <#case "103"> 
63                    <#assign productURL = "consumer-edr"> 
64                    <#assign productName = "Everyday Rewards+"> 
65                    <#break> 
66                <#case "104"> 
67                    <#assign productURL = "max-cash"> 
68                    <#assign productName = "Max Cash Preferred Card">       
69                    <#break> 
70                <#case "108"> 
71                    <#assign productURL="consumer-platinum"> 
72                    <#assign productName="Platinum Card"> 
73                    <#break> 
74                <#case "109"> 
75                    <#assign productURL="consumer-platinum"> 
76                    <#assign productName="Platinum Card"> 
77                    <#break> 
78                <#case "115"> 
79                    <#assign productURL = "secured"> 
80                    <#assign productName = "Secured Card" > 
81                    <#break> 
82                <#case "138"> 
83                    <#assign productURL = "travel-rewards-plus"> 
84                    <#assign productName = "Travel Rewards+" > 
85                    <#break> 
86                <#case "141"> 
87                    <#assign productURL = "college-real-rewards"> 
88                    <#assign productName = "College Real Rewards" >     
89                    <#break> 
90                <#case "147"> 
91                    <#assign productURL = "max-cash-secured"> 
92                    <#assign productName = "Max Cash Secured Card" >     
93                    <#break> 
94                <#case "154"> 
95                    <#assign productURL = "reserve-rewards-plus"> 
96                    <#assign productName = "Reserve Rewards+" > 
97                    <#break> 
98                <#case "121"> 
99                    <#assign productURL = "business-platinum"> 
100                    <#assign productName = "Business Card" > 
101                    <#break> 
102                <#case "128"> 
103                    <#assign productURL = "business-cash-preferred"> 
104                    <#assign productName = "Business Cash Preferred" > 
105                    <#break> 
106                <#case "143"> 
107                    <#assign productURL = "business-real-rewards"> 
108                    <#assign productName = "Business Real Rewards Card" > 
109                    <#break> 
110                <#case "144"> 
111                    <#assign productURL = "smart-business-rewards"> 
112                    <#assign productName = "Smart Business Rewards Card" >     
113                    <#break> 
114                <#default>                                                         
115            </#switch> 
116 
117            <#assign cardArtImage = cdnCardArtUrl + "/" + fib.filename + ".png"> 
118            <#assign cardArtImageAlt = cdnCardArtUrl + "/" + fib.filename + ".jpg">  
119            <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")> 
120                <script> 
121                 console.log('offerType', '${fib.offerType}', '${productURL}') 
122                </script> 
123                <#list product.getSiblings() as card> 
124                    <#if card?has_content && card.offerType.getData() == fib.offerType> 
125                        <#assign isExcluded = 0> 
126                        <#if fib.dmaexclude??>  
127                            <#assign isExcluded = fib.dmaexclude?number!0> 
128                        </#if>    
129 
130                        <div class="content-container jn-container-banner" title="${partnerName!''} ${productName!''}"> 
131                            <div class="banner-wrapper"> 
132                                <div class="banner"> 
133                                    <div class="banner-cardArt cardArtImg">   
134                                        <img  
135                                            src="${cardArtImage!''}"  
136                                            alt="${partnerName!''} ${productName!''}"  
137                                            title="${partnerName!''} ${productName!''}" 
138                                            class="jn-img-responsive"  
139                                            onerror="this.onerror=null;this.src='${cardArtImageAlt!''}'" 
140                                        >  
141                                    </div> 
142                                    <div class="banner-cta"> 
143                                        <div class="banner-cta-text"> 
144                                            ${card.optionalCtaFeatureText.getData()} 
145                                        </div> 
146                                        <#if isExcluded == 0>   
147                                            <a  
148                                                class="jn-button"  
149                                                data-button-name="cta-button-bottom"  
150                                                data-product-name="${productURL}!''" 
151                                                href="${oadURL}?locationCode=${lc}&amp;offerId=${fib.offerId}&amp;preparerType=customer${dcoSourceCodeQueryParameter}"  
152                                                id="oadSecButton"  
153
154                                                ${card.optionalCtaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${productName!''} Card </span> 
155                                            </a>  
156                                        <#else> 
157                                            <a  
158                                                class="jn-button"  
159                                                data-button-name="cta-button-bottom"  
160                                                data-product-name="${productURL}!''" 
161                                                data-micromodal-trigger="modal-lower-banner" 
162                                                id="oadSecButton"  
163                                                href="javascript:void(0);" 
164
165                                                ${card.optionalCtaText.getData()}<span class="screen-reader-only">&nbsp;for ${partnerName!''} ${productName!''} Card </span> 
166                                            </a>  
167                                        </#if>  
168                                    </div> 
169                                </div> 
170                            </div> 
171                        </div> 
172                        <style> 
173                            .excludeModal__overlay { 
174                                position: fixed; 
175                                top: 0; 
176                                left: 0; 
177                                right: 0; 
178                                bottom: 0; 
179                                background: rgba(0,0,0,0.6); 
180                                display: flex; 
181                                justify-content: center; 
182                                align-items: center; 
183
184 
185                            .excludeModal__container { 
186                                background-color: #fff; 
187                                padding: 30px; 
188                                min-width: 500px; 
189                                max-width: 500px; 
190                                max-height: 100vh; 
191                                border-radius: 4px; 
192                                overflow-y: auto; 
193                                box-sizing: border-box; 
194
195 
196                            .excludeModal__header { 
197                                display: flex; 
198                                justify-content: space-between; 
199                                align-items: center; 
200
201 
202                            .modal .excludeModal__container .excludeModal__title { 
203                                margin-top: 0; 
204                                margin-bottom: 0; 
205                                font-weight: 600; 
206                                font-size: 20px; 
207                                line-height: 1.25; 
208                                color: #00449e; 
209                                box-sizing: border-box; 
210
211                             
212                            .excludeModal__close { 
213                                background: transparent; 
214                                border: 1px solid white; 
215                                padding: 4px 8px; 
216                                float: right; 
217
218 
219                            .excludeModal__close:hover { 
220                                border: 1px solid black; 
221
222 
223                            .excludeModal__close:before { content: "\2715"; } 
224 
225                            @keyframes mmfadeIn { 
226                                from { opacity: 0; } 
227                                to { opacity: 1; } 
228
229 
230                            @keyframes mmfadeOut { 
231                                from { opacity: 1; } 
232                                to { opacity: 0; } 
233
234 
235                            @keyframes mmslideIn { 
236                                from { transform: translateY(15%); } 
237                                to { transform: translateY(0); } 
238
239 
240                            @keyframes mmslideOut { 
241                                from { transform: translateY(0); } 
242                                to { transform: translateY(-10%); } 
243
244 
245                            .micromodal-slide { 
246                                display: none; 
247
248 
249                            .micromodal-slide.is-open { 
250                                display: block; 
251
252 
253                            .micromodal-slide[aria-hidden="false"] .excludeModal__overlay { 
254                                animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
255
256 
257                            .micromodal-slide[aria-hidden="false"] .excludeModal__container { 
258                                animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
259
260 
261                            .micromodal-slide[aria-hidden="true"] .excludeModal__overlay { 
262                                animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
263
264 
265                            .micromodal-slide[aria-hidden="true"] .excludeModal__container { 
266                                animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
267
268 
269                            .micromodal-slide .excludeModal__container, 
270                            .micromodal-slide .excludeModal__overlay { 
271                                will-change: transform; 
272
273                        </style> 
274                        <div aria-hidden="true" class="modal micromodal-slide" id="modal-lower-banner" > 
275                            <div class="excludeModal__overlay" data-micromodal-close tabindex="-1"> 
276                                <div  
277                                    aria-modal="true"  
278                                    aria-labelledby="modal-lower-banner-title"  
279                                    class="excludeModal__container"  
280                                    role="dialog" 
281
282                                    <button aria-label="Close modal" class="excludeModal__close" data-micromodal-close></button> 
283                                    <header class="excludeModal__header"> 
284                                        <h2 class="excludeModal__title" id="modal-lower-banner-title"> 
285                                            <#if card.excludedMessage?? > 
286                                                ${card.excludedMessage.getData()!""} 
287                                            </#if> 
288                                        </h2> 
289                                    </header> 
290                                </div> 
291                            </div> 
292                        </div> 
293                        <!-- https://micromodal.vercel.app/ --> 
294                        <script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
295                        <script> 
296                            AUI().ready(function(){  
297                                MicroModal.init();      
298                            }); 
299                        </script> 
300                        <#break> 
301                    </#if> 
302                </#list> 
303                <#break> 
304            </#if> 
305        </#list> 
306    </#if> 
307<#else> 
308    <script> 
309        console.log("discalimer: client profile empty"); 
310    </script> 
311</#if> 
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#157607653" at line 5, column 15]

----
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 lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#157607653" at line 5, column 1]
----
1<#assign utilServ = (serviceLocator.findService("com.elan.crc.utilites.service.CRCRemoteServiceService"))! /> 
2<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
3<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))> 
4 
5<#assign lc = qstringmap["ecdma-lc"]?first> 
6<#assign lc = htmlUtil.escape(lc)> 
7<#assign lc = htmlUtil.escapeJS(lc)> 
8 
9<#assign prefix = "00000" > 
10<#assign lcWithPrefix = prefix + lc > 
11<#assign withPrefixLength = lcWithPrefix?length > 
12<#assign startHere = withPrefixLength - 5> 
13<#assign lc = lcWithPrefix?substring(startHere)> 
14 
15<#assign clientProfileService = (serviceLocator.findService("com.elan.crc.user.service.CrcClientProfileLocalService"))! > 
16<#assign clientProfileList = clientProfileService.findByLocationCode(lc)> 
17<#if clientProfileList?first?has_content> 
18    <#assign clientProfile = clientProfileList?first> 
19    <#assign partnerName = clientProfile.getMarketingNameLong()> 
20 
21    <#assign pbu = clientProfile.getPbu()> 
22    <#assign subbu = clientProfile.getSUBBRANDBUNBR()> 
23 
24    <#assign fiCardsData = utilServ.makeCall('crcTier3GetPbuData','0&'+ pbu +'&'+subbu)>  
25 
26 
27    <#if (fiCardsData?size > 0)> 
28 
29        <#list fiCardsData as fib> 
30            <#switch fib.offerType> 
31                <#case "101"> 
32                    <#assign productURL = "consumer-edr"> 
33                    <#assign productName = "Everyday Rewards+"> 
34                    <#break> 
35                <#case "103"> 
36                    <#assign productURL = "consumer-edr"> 
37                    <#assign productName = "Everyday Rewards+"> 
38                    <#break> 
39                <#case "104"> 
40                    <#assign productURL = "max-cash"> 
41                    <#assign productName = "Max Cash Preferred Card">       
42                    <#break> 
43                <#case "108"> 
44                    <#assign productURL="consumer-platinum"> 
45                    <#assign productName="Platinum Card"> 
46                    <#break> 
47                <#case "109"> 
48                    <#assign productURL="consumer-platinum"> 
49                    <#assign productName="Platinum Card"> 
50                    <#break> 
51                <#case "115"> 
52                    <#assign productURL = "secured"> 
53                    <#assign productName = "Secured Card" > 
54                    <#break> 
55                <#case "138"> 
56                    <#assign productURL = "travel-rewards-plus"> 
57                    <#assign productName = "Travel Rewards+" > 
58                    <#break> 
59                <#case "141"> 
60                    <#assign productURL = "college-real-rewards"> 
61                    <#assign productName = "College Real Rewards" >     
62                    <#break> 
63                <#case "147"> 
64                    <#assign productURL = "max-cash-secured"> 
65                    <#assign productName = "Max Cash Secured Card" >     
66                    <#break> 
67                <#case "154"> 
68                    <#assign productURL = "reserve-rewards-plus"> 
69                    <#assign productName = "Reserve Rewards+" > 
70                    <#break> 
71                <#case "121"> 
72                    <#assign productURL = "business-platinum"> 
73                    <#assign productName = "Business Card" > 
74                    <#break> 
75                <#case "128"> 
76                    <#assign productURL = "business-cash-preferred"> 
77                    <#assign productName = "Business Cash Preferred" > 
78                    <#break> 
79                <#case "143"> 
80                    <#assign productURL = "business-real-rewards"> 
81                    <#assign productName = "Business Real Rewards Card" > 
82                    <#break> 
83                <#case "144"> 
84                    <#assign productURL = "smart-business-rewards"> 
85                    <#assign productName = "Smart Business Rewards Card" >     
86                    <#break> 
87                <#default>                                                         
88            </#switch> 
89            <#if productURL?has_content && url?matches(".*/${productURL}\\?.*")> 
90                <script> 
91                 console.log('offerType', '${fib.offerType}', '${productURL}') 
92                </script> 
93                        <#assign cardProviderAbbreviated = ""> 
94        <#assign cardProvider = utilServ.makeCall('crcDDCGetMcOrVisa', fib.offerType + '&' + lc)> 
95        <#if (cardProvider?size > 0)> 
96            <#-- This will be V for visa or M for mastercard. --> 
97            <#assign cardProviderAbbreviated = cardProvider[0].cardType> 
98        <#else> 
99            <script> 
100                console.log("No card provider(Visa/Master Card) found for disclaimer"); 
101            </script> 
102        </#if> 
103                <#list product.getSiblings() as card> 
104                    <#if (card.offerType.getData() == fib.offerType)> 
105                        <div class="content-container" title="${partnerName!''} - Disclaimer"> 
106                            <div class="jn-disclaimer"> 
107                                         
108                                <#if pbuList.getData()?has_content && pbuList.getData()?contains(pbu) && card.disclaimerBank.getData()?has_content> 
109                                    ${card.disclaimerBank.getData()} 
110                                <#else> 
111                                    <#if (card.disclaimerVisa?has_content && cardProviderAbbreviated?contains('V'))> 
112                                        ${card.disclaimerVisa.getData()} 
113                                    </#if> 
114                                    <#if (card.disclaimerMasterCard?has_content && cardProviderAbbreviated?contains('M')) > 
115                                        ${card.disclaimerMasterCard.getData()} 
116                                    </#if> 
117                                </#if> 
118                            </div> 
119                        </div> 
120                        <#break> 
121                    </#if> 
122                </#list> 
123                <#break> 
124            </#if> 
125        </#list> 
126    </#if> 
127</#if> 
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing:
==> qstringmap["ecdma-lc"]  [in template "10154#10192#153417685" at line 3, column 15]

----
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 lc = qstringmap["ecdma-lc"]?f...  [in template "10154#10192#153417685" at line 3, column 1]
----
1<#assign url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()/> 
2<#assign qstringmap = httpUtil.getParameterMap(httpUtil.getQueryString(url))>  
3<#assign lc = qstringmap["ecdma-lc"]?first> 
4<#assign lc = htmlUtil.escape(lc)> 
5<#assign lc = htmlUtil.escapeJS(lc)> 
6 
7<#if (lc?has_content && lc?length gt 5)> 
8    <#assign lc = lc[0..4] > 
9</#if> 
10<#assign lc = lc?web_safe> 
11<#assign aDateTime = .now> 
12<#assign currentYear = aDateTime?string.yyyy> 
13 
14 
15<div id="footerIdAdPlatinum"> 
16  ${footerContent.getData()} 
17</div> 
18 
19<!-- BEGIN CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
20<script src="https://unpkg.com/micromodal/dist/micromodal.min.js"></script> 
21<style> 
22    #opt-out-button, 
23    .modal__btn.learn-more { 
24        background: #0C2074; 
25        border: 1px solid #0C2074; 
26        color: white; 
27        text-transform: uppercase; 
28        text-decoration: none; 
29        font-size: 16px; 
30        padding: 0.5rem 2rem; 
31        display: inline-block; 
32        border-radius: 0; 
33
34    #opt-out-button:hover, 
35    .modal__btn.learn-more:hover { 
36        color: white !important; 
37        border-color: #2C76AF !important; 
38        background-color: #2C76AF !important; 
39
40    .modal .modal__btn.learn-more { 
41        background: white; 
42        border: 1px solid #0C2074; 
43        color: #0C2074; 
44        text-decoration: none; 
45
46    #opt-out-button[disabled="true"] { 
47        background-color: rgba(0,0,0,.15); 
48        color: rgba(0,0,0,.45); 
49        border-color: rgba(0,0,0,.25); 
50
51    #opt-out-button:hover[disabled="true"] { 
52        background-color: rgba(0,0,0,.15) !important; 
53        color: rgba(0,0,0,.45) !important; 
54        border-color: rgba(0,0,0,.25) !important; 
55
56    #opt-out-button:focus { 
57        outline-style: solid; 
58        outline-color: white; 
59        outline-offset: -3px; 
60        outline-width: 1px; 
61
62    .opt-out-link svg { 
63        width: 30px; 
64        height: 14px; 
65        width: auto; 
66        vertical-align: middle; 
67
68    .modal__overlay { 
69        position: fixed; 
70        top: 0; 
71        left: 0; 
72        right: 0; 
73        bottom: 0; 
74        background: rgba(0,0,0,0.6); 
75        display: flex; 
76        justify-content: center; 
77        align-items: center; 
78
79 
80    .modal__container { 
81        background-color: #fff; 
82        padding: 30px; 
83        max-width: 500px; 
84        max-height: 100vh; 
85        border-radius: 4px; 
86        overflow-y: auto; 
87        box-sizing: border-box; 
88
89 
90    .modal__header { 
91        display: flex; 
92        justify-content: space-between; 
93        align-items: center; 
94
95 
96    .modal .modal__container .modal__title { 
97        margin-top: 0; 
98        margin-bottom: 0; 
99        font-weight: 600; 
100        font-size: 20px; 
101        line-height: 1.25; 
102        color: #00449e; 
103        box-sizing: border-box; 
104
105 
106    .modal__close { 
107        background: transparent; 
108        border: 1px solid white; 
109        padding: 4px 8px; 
110
111    .modal__close:hover { 
112        border: 1px solid black; 
113
114 
115    .modal__header .modal__close:before { content: "\2715"; } 
116 
117    .modal__content { 
118        margin-top: 2rem; 
119        margin-bottom: 2rem; 
120        line-height: 1.5; 
121
122 
123    @keyframes mmfadeIn { 
124        from { opacity: 0; } 
125        to { opacity: 1; } 
126
127 
128    @keyframes mmfadeOut { 
129        from { opacity: 1; } 
130        to { opacity: 0; } 
131
132 
133    @keyframes mmslideIn { 
134        from { transform: translateY(15%); } 
135        to { transform: translateY(0); } 
136
137 
138    @keyframes mmslideOut { 
139        from { transform: translateY(0); } 
140        to { transform: translateY(-10%); } 
141
142 
143    .micromodal-slide { 
144        display: none; 
145
146 
147    .micromodal-slide.is-open { 
148        display: block; 
149
150 
151    .micromodal-slide[aria-hidden="false"] .modal__overlay { 
152        animation: mmfadeIn .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
153
154 
155    .micromodal-slide[aria-hidden="false"] .modal__container { 
156        animation: mmslideIn .3s cubic-bezier(0, 0, .2, 1); 
157
158 
159    .micromodal-slide[aria-hidden="true"] .modal__overlay { 
160        animation: mmfadeOut .3s cubic-bezier(0.0, 0.0, 0.2, 1); 
161
162 
163    .micromodal-slide[aria-hidden="true"] .modal__container { 
164        animation: mmslideOut .3s cubic-bezier(0, 0, .2, 1); 
165
166 
167    .micromodal-slide .modal__container, 
168    .micromodal-slide .modal__overlay { 
169        will-change: transform; 
170
171</style> 
172 
173<div class="modal micromodal-slide" id="modal-1" aria-hidden="true"> 
174<div class="modal__overlay" tabindex="-1" data-micromodal-close> 
175    <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title"> 
176    <header class="modal__header"> 
177        <h2 class="modal__title" id="modal-1-title"> 
178        Your California privacy choices 
179        </h2> 
180        <button class="modal__close" aria-label="Close modal" data-micromodal-close></button> 
181    </header> 
182    <div class="modal__content" id="modal-1-content"> 
183        <div id="message-no-cookie"> 
184            <p> 
185            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> 
186             
187<p>&nbsp;</p> 
188 
189<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> 
190    </div> 
191    <div id="message-with-cookie"> 
192        <p>You have successfully opted-out.</p> 
193    </div> 
194    </div> 
195    <div class="modal__footer"> 
196        <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> 
197        <button id="opt-out-button" class="modal__btn modal__btn-primary" aria-label="Opt Out and Close modal" onclick="window.californiaOptOut()">Opt Out</button> 
198    </div> 
199    </div> 
200</div> 
201</div> 
202<!-- END CALIFORNIA OPT-OUT MODAL STYLE AND MARKUP --> 
203<!-- BEGIN CALIFORNIA OPT-OUT MODAL LOGIC --> 
204<script> 
205AUI().ready(function() { 
206        //this aui.ready prevents from it not showing cali opt out modal due to getting the node before page finished loading. 
207        const copyrightNode = document.querySelector('#footerIdAdPlatinum .copyright'); 
208        const fdicNode = document.querySelector('#footerIdAdPlatinum .fdic'); 
209        const agreementNode = document.querySelector('#footerIdAdPlatinum .member-agreement'); 
210        agreementNode.innerHTML= '<a class="text-color-white" href="https://online1.elancard.com/oad/cmas.controller?locationCode=${lc!''}&preparerType=customer&isNewRequest=false" target="_blank">Cardmember Agreements</a>'; 
211        copyrightNode.innerHTML= '<sup>©</sup> Elan Financial Services ' + ${currentYear}; 
212        copyrightNode.classList.add('ecdma-footer-client-name-copyright'); 
213        fdicNode.innerHTML = '<a class="text-color-white" href="https://www.myaccountaccess.com/onlineCard/publicPrivacyPolicy.do?phase=privacyPolicy" target="_blank">Privacy and Security</a>'; 
214        /* BEGIN CALIFORNIA OPT-OUT MODAL TRIGGER */ 
215        fdicNode.insertAdjacentHTML('afterend', '<div style="display: inline-block; margin-left: 100px;"><a href="javascript:void(0);" class="opt-out-link" 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>'); 
216        /* END CALIFORNIA OPT-OUT MODAL TRIGGER */ 
217 
218        window.getCookieDomain = function() { 
219            var hostname = window.location.hostname.split("."); 
220            return hostname && hostname.slice(hostname.length - 2).join("."); 
221
222        window.setToOptOut = function() { 
223            if (window.getCookie('privacy_optout')) { 
224                    document.getElementById('message-no-cookie').style.display = 'none'; 
225                    document.getElementById('message-with-cookie').style.display = 'block'; 
226                    document.getElementById('opt-out-button').setAttribute('disabled', true) 
227                } else { 
228                    document.getElementById('message-no-cookie').style.display = 'block'; 
229                    document.getElementById('message-with-cookie').style.display = 'none'; 
230
231
232        window.getCookie = function(name) { 
233            var value = '; ' + document.cookie; 
234            var parts = value.split('; ' + name + '='); 
235            if (parts.length === 2) return parts.pop().split(';').shift(); 
236
237        window.californiaOptOut = function() { 
238            if (!window.getCookie('privacy_optout')) { 
239                document.cookie = 'privacy_optout=1; path=/; domain=' + window.getCookieDomain() + '; expires=Thu, 31 Dec 2099 00:00:00 GMT;'; 
240                try { 
241                if (window.CustomEvent) { 
242                    window.dispatchEvent(new CustomEvent('privacy_optout')); 
243                } else { 
244                    var privacyOptoutEvent = document.createEvent('Event'); 
245                    privacyOptoutEvent.initEvent('privacy_optout', true, true); 
246                    window.dispatchEvent(privacyOptoutEvent); 
247
248                window.setToOptOut(); 
249                } catch (err) { 
250                console.error(err); 
251
252
253
254        MicroModal.init({ 
255            onShow: window.setToOptOut 
256        }); 
257     
258        // user browser setting for Global Privacy Control to opt out of sharing information with third parties 
259        const isBrowserGpcOptOut = navigator.globalPrivacyControl; 
260        if(isBrowserGpcOptOut === true) { 
261        window.californiaOptOut(); 
262
263    }); 
264</script> 
265<!-- END CALIFORNIA OPT-OUT MODAL LOGIC -->