{"version":3,"sources":["webpack:///js/main-code-split.js","webpack:///../node_modules/core-js/fn/array/find.js","webpack:///../node_modules/core-js/fn/array/includes.js","webpack:///../node_modules/core-js/fn/object/entries.js","webpack:///../node_modules/core-js/fn/object/values.js","webpack:///../node_modules/core-js/fn/string/includes.js","webpack:///../node_modules/core-js/modules/_a-function.js","webpack:///../node_modules/core-js/modules/_add-to-unscopables.js","webpack:///../node_modules/core-js/modules/_an-object.js","webpack:///../node_modules/core-js/modules/_array-includes.js","webpack:///../node_modules/core-js/modules/_array-methods.js","webpack:///../node_modules/core-js/modules/_array-species-constructor.js","webpack:///../node_modules/core-js/modules/_array-species-create.js","webpack:///../node_modules/core-js/modules/_cof.js","webpack:///../node_modules/core-js/modules/_core.js","webpack:///../node_modules/core-js/modules/_ctx.js","webpack:///../node_modules/core-js/modules/_defined.js","webpack:///../node_modules/core-js/modules/_descriptors.js","webpack:///../node_modules/core-js/modules/_dom-create.js","webpack:///../node_modules/core-js/modules/_enum-bug-keys.js","webpack:///../node_modules/core-js/modules/_export.js","webpack:///../node_modules/core-js/modules/_fails-is-regexp.js","webpack:///../node_modules/core-js/modules/_fails.js","webpack:///../node_modules/core-js/modules/_function-to-string.js","webpack:///../node_modules/core-js/modules/_global.js","webpack:///../node_modules/core-js/modules/_has.js","webpack:///../node_modules/core-js/modules/_hide.js","webpack:///../node_modules/core-js/modules/_ie8-dom-define.js","webpack:///../node_modules/core-js/modules/_iobject.js","webpack:///../node_modules/core-js/modules/_is-array.js","webpack:///../node_modules/core-js/modules/_is-object.js","webpack:///../node_modules/core-js/modules/_is-regexp.js","webpack:///../node_modules/core-js/modules/_library.js","webpack:///../node_modules/core-js/modules/_object-dp.js","webpack:///../node_modules/core-js/modules/_object-keys-internal.js","webpack:///../node_modules/core-js/modules/_object-keys.js","webpack:///../node_modules/core-js/modules/_object-pie.js","webpack:///../node_modules/core-js/modules/_object-to-array.js","webpack:///../node_modules/core-js/modules/_property-desc.js","webpack:///../node_modules/core-js/modules/_redefine.js","webpack:///../node_modules/core-js/modules/_shared-key.js","webpack:///../node_modules/core-js/modules/_shared.js","webpack:///../node_modules/core-js/modules/_string-context.js","webpack:///../node_modules/core-js/modules/_to-absolute-index.js","webpack:///../node_modules/core-js/modules/_to-integer.js","webpack:///../node_modules/core-js/modules/_to-iobject.js","webpack:///../node_modules/core-js/modules/_to-length.js","webpack:///../node_modules/core-js/modules/_to-object.js","webpack:///../node_modules/core-js/modules/_to-primitive.js","webpack:///../node_modules/core-js/modules/_uid.js","webpack:///../node_modules/core-js/modules/_wks.js","webpack:///../node_modules/core-js/modules/es6.array.find.js","webpack:///../node_modules/core-js/modules/es6.string.includes.js","webpack:///../node_modules/core-js/modules/es7.array.includes.js","webpack:///../node_modules/core-js/modules/es7.object.entries.js","webpack:///../node_modules/core-js/modules/es7.object.values.js","webpack:///../node_modules/node-uuid/uuid.js","webpack:///../node_modules/xo-page-components/src/value-props/template.html","webpack:///../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html","webpack:///../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html","webpack:///../node_modules/xo-ui-components/src/message/template.html","webpack:///../node_modules/xo-ui-components/src/spinner/template.html","webpack:///../node_modules/object-assign/index.js","webpack:///../node_modules/squid/dist/core/api.js","webpack:///../node_modules/squid/dist/core/class.js","webpack:///../node_modules/squid/dist/core/config.js","webpack:///../node_modules/squid/dist/core/dom.js","webpack:///../node_modules/squid/dist/core/error.js","webpack:///../node_modules/squid/dist/core/event.js","webpack:///../node_modules/squid/dist/core/index.js","webpack:///../node_modules/squid/dist/core/integration.js","webpack:///../node_modules/squid/dist/core/loader.js","webpack:///../node_modules/squid/dist/core/model.js","webpack:///../node_modules/squid/dist/core/promise.js","webpack:///../node_modules/squid/dist/core/util.js","webpack:///../node_modules/squid/dist/index.js","webpack:///../node_modules/squid/dist/locale/currency.js","webpack:///../node_modules/squid/dist/locale/feature.js","webpack:///../node_modules/squid/dist/locale/index.js","webpack:///../node_modules/squid/dist/locale/locale.js","webpack:///../node_modules/squid/dist/locale/name.js","webpack:///../node_modules/squid/dist/locale/quantity.js","webpack:///../node_modules/squid/dist/ng/component.js","webpack:///../node_modules/squid/dist/ng/core.js","webpack:///../node_modules/squid/dist/ng/directive.js","webpack:///../node_modules/squid/dist/ng/events.js","webpack:///../node_modules/squid/dist/ng/feature.js","webpack:///../node_modules/squid/dist/ng/index.js","webpack:///../node_modules/squid/dist/ng/lazyLoadRoutes.js","webpack:///../node_modules/squid/dist/ng/locale.js","webpack:///../node_modules/squid/dist/ng/module.js","webpack:///../node_modules/squid/dist/ng/ng.js","webpack:///../node_modules/squid/dist/ng/pxp.js","webpack:///../node_modules/squid/dist/ng/route.js","webpack:///../node_modules/squid/dist/paypal/config.js","webpack:///../node_modules/squid/dist/paypal/env.js","webpack:///../node_modules/squid/dist/paypal/index.js","webpack:///../node_modules/squid/dist/paypal/pxp.js","webpack:///../node_modules/ul-inline/dist/inject.js","webpack:///../node_modules/xo-address-components/src/address-display/directive.js","webpack:///../node_modules/xo-address-components/src/address-display/template.html","webpack:///../node_modules/xo-beaver/dist/level.js","webpack:///../node_modules/xo-beaver/dist/logger.js","webpack:///../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js","webpack:///../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html","webpack:///../node_modules/xo-credit-components/src/lib/personalizationManager.js","webpack:///../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js","webpack:///../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js","webpack:///../node_modules/xo-credit-components/src/offer/directive.js","webpack:///../node_modules/xo-credit-components/src/offer/template.html","webpack:///../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js","webpack:///../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html","webpack:///../node_modules/xo-credit-components/src/pay-with-credit/directive.js","webpack:///../node_modules/xo-credit-components/src/pay-with-credit/template.html","webpack:///../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js","webpack:///../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js","webpack:///../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js","webpack:///../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html","webpack:///../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html","webpack:///../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js","webpack:///../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html","webpack:///../node_modules/xo-device-info/dist/index.js","webpack:///../node_modules/xo-form-components/src/language-options/directive.js","webpack:///../node_modules/xo-form-components/src/language-options/template.html","webpack:///../node_modules/xo-form-components/src/select-shipping-method/directive.js","webpack:///../node_modules/xo-form-components/src/select-shipping-method/template.html","webpack:///../node_modules/xo-login-components/src/create-password/directive.js","webpack:///../node_modules/xo-login-components/src/create-password/template.html","webpack:///../node_modules/xo-login-components/src/dolphin/directive.js","webpack:///../node_modules/xo-login-components/src/dolphin/template.html","webpack:///../node_modules/xo-login-components/src/dolphin/utils.js","webpack:///../node_modules/xo-login-components/src/login-overlay/directive.js","webpack:///../node_modules/xo-login-components/src/login-overlay/template.html","webpack:///../node_modules/xo-login-components/src/login/directive.js","webpack:///../node_modules/xo-login-components/src/login/fn.js","webpack:///../node_modules/xo-login-components/src/login/handler/directive.js","webpack:///../node_modules/xo-login-components/src/login/handler/template.html","webpack:///../node_modules/xo-login-components/src/login/kmliEligibility.js","webpack:///../node_modules/xo-login-components/src/login/props.js","webpack:///../node_modules/xo-login-components/src/login/template.html","webpack:///../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js","webpack:///../node_modules/xo-login-components/src/password-recovery/directive.js","webpack:///../node_modules/xo-login-components/src/password-recovery/template.html","webpack:///../node_modules/xo-login-components/src/unified-login/directive.js","webpack:///../node_modules/xo-login-components/src/unified-login/template.html","webpack:///../node_modules/xo-login-components/src/unified-login/ul.js","webpack:///../node_modules/xo-member-components/src/backup-label/directive.js","webpack:///../node_modules/xo-member-components/src/backup-label/template.html","webpack:///../node_modules/xo-member-components/src/billing-address/directive.js","webpack:///../node_modules/xo-member-components/src/billing-address/template.html","webpack:///../node_modules/xo-member-components/src/card-backup/directive.js","webpack:///../node_modules/xo-member-components/src/card-backup/template.html","webpack:///../node_modules/xo-member-components/src/give-at-checkout/directive.js","webpack:///../node_modules/xo-member-components/src/give-at-checkout/factory.js","webpack:///../node_modules/xo-member-components/src/give-at-checkout/template.html","webpack:///../node_modules/xo-member-components/src/msb-offer/directive.js","webpack:///../node_modules/xo-member-components/src/msb-offer/template.html","webpack:///../node_modules/xo-member-components/src/no-balance/directive.js","webpack:///../node_modules/xo-member-components/src/no-balance/factory.js","webpack:///../node_modules/xo-member-components/src/no-balance/template.html","webpack:///../node_modules/xo-member-components/src/preferred-checkbox/directive.js","webpack:///../node_modules/xo-member-components/src/preferred-checkbox/factory.js","webpack:///../node_modules/xo-member-components/src/preferred-checkbox/template.html","webpack:///../node_modules/xo-member-components/src/review-address/directive.js","webpack:///../node_modules/xo-member-components/src/review-address/template.html","webpack:///../node_modules/xo-member-components/src/review-paywith/directive.js","webpack:///../node_modules/xo-member-components/src/review-paywith/factory.js","webpack:///../node_modules/xo-member-components/src/review-paywith/template.html","webpack:///../node_modules/xo-member-components/src/review-shipping-options/directive.js","webpack:///../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js","webpack:///../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html","webpack:///../node_modules/xo-member-components/src/review-shipping-options/template.html","webpack:///../node_modules/xo-member-components/src/review-topup/directive.js","webpack:///../node_modules/xo-member-components/src/review-topup/template.html","webpack:///../node_modules/xo-member-components/src/rewards-checkbox/directive.js","webpack:///../node_modules/xo-member-components/src/rewards-checkbox/factory.js","webpack:///../node_modules/xo-member-components/src/rewards-checkbox/template.html","webpack:///../node_modules/xo-member-components/src/rewards-checkbox/utils.js","webpack:///../node_modules/xo-member-components/src/show-more-fi/directive.js","webpack:///../node_modules/xo-member-components/src/show-more-fi/factory.js","webpack:///../node_modules/xo-member-components/src/show-more-fi/template.html","webpack:///../node_modules/xo-member-components/src/vaulting/utils.js","webpack:///../node_modules/xo-models/src/app/index.js","webpack:///../node_modules/xo-models/src/auth/index.js","webpack:///../node_modules/xo-models/src/bml/index.js","webpack:///../node_modules/xo-models/src/checkout/index.js","webpack:///../node_modules/xo-models/src/checkout/lib/utils.js","webpack:///../node_modules/xo-models/src/choice/index.js","webpack:///../node_modules/xo-models/src/credit/index.js","webpack:///../node_modules/xo-models/src/donation/index.js","webpack:///../node_modules/xo-models/src/eligibility/index.js","webpack:///../node_modules/xo-models/src/experiments/index.js","webpack:///../node_modules/xo-models/src/fi/index.js","webpack:///../node_modules/xo-models/src/fi/lib/constants.js","webpack:///../node_modules/xo-models/src/fi/lib/fiApis.js","webpack:///../node_modules/xo-models/src/fi/lib/fiMessages.js","webpack:///../node_modules/xo-models/src/fiMeta/index.js","webpack:///../node_modules/xo-models/src/gdprCookieBanner/index.js","webpack:///../node_modules/xo-models/src/inventory/index.js","webpack:///../node_modules/xo-models/src/marketingoffer/index.js","webpack:///../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js","webpack:///../node_modules/xo-models/src/newMember/index.js","webpack:///../node_modules/xo-models/src/processorDecline/index.js","webpack:///../node_modules/xo-models/src/profilemanagement/index.js","webpack:///../node_modules/xo-models/src/shippingMethod/index.js","webpack:///../node_modules/xo-models/src/subscription/index.js","webpack:///../node_modules/xo-models/src/user/index.js","webpack:///../node_modules/xo-models/src/wallet/index.js","webpack:///../node_modules/xo-models/src/wallet/instrument.js","webpack:///../node_modules/xo-page-components/src/cart/cartWrapper/directive.js","webpack:///../node_modules/xo-page-components/src/cart/cartWrapper/template.html","webpack:///../node_modules/xo-page-components/src/cart/directive.js","webpack:///../node_modules/xo-page-components/src/cart/itemDetails/directive.js","webpack:///../node_modules/xo-page-components/src/cart/itemDetails/template.html","webpack:///../node_modules/xo-page-components/src/cart/lib/decode_entities.js","webpack:///../node_modules/xo-page-components/src/cart/lib/pxp.js","webpack:///../node_modules/xo-page-components/src/cart/lib/showCartDecision.js","webpack:///../node_modules/xo-page-components/src/cart/lib/ui.js","webpack:///../node_modules/xo-page-components/src/cart/subscription/directive.js","webpack:///../node_modules/xo-page-components/src/cart/subscription/template.html","webpack:///../node_modules/xo-page-components/src/cart/template.html","webpack:///../node_modules/xo-page-components/src/constants/fbMessenger.js","webpack:///../node_modules/xo-page-components/src/footer/directive.js","webpack:///../node_modules/xo-page-components/src/footer/footerMap.js","webpack:///../node_modules/xo-page-components/src/footer/opinionlab.js","webpack:///../node_modules/xo-page-components/src/footer/template.html","webpack:///../node_modules/xo-page-components/src/gdprCookieBanner/directive.js","webpack:///../node_modules/xo-page-components/src/gdprCookieBanner/template.html","webpack:///../node_modules/xo-page-components/src/header/directive.js","webpack:///../node_modules/xo-page-components/src/header/template.html","webpack:///../node_modules/xo-page-components/src/marketingOffers/directive.js","webpack:///../node_modules/xo-page-components/src/marketingOffers/template.html","webpack:///../node_modules/xo-page-components/src/merchant-header/directive.js","webpack:///../node_modules/xo-page-components/src/merchant-header/template.html","webpack:///../node_modules/xo-page-components/src/messenger-plugin/directive.js","webpack:///../node_modules/xo-page-components/src/messenger-plugin/template.html","webpack:///../node_modules/xo-page-components/src/notYou/directive.js","webpack:///../node_modules/xo-page-components/src/notYou/template.html","webpack:///../node_modules/xo-page-components/src/returnParams/index.js","webpack:///../node_modules/xo-page-components/src/subscription-terms/index.js","webpack:///../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js","webpack:///../node_modules/xo-page-components/src/utils/index.js","webpack:///../node_modules/xo-page-components/src/value-props/directive.js","webpack:///../node_modules/xo-return-to-merchant/dist/formatReturnContent.js","webpack:///../node_modules/xo-return-to-merchant/dist/index.js","webpack:///../node_modules/xo-return-to-merchant/dist/util.js","webpack:///../node_modules/xo-shipping-change/src/factory.js","webpack:///../node_modules/xo-shipping-change/src/util.js","webpack:///../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js","webpack:///../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html","webpack:///../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js","webpack:///../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html","webpack:///../node_modules/xo-third-party-components/src/thirdParty-info/index.js","webpack:///../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js","webpack:///../node_modules/xo-third-party-components/src/venmo-models/index.js","webpack:///../node_modules/xo-title/dist/directive.js","webpack:///../node_modules/xo-title/dist/template.html","webpack:///../node_modules/xo-tracking/dist/builder.js","webpack:///../node_modules/xo-tracking/dist/button.js","webpack:///../node_modules/xo-tracking/dist/directive.js","webpack:///../node_modules/xo-tracking/dist/fpti.js","webpack:///../node_modules/xo-tracking/dist/index.js","webpack:///../node_modules/xo-tracking/dist/listener.js","webpack:///../node_modules/xo-tracking/dist/model.js","webpack:///../node_modules/xo-ui-components/src/accessibility/directive.js","webpack:///../node_modules/xo-ui-components/src/accessibility/ui.js","webpack:///../node_modules/xo-ui-components/src/banner/directive.js","webpack:///../node_modules/xo-ui-components/src/banner/template.html","webpack:///../node_modules/xo-ui-components/src/card-loader/directive.js","webpack:///../node_modules/xo-ui-components/src/card-loader/template.html","webpack:///../node_modules/xo-ui-components/src/cardicon/directive.js","webpack:///../node_modules/xo-ui-components/src/cardicon/template.html","webpack:///../node_modules/xo-ui-components/src/directionality/directive.js","webpack:///../node_modules/xo-ui-components/src/error-tooltip/directive.js","webpack:///../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js","webpack:///../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js","webpack:///../node_modules/xo-ui-components/src/experience/directive.js","webpack:///../node_modules/xo-ui-components/src/experience/template.html","webpack:///../node_modules/xo-ui-components/src/expired-message/directive.js","webpack:///../node_modules/xo-ui-components/src/expired-message/template.html","webpack:///../node_modules/xo-ui-components/src/fi-panel/directive.js","webpack:///../node_modules/xo-ui-components/src/fi-panel/template.html","webpack:///../node_modules/xo-ui-components/src/link/directive.js","webpack:///../node_modules/xo-ui-components/src/link/template.html","webpack:///../node_modules/xo-ui-components/src/message/directive.js","webpack:///../node_modules/xo-ui-components/src/modal/directive.js","webpack:///../node_modules/xo-ui-components/src/modal/template.html","webpack:///../node_modules/xo-ui-components/src/popup/directive.js","webpack:///../node_modules/xo-ui-components/src/spinner/directive.js","webpack:///../node_modules/xo-ui-components/src/sticky-cta/directive.js","webpack:///../node_modules/xo-ui-components/src/sticky-cta/template.html","webpack:///../node_modules/xo-ui-components/src/sticky-cta/utils.js","webpack:///../node_modules/xo-ui-components/src/tooltip/directive.js","webpack:///../node_modules/xo-ui-components/src/tooltip/template.html","webpack:///../node_modules/xo-ui-components/src/user-assist-banner/directive.js","webpack:///../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js","webpack:///../node_modules/xo-ui-components/src/user-assist-banner/template.html","webpack:///../node_modules/xo-validation/dist/directive.js","webpack:///../node_modules/xo-wallet-components/src/3ds/directive.js","webpack:///../node_modules/xo-wallet-components/src/3ds/template.html","webpack:///../node_modules/xo-wallet-components/src/add-card/addcard/factory.js","webpack:///../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js","webpack:///../node_modules/xo-wallet-components/src/add-card/cvv/directive.js","webpack:///../node_modules/xo-wallet-components/src/add-card/cvv/template.html","webpack:///../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js","webpack:///../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html","webpack:///../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js","webpack:///../node_modules/xo-wallet-components/src/currency-conversion/factory.js","webpack:///../node_modules/xo-wallet-components/src/fi-logos/directive.js","webpack:///../node_modules/xo-wallet-components/src/fi-logos/template.html","webpack:///../node_modules/xo-webpack-config/polyfills.js","webpack:///./js/app.js","webpack:///./js/bootstrap.js","webpack:///./js/lib/constants.js","webpack:///./js/lib/contingency.js","webpack:///./js/lib/cplIntegration.js","webpack:///./js/lib/error.js","webpack:///./js/lib/fallback.js","webpack:///./js/lib/icFallback.js","webpack:///./js/lib/index.js","webpack:///./js/lib/integration.js","webpack:///./js/lib/metaBuilder.js","webpack:///./js/lib/middleware.js","webpack:///./js/lib/miniBrowser.js","webpack:///./js/lib/security.js","webpack:///./js/lib/stateChangeListener.js","webpack:///./pages/services/cardart-instrument/index.js","webpack:///./pages/xo-checkout/directive.js","webpack:///./pages/xo-checkout/route.js","webpack:///./pages/xo-checkout/template.html","webpack:///./pages/xo-end/route.js","webpack:///./pages/xo-landing/route.js","webpack:///./pages/xo-login/directive.js","webpack:///./pages/xo-login/guestThrottle.js","webpack:///./pages/xo-login/loginEligibility.js","webpack:///./pages/xo-login/onboarding/directive.js","webpack:///./pages/xo-login/onboarding/template.html","webpack:///./pages/xo-login/paypalplus.js","webpack:///./pages/xo-login/route.js","webpack:///./pages/xo-login/template.html","webpack:///./pages/xo-login/tokenized-wallet-loader/directive.js","webpack:///./pages/xo-login/tokenized-wallet-loader/factory.js","webpack:///./pages/xo-login/tokenized-wallet-loader/template.html","webpack:///./pages/xo-login/util.js","webpack:///./pages/xo-review/directive.js","webpack:///./pages/xo-review/factory.js","webpack:///./pages/xo-review/lib/shippingChangeFeature.js","webpack:///./pages/xo-review/route.js","webpack:///./pages/xo-review/template.html","webpack:///./pages/xo-review/tokenizedFactory.js","webpack:///./pages/xo-select-fi/factory.js"],"names":["webpackJsonp","../node_modules/core-js/fn/array/find.js","module","exports","__webpack_require__","Array","find","../node_modules/core-js/fn/array/includes.js","includes","../node_modules/core-js/fn/object/entries.js","Object","entries","../node_modules/core-js/fn/object/values.js","values","../node_modules/core-js/fn/string/includes.js","String","../node_modules/core-js/modules/_a-function.js","it","TypeError","../node_modules/core-js/modules/_add-to-unscopables.js","UNSCOPABLES","ArrayProto","prototype","undefined","key","../node_modules/core-js/modules/_an-object.js","isObject","../node_modules/core-js/modules/_array-includes.js","toIObject","toLength","toAbsoluteIndex","IS_INCLUDES","$this","el","fromIndex","value","O","length","index","../node_modules/core-js/modules/_array-methods.js","ctx","IObject","toObject","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","create","callbackfn","that","val","res","self","f","result","push","../node_modules/core-js/modules/_array-species-constructor.js","isArray","SPECIES","original","C","constructor","../node_modules/core-js/modules/_array-species-create.js","speciesConstructor","../node_modules/core-js/modules/_cof.js","toString","call","slice","../node_modules/core-js/modules/_core.js","core","version","__e","../node_modules/core-js/modules/_ctx.js","aFunction","fn","a","b","c","apply","arguments","../node_modules/core-js/modules/_defined.js","../node_modules/core-js/modules/_descriptors.js","defineProperty","get","../node_modules/core-js/modules/_dom-create.js","document","is","createElement","../node_modules/core-js/modules/_enum-bug-keys.js","split","../node_modules/core-js/modules/_export.js","global","hide","redefine","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","Function","U","W","R","../node_modules/core-js/modules/_fails-is-regexp.js","MATCH","KEY","re","e","../node_modules/core-js/modules/_fails.js","exec","../node_modules/core-js/modules/_function-to-string.js","../node_modules/core-js/modules/_global.js","window","Math","__g","../node_modules/core-js/modules/_has.js","hasOwnProperty","../node_modules/core-js/modules/_hide.js","dP","createDesc","object","../node_modules/core-js/modules/_ie8-dom-define.js","../node_modules/core-js/modules/_iobject.js","cof","propertyIsEnumerable","../node_modules/core-js/modules/_is-array.js","arg","../node_modules/core-js/modules/_is-object.js","_typeof","Symbol","iterator","obj","../node_modules/core-js/modules/_is-regexp.js","isRegExp","../node_modules/core-js/modules/_library.js","../node_modules/core-js/modules/_object-dp.js","anObject","IE8_DOM_DEFINE","toPrimitive","Attributes","../node_modules/core-js/modules/_object-keys-internal.js","has","arrayIndexOf","IE_PROTO","names","i","../node_modules/core-js/modules/_object-keys.js","$keys","enumBugKeys","keys","../node_modules/core-js/modules/_object-pie.js","../node_modules/core-js/modules/_object-to-array.js","getKeys","isEnum","isEntries","../node_modules/core-js/modules/_property-desc.js","bitmap","enumerable","configurable","writable","../node_modules/core-js/modules/_redefine.js","SRC","$toString","TPL","inspectSource","safe","isFunction","join","this","../node_modules/core-js/modules/_shared-key.js","shared","uid","../node_modules/core-js/modules/_shared.js","store","mode","copyright","../node_modules/core-js/modules/_string-context.js","defined","searchString","NAME","../node_modules/core-js/modules/_to-absolute-index.js","toInteger","max","min","../node_modules/core-js/modules/_to-integer.js","ceil","floor","isNaN","../node_modules/core-js/modules/_to-iobject.js","../node_modules/core-js/modules/_to-length.js","../node_modules/core-js/modules/_to-object.js","../node_modules/core-js/modules/_to-primitive.js","valueOf","../node_modules/core-js/modules/_uid.js","id","px","random","concat","../node_modules/core-js/modules/_wks.js","_Symbol","USE_SYMBOL","../node_modules/core-js/modules/es6.array.find.js","$find","forced","../node_modules/core-js/modules/es6.string.includes.js","context","indexOf","../node_modules/core-js/modules/es7.array.includes.js","$includes","../node_modules/core-js/modules/es7.object.entries.js","$entries","../node_modules/core-js/modules/es7.object.values.js","$values","../node_modules/node-uuid/uuid.js","console","__WEBPACK_AMD_DEFINE_RESULT__","_window","parse","s","buf","offset","ii","toLowerCase","replace","oct","_hexToByte","unparse","bth","_byteToHex","v1","options","clockseq","_clockseq","msecs","Date","getTime","nsecs","_lastNSecs","dt","_lastMSecs","Error","tl","tmh","node","_nodeId","n","v4","BufferClass","rnds","rng","_rng","_mathRNG","_nodeRNG","_whatwgRNG","_crypto","crypto","msCrypto","getRandomValues","_rnds8","Uint8Array","_rnds","r","warn","_rb","code","randomBytes","Buffer","substr","_seedBytes","uuid","../node_modules/noop-loader/index.js!../node_modules/xo-page-components/src/value-props/template.html","../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html","../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html","../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/message/template.html","../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/spinner/template.html","../node_modules/object-assign/index.js","getOwnPropertySymbols","propIsEnumerable","assign","test1","getOwnPropertyNames","test2","fromCharCode","map","test3","forEach","letter","err","from","symbols","to","../node_modules/squid/dist/core/api.js","cookiesEnabled","_util","$util","location","hostname","$getLatestCorrelationID","latestCorrelationID","__esModule","$Api","_jquery","_jquery2","default","_logger","_event","_class","_promise","_config","_error","_loader","$meta","headers","JSON","cache","standardHeaders","correlationId","windowLoad","memoize","$promise","resolver","resolve","readyState","addEventListener","batchQueue","pre","transientCache","transientCacheResolvers","metaBuilder","preload","method","url","data","uri","resolvers","pop","preloadComplete","$logger","info","$Class","extend","timeout","getAttempts","postAttempts","action","_action","post","retrieve","api","getURI","model","params","buildAPIName","meta","buildMeta","transientError","cacheKey","buildURL","silent","$event","emit","first","providing","hasTransientCacheData","attemptRequest","batch","batchRequest","then","handleResponse","$BatchShortCircuit","reject","handleErrorResponse","assert","buildBatchRequest","results","debounce","batchIds","batchData","batchId","opts","dependencies","$batchApi","handleBatchResponse","promises","run","depsPresent","every","depName","dependency","available","ack","addTransientCacheData","attempts","attempt","remaining","getTransientCacheResponse","getHttpResponse","status","contingency","$ApiError","stack","transient","error","startTime","now","http","duration","saveResponseState","loggerPayload","server","time","corrid","performance","getEntries","resource","referenceId","setTransientCache","getTransientCacheData","$config","enablePreload","preMethod","preUri","Boolean","$loader","firstLoad","getHeaders","csrfJwt","X-Requested-With","x-csrf-jwt","stringify","httpJQuery","request","getRes","getResponseHeader","success","responseJSON","noop","statusText","ajax","loggerName","resultModel","populate","fetchChildren","children","failSilently","$Contingency","errorData","handler","contingencies","message","validation","properties","reason","$Forbidden","relative","substring","component","ext","baseURI","urls","baseUrl","apiName","charAt","reopenClass","clearCache","registerMetaBuilder","builder","addHeader","angular","../node_modules/squid/dist/core/class.js","_extend","isobject","transpose","recipient","args","ob","item","__name__","construct","init","reopen","__classmethods__","isChild","Cls","className","argsLength","startIndex","match","eval","_super","_get","path","def","_set","each","callback","_keys","EmptyConstructor","instance","set","setProperties","../node_modules/squid/dist/core/config.js","$cookies","cookies","config","../node_modules/squid/dist/core/dom.js","$dom","elementReady","getElementById","interval","setInterval","clearInterval","setTimeout","loadScript","src","attributes","clearScriptLoadTimeout","loadTimeout","clearTimeout","script","onload","onreadystatechange","onerror","event","setAttribute","_iterator","_isArray","_i","_ref","next","done","attribute","body","appendChild","cssReady","check","styleSheets","stylesheet","href","../node_modules/squid/dist/core/error.js","$ShortCircuit","$FallbackError","$Error","monkeyPatch","file","line","col","payload","handle","handlers","product","entryPoint","../node_modules/squid/dist/core/event.js","customEventEmitter","use","eventEmitter","eventName","_iterator2","_isArray2","_i2","_ref2","on","cancel","cancelled","splice","once","listener","_customEventEmitter","preventDefault","defaultPrevented","_iterator3","_isArray3","_i3","_ref3","broadcast","_customEventEmitter2","refCount","$scope","start","stop","count","cancelStartListener","cancelStopListener","$on","compose","end","startAll","endAll","active","getCount","isActive","reset","../node_modules/squid/dist/core/index.js","_api","_integration","_model","_dom","../node_modules/squid/dist/core/integration.js","$integration","$CONTEXT","$DEFAULT","FULLPAGE","POPUP","LIGHTBOX","WEBVIEW","NATIVE_CHECKOUT","flow","setFlow","setContext","getContext","isIFrame","isPopup","opener","top","isContext","isFlow","getConfig","../node_modules/squid/dist/core/loader.js","_firstLoad","loader","isLoading","../node_modules/squid/dist/core/model.js","$Model","onPopulate","_modelCache","populated","invalidated","onInvalidate","fetchMock","retriever","save","serialize","reload","log","invalidate","child","_child","parent","_children","retrieveInstance","modelCache","fetch","bulkInvalidate","invalidationKey","modelInstance","instanceId","../node_modules/squid/dist/core/promise.js","Promise","CustomPromise","sequential","methods","prom","sleep","items","all","hash","collection","condition","until","pollTime","alwaysResolve","handlerResult","shortCircuit","../node_modules/squid/dist/core/util.js","$getRedirectUrl","urlParams","deploy","isLocal","isStage","dispatch","fallbackUrl","cmd","$dispatch","stateChange","fromState","toState","redirect","$experiment","sample","throttle","hashStr","group","param","pxp_exp_id","pxp_trtmnt_id","$unresolved","isUnsafeRedirect","_angular","redirected","paramCache","blacklist","blacklistRegex","RegExp","sanitizeUrlForLogging","inputUrl","idleTimeout","redir","onunload","onbeforeunload","frameBust","flush","cookie","storageEnabled","setItem","removeItem","sessionStorageEnabled","localStorageEnabled","string","queryString","pair","decodeURIComponent","search","idx","rIdx","lastIndexOf","queryStringSplice","qs","insert","remove","paramToQueryString","filter","sort","encodeURIComponent","hashParam","base64Decode","encodedString","atob","base64Encode","decodedString","btoa","decodeAndParse","array","$log","findIndex","range","pad","char","some","reduce","intial","_len","_key","paramKeys","paypalURL","stage","host","override","methodName","existing","memoized","_","enablePerformance","parseInt","bindObject","bind","str","chr","len","charCodeAt","abs","popup","checkWindowClosed","win","closed","open","close","unique","mod","prop","_this","_arguments","called","camelToDasherize","g","camelToCapsUnderscore","toUpperCase","dasherizeToCamel","parentWindow","hasRTL","test","o","oAsString","_this2","_len2","_key2","functionCall","getProperty","_options$splitOn","splitOn","defaultValue","pathArray","shift","catch","../node_modules/squid/dist/index.js","_ng","_core","_locale","_paypal","../node_modules/squid/dist/locale/currency.js","maybeIgnoreSymbol","style","symbol","codeParts","symbolParts","equiv","codePart","symbolPos","roundingAndSeparators","amountString","country","lang","decimalPlaces","dot","comma","parseFloat","truncate","amountParts","round","exception","HUNDREDS_SEPARATOR_EXCEPTION","wholeString","HUNDREDS_SPLITTER","THOUSANDS_SPLITTER","decimalString","forceCodeToRight","parts","CODE_IN_FRONT","endsWithWhitespace","ENDS_IN_WHITESPACE","newStyle","getFinalStyle","styleString","_ref4","_ref4$symbol","STYLE_EXCEPTION","currencyStyle","_currencyStyle$split","positiveStyle","negativeStyle","baseStyle","applyCurrencyStyle","finalStyle","amountFormatted","_ref5","_ref5$wrapCodeInSpan","wrapCodeInSpan","absoluteAmountFormatted","ALL_NON_BREAKING_SPACE","formatCurrency","amount","_ref6","$locale","metadata","_ref6$number","number","numberConfig","_ref6$currency","currency","currencyConfig","_currencyConfig$digit","digits","_currencyConfig$style","styles","_currencyConfig$suppo","supportedSymbols","currencySymbols","AmountOnlyStyle","DECIMAL_SEP","GROUP_SEP","getCurrencySymbol","truncateCurrencyConversionString","tr TR TRY","_ref7","fullString","amountForex","_ref8","_ref8$currency","../node_modules/squid/dist/locale/feature.js","$feature","features","regions","region","DEFAULT","$featureCountries","allCountries","countries","../node_modules/squid/dist/locale/index.js","_currency","_feature","_name","_quantity","../node_modules/squid/dist/locale/locale.js","sanitize","html","Content","props","$contentVersion","currentVersion","mapLanguage","unselectableLanguages","corp","betaLanguages","unsupportedLanguages","$renderContent","$flushContent","contentCache","content","$ContentModel","$MetadataModel","metadataCache","$localeHelper","$LocaleModel","JSONStringify","cacheVal","render","toSafeString","safeString","propStr","addContent","addMetadata","metadataVersion","countryCache","PP_SPECIAL_COUNTRIES_ISO_CODES","C2","staticUrl","countryCode","change","setVersion","versionPxpName","metadataVersionName","metadataPxpExperiments","$pxp","experimentName","ctx.COUNTRY","ctx.LANGUAGE","experimentTreatmentName","treatment","_this3","noBroadcast","choose","chosenCountry","chosenLang","supportedCountries","normalizeAddressFields","CONTENT_MAPPING","line1Label","line2Label","cityLabel","stateLabel","postcodeLabel","addressEntry","strings","loadedData","chooseCountry","chooseLang","getLocaleCode","getCountryCodeISO","normalizeLocale","locale","language","../node_modules/squid/dist/locale/name.js","isLatin","formatNameInformal","layoutMetadata","nameInformal","layout","first_name","last_name","formattedName","namePart","SUBSTITUTED_FIELDS","givenName","surname","../node_modules/squid/dist/locale/quantity.js","formatQuantity","quantity","_ref$number","../node_modules/squid/dist/ng/component.js","assertModelsRetrievedOrEmpty","setUpComponentRoute","$Component","componentRoute","scope","goto","route","parentRoute","parentScope","parentDirective","getDirective","childSpec","getDirectiveTag","viewConfig","autoConvertDirectiveToComponent","factory","tag","spec","$injector","invoke","controller","originalController","$element","_enablePopulateEvents","template","transclude","componentize","$populate","instances","$emit","populatedEvent","stopPropagation","promise","_directive","$registerDirective","restrict","link","$attrs","$form","closest","form","formID_element","formID_linked","element","addClass","validated","$setSubmitted","$valid","$eval","validateSubmit","focus","validate","wrapperType","rootEvents","actions","lifecycle","enter","reenter","exit","=","@","required","isRequired","optional","var","UNDEFINED","fields","display","componentScope","$parent","cancelReEnterEvent","resolverPromises","resolvedData","isLive","isTest","componentName","SubClass","directive","$rootScope","$new","attrs","cleanRootScope","$cleanRootScope","$compile","append","afterEach","$destroy","isolateScope","updateProps","$digest","$compileProvider","../node_modules/squid/dist/ng/core.js","$broadcast","$q","../node_modules/squid/dist/ng/directive.js","definition","directiveName","_angular2","../node_modules/squid/dist/ng/events.js","_uiRouter","currentStateName","$state","current","startLoadTime","currentState","timing","connectEnd","navigationStart","newState","../node_modules/squid/dist/ng/feature.js","attr","enabled","feature","unlessFeature","../node_modules/squid/dist/ng/index.js","_route","_component","_module","_events","_pxp","_lazyLoadRoutes","../node_modules/squid/dist/ng/lazyLoadRoutes.js","lazyLoadRoute","findRelativeState","initRoute","getHash","getParentState","getRoute","slug","lazyLoadChildren","lazyRoute","routeObj","fullRoutePath","childRoute","childAttributes","register","findAndPromisifyRoutes","targetState","splittedTargetState","states","routes","state","isRelative","stateName","stateOrName","base","rel","targetParams","shouldChangeState","go","errorMessage","errorStack","codeSplitting","fromHash","oldURL","toHash","newURL","hashQueryParams","splittedPath","hashParams","../node_modules/squid/dist/ng/locale.js","__dirname","__filename","htmlContent","$watch","bindHtmlCompile","contents","format","amount_formatted","$sce","trustAsHtml","newValue","oldValue","exportProviders","../node_modules/squid/dist/ng/module.js","../node_modules/squid/dist/ng/ng.js","$angularInvoke","$once","rootScope","autoCleanupEventHandlers","eventHandlers","eventCancelers","reference","canceler","eventHandler","../node_modules/squid/dist/ng/pxp.js","pxpRes","trackingData","pxpData","../node_modules/squid/dist/ng/route.js","getPageTitle","titleContent","changePageTitle","documentElement","fullStateTitle","stateTitle","title","$ComponentRoute","$Route","query","hasResolver","view","$location","routeName","isString","ChildRoute","childName","absolutePath","bootstrap","defaultState","middleware","injector","load","logStateNotFoundAndThrow","unfoundState","fromParams","_ref$logName","logName","toParams","$urlRouterProvider","otherwise","runMiddleware","loadDefaultState","logUnknownState","priority","constructTemplate","$stateProvider","paramString","auth","assertActive","../node_modules/squid/dist/paypal/config.js","_env","$env","../node_modules/squid/dist/paypal/env.js","isSandbox","../node_modules/squid/dist/paypal/index.js","../node_modules/squid/dist/paypal/pxp.js","logPxp","logPayload","exp_name","xe","xt","isElmoExperiment","treatments","treatment_name","experiment","pagename","experiment_id","treatment_id","loc_country","loc_lang","exp_source","$getPxpTreatments","forceApiCall","pxp","$PXPModel","forceTreatments","cached","pattern","experimentResponse","factors","$pxpMatch","patterns","pxpResponse","$pxpFactors","pxpFactors","$elmo","../node_modules/ul-inline/dist/inject.js","PAYPAL","unifiedLogin","d","height","frameborder","scrolling","sandbox","origin","protocol","h","q","heightInPx","x","w","p","v","k","targetElement","u","queryParams","iframePathname","xhrRequest","preLoadedSource","t","hasChildNodes","removeChild","lastChild","iframeType","onPostMessage","j","iframe","onPostMessageCallback","attachEvent","l","parentNode","m","contentWindow","outerHTML","write","XMLHttpRequest","ActiveXObject","responseText","send","inlineUlContents","inject","copyPasteIframe","removeTargetElement","messageDispatcher","nonPostMessageDispatcher","../node_modules/xo-address-components/src/address-display/directive.js","$xoAddressDisplayComponent","_squid","_template","_template2","address","showPreferred","displayFormattedAddr","formatAddress","prefix","prefixStr","displayLine1","line1","line2","displayLine2","city","postal_code","displayLine3","country_code","isPreferred","preferred_address","formattedAddr","$watchCollection","newVal","../node_modules/xo-address-components/src/address-display/styles.less","../node_modules/xo-address-components/src/address-display/template.html","../node_modules/xo-beaver/dist/level.js","INFO","DEBUG","ERROR","WARN","ALERT","debug","alert","../node_modules/xo-beaver/dist/logger.js","_level","Logger","logger","$logLevel","level","settings","$window","uniqueEvents","autoLog","WARNING","flushInterval","heartbeatInterval","sizeLimit","debounceInterval","rootTxnUri","hearbeatMaxThreshold","buffer","previousBeforeUnloadHandler","isDone","previousUnloadHandler","_flush","heartbeat","daemon","timestamp","perf","howBusy","lastSampledTime","lastLag","maxLag","dampendedLag","$interval","toFixed","noConsole","addPerformanceData","clientStartTime","isUndefined","client_elapsed","req_elapsed","addLocaleData","buildContext","site_cntry","toJson","pageID","print","enqueue","getTimestamp","logOffset","shouldPrintLogsToConsole","warning","$consoleLogLevel","immediate","when","debouncer_timeout","$timeout","debouncer_resolver","debouncer_promise","build","req","logURL","events","json","XRequest","logAppName","setRequestHeader","timer","createCalRootTxn","txnName","rootTxnData","transactionName","$Logger","beaconQueue","beacon","../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js","_bml","_index","checkoutSession","$CheckoutSessionModel","token","showDeclinePopup","bml","$BMLModel","preferenceCheck","showModal","showModalBackdrop","applicationStatus","bmlSetPreferrence","financial_instrument_id","msgKeys","bmlClickContinue","../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html","../node_modules/xo-credit-components/src/lib/personalizationManager.js","callDefaultServiceAndMapBanner","models","contentKeys","_xoCreditBannerUtils","$xoCreditBannerUtils","callSsotAndMapBanner","callSearchAdsAndMapBanner","personalizationManager","phase","PERSONALIZATION_PHASES","SHADOW","callDiscoverMessagesAndMapToBanner","originalBanner","discoverMessageBanner","compareAdObjects","RAMP","banner","CONTROL","../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js","COUNTRY_CODE","GreatBritain","UnitedStates","Germany","PERSONALIZATION_TREATMENT","GB","PERSONALIZATION_MESSAGE_PREFIX","../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js","_index2","_checkout","_index3","_xoCreditBannerConstants","getCreditInWallet","isBANoPurchase","getPlanList","fi","primaryFs","isCreditInWallet","isCreditSelected","creditInWallet","getSelectedStickyInstrument","selected","executeSsotCall","payee","checkoutCart","checkoutAppData","offers","$CreditInstallmentOptionsModel","isMemberCredit","getApplicationContext","applicationContext","isBillingNoPurchase","$DeviceInfo","isDevice","creditInstallmentOffer","isBilling","ppcConversionInfo","getPPCconversionInfo","ppcConversionRate","to_amount","isEligibleForCORE","purchaseAmount","threshold","$CreditOptionsModel","sacEligibleAmount","renderContentByKey","ctaText","logo","bodyText","bodyText2","termsLink","messageId","targetContentKey","isReuse","creditInstallmentOptionsModel","getPurchaseAmount","ni","formattedCartAmount","cartAmount","getInstallmentOptionsPresent","$CreditSharedInfoModel","setInstallmentOfferPresent","installmentCount","getInstallmentCount","installmentOffer","getInstallmentOffers","monthlyPayment","formattedAmt","term","installment","getNiOfferPresent","buildCreditOfferFptiObject","Device","isTablet","defaultValues","buyer_country","context_id","context_type","device_type","banner_type","presentmentStyle","presentmentType","mapBannerToFptiProperties","visaActive","merchantUpstreamPresentment","offerCategory","offerType","offerText1","incentiveOfferProgramId","incentiveOfferValue","propensity","approvability","campaignId","currencyConversionRate","cartCurrency","queryValues","creditSharedInfo","funding_instrument_count","getFiCount","cart_show_amt","getCartAmountVisible","checkoutSessionModel","fundingInstruments","isBalanceCoveringPurchase","plans","secondaryFIs","fiApplicableForThisTransaction","fundingOption","executeMorsDiscoverMessagesCall","application_context","creditOfferModel","$CreditOfferModel","payer","merchant","touchpoint","message_count","getCacheKey","hasBannerMessage","morsBanner","getBannerMessage","MessageDescription","CTAText","Logo","OfferText1","OfferText2","TermsLink","CartAmount","CartAmountCurrencyCode","OfferCategory","OfferType","Product","PresentmentStyle","PresentmentType","CrossCurrencyTransaction","CurrencyConversionRate","crossCurrencyTransaction","toTargetCurrency","purchase","amounts","total","currency_code","fromUnitCurrency","compare","base_ad","recommended_message","diff","keysToIgnore","expected","actual","../node_modules/xo-credit-components/src/offer/directive.js","_xoMORSCreditBannerUtils","_app","_auth","_marketingoffer","promotion","bmlaction","selectedmethod","reusetext","radio","parentContext","buyerCountry","isRedirectFromCape","discoverMessageError","BANNER_TYPES","PASSIVE","PROMINENT","USE_CASE","REUSE","ACQUISITION","CREDIT_TYPE","CORE","SAC","NI","EZP","BA","isNewMember","newMember","variant","creditOfferFptiMapObject","VisaActive","MerchantUpstreamPresentment","OfferTextTemplate","CartAmountVisible","NumberOfFIs","Propensity","Approvability","buildPSMonitoringObject","bannerType","psMonitorObject","m_err","m_prod_type","m_udf1","m_udf2","m_udf3","m_inptype","msgClass","showPassiveBanner","m_trdtype","showIncentiveBanner","m_event","m_chnl","hideBannerForNewMember","useCEPDecision","creditOffer","getDefaultBanner","useCase","creditType","termsText","termsLinkText","getReuseOfferInfo","isCreditTxnLowerThanThreshold","transactionAmount","getTransactionAmount","largeEligibleAmount","getCreditType","instModel","$CreditInstallmentModel","resolution","installmentOptionsPresent","largeOfferType","incrementTreatmentBannerDisplayedCount","localStorageKey","credit_banner_displayed_count","localStorage","getItem","isTreatmentCapped","maxCount","isNumber","isTreatmentIneligible","shouldSetInterstitial","getInterstitialContent","showDynamic","fireInterstitialBeacon","interstitialContent","cart_amount","termsText2","showInterstitial","isRamped","hasInterstitialMessage","interstitialMessage","getInterstitialMessage","interstitialParams","creditInterstitialTreatment","renderBanner","$AuthModel","$CheckoutCartModel","$CheckoutAppDataModel","$CheckoutPayeeModel","creditData","$CreditDataModel","merchantId","getId","ctx.merchantID","isUKBannerEligible","placementCode","presentation_types","pu_type","overrideLogoUrl","morsCallFailed","ssotCallFailed","creditOfferIntensity","isCoreSACEligible","checkIfSelectFiDisplayedBanner","showBanner","hideBanner","showBannerRules","offerTypeKey","isBmlOfferSmallOrLarge","showUKBanner","showCYCORules","commonRules","isBmlOfferLarge","merchant_country","processInstallmentResponse","creditOffers","is_second_button_txn","showWalletBanner","showCYCO","hideSacBanner","showBml","txnAmount","creditTerms","creditReuseTerms","mapDefaultToBanner","useFallbackBanner","creditTypeModel","mapReuseText","reuseOfferInfo","shouldCallMors","useContentInBanner","morsCacheId","ad","recommendationFound","touchpoint_messages","recommendedMessage","bannerContent","MessageType","offertype","incentiveOfferCurrencyCode","incentiveOfferProgramCode","trackingDetails","tracking_details","impressionUrl","impression_url","clickUrl","click_url","buyItemId","getTouchpointCode","MORS","setCartAmountAndCurrency","cart_currency","$xoMORSCreditBannerUtils","mapResponseToCreditBanner","executeMorsCall","walletInstruments","financial_instrument_type","financial_instrument_product_type","preferred","out_of_wallet","marketingOfferModel","$MarketingOfferModel","getMorsParametersForCreditBanner","cacheToken","isAdFound","getTargetAd","handlePersonalizationPXPResult","runPxpExperiment","pxpPattern","resultKey","$PXPBlacklist","isMerchantBlacklisted","showInstBanner","handleInterstitialTreatment","treatmentName","isRedirectingToInterstitial","ppc_acq_interstitial_variant_displayed","isEZP","showReuseBanner","fptiTrigger","showReuseBannerFlag","usCreditBannerFptiFired","usReusePXPLoaded","caid","$fireMORSBeacon","fireBeacon","placementId","isCreditInWalletForBAWithoutPurchase","creditInWalletButNotDefault","stickyFi","isCreditDefault","showPPCLogo","showCreditExample","reuseOfferTypeKey","selectExistingBml","fpList","fp","instrument_id","fiList","fundingSource","fundingOptions","planId","installments","selectedInstallmentData","preventChange","getBmlOfferTitle","suffix","bmlOfferTitle","showAcquisitionBanner","showPPCAcquisitionRadioButton","fptiCreditBannerTrigger","userAction","useraction","noLineItemDetails","$pxpCartAmt","isPurchase","showAmount","BannerMessage","funding_options_instruments","oldVal","hasNewValue","hasNewCurrency","../node_modules/xo-credit-components/src/offer/template.html","../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js","../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/styles.less","../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html","../node_modules/xo-credit-components/src/pay-with-credit/directive.js","doneFn","offerShown","showPayWithCredit","minAmount","minCreditAmtNoInterest","hasCredit","plan","sources","showPayWithCreditOffer","plccOffer","onSubmit","instruments","creditPlanId","../node_modules/xo-credit-components/src/pay-with-credit/template.html","../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js","$xoCreditOffer","showCreditBanner","isRedirectedFromCape","setFiCount","setShowCreditExample","../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js","gbPersonalizationTreatmentMapping","bannerTypes","gbContentKeys","_personalizationManager","reuse","acq","ACQ","NONE","xo_hermesnodeweb_gb_ppc_personalization_treatment1","xo_hermesnodeweb_gb_ppc_personalization_treatment2","xo_hermesnodeweb_gb_ppc_personalization_control","../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js","$xoCreditOfferGBBanner","_constants","experiments","gb_personalization","xo_hermesnodeweb_gb_ppc_personalization","showCartAmount","setCartAmountVisible","ppc","_fpList","hasInstallmentOffers","selectAcqBml","displayBannerType","startsWith","getMorsFptiFiredFlag","setMorsFptiFiredFlag","../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/styles.less","../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html","../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html","../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js","isTopBannerVisible","offerTopBanner","unbind","../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html","../node_modules/xo-device-info/dist/index.js","getIntegrationContext","integrationKey","integrationCTX","isWebView","logWebView","device","logEnabled","ua","userAgent","ios","android","ios_uiwebview","standalone","isSafariViewController","allowedXRequestedWithRegexMap","baiduBrowser","operaMini","maxthon","litterPenguinBrowser","xRequestedWithHeaderVal","requestHeaders","DEVICE_PATTERN","TABLET_PATTERN","isMobile","getDevicePlatform","matched","isApp","uaString","indexedDB","getCapabilities","capabilities","tablet","app","isWireless","isDesktop","getAppIntegrationType","app_int_type","isSafariiOSBrowserView","IOS_PATTERN","safari","isIOSApp","isChromeOnIOS","isFirefoxOnIOS","isSafariBrowserOnly","getiOSVersion","navigator","../node_modules/xo-form-components/src/language-options/directive.js","$","VALID_DIRECTION","isValidDirection","direction","setLanguageVars","localeModel","currentLanguage","currentCountry","languageList","languageLabel","supportedLanguages","hasMultipleLanguages","showLanguages","selectLanguage","toggle","parents","$apply","../node_modules/xo-form-components/src/language-options/template.html","../node_modules/xo-form-components/src/select-shipping-method/directive.js","callbackShippingOptions","fallbackShippingOptions","callbackInsuranceOffered","defaultFallbackOptionIndex","showShippingAddress","errorHandlerHelper","instantUpdateFeature","checkoutPayee","checkoutShippingAddresses","$CheckoutShippingAddressesModel","closeModal","openModal","continueHandler","selectedMethod","previous","insuranceSelected","selectedMethodCharges","taxAmtApplied","insurance","response","charges","getTax","getInsurance","shippingAmtApplied","safeConvert","shipping_charge","shipping_amount","isInstantUpdateFlow","showInsuranceAmount","insuranceApplied","updateSelectedExternalCallbackOption","shipping_options_source","updateShippingTaxCharge","shipping_method_type","selectedShippingMethod","shipping_method","insuranceAvailable","shippingInfoDisplay","addressChanged","previousCosts","formatAmount","amountToBeFormatted","currencyCode","uncheckInsuranceCheckbox","showInsurance","selectedIndex","Number","isInsuranceOfferedInCharge","charge","offer_insurance_option","responseHasShippingCharges","responseHasTaxCharges","tax","optionsSource","prevIndex","is_selected","highlight","isBuyNow","isCartUpload","cartAmounts","taxAmt","total_tax","insurance_amount","updatePreviousCosts","shipping","shippingAmount","taxAmount","hasShippingCostChanged","newShipping","hasTaxCostChanged","newTax","setToolTipMessage","addExternalCallBackOptionsToPatchRequest","patchEntities","externalCallbackOptions","purchaseUnits","external_callback_options","callback_shipping_options","callback_insurance_option_offered","fallback_shipping_options","field","populatePatchShippingDetails","shipMethod","shippingMethods","getShippingMethodId","populatePatchAmountDetails","patchableAmountEntities","constantAmountEntities","decimalDigits","newTotal","detail","details","valueInCart","getPatchReqData","shippingAmt","insuranceAmt","currencyDigits","subtotal","subTotal","handling_fee","handlingAmt","shipping_discount","shippingDiscountAmt","discount","discountAmt","price","description","item_option_selections","hasSelections","sku","hasDetails","hasMore","populateCallbackShippingOptions","shippingCharge","taxCharge","option","is_default","default_method","setDefaultShippingMethod","showShippingOptions","chargesElement","methodType","isPatchCartRequired","applicableShippingAmt","applicableTaxAmt","updateShippingTaxChargeWithDefaultOption","defaultOption","enableUserToChooseInsuranceOptionsIfAvailable","processShippingAndTaxResponse","shipping_region_supported","addPageError","nonEmptyMerchantDisplayName","shippingRegionSupported","show_shipping_options","profile_override_allowed","clearFallbackOptionsSelectionFlags","getShippingMethods","insuranceAmountOffered","shippingAddress","getShippingAddressMinimalDetails","getPrimaryShippingAddress","sntRequest","cart_weight","cartWeight","cart_handling","cartDiscount","item_list","tax_on_shipping_required","merchant_id","clearPageErrors","$ShippingMethodModel","hasAddressChanged","countryZipStateCityChanged","appDataFlags","flags","getMerchantDisplayName","nonEmptyReturnValue","isSentenceBeginning","is_buy_now_flow","is_cart_upload_flow","instantUpdateIntegration","unit","../node_modules/xo-form-components/src/select-shipping-method/template.html","../node_modules/xo-login-components/src/create-password/directive.js","CONTENT_KEY_MAP","ADD_CARD","benefitsKey","reasonKey","ADD_SHIPPING","APPLY_PPC","GENERIC","NEW_PHONE","NEED_US_ADDRESS","CARD_EXPIRED","MERCHANT_NOT_ACCEPT_AMEX","NEED_CREDIT_CARD","PAYER_AUTHENTICATION_REQUIRED","BILLING_AGREEMENTS","GENERIC_CONTINGENCY","onContinue","onCancel","contingencyName","getReasonKey","getBenefitsKey","../node_modules/xo-login-components/src/create-password/styles.less","../node_modules/xo-login-components/src/create-password/template.html","../node_modules/xo-login-components/src/dolphin/directive.js","_utils","hasUserClosedTheBanner","isPhoneConfirmed","hasOverlayLoaded","isTimerRunning","timerDuration","startTimer","flowName","closeBanner","openOverlay","showOverlay","onPostMessagesHandler","postMessage","closeOverlay","toastParams","getInjectULBaseObject","removeClass","ulToast","variantParams","_this4","autoTriggeredOverlay","messageKey","successContent","successKey","fixedBanner","transitionName","../node_modules/xo-login-components/src/dolphin/styles.less","../node_modules/xo-login-components/src/dolphin/template.html","../node_modules/xo-login-components/src/dolphin/utils.js","getDolphinEligibility","_eligibility","getCreditInterstitialEligibility","creditInterstitialPXPResult","intent","flowId","flowInfo","country.x","locale.x","confirm","confirm1","confirm2","confirm3","add","add1","add2","add3","$stickyCTA","getEligibility","isStickyEligible","eligibilityReason","isCreditInsterstialEligible","eligibility_reason","../node_modules/xo-login-components/src/login-overlay/directive.js","stateInfo","modalCallback","getFptiStateName","createPassword","passwordRecovery","logCancel","autoLogin","ulEligibility","subFlowTitles","addCard","bank","addShipping","deleteShipping","confirmUpop","redirectToCape","sepaAgreement","doRiskyLoginViaIframe","subFlowName","subFlowTitleKey","password_less","doRiskyLoginViaFullpageRedirect","redirectToLogin","ulClientKey","doRiskyLogin","fullPageRiskyLogin","cancelInsufficientPermission","hideOverlay","hideModal","oldState","onCreatePassword","onPasswordRecoveryReady","onCompletePasswordRecovery","onPasswordRecovery","onSuccess","baToken","billing","ba_token","pageOnOverlay","fromLoginOverlay","../node_modules/xo-login-components/src/login-overlay/template.html","../node_modules/xo-login-components/src/login/directive.js","_dist","_credit","_user","_fn","errorFn","clientId","redirectUri","apsIntegration","loginSubmit","setRememberUser","checkoutInputData","rmEnabled","rememberMeFeatureEnabled","hideRM","rememberUser","rememberMeChkBox","agreed","showLoadingMessage","isChangeStatus","loginAction","loginInput","user","email","password","client","redirect_uri","app_redirect_uri","client_id","app_clientId","target_client_id","response_type","skip_oauth","skip_consent","remember_me","apsRemMe","fastLogin","wps","fraudnet_id","supplementary","risk_correlation_id","adsClientContextData","x-pp-ads-client-context-data","transition_name","fptiStateName","xprops","onAuth","access_token","accessToken","error_source","int_error_description","error_type","$passwordField","localeNVP","forgotPasswordUrl","legacyForgotPasswordUrl","$CheckoutInputDataModel","$fn","sendTypingSpeedPayload","rememberMe","showRmMore","toggleRMDetails","loggedIn","remembered","timed_out","isCreditTxn","../node_modules/xo-login-components/src/login/fn.js","fnSessionId","fraudnetUrl","fnUrl","passive","allowsCustomEvent","injectScript","injectIframe","beaconOptions","doc","_l","dom","where","role","frameElement","cssText","getElementsByTagName","insertBefore","domain","js","_injectConfig","configOptions","fncls","text","sourceId","_loadBeacon","enableFraudNetForMobileWebView","trigger","fnLoaded","enableFraudnet","fnCallback","tsLoadPayload","CustomEvent","createEvent","initCustomEvent","dispatchEvent","fnCorrId","fraudnetConfig","fraudnet","fraudNetId","../node_modules/xo-login-components/src/login/handler/directive.js","_props","successCallback","contingencyCallback","logout","preAuth","hideloginpp","flowcontext","hideTitle","populateMessage","contentKey","handleAuthChallengeFailure","acRedirect","userLocale","ulMethod","handleAuthChallengeSuccess","is_auth_api_call","CONTENT_KEY","INVALID_EMAIL_PASSWORD","ACCOUNT_LOCKED","ACCOUNT_CLOSED","INVALID_PHONE","INVALID_PIN","INVALID_ACCESS_TOKEN","TIMED_OUT","CANNOT_PAY_SELF","RISK_DECLINE","LOGIN_ADD_PHONE","LOGIN_PREFILLED_SHIPPING_ADDRESS","LOGIN_CONTINGENCY","LOGIN_REACTIVATE","LOGIN_LEAVECHECKED","LOGIN_OT_GENERIC_ERROR","VENMO_GENERIC_ERROR","INVALID_USER","INVALID_PHONE_PIN","LOCKED_USER","CLOSED_USER","addPhone","ONETOUCH_REACTIVATE","ONETOUCH_LEAVECHECKED","ONETOUCH_GENERIC_ERROR","VENMO_ERROR","onComplete","$stateParams","targetPage","$loginProps","inList","riskyLoginInfo","mapInfo","contingencyDesc","subtitle","postlogout","showLanguageDropdown","errMessage","selfPay","ULCallbacks","showErrorMessages","errorCase","toggleUnifiedLogin","continueLoadingForUL","ULCallback","failedBecause","venmoError","errorCode","errorSource","82016","82017","int_error_code","msg","errorNum","handleContingency","onContingency","message_type","../node_modules/xo-login-components/src/login/handler/template.html","../node_modules/xo-login-components/src/login/kmliEligibility.js","$KmliEligibility","eligibility","ulMeta","getPXPList","countryCTX","pxpExpId","routingReason","isRememberedUser","refreshToken","kmli","allowKMLIForInternalIP","merchantCountry","enableOneTouchByDefault","compatibility","reasons","kmliEligibility","ota","forcedLogin","logoutCallback","isULpreload","preloadULTreatments","isTreatment","isUlAsLanding","forceUlAsLanding","ulAsLandingParam","getTimeoutLimit","pxpTimeoutTrt","ulTimeoutLimit","timeoutTrtFact","pxpTimeoutVal","preloadUL","safeEligibility","ulAsLanding","routing_reason","deviatingReasons","userGroup","eligible","../node_modules/xo-login-components/src/login/props.js","RISKY_LOGIN_TITLE","ECONSENT_REQUIRED","ELV_DECLINE","EXPIRED_CREDIT_CARD","INSTANT_FUNDING_SOURCE_UPSELL_NEEDED","NEED_CREDIT_CARD_OR_BANK_ACCOUNT","NEED_CONFIRMED_CARD","NEED_AUTHENTICATED_CARD","NEED_SHIPPING_ADDRESS","PHONE_NUMBER_REQUIRED","SEPA_MANDATE_ACCEPTANCE_NEEDED","TAX_ID_REQUIRED","RISKY_LOGIN_SUBTITLE","../node_modules/xo-login-components/src/login/template.html","../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js","$KmliUpsell","_newMember","_kmliEligibility","idToken","successfulLogin","isOneTouched","upsellOptInDisplayed","kmliEligible","walletTokenization","lastUpsellVersion","showReactivationInterstitial","kmliChecked","expPromise","getKmliContentKey","oneTouchContentVersion","getIsNmj","$NewMemberEligibility","isNmj","resolveEligibilityConditions","idTokenPresent","isWalletTokenization","remembered_partner_assertion","isKmliSet","ryiOptIn","interstitialDisplayed","KmliEligibility","jwtBasedAssertion","experience","eligibilityCriteria","profile_country","isNotNmj","ineligibleReasons","upsellFeatureEnabled","regularLogin","autoLoginEnabled","interstitial","color","pxpVersion","elgStr","cases","activeOT","getOptions","getFPTIAttributes","transInfix","../node_modules/xo-login-components/src/password-recovery/directive.js","onLoad","loaded","postMessageHandler","pageName","loadPasswordRecoveryFlow","isHermesInsideIframe","caller","contextId","$CalDataModel","getCalCorrId","../node_modules/xo-login-components/src/password-recovery/template.html","../node_modules/xo-login-components/src/unified-login/directive.js","_fpti","_kmliUpsell","parentCallback","promptlogin","postAuth","setLoading","isRT","heading","subHeading","loadCnt","setLoaded","fallback","appLoginHandler","startTimerTS","ulTimeoutPromise","stop_time","time_taken","page_load_time","disableUlTimeout","isTokenExchange","ulClientRedirect","redirect_reason_timeout","stopTimer","keepLoading","stopTimerTS","timeTaken","logFptiData","fptiData","errorDescription","fptiState","fptiTransition","buildRedirectURL","contingencyUrl","authChallengeUrl","paramIndex","returnUri","authChallengeReturnUri","userSelectedLanguage","loginAttemptedMethod","failureReasons","blacklistedDevice","enteringTime","ulSource","$ULoginModel","ryiOptin","getPostLoginFpti","authorizationToken","fptiTransitionName","keepMeLoggedIn","loginComplete","rtExchanged","stepupAuthRequired","cancelLocaleChange","upsellEligibilityData","ulData","x-paypal-internal-euat","eventId","ulEventHandlers","loadUnifiedLogin","iframeCopy","stsRedirectUri","stsReturnUrl","ulReturnUri","fn_dt","prompt","showNotYou","flow_context","flow_context_without_email","flowContextData","backupURL","onboarding","decodeURI","jwtToken","rememberMeContent","loginRendered","loadingCompletedTime","authorizationType","loginFullyLoaded","notYou","pageQualifier","ULState","loginEmailPasswordAttempted","loginPhonePinAttempted","loginAttempted","kmliStatus","loginSuccess","tokenExchanged","notYouLinkClicked","2fa","authChallengeRedirectUrl","safeRequired","serverError","error_code","$fpti","setupDataString","fptidata","client_validation_error","stepupRequired","captcha","bodyClick","expiredRefreshToken","int_error_desc","cancelAllLoaded","../node_modules/xo-login-components/src/unified-login/template.html","../node_modules/xo-login-components/src/unified-login/ul.js","$ul","optInToOneTouch","locale_country","locale_code","logSubmit","fptiPayload","failureHandler","ulTimeOutValue","oneTouchInterstitialOptInLoaded","oneTouchInterstitialOptInAttempted","oneTouchInterstitialOptInSuccess","refresh_token","oneTouchInterstitialOptInFailed","oneTouchInterstitialOptInNotAuthorized","ulTargetAttribute","width","margin","padding","../node_modules/xo-member-components/src/backup-label/directive.js","$xoBackupLabel","hasMask","../node_modules/xo-member-components/src/backup-label/styles.less","../node_modules/xo-member-components/src/backup-label/template.html","../node_modules/xo-member-components/src/billing-address/directive.js","_fi","editUri","getBillingAddress","cardId","cardInfo","$CardInfoModel","billingAddress","updateScopeData","selectedCardId","line3","header","updateType","../node_modules/xo-member-components/src/billing-address/styles.less","../node_modules/xo-member-components/src/billing-address/template.html","../node_modules/xo-member-components/src/card-backup/directive.js","_interopRequireDefault","_fiMeta","_fiMeta2","fiMeta","getAllowedBackups","planList","currentPlanId","renderCover","backup","cardBackup","getPlan","renderOption","getName","lastDigits","selectBackup","selectedmethodPlan","setPlan","toggleDropdown","showDropdown","showDropdownUI","position","css","right","left","visibility","$document","contains","off","../node_modules/xo-member-components/src/card-backup/styles.less","../node_modules/xo-member-components/src/card-backup/template.html","../node_modules/xo-member-components/src/give-at-checkout/directive.js","_factory","merchantName","showConsent","showConsentBox","$GiveAtCheckoutFactory","donateCheckboxSelected","isWpsflow","isWPSflow","charity","formattedAmount","tracking","../node_modules/xo-member-components/src/give-at-checkout/factory.js","parseMessage","mors","touchpoints","messages","chosen","model_score","prev","curr","parseUserType","user_type","DONOR_MODELS","model_id","decideEligibility","$MessageDiscoverModel","identity_context","recommendation_context","touchpoint_details","_parseMessage","userType","paymentAction","billingAgreement","is_wps_flow","is_wps_subscription_flow","is_shopping_cart_flow","is_invoice_flow","isInvoiceFlow","buyerID","isCorp","wpsTreatment","pxpTreatment","ctx.userType","ctx.currencyCode","ctx.paymentAction","ctx.merchantId","ctx.merchantCountry","ctx.buyerCountry","ctx.isBillingAgreement","ctx.isWpsFlow","ctx.isSubscriptionFlow","ctx.isBuyNowFlow","ctx.isCartUploadFlow","ctx.isShoppingCartFlow","ctx.isInvoiceFlow","ctx.isMobile","ctx.isCorp","pxpResult","../node_modules/xo-member-components/src/give-at-checkout/styles.less","../node_modules/xo-member-components/src/give-at-checkout/template.html","../node_modules/xo-member-components/src/msb-offer/directive.js","$xoMsbOffer","msb","minPurchaseAmount","../node_modules/xo-member-components/src/msb-offer/styles.less","../node_modules/xo-member-components/src/msb-offer/template.html","../node_modules/xo-member-components/src/no-balance/directive.js","$xoNoBalance","onShowSecondaryMsg","showSecondaryMsg","_$NoBalanceFactory$ge","$NoBalanceFactory","showMsgWithAmount","pendingBalances","balance1","balance2","amt","amt1","amt2","../node_modules/xo-member-components/src/no-balance/factory.js","_wallet","isAlreadyShown","getPxp","shouldShowMsgWithAmount","hasUserPendingBalance","no_balance","markAsAlreadyShown","isUserWithPendingBalance","$WalletModel","wallet","getAmountsOfBalances","isNoBalanceEligible","number_of_balances","no_balance_eligible","balance_amount1","balance_currency1","balance_amount2","balance_currency2","../node_modules/xo-member-components/src/no-balance/styles.less","../node_modules/xo-member-components/src/no-balance/template.html","../node_modules/xo-member-components/src/preferred-checkbox/directive.js","makeFiPreferred","cardart","toggleModel","fiId","pref_fi_option_shown","../node_modules/xo-member-components/src/preferred-checkbox/factory.js","getSinglePreferredCheckboxPxp","getChoicePreferredCheckboxEligibility","$ChoiceEligibility","getVariant","choiceExperiment","preferredCheckbox","choiceEligibility","isSinglePreferredCheckboxEligible","showPreferredCheckbox","../node_modules/xo-member-components/src/preferred-checkbox/styles.less","../node_modules/xo-member-components/src/preferred-checkbox/template.html","../node_modules/xo-member-components/src/review-address/directive.js","makeAddrPreferred","storePickUpSelected","nmjExperience","hideShipToHeader","gotoShipping","allow_change_shipping","cannotChangeShippingInfoMessages","updateMakePreferredFlag","flag","shown","isMakePreferred","isPreferredShippingEnabled","one_page","design_2","design_3","../node_modules/xo-member-components/src/review-address/template.html","../node_modules/xo-member-components/src/review-paywith/directive.js","_factory2","_factory3","_factory4","_factory5","_experiments","Experiments","newObj","ADD_CARD_URLS","SIDEBAR_DEFAULT","label","SIDEBAR_ADDCARD_WITH_ADDBANK","showBmlPopup","installmentNotSelected","payButtonText","padToggleFeature","selectFiVariant","creditParentContext","choiceBalanceCheckboxState","nmjMultiPage","multiPage","showMoreFiFactory","$ShowMoreFiFactory","smartAuthFactory","$SmartAuthFactory","currencyConversionFactory","$CurrencyConversionFactory","isCountryDE","showUachFeatureDiscalimer","isMultiFiPadEligible","isPadToggleFeatureApplicable","padToggleEnabled","setPadStatus","checkboxEnabled","getPadStatus","getMultiFiPadCheckboxState","multiFiCheckboxStates","setPadStatusForMultiFi","isPAD","isIACH","balanceWithRewards","$RewardsCheckboxFactory","hideAmount","hasRewards","isRewardsPlan","getRewardsContent","getContentKeys","isSelected","getID","selection","destroy","showChangeFI","canChangeFI","showCreditPlacement","fs","is_pinless_debit","applicable","getSortedPlans","getPadAndIachCombinedPlans","showMultiFiPadToggle","padToggle","isPadToggleApplicableForFS","showPadLabelForPadEligibleCountries","isIACHWithPad","isUSGambling","isUSBuyer","isUSmerchant","isGambling","getAddCardLink","linkObj","show","setShowAmount","showAmt","setNegativeBalanceData","negBals","reverse","setShowBillingAddress","selectedInstrument","showBillingAddress","setCurrencyConversionExperiment","callCurrencyConversionPXP","hasConversion","conversion","to_amount_forex","to_code","from_code","fetchPXPTreatments","setMultiFiPadCheckboxState","logFptiForPadToggle","pad_toggle_status","showPreferredLabelForMultiFi","isMEFT","showPreferredLabelForSingleFi","filteredPlans","showPreferredLabel","showPreferredCheckboxForMultiFi","initPadToggleFeatureParams","isPadToggleApplicable","sortedPlans","defaultPlan","showMultipleFi","setPadToggleEligbiility","padToggleFeatureSupported","$PreferredCheckboxFactory","buildCache","getBankInstrumentId","instrumentId","isSplitPaymentWithBalanceAndIachPlan","iachSource","sub_type","isIachPlan","brand_name","merchant_name","merchant_email","cvvData","lastAddedCard","iscvvshown","disableStickyForMerchant","disableMerchantForStickyBA","stickyInstrument","isWpsSubscription","showPayMerchantWithPayPal","showPayWithText","checkoutPlan","isMSB","isBalance","hasECheck","getDisallowedPreferred","getPreferred","hasMultipleBalances","gotoWallet","bmlSeeTerms","showPadToggle","padToggleForFS","isPadPlan","isSplitPaymentWithBalanceAndIach","showCheckbox","checkboxBalanceChecked","checkbox","getPadFsContent","last4","date","hop_date","updatePlan","multiFiPadToggleCheckboxEvent","padToggleCheckboxEvent","bankInstrumentId","getBankPadPlanIdByInstrumentId","padInstrumentId","iachPlanWithoutBalance","processAllLoadedPadToggle","section","querySelector","blur","fptiLogged","handleAllLoadedForPadToggle","stickyEligible","enableStickyFunding","instrument","unconfirmed_bank","showBackupPlan","isRP","isSubscriptionsV1","showRpBaText","showExpandedText","isExpandedAgreementText","getBAContent","consentCode","consent_code","stickyFI","stickyOrNoStickyText","expandedOrCollapsedText","isIndiaDomestic","indiaDomestic","isCIB","getRPContent","getStickyFiName","selectedStickyInstrument","getStickyFiLast4","showSinglePreferred","updateFS","fundingsource","resetIfDoesNotApply","isBillingNoCards","emptyPlan","futurePaymentInstruments","allow_billing_agreement_without_bufs","showEmptyPlanHeader","selectApplyForPPC","showConversionOptions","getConversionOverlayFlag","../node_modules/xo-member-components/src/review-paywith/factory.js","isAuthRequired","constraint","getConstraintAmount","../node_modules/xo-member-components/src/review-paywith/template.html","../node_modules/xo-member-components/src/review-shipping-options/directive.js","SHIPPING_TYPE_MAPPING","SHIPPING","PICKUP","SHIPPING_TYPE","TAB_STATE","SHIP","shippingChangeFeature","setStateTo","selectedPickupMethod","selectShippingMethod","pickupMethods","supplement","addPaymentDetails","callCallback","shippingMethod","addedPaymentDetails","selected_shipping_method","callOnShippingChange","mapShippingMethodsByType","getTypeLabel","isPickupDropdownActive","isShippingDropdownActive","isShipping","isPickup","renderTabs","choosePageHeader","../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js","defaultText","onSelect","getFormattedLabel","select","clickDropdown","cachedSelectedMethod","copy","../node_modules/xo-member-components/src/review-shipping-options/dropdown/styles.less","../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html","../node_modules/xo-member-components/src/review-shipping-options/styles.less","../node_modules/xo-member-components/src/review-shipping-options/template.html","../node_modules/xo-member-components/src/review-topup/directive.js","walletPreferences","$WalletPreferences","tokenizedFundingCapabilitiesModel","$TokenizedFundingCapabilitiesModel","tokenizedWalletToken","gotoTopupFunding","showSepaModal","openSepa","sepaModel","$SepaModel","sepa","sepa_mandate","bankId","instrumentIconId","$WalletInstrumentNameMapping","getInstrumentNameNormalized","identifyPreferred","userSelectedFundingSource","fundingSources","tokenizationPatchXO","_models","topupFundingSources","getCurrency","isTopupEnabled","direct","topup","topupAmounts","isDirectFundingEnabled","fundingLabel","isSepaMandateRequired","../node_modules/xo-member-components/src/review-topup/styles.less","../node_modules/xo-member-components/src/review-topup/template.html","../node_modules/xo-member-components/src/rewards-checkbox/directive.js","_choice","choiceVariant","rewards","interstitialValue","rewardsAssociatedIds","rewardsPayload","rewards_type","contentkeys","issuerName","fi_id","cardID","setCheckboxSelectionForPlan","isReplan","submit","isRewardsTypeChangeable","issuerDetails","rewardsType","submitRewards","planID","rewardsID","isFail","iRewardsPlan","issuerData","rewards_amt","planid","form_error","getRewardDetails","getInitialRewardsValue","fullOverlay","rewardsDetails","rewards_constraint","conversion_metadata","valueValidator","maximum_usable","rawValue","toNumber","maxUsable","minAllowed","minimum_spend","exists","hasMax2DigitDecimal","errorMap","errorList","testcase","useAmountContent","currency_symbol","rewardAmount","toCommaSeparatedString","conversion_type","currencyAmount","conversionDetails","inputType","convert","formOutputContent","rewardPoints","../node_modules/xo-member-components/src/rewards-checkbox/factory.js","REWARD_CODE_MAPPINGS","DLR","MIL","TYP","LPTS","WPTS","USD","MLS","related_card","available_incentive","rewards_currency_code","rewards_code","rewardMonetaryValue","monetary_value","rewardsCache","cancelSessionWatcher","checkboxSelection","rewardsChosenPlan","isFeatureEnabled","refreshCache","_models$checkoutSessi","rewardsFound","isRewardsFi","getPrimaryFI","isBalanceSelected","isPayPalBalanceSelected","getRewardsPlanFromFi","fiDetails","getPlanFromId","ifRewardsThenUpdatePlan","isRewardsChosen","selectedPlan","matchPlanFromConstraints","getInstrumentID","balance","getPlanID","fiSelectionContext","isChoiceVariant","isMultiFi","usingPayPalBalance","uiSelectedPlanId","clickSelectedPlanId","isRewards","disregardClickSelection","_models$checkoutSessi2","_checkoutSession$fund","sessionHasBalance","setSelectedPlan","clearSelectedPlan","last4Digits","getString","rewardsAvailble","subText","policy","secondLineText","chargeAmount","changeAmount","formInputLabel","formResultLabel","enterValidAmount","overlayButton","errorHandler","../node_modules/xo-member-components/src/rewards-checkbox/styles.less","../node_modules/xo-member-components/src/rewards-checkbox/template.html","../node_modules/xo-member-components/src/rewards-checkbox/utils.js","getSelectedPlan","isPayNow","convertValue","sanitizeNumber","rewardsInCurrency","useCurrency","outputType","skipConversion","limit","rounding","hasComma","num","getPrecision","decimal_precision","decimal_precisions","ele","getRounding","rounding_modes","mapper","UNNECESSARY","HALF_UP","_ctx$conversion_metad","precision","toLocaleString","useGrouping","minimumFractionDigits","conversionData","factor","conversion_factor","force","_ctx$conversion_metad2","_ctx$issuerData","skip","converted","isWPS","$applyAsync","firstPlanFi","matchingPlans","grossTotal","maximumUsuableRewards","clickSelectedPlanID","sessionSelectedPlan","sessionSelectedPlanID","idMatches","planHasBalance","balanceMatches","rewardsMatches","../node_modules/xo-member-components/src/show-more-fi/directive.js","$xoShowMoreFiLink","showMore","isShowMoreBtnClicked","../node_modules/xo-member-components/src/show-more-fi/factory.js","_ui","isTooManyFi","isFiNeverExpanded","multipleFi","shouldHideFiEntry","MAX_FI_NUMBER","selectFiOnKeyDown","keyCode","KEYS","UP","DOWN","../node_modules/xo-member-components/src/show-more-fi/template.html","../node_modules/xo-member-components/src/vaulting/utils.js","authorize","checkVaultingEligibility","checkPxp","ctx.country","hasBackupFunding","invoice","upop","unconfirmed_upop","threeDS","resolve_3ds","negativeBalance","poma","isXoonUpopRedirect","miniBrowser","secondButtonCredit","isVaultFlow","decision","alternateFundingOptionId","xchild","doec_on_approve","../node_modules/xo-models/src/app/index.js","$TokenizedWalletMsbOfferModel","$TokenizedWalletPinModel","$TokenizedWalletInfoModel","$TokenizedWalletEligibilityModel","$MessengerIntegrationDataModel","$AppDataModel","$LocaleConfigModel","_brandNames","_msbDisclaimerLinks","platform","invalidateOnLogout","isEligible","subjectTypes","SAMSUNG_PAY","ANDROID_PAY","brandNames","disclaimerLinks","msbDisclaimerLinks","isAndroidPay","subject","isSamsungPay","getSubject","brandName","getDisclaimerLink","getMsbDisclaimerLink","directFundingEnabled","topupFundingEnabled","getProductName","issuingCurrency","getContingencies","getTopupAmountChoices","topUpAmountChoices","getPinOrigin","pinOrigin","getSuggestedPin","suggestedPin","getSuggestedKey","suggestedKey","getPinId","pinId","isPinIdPresent","isSetupEligible","pxpBlacklist","../node_modules/xo-models/src/auth/index.js","$AuthApi","logged_in","visitorId","visitor_id","accessTokenPresent","access_token_present","rememberedOT","remembered_device_token","isSessionTimeout","clearCookies","isAuthApiCall","isConsumerApp","redirectToHermesOn3DSDecline","isUlReturnLoggedIn","auth_state","tokenizedWalletInfo","disallow_login_switch","is_venice_integration","logoutAndRedirect","updatedQs","ulAsLandingUrl","pathname","../node_modules/xo-models/src/bml/index.js","$BMLApplicationModel","$ApplyForBMLModel","personalInformation","day","month","year","natId","phone","telephone","phoneType","billingAdrress","phoneNumber","application_status","applicationId","application_id","../node_modules/xo-models/src/checkout/index.js","$CardBackupModel","$CheckoutPlanModel","$ShippingAddressModel","$CheckoutShippingAddressModel","$FlowEligibilityModel","$InstallmentOptionsModel","serializeInstallmentsOptionsData","$FundingOptionsModel","$FundingSourceModel","_processorDecline","getCartCurrencyCode","getBaToken","isBillingPurchase","getBillingDescription","isMultiSellerPurchase","isShippingMethodStorePickUp","getExternalCallbackOptions","incontext_integration","commit","user_action","is_snt_supported","getContent","merchantAltName","isSecondButton","formatLast4","eachPlan","_instruments","instr","subtype","_instruments2","getBankPlanIdByInstrumentId","subType","fundingInstrument","planIds","padPlanId","iachPlanId","getPlanByPlanId","getPlanSubType","_plan$primaryFs","getPadPlanHopDate","padPlan","getPadOrIachPlanIdBySelectedPlan","isPadToggleSelected","_plan$primaryFs2","writeable","fsId","fsSubtype","bankPadPlan","_plan$primaryFs3","_bankPadPlan$primaryF","padToggleApplicable","iachPlan","_iachPlan$primaryFs","_iachPlan$primaryFs$i","_plan$primaryFs4","_plan$primaryFs4$isPr","getMsbByPlanId","incentive","getDisplayPlans","getDisplayInstruments","_instruments3","cc","_checkoutCart$purchas","recipient_name","isOnBaNoStickyList","creditOptionsModel","US","addresses","getPreferredShippingAddress","preferredAddress","primaryAddress","primary_address","eachSource","hasFundingMethodType","found","hasFundingMethodSubType","isSplitBalance","reevaluateEligibility","isAllowed","forPlan","getCheckoutSessionPlan","_forPlan","_forPlan$primaryFs","allowCardBackup","getProcessorDeclineRetryEligibility","getKey","planKey","forKey","currentPlanKey","newPlan","smartDollarAuthFailed","selectedFuturePaymentInstrument","selectedInstrumentId","isMultipleBalancePlan","matchingBalancePlans","getDisallowedInstruments","disallowedInstruments","filteredDisallowedInstruments","declineReason","filterCardWithinLastNMonths","disallowedInstrument","instrumentID","expiredInstruments","disallowedPreferred","preferredExpiredInstruments","ppcFi","currency_conversion","../node_modules/xo-models/src/checkout/lib/utils.js","monthDiff","d1","d2","months","getFullYear","getMonth","expirePeriod","expiryDate","expire_year","expire_month","monthDifference","../node_modules/xo-models/src/choice/index.js","_thirdPartyInfo","checkPPCInstallments","checkoutPayeeModel","checkoutCartModel","checkoutAppDataModel","installment_options","authModel","splitBalance","PAD","secondButton","hasMerchantCountryChoice","fullBalance","hasPreferred","isNotMerchantAccount","account_type","isNotAndroidPay","isNotFbBaFlow","isThirdPartyWalletTransaction","thirdPartyExperience","isThirdPartyExperience","isNotGambling","isNotBaDisableStickyForMerchant","involvedCurrencies","singleCurrency","padToggleFeatureCheck","_$config$choiceExperi","_$config$choiceExperi2","stillInPxpRampCountries","_$config$choiceExperi3","ignored","_$config$choiceExperi4","multipleFiIgnored","_$config$choiceExperi5","selectFi","selectFiIgnored","isPadToggleFeatureSupported","pxpVariant","noBilling","noSplitBalance","balanceWithPreferred","noPAD","noSecondButton","noMerchant","noAndroidPay","noThirdPartyWalletTransactions","choiceIneligibleReasons","hasPPCInstallments","validCountryForMultipleFi","hasInstallments","multipleFiEligibility","creditInstallments","noInstallments","multipleFiIneligibleReasons","criteria","failed","promiseControl","buyer_id","buyerId","../node_modules/xo-models/src/credit/index.js","flow_type","cape_key","cape_success","credit_signup","merchantAction","credit_login_failure","is_cross_border","has_selected_cyco","cape_service_error","cape_redirect_uri","change_installment","nextState","installment_count","isCreditSignup","setCapeRedirectUri","input","getCapeRedirectUri","getMerchantAction","setCreditSignup","getCapeKey","getFlow","flowType","setNextState","isCapeSuccess","setCreditLoginFailure","getCreditLoginFailure","isCapeReturn","isCapeInternalServiceError","getNextState","setSelectedCYCOOffer","hasOffer","hasSelectedCYCOOffer","setCrossBorder","isCrossBorder","getCartAmountAndCurrency","cartData","setInstallmentCount","installmentOffers","niOffer","niOfferPresent","storeInstallments","sac_options","cacheParam","getNiOffer","installmentOfferPresent","fiCount","morsDiscoverMessageFPTIFired","cartAmountVisible","shouldShowCreditExample","alreadyFired","visible","../node_modules/xo-models/src/donation/index.js","$GiveAtCheckoutModel","../node_modules/xo-models/src/eligibility/index.js","_gdprCookieBanner","checkEligibility","$GDPRCookieBannerModel","hasBanner","isIE","isValidTraffic","isSmallScreen","innerWidth","gpdr","eligibleCountry","ineligibilityConditions","isNotSmallScreen","isNotValidTraffic","isNotEligibleCountry","ineligibilityReasons","_$CheckoutAppDataMode","treatmentTest","treatmentA","treatmentB","control","../node_modules/xo-models/src/experiments/index.js","padToggleWalletSupported","PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES","PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS","_getPad2Feature","../node_modules/xo-models/src/fi/index.js","$ResolveOTP","$Resolve3DS","$CardTypeFromBinModel","$BillingAddressesModel","$CurrencyConversionModel","$BillingAddressModel","$AddBillingAddressModel","$DeleteCardModel","$PreferredFi","$AddBankModel","$BankModel","$CardTypesModel","$UnavailableCardModel","$AddCardModel","$CardModel","BILLING_ADDRESS_FORMAT",","," ","IL","he","security_code","expiry_month","expiry_year","issue_number","start_month","start_year","cardNumber","isExisting","card","cardType","sponsor_id","preference","clearId","disallowedCards","disallowed","cardTypes","supportedNames","allowed","unsupportedNames","bank_account_number","bank_routing_number","iban_number","dob_day","dob_month","dob_year","creditorDetails","getBankData","candidate_id","uiChannel","langConfig","space","trim","normalization_status","_topup","_topup$fundingSource","autoload_minimum_threshold","_direct$fundingSource","_instrument_id","INSTRUMENT_MAP","AMSOUTH","BOFA","CAPITAL","CHASE","CITI","FIFTHTHIRD","HUNTINGTON","INGDIRECT","NATIONALCITY","PNC","REGIONS","SUNTRUST","TDWATERHOUSE","USAA","USBANK","VISA","WAMUTUAL","WELLSFARGO","INSTRUMENT_NAMES","fsName","instName","../node_modules/xo-models/src/fi/lib/constants.js","issuerDeclineExperimentMap","Trmt_xo_hermesnodeweb_issuer_decline_1","member","memberNoIssuer","guest","guestNoIssuer","../node_modules/xo-models/src/fi/lib/fiApis.js","$fiApis","patchCvv","cvv","../node_modules/xo-models/src/fi/lib/fiMessages.js","hasFi","generic","buyerCredit","processorDeclinedMsg","authSession","informalName","declinedInstruments","card_type","experimentMap","card_accounts","issuer","getIssuerName","cardAccounts","getXoonRedirectAddCardMsg","unavailableCard","xoonRedirectExperimentMap","msgType","msgRendered","getAddCardControlMsg","getAddCardMsg","getAddCardTreatmentMsg","cardList","lastCard","getAddBankTreatmentMsg","getPreAuthTreatmentMsg","preAuthDisallowed","getGamblingMsg","xo_hermes_addcard_msg_xoon_redirect_retry_control","msgKey","showDetails","xo_hermes_addcard_msg_xoon_redirect_retry_bgr_orange","xo_hermes_addcard_msg_xoon_redirect_retry_without_details","xo_hermes_addcard_msg_xoon_redirect_retry_with_details","xo_hermes_addcard_msg_xoon_redirect_retry_with_avs_details","xo_hermes_addcard_msg_xoon_redirect_noretry_control","xo_hermes_addcard_msg_xoon_redirect_noretry_bgr_orange","xo_hermes_addcard_msg_xoon_redirect_noretry_without_details","xo_hermes_addcard_msg_xoon_redirect_noretry_with_details","xo_hermes_addcard_msg_xoon_redirect_noretry_with_avs_details","xo_hermes_addcard_msg_xoon_redirect_avs_control","xo_hermes_addcard_msg_xoon_redirect_avs_dropdown","xo_hermes_addcard_msg_xoon_redirect_avs_address_box","_ref$instrument","_ref$disallowedInstru","_ref$cardAccounts","cardAccount","filtered_issuer_name","../node_modules/xo-models/src/fiMeta/index.js","NAME_MAPPINGS","MERCHANT_SPECIFIC_BALANCE","allFis","isSubType","capFirst","session","disableCardArt","cardArtEnabled","getCardArt","hasPadPlan","fis","isPinlessDebit","getCustomName","getAmount","getCurrencyCode","getAllCurrencyCodes","getCardMask","mask","before","productClass","after","isPad","isMeft","isIach","isEcheck","getEditDisallowedContentKey","editDisallowedMsg","isLinkedCard","../node_modules/xo-models/src/gdprCookieBanner/index.js","isGdprValid","testGdprBannerCookie","getBanner","lastResult","lastCountry","lastLang","../node_modules/xo-models/src/inventory/index.js","$InventoryModel","setInvetoryItems","inventoryItems","getInventoryItems","../node_modules/xo-models/src/marketingoffer/index.js","$MemberSegmentModel","_uuid","_uuid2","ads","targetPlacements","targetAd","valid","campaign","adunit_id","placement_code","nvp","campaign_id","buy_item_id","site","si","visit_id","page","epu","puType","payment_context","total_transaction_amount","totalTransactionAmount","total_shipping_amount","totalShippingAmount","business_case","business_case_variation","validate_existing_offer","payment_units","transaction_amount","transaction_id","encrypted_transaction_id","activity_id","pu","target_placements","wallet_instruments","addl_property_installments_not_allowed","installmentsNotAllowed","property","img","getMemberSegment","memberSegment","getCreditOffer","isExistingMember","isEligibleForExperimentation","memberSegments","bannerMessages","interstitialMessages","touchpoint_code","storeMessages","viewName","view_name","getBannerCount","getInterstitialCount","view_names","../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js","getMorsCreditBanner","morsInput","_ref2$silent","morsParams","cacheId","_ref3$placementCode","_ref3$pu_type","_ref3$presentation_ty","shouldShowPassiveBanner","morsOfferTypeToCreditType","formatBannerField","morsOfferType","../node_modules/xo-models/src/newMember/index.js","_shippingMethod","TREATMENT_PATTERNS","ONE_PAGE","DESIGN_2","DESIGN_3","mapTreatment","getSegmentParameters","isMemberSegmentEligible","memberSegmentModel","shippingRuleSummaryModel","negBalances","isMultiplePlans","isNegativeBalance","isThirdParty","isShippingRulesEnabled","isSnTEnabled","isAPay","isHideShipping","hide_shipping_address","shipping_address_required","isSupportedDefaultFundingSource","noMultiplePlans","noNegativeBalance","noThirdParty","noSnT","noAPay","noGambling","noSupportedDefaultFundingSource","noHideShipping","eligibleMember","ctx.SEGMENT","snt","$ShippingRuleSummaryModel","nmexp","nmjShowGreyHeader","getMemberSegmentParameters","../node_modules/xo-models/src/processorDecline/index.js","INELIGIBLE","moreThanOneCard","isNotSale","isWpsOrInvoice","currencies","hasBuyerPromoEmail","ineligibilityCriteria","currencyConversion","featureEligible","sameBuyer","lastBuyerId","pxpIneligible","eligibleWithPxp","../node_modules/xo-models/src/profilemanagement/index.js","$MerchantPreferenceModel","rm","return_url","auto_return","pdt","autoReturn","pdtEnabled","returnUrl","returnMethod","returnMethodSupported","postPaymentData","charSet","charset","../node_modules/xo-models/src/shippingMethod/index.js","shippingMethodType","AIR_SERVICE","ECONOMY","EXPEDITED_AIR_SERVICE","EXPEDITED_FLAT_RATE_SHIPPING","EXPRESS","EXPRESS_DOMESTIC","FREE_SHIPPING","GROUND","GLOBAL_PRIORITY","INTERNATIONAL_ECONOMY","INTERNATIONAL_EXPEDITED","INTERNATIONAL_EXPRESS","INTERNATIONAL_EXPRESS_AIR","INTERNATIONAL_PRIORITY_AIR","NEXT_DAY","NEXT_DAY_AIR","NEXT_DAY_AIR_ECONOMY","ONE_DAY_SHIPPING","OVERNIGHT","OVERNIGHT_FLAT_RATE_SHIPPING","PRIORITY","RUSH_DELIVERY","STANDARD_DOMESTIC","STANDARD_EXPEDITED","STANDARD_FLAT_RATE_SHIPPING","STANDARD_INTERNATIONAL","STANDARD_SHIPPING","STORE_PICKUP","TWO_DAY_SHIPPING","WORLDWIDE_SHIPPING","TWO_DAY_AIR","isStorePickUp","../node_modules/xo-models/src/subscription/index.js","$SubscriptionModel","$CreateBAModel","../node_modules/xo-models/src/user/index.js","$AuthConsentModel","$UserPhotoModel","$EConsentModel","$WaxUserModel","$PatchPhoneModel","$AddKYCModel","$ValidatePhoneModel","$UserInfoModel","$CheckoutClientDataModel","merchantIdentityData","display_name","logo_uri","identity_uri","validateClient","partner_id","validateRedirectUri","redirectUrl","ACTION","login","addBank","changeCurrencyConv","signup","mandate","addCredit","ulReturn","creditReturn","guestCurrencyConversion","guestAuthentication","compliance","payer_id","mandate_reference_number","funding_option_id","refresh_parent","escape_hatch","redirectReferrer","id_token","nonce","hide_rm","payloadEnc","xcancel","xsuccess","isEbayTxn","validAction","showRYP","requiresOAuth","requiresRedirectUri","validRedirectUri","errorUrl","errorDesc","successUrl","featureEnabled","isDefined","../node_modules/xo-models/src/wallet/index.js","getLinkedCapability","cardData","cap","_instrument","normalize","instId","imageTypes","imageType","mimeType","NETWORK_TYPES","rep","getWalletRepresentation","selector","renderedType","last_nchars","last_nchars_card_number","bal","balance_accounts","Instrument","getById","getCardById","getBankById","bank_accounts","BankInstrument","issuer_product_description","primary_content","card_art_details","card_art","base_cdn_link_path","base_cdnlink_path","original_mime_type","balances","balanceAccount","_balanceAccount$sub_b","sub_balances","subBalance","isChaseLinkedCard","linkedCapability","network_contingencies","networkInfo","network","../node_modules/xo-models/src/wallet/instrument.js","getLastChars","../node_modules/xo-page-components/src/cart/cartWrapper/directive.js","showArrow","../node_modules/xo-page-components/src/cart/cartWrapper/template.html","../node_modules/xo-page-components/src/cart/directive.js","_showCartDecision","showCartTotal","renderCartContainer","emptyCart","cartDesc","note","desc","hasItems","showCartDetails","hide_cart_details","notMultiSellerPurchase","wpsSubscription","amountHeaders","isCartTextTotalOrSubTotal","showCartDecision","showCartSubTotal","showAmountInCartIcon","decideShowCart","falsePositive","openedAlready","notOpened","canShow","showCartItem","breakdown","field_name","showCart","openCartListener","toggleCart","closeCart","toolongTracker","toolong","itemIsTooLong","isAppropriateType","hasExpandedState","isExpanded","expandedIndex","expand","collapse","focusElementCssSelector","../node_modules/xo-page-components/src/cart/itemDetails/directive.js","onClickLess","../node_modules/xo-page-components/src/cart/itemDetails/template.html","../node_modules/xo-page-components/src/cart/lib/decode_entities.js","decodeEntities","innerHTML","textContent","innerText","decodeEntitiesAngularFilter","converter","../node_modules/xo-page-components/src/cart/lib/pxp.js","showAmtBlacklist","../node_modules/xo-page-components/src/cart/lib/showCartDecision.js","isSubscriptionFlow","../node_modules/xo-page-components/src/cart/lib/ui.js","getVisibleWidth","elem","elemRect","getBoundingClientRect","getNaturalWidth","old","overflow","hasEllipsis","overflowHidden","getStyle","textOverflowEllipsis","whiteSpaceNowrap","_decode_entities","_decode_entities2","$filterProvider","getComputedStyle","currentStyle","invokeSubscriber","$parse","onEllipsis","resizeContainer","parentHeight","siblings","pos","outerHeight","siblingsHeight","spaceAvailable","dynamicMaxheight","../node_modules/xo-page-components/src/cart/subscription/directive.js","_subscriptionTerms","_subscriptionTerms2","subscriptionData","itemName","getItemName","itemOptions","getItemOptions","getFirstAmount","getFormattedFirstAmount","getTermsText","../node_modules/xo-page-components/src/cart/subscription/styles.less","../node_modules/xo-page-components/src/cart/subscription/template.html","../node_modules/xo-page-components/src/cart/template.html","../node_modules/xo-page-components/src/constants/fbMessenger.js","OVERRIDE_FBPP_REPEAT_FLAG","OVERRIDE_FBPP_MOBILE_FLAG","FB_BA_SHOWN_FLAG","MOBILE_CHANNEL","WEB_CHANNEL","FB_USER_API_MOBILE_URL","FB_USER_API_URL","FB_PROD_APP_ID","FB_PROD_PAGE_ID","AU","CA","HK","JP","NZ","PH","SG","CZ","DE","AT","CH","FR","IT","BR","ES","MX","ZA","NL","DK","SE","RU","PL","NO","GR","IN","AE","BH","DZ","EG","JO","KW","MA","OM","QA","SA","TN","YE","AR","CL","CO","CR","DO","EC","PE","UY","VE","FB_TEST_PAGE_ID","PRECHECKED_COUNTRIES","PXP_MESSENGER_EXPT","PXP_SHOW_MESSENGER_PLUGIN_TREATMENT","PXP_MESSENGER_IN","PXP_MESSENGER_PLUGIN_TREATMENT_IN","../node_modules/xo-page-components/src/footer/directive.js","_index4","_index5","_footerMap","_footerMap2","_opinionlab","_opinionlab2","escapeHatchIncontext","languageSwitch","showVenmoLegalLinks","isDESecondButtonFlow","showEscapeHatch","proxSignUpFlow","isApac","apacCountries","getRegion","footerLinks","APAC","showPolicyInfo","cancelRedirect","cancelUri","orderID","opType","return_uri","$ReturnToMerchant","goTo","isIndiaLegalEntity","legalEntity","hcl","hideCancelLinkForMerchant","hideCancel","cancel_url","cancelShowModal","popupUrl","showOL","opVars","rlogId","csci","calc","custId","languageCode","showFeedback","hideReturnCancelUrl","showVenmoLinks","showPaypalLinks","../node_modules/xo-page-components/src/footer/footerMap.js","BE","IE","EMEA","EM","LATAM","TR","DESecondButton","venmoContent","../node_modules/xo-page-components/src/footer/opinionlab.js","__WEBPACK_AMD_DEFINE_ARRAY__","popUp","opinionlabURL","_w","_sW","_sH","updateCustomVars","_ht","escape","_fC","_u","_sp","_rp","_aT","_aA","_doc","_tm","screen","_hr","referrer","custom_var","../node_modules/xo-page-components/src/footer/template.html","../node_modules/xo-page-components/src/gdprCookieBanner/directive.js","$gdprCookieBannerComponent","refreshGDPR","cleanup","div","bindGdprEvents","empty","../node_modules/xo-page-components/src/gdprCookieBanner/styles.less","../node_modules/xo-page-components/src/gdprCookieBanner/template.html","../node_modules/xo-page-components/src/header/directive.js","$SetHeaderText","isUnbranded","unbrandedTitle","unbrandedSubTitle","redirectiframe","redirectLightbox","isVenmoFlow","_ref$experience","facebook","isFacebookBAIntegration","isMessengerBAIntegration","subTitle","subscribe","headerText","setText","getText","../node_modules/xo-page-components/src/header/styles.less","../node_modules/xo-page-components/src/header/template.html","../node_modules/xo-page-components/src/marketingOffers/directive.js","titleTxtProperty","subtitleProperty","backgroundImage","xoTitleTag","xoTitleClass","morsOfferFlag","populateObj","setDefaultValues","Title","Body","imageUrl","propImg","matchMedia","matches","background-image","margin-top","pxpInfo","marketingOfferData","ads_arr","adFound","../node_modules/xo-page-components/src/marketingOffers/template.html","../node_modules/xo-page-components/src/merchant-header/directive.js","disableId","merchantDisplayName","ratio","../node_modules/xo-page-components/src/merchant-header/template.html","../node_modules/xo-page-components/src/messenger-plugin/directive.js","_fbMessenger","_fbMessenger2","pluginType","messengerIntegration","_models$messengerInte","fbBAShownFlag","override_fbpp_repeat","overrideRepeatUserFlag","isChatEnabled","emailHash","nameHash","dataRefJWT","_checkoutSession$paye","payerId","_checkoutSession$tran","transactionDetails","txnId","receipt_id","design","identityMatchVal","email_hash","name_hash","dataRefVal","originVal","pageIdVal","uuidVal","isPrechecked","sessionStorage","FB","fbAsyncInit","cbSTMPlugin","evt","ref","xhrFields","withCredentials","always","_ref2$responseText","userIdentifier","user_identifier","getBAResponse","isSuccessful","batoken","fbBAToken","xoJSData","data-env","data-stage","data-no-bridge","launchBAFlow","click_source","paypal","Checkout","contexts","messenger","payment","onAuthorize","billingToken","isUnchecked","confirmCheckboxPluginOptIn","authorizeResponse","appId","xfbml","Event","AppEvents","logEvent","page_id","app_id","user_ref","../node_modules/xo-page-components/src/messenger-plugin/template.html","../node_modules/xo-page-components/src/notYou/directive.js","$xoNotYouComponent","appData","cart","onClick","thirdPartyInfo","isVenmoEligible","preferToPayWithVenmo","ppxo","renderPopupTo","getParentRenderWindow","../node_modules/xo-page-components/src/notYou/styles.less","../node_modules/xo-page-components/src/notYou/template.html","../node_modules/xo-page-components/src/returnParams/index.js","returnWPSParams","returnToMerchantMethod","customData","postbackData","transactionDetail","addValidParam","itemDetail","$returnParams","../node_modules/xo-page-components/src/subscription-terms/index.js","getEffectiveDate","../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js","localizedContent","computeTimeUnit","billPeriod","timeUnit","BILL_PERIOD_DAY","pluralTimeUnit","BILL_PERIOD_WEEK","BILL_PERIOD_MONTH","BILL_PERIOD_YEAR","computeAmount","computeFirstTrialKey","computeSecondTrialKey","computeRegularSubscriptionKey","totalCycles","hasPriorTerm","Infinity","prepareIndividualTermText","subscriptionTerms","periodType","billFrequency","TRIAL_SUBSCRIPTION","REGULAR_SUBSCRIPTION","timePeriod","mapBaResponse","baResponseData","mappedSubscriptionDetails","allTerms","payment_definitions","mappedTerms","firstTrialAmount","regularAmount","eachTerm","INFINITE_CYCLES","cycles","eachMappedTerm","frequency","frequency_interval","firstAmount","subscriptionDetails","termTextList","_baResponseData$items","_baResponseData$items2","effective_date","../node_modules/xo-page-components/src/utils/index.js","getMessengerPXPContext","overrideMobileUserFlag","channelVal","ctx.CHANNEL","isDolphinEligibleOnWpsDone","../node_modules/xo-page-components/src/value-props/directive.js","squid","$observe","background-size","../node_modules/xo-return-to-merchant/dist/formatReturnContent.js","formatReturnContent","MAX_MERCHANT_NAME_LENGTH","../node_modules/xo-return-to-merchant/dist/index.js","_formatReturnContent","../node_modules/xo-return-to-merchant/dist/util.js","forceRedirect","paymentToken","payment_action","paymentID","payment_id","cancelUrl","isHTTPUrl","partnerIntegration","redirectImmediateParent","postToMerchant","operation","updateParent","userStatus","bridge","frames","PayPalBridge","returnToParent","postTo","../node_modules/xo-shipping-change/src/factory.js","$ShippingChangeFactory","getCartTotal","getPayload","updateCart","cartHasChanged","rejected","../node_modules/xo-shipping-change/src/util.js","shippingChangePayload","shipping_address","getPaymentDetails","shippingChangeActions","cartTotal","onShippingChange","newCartTotal","../node_modules/xo-styles/dist/lib/toggle.less","../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js","defaultFs","../node_modules/xo-third-party-components/src/review-paywith-baidu/styles.less","../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html","../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js","_venmoModels","venmo","$VenmoOnboardModel","isBillingAgreementsEnabled","intentNotSale","mapperFS","BALANCE","funding_mode","PAYMENT_CARD","payment_card","BANK_ACCOUNT","bank_account","bank_name","account_number","venmoUser","shouldShowAmt","defaultFS","backupFs","../node_modules/xo-third-party-components/src/review-paywith-venmo/styles.less","../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html","../node_modules/xo-third-party-components/src/thirdParty-info/index.js","venmoExperience","_sessionStorage","_sessionStorage2","readCookie","nameEQ","ca","allowedThirdPartyExperiences","isThirdPartyEligible","isBaiduEligible","baiduEligibility","geolocation","baiduWallet","isProcessorDeclined","isInvoice","isBillingAgreement","isVenmoCookie","isVenmoCookiePresent","isSFAuthenticationSession","isMSPTransaction","eligibilityParams","isNotInvoice","isNotProcessorDeclined","isNotBillingAgreement","isUSMerchant","isNotSFAuthenticationSession","isNotMSPTransaction","venmoEligibility","is_venmo_cookie","cookieValue","buildVenmoURL","SCHEME","venmoAppSwitchURL","cartModel","$httpParamSerializer","x-success","absUrl","x-failure","VENMO","BAIDU","setAsVenmoExperience","_JSON$stringify","setAsBaiduExperience","_JSON$stringify2","availableExperiences","currentExperience","getExperience","resetThirdPartyExperience","../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js","getSessionStorage","../node_modules/xo-third-party-components/src/venmo-models/index.js","../node_modules/xo-title/dist/directive.js","titleTxt","tagName","newEl","../node_modules/xo-title/dist/template.html","../node_modules/xo-tracking/dist/builder.js","resolvePageQualifier","_dataObj","$FptiDataModel","decorate","baseData","productOverride","pageGoal","getUUID","transition_time","cust","dc","az","comp","getDataObject","isInContext","dataAry","../node_modules/xo-tracking/dist/button.js","_strToElements","elements","_fireButtonTrackingBeacon","buildParam","addToDocument","_beaconUrl","xoData","_beaconParams","ts","vr","WWW_AKA_MVT_BUTTONS","WWW_AKA_MVT_ID","ipaddress","flow_id","_alreadyFired","resetAlreadyFired","../node_modules/xo-tracking/dist/directive.js","transition","trackSubmit","currentRoute","errors","elementId","elementName","errorKey","errorText","fieldName","elementModel","trackLink","trackClick","checked","trackInput","../node_modules/xo-tracking/dist/fpti.js","_builder","fptiBeaconUrl","getPageTrackingData","routeParent","merge","analytics","fpti","$FptiBuilder","setup","pta","stringifyErrorMessage","cause","../node_modules/xo-tracking/dist/index.js","../node_modules/xo-tracking/dist/listener.js","_button","logTransition","suppressTransitionLog","logStateExit","trackStateExit","getBeaconUrl","fptiCustomRecordClick","analyticsInstance","fptiDataObj","Analytics","appName","setRequestData","recordClick","addTrackingData","cplSettings","enableCPL","passesCplThrottle","cplEnabled","forceEnableCPL","route_name","fptiFieldErrors","form_field_errors","$fptiError","$ButtonTrackingService","generateMetaIds","$FptiConstants","landing_page","fpti_landing_page","addrDiff","oldHash","fptiserverurl","firstInvocation","trackPageStart","startCPLTracking","firstDone","trackDone","beaconData","endCPLTracking","pageData","inferStart","buildParams","fptiProductOverride","legacyFptiData","pgrp","flid","../node_modules/xo-tracking/dist/model.js","constant","buznameMap","flowgatename","placeHolder","fptiKey","flowname","hier1","inout","pagename2","fptiKeys","businessType","fieldError","merchantType","pageError","pageGroup","pageQualifer","pageStartTime","pageTechnologyFlag","paymentFlowId","rLogId","sessionId","siteHierarchy","sourceCi","tealeaf","templateName","ecToken","pxpExpSelected","pxpTreatementSelected","pxpQualifiedTreatment","pxpContextId","econsent","review","error_page","add_card","add_bank","done_page","shoppingCart","soldout","openButton","checkout_login","checkout_genericError","checkout_fastlogin","checkout_econsent","checkout_review","checkout_pageAddCard_addCardFlow_addCard","checkout_updateCard_addCardFlow_addCard","checkout_pageAddFi_bank_add","checkout_done","checkout_guest","checkout_signup","guestupgrade_genericError","checkout_multistepsignup_multistepsignupaddcard","checkout_shoppingCart","checkout_emptyCart","checkout_soldout","checkout_openButton","productConfig","_decoratorList","decorators","buzname","buznameDiff","dataObj","placeHolderConfig","buznameEntryPlaceHolder","buznameEntry","_placeHolder$split","main","hermes","_base","pxptrackingdata","qt","qc","trackInfo","tracking_tags","decorator","_generateCorrelationId","uidRandomArr","uuid_v4_mask","uuid_v1_mask","_generateUUID","_calCorrId","generateCalCorrId","generateUUID","../node_modules/xo-ui-components/src/accessibility/directive.js","ariaLabel","linkButton","altKey","ctrlKey","SPACE","ENTER","click","escapeToggle","selectCancel","allowTabEscape","selectAllowTabEscape","$allTabbable","findAll","tabbable","$origin","TAB","shiftKey","eq","RIGHT","LEFT","ESC","modalCancel","getNextIndex","$elements","modalBox","registerModal","cancelFn","deregisterModal","selectOption","locateAndFocus","$elementToFocus","directiveElementFocusable","focusable","focusElement","filterAll","focusRefreshOn","focusWhen","startState","focusWhenState","endState","transitionsTo","transitionMessage","unregisterEventFn","focusSelector","$allFocusable","setFocusable","removeAttr","../node_modules/xo-ui-components/src/accessibility/ui.js","expr","filters","addBack","mapName","nodeName","isTabIndexNotNaN","disabled","tabIndex","filterFn","container","../node_modules/xo-ui-components/src/banner/directive.js","userPhoto","photoData","min_size","avatarElement","showInitials","photo_url","initials","../node_modules/xo-ui-components/src/banner/styles.less","../node_modules/xo-ui-components/src/banner/template.html","../node_modules/xo-ui-components/src/card-loader/directive.js","$xoCardLoader","ellipsis","userNameLength","domainLength","MAX_EMAIL_LEN","../node_modules/xo-ui-components/src/card-loader/styles.less","../node_modules/xo-ui-components/src/card-loader/template.html","../node_modules/xo-ui-components/src/cardicon/directive.js","$xoFiIcon","updateCardArt","retrievedCardArt","cardStyle","background-position","../node_modules/xo-ui-components/src/cardicon/template.html","../node_modules/xo-ui-components/src/directionality/directive.js","setDirectionality","toggleClass","getAttribute","jqueryOnKeyupHandler","resetDirectionalityListener","currentWatchDeregister","checkDOMNodeInserted","directionalityText","../node_modules/xo-ui-components/src/directionality/styles.less","../node_modules/xo-ui-components/src/error-tooltip/directive.js","_angularAria","$ariaProvider","bindRoleForClick","ariaInvalid","ariaRequired","ariaHidden","require","ctrls","shouldBeRequired","formCtrl","showCheckboxRequired","$submitted","modelCtrl","$error","shouldBeInvalid","$invalid","formatSpaceSplitString","strArray","idIndex","setAriaAttributes","addTooltips","invalid","describedby","requiredId","invalidId","generateId","requiredError","invalidError","ngRequired","windowBot","scrollTop","requiredBot","invalidBot","../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js","closeFrame","iFrameFlow","findWindowAndRedirect","../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js","../node_modules/xo-ui-components/src/experience/directive.js","$ExperienceComponent","negate","renderExperience","../node_modules/xo-ui-components/src/experience/template.html","../node_modules/xo-ui-components/src/expired-message/directive.js","goToManageWallet","fiID","doneUri","../node_modules/xo-ui-components/src/expired-message/styles.less","../node_modules/xo-ui-components/src/expired-message/template.html","../node_modules/xo-ui-components/src/fi-panel/directive.js","sparse","showCurrencyCode","showAllCurrencyCodes","nameOverride","ignorePad","currencyCodes","sld","secondLineType","_mask","meft","iach","echeck","chasePay","secondLineData","PROPS","$watchGroup","../node_modules/xo-ui-components/src/fi-panel/styles.less","../node_modules/xo-ui-components/src/fi-panel/template.html","../node_modules/xo-ui-components/src/link/directive.js","leftIcon","rightIcon","../node_modules/xo-ui-components/src/link/styles.less","../node_modules/xo-ui-components/src/link/template.html","../node_modules/xo-ui-components/src/message/directive.js","isgreyheader","toggleAlert","$alert","detach","../node_modules/xo-ui-components/src/modal/directive.js","showCloseButton","enableCloseOnEscape","onClose","enableMobileInterstitial","overrideDefaultContainer","animate","escapeKeyHandler","../node_modules/xo-ui-components/src/modal/template.html","../node_modules/xo-ui-components/src/popup/directive.js","popupWindowName","popupWindowFeatures","scrollbars","resizable","toolbar","menubar","trackExternalLink","isOneTouch","hasClass","outerWidth","screenX","screenY","linkName","../node_modules/xo-ui-components/src/spinner/directive.js","hidePageContentFromScreenReader","$header","$slidingArea","$footer","_event$target","captureFocus","$capturedElement","setLoadingMessage","showSpinner","loading","$body","$priorActiveElement","hideSpinner","cancelStartLoad","cancelSetLoadingMessage","../node_modules/xo-ui-components/src/sticky-cta/directive.js","stickyContent","stickyPlaceholder","foundContentDom","placeholderIsVisible","isInViewport","isFloating","bindHandler","stickyHandler","stateHandler","conflict","leaving","entering","stateChangeListener","../node_modules/xo-ui-components/src/sticky-cta/styles.less","../node_modules/xo-ui-components/src/sticky-cta/template.html","../node_modules/xo-ui-components/src/sticky-cta/utils.js","bounding","bottom","innerHeight","clientHeight","clientWidth","makeSticky","placeholder","elementHeight","offsetHeight","removeSticky","alreadyFloating","canEnable","../node_modules/xo-ui-components/src/tooltip/directive.js","getDefaultShowEvent","$el","addDescribedById","describedByIds","removeDescribedById","existingId","debounceOnMouseTrigger","isMouseType","isMouseTypeEvent","showEvent","hideEvent","displayInline","align","$trigger","toolTip","toolTipID","isMouseOver","slideDown","progress","toolTipBot","slideUp","SHOW_EVENT","HIDE_EVENT","../node_modules/xo-ui-components/src/tooltip/template.html","../node_modules/xo-ui-components/src/user-assist-banner/directive.js","_popupHandler","_popupHandler2","hideHighlight","../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js","../node_modules/xo-ui-components/src/user-assist-banner/styles.less","../node_modules/xo-ui-components/src/user-assist-banner/template.html","../node_modules/xo-validation/dist/directive.js","ngModel","validationUtil","rtrim","regex","alphabetic","numeric","NUMERIC_REGEX","validBankAccount","showIBAN","validRouting","validIBANCode","validIBAN","validIBANCountry","validIBANWithValidCountryCode","validLast4","LAST_4","validStreet","validPhone","validDobYear","validDobDay","validDobMonth","validPoBox","validAddressSansPoBox","boxRE","cassRE","validEmailOrPhone","validEmail","trimmedValue","EMAIL_REGEX","highAscii","HIGH_ASCII_REGEX","validDate","dArr","isValid","getDate","validDateWithoutDay","currentYear","currentMonth","validYear","validMonth","mmddyyyy","twoDigits","yyyymmdd","legalAge","dateParts","birthDate","validZip","postalCodeRegex","CY","EE","HR","LU","LV","MT","SI","SK","LT","BG","HU","zipEntry","validationPattern","validExpiry","$monthEl","$yearEl","validExpires","formName","monthFieldName","yearFieldName","cardsDontNeedExpiry","$setValidity","startDate","valueOptions","setStartDateValidity","setExpiryValidity","startDateValidity","startmonth","startyear","dobField","fieldMap","dobDayCC","dobMonthCC","dobYearCC","setDOBValidity","dobEnabledCards","dobValidity","$dayEl","validName","isChecked","validRUPassport","countryOfResidence","customValidator","ruleJson","fromJson","validator","$parsers","unshift","$formatters","../node_modules/xo-wallet-components/src/3ds/directive.js","onComplete3dsHandler","show3DSLightBox","show3DS","shouldUpdatePaymentExperience","mandatory3dsWithMerchantCountries","handleInitFailure","payment_experience","3d_secure_authentication_supported","complete3DSApi","paRes","resolve3DS","third_party_response","cc_id","_$locale$country","isIos","timeout3DSConfig","timeout3DS","lightBoxTimeout","termUrl","close3DSFrame","merchant_country_code","transaction_amount_currency","transaction_amount_value","acsUrl","acsMethod","acsPaReq","complete3DS","complete3DSFrame","on3DSPageLoad","ev","which","../node_modules/xo-wallet-components/src/3ds/template.html","../node_modules/xo-wallet-components/src/add-card/addcard/factory.js","shouldDisplayAddressBox","isNmjDesign1","cardModel","invalidfield","avsRetry","redirectFromXoon","ctx.XOON_REDIRECT","ctx.AVS","getAddCardPxpResult","retry","ctx.RETRY","getCheckoutIncentivePxpResult","getIssuerDeclineElmoResult","../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js","getTypeByPattern","cardMetaData","types","metaData","$CardMetaData","CARD_META_DATA","dob","expiry","issue","luhn","spaces","PLCC","MAESTRO","SWITCH","DINERSCLUB","DISCOVER","MASTERCARD","AMEX","subTypes","QIWI","JCB","CBNATIONALE","CETELEM","COFIDIS","COFINOGA","ELO","HIPER","HIPERCARD","CUPCREDIT","CUPAMEXCREDIT","CUPDEBIT","CUPAMEXDEBIT","getMetaData","dualType","productType","getCardType","../node_modules/xo-wallet-components/src/add-card/cvv/directive.js","$xoCvvDirective","_cardMetaData","showLabel","isMasked","maskCVV","cvvLength","cvvRequired","../node_modules/xo-wallet-components/src/add-card/cvv/template.html","../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js","checkoutInputDataModel","ppconversion","fundingOptionId","_conversion","selectedConversionType","mapConversionType","planConversionType","logCurrencyConversion","currency_conversion_from_curr","currency_conversion_to_curr","conversionType","currency_conversion_type","is_conversion_shown","_plan$conversion","changeable","showConversionOverlay","isConversionOverlayRateContent","_models2","amount_formatted_currency","payPalAmount","total_converted_amount","../node_modules/xo-wallet-components/src/currency-conversion-overlay/styles.less","../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html","../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js","DEFAULT_LOGGING_OPTIONS","_ref$name","_ref$options","logOptions","../node_modules/xo-wallet-components/src/currency-conversion/factory.js","showConversionOverlayRateContent","getCardIssuerData","showConvertIssuerSplitBalContent","disclaimer","getPayPalConversionTotal","../node_modules/xo-wallet-components/src/fi-logos/directive.js","../node_modules/xo-wallet-components/src/fi-logos/template.html","../node_modules/xo-webpack-config/polyfills.js","./css/app.less","./js/app.js","_middleware","_route2","$Middleware","./js/bootstrap.js","$locationProvider","hashPrefix","debugInfoEnabled","aHrefSanitizationWhitelist","constants","protocolsWithDeeplink","cssClassDirectivesEnabled","commentDirectivesEnabled","prefetch","./js/lib/constants.js","safeProtocols","./js/lib/contingency.js","_miniBrowser","showGenericError","encoded","forbidden","addMissingTokens","urlQuery","handleStepupAuth","step_up_context","VERIFY_USER_IDENTITY","authChallengeNodeUrl","stepupContext","flowContext","TRAVEL_RULE_ID_REQUIRED","NEGATIVE_BALANCE_RECOVERY","NEED_DEBIT_CARD","EXPIRED_DEBIT_CARD","RESTRICTED_USER","PAYER_ACCOUNT_RESTRICTED","PAYEE_BLOCKED_TRANSACTION","PAYMENT_ALREADY_DONE","DUPLICATE_INVOICE_ID","PAYMENT_DENIED","PAYEE_ACCOUNT_RESTRICTED","INVALID_RESOURCE_ID","EXPIRED_SESSION","PAYER_CANNOT_PAY","TRANSACTION_RECEIVING_LIMIT_EXCEEDED","PAYER_COUNTRY_NOT_ALLOWED","PAYER_COUNTRY_NOT_ALLOWED_DCF","PAYER_COUNTRY_NOT_ENABLED","PAYER_LOGIN_COUNTRY_NOT_ALLOWED","GAMING_FUNDING_SOURCE_VALIDATION_FAILED","COMPLIANCE_VIOLATION","DOMESTIC_TRANSACTION_REQUIRED","INTERNAL_SERVICE_ERROR","NEGATIVE_BALANCE_TRANSACTION_REFUSED","ACCOUNT_CANNOT_BE_FETCHED","BAD_RESPONSE","TRANSACTION_REFUSED_LEGACY_FALLBACK","RISK_DENIED","UNSUPPORTED_COUNTRY","AGREEMENT_ALREADY_CREATED","PAYMENT_NOT_APPROVED_FOR_EXECUTION","PAYER_ACCOUNT_LOCKED_OR_CLOSED","WALLET_PREFERENCE_SET_ERROR","ISSUANCE_PIN_SERVICE_ERROR","SENDING_LIMIT_EXCEEDED","PAYEE_ACCOUNT_LOCKED_OR_CLOSED","UNSUPPORTED_PAYEE_CURRENCY","PAYMENT_CANNOT_BE_INITIATED","PERMISSION_DENIED","INVALID_TOKEN","INVALID_FUNDING_OPTION","VALIDATION_ERROR","SHIPPING_ADDRESS_INVALID","INVALID_ARGUMENT","CREDIT_PAYMENT_NOT_ALLOWED","MALFORMED_REQUEST","TWOFA_INACTIVE","ISSUER_DECLINE","UNSUPPORTED_CUP_SECURECARD","STUDENT_ACCOUNT","UAL_ISSUANCE_UPDATE_SCOPE_ERROR","BUYER_NOT_SET","TRANSACTION_REFUSED","clearedRT","PAYER_INVALID_FOR_PAYMENT","$miniBrowser","./js/lib/cplIntegration.js","./js/lib/error.js","canBeSafelyIgnored","uiRouterTransitionErrors","constructEventName","constructErrorPayload","$forbiddenHandler","paymentComplete","handleThirdPartyErrors","errType","errName","baiduError","isThirdPartyFlow","$exceptionHandler","ERROR_STATE","ERROR_PREVENTED","ERROR_HANDLERS","errMsg","buildId","_fallback","$fallbackErrorHandler","_contingency","$contingencyHandler","./js/lib/fallback.js","_icFallback","getFallbackUrl","waType","invoice_id","showGenericErrorPage","errorReason","handleFallbackRedirect","wpsParams","fallbackEnabled","entry_point","error_desc","$incontextFallback","doFallback","landing","incontext","nolegacy","xclickParams","wa_type","fallbackWhitelist","whitelist","whitelisted","autoReloadCount","timesSeen","destination","enable_refresh_prompt","arc","_$config$urls","beamPattern","isBeamIntegration","cartExchangeFailed","isSecondButtonTxn","disable_legacy_fallback","resizeTo","availWidth","availHeight","./js/lib/icFallback.js","frame","onLegacyFallback","moveTo","./js/lib/index.js","_metaBuilder","_security","_stateChangeListener","_cplIntegration","./js/lib/integration.js","$FLOWS","_$DEFAULT","_$CONTEXT$FULLPAGE","_$CONTEXT$LIGHTBOX","_$integration$init","CHECKOUT","PARTNER","INCONTEXT_LIGHTBOX","INCONTEXT_POPUP","MESSENGER_BA_INTEGRATION","WPS","WPS_SUBSCRIPTION","ALLOW_AUTH","ALLOW_COLLECT_DATA","ALLOW_ONETOUCH_TOKEN_EXCHANGE","ALLOW_PAYER_ID_RETURN_PARAM","DONE_PAGE","FALLBACK","REDIRECT_TOP","REDIRECT_QUERY_PARAM","POST_MESSAGE_PARENT","ERROR_AFTER_PAYMENT","POPULATE_MERCHANT_PREFERENCES","RETURN_METHOD_BASED_ON_MERCHANT_PREFS","RETURN_URL_FROM_MERCHANT_PREFS","SHOW_PAY_NOW_LABEL_ON_REVIEW","SHOW_SHIPPING_METHOD","CAN_FRAMEBUST","CAN_FALLBACK_TO_POPUP","CAN_CLOSE_SELF","RETURN_FROM_DATA_COLLECTION_POPUP","IS_MESSENGER_BA_INTEGRATION","./js/lib/metaBuilder.js","app_name","$metaBuilder","./js/lib/middleware.js","getDeviceAndNetworkInfo","netInfo","connection","effectiveType","downlink","downlinkMax","roundTripTime","rtt","saveData","memory","deviceMemory","root","safeApply","proto","getPrototypeOf","originalApply","skipAttempts","$$phase","$preloadApi","wpsPattern","urlToken","bodyToken","ipCountry","ipcountry","localeTestUrlParam","checkoutShippingCountry","checkoutSessionLocale","countryParam","localeParam","isPartnerIntegration","paypalCheckout","merchantID","windowName","navigation","navigationType","0","1","2","dataLayer","contentCountry","contentLanguage","tagManagerUrl","tagProdUrl","tagStageUrl","async","processor_declined","hermesXoonRedirect","networkAndDeviceData","isMiniBrowser","isDirectIntegration","getDirectIntegration","isIframe","isFramed","is_directintegration","is_incontext","screen_width","screen_height","device_memory","network_type","network_effectiveType","network_downlink","network_downlinkMax","network_roundTripTime","network_saveData","logged","logResources","initiatorType","euat","hermesnodePxpConfig","forceCookiesDisabled","isSDKintegration","sdkLoaded","regular","modifed","./js/lib/miniBrowser.js","_extends","_$stateGo","stateObj","stateGo","loginRequired","forceIframe","PopupOpenError","getPartnerIntegration","getNativeCheckoutIntegration","getMessengerBAIntegration","getWPSIntegration","getWpsSubscriptionIntegration","getFlags","isNativeCheckout","isWPSIntegration","enableAutoResize","logIntegration","sendPostMessage","handleWindowOpenerClose","guid","Image","landingUrl","secureWindowmsg","scripts","./js/lib/security.js","errorCount","./js/lib/stateChangeListener.js","./pages/services/cardart-instrument/index.js","isCardArtEnable","normalizeFutureInstrument","cardArtUrl","normalizeFundingOptions","normalizePayload","_ref2$plans","arr","fi_type","is_cardart_shown","getSelectedInstrument","createPayload","_ref5$stickyEligible","_ref5$renderMultipleF","renderMultipleFi","_ref5$renderSingleFi","renderSingleFi","_ref5$showMoreFiState","showMoreFiState","./pages/xo-checkout/directive.js","purchaseProtectionProp","purchaseProtectionAlt","pgName","rtl","directionality","escapeHatchInContext","displayHeader","reviewUrl","isDolphinEligible","requiresRiskyLogin","displayRiskyLogin","newParams","showPasswordRecovery","propValue","checkDolphinEligibility","cancelStateChangeEventListener","showVenmoExperience","is_venmo_branding","./pages/xo-checkout/route.js","review-url","./pages/xo-checkout/template.html","./pages/xo-end/route.js","$EndRoute","_returnParams","_profilemanagement","merchantPreferences","wpsSubscriptionReturnUrl","subscriptionsV1ReturnUrl","returnParams","paramsForSubscription","mfid","PayerID","billingData","legacy_billing_integration","paymentId","getMerchantPreferences","dataModel","xparams","payerID","./pages/xo-landing/route.js","$LandingRoute","_inventory","flowEligibility","localeCountry","braintreeInegration","forced_signup_offered","landingFlow","supportBlockNonDomesticShipping","prefillShippingAddress","blockNonDomesticShipping","allowChangeShipping","block_non_domestic_shipping","setec_shipping_country_code","bypassCYCO2ndButtonTreatment","xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn","creditDataModel","isCapeReturnKey","isInstallmentEligible","installmentOptions","conversion_info","converted_transaction_amount","cartHasInventory","enableInventoryWPS","inventoryModel","inventoryInput","inventoryResponse","showSoldoutPage","soldoutItems","soldOutUrl","soldoutUrl","./pages/xo-login/directive.js","$xoLoginPageComponent","_loginEligibility","allLoaded","fptiHardErrors","memberSegmentMapper","NEW_MEMBER","YOUNG_MEMBER","EXISTING_MEMBER","ROUTE_MAPPING","forceLogin","hideGuest","brPxp","pxpExperiments","xo_br_hermesnode_login_design","loginDesignExp","eConsent","tokenizedWalletEligibility","tokenizedWalletPin","tokenizedWalletMsbOffer","dependencyEligibility","isValidGamingContingencies","endOfLineErrorList","preloadCodeSplitRoutes","setBuyer","alternate_options","handleNoValidTopupFiContingency","$TokenizedWalledLoaderFactory","goToTokenizationInfoPage","_$scope$tokenizedWall","tokenizedWalletInfoModel","wallet_id","external_device_id","tr_client_id","product_name","WALLET_BRANDS","google","Samsung","wallet_brand","tenant_id","jwt","pinKey","enableNewMemberDecisioning","memberSegmentData","segment","cep_response","isPayPalCredit","preselected_fi_type","user_selected_funding_source","clear_installments","available_plan_count","$capeRedirectUtil","handleCapeRouting","planDone","oneTouchFlowName","authorizePage","getTokenizedFundingCapabilities","preSetBuyerCalls","apiCalls","populateComplete","infoVenmo","msgs","showVenmoAvailableSoonMsg","baiduEligible","initKmliAndDeleteAT","$loginEligibility","reinitDisplay","./pages/xo-login/guestThrottle.js","$guestThrottle","redirectToXoon","checkWpsSubscriptionGuestEnabled","./pages/xo-login/loginEligibility.js","$forceLoginExperience","ULParam","forceLoginExperience","finalLoginExperience","./pages/xo-login/onboarding/directive.js","$xoOnboardingSectionComponent","_guestThrottle","_paypalplus","throttleOnboardingFlow","getFlowEligibility","getButtonLabelTreatment","newUserVariant","newUserVariantWithText","signupThrottle","forceCAPESignup","guestThrottle","payInFull","useForcedSignupFlow","$isPayPalPlus","showGuestBtn","showSignupBtn","hideOrSeparator","./pages/xo-login/onboarding/template.html","./pages/xo-login/paypalplus.js","./pages/xo-login/route.js","$LoginRoute","fullpage","ulLogin","./pages/xo-login/template.html","./pages/xo-login/tokenized-wallet-loader/directive.js","$xoTokenizedWalletLoader","ANIMATION_STATUSES","NOT_STARTED","PENDING","COMPLETED","setbuyerProgress","billing_token","cardLoaderMessage","getCardLoaderMessage","logoClass","./pages/xo-login/tokenized-wallet-loader/factory.js","./pages/xo-login/tokenized-wallet-loader/template.html","./pages/xo-login/util.js","handleRedirect","isCreditPromoted","isPPCEligible","futurePayment","installmentModel","./pages/xo-review/directive.js","createReviewFptiPayload","_ref$isProcessTransit","isProcessTransition","shipping_address_id","currency_conversion_selected","rewards_fi","$xoReviewPageComponent","_ul","_fiApis","_fiMessages","_donation","_marketingoffer2","_cardartInstrument","_factory6","_factory7","_tokenizedFactory","_shippingChangeFeature","updatePreferredFi","PreferredFi","pref_fi_set","showUnconfirmedUpopMsg","setupMultipleFi","topupError","checkForIxoShippingMethods","windowHeight","footerHeaderHeight","minHeight","optInUser","optin_toggle","setValue","optOutUser","isEnabled","stickyCTA","stickyEligibility","setInformalName","formattedNameInformal","donationAuthorize","_$GiveAtCheckoutFacto","gac_model","gac_npid","nonprofit_id","ec_token","charity_name","money","updateAddressAsPreferred","setStickyInstrument","savedSticky","selectedSticky","linkAuthConsent","billingConsentCode","authConsentModel","setWalletTopupPreferences","isValidPinSetup","walletPinModel","userPin","prepareTokenizedWallet","defaultTopupFI","defaultDirectFI","pinStatus","default_topup_fi","default_direct_fi","pin","checkJSV4PaymentDetails","ixoShippingMethods","show3DSLightbox","resolve_3ds_data","launch3DSResolver","setProcessorDeclineMessage","$AddCardFactory","isProcessorDeclineExperiment","$fiMessages","getPadToggleStatus","toggleStatus","$PADFactory","isPadToggleEnabled","fundingId","applyExitMessage","pxpMerchName","badMerchantName","pxpMerchNameLimit","outroMsg","reviewRoute","cancelOutroOverride","spinnerMessageEl","marginLeft","is_bkp_funding_chosen","isGoogleAccountLinking","$TokenizedFactory","updateIssuanceScope","getAuthorizeBatch","ppc_reuse_status","padToggleStatus","logProcessReviewToFPTI","cancelUpdateListener","CREDIT_CARD_AUTH_FAILED","setShowShippingMethodProperty","shippingRulesSummary","showShippingMethod","isInstantUpdateAPIFlow","show3DSDeclineMsg","declineAfter3DSAccept","numberOfPlans","clear3DSContingency","ccId","$BalanceFactory","tokenizedFactoryState","noBalanceFactoryState","isThirdPartyWalletExperience","determineThirdPartyWalletExperience","showCreditOffer","showFiSelectPage","isPPCReuseAndNotSelected","applyNewMemberVariant","isNmjDesign2","isNmjDesign3","showViewYourPaymentRights","showGreyHeader","userName","assistBannerHeader","assistBannerBody","headerMsg","showPaypalPolicy","showPaypalPolicies","showPaymentRights","triggerPersonalizedBanner","personalizedBanner","fpti_buyer_type","backUri","initAndCallOnShippingChange","createShippingChangeFeature","pxpControlEnabled","isGCcountry","giftCardSupportedCountries","showPolicyAgreement","_ref2$experience","autoBA","isOneTouchBanner","newMemberDesign1","showExpandedTerms","creditBannerRegister","onTouchToggle","ryi_optin","tagFamilyComputer","objStr","isPublicDevice","buyerList","isFamilyDevice","userCount","onComplete3DSHandler","upopCallbacks","onConfirmUpopSuccess","onConfirmUpopCancel","dynamicValuesInContent","returnFromCape","capeKey","show_cape_declined_msg","ifPadThenUpdatePlan","selectedMethodPlanId","padOrIachPlanId","getPadOrIachBankPlanId","decidePlanSelection","doPlanSelection","upopResult","defer","isOnUpdate","onUpdateSuccess","onUpdateCancel","initializePadToggleSupport","applyChoiceExperimentVariant","checkboxVariants","multipleFiVariants","selectFiVariants","showMultipleFiVariants","defaultPlanId","fundingOptionsListener","applyMerchantName","getPaymentOptions","paymentTransaction","transactions","shipping_options","clickedMore","logSessionDetails","showGAC","isDonation","isCardArtExp","$CardArtInstrument","applyInvoicingRegEDetails","showInvoicingRegEMsg","showRemittanceDisclosure","totalAmount","planSources","totalInvoicePaymentAmount","invoicingRegEMsg","amountInPayerCurrency","amountInInvCurrency","applyKmliUpsellEligibility","fiModel","cookiePayload","ot_inter_shown","applyCreditOptions","isChangeInstallments","creditOptions","apr","isCreditIncentiveOption","showInstallmentOptionWithoutIncentives","showInstallmentOption","installmentInfo","monthlyPaymentAmt","totalInterestAmt","totalInterest","totalPaymentAmt","totalPayment","atoMsg","showAuthMsg","showAuthMsgLearnMore","bmlApply","showSoftDescriptor","hide_soft_descriptor","applyNegativeBalanceStatus","nbrMsgContentKey","tokenHash","neg_bal","neg_bal2","applyBrPxp","xo_br_hermesnode_ryi_design","ryiDesignExp","applyShowShippingMethod","applyPayButtonOption","merchantMsg","isWPSSubscriptionFlow","buttonLabelIsPay","ryp_button_text","payButton","onRedeemGC","logoUrl","product_logo","onFBBANotNow","_$scope$checkoutSessi","onPay","payEventName","enums","LOADING","REJECTED","FAILED","preAuthorizeError","tokenizedOnPayCalls","bmlPopupOpen","hideBmlPopup","checkForReviewLaterTextTreatment","showReviewLaterText","initBillingNoPurchasePlans","showBillingMessage","isIndiaDomesticBilling","showMoreFiInit","showMoreFiEligibility","applyCreditBannerPlaceholder","isPlaceholderTreatment","_$logger$info","propValueObj","propHeader","propVal","propImage","./pages/xo-review/factory.js","./pages/xo-review/lib/shippingChangeFeature.js","callbackFn","UPDATED","shippingChangeFactory","successFn","updatedMsg","rejectFn","rejectedMsg","loadingMsg","./pages/xo-review/route.js","$ReviewRoute","fiPageVariants","skipSelectFi","skipFiPageVariants","skipStates","isPreferredDefault","stickyPlans","back-uri","shipping-change-feature","update","on-complete","cardmodel","./pages/xo-review/template.html","./pages/xo-review/tokenizedFactory.js","reviewTopupErrorMessage","tokenizationFlags","sepaAgree","agreeSepaMandate","setTokenizedWalletPin","pinModel","_$WalletPreferences$i","_$WalletPreferences$i2","_$WalletPreferences$i3","topup_amt","chosen_topup_fi","chosen_direct_fi","./pages/xo-select-fi/factory.js","getPadAndCheckboxStatus","balanceList","hasPad"],"mappings":"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","file":"js/main-code-split.js","sourcesContent":["webpackJsonp([\"main-code-split\"],{\n\n/***/ \"../node_modules/core-js/fn/array/find.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/core-js/modules/es6.array.find.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_core.js\").Array.find;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/fn/array/includes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/core-js/modules/es7.array.includes.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_core.js\").Array.includes;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/fn/object/entries.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/core-js/modules/es7.object.entries.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_core.js\").Object.entries;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/fn/object/values.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/core-js/modules/es7.object.values.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_core.js\").Object.values;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/fn/string/includes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/core-js/modules/es6.string.includes.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_core.js\").String.includes;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_a-function.js\":\n/***/ (function(module, exports) {\n\n\n\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_add-to-unscopables.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = __webpack_require__(\"../node_modules/core-js/modules/_wks.js\")('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(\"../node_modules/core-js/modules/_hide.js\")(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_an-object.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar isObject = __webpack_require__(\"../node_modules/core-js/modules/_is-object.js\");\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_array-includes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = __webpack_require__(\"../node_modules/core-js/modules/_to-iobject.js\");\nvar toLength = __webpack_require__(\"../node_modules/core-js/modules/_to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(\"../node_modules/core-js/modules/_to-absolute-index.js\");\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (; length > index; index++) {\n if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n }\n }return !IS_INCLUDES && -1;\n };\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_array-methods.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = __webpack_require__(\"../node_modules/core-js/modules/_ctx.js\");\nvar IObject = __webpack_require__(\"../node_modules/core-js/modules/_iobject.js\");\nvar toObject = __webpack_require__(\"../node_modules/core-js/modules/_to-object.js\");\nvar toLength = __webpack_require__(\"../node_modules/core-js/modules/_to-length.js\");\nvar asc = __webpack_require__(\"../node_modules/core-js/modules/_array-species-create.js\");\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (; length > index; index++) {\n if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3:\n return true; // some\n case 5:\n return val; // find\n case 6:\n return index; // findIndex\n case 2:\n result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n }return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_array-species-constructor.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar isObject = __webpack_require__(\"../node_modules/core-js/modules/_is-object.js\");\nvar isArray = __webpack_require__(\"../node_modules/core-js/modules/_is-array.js\");\nvar SPECIES = __webpack_require__(\"../node_modules/core-js/modules/_wks.js\")('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n }return C === undefined ? Array : C;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_array-species-create.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = __webpack_require__(\"../node_modules/core-js/modules/_array-species-constructor.js\");\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_cof.js\":\n/***/ (function(module, exports) {\n\n\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_core.js\":\n/***/ (function(module, exports) {\n\n\n\nvar core = module.exports = { version: '2.6.4' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_ctx.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// optional / simple context binding\nvar aFunction = __webpack_require__(\"../node_modules/core-js/modules/_a-function.js\");\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1:\n return function (a) {\n return fn.call(that, a);\n };\n case 2:\n return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3:\n return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function () /* ...args */{\n return fn.apply(that, arguments);\n };\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_defined.js\":\n/***/ (function(module, exports) {\n\n\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_descriptors.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !__webpack_require__(\"../node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty({}, 'a', { get: function get() {\n return 7;\n } }).a != 7;\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_dom-create.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar isObject = __webpack_require__(\"../node_modules/core-js/modules/_is-object.js\");\nvar document = __webpack_require__(\"../node_modules/core-js/modules/_global.js\").document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_enum-bug-keys.js\":\n/***/ (function(module, exports) {\n\n\n\n// IE 8- don't enum bug keys\nmodule.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_export.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar global = __webpack_require__(\"../node_modules/core-js/modules/_global.js\");\nvar core = __webpack_require__(\"../node_modules/core-js/modules/_core.js\");\nvar hide = __webpack_require__(\"../node_modules/core-js/modules/_hide.js\");\nvar redefine = __webpack_require__(\"../node_modules/core-js/modules/_redefine.js\");\nvar ctx = __webpack_require__(\"../node_modules/core-js/modules/_ctx.js\");\nvar PROTOTYPE = 'prototype';\n\nvar $export = function $export(type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_fails-is-regexp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar MATCH = __webpack_require__(\"../node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) {/* empty */}\n }return true;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_fails.js\":\n/***/ (function(module, exports) {\n\n\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_function-to-string.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_shared.js\")('native-function-to-string', Function.toString);\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_global.js\":\n/***/ (function(module, exports) {\n\n\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self\n// eslint-disable-next-line no-new-func\n: Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_has.js\":\n/***/ (function(module, exports) {\n\n\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_hide.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar dP = __webpack_require__(\"../node_modules/core-js/modules/_object-dp.js\");\nvar createDesc = __webpack_require__(\"../node_modules/core-js/modules/_property-desc.js\");\nmodule.exports = __webpack_require__(\"../node_modules/core-js/modules/_descriptors.js\") ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_ie8-dom-define.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nmodule.exports = !__webpack_require__(\"../node_modules/core-js/modules/_descriptors.js\") && !__webpack_require__(\"../node_modules/core-js/modules/_fails.js\")(function () {\n return Object.defineProperty(__webpack_require__(\"../node_modules/core-js/modules/_dom-create.js\")('div'), 'a', { get: function get() {\n return 7;\n } }).a != 7;\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_iobject.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = __webpack_require__(\"../node_modules/core-js/modules/_cof.js\");\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_is-array.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 7.2.2 IsArray(argument)\nvar cof = __webpack_require__(\"../node_modules/core-js/modules/_cof.js\");\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_is-object.js\":\n/***/ (function(module, exports) {\n\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nmodule.exports = function (it) {\n return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) === 'object' ? it !== null : typeof it === 'function';\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_is-regexp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = __webpack_require__(\"../node_modules/core-js/modules/_is-object.js\");\nvar cof = __webpack_require__(\"../node_modules/core-js/modules/_cof.js\");\nvar MATCH = __webpack_require__(\"../node_modules/core-js/modules/_wks.js\")('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_library.js\":\n/***/ (function(module, exports) {\n\n\n\nmodule.exports = false;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_object-dp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar anObject = __webpack_require__(\"../node_modules/core-js/modules/_an-object.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(\"../node_modules/core-js/modules/_ie8-dom-define.js\");\nvar toPrimitive = __webpack_require__(\"../node_modules/core-js/modules/_to-primitive.js\");\nvar dP = Object.defineProperty;\n\nexports.f = __webpack_require__(\"../node_modules/core-js/modules/_descriptors.js\") ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) {/* empty */}\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_object-keys-internal.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar has = __webpack_require__(\"../node_modules/core-js/modules/_has.js\");\nvar toIObject = __webpack_require__(\"../node_modules/core-js/modules/_to-iobject.js\");\nvar arrayIndexOf = __webpack_require__(\"../node_modules/core-js/modules/_array-includes.js\")(false);\nvar IE_PROTO = __webpack_require__(\"../node_modules/core-js/modules/_shared-key.js\")('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) {\n if (key != IE_PROTO) has(O, key) && result.push(key);\n } // Don't enum bug & hidden keys\n while (names.length > i) {\n if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n }return result;\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_object-keys.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = __webpack_require__(\"../node_modules/core-js/modules/_object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(\"../node_modules/core-js/modules/_enum-bug-keys.js\");\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_object-pie.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.f = {}.propertyIsEnumerable;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_object-to-array.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar getKeys = __webpack_require__(\"../node_modules/core-js/modules/_object-keys.js\");\nvar toIObject = __webpack_require__(\"../node_modules/core-js/modules/_to-iobject.js\");\nvar isEnum = __webpack_require__(\"../node_modules/core-js/modules/_object-pie.js\").f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }return result;\n };\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_property-desc.js\":\n/***/ (function(module, exports) {\n\n\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_redefine.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar global = __webpack_require__(\"../node_modules/core-js/modules/_global.js\");\nvar hide = __webpack_require__(\"../node_modules/core-js/modules/_hide.js\");\nvar has = __webpack_require__(\"../node_modules/core-js/modules/_has.js\");\nvar SRC = __webpack_require__(\"../node_modules/core-js/modules/_uid.js\")('src');\nvar $toString = __webpack_require__(\"../node_modules/core-js/modules/_function-to-string.js\");\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\n__webpack_require__(\"../node_modules/core-js/modules/_core.js\").inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_shared-key.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar shared = __webpack_require__(\"../node_modules/core-js/modules/_shared.js\")('keys');\nvar uid = __webpack_require__(\"../node_modules/core-js/modules/_uid.js\");\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_shared.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar core = __webpack_require__(\"../node_modules/core-js/modules/_core.js\");\nvar global = __webpack_require__(\"../node_modules/core-js/modules/_global.js\");\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: __webpack_require__(\"../node_modules/core-js/modules/_library.js\") ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_string-context.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = __webpack_require__(\"../node_modules/core-js/modules/_is-regexp.js\");\nvar defined = __webpack_require__(\"../node_modules/core-js/modules/_defined.js\");\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-absolute-index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar toInteger = __webpack_require__(\"../node_modules/core-js/modules/_to-integer.js\");\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-integer.js\":\n/***/ (function(module, exports) {\n\n\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-iobject.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = __webpack_require__(\"../node_modules/core-js/modules/_iobject.js\");\nvar defined = __webpack_require__(\"../node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-length.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 7.1.15 ToLength\nvar toInteger = __webpack_require__(\"../node_modules/core-js/modules/_to-integer.js\");\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-object.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 7.1.13 ToObject(argument)\nvar defined = __webpack_require__(\"../node_modules/core-js/modules/_defined.js\");\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_to-primitive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = __webpack_require__(\"../node_modules/core-js/modules/_is-object.js\");\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_uid.js\":\n/***/ (function(module, exports) {\n\n\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/_wks.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar store = __webpack_require__(\"../node_modules/core-js/modules/_shared.js\")('wks');\nvar uid = __webpack_require__(\"../node_modules/core-js/modules/_uid.js\");\nvar _Symbol = __webpack_require__(\"../node_modules/core-js/modules/_global.js\").Symbol;\nvar USE_SYMBOL = typeof _Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/es6.array.find.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $export = __webpack_require__(\"../node_modules/core-js/modules/_export.js\");\nvar $find = __webpack_require__(\"../node_modules/core-js/modules/_array-methods.js\")(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () {\n forced = false;\n});\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n__webpack_require__(\"../node_modules/core-js/modules/_add-to-unscopables.js\")(KEY);\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/es6.string.includes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\n\nvar $export = __webpack_require__(\"../node_modules/core-js/modules/_export.js\");\nvar context = __webpack_require__(\"../node_modules/core-js/modules/_string-context.js\");\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * __webpack_require__(\"../node_modules/core-js/modules/_fails-is-regexp.js\")(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/es7.array.includes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n// https://github.com/tc39/Array.prototype.includes\n\nvar $export = __webpack_require__(\"../node_modules/core-js/modules/_export.js\");\nvar $includes = __webpack_require__(\"../node_modules/core-js/modules/_array-includes.js\")(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n__webpack_require__(\"../node_modules/core-js/modules/_add-to-unscopables.js\")('includes');\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/es7.object.entries.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(\"../node_modules/core-js/modules/_export.js\");\nvar $entries = __webpack_require__(\"../node_modules/core-js/modules/_object-to-array.js\")(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n/***/ }),\n\n/***/ \"../node_modules/core-js/modules/es7.object.values.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = __webpack_require__(\"../node_modules/core-js/modules/_export.js\");\nvar $values = __webpack_require__(\"../node_modules/core-js/modules/_object-to-array.js\")(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n/***/ }),\n\n/***/ \"../node_modules/node-uuid/uuid.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(console) {var __WEBPACK_AMD_DEFINE_RESULT__;// uuid.js\n//\n// Copyright (c) 2010-2012 Robert Kieffer\n// MIT License - http://opensource.org/licenses/mit-license.php\n\n/*global window, require, define */\n(function(_window) {\n \n\n // Unique ID creation requires a high quality random # generator. We feature\n // detect to determine the best RNG source, normalizing to a function that\n // returns 128-bits of randomness, since that's what's usually required\n var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot;\n\n function setupBrowser() {\n // Allow for MSIE11 msCrypto\n var _crypto = _window.crypto || _window.msCrypto;\n\n if (!_rng && _crypto && _crypto.getRandomValues) {\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n //\n // Moderately fast, high quality\n try {\n var _rnds8 = new Uint8Array(16);\n _whatwgRNG = _rng = function whatwgRNG() {\n _crypto.getRandomValues(_rnds8);\n return _rnds8;\n };\n _rng();\n } catch(e) {}\n }\n\n if (!_rng) {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var _rnds = new Array(16);\n _mathRNG = _rng = function() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; }\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return _rnds;\n };\n if ('undefined' !== typeof console && console.warn) {\n console.warn(\"[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()\");\n }\n }\n }\n\n function setupNode() {\n // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html\n //\n // Moderately fast, high quality\n if (true) {\n try {\n var _rb = __webpack_require__(!(function webpackMissingModule() { var e = new Error(\"Cannot find module \\\"crypto\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())).randomBytes;\n _nodeRNG = _rng = _rb && function() {return _rb(16);};\n _rng();\n } catch(e) {}\n }\n }\n\n if (_window) {\n setupBrowser();\n } else {\n setupNode();\n }\n\n // Buffer class to use\n var BufferClass = ('function' === typeof Buffer) ? Buffer : Array;\n\n // Maps for number <-> hex string conversion\n var _byteToHex = [];\n var _hexToByte = {};\n for (var i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n\n // **`parse()` - Parse a UUID into it's component bytes**\n function parse(s, buf, offset) {\n var i = (buf && offset) || 0, ii = 0;\n\n buf = buf || [];\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n if (ii < 16) { // Don't overflow!\n buf[i + ii++] = _hexToByte[oct];\n }\n });\n\n // Zero out remaining bytes if string was short\n while (ii < 16) {\n buf[i + ii++] = 0;\n }\n\n return buf;\n }\n\n // **`unparse()` - Convert UUID byte array (ala parse()) into a string**\n function unparse(buf, offset) {\n var i = offset || 0, bth = _byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n }\n\n // **`v1()` - Generate time-based UUID**\n //\n // Inspired by https://github.com/LiosK/UUID.js\n // and http://docs.python.org/library/uuid.html\n\n // random #'s we need to init node and clockseq\n var _seedBytes = _rng();\n\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n var _nodeId = [\n _seedBytes[0] | 0x01,\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n ];\n\n // Per 4.2.2, randomize (14 bit) clockseq\n var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n // Previous uuid creation time\n var _lastMSecs = 0, _lastNSecs = 0;\n\n // See https://github.com/broofa/node-uuid for API details\n function v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n\n var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq;\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = (options.msecs != null) ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq == null) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n var node = options.node || _nodeId;\n for (var n = 0; n < 6; n++) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : unparse(b);\n }\n\n // **`v4()` - Generate random UUID**\n\n // See https://github.com/broofa/node-uuid for API details\n function v4(options, buf, offset) {\n // Deprecated - 'format' argument, as supported in v1.2\n var i = buf && offset || 0;\n\n if (typeof(options) === 'string') {\n buf = (options === 'binary') ? new BufferClass(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || _rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ii++) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || unparse(rnds);\n }\n\n // Export public API\n var uuid = v4;\n uuid.v1 = v1;\n uuid.v4 = v4;\n uuid.parse = parse;\n uuid.unparse = unparse;\n uuid.BufferClass = BufferClass;\n uuid._rng = _rng;\n uuid._mathRNG = _mathRNG;\n uuid._nodeRNG = _nodeRNG;\n uuid._whatwgRNG = _whatwgRNG;\n\n if (('undefined' !== typeof module) && module.exports) {\n // Publish as node.js module\n module.exports = uuid;\n } else if (true) {\n // Publish as AMD module\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {return uuid;}).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n } else {\n // Publish as global (in browsers)\n _previousRoot = _window.uuid;\n\n // **`noConflict()` - (browser only) to reset global 'uuid' var**\n uuid.noConflict = function() {\n _window.uuid = _previousRoot;\n return uuid;\n };\n\n _window.uuid = uuid;\n }\n})('undefined' !== typeof window ? window : null);\n\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/console-browserify/index.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/noop-loader/index.js!../node_modules/xo-page-components/src/value-props/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n

{{ title }}

\\n

\\n

\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"{{ content('base.closePayPalCheckoutLabel') }}\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/message/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n \\n
    \\n
  • \\n \\n
  • \\n
  • \\n
    \\n
  • \\n
\\n
\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/spinner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n

\\n

\\n

{{message}}

\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/object-assign/index.js\":\n/***/ (function(module, exports) {\n\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/api.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$Api = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.$getLatestCorrelationID = $getLatestCorrelationID;\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _event = __webpack_require__(\"../node_modules/squid/dist/core/event.js\");\n\nvar _class = __webpack_require__(\"../node_modules/squid/dist/core/class.js\");\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\nvar _promise = __webpack_require__(\"../node_modules/squid/dist/core/promise.js\");\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nvar _error = __webpack_require__(\"../node_modules/squid/dist/core/error.js\");\n\nvar _loader = __webpack_require__(\"../node_modules/squid/dist/core/loader.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/*\n API\n ---\n\n This layer is responsible for handling api requests. It has a number of responsibilities:\n\n - Caching responses\n - Transparently returning data that has been preloaded into the initial page response\n - Instrumentation\n - Batching multiple api calls into a single http request\n - Handling multiple types of responses and dispatching to the correct handlers\n - Emitting loading events for all http calls\n */\n\n_config.$meta.headers = _config.$meta.headers || {};\n_config.$meta.headers['x-cookies'] = _typeof(_config.$meta.headers['x-cookies']) !== 'object' ? JSON.parse(_config.$meta.headers['x-cookies'] || '{}') : _config.$meta.headers['x-cookies'];\n\n// Are we in 'cookies disabled' mode? (Do we need to keep a local store of cookies)\nfunction cookiesEnabled() {\n return _util.$util.cookiesEnabled() && window.location.hostname.indexOf('.paypal.com') > -1;\n}\n\n// Cache for api responses, when cache: true\nvar cache = {};\nvar standardHeaders = {};\n\nvar latestCorrelationID = _config.$meta.correlationId;\n\n// Window load promise\nvar windowLoad = _util.$util.memoize(function () {\n return _promise.$promise.resolver(function (resolve) {\n if (document.readyState === 'complete') {\n resolve();\n } else {\n window.addEventListener('load', resolve);\n }\n });\n});\n\n// Buffer for batch requests made within the same frame\nvar batchQueue = {};\n\n// Backwards compat\nwindow.pre = {};\n\n// Transient cache resolvers\nvar transientCache = {};\n\n// Transient cache resolvers\nvar transientCacheResolvers = {};\n\n// Metabuilder\nvar metaBuilder = void 0;\n\n// Add to transientCache\nwindow.preload = function (method, url, data, name) {\n\n if (name) {\n window.pre[name] = {\n method: method,\n uri: url,\n res: data\n };\n }\n\n var key = method + ':' + url;\n var resolvers = transientCacheResolvers[key] || [];\n\n transientCache[key] = data;\n\n while (resolvers.length) {\n resolvers.pop().call();\n }\n};\n\n// Preload complete\nvar preloadComplete = false;\n\nwindow.preloadComplete = function () {\n preloadComplete = true;\n Object.keys(transientCacheResolvers).forEach(function (key) {\n var resolvers = transientCacheResolvers[key] || [];\n\n while (resolvers.length) {\n resolvers.pop().call();\n }\n });\n};\n\n_logger.$logger.info(cookiesEnabled() ? 'cookies_enabled' : 'cookies_disabled');\n\nvar $Api = exports.$Api = _class.$Class.extend('$Api', {\n\n // Cache any GET responses indefinitely\n cache: false,\n\n // Http timeout for all requests\n timeout: 45000,\n\n // Default number of attempts on aborted requests and 500 server errors\n getAttempts: 3,\n postAttempts: 1,\n\n // POST on a resource with an action name myapi.action('foo') -> POST /my/api/foo\n action: function action(_action, options) {\n options.action = _action;\n return this.post(options);\n },\n\n // GET on a resource myapi.retrieve() -> GET /my/api\n retrieve: function retrieve(options) {\n options.method = 'get';\n return this.call(options);\n },\n\n // POST on a resource myapi.retrieve() -> POST /my/api\n post: function post(options) {\n options.method = 'post';\n return this.call(options);\n },\n\n // Generic handler for calling an api and dispatching requests to the right place\n call: function call(options) {\n var self = this;\n\n // Set up request options and params. `options` is an object which should contain everything\n // the request needs to run and handle the response\n\n options.api = this;\n options.uri = this.getURI(options.model, options.action);\n options.params = options.params || {};\n options.cache = options.cache || self.cache && options.method === 'get';\n options.name = this.buildAPIName(options);\n options.meta = this.buildMeta();\n options.transientError = options.transientError || false;\n options.cacheKey = _util.$util.buildURL(options.uri, options.params);\n\n _logger.$logger.info(options.name + '_call', {\n name: options.name,\n method: options.method,\n uri: options.uri\n });\n\n if (!options.silent) {\n _event.$event.emit('loading');\n }\n\n // Decide where to get the response\n return _promise.$promise.first([\n\n // If caching is enabled and we have the data in local cache, use the cache\n function () {\n if (options.cache && cache[options.cacheKey]) {\n return cache[options.cacheKey];\n }\n },\n\n // Otherwise if we have transient cache data for this api, we can use that\n function () {\n return _promise.$promise.providing(self.hasTransientCacheData(options), function () {\n\n // The reason we use self.attemptRequest here is so any errors in the cached response\n // can trigger the retry code path, as if it were a regular request\n return self.attemptRequest(options);\n });\n },\n\n // If we're in batch mode, queue up a batch request\n function () {\n if (options.batch) {\n return self.batchRequest(options);\n }\n },\n\n // Otherwise attempt a regular http request (at this point an http call is guaranteed)\n function () {\n return self.attemptRequest(options);\n }])['finally'](function () {\n\n if (!options.silent) {\n _event.$event.emit('loaded');\n }\n }).then(function (res) {\n\n // Cache the response if we need to\n if (options.cache) {\n cache[options.cacheKey] = res;\n }\n\n // Handle the response\n return self.handleResponse(res.data, options);\n }, function (err) {\n\n // $BatchShortCircuit will be thrown if:\n //\n // 1. batch api call B depends on api call A, but-\n // 2. api call A fails\n //\n // In which case we end up in a situation where had it been a regular chain of events,\n // api B would never have been called in the first place.\n //\n // One possibility here is to return $unresolved, which prevents the promise from ever\n // resolving, but this has the potential to cause a lot of difficulty debugging and strange\n // corner cases.\n //\n // Instead we opt to simply reject the promise, and not call any of the response handlers\n\n if (err instanceof _error.$BatchShortCircuit) {\n return _promise.$promise.reject(err);\n }\n\n // Otherwise, handle the error normally\n return self.handleErrorResponse(err, options);\n });\n },\n\n // Set up a batch request for processing in the next frame\n batchRequest: function batchRequest(options) {\n\n // Batch Requests are an optimization layer on top of regular api calls. The purpose of this\n // layer is to combine multiple atomic api calls into a single http request, without forcing\n // developers to create large orchestration layers on the client/server with cross-cutting concerns.\n //\n // This layer will queue up multiple requests made in the same frame whenever batch-mode is enabled,\n // attach them all to an http call to /api/batch/:name, then on the response it will dispatch each\n // individual api call to the correct handler.\n //\n // The way this is implemented is to place each response in the transient api cache, then to yield\n // control to the regular api request handler, which will handle instrumentation and retries\n\n // For quick dev-time feedback...\n _util.$util.assert(options.batch.name, 'Must define a \"name\" for batch request: ' + options.batch);\n _util.$util.assert(options.batch.id, 'Must define a \"id\" for batch request: ' + options.batch);\n\n var name = options.batch.name;\n var id = options.batch.id;\n\n // Add the batch request options to the batchQueue for processing on the next frame\n var batch = batchQueue[name] = batchQueue[name] || {};\n\n batch[id] = options;\n\n // Fire off a batch request. This will be debounced: calls in the same frame will be combined to one\n return this.buildBatchRequest(name).then(function (results) {\n\n // We get back a mapping of id->response, so we now extract the response for our api\n // call. If we have no response, we can assume the call was never made, and short circuit.\n return results[id].then(function (result) {\n return result || _promise.$promise.reject(new _error.$BatchShortCircuit());\n });\n });\n },\n\n // Process all of the accumulated batch api requests\n buildBatchRequest: _promise.$promise.debounce(function (name) {\n\n var self = this;\n var batch = batchQueue[name];\n var batchIds = _class.$Class.keys(batch);\n var batchData = {};\n var headers = {};\n\n delete batchQueue[name];\n\n // If we have just a single request, we can short-circuit and just hit that api\n\n if (batchIds.length === 1) {\n\n var batchId = batchIds[0];\n var opts = batch[batchId];\n\n var results = {};\n\n results[batchId] = opts.api.attemptRequest(opts);\n return results;\n }\n\n // Build the request to send to the server side. This is an mapping of id->request, each containing\n // the method, uri, data, and dependencies for each api.\n //\n // Specifying a dependency for an api essentially means the back-end will only\n // call api-B if api-A returns ack=success. Otherwise there will be no response for api B.\n\n _util.$util.forEach(batch, function (options, id) {\n\n batchData[id] = {\n method: options.method,\n uri: options.api.getURI(options.model, options.action, true),\n data: options.data,\n params: options.params,\n dependencies: options.batch.dependencies\n };\n\n _util.$util.extend(headers, options.headers);\n });\n\n // Unfortunate circular dependency... $Api depends on another api.\n //\n // $batchApi is subject to all of the same rules regarding retries, so if for some reason the server\n // does not respond the first time, our batch request can still get through.\n\n return $batchApi.action(name, { // eslint-disable-line no-use-before-define\n data: batchData,\n headers: headers\n }).then(function (res) {\n\n // The final response will be a mapping of id->response-promise.\n //\n // However, we do not treat this data as our final response. Instead, we simply use it to\n // prime our transient cache, then proceed to jump to our regular request handler. This will\n // take care of retries and instrumentation as if this were a regular request.\n //\n // Note that a retry for $batchApi is different to a retry for an individual api. If\n // an *individual* api call fails, we do not want to re-do the entire batch call; instead we\n // can just retry the individual api call.\n\n return self.handleBatchResponse(batch, res.data);\n });\n }),\n\n // Process the responses for all of the batch requests we sent to the server\n handleBatchResponse: function handleBatchResponse(batch, data) {\n\n var self = this;\n\n var promises = {};\n\n // Loop over each individual api response contained in the batch response, and process the result\n\n _util.$util.forEach(batch, function (options, id) {\n\n // Store each response promise so we can check and wait for api dependencies\n\n promises[id] = _promise.$promise.run(function () {\n\n // Check if all of the dependencies are present for our individual api call. To do this\n // we must wait until the dependent api call is entirely complete, including any retries.\n\n var depsPresent = _promise.$promise.every(options.batch.dependencies || [], function (depName) {\n\n if (!batch[depName]) {\n _logger.$logger.info('missing_batch_dependency', {\n dependency: depName,\n available: Object.keys(batch).join('|')\n });\n }\n\n return !batch[depName] || promises[depName].then(function (dependency) {\n return dependency && dependency.data && dependency.data.ack === 'success';\n });\n });\n\n // If our dependencies are present, we can continue, otherwise we are not interested in\n // the result of the individual api call - if its dependency is not present, it will not be.\n\n return _promise.$promise.providing(depsPresent, function () {\n\n // If there is data returned for the individual call, add it to the transient cache\n\n return _promise.$promise.providing(data[id], function (result) {\n var uri = options.api.getURI(options.model, options.action);\n\n uri = _util.$util.buildURL(uri, options.params);\n\n self.addTransientCacheData(options.method, uri, result);\n }).then(function () {\n\n // Regardless of whether or not there is data, we can now attempt the request.\n // This will either get the data from the transient cache, or make an http call,\n // and handle any retries that need to be made.\n\n return options.api.attemptRequest(options);\n });\n });\n });\n });\n\n return promises;\n },\n\n // Handle the request and any retries, using either the transient cache or http calls\n attemptRequest: function attemptRequest(options) {\n var self = this;\n\n var attempts = options.method === 'get' ? this.getAttempts : this.postAttempts;\n\n // We allow a certain number of attempts/retries for each api call\n return _promise.$promise.attempt(attempts, function (remaining) {\n\n // Query the transient cache\n return self.getTransientCacheResponse(options).then(function (res) {\n\n // If we can get a response from the transient cache, then use it\n if (res) {\n return res;\n }\n\n // Otherwise resort to making an http call\n return self.getHttpResponse(options);\n })['catch'](function (res) {\n\n // If our request was aborted without even a status code, force a single retry\n if ((!res || !res.status) && attempts === 1) {\n\n _logger.$logger.warn('api_retry_aborted', {\n method: options.method,\n uri: options.uri\n });\n\n return self.getHttpResponse(options);\n }\n\n return _promise.$promise.reject(res);\n })['catch'](function (res) {\n\n // If our request was 401 denied (probably due to a CSRF error), force a single retry\n if (res.status === 401) {\n\n _logger.$logger.warn('api_retry_401', {\n method: options.method,\n uri: options.uri\n });\n\n return self.getHttpResponse(options);\n }\n\n return _promise.$promise.reject(res);\n })['catch'](function (res) {\n\n // Set the correct response and ack for 401\n if (res.status === 401) {\n return {\n data: {\n ack: 'permission_denied'\n }\n };\n }\n\n // Setup to throw a TOO_MANY_REQUESTS contingency for 429 response from ratelimiter (velocityserv)\n if (res.status === 429) {\n return {\n data: {\n ack: 'contingency',\n contingency: 'TOO_MANY_REQUESTS'\n }\n };\n }\n\n // If we have any remaining retries, log and reject\n if (remaining) {\n\n _logger.$logger.warn('api_retry', {\n method: options.method,\n uri: options.uri\n });\n\n return _promise.$promise.reject(res);\n }\n\n // Otherwise reject the request with the appropriate error\n\n // We got ack=error in the response\n if (res && res.data && res.data.ack === 'error') {\n return _promise.$promise.reject(new _error.$ApiError('api_error', { // eslint-disable-line no-reserved-keys\n name: options.name,\n method: options.method,\n uri: options.uri,\n stack: res.data.stack,\n transient: options.transientError\n }));\n }\n\n // We got a response error status\n else if (res && res.status) {\n return _promise.$promise.reject(new _error.$ApiError('response_status_' + res.status, { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n } else if (res && res.error) {\n return _promise.$promise.reject(new _error.$ApiError('request_' + res.error, { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n }\n\n // The request was aborted\n else {\n return _promise.$promise.reject(new _error.$ApiError('request_aborted', { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n }\n });\n });\n },\n\n // Get an api response via http\n getHttpResponse: function getHttpResponse(options) {\n var self = this;\n\n var startTime = _util.$util.now();\n\n var request = this.http(options);\n\n return request['finally'](function () {\n\n // Calculate the end-to-end duration of the request from the client's perspective\n options.duration = _util.$util.now() - startTime;\n })['catch'](function (res) {\n\n // Turn responses with an ack into a 'success' so it makes it to the standard handlers\n if (res && res.status && res.data && res.data.ack && res.data.ack !== 'error') {\n return res;\n }\n\n return _promise.$promise.reject(res);\n }).then(function (res) {\n self.saveResponseState(res);\n\n var loggerPayload = {\n name: options.name,\n method: options.method,\n uri: options.uri,\n server: res.data.server,\n time: options.duration,\n duration: options.duration,\n corrid: res && res.headers('Paypal-Debug-Id')\n };\n\n // In certain browsers we can match up this api call to the performance data from the browser\n if (window.performance && window.performance.getEntries) {\n _util.$util.forEach(window.performance.getEntries(), function (resource) {\n if (resource.name && resource.name.indexOf(options.uri) > -1) {\n _util.$util.extend(loggerPayload, resource);\n }\n });\n }\n\n _logger.$logger.info('api_response', loggerPayload);\n\n if (res && res.status) {\n _logger.$logger.info('http_response_' + res.status);\n }\n\n return res;\n }, function (res) {\n self.saveResponseState(res);\n\n if (res && res.status) {\n _logger.$logger.info('http_response_' + res.status, {\n corrid: res.headers('Paypal-Debug-Id'),\n referenceId: res.headers('X-Reference-Header') || undefined // To not serialize this data if not present\n });\n }\n\n return _promise.$promise.reject(res);\n });\n },\n\n setTransientCache: function setTransientCache(data) {\n throw new Error('NotImplemented');\n },\n\n // Get an individual api response from the transient cache, as an object\n getTransientCacheData: function getTransientCacheData(options, pop) {\n\n if (!_config.$config.enablePreload) {\n return _promise.$promise.resolve();\n }\n\n var preMethod = options.method.toLowerCase();\n var preUri = _util.$util.buildURL(options.uri, options.params);\n\n var key = preMethod + ':' + preUri;\n\n return _promise.$promise.resolver(function (resolve) {\n\n function res() {\n var data = transientCache[key];\n\n if (pop) {\n delete transientCache[key];\n }\n resolve(data);\n }\n\n if (transientCache[key] || document.readyState === 'complete' || preloadComplete) {\n return res();\n }\n\n transientCacheResolvers[key] = transientCacheResolvers[key] || [];\n transientCacheResolvers[key].push(res);\n\n windowLoad().then(res);\n });\n },\n\n // Check if the transient cache has the data for a particular api\n hasTransientCacheData: function hasTransientCacheData(options) {\n return this.getTransientCacheData(options, false).then(function (data) {\n return Boolean(data);\n });\n },\n\n // Add data to the transient cache\n addTransientCacheData: function addTransientCacheData(method, uri, data) {\n var key = method + ':' + uri;\n\n transientCache[key] = data;\n },\n\n // Get an individual api response from transient cache, as a res promise with the correct status code\n getTransientCacheResponse: function getTransientCacheResponse(options) {\n\n return this.getTransientCacheData(options, true).then(function (data) {\n\n // Preload data does not come with a response code, so massage it into a response promise\n if (data) {\n if (data.ack === 'error') {\n return _promise.$promise.reject({\n status: 500,\n data: data\n });\n } else if (data.ack === 'permission_denied') {\n return _promise.$promise.reject({\n status: 401,\n data: data\n });\n } else if (data.ack === 'contingency' || data.ack === 'validation_error') {\n return {\n status: 400,\n data: data\n };\n } else {\n return {\n status: 200,\n data: data\n };\n }\n }\n\n // Log a cache miss if we are currently in the first-page load\n else if (options.method === 'get' && !_loader.$loader.firstLoad() && !options.silent) {\n _logger.$logger.info('preload_cache_miss', {\n uri: options.uri\n });\n }\n });\n },\n\n getHeaders: function getHeaders(options) {\n\n if (!_config.$meta.headers['x-csrf-jwt'] && !_config.$meta.csrfJwt) {\n _logger.$logger.warn('missing_csrf_jwt');\n }\n\n var headers = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'x-csrf-jwt': _config.$meta.headers['x-csrf-jwt'] || _config.$meta.csrfJwt\n };\n\n _util.$util.extend(headers, standardHeaders);\n\n if (!cookiesEnabled()) {\n headers['x-cookies'] = JSON.stringify(_config.$meta.headers['x-cookies']);\n }\n\n if (options.headers) {\n _util.$util.extend(headers, options.headers);\n }\n\n return headers;\n },\n http: function http(options) {\n return this.httpJQuery(options);\n },\n\n\n /*\n // Raw http call\n httpAngular: function(options) {\n let request = {\n method: options.method,\n url: options.uri,\n data: {\n data: options.data,\n meta: options.meta\n },\n headers: this.getHeaders(options),\n params: options.params,\n requestType: 'json',\n responseType: 'json',\n timeout: this.timeout\n };\n if (options.method === 'get' && options.meta && Object.keys(options.meta).length) {\n request.params.meta = JSON.stringify(options.meta);\n }\n return $http(request);\n },\n */\n\n httpJQuery: function httpJQuery(options) {\n\n var request = {\n method: options.method,\n data: options.method === 'get' ? options.params : JSON.stringify({\n data: options.data,\n meta: options.meta || {}\n }),\n headers: this.getHeaders(options),\n timeout: this.timeout\n };\n\n if (options.method === 'post') {\n request.headers['Content-Type'] = 'application/json;charset=UTF-8';\n } else if (options.method === 'get') {\n request.data.meta = JSON.stringify(options.meta);\n }\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n function getRes(res, data) {\n return {\n status: res.status,\n data: data,\n headers: function headers(name) {\n return res.getResponseHeader(name);\n }\n };\n }\n\n request.success = function (data, status, res) {\n return resolve(getRes(res, data));\n };\n\n request.error = function (res) {\n if (res && res.status) {\n if (res.status >= 400) {\n return reject(getRes(res, res.responseJSON));\n } else {\n return resolve(getRes(res, res.responseJSON));\n }\n }\n\n return reject({\n status: 0,\n headers: _util.$util.noop,\n error: res && res.statusText\n });\n };\n\n _jquery2['default'].ajax(options.uri, request);\n });\n },\n\n // Save cookies and jwt-csrf token from the response\n saveResponseState: function saveResponseState(res) {\n\n if (res.headers('x-csrf-jwt')) {\n _config.$meta.headers['x-csrf-jwt'] = res.headers('x-csrf-jwt');\n _config.$meta.csrfJwt = res.headers('x-csrf-jwt');\n _config.$meta.headers['x-csrf-jwt-hash'] = res.headers('x-csrf-jwt-hash');\n }\n\n if (res.headers('X-cookies')) {\n\n _config.$meta.headers['x-cookies-hash'] = res.headers('x-cookies-hash');\n\n // Extend local cookie jar of encrypted-cookie-name->encrypted-cookie-value with any new cookies\n _util.$util.extend(_config.$meta.headers['x-cookies'], JSON.parse(res.headers('X-cookies') || '{}'));\n }\n\n latestCorrelationID = res.headers('Paypal-Debug-Id') || latestCorrelationID;\n },\n\n // Dispatch the response to the correct handlers\n handleResponse: function handleResponse(res, options) {\n var loggerName = 'ui_' + options.name;\n\n var loggerPayload = {\n name: options.name,\n method: options.method,\n uri: options.uri,\n time: options.duration,\n duration: options.duration\n };\n\n // Here we dispatch the response to the correct handler based on the ack.\n //\n // ack=success -> options.success()\n // ack=error -> options.error()\n // ack=validation -> options.validation()\n // ack=contingency -> options.contingencies[contingency]()\n //\n // Why do this rather than just rejecting the promise with a custom error?\n //\n // a) Angular promises have no `.catchType()`, so this saves us a lot of `instanceof` checks\n // b) Angular promises have no `.done()`, so callers can not assert that they have handled\n // every error they want to. This is exacerbated by the fact that there is no single thread\n // of execution on the front-end a la node, so we can't just call `.done()` at the very end :(\n //\n // This way, if somebody passes a handler, it will be called. Otherwise, an error will be thrown\n // and the global error handler will be invoked. The api responses are also given as promises.\n\n var resultModel = options.resultModel || options.model;\n\n /* jshint maxcomplexity: 17 */\n return _promise.$promise.call(function () {\n\n // If we are given a `resultModel`, we always extend it with `res.data`, no matter the ack\n\n if (res.data && resultModel) {\n\n if (resultModel.populate) {\n resultModel.populate(res.data);\n } else {\n _util.$util.extend(resultModel, res.data);\n }\n }\n\n if (res && res.ack === 'success' && resultModel && resultModel.fetchChildren) {\n return _promise.$promise.resolve(resultModel.fetchChildren()).then(function (children) {\n return _util.$util.extend(resultModel, children);\n });\n }\n }).then(function () {\n // eslint-disable-line max-statements\n\n // Handle each ack type, throw errors accordingly\n\n if (res.ack === 'success') {\n _logger.$logger.info(loggerName + '_success', loggerPayload);\n\n if (options.success) {\n if (options.success instanceof Function) {\n return options.success(res.data);\n }\n return options.success;\n }\n\n return res;\n }\n\n if (options.failSilently) {\n return;\n }\n\n if (res.ack === 'contingency') {\n _logger.$logger.info(loggerName + '_contingency', _util.$util.extend(loggerPayload, {\n contingency: res.contingency\n }));\n\n if (!res.contingency) {\n throw new _error.$ApiError('expected_contingency_name', {\n api: options.name\n });\n }\n\n var contingency = new _error.$Contingency(res.contingency, { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n\n if (resultModel) {\n resultModel.errorData = res.errorData || {};\n }\n\n var handler = options.contingencies && (options.contingencies[contingency.message] || options.contingencies['DEFAULT']);\n\n _util.$util.extend(contingency, res.errorData);\n\n if (handler) {\n if (handler instanceof Function) {\n return handler(contingency.message, contingency);\n }\n return handler;\n }\n\n throw contingency;\n } else if (res.ack === 'validation') {\n _logger.$logger.info(loggerName + '_validation', _util.$util.extend(loggerPayload, {\n validation: res.validation\n }));\n\n if (options.validation) {\n return options.validation(res.validation);\n }\n\n throw new _error.$ApiError('validation', { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n } else if (res.ack === 'permission_denied') {\n _logger.$logger.info(loggerName + '_denied', loggerPayload);\n\n var properties = {\n transient: options.transientError\n };\n\n if (res.reason) {\n properties.reason = res.reason;\n }\n\n throw new _error.$Forbidden(options.uri + ': forbidden', properties);\n } else {\n _logger.$logger.info(loggerName + '_noack', loggerPayload);\n\n throw new _error.$ApiError('noack', { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n }\n });\n },\n\n // Handle http error responses (ack=error or unhandled errors)\n handleErrorResponse: function handleErrorResponse(err, options) {\n\n return _promise.$promise.run(function () {\n\n // If the caller provides an error handler, let them handle it\n if (options.error) {\n return options.error(err);\n }\n\n // Otherwise we throw the error. Please not that this is NOT just rejecting the promise,\n // this will always end up in the global error handler due to how angular promises work.\n throw err;\n });\n },\n\n // Build the uri for the api call\n getURI: function getURI(model, action, relative) {\n var self = this;\n\n // build the uri as a seriest of segments\n var uri = [];\n\n uri.push(this.uri.replace(/\\/:[\\w\\.]+\\?/g, function (key) {\n\n // Add any *optional* dynamic keys from the model (/foo/:bar? -> /foo/{{model.bar}})\n\n key = key.slice(2);\n key = key.substring(0, key.length - 1);\n\n var component = model.get ? model.get(key) : model[key];\n\n if (!component) {\n return '';\n }\n\n return '/' + component;\n }).replace(/:[\\w\\.]+/g, function (key) {\n\n // Add any dynamic keys from the model (/foo/:bar -> /foo/{{model.bar}})\n\n key = key.slice(1);\n\n var component = model.get ? model.get(key) : model[key];\n\n if (!component) {\n throw new Error('Property \"' + key + '\" not found in model for: ' + self.uri);\n }\n\n return component;\n }));\n\n // Add the action, if provided (`foo.action('bar', {...})` -> /api/foo/bar\n if (action) {\n uri.push(action);\n }\n\n // Add the extension (e.g. for doing a GET on a .json resource)\n if (this.ext) {\n uri[uri.length - 1] += '.' + this.ext;\n }\n\n // Join the uri segments and strip any extra slashes\n uri = '/' + uri.join('/').replace(/\\/{2,}/g, '/').replace(/^\\//, '');\n\n // Add on the base uri, e.g. /webapps/hermes\n if (!relative) {\n uri = (this.baseURI || _config.$config.urls.baseUrl) + uri;\n }\n\n return uri;\n },\n\n // Attach meta data provided by the parent app\n buildMeta: function buildMeta() {\n if (metaBuilder) {\n return metaBuilder();\n }\n },\n\n // Build the name of the api for logging. /api/foo/bar -> api_foo_bar\n buildAPIName: function buildAPIName(options) {\n var self = this;\n var apiName = self.uri.replace(/^\\/+/, ''). // Remove leading '/'\n replace(/\\//g, '_'). // Replace remaining '/' with '_'\n replace(/\\?(.*)/, ''). // Remove everything after '?'\n replace(/[^a-zA-Z0-9_]/g, '');\n\n apiName = options.action ? apiName + '_' + options.action : apiName;\n apiName = apiName.charAt(0) === '_' ? apiName.slice(1) : apiName;\n return apiName;\n }\n});\n\n$Api.reopenClass({\n clearCache: function clearCache() {\n cache = {};\n }\n});\n\n$Api.registerMetaBuilder = function (builder) {\n metaBuilder = builder;\n};\n\n$Api.addHeader = function (name, value) {\n standardHeaders[name] = value;\n};\n\nvar $batchApi = new $Api({\n uri: '/api/batch',\n postAttempts: 3\n});\n\nfunction $getLatestCorrelationID() {\n return latestCorrelationID;\n}\n\nangular.value(\"$Api\", $Api);\nangular.value(\"$getLatestCorrelationID\", $getLatestCorrelationID);\n_logger.$logger;\n\n_event.$event;\n\n_class.$Class;\n\n_util.$util;\n\n_promise.$promise;\n\n_config.$config;\n\n_config.$meta;\n\n_error.$Contingency;\n\n_error.$Forbidden;\n\n_error.$ApiError;\n\n_error.$BatchShortCircuit;\n\n_loader.$loader;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/class.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*\n Class\n -----\n\n A class pattern, adding sugar on top of javascript prototypes\n\n ### Basic Usage\n\n let MyClass = Class.extend({\n foo: 'bar';\n });\n\n myInstance = new MyClass({\n hello: 'world'\n });\n\n console.log(myInstance.foo, myInstance.hello)\n\n In this example, `foo` becomes a property on `MyClass`'s prototype,\n and `hello` becomes a property on `myInstance`.\n\n ### Default Object Methods\n\n - `init()`: Called after the object is first instantiated, with all properties available\n\n - `get(, )`: Get an object an arbitrary number of levels deep, or return a default\n\n e.g. `myInstance.get('foo.bar.baz', 'some_default');`\n\n Default return value is undefined\n\n - `set(, )`: Set an object an arbitrary number of levels deep\n\n e.g. `myInstance.set('foo.bar.baz', 'some_value');`\n\n Error is thrown if no object is found to set the value on\n\n - `setProperties()`: Set all the properties from an object onto your object\n\n e.g. `myInstance.setProperties({foo: 'bar', hello: 'world'})`\n\n Can not be used with nested properties\n\n - `forEach()`: Loop through the object and call callback(, ) for each key/val pair\n\n */\n\n// Object Create\n// -------------\n//\n// Shim for Object.create, if it is not supported by our browser\n//\n// let myPrototype = {foo: 'bar'}\n// let myObject = create(myPrototype)\n\n// Create an empty anonymous constructor with no side effects, for re-use later\nvar EmptyConstructor = function EmptyConstructor() {}; // eslint-disable-line no-empty-function\n\nvar create = Object.create || function create(obj) {\n\n // Set a temporary prototype\n EmptyConstructor.prototype = obj;\n\n // Create an object using our temporary constructor/prototype\n var instance = new EmptyConstructor();\n\n // Reset the prototype for next time\n EmptyConstructor.prototype = null;\n\n // Return our new object, created without side effects\n return instance;\n};\n\nfunction _extend(obj, source) {\n\n if (!source) {\n return obj;\n }\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\n// Is Object\n// ---------\n//\n// Check of a let is an object or not\n//\n// isobject({}) -> true\n// isobject('foo') -> false\n\nfunction isobject(obj) {\n return obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj instanceof Object;\n}\n\n// Transpose properties\n// -------------------------------------------------------------------\n//\n// Transpose properties from a list of objects onto a recipient object\n//\n// let recipient = {};\n// transpose(recipient, [{a: 1, b: 2}, {c: 3}])\n// recipient -> {a: 1, b: 2, c:3}\n\nfunction transpose(recipient, args) {\n\n // Loop through all args\n for (var i = 0; i < args.length; i++) {\n var ob = args[i];\n\n // Ignore anything that is not an object\n if (!isobject(ob)) {\n continue;\n }\n\n // Loop through all keys in our object\n for (var key in ob) {\n\n // Ignore any prototypal properties\n if (!ob.hasOwnProperty(key)) {\n continue;\n }\n\n var item = ob[key];\n\n // Give the function a name\n if (item instanceof Function) {\n item.__name__ = key;\n }\n\n recipient[key] = item;\n }\n }\n}\n\n// Construct a Class\n// -----------------\n//\n// This is the primary constructor for all $Class objects\n\nfunction construct() {\n // eslint-disable-line no-unused-vars\n\n // Call any custom constructor;\n if (this.construct) {\n var ob = this.construct.apply(this, arguments);\n\n // If we get a new object back, return that to the user\n if (isobject(ob)) {\n return ob;\n }\n }\n\n // Load any provided properties directly onto the object\n transpose(this, arguments);\n\n // Initialize the object\n if (this.init) {\n this.init();\n }\n}\n\n// Reopen an object\n// ----------------\n//\n// Add properties to the constructor's prototype\n//\n// let Animal = $Class.extend();\n//\n// Animal.reopen({\n// type: 'animal',\n// });\n//\n// let cat = new Animal;\n// console.log(cat.type);\nfunction reopen() {\n\n // Add some more properies to our prototype\n transpose(this.prototype, arguments);\n\n return this;\n}\n\n// Reopen a class\n// --------------\n//\n// Add properties to the constructor. These will propogate through future extends\n//\n// let Animal = $Class.extend();\n//\n// Animal.reopenClass({\n// fromCache: function(id) {\n// return cache[id] || new this({id: id});\n// }\n// }\n//\n// let cat = Animal.fromCache('cat_54');\n\nfunction reopenClass() {\n\n // Add some more properies to our class\n transpose(this, arguments);\n\n // Add to __classmethods__\n transpose(this.__classmethods__, arguments);\n\n return this;\n}\n\nfunction isChild(Cls) {\n return Cls && Cls.prototype instanceof this;\n}\n\n// Generate a new class\n// --------------------\n//\n// Generate a new constructor, with the specified name, and attach all static and prototypal methods\n\nvar id = 0;\n\nfunction extend(name) {\n // eslint-disable-line max-statements\n var Cls = void 0;\n var className = void 0;\n var args = void 0;\n var argsLength = void 0;\n var startIndex = void 0;\n\n // Accept an optional class name\n if (typeof name === 'string') {\n\n // Guard against javascript injection\n if (!name.match(/^[\\w$][\\w\\d]*$/)) {\n throw new Error('Class name can not include special characters: ' + name);\n }\n\n // Use the provided name and slice out the first argument\n className = name;\n argsLength = arguments.length && arguments.length - 1;\n startIndex = 1;\n } else {\n\n // Otherwise default to the parent name, or 'Object' if generating our first class\n className = this.name || 'Object';\n argsLength = arguments.length;\n startIndex = 0;\n }\n\n args = new Array(argsLength);\n for (var i = startIndex; i < arguments.length; i++) {\n args[i - startIndex] = arguments[i];\n }\n\n // Dynamically create our constructor with a custom name\n eval('Cls = function ' + className + '() { return construct.apply(this, arguments) }'); // eslint-disable-line no-eval\n\n // Store the class name for future reference\n Cls.__name__ = className;\n\n // Set up a classmethods object. These will be inherited through subsequent extend() calls\n Cls.__classmethods__ = {\n extend: extend,\n reopen: reopen,\n reopenClass: reopenClass,\n isChild: isChild\n };\n\n id += 1;\n Cls.id = id;\n\n // If we're being called on an existing class, e.g. Class.extend(), we should inherit from that class\n if (this && this !== window) {\n\n // Inherit everything from superclass prototype\n Cls.prototype = create(this.prototype);\n\n // Re-set the constructor, which is overwritten by create\n Cls.prototype.constructor = Cls;\n\n // Add a reference to the superclass prototype for super method calls\n Cls.prototype._super = this.prototype;\n\n // Inherit any class methods from the superclass\n _extend(Cls.__classmethods__, this.__classmethods__);\n }\n\n // Add the class methods to our existing class\n _extend(Cls, Cls.__classmethods__);\n\n // Load any provided properties onto the constructor's prototype\n transpose(Cls.prototype, args);\n\n // Temporary: allow access from console/debugger\n if (className.indexOf('$') === 0) {\n window[className] = Cls;\n } else {\n window['$' + className] = Cls;\n }\n\n return Cls;\n}\n\n// Multi-layer get\n// ---------------\n//\n// Recursively gets a deep path from an object, returning a default value if any level is not found\n//\n// let obj = {bar: {baz: 1}}\n// get(obj, 'bar.baz', 'default') -> 1\n// get(obj, 'aaa.bbb', 'default') -> default\n\nfunction _get(item, path, def) {\n\n if (!path) {\n return def;\n }\n\n path = path.split('.');\n\n // Loop through each section of our key path\n for (var i = 0; i < path.length; i++) {\n\n // If we have an object, we can get the key\n if (isobject(item)) {\n item = item[path[i]];\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n return item === undefined ? def : item;\n}\n\n// Multi-layer set\n// ---------------\n//\n// Recursively sets a deep path from an object\n//\n// let obj = {bar: {baz: 1}}\n// set(obj, 'bar.baz', 2)\n// obj.bar.baz -> 1\n\nfunction _set(item, path, value) {\n path = path.split('.');\n\n // Loop through each section of our key path except the last\n for (var i = 0; i < path.length - 1; i++) {\n\n // Get the next item down\n item = item[path[i]];\n\n // If we have an object, we're good\n if (isobject(item)) {\n continue;\n // Otherwise, there's nothing to set our key on\n } else {\n throw new Error(path[i - 1] + '.' + path[i] + ' is not an object');\n }\n }\n\n // Do the set on the retrieved object with our value\n item[path[path.length - 1]] = value;\n}\n\n// Loop through object\n// -------------------\n//\n// Loop an object and apply a function for each key/value\n//\n// let ob = {a: 1, b: 2, c: 3}\n// each(ob, console.log) -> a 1 b 2 c 3\n\nfunction each(ob, callback) {\n for (var key in ob) {\n if (ob.hasOwnProperty(key)) {\n callback.call(ob, key, ob[key]);\n }\n }\n}\n\n// Gey keys of object\n// ------------------\n//\n// Shim for Object.keys if it does not already exist\n//\n// let ob = {a: 1, b: 2, c: 3}\n// keys(ob) -> ['a', 'b', 'c']\n\nfunction _keys(ob) {\n\n if (Object.keys) {\n return Object.keys(ob);\n }\n\n var result = [];\n\n for (var key in ob) {\n if (ob.hasOwnProperty(key)) {\n result.push(key);\n }\n }\n\n return result;\n}\n\n// Create a base class that can be inherited from\n// ----------------------------------------------\n//\n// This is the public interface to the Class module.\n// All classes with extend from Class and be provided with a set of base convenience methods.\n\nvar $Class = exports.$Class = extend('Class', {\n\n init: function init() {\n // Empty init class, so calls to _super can be safely made\n },\n\n get: function get(path, def) {\n return _get(this, path, def);\n },\n\n set: function set(path, value) {\n _set(this, path, value);\n },\n\n setProperties: function setProperties() {\n transpose(this, arguments);\n },\n\n forEach: function forEach(callback) {\n each(this, callback);\n },\n\n keys: function keys() {\n return _keys(this);\n }\n});\n\n$Class.get = _get;\n$Class.set = _set;\n$Class.keys = _keys;\n\nangular.value(\"$Class\", $Class);\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/config.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar $meta = exports.$meta = window.meta || {};\nvar $cookies = exports.$cookies = window.cookies || {};\nvar $config = exports.$config = window.config || {};\nangular.value(\"$meta\", $meta);\nangular.value(\"$cookies\", $cookies);\nangular.value(\"$config\", $config);\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/dom.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$dom = undefined;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _promise = __webpack_require__(\"../node_modules/squid/dist/core/promise.js\");\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\nvar $dom = exports.$dom = {\n\n elementReady: function elementReady(id) {\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n if (document.getElementById(id)) {\n return resolve();\n }\n\n var interval = setInterval(function () {\n if (document.getElementById(id)) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n\n setTimeout(60000, reject);\n });\n },\n\n loadScript: function loadScript(name, src, timeout) {\n var attributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n return _promise.$promise.resolver(function (resolve, reject) {\n var script = document.createElement('script');\n var loadTimeout = void 0;\n\n function clearScriptLoadTimeout() {\n if (loadTimeout) {\n clearTimeout(loadTimeout);\n loadTimeout = undefined;\n }\n }\n\n script.onload = function () {\n clearScriptLoadTimeout();\n setTimeout(resolve, 10);\n };\n\n // For Internet explorer 8 support\n script.onreadystatechange = function () {\n if (this.readyState === 'complete' || this.readyState === 'loaded') {\n clearScriptLoadTimeout();\n setTimeout(resolve, 10);\n }\n };\n\n script.onerror = function (event) {\n _logger.$logger.info('script_error', {\n script: src\n });\n return reject(new Error(name + '_loading_error'));\n };\n\n if (timeout) {\n loadTimeout = setTimeout(function () {\n _logger.$logger.info('script_load_timedout', {\n script: src\n });\n return reject(new Error(name + '_loading_timed_out'));\n }, timeout);\n }\n\n script.setAttribute('src', src);\n\n for (var _iterator = Object.keys(attributes), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var attribute = _ref;\n\n script.setAttribute(attribute, attributes[attribute]);\n }\n\n document.body.appendChild(script);\n });\n },\n\n cssReady: function cssReady(id) {\n\n var el = document.getElementById(id);\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n var timeout = void 0;\n var interval = void 0;\n\n function check() {\n _util.$util.forEach(document.styleSheets, function (stylesheet) {\n if (stylesheet.href === el.href) {\n clearInterval(interval);\n clearTimeout(timeout);\n resolve();\n }\n });\n }\n\n timeout = setTimeout(function () {\n clearInterval(interval);\n reject();\n throw new Error('css_loading_timed_out');\n }, 30000);\n\n interval = setInterval(check, 20);\n check();\n });\n }\n};\n\nangular.value(\"$dom\", $dom);\n_logger.$logger;\n\n_promise.$promise;\n\n_util.$util;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/error.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$BatchShortCircuit = exports.$ShortCircuit = exports.$FallbackError = exports.$ApiError = exports.$Forbidden = exports.$Contingency = exports.$Error = undefined;\n\nvar _event = __webpack_require__(\"../node_modules/squid/dist/core/event.js\");\n\nvar _class = __webpack_require__(\"../node_modules/squid/dist/core/class.js\");\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\n_util.$util.monkeyPatch(window, 'onerror', function (_ref, original) {\n var message = _ref[0],\n file = _ref[1],\n line = _ref[2],\n col = _ref[3],\n err = _ref[4];\n\n\n original();\n\n _event.$event.emit('$windowError', {\n message: message && (message.stack || message).toString(),\n file: file && file.toString(),\n line: line && line.toString(),\n col: col && col.toString(),\n stack: err && (err.stack || err).toString()\n });\n});\n\nvar $Error = exports.$Error = _class.$Class.extend.call(Error, '$Error', {\n\n construct: function construct(err, properties) {\n\n if (err instanceof Error) {\n err = err.message;\n }\n\n if (properties) {\n _util.$util.extend(this, properties);\n }\n\n this.payload = properties;\n\n this.message = err;\n }\n});\n\nvar $Contingency = exports.$Contingency = $Error.extend('$Contingency', {\n handle: function handle(handlers) {\n var handler = handlers[this.message] || handlers['DEFAULT'];\n\n if (handler) {\n var result = handler.call(this, this.message, this);\n\n if (typeof result !== 'undefined') {\n return result;\n }\n return true;\n }\n }\n});\n\nvar $Forbidden = exports.$Forbidden = $Error.extend('$Forbidden');\n\nvar $ApiError = exports.$ApiError = $Error.extend('$ApiError');\n\nvar $FallbackError = exports.$FallbackError = $Error.extend('$FallbackError', {\n init: function init() {\n this.reason = this.reason || '';\n this.product = this.product || '';\n this.entryPoint = this.entryPoint || '';\n }\n});\n\n/**\n * $ShortCircuit should be thrown if you want to bypass the remainder of a promise chain, and you've already\n * done error handling for the rejection. It should be handled with a no-op in app's $exceptionHandler\n */\nvar $ShortCircuit = exports.$ShortCircuit = $Error.extend('$ShortCircuit');\n\n// TO-BE-DEPRECATED: Use $ShortCircuit instead\nvar $BatchShortCircuit = exports.$BatchShortCircuit = $ShortCircuit;\n\nangular.value(\"$Error\", $Error);\nangular.value(\"$Contingency\", $Contingency);\nangular.value(\"$Forbidden\", $Forbidden);\nangular.value(\"$ApiError\", $ApiError);\nangular.value(\"$FallbackError\", $FallbackError);\nangular.value(\"$ShortCircuit\", $ShortCircuit);\nangular.value(\"$BatchShortCircuit\", $BatchShortCircuit);\n_event.$event;\n\n_class.$Class;\n\n_util.$util;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/event.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$event = undefined;\n\nvar _promise = __webpack_require__(\"../node_modules/squid/dist/core/promise.js\");\n\nvar handlers = {};\n\nvar customEventEmitter = void 0;\n\nvar $event = exports.$event = {\n use: function use(eventEmitter) {\n customEventEmitter = eventEmitter;\n\n for (var _iterator = Object.keys(handlers), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var eventName = _ref;\n\n if (handlers[eventName]) {\n for (var _iterator2 = handlers[eventName], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray2) {\n if (_i2 >= _iterator2.length) break;\n _ref2 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) break;\n _ref2 = _i2.value;\n }\n\n var handler = _ref2;\n\n customEventEmitter.on(eventName, handler);\n }\n }\n }\n },\n on: function on(eventName, method) {\n\n if (customEventEmitter) {\n return customEventEmitter.on(eventName, method);\n }\n\n handlers[eventName] = handlers[eventName] || [];\n handlers[eventName].push(method);\n\n var cancelled = false;\n\n function cancel() {\n if (!cancelled) {\n handlers[eventName].splice(handlers[eventName].indexOf(method), 1);\n cancelled = true;\n }\n }\n\n cancel.cancel = cancel;\n return cancel;\n },\n once: function once(eventName, method) {\n\n if (customEventEmitter) {\n return customEventEmitter.once(eventName, method);\n }\n\n var listener = $event.on(eventName, function () {\n listener.cancel();\n return method.apply(this, arguments);\n });\n\n return listener;\n },\n emit: function emit(eventName) {\n if (customEventEmitter) {\n var _customEventEmitter;\n\n return (_customEventEmitter = customEventEmitter).emit.apply(_customEventEmitter, arguments);\n }\n\n var event = {\n preventDefault: function preventDefault() {\n event.defaultPrevented = true;\n }\n };\n\n if (handlers[eventName]) {\n for (var _iterator3 = Array.prototype.slice.apply(handlers[eventName]), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray3) {\n if (_i3 >= _iterator3.length) break;\n _ref3 = _iterator3[_i3++];\n } else {\n _i3 = _iterator3.next();\n if (_i3.done) break;\n _ref3 = _i3.value;\n }\n\n var handler = _ref3;\n\n handler.apply(this, [event].concat(Array.prototype.slice.call(arguments)));\n }\n }\n\n return event;\n },\n broadcast: function broadcast(eventName) {\n\n if (customEventEmitter) {\n var _customEventEmitter2;\n\n return (_customEventEmitter2 = customEventEmitter).broadcast.apply(_customEventEmitter2, arguments);\n }\n\n return $event.emit.apply($event, arguments);\n },\n\n\n refCount: function refCount($scope, start, stop) {\n return _promise.$promise.resolver(function (resolve) {\n\n var count = 0;\n\n var cancelStartListener = $scope.$on(start, function (event, data) {\n count += 1;\n });\n\n var cancelStopListener = $scope.$on(stop, function (event, data) {\n setTimeout(function () {\n count -= 1;\n res(); // eslint-disable-line no-use-before-define\n }, 50);\n });\n\n function res() {\n if (!count) {\n\n if (cancelStartListener && cancelStopListener) {\n cancelStartListener();\n cancelStopListener();\n }\n\n return resolve();\n }\n }\n\n setTimeout(res, 50);\n });\n },\n\n compose: function compose(start, end, startAll, endAll) {\n var debounce = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n\n var count = 0;\n var active = false;\n\n $event.on(start, function () {\n if (!count) {\n setTimeout(function () {\n if (count && !active) {\n active = true;\n $event.emit(startAll);\n }\n }, debounce);\n }\n\n count += 1;\n });\n\n $event.on(end, function () {\n\n setTimeout(function () {\n count -= 1;\n\n if (!count && active) {\n active = false;\n $event.emit(endAll);\n }\n }, 0);\n });\n\n return {\n getCount: function getCount() {\n return count;\n },\n isActive: function isActive() {\n return Boolean(count);\n },\n reset: function reset() {\n count = 0;\n }\n };\n }\n};\n\nangular.value(\"$event\", $event);\n_promise.$promise;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _api = __webpack_require__(\"../node_modules/squid/dist/core/api.js\");\n\nObject.keys(_api).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _api[key];\n }\n });\n});\n\nvar _class = __webpack_require__(\"../node_modules/squid/dist/core/class.js\");\n\nObject.keys(_class).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _class[key];\n }\n });\n});\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nObject.keys(_config).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _config[key];\n }\n });\n});\n\nvar _error = __webpack_require__(\"../node_modules/squid/dist/core/error.js\");\n\nObject.keys(_error).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _error[key];\n }\n });\n});\n\nvar _event = __webpack_require__(\"../node_modules/squid/dist/core/event.js\");\n\nObject.keys(_event).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _event[key];\n }\n });\n});\n\nvar _integration = __webpack_require__(\"../node_modules/squid/dist/core/integration.js\");\n\nObject.keys(_integration).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _integration[key];\n }\n });\n});\n\nvar _model = __webpack_require__(\"../node_modules/squid/dist/core/model.js\");\n\nObject.keys(_model).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _model[key];\n }\n });\n});\n\nvar _promise = __webpack_require__(\"../node_modules/squid/dist/core/promise.js\");\n\nObject.keys(_promise).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _promise[key];\n }\n });\n});\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\nObject.keys(_util).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _util[key];\n }\n });\n});\n\nvar _loader = __webpack_require__(\"../node_modules/squid/dist/core/loader.js\");\n\nObject.keys(_loader).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _loader[key];\n }\n });\n});\n\nvar _dom = __webpack_require__(\"../node_modules/squid/dist/core/dom.js\");\n\nObject.keys(_dom).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _dom[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/integration.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$integration = exports.$CONTEXT = exports.$DEFAULT = undefined;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar $DEFAULT = exports.$DEFAULT = 'DEFAULT';\n\nvar $CONTEXT = exports.$CONTEXT = {\n\n // Full page checkout\n FULLPAGE: 'FULLPAGE',\n\n // Checkout in popup\n POPUP: 'POPUP',\n\n // Checkout in lightbox (iframe)\n LIGHTBOX: 'LIGHTBOX',\n\n // Web view\n WEBVIEW: 'WEBVIEW',\n\n // Native checkout\n NATIVE_CHECKOUT: 'NATIVE_CHECKOUT'\n};\n\nvar $integration = exports.$integration = {\n\n flow: $DEFAULT,\n\n init: function init(flow, config) {\n this.config = config || {};\n\n if (flow) {\n this.setFlow(flow);\n }\n\n this.setContext(this.getContext());\n },\n getContext: function getContext() {\n\n if (this.isIFrame()) {\n return $CONTEXT.LIGHTBOX;\n } else if (this.isPopup()) {\n return $CONTEXT.POPUP;\n } else {\n return $CONTEXT.FULLPAGE;\n }\n },\n isPopup: function isPopup() {\n return Boolean(window.opener);\n },\n isIFrame: function isIFrame() {\n return window.top !== window.self;\n },\n setContext: function setContext(context) {\n _logger.$logger.info('integration_context_' + context);\n this.context = context;\n },\n setFlow: function setFlow(flow) {\n _logger.$logger.info('integration_flow_' + flow);\n this.flow = flow;\n },\n is: function is(context, flow) {\n return this.isContext(context) && this.isFlow(flow);\n },\n isContext: function isContext(context) {\n return this.context === context;\n },\n isFlow: function isFlow(flow) {\n return this.flow === flow;\n },\n getConfig: function getConfig(key) {\n\n this.context = this.getContext();\n\n if (!this.config) {\n return;\n }\n\n if (this.config.hasOwnProperty(this.context) && this.config[this.context].hasOwnProperty(this.flow) && this.config[this.context][this.flow].hasOwnProperty(key)) {\n\n return this.config[this.context][this.flow][key];\n }\n\n if (this.config.hasOwnProperty(this.context) && this.config[this.context].hasOwnProperty(key)) {\n\n return this.config[this.context][key];\n }\n\n if (this.config.hasOwnProperty($DEFAULT) && this.config[$DEFAULT].hasOwnProperty(this.flow) && this.config[$DEFAULT][this.flow].hasOwnProperty(key)) {\n\n return this.config[$DEFAULT][this.flow][key];\n }\n\n if (this.config.hasOwnProperty($DEFAULT) && this.config[$DEFAULT].hasOwnProperty(key)) {\n\n return this.config[$DEFAULT][key];\n }\n },\n error: function error(message) {\n return new Error('Integration error: ' + this.context + ' / ' + this.flow + ' :: ' + message);\n }\n};\n\nangular.value(\"$DEFAULT\", $DEFAULT);\nangular.value(\"$CONTEXT\", $CONTEXT);\nangular.value(\"$integration\", $integration);\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/loader.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$loader = undefined;\n\nvar _event = __webpack_require__(\"../node_modules/squid/dist/core/event.js\");\n\nvar _firstLoad = false;\n\nvar loader = _event.$event.compose('loading', 'loaded', 'startLoad', 'allLoaded', 100);\n\nvar $loader = exports.$loader = {\n\n isLoading: function isLoading() {\n return Boolean(loader.getCount());\n },\n firstLoad: function firstLoad() {\n return _firstLoad;\n },\n reset: function reset() {\n loader.reset();\n }\n};\n\n_event.$event.on('allLoaded', function () {\n _firstLoad = true;\n});\n\nangular.value(\"$loader\", $loader);\n_event.$event;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/model.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(console) {\n\nexports.__esModule = true;\nexports.$Model = undefined;\n\nvar _class = __webpack_require__(\"../node_modules/squid/dist/core/class.js\");\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\nvar _promise = __webpack_require__(\"../node_modules/squid/dist/core/promise.js\");\n\nvar $Model = exports.$Model = _class.$Class.extend('$Model', {\n\n init: function init() {\n\n if (this.keys().length) {\n this.onPopulate();\n }\n\n if (this.id) {\n var _cache = this.constructor._modelCache = this.constructor._modelCache || {};\n\n _cache[this.id] = this;\n }\n\n this.meta = {\n populated: false\n };\n },\n\n /**\n * Add the passed in properties to this Model.\n * Sets the meta.populated to true. This flag\n * can be used later to determine if the model is populated.\n * Calls onPopulate() in the end.\n */\n populate: function populate() {\n\n this.meta.populated = true;\n this.setProperties.apply(this, arguments);\n delete this.meta.invalidated;\n this.onPopulate();\n return this;\n },\n\n fetchChildren: function fetchChildren() {\n return _promise.$promise.resolve();\n },\n\n /**\n * Override this method, to execute any logic after model is populated.\n */\n onPopulate: function onPopulate() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Override this method, to execute any logic after model is invalidated.\n */\n onInvalidate: function onInvalidate() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Override this method to return a Mock instance. Must return a promise which resolves to model.\n */\n fetchMock: function fetchMock() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Retrieves the model.\n *\n * If model is already populated just returns a promise which resolves to `this`\n * If there is a retriever for this model, then return the retreiver.\n * Else calls the api to retrieve the model.\n *\n * @param options\n * @returns {*}\n */\n retrieve: function retrieve(options) {\n var self = this;\n\n options = options || {};\n\n if (self.meta.populated) {\n\n if (options.success) {\n return _promise.$promise.resolve(options.success(self));\n }\n\n return _promise.$promise.resolve(this);\n }\n\n if (this.retriever) {\n return this.retriever;\n }\n\n if (!this.api) {\n throw new Error('Tried to populate a model with no api');\n }\n\n options.model = this;\n\n this.retriever = this.api.retrieve(options).then(function (res) {\n return self;\n })['finally'](function () {\n delete self.retriever;\n });\n\n return this.retriever;\n },\n\n /**\n * Calls a post on the api to save this model. Takes options as parameters.\n * options will passed down to api.post.\n *\n * @param options\n * @returns {*|HttpPromise}\n */\n save: function save(options) {\n options = options || {};\n options.model = this;\n\n options.data = options.data || this.serialize();\n\n return this.api.post(options);\n },\n\n /**\n * Calls Api.action to perform any action on the model.\n *\n * Takes action name and optional 'options' object as parameters.\n *\n * Ex: $CheckoutSession.actions('create', [options])\n *\n * @param action\n * @param options\n * @returns {*}\n */\n action: function action(_action, options) {\n options = options || {};\n options.model = this;\n\n return this.api.action(_action, options);\n },\n\n /**\n * Use this method to force a api call to get the data.\n *\n * @param options\n * @returns {*}\n */\n reload: function reload(options) {\n this.meta.populated = false;\n return this.retrieve(options);\n },\n\n stringify: function stringify() {\n return JSON.stringify(this, 2);\n },\n\n log: function log() {\n console.log(this.stringify());\n },\n\n serialize: function serialize() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Invalidate the current model. Sets the meta.populated to false and sets meta.invalidated to true.\n */\n invalidate: function invalidate() {\n this.meta.populated = false;\n this.meta.invalidated = true;\n this.onInvalidate();\n },\n\n /**\n * Creates a new Class with properties from `child`. Then assigns `this` as parent to the new Class.\n *\n * @param Cls\n * @param child\n * @returns {*}\n */\n child: function child(Cls, _child) {\n\n if (!_child) {\n return;\n }\n\n return Cls.create(_child.id || this.id, { parent: this }).populate(_child);\n },\n\n /**\n *\n * @param Cls\n * @param children\n * @returns {*}\n */\n children: function children(Cls, _children) {\n var self = this;\n\n if (!_children) {\n return _children;\n }\n\n return _util.$util.map(_children, function (child) {\n return self.child(Cls, child);\n });\n }\n});\n\nvar cache = {};\n\n$Model.reopenClass({\n\n instance: function instance(id) {\n\n var modelCache = cache[this.id] = cache[this.id] || {};\n var instance = modelCache[id || 0] || this.create.apply(this, arguments);\n\n return instance;\n },\n\n retrieveInstance: function retrieveInstance() {\n return this.instance.apply(this, arguments).retrieve();\n },\n\n create: function create(id) {\n\n var modelCache = cache[this.id] = cache[this.id] || {};\n var instance = modelCache[id || 0] = new this({ // eslint-disable-line new-cap\n id: id || 0\n });\n\n instance.setProperties.apply(instance, Array.prototype.slice.call(arguments, 1));\n\n return instance;\n },\n\n fetch: function fetch() {\n console.warn('Model.fetch is deprecated, please use Model.instance');\n return this.instance.apply(this, arguments);\n },\n\n clearCache: function clearCache() {\n cache = {};\n },\n\n /**\n * should invalidate all models where the invalidationKey is found truthy\n *\n * invalidationKey: key of type string to look for in a model\n * example: $Model.bulkInvalidate('invalidateOnLogout');\n */\n bulkInvalidate: function bulkInvalidate(invalidationKey) {\n if (!invalidationKey) {\n return;\n }\n _util.$util.forEach(cache, function (modelCache, key) {\n _util.$util.forEach(modelCache, function (modelInstance, instanceId) {\n if (modelInstance[invalidationKey]) {\n modelInstance.invalidate();\n }\n });\n });\n }\n});\n\nangular.value(\"$Model\", $Model);\n_class.$Class;\n\n_util.$util;\n\n_promise.$promise;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/console-browserify/index.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/promise.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$promise = $promise;\n\nvar _util = __webpack_require__(\"../node_modules/squid/dist/core/util.js\");\n\nvar _error = __webpack_require__(\"../node_modules/squid/dist/core/error.js\");\n\nvar Promise = window.Promise;\n\nfunction $promise(obj) {\n return Promise.resolve(obj);\n}\n\n_util.$util.extend($promise, {\n use: function use(CustomPromise) {\n Promise = CustomPromise;\n if (!window.Promise) {\n window.Promise = CustomPromise;\n }\n },\n resolver: function resolver(method) {\n return new Promise(method);\n },\n resolve: function resolve(value) {\n return Promise.resolve(value);\n },\n reject: function reject(value) {\n return Promise.reject(value);\n },\n\n\n run: function run(method) {\n return Promise.resolve().then(method);\n },\n\n call: function call(method) {\n return Promise.resolve().then(method);\n },\n\n sequential: function sequential(methods) {\n\n var prom = Promise.resolve();\n\n _util.$util.forEach(methods, function (method) {\n prom = prom.then(method);\n });\n\n return prom;\n },\n\n sleep: function sleep(time) {\n return new Promise(function (resolve) {\n setTimeout(resolve, time);\n });\n },\n\n map: function map(items, method) {\n\n var promises = void 0;\n\n if (items instanceof Array) {\n promises = [];\n } else if (items instanceof Object) {\n promises = {};\n } else {\n return Promise.resolve();\n }\n\n return this.all(_util.$util.map(items, function (item, key) {\n\n promises[key] = Promise.resolve(item).then(function (result) {\n return method(result, key, promises);\n });\n\n return promises[key];\n }));\n },\n\n all: function all(items) {\n\n if (items instanceof Array) {\n return Promise.all(items);\n } else if (items instanceof Object) {\n return this.hash(items);\n }\n\n return Promise.resolve([]);\n },\n\n hash: function hash(obj) {\n var results = {};\n\n return Promise.all(_util.$util.map(obj, function (item, key) {\n return Promise.resolve(item).then(function (result) {\n results[key] = result;\n });\n })).then(function () {\n return results;\n });\n },\n\n extend: function extend(obj, hash) {\n return this.hash(hash || {}).then(function (data) {\n _util.$util.extend(obj, data);\n });\n },\n\n attempt: function attempt(attempts, method) {\n\n attempts -= 1;\n\n return Promise.resolve().then(function () {\n return method(attempts);\n })['catch'](function (err) {\n\n if (attempts) {\n return $promise.attempt(attempts, method);\n }\n\n return Promise.reject(err);\n });\n },\n\n debounce: function debounce(method, time) {\n\n var timeout = void 0;\n var resolvers = {};\n\n return function () {\n\n var self = this;\n var args = arguments;\n var key = JSON.stringify(args);\n\n resolvers[key] = resolvers[key] || [];\n\n return new Promise(function (resolve) {\n resolvers[key].push(resolve);\n clearTimeout(timeout);\n\n timeout = setTimeout(function () {\n\n var result = method.apply(self, args);\n\n _util.$util.forEach(resolvers[key], function (resolver) {\n resolver(result);\n });\n\n delete resolvers[key];\n }, time);\n });\n };\n },\n\n every: function every(collection, handler) {\n return this.map(collection, function (item) {\n return handler(item);\n }).then(function (results) {\n return _util.$util.every(results);\n });\n },\n\n providing: function providing(condition, handler) {\n return Promise.resolve(condition).then(function (result) {\n if (result) {\n return handler(result);\n }\n });\n },\n\n until: function until(condition, pollTime, timeout, alwaysResolve) {\n\n return new Promise(function (resolve, reject) {\n if (condition()) {\n return resolve();\n }\n\n var interval = setInterval(function () {\n if (condition()) {\n clearInterval(interval);\n return resolve();\n }\n }, pollTime);\n\n if (timeout) {\n setTimeout(function () {\n clearInterval(interval);\n return alwaysResolve ? resolve() : reject();\n }, timeout);\n }\n });\n },\n\n first: function first(handlers) {\n\n var prom = $promise.resolve();\n var result = void 0;\n\n _util.$util.forEach(handlers, function (handler) {\n prom = prom.then(function () {\n return result || handler();\n }).then(function (handlerResult) {\n result = handlerResult;\n return result;\n });\n });\n\n return prom;\n },\n\n shortCircuit: function shortCircuit() {\n return $promise.reject(new _error.$ShortCircuit());\n }\n});\n\nangular.value(\"$promise\", $promise);\n_util.$util;\n\n_error.$ShortCircuit;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/core/util.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$unresolved = exports.$util = exports.isUnsafeRedirect = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.$getRedirectUrl = $getRedirectUrl;\nexports.$dispatch = $dispatch;\nexports.$experiment = $experiment;\n\nvar _event = __webpack_require__(\"../node_modules/squid/dist/core/event.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nvar _integration = __webpack_require__(\"../node_modules/squid/dist/core/integration.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar redirected = false;\nvar paramCache = {};\n\nvar blacklist = ['password', 'pr_password'];\nvar blacklistRegex = new RegExp('(' + blacklist.join('|') + ')=([^&]*)', 'g');\nvar sanitizeUrlForLogging = function sanitizeUrlForLogging(inputUrl) {\n return inputUrl.replace(blacklistRegex, function (match, key, value) {\n return key + '=**';\n });\n};\n\nvar isUnsafeRedirect = exports.isUnsafeRedirect = function isUnsafeRedirect(url) {\n return url.toLowerCase().replace(/\\s/g, '').indexOf('javascript:') !== -1;\n}; // eslint-disable-line no-script-url\n\nvar $util = exports.$util = {\n\n forEach: function forEach(collection, method) {\n if (collection instanceof Array) {\n for (var i = 0; i < collection.length; i++) {\n method(collection[i], i);\n }\n } else if (collection instanceof Object) {\n for (var key in collection) {\n if (collection.hasOwnProperty(key)) {\n method(collection[key], key);\n }\n }\n }\n },\n\n idleTimeout: function idleTimeout(time) {\n setTimeout(function () {\n _logger.$logger.info('page_idle');\n $util.reload();\n }, time);\n },\n\n\n reload: function reload() {\n _logger.$logger.info('reload');\n _event.$event.emit('loading');\n location.reload();\n },\n\n /**\n * replace:\n * Insert URL params provided and reload the window\n * This does not find the param if it already exists in the URL. It will add it again\n * @param params {Object} param - Params to add as URL params\n */\n replace: function replace(params) {\n if (params) {\n // Note: This won't replace the\n var url = $util.buildURL(location.href.split('#')[0], params);\n\n url = '' + url + window.location.hash;\n\n _logger.$logger.info('replace', { url: url });\n _event.$event.emit('loading');\n location.replace(url);\n } else {\n $util.reload();\n }\n },\n\n /**\n * redirect:\n * Redirects user to the given Url with options for different redirect behaviours\n * @param params {String} url - redirect url\n * @param params {Object} options - Optional param can have flags effecting behaviour of redirect\n */\n redirect: function redirect(url, options) {\n\n // optional flag to allow an iframe to Bust out of iframe mode by setting window.top.location = window.location.href\n var frameBust = options && options.frameBust;\n\n // Optional flag for url to not show up in browsing history. Handles back button scenario from CAPE to HERMES\n var replace = options && options.replace;\n\n if (isUnsafeRedirect(url)) {\n // eslint-disable-line\n _logger.$logger.error('unsafe_redirect_url', {\n url: url\n });\n throw new Error('Unsafe redirect url: ' + url);\n }\n\n _logger.$logger.info('redirect', {\n url: sanitizeUrlForLogging(url)\n });\n\n _event.$event.on('$stateChangeStart', function (event) {\n _logger.$logger.info('state_change_after_redirect');\n event.preventDefault();\n });\n\n function redir() {\n\n if (redirected) {\n return;\n }\n\n _logger.$logger.info('redirect', {\n url: sanitizeUrlForLogging(url)\n });\n\n window.onunload = window.onbeforeunload = function () {}; // eslint-disable-line no-empty-function\n\n if (_integration.$integration.getConfig('REDIRECT_TOP') !== false || frameBust) {\n if (replace) {\n window.top.location.replace(url);\n } else {\n window.top.location = url;\n }\n } else if (replace) {\n window.location.replace(url);\n } else {\n window.location = url;\n }\n\n redirected = true;\n }\n\n _event.$event.emit('loading');\n\n _logger.$logger.flush().then(redir);\n setTimeout(redir, 500);\n\n _logger.$logger.done();\n },\n\n cookiesEnabled: function cookiesEnabled() {\n var cookiesEnabled = void 0;\n\n document.cookie = '_cookiecheck=1';\n cookiesEnabled = Boolean(document.cookie.indexOf('_cookiecheck') > -1);\n document.cookie = '_cookiecheck=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n document.cookie = '_cookiecheck; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n\n return cookiesEnabled;\n },\n\n storageEnabled: function storageEnabled(api) {\n try {\n window[api].setItem('__feature_test__', '0');\n window[api].removeItem('__feature_test__');\n return true;\n } catch (e) {\n return false;\n }\n },\n\n sessionStorageEnabled: function sessionStorageEnabled() {\n return this.storageEnabled('sessionStorage');\n },\n\n localStorageEnabled: function localStorageEnabled() {\n return this.storageEnabled('localStorage');\n },\n\n params: function params(string) {\n\n if (typeof string !== 'string') {\n string = this.queryString().slice(1);\n }\n\n var params = {};\n\n if (!string) {\n return params;\n }\n\n if (paramCache[string]) {\n return $util.extend({}, paramCache[string]);\n }\n\n $util.forEach(string.split('&'), function (pair) {\n pair = pair.split('=');\n\n if (pair[0]) {\n params[decodeURIComponent(pair[0])] = pair[1] && decodeURIComponent(pair[1]);\n }\n });\n\n paramCache[string] = params;\n\n return params;\n },\n\n queryString: function queryString() {\n if (window.location.search) {\n return window.location.search;\n } else {\n var string = window.location.href;\n var idx = string.indexOf('&');\n var rIdx = string.lastIndexOf('#');\n\n if (idx) {\n return '?' + string.substring(idx, rIdx >= 0 ? rIdx : string.length);\n }\n }\n return '';\n },\n\n queryStringSplice: function queryStringSplice(qs, insert, remove) {\n if (qs.indexOf('?') === 0) {\n qs = qs.slice(1);\n }\n\n var params = $util.extend(this.params(qs), insert);\n\n $util.forEach(remove, function (key) {\n delete params[key];\n });\n\n return '?' + this.paramToQueryString(params);\n },\n\n extend: function extend(obj, source) {\n\n if (!source) {\n return obj;\n }\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n },\n\n\n paramToQueryString: function paramToQueryString(params) {\n return this.filter(this.map(Object.keys(params).sort(), function (key) {\n if (!params[key]) {\n return;\n }\n\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n })).join('&');\n },\n\n param: function $param(name) {\n return this.params()[name];\n },\n\n hashParam: function hashParam(name) {\n return this.params(window.location.hash.slice(1))[name];\n },\n\n base64Decode: function base64Decode(encodedString) {\n return encodedString && window.atob(encodedString); // eslint-disable-line block-scoped-var,no-undef\n },\n\n base64Encode: function base64Encode(decodedString) {\n return decodedString && window.btoa(decodedString); // eslint-disable-line block-scoped-var,no-undef\n },\n\n /*\n * decodeAndParse :\n * 1 - Base64Decode\n * 2 - URI Decode\n * 3 - Split string into a nvp object\n * return obj\n */\n decodeAndParse: function decodeAndParse(encodedString) {\n if (encodedString) {\n return this.params(decodeURIComponent(this.base64Decode(encodedString)));\n }\n },\n\n assert: function $assert(value, message, payload) {\n if (!value) {\n throw new Error(message, payload || {});\n }\n },\n\n map: function $map(array, method) {\n\n array = array || [];\n\n var results = void 0;\n\n if (array instanceof Array) {\n results = [];\n\n $util.forEach(array, function () {\n results.push(method.apply(this, arguments));\n });\n\n return results;\n } else if (array instanceof Object) {\n\n results = {};\n\n $util.forEach(array, function (val, key) {\n results[key] = method.apply(this, arguments);\n });\n\n return results;\n } else {\n throw new Error('$util.map expects array or object');\n }\n },\n\n filter: function $filter(array, method) {\n method = method || Boolean;\n var results = [];\n\n $util.forEach(array, function (item) {\n if (method.apply(this, arguments)) {\n results.push(item);\n }\n });\n\n return results;\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#find()\n * If you have an object, use the lodash or underscore .find() method\n *\n * @deprecated\n */\n find: function $find(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.find() is deprecated, use Array#find, which we have polyfilled, or _.find() for Objects instead.');\n }\n\n if (!array) {\n return;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (method(array[i])) {\n return array[i];\n }\n }\n },\n\n findIndex: function $find(array, method) {\n\n if (!array) {\n return;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (method(array[i])) {\n return i;\n }\n }\n },\n\n range: function range(start, end) {\n if (!end) {\n end = start;\n start = 0;\n }\n\n var result = [];\n\n for (var i = start; i < end; i++) {\n result.push(i);\n }\n\n return result;\n },\n\n pad: function $pad(string, n, char) {\n\n n = n || 0;\n char = char || '0';\n\n var padding = Array(n + 1).join(char.toString());\n\n return (padding + string).slice(-n);\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#some() -- NOTE: Unlike Array#some(),\n * the return value of $util.some() isn't always a Boolean. It's return value\n * is whatever the passed callback returns. If you are using $util.some to\n * find an object in an array then you need to use $util.find instead of Array#some().\n * Ex:\n * 1. const preferredCard = $util.some(cardsArray, cards => card.isPreferred && card);\n * preferredCard will be the preferred card object or undefined if there isn't a\n * preferred card.\n * 2. const hasPreferred = cardsArray.some(cards => card.isPreferred && card);\n * Taking the code from #1 and simply swapping out $util.some for Array#some()\n * will result in a different return value, in this case the Boolean true if\n * there is a preferred card, otherwise false. In this case, instead of using\n * Array#some() you should use $util.find() (Array#find() isn't supported in IE9)\n * as seen below:\n * const preferredCard = $util.find(cardsArray, card => card.isPreferred);\n *\n * If you have an object, use the lodash or underscore .some() method\n *\n * @deprecated\n */\n some: function $some(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.some() is deprecated, use Array#some (use $util.find() if you are using\\n $util.some() to return someting other than a boolean) or lodash/underscore.some() instead.');\n }\n\n var result = void 0;\n\n $util.forEach(array, function (item, key) {\n if (!result) {\n result = method(item, key);\n }\n });\n\n return result;\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#every()\n * If you have an object, use the lodash or underscore .every() method\n *\n * @deprecated\n */\n every: function $every(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.every() is deprecated, use Array#every, which we have polyfilled, or _.every() for Objects instead.');\n }\n\n method = method || Boolean;\n\n var result = true;\n\n $util.forEach(array, function (item) {\n if (!method(item)) {\n result = false;\n }\n });\n\n return result;\n },\n\n reduce: function $reduce(array, method, intial) {\n $util.forEach(array, function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n intial = method.apply(undefined, [intial].concat(args));\n });\n\n return intial;\n },\n\n isPopup: function isPopup() {\n return _integration.$integration.isPopup();\n },\n\n isIFrame: function isIFrame() {\n return _integration.$integration.isIFrame();\n },\n\n buildURL: function buildURL(url, params) {\n /*\n * Do NOT add a check for anchor cause this function is also used for building XO success / cancel urls.\n * These urls are defined by the merchants and can also contain urls like \"abc.com#merchantanchor\" and merchants\n * expect (!) the following outcome: abc.com#merchantanchor?paypalparam=2\n */\n this.assert(url, 'buildURL :: expected url');\n\n var paramKeys = Object.keys(params || {});\n\n if (JSON.stringify(params) === '{}') {\n return url;\n }\n\n if (!paramKeys.length) {\n return url;\n }\n\n if (url.indexOf('?') === -1) {\n url += '?';\n } else {\n url += '&';\n }\n\n url += this.paramToQueryString(params);\n\n return url;\n },\n\n paypalURL: function paypalURL(url, params) {\n url = 'https://' + (_config.$meta.stage ? _config.$meta.stage : window.location.host) + url;\n\n return this.buildURL(url, params);\n },\n\n override: function override(obj, methodName, handler) {\n var existing = obj[methodName];\n\n obj[methodName] = function () {\n if (existing) {\n try {\n existing.apply(obj, arguments);\n } catch (err) {\n _logger.$logger.error(methodName + 'event_error', {\n error: err.toString\n });\n }\n }\n\n return handler.apply(obj, arguments);\n };\n },\n\n result: function result(method) {\n return method();\n },\n\n memoize: function memoize(method) {\n\n function memoized() {\n var key = JSON.stringify(arguments, function (_, value) {\n switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n case 'function':\n throw new Error('Cannot memoize functional arguments');\n case 'undefined':\n return 'undefined';\n default:\n return value;\n }\n });\n\n if (!memoized.cache.hasOwnProperty(key)) {\n memoized.cache[key] = method.apply(this, arguments);\n }\n\n return memoized.cache[key];\n }\n\n memoized.cache = {};\n\n memoized.flush = function () {\n memoized.cache = {};\n };\n\n return memoized;\n },\n\n now: function now() {\n return window.enablePerformance ? parseInt(window.performance.now(), 10) : Date.now();\n },\n\n bindObject: function bindObject(obj, self) {\n return $util.map(obj, function (method) {\n return method.bind(self);\n });\n },\n\n hashStr: function hashStr(str) {\n var hash = 0;\n var i = void 0;\n var chr = void 0;\n var len = void 0;\n\n if (str.length === 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr; // eslint-disable-line no-bitwise, no-extra-parens\n // Convert to 32bit integer\n hash |= 0; // eslint-disable-line no-bitwise\n }\n return Math.abs(hash);\n },\n\n hash: function hash() {\n return this.hashStr(Math.random());\n },\n\n popup: function popup(name, url, options, callback) {\n\n callback = $util.once(callback);\n\n var win = window.open(url, name, $util.map(Object.keys(options), function (key) {\n return key + '=' + options[key];\n }).join(', '));\n\n var interval = void 0;\n\n function checkWindowClosed() {\n if (win.closed) {\n clearInterval(interval);\n callback();\n }\n }\n\n interval = setInterval(checkWindowClosed, 50);\n setTimeout(checkWindowClosed);\n\n try {\n var close = win.close;\n\n win.close = function () {\n close.apply(this, arguments);\n checkWindowClosed();\n };\n } catch (err) {\n // pass\n }\n\n return win;\n },\n\n unique: function unique(collection) {\n return collection.filter(function (value, index, self) {\n return self.indexOf(value) === index;\n });\n },\n\n monkeyPatch: function monkeyPatch(mod, prop, method) {\n var original = mod[prop];\n\n mod[prop] = function () {\n var _this = this,\n _arguments = arguments;\n\n return method.call(this, arguments, function (self, args) {\n if (original) {\n return original.apply(self || _this, args || _arguments);\n }\n });\n };\n },\n once: function once(method) {\n var called = false;\n\n return function () {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n },\n camelToDasherize: function camelToDasherize(string) {\n return string.replace(/([A-Z])/g, function (g) {\n return '-' + g.toLowerCase();\n });\n },\n camelToCapsUnderscore: function camelToCapsUnderscore(string) {\n return string.replace(/([a-z][A-Z])/g, function (g) {\n return g[0] + '_' + g[1];\n }).toUpperCase();\n },\n dasherizeToCamel: function dasherizeToCamel(string) {\n return string.replace(/-([a-z])/g, function (g) {\n return g[1].toUpperCase();\n });\n },\n\n\n parentWindow: function parentWindow() {\n if (window.opener) {\n return window.opener;\n } else if (window.parent !== window) {\n return window.parent;\n }\n },\n\n hasRTL: function hasRTL(str) {\n return new RegExp('[\\u0590-\\u07BF]').test(str);\n },\n noop: function noop() {// eslint-disable-line no-empty-function\n\n },\n\n\n /**\n * @function isObject - tests to see if a passed argument is an Object. Returns `false`\n * for anything that is 'object-like' but not an actual Object (Array, Set, Map, ect)\n * as well as for `null` and `Object.create(null)`\n * @param {*} o\n * @returns {boolean}\n */\n isObject: function isObject(o) {\n var oAsString = Object.prototype.toString.call(o);\n\n return o instanceof Object && oAsString === '[object Object]';\n },\n\n\n /**\n * @function debounce\n * @param {function} callback\n * @param {number} time\n * @returns {function}\n */\n debounce: function debounce(callback, time) {\n var timeout = void 0;\n\n return function () {\n var _this2 = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var functionCall = function functionCall() {\n return callback.apply(_this2, args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(functionCall, time);\n };\n },\n\n\n /**\n * @function getProperty\n * @param {object} obj\n * @param {string} propString\n * @param {string} splitOn\n * @returns {*}\n *\n * Ex:\n * const obj = {\n * a: {\n * b: {\n * c: 'property c'\n * },\n * 'key.with.periods': 10\n * }\n * };\n * const c = $util.getProperty(obj, 'a.b.c'); // c === 'property c'\n * const f = $util.getProperty(obj, 'a.b.c.d.e.f'); // f === undefined\n * const fDefault = $util.getProperty(\n * obj,\n * 'a.b.c.d.e.f',\n * { default: 'default value for f' }\n * ); // f === 'default value for f'\n * const n = $util.getProperty(obj, 'a,b,key.with.periods', { splitOn: ',' }); // n === 10\n */\n getProperty: function getProperty(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _options$splitOn = options.splitOn,\n splitOn = _options$splitOn === undefined ? '.' : _options$splitOn,\n defaultValue = options['default'];\n\n\n if (!this.isObject(obj) || typeof path !== 'string' || typeof splitOn !== 'string') {\n return;\n }\n\n var pathArray = path.split(splitOn);\n var prop = obj[pathArray.shift()];\n\n while (prop && pathArray.length && this.isObject(prop)) {\n prop = prop[pathArray.shift()];\n }\n\n return pathArray.length || prop === undefined ? defaultValue : prop;\n }\n};\n\nvar $unresolved = exports.$unresolved = { then: $util.noop, 'catch': $util.noop };\n\nfunction $getRedirectUrl(product, params) {\n var url = '';\n var urlParams = $util.params();\n\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n url = _config.$config.urls.dispatch && _config.$config.urls.dispatch[product] || '';\n }\n\n url += _config.$config.urls.fallbackUrl[product];\n\n $util.extend(urlParams, params || {});\n\n // cmd is a reserved slingshot param\n if (urlParams.cmd) {\n delete urlParams.cmd;\n }\n\n return $util.buildURL(url, urlParams);\n}\n\nfunction $dispatch(product, params, stateChange) {\n $util.assert(product, 'expected product');\n\n _logger.$logger.log('info', 'dispatch', {\n product: product\n });\n\n _event.$event.emit('loading');\n\n var url = '';\n\n url = $getRedirectUrl(product, params);\n\n // fire an event for xo-tracking to listen to and do fpti logging\n if (stateChange) {\n _event.$event.emit('page_loaded', stateChange.fromState, stateChange.toState);\n }\n\n return $util.redirect(url);\n}\n\nfunction $experiment(name, sample, id, loggerPayload) {\n\n var throttle = $util.hashStr(name + '_' + id) % 100;\n\n var group = void 0;\n\n if ($util.param(name) === 'true') {\n group = 'test_forced';\n } else if ($util.param(name) === 'false') {\n group = 'control_forced';\n } else if (throttle < sample) {\n group = 'test';\n } else if (sample >= 50 || sample <= throttle && throttle < sample * 2) {\n // eslint-disable-line no-extra-parens\n group = 'control';\n } else {\n group = 'throttle';\n }\n\n _logger.$logger.info('fpti_pxp_check', {\n from: 'PXP_CHECK',\n to: 'process_pxp_check',\n pxp_exp_id: name,\n pxp_trtmnt_id: group\n });\n\n _logger.$logger.info(name + '_' + group, loggerPayload || {});\n\n if (group === 'test' || group === 'test_forced') {\n return true;\n } else if (group === 'control') {\n return false;\n }\n}\n\nangular.value(\"isUnsafeRedirect\", isUnsafeRedirect);\nangular.value(\"$util\", $util);\nangular.value(\"$unresolved\", $unresolved);\nangular.value(\"$getRedirectUrl\", $getRedirectUrl);\nangular.value(\"$dispatch\", $dispatch);\nangular.value(\"$experiment\", $experiment);\n_event.$event;\n\n_logger.$logger;\n\n_config.$config;\n\n_config.$meta;\n\n_integration.$integration;\n\n_angular.$log;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _ng = __webpack_require__(\"../node_modules/squid/dist/ng/index.js\");\n\nObject.keys(_ng).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ng[key];\n }\n });\n});\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nObject.keys(_core).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _core[key];\n }\n });\n});\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/index.js\");\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _paypal = __webpack_require__(\"../node_modules/squid/dist/paypal/index.js\");\n\nObject.keys(_paypal).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _paypal[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/currency.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.getCurrencySymbol = exports.truncateCurrencyConversionString = undefined;\nexports.roundingAndSeparators = roundingAndSeparators;\nexports.formatCurrency = formatCurrency;\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/locale.js\");\n\nvar ALL_NON_BREAKING_SPACE = new RegExp('\\xa0+', 'g'); // everything to do with currency formatting\n\n// quick Griffin reference on currency format:\n// ¤ : Currency Symbol = $\n// # : Amount = 186432.431\n// C : Currency Code = USD\n\nvar CODE_IN_FRONT = new RegExp('^([^¤#]*)(C[\\\\s]*)(.*)$'); // matching groups: (any negative symbol)(code)(the rest)\nvar ENDS_IN_WHITESPACE = new RegExp('\\s$');\nvar THOUSANDS_SPLITTER = /\\B(?=(\\d{3})+(?!\\d))/g; // eslint-disable-line fasec/no-unsafe-regex\nvar HUNDREDS_SPLITTER = /(\\d)(?=(\\d\\d)+\\d$)/g; // eslint-disable-line fasec/no-unsafe-regex\n\n// This seems to be the only currency / locale specific exception in Griffin\nvar STYLE_EXCEPTION = {\n 'tr TR TRY': '# ¤;-# ¤'\n};\n\nvar AmountOnlyStyle = '#;-#'; // A currency style for number only. $9USD -> 9.00\n\n// Griffin exceptions for separators at hundreds- xx,xx,xxx format\nvar HUNDREDS_SEPARATOR_EXCEPTION = ['IN', 'BT', 'MV', 'NP'];\n\nvar isObject = function isObject(param) {\n return Object.prototype.toString.call(param) === '[object Object]';\n};\n\n// Griffin \"fuzzy logic\"\n// apparently if the symbol is at least \"66% similar\" to the code, ignore it\nfunction maybeIgnoreSymbol(style, symbol, code) {\n\n // THIS IS NOT COMMUTATIVE\n function fuzzyMatch(code, symbol) {\n // eslint-disable-line no-shadow\n if (code === symbol) {\n return 100;\n } else {\n var codeParts = code.split('');\n var symbolParts = symbol.split('');\n var equivalency = codeParts.reduce(function (equiv, codePart) {\n var symbolPos = symbolParts.indexOf(codePart);\n\n if (symbolPos !== -1) {\n symbolParts.splice(symbolPos, 1);\n return equiv + 1;\n }\n return equiv;\n }, 0);\n var weight = equivalency / codeParts.length;\n\n return weight * 100;\n }\n }\n\n var ignoreSymbol = symbol.length > 1 && fuzzyMatch(code, symbol) >= 66;\n\n return ignoreSymbol ? style.replace(/¤\\s*/g, '') : style;\n}\n\n// deal with rounding due to truncation (Griffin rounds up) as well as dot/comma symbols\n// and thousand separators\nfunction roundingAndSeparators(amountString, _ref, _ref2) {\n var lang = _ref.lang,\n country = _ref.country;\n var decimalPlaces = _ref2.decimalPlaces,\n dot = _ref2.dot,\n comma = _ref2.comma;\n\n var value = parseFloat(amountString);\n var truncate = decimalPlaces === 0;\n var amountParts = truncate && !isNaN(value) ? Math.round(value).toString().split('.') : amountString.split('.');\n var exception = HUNDREDS_SEPARATOR_EXCEPTION.indexOf(country) > -1; // special exceptions\n var wholeString = exception ? amountParts[0].replace(HUNDREDS_SPLITTER, '$1,') : amountParts[0].replace(THOUSANDS_SPLITTER, comma);\n var decimalString = amountParts[1] || '00';\n\n return truncate ? wholeString : '' + wholeString + dot + decimalString;\n}\n\n// this is an agreement with UED for visual consistency - the currency code, if displayed, is always on the right\nfunction forceCodeToRight(style) {\n var parts = CODE_IN_FRONT.exec(style) || [];\n var endsWithWhitespace = ENDS_IN_WHITESPACE.test(style);\n var newStyle = style;\n\n // if CODE_IN_FRONT regex matches, array indexes -\n // [1] negative symbol plus whitespace, if any,\n // [2] the \"C\" plus any whitespace,\n // [3] whatever is after \"C\"\n if (parts.length === 4) {\n newStyle = parts[1] + parts[3] + (endsWithWhitespace ? 'C' : ' C');\n }\n\n return newStyle;\n}\n\n// deal with\n// 1. exceptions for specific locales\n// 2. positive and negative styles\n// 3. griffin fuzzy logic\n// 4. UED consistency logic\nfunction getFinalStyle() {\n var styleString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ';';\n var _ref3 = arguments[1];\n var lang = _ref3.lang,\n country = _ref3.country;\n var _ref4 = arguments[2];\n var value = _ref4.value,\n _ref4$symbol = _ref4.symbol,\n symbol = _ref4$symbol === undefined ? '' : _ref4$symbol,\n code = _ref4.code;\n\n var exception = STYLE_EXCEPTION[[lang, country, code].join(' ')]; // special exceptions\n var currencyStyle = exception || styleString;\n\n var _currencyStyle$split = currencyStyle.split(';'),\n positiveStyle = _currencyStyle$split[0],\n negativeStyle = _currencyStyle$split[1]; // the style is separated by postive and negative notation via a ;\n\n\n var baseStyle = value < 0 ? negativeStyle || '-¤# C' : positiveStyle || '¤# C';\n var griffinStyle = exception ? baseStyle : maybeIgnoreSymbol(baseStyle, symbol, code); // don't apply fuzzy logic on exceptions\n\n return forceCodeToRight(griffinStyle);\n}\n\n// take the style and the formatted amount (rounded / truncated / thousands separator / decimal separator)\n// and produce the final result.\n//\n// wrapCodeInSpan - wraps the currency code in a span.currencyCode for styling purposes\nfunction applyCurrencyStyle(finalStyle, amountFormatted, _ref5) {\n var symbol = _ref5.symbol,\n code = _ref5.code,\n _ref5$wrapCodeInSpan = _ref5.wrapCodeInSpan,\n wrapCodeInSpan = _ref5$wrapCodeInSpan === undefined ? false : _ref5$wrapCodeInSpan;\n\n // the style will take care of negative symbol (see getFinalStyle function above)\n var absoluteAmountFormatted = amountFormatted.replace('-', '');\n\n // parallel operation is safer than serial replace\n return finalStyle.split('').map(function (char) {\n switch (char) {\n case 'C':\n return wrapCodeInSpan ? '' + code + '' : code;\n case '¤':\n return symbol;\n case '#':\n return absoluteAmountFormatted;\n default:\n return char;\n }\n }).join('').replace(ALL_NON_BREAKING_SPACE, ' ');\n}\n\n/**\n * @function formatCurrency\n * @param {string|number} amount Amount can be a string or a number\n * @param {string} code\n * @param {boolean} wrapCodeInSpan\n * @param {string} [style=SymbolISOCurrency]\n * @returns {string} formatted currency string\n */\nfunction formatCurrency(amount, code, wrapCodeInSpan) {\n var style = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'SymbolISOCurrency';\n\n if (isObject(amount) || typeof amount === 'undefined' || amount === null) {\n return;\n }\n\n var _ref6 = _locale.$locale.metadata || {},\n _ref6$number = _ref6.number,\n numberConfig = _ref6$number === undefined ? {} : _ref6$number,\n _ref6$currency = _ref6.currency,\n currencyConfig = _ref6$currency === undefined ? {} : _ref6$currency;\n\n var _currencyConfig$digit = currencyConfig.digits,\n digits = _currencyConfig$digit === undefined ? {} : _currencyConfig$digit,\n _currencyConfig$style = currencyConfig.styles,\n styles = _currencyConfig$style === undefined ? {} : _currencyConfig$style,\n _currencyConfig$suppo = currencyConfig.supportedSymbols,\n currencySymbols = _currencyConfig$suppo === undefined ? {} : _currencyConfig$suppo;\n\n var value = parseFloat(amount);\n\n styles.AmountOnlyStyle = AmountOnlyStyle;\n var dot = numberConfig.DECIMAL_SEP === undefined ? '.' : numberConfig.DECIMAL_SEP;\n var comma = numberConfig.GROUP_SEP === undefined ? ',' : numberConfig.GROUP_SEP;\n\n var amountFormatted = roundingAndSeparators(amount.toString(), _locale.$locale, { decimalPlaces: digits[code], dot: dot, comma: comma });\n\n if (code) {\n var symbol = currencySymbols[code];\n var finalStyle = getFinalStyle(styles[style], _locale.$locale, { value: value, symbol: symbol, code: code });\n\n return applyCurrencyStyle(finalStyle, amountFormatted, { symbol: symbol, code: code, wrapCodeInSpan: wrapCodeInSpan });\n }\n\n return amountFormatted; // HTML?\n}\n\n/**\n * @function truncateCurrencyConversionString\n * @description Takes a fullString, amount, and amountForex and truncates\n * the number in the full string to number of digits in amountForex.\n * This function is used to format the PayPal currency conversion\n * rate that is displayed to the user (e.g. '1 CAD = $0.7459 USD')\n * e.g. inputs of:\n * fullString = '$0.745994235 USD'\n * amount = '0.745994235'\n * amountForex = '0.7459'\n * results in an output of '$0.7459 USD'\n * @param {object} Contains keys 'fullString', 'amount', and 'amountForex'\n * @returns {string}\n */\nvar truncateCurrencyConversionString = exports.truncateCurrencyConversionString = function truncateCurrencyConversionString() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n fullString = _ref7.fullString,\n amount = _ref7.amount,\n amountForex = _ref7.amountForex;\n\n var allArgsAreStrings = [fullString, amount, amountForex].every(function (s) {\n return typeof s === 'string';\n });\n\n if (!allArgsAreStrings) {\n return fullString || '';\n }\n\n // Some countries, e.g. France, use commas instead of decimals\n var target = amountForex.includes(',') ? amount.replace('.', ',') : amount;\n\n return fullString.replace(target, amountForex);\n};\n\n/**\n * @description takes a currency code and\n * returns either a code or a symbol based\n * on our currency mapping.\n * eg: USD -> $ , RUB -> RUB\n *\n * @param {*} code\n * @returns {string}\n */\nvar getCurrencySymbol = exports.getCurrencySymbol = function getCurrencySymbol(code) {\n var _ref8 = _locale.$locale.metadata || {},\n _ref8$currency = _ref8.currency,\n currency = _ref8$currency === undefined ? {\n supportedSymbols: {}\n } : _ref8$currency;\n\n return currency.supportedSymbols[code];\n};\n\n_locale.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/feature.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$feature = $feature;\nexports.$featureCountries = $featureCountries;\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/locale.js\");\n\nfunction $feature(prop, def, country) {\n\n var features = _core.$config.features || {};\n\n country = country || _locale.$locale.country;\n // 1. Check the feature is present in country\n var result = _core.$Class.get(features[country], prop);\n\n if (result !== undefined) {\n return result;\n }\n // 2. Check the feature is present in feature group\n\n Object.keys(_core.$config.regions).some(function (region) {\n if (_core.$config.regions[region].indexOf(country) !== -1) {\n result = _core.$Class.get(features[region], prop);\n return result !== undefined;\n }\n\n return false;\n });\n\n if (result !== undefined) {\n return result;\n }\n // 3. Check the feature is present in default group\n result = _core.$Class.get(features.DEFAULT, prop);\n\n if (result !== undefined) {\n return result;\n }\n return def;\n}\n\n// Build a list of all countries in our feature list and regions\n// populate countries with out REGION names in the list\nvar allCountries = _core.$Class.keys(_core.$config.features || {}).filter(function (country) {\n return country !== 'DEFAULT' && !(_core.$config.regions && _core.$config.regions.hasOwnProperty(country));\n});\n\n// populate all the region countries in to allcountries\n_core.$util.forEach(_core.$config.regions, function (countries, region) {\n _core.$util.forEach(countries, function (country) {\n if (allCountries.indexOf(country) === -1) {\n allCountries.push(country);\n }\n });\n});\n\nfunction $featureCountries(prop) {\n // Find the countries with a certain feature enabled\n return allCountries.filter(function (country) {\n return $feature(prop, false, country);\n });\n}\n\nangular.value(\"$feature\", $feature);\nangular.value(\"$featureCountries\", $featureCountries);\n_core.$config;\n\n_core.$Class;\n\n_core.$util;\n\n_locale.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/locale.js\");\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _currency = __webpack_require__(\"../node_modules/squid/dist/locale/currency.js\");\n\nObject.keys(_currency).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _currency[key];\n }\n });\n});\n\nvar _feature = __webpack_require__(\"../node_modules/squid/dist/locale/feature.js\");\n\nObject.keys(_feature).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _feature[key];\n }\n });\n});\n\nvar _name = __webpack_require__(\"../node_modules/squid/dist/locale/name.js\");\n\nObject.keys(_name).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _name[key];\n }\n });\n});\n\nvar _quantity = __webpack_require__(\"../node_modules/squid/dist/locale/quantity.js\");\n\nObject.keys(_quantity).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _quantity[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/locale.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$localeHelper = exports.$locale = exports.$LocaleModel = exports.$MetadataModel = exports.$ContentModel = undefined;\nexports.sanitize = sanitize;\nexports.Content = Content;\nexports.$contentVersion = $contentVersion;\nexports.$renderContent = $renderContent;\nexports.$flushContent = $flushContent;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _paypal = __webpack_require__(\"../node_modules/squid/dist/paypal/index.js\");\n\nfunction sanitize(html) {\n return html && html.toString().replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n} /* eslint-disable no-use-before-define */\n\n\nvar JSONStringify = JSON.stringify;\n\nJSON.stringify = function (item) {\n if (item instanceof Content) {\n return item.toString();\n }\n return JSONStringify.apply(this, arguments);\n};\n\nfunction Content(key, props) {\n this.key = key;\n this.props = props;\n}\n\nContent.cache = {};\n\nContent.get = function (key, props) {\n\n if (!key) {\n return '';\n }\n\n props = props || {};\n\n var cacheKey = $locale.country + '_' + $locale.lang + '_' + key + '_' + JSONStringify.call(JSON, props);\n var cacheVal = Content.cache[cacheKey];\n\n if (cacheVal !== undefined) {\n return cacheVal;\n }\n\n cacheVal = Content.cache[cacheKey] = new Content(key, props);\n\n return cacheVal;\n};\n\nContent.prototype.toString = Content.prototype.valueOf = function () {\n if (this.string) {\n return this.string;\n }\n\n this.string = this.render(false);\n\n return this.string;\n};\n\nContent.prototype.toSafeString = function () {\n if (this.safeString) {\n return this.safeString;\n }\n\n this.safeString = this.render(true);\n\n return this.safeString;\n};\n\nContent.prototype.render = function (safe) {\n var _this = this;\n\n if (!this.key) {\n return '';\n }\n\n var value = contentCache[$locale.country] && contentCache[$locale.country][$locale.lang];\n var keys = this.key.split('.');\n\n for (var i = 0; i < keys.length; i++) {\n if (value) {\n value = value[keys[i]];\n } else {\n break;\n }\n }\n\n if (!value) {\n return '';\n }\n\n return value.replace(/\\{\\w+\\}/g, function (prop) {\n prop = prop.slice(1, prop.length - 1);\n\n if (prop === 'country') {\n return $locale.country;\n }\n\n if (prop === 'lang') {\n return $locale.lang;\n }\n\n if (!_this.props[prop]) {\n if (!_core.$loader.isLoading()) {\n _logger.$logger.warn('missing_content_prop', {\n key: _this.key,\n prop: prop\n }, { unique: true });\n }\n\n return '';\n }\n\n var propStr = _this.props[prop].toString();\n\n if (safe) {\n return sanitize(propStr);\n }\n\n return propStr;\n });\n};\n\nvar contentCache = {};\nvar currentVersion = void 0;\n\nwindow.addContent = function (country, lang, content, version) {\n var countryCache = contentCache[country] = contentCache[country] || {};\n\n countryCache[lang] = content;\n currentVersion = version;\n};\n\nvar metadataCache = {};\n\nwindow.addMetadata = function (country, lang, metadata) {\n var metadataVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';\n\n var countryCache = metadataCache[country] = metadataCache[country] || {};\n\n countryCache[lang] = countryCache[lang] || {};\n countryCache[lang][metadataVersion] = metadata;\n};\n\nfunction $contentVersion() {\n return currentVersion || '';\n}\n\nvar PP_SPECIAL_COUNTRIES_ISO_CODES = {\n C2: 'CN'\n};\n\nvar $ContentModel = exports.$ContentModel = _core.$Model.extend('$ContentModel', {\n api: new _core.$Api({\n\n baseURI: _core.$meta.staticUrl,\n uri: '/locales/:countryCode/:lang',\n ext: 'js',\n\n retrieve: function retrieve(options) {\n var self = this;\n var model = options.model;\n\n var uri = self.getURI(model);\n\n return _core.$promise.resolve().then(function () {\n\n if (contentCache[model.countryCode] && contentCache[model.countryCode][model.lang]) {\n _logger.$logger.info('cached_content');\n return contentCache[model.countryCode][model.lang];\n }\n\n _logger.$logger.info('retrieve_content', {\n uri: uri\n });\n\n _core.$event.emit('loading');\n\n return _core.$promise.attempt(3, function () {\n return _core.$dom.loadScript('content', uri, 10000).then(function () {\n if (contentCache[model.countryCode] && contentCache[model.countryCode][model.lang]) {\n _logger.$logger.info('content_retrieved');\n return contentCache[model.countryCode][model.lang];\n }\n\n throw new Error('content_not_available');\n });\n })['catch'](function (err) {\n throw err;\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n }).then(function (content) {\n model.setProperties(content);\n return content;\n });\n }\n }),\n\n change: function change(country, lang) {\n\n if (country === this.countryCode && lang === this.lang) {\n return _core.$promise.resolve(this);\n }\n\n this.countryCode = country;\n this.lang = lang;\n\n return this.reload().then(function () {\n _core.$event.broadcast('contentChange');\n });\n }\n});\n\nvar $MetadataModel = exports.$MetadataModel = _core.$Model.extend('$MetadataModel', {\n\n api: new _core.$Api({\n\n baseURI: _core.$meta.staticUrl,\n uri: '/metadata/:country/:lang/:version?/metadata',\n ext: 'js',\n\n retrieve: function retrieve(options) {\n var self = this;\n var model = options.model;\n\n var uri = self.getURI(model);\n\n return _core.$promise.resolve().then(function () {\n\n var metadataVersion = model.version || 'default';\n\n if (metadataCache[model.country] && metadataCache[model.country][model.lang] && metadataCache[model.country][model.lang][metadataVersion]) {\n _logger.$logger.info('cached_metadata');\n return metadataCache[model.country][model.lang][metadataVersion];\n }\n\n _logger.$logger.info('retrieve_metadata', {\n uri: uri\n });\n\n _core.$event.emit('loading');\n\n return _core.$promise.attempt(3, function () {\n return _core.$dom.loadScript('metadata', uri, 10000).then(function () {\n if (metadataCache[model.country] && metadataCache[model.country][model.lang] && metadataCache[model.country][model.lang][metadataVersion]) {\n _logger.$logger.info('metadata_retrieved', {\n uri: uri\n });\n return metadataCache[model.country][model.lang][metadataVersion];\n }\n\n // Retry if not found in cache\n _logger.$logger.info('metadata_not_available', {\n uri: uri\n });\n return _core.$promise.reject(new Error('metadata_not_available'));\n });\n })['catch'](function (err) {\n throw err;\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n }).then(function (metadata) {\n model.setProperties(metadata);\n return metadata;\n });\n }\n }),\n\n setVersion: function setVersion(country, lang) {\n var _this2 = this;\n\n var versionPxpName = _core.$config.features[country] && _core.$config.features[country].metadataVersionName;\n\n if (versionPxpName && _core.$config.metadataPxpExperiments[versionPxpName]) {\n var pxp = (0, _paypal.$pxp)(_core.$config.metadataPxpExperiments[versionPxpName].experimentName, {\n 'ctx.COUNTRY': country,\n 'ctx.LANGUAGE': lang\n }, _core.$config.metadataPxpExperiments[versionPxpName].experimentTreatmentName);\n\n return pxp.then(function (treatment) {\n if (treatment) {\n _this2.version = versionPxpName;\n _logger.$logger.info('metadata_version_set', {\n country: country,\n lang: lang,\n version: versionPxpName\n });\n } else {\n delete _this2.version;\n }\n })['catch'](function () {\n delete _this2.version;\n })['finally'](function () {\n return _core.$promise.resolve();\n });\n } else {\n delete this.version;\n return _core.$promise.resolve();\n }\n },\n\n change: function change(country, lang) {\n var _this3 = this;\n\n this.country = country;\n this.lang = lang;\n\n return this.setVersion(country, lang).then(function () {\n return _this3.reload().then(function () {\n if (!_this3.noBroadcast) {\n _core.$event.broadcast('metadataChange');\n }\n });\n });\n },\n\n choose: function choose(country, lang, override) {\n\n if (country && (!this.chosenCountry || override !== false)) {\n this.chosenCountry = country;\n }\n\n if (lang && (!this.chosenLang || override !== false)) {\n this.chosenLang = lang;\n }\n\n country = this.chosenCountry || this.country;\n lang = this.chosenLang;\n\n if (_core.$config.supportedCountries) {\n if (!_core.$config.supportedCountries[country]) {\n country = this.country;\n }\n\n if (_core.$config.supportedCountries[country].indexOf(lang) === -1) {\n lang = _core.$config.supportedCountries[country][0];\n }\n }\n\n if (!lang) {\n lang = this.lang;\n }\n\n return this.change(country, lang);\n },\n\n normalizeAddressFields: function normalizeAddressFields(content) {\n\n var CONTENT_MAPPING = {\n line1Label: 'streetAddress',\n line2Label: 'streetAddress2',\n cityLabel: 'city',\n stateLabel: 'state',\n postcodeLabel: 'postalCode'\n };\n\n // Loop over all layout props, if they don't exist in Griffin, get them from xo-content\n for (var prop in CONTENT_MAPPING) {\n if (this.addressEntry && this.addressEntry.strings[prop]) {\n this.addressEntry.strings[prop] = this.addressEntry.strings[prop] || content.get('common.' + CONTENT_MAPPING[prop]);\n }\n }\n }\n});\n\nfunction mapLanguage(lang) {\n var unselectableLanguages = _core.$config.unselectableLanguages || [];\n\n if (unselectableLanguages.indexOf(lang) !== -1) {\n if (!(_core.$meta.corp && _core.$config.betaLanguages && _core.$config.betaLanguages.indexOf(lang) !== -1)) {\n return 'en';\n }\n }\n\n var unsupportedLanguages = _core.$config.unsupportedLanguages || [];\n\n if (unsupportedLanguages.indexOf(lang) !== -1) {\n if (!(_core.$meta.corp && _core.$config.betaLanguages && _core.$config.betaLanguages.indexOf(lang) !== -1)) {\n var s = lang + '_locale_not_supported';\n\n throw new Error(s);\n }\n }\n\n return lang;\n}\n\nvar $LocaleModel = exports.$LocaleModel = _core.$Model.extend('LocaleModel', {\n api: new _core.$Api({\n uri: '/api/locale'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.content = $ContentModel.instance();\n this.metadata = $MetadataModel.instance();\n },\n\n retrieve: function retrieve() {\n var self = this;\n\n return this._super.retrieve.apply(this, arguments).then(function (result) {\n self.lang = mapLanguage(self.lang);\n return _core.$promise.all([self.content.change(self.country, self.lang), self.metadata.change(self.country, self.lang)]).then(function () {\n\n // TODO: This at build time... or make sure griffin metadata is complete\n self.metadata.normalizeAddressFields(self.content);\n\n return result;\n });\n });\n },\n\n change: function change(country, lang) {\n\n var self = this;\n\n lang = mapLanguage(lang);\n\n if (country === this.country && lang === this.lang) {\n return _core.$promise.resolve(this);\n }\n\n _logger.$logger.info('locale_change', {\n country: country,\n lang: lang\n });\n\n this.country = country;\n this.lang = lang;\n\n return _core.$promise.all([this.content.change(country, lang), this.metadata.change(country, lang)]).then(function (loadedData) {\n\n // TODO: This at build time... or make sure griffin metadata is complete\n self.metadata.normalizeAddressFields(self.content);\n\n _core.$event.broadcast('localeChange'); // broadcast only when data has all been loaded\n return loadedData;\n });\n },\n\n choose: function choose(country, lang, override) {\n\n if (country && (!this.chosenCountry || override !== false)) {\n this.chosenCountry = country;\n }\n\n if (lang && (!this.chosenLang || override !== false)) {\n this.chosenLang = lang;\n }\n\n country = this.chosenCountry || this.country;\n lang = this.chosenLang;\n\n if (!_core.$config.supportedCountries[country]) {\n country = this.country;\n }\n\n if (_core.$config.supportedCountries[country].indexOf(lang) === -1) {\n lang = _core.$config.supportedCountries[country][0];\n }\n\n if (!lang) {\n lang = this.lang;\n }\n\n return this.change(country, lang);\n },\n\n chooseCountry: function chooseCountry(country) {\n return this.choose(country, null);\n },\n\n chooseLang: function chooseLang(lang) {\n return this.choose(null, lang);\n },\n\n getLocaleCode: function getLocaleCode() {\n return this.lang + '_' + this.country;\n },\n\n getCountryCodeISO: function getCountryCodeISO() {\n return PP_SPECIAL_COUNTRIES_ISO_CODES[this.country] || this.country;\n }\n});\n\nvar $locale = exports.$locale = $LocaleModel.instance();\n\nfunction $renderContent(key, props) {\n return Content.get(key, props);\n}\n\nfunction $flushContent() {\n contentCache = {};\n Content.cache = {};\n $locale.content = $ContentModel.create();\n $locale.metadata = $MetadataModel.create();\n metadataCache = {};\n}\n\nvar $localeHelper = exports.$localeHelper = {\n /**\n *\n * @param locale - Ex: en_US\n * @returns {{country: *, dialect}}\n */\n normalizeLocale: function normalizeLocale(locale) {\n if (!locale) {\n return {};\n }\n\n locale = locale.replace('-', '_');\n\n var country = void 0;\n var language = void 0;\n\n if (locale.match(/^\\w{2}_\\w{2}$/)) {\n locale = locale.split('_');\n\n language = locale[0];\n country = locale[1];\n } else {\n language = locale;\n }\n\n return {\n country: country,\n language: language\n };\n }\n};\n\nangular.value(\"sanitize\", sanitize);\nangular.value(\"Content\", Content);\nangular.value(\"$contentVersion\", $contentVersion);\nangular.value(\"$ContentModel\", $ContentModel);\nangular.value(\"$MetadataModel\", $MetadataModel);\nangular.value(\"$LocaleModel\", $LocaleModel);\nangular.value(\"$locale\", $locale);\nangular.value(\"$renderContent\", $renderContent);\nangular.value(\"$flushContent\", $flushContent);\nangular.value(\"$localeHelper\", $localeHelper);\n_logger.$logger;\n\n_core.$event;\n\n_core.$Model;\n\n_core.$Api;\n\n_core.$meta;\n\n_core.$promise;\n\n_core.$config;\n\n_core.$loader;\n\n_core.$dom;\n\n_paypal.$pxp;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/name.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.formatNameInformal = formatNameInformal;\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/locale.js\");\n\n// Mapping of Griffin fields to name fields that should be used\nvar SUBSTITUTED_FIELDS = {\n givenName: 'first_name',\n surname: 'last_name'\n};\n\n// Taken from griffin-paypal: test if a string is Latin\nfunction isLatin(str) {\n if (!str) {\n return true;\n }\n\n for (var i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 0x24F) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Formats name into informal format based on Griffin metadata\n * @param {Object} name The name to be formatted, containing first_name and last_name properties\n * @return {String} The formatted string, or null if data is missing\n */\nfunction formatNameInformal(name) {\n var layoutMetadata = _locale.$locale.metadata.nameInformal;\n var layout = null;\n\n if (!layoutMetadata) {\n return name.first_name || null; // Default to first name if metadata not loaded\n }\n\n // According to Griffin, if the name is all Latin and there is a Latin formatting variant, use that one\n if (layoutMetadata['latinLayout'] && isLatin(name.first_name) && isLatin(name.last_name)) {\n layout = layoutMetadata['latinLayout'];\n } else {\n layout = layoutMetadata['layout'];\n }\n\n // Map griffin layout parts to the name passed in. If it requires a value not passed in name, returns null early\n var formattedName = [];\n\n for (var i = 0; i < layout.length; i++) {\n var namePart = layout[i];\n\n if (name[SUBSTITUTED_FIELDS[namePart['$']]]) {\n formattedName.push(name[SUBSTITUTED_FIELDS[namePart['$']]]);\n } else if (namePart['$'] === 'separator') {\n formattedName.push(namePart._);\n }\n }\n\n return formattedName.join('');\n}\n\n_locale.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/locale/quantity.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.formatQuantity = formatQuantity;\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/locale.js\");\n\nvar _currency = __webpack_require__(\"../node_modules/squid/dist/locale/currency.js\");\n\n// format a quantity to add a thousand separator based on a locality\nfunction formatQuantity(quantity) {\n var _ref = _locale.$locale.metadata || {},\n _ref$number = _ref.number,\n numberConfig = _ref$number === undefined ? {} : _ref$number;\n\n var dot = '';\n var comma = numberConfig.GROUP_SEP === undefined ? ',' : numberConfig.GROUP_SEP;\n\n return (0, _currency.roundingAndSeparators)(quantity.toString(), _locale.$locale, { decimalPlaces: 0, dot: dot, comma: comma });\n}\n\n_locale.$locale;\n\n_currency.roundingAndSeparators;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/component.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(console) {\n\nexports.__esModule = true;\nexports.$Component = undefined;\nexports.$populate = $populate;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _ng = __webpack_require__(\"../node_modules/squid/dist/ng/ng.js\");\n\nvar _directive = __webpack_require__(\"../node_modules/squid/dist/ng/directive.js\");\n\n(0, _directive.$registerDirective)('prevent-default', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $element.on('click', function (event) {\n event.preventDefault();\n });\n }\n };\n});\n\n(0, _directive.$registerDirective)('stop-propagation', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $element.on('click keydown keypress keyup', function (event) {\n event.stopPropagation();\n });\n }\n };\n});\n\n(0, _directive.$registerDirective)('validate-submit', function () {\n\n return {\n link: function link($scope, $element, $attrs) {\n\n var $form = $element.closest('form');\n var form = $scope[$form.prop('name')];\n var formID_element = $attrs.form; // take the form attribute from submit button\n var formID_linked = $element[0] // take the id from the linked form element\n && $element[0].form && $element[0].form.id;\n var isLinkedForm = formID_element && formID_element === formID_linked; // Checking for confirmation. May not be required. Presence should be good enough.\n\n if (isLinkedForm) {\n $form = angular.element(document.getElementById(formID_linked));\n var scope = $form.scope(); // Linked forms should mantain form scope\n\n form = scope[$form.prop('name')];\n }\n\n $element.on('click', function (event) {\n event.preventDefault();\n\n $form.addClass('validated');\n $scope.validated = true;\n form.$setSubmitted();\n\n if (form.$valid) {\n try {\n $scope.$eval($attrs.validateSubmit);\n } catch (err) {\n _angular.$injector.get('$exceptionHandler')(err);\n }\n } else {\n $form.find('.ng-invalid:first').focus();\n }\n });\n }\n };\n});\n\nfunction assertModelsRetrievedOrEmpty(items) {\n if (_core.$config.deploy.isLocal() || _core.$config.deploy.isStage()) {\n angular.forEach(items, function (item, name) {\n if (item instanceof _core.$Model) {\n if (item.meta.populated) {\n throw new Error(name + ' is already populated. Please call .retrieve() to ensure your code is not relying on cache being present.');\n }\n }\n });\n }\n}\n\nfunction setUpComponentRoute($scope, $Component, angular) {\n var componentRoute = $scope.componentRoute;\n\n componentRoute.scope = $scope;\n\n componentRoute.scope.goto = function (route) {\n componentRoute.goto(route);\n };\n\n var parentRoute = componentRoute.parent;\n\n if (parentRoute) {\n var parentScope = parentRoute.scope;\n var parentDirective = parentRoute.getDirective();\n var childSpec = componentRoute.childSpec;\n\n if (childSpec.config) {\n if (parentDirective instanceof $Component) {\n parentScope.viewConfig = childSpec.config.call(parentScope);\n } else {\n throw new Error('In order to use config() for child routes,\\n ' + parentRoute.getDirectiveTag() + ' must be instance of new\\n style $Component');\n }\n }\n\n if (childSpec.props) {\n if (parentDirective instanceof $Component) {\n angular.extend($scope, childSpec.props.call(parentScope));\n } else {\n throw new Error('In order to use props() for child routes,\\n ' + parentRoute.getDirectiveTag() + ' must be instance of new\\n style $Component');\n }\n }\n }\n}\n\nvar $Component = exports.$Component = _core.$Class.extend('$Component', {\n\n onPopulate: angular.noop,\n\n init: function init() {\n var _this = this,\n _arguments = arguments;\n\n this.validate();\n\n this.name = _core.$util.dasherizeToCamel(this.tag);\n\n var wrapperType = this.wrapperType === 'span' ? 'span' : 'div';\n\n this.template = '<' + wrapperType + ' class=\"' + this.tag + '-wrapper\" ng-if=\"populated && display\">' + this.template + '';\n\n this.scope = this.scope || {};\n this.resolve = this.resolve || {};\n this.props = this.props || {};\n this.rootEvents = this.rootEvents || {};\n\n this.actions = this.actions || {};\n\n this.lifecycle = this.lifecycle || {};\n this.lifecycle.enter = this.lifecycle.enter || angular.noop;\n this.lifecycle.reenter = this.lifecycle.reenter || angular.noop;\n this.lifecycle.exit = this.lifecycle.exit || angular.noop;\n this.lifecycle.populate = this.lifecycle.populate || angular.noop;\n\n if (this.scope && Object.keys(this.scope).length) {\n\n if (this.props && Object.keys(this.props).length) {\n throw new Error('Can not defined scope and props on the same component');\n }\n\n this.scope.componentRoute = '=';\n this.scope['export'] = '@';\n\n this.props = _core.$util.map(this.scope, function (type, key) {\n return {\n type: {\n '=': 'var',\n '@': 'str'\n }[type],\n required: false\n };\n });\n } else {\n\n this.props.componentRoute = {\n type: 'var',\n required: false\n };\n\n this.props['export'] = {\n type: 'str',\n required: false\n };\n\n var isRequired = function isRequired() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n required = _ref.required,\n optional = _ref.optional;\n\n return [true, 'true'].indexOf(required) > -1 || [false, 'false'].indexOf(optional) > -1;\n };\n\n this.scope = _core.$util.map(this.props, function (spec, key) {\n return {\n 'var': isRequired(spec) ? '=' : '=?',\n str: isRequired(spec) ? '@' : '@?'\n }[spec.type || 'var'];\n });\n }\n\n var originalController = this.controller || angular.noop;\n\n this.controller = ['$scope', '$element', function ($scope, $element) {\n $scope.$element = $element;\n\n $scope.$on('$destroy', function () {\n if ($scope.componentRoute && $scope.componentRoute.parent && $scope.componentRoute.parent.scope) {\n delete $scope.componentRoute.parent.scope.viewConfig;\n }\n _this.lifecycle.exit.call($scope);\n });\n\n $scope.props = {};\n\n if ($scope.componentRoute) {\n setUpComponentRoute($scope, $Component, angular);\n }\n\n angular.forEach(_this.props, function (type, key) {\n\n var prop = _this.props[key];\n var required = prop.required !== false;\n var def = void 0;\n\n if (prop['default'] instanceof Function) {\n def = _core.$util.memoize(prop['default'].bind($scope));\n } else {\n def = function def() {\n return prop['default'];\n };\n }\n\n var UNDEFINED = {\n 'var': undefined,\n str: ''\n }[prop.type];\n\n Object.defineProperty($scope.props, key, {\n get: function get() {\n var val = $scope[key];\n\n if (val === UNDEFINED) {\n if (required) {\n throw new Error('Prop required for component :: ' + _this.tag + ' :: ' + key);\n }\n\n return def();\n }\n\n return val;\n },\n\n set: function set() {\n throw new Error('Prop is immutable :: ' + _this.tag + ' :: ' + key);\n }\n });\n });\n\n $scope.fields = {};\n\n $scope.actions = _core.$util.bindObject(_this.actions, $scope);\n\n Object.keys(_this.rootEvents).forEach(function (eventName) {\n var cancel = _core.$event.on(eventName, function (event) {\n _this.rootEvents[eventName].apply($scope, _arguments);\n });\n\n $scope.$on('$destroy', cancel);\n });\n\n $scope.display = true;\n\n $scope.reload = function () {\n\n if (!$scope.populated) {\n throw new Error('Can not reload unpopulated component');\n }\n\n $scope.display = false;\n setTimeout(function () {\n $scope.display = true;\n });\n };\n\n $scope.componentScope = $scope;\n\n if ($scope.props['export'] && $scope.$parent.componentScope) {\n\n $scope.exports = angular.extend({}, _this.exports || {}, {\n reload: $scope.reload\n });\n\n Object.defineProperty($scope.$parent.componentScope, $scope.props['export'], {\n get: function get() {\n return $scope.exports;\n },\n\n configurable: true\n });\n }\n\n $scope._enablePopulateEvents = true;\n\n _angular.$injector.invoke(originalController, _this, { $scope: $scope, $element: $element });\n _this.lifecycle.enter.call($scope);\n\n $scope._enablePopulateEvents = false;\n\n var cancelReEnterEvent = _core.$event.on('$stateChangeSuccess', function (event, toState) {\n if (toState === $scope.props.componentRoute) {\n _this.lifecycle.reenter.call($scope);\n }\n });\n\n $scope.$on('$destroy', cancelReEnterEvent);\n\n return _core.$promise.sequential([function () {\n $scope.$emit('_populating');\n }, function () {\n return _core.$promise.map(_this.resolve, function (resolver, name, resolverPromises) {\n\n if (angular.isObject(resolver)) {\n $scope[name] = resolver;\n return resolver;\n }\n\n return _core.$promise.resolve(resolver.call($scope, resolverPromises)).then(function (data) {\n assertModelsRetrievedOrEmpty(data);\n\n return _core.$promise.hash(data).then(function (resolvedData) {\n\n $scope[name] = resolvedData;\n return resolvedData;\n });\n });\n });\n }, function () {\n\n $scope.populated = true;\n\n $scope.$emit('_populated');\n\n _core.$event.refCount($scope, '_populating', '_populated').then(function () {\n\n $scope.$on('populated', function (populatedEvent) {\n populatedEvent.stopPropagation();\n });\n\n $scope.$emit('populated');\n _this.onPopulate.call($scope);\n _this.lifecycle.populate.call($scope);\n });\n }]);\n }];\n },\n\n validate: function validate() {\n\n if (_core.$config.deploy.isLive() && !_core.$config.deploy.isTest()) {\n return;\n }\n\n var componentName = this.constructor.name;\n\n if (!this.tag) {\n throw new Error(componentName + ' :: expected property \\'tag\\'');\n }\n\n if (!this.tag.match(/^[a-z0-9-]+$/)) {\n throw new Error(componentName + ' :: tag should contain only lowercase alphanumeric characters and dashes');\n }\n\n if (!this.template) {\n throw new Error(componentName + ' :: expected property \\'template\\'');\n }\n\n if (this.resolve) {\n angular.forEach(this.resolve, function (resolver, name) {\n if (!(resolver instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'resolve.' + name + '\\' to be a function');\n }\n });\n }\n\n if (this.props) {\n angular.forEach(this.props, function (prop, name) {\n\n if (!(prop instanceof Object)) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '\\' to be a function');\n }\n\n if (prop.type && ['var', 'str'].indexOf(prop.type) === -1) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '.type\\' to be one of var, str');\n }\n\n if (prop['default'] && prop.required) {\n throw new Error(componentName + ' :: unnecessary \\'props.' + name + '.default\\', since prop is required');\n }\n\n if (prop['default'] && prop['default'] instanceof Object && !(prop['default'] instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '.default\\' to be a primitive or a function - please do not pass mutable objects');\n }\n });\n }\n\n if (this.actions) {\n angular.forEach(this.actions, function (action, name) {\n if (!(action instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'actions.' + name + '\\' to be a function');\n }\n });\n }\n\n if (this.lifecycle) {\n Object.keys(this.lifecycle).forEach(function (name) {\n if (['enter', 'populate', 'exit', 'reenter'].indexOf(name) === -1) {\n throw new Error(componentName + ' :: unexpected \\'lifecycle.' + name + '\\'');\n }\n });\n }\n }\n});\n\n$Component.reopenClass({\n\n extend: function extend() {\n\n var SubClass = _core.$Class.extend.apply(this, arguments);\n var spec = new SubClass();\n\n angular.module().directive(spec.name, function () {\n return spec;\n });\n\n return SubClass;\n },\n\n render: function render(scope) {\n _core.$event.emit('$resetState');\n\n var $scope = _angular.$rootScope.$new();\n\n angular.extend($scope, scope);\n\n var attrs = Object.keys(scope).map(function (key) {\n return _core.$util.camelToDasherize(key) + '=\"' + (this.prototype.props[key].type === 'var' ? key : scope[key]) + '\"';\n }.bind(this)).join(' ');\n\n var cleanRootScope = (0, _ng.$cleanRootScope)(_angular.$rootScope);\n var html = '<' + this.prototype.tag + ' ' + attrs + '>';\n\n console.log('RENDER', html, scope);\n\n var element = (0, _angular.$compile)(html)($scope);\n\n // attaching to the document so DOM Api works in karma flow tests (e.g document.getElementById('myId'))\n angular.element(document.body).append(element);\n\n afterEach(_core.$util.once(function () {\n $scope.$destroy();\n cleanRootScope();\n element.remove();\n }));\n\n setTimeout.flush();\n\n element.isolateScope = function () {\n throw new Error('Please test this element by interfacing with its public api: define mock endpoints, and interact with html links, buttons and form fields');\n };\n\n element.updateProps = function (props) {\n angular.extend($scope, props);\n $scope.$digest();\n setTimeout.flush();\n };\n\n return element;\n }\n});\n\nfunction autoConvertDirectiveToComponent(_ref2, original) {\n var name = _ref2[0],\n factory = _ref2[1];\n\n\n if (!angular.isFunction(factory)) {\n return original();\n }\n\n var tag = _core.$util.camelToDasherize(name);\n var spec = _angular.$injector.invoke(factory);\n\n if (spec.controller) {\n var originalController = spec.controller;\n\n spec.controller = ['$scope', '$element', function ($scope, $element) {\n $scope._enablePopulateEvents = true;\n var result = _angular.$injector.invoke(originalController, this, { $scope: $scope, $element: $element });\n\n $scope._enablePopulateEvents = false;\n return result;\n }];\n }\n\n if (spec instanceof $Component || !spec.template || !spec.controller || name.indexOf('xo') !== 0 || spec.transclude) {\n return original(this, [name, function () {\n return spec;\n }]);\n }\n\n if (spec.componentize) {\n\n $Component.extend('$' + name + 'Component', spec, {\n tag: tag\n });\n\n return this;\n }\n\n return original(this, [name, function () {\n return spec;\n }]);\n}\n\n_core.$util.monkeyPatch(_angular.$compileProvider, 'directive', autoConvertDirectiveToComponent);\n_core.$util.monkeyPatch(angular.module(), 'directive', autoConvertDirectiveToComponent);\n\n// $populate needs to go away\n\nfunction $populate($scope, instances) {\n\n $scope.$on = $scope.$on || angular.noop;\n $scope.$emit = $scope.$emit || angular.noop;\n\n var _enablePopulateEvents = $scope._enablePopulateEvents;\n\n if (_enablePopulateEvents) {\n _core.$event.refCount($scope, '_populating', '_populated').then(function () {\n $scope.$emit('populated');\n });\n }\n\n $scope.$on('populated', function (populatedEvent) {\n populatedEvent.stopPropagation();\n });\n\n if (_enablePopulateEvents) {\n $scope.$emit('_populating');\n }\n\n return _core.$promise.all(_core.$util.map(instances, function (instance, name) {\n\n var promise = void 0;\n\n if (instance.then) {\n promise = instance;\n } else {\n promise = instance.retrieve();\n $scope[name] = instance;\n }\n\n return promise.then(function (result) {\n $scope[name] = result;\n return result;\n });\n })).then(function (result) {\n\n if (_enablePopulateEvents) {\n $scope.$emit('_populated');\n }\n\n return result;\n });\n}\n\nangular.value(\"$Component\", $Component);\nangular.value(\"$populate\", $populate);\n_angular.$rootScope;\n\n_angular.$compile;\n\n_angular.$injector;\n\n_angular.$compileProvider;\n\n_core.$Class;\n\n_core.$Model;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$config;\n\n_core.$event;\n\n_ng.$cleanRootScope;\n\n_directive.$registerDirective;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/console-browserify/index.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/core.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\n_core.$event.use({\n on: function on() {\n return _angular.$rootScope.$on.apply(_angular.$rootScope, arguments);\n },\n once: function once(name, handler) {\n var cancel = _core.$event.on(name, function () {\n cancel();\n handler.apply(this, arguments);\n }, true);\n\n return cancel;\n },\n emit: function emit() {\n return _angular.$rootScope.$emit.apply(_angular.$rootScope, arguments);\n },\n broadcast: function broadcast() {\n return _angular.$rootScope.$broadcast.apply(_angular.$rootScope, arguments);\n }\n});\n\n_core.$promise.use(_angular.$q);\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_core.$event;\n\n_core.$promise;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$registerDirective = $registerDirective;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction $registerDirective(tag, definition) {\n\n var directiveName = tag.replace(/-([a-z])/g, function (g) {\n return g[1].toUpperCase();\n });\n\n return _angular2[\"default\"].module().directive(directiveName, definition);\n}\n\n_angular2[\"default\"].value(\"$registerDirective\", $registerDirective);\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/events.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nangular.module().run(function () {\n\n _core.$event.on('$stateChangeStart', function (event) {\n _core.$event.emit('loading');\n _core.$event.emit('loaded');\n });\n\n var startLoadTime = 0;\n var currentState = 'checkout_init';\n\n function currentStateName() {\n return _uiRouter.$state.current.name && _uiRouter.$state.current.name.replace(/\\./g, '_');\n }\n\n _core.$event.on('startLoad', function () {\n\n if (startLoadTime) {\n startLoadTime = _core.$util.now();\n } else if (window.enablePerformance && window.performance.timing.connectEnd && window.performance.timing.navigationStart) {\n\n var performance = window.performance;\n var timing = window.performance.timing || {};\n var now = performance.now();\n\n startLoadTime = parseInt(now - (timing.connectEnd - timing.navigationStart), 10);\n }\n });\n\n _core.$event.on('allLoaded', function () {\n\n var newState = currentStateName();\n\n if (!newState) {\n return;\n }\n\n if (currentState === newState) {\n _core.$event.emit('page_reloaded', currentState);\n } else {\n\n var duration = void 0;\n\n if (startLoadTime) {\n duration = _core.$util.now() - startLoadTime;\n }\n\n var payload = {\n start: currentState,\n end: newState,\n time: duration,\n duration: duration\n };\n\n _core.$event.emit('$transition', {\n from: currentState,\n toState: _uiRouter.$state.current,\n duration: duration\n });\n\n _logger.$logger.info('transition', payload);\n _logger.$logger.info('transition_' + currentState + '_to_' + newState, payload);\n\n _core.$event.emit('page_loaded', currentState, newState);\n _logger.$logger.flush();\n\n currentState = newState;\n }\n });\n\n _core.$event.emit('loading');\n\n var cancel = _core.$event.on('$stateChangeSuccess', function () {\n if (_uiRouter.$state.current.template) {\n cancel();\n setTimeout(function () {\n _core.$event.emit('loaded');\n }, 50);\n }\n });\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_core.$event;\n\n_core.$util;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/feature.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _directive = __webpack_require__(\"../node_modules/squid/dist/ng/directive.js\");\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/index.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\n(0, _directive.$registerDirective)('feature', function () {\n return {\n restrict: 'A',\n transclude: true,\n scope: {},\n template: '',\n link: function link($scope, element, attr) {\n $scope.enabled = function () {\n return (0, _locale.$feature)(attr.feature) || _core.$integration.getConfig(attr.feature);\n };\n }\n };\n});\n\n(0, _directive.$registerDirective)('unless-feature', function () {\n return {\n restrict: 'A',\n transclude: true,\n scope: {},\n template: '',\n link: function link($scope, element, attr) {\n $scope.enabled = function () {\n return (0, _locale.$feature)(attr.unlessFeature) || _core.$integration.getConfig(attr.unlessFeature);\n };\n }\n };\n});\n_directive.$registerDirective;\n\n_locale.$feature;\n\n_core.$integration;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/ng/core.js\");\n\nObject.keys(_core).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _core[key];\n }\n });\n});\n\nvar _route = __webpack_require__(\"../node_modules/squid/dist/ng/route.js\");\n\nObject.keys(_route).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _route[key];\n }\n });\n});\n\nvar _component = __webpack_require__(\"../node_modules/squid/dist/ng/component.js\");\n\nObject.keys(_component).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _component[key];\n }\n });\n});\n\nvar _feature = __webpack_require__(\"../node_modules/squid/dist/ng/feature.js\");\n\nObject.keys(_feature).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _feature[key];\n }\n });\n});\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/ng/locale.js\");\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _module = __webpack_require__(\"../node_modules/squid/dist/ng/module.js\");\n\nObject.keys(_module).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _module[key];\n }\n });\n});\n\nvar _ng = __webpack_require__(\"../node_modules/squid/dist/ng/ng.js\");\n\nObject.keys(_ng).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ng[key];\n }\n });\n});\n\nvar _directive = __webpack_require__(\"../node_modules/squid/dist/ng/directive.js\");\n\nObject.keys(_directive).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _directive[key];\n }\n });\n});\n\nvar _events = __webpack_require__(\"../node_modules/squid/dist/ng/events.js\");\n\nObject.keys(_events).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _events[key];\n }\n });\n});\n\nvar _pxp = __webpack_require__(\"../node_modules/squid/dist/ng/pxp.js\");\n\nObject.keys(_pxp).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _pxp[key];\n }\n });\n});\n\nvar _lazyLoadRoutes = __webpack_require__(\"../node_modules/squid/dist/ng/lazyLoadRoutes.js\");\n\nObject.keys(_lazyLoadRoutes).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _lazyLoadRoutes[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/lazyLoadRoutes.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.lazyLoadRoute = exports.findRelativeState = exports.initRoute = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nvar getHash = function getHash(url) {\n if (!url || !~url.indexOf('#')) {\n // eslint-disable-line no-bitwise\n return;\n }\n\n url = url.split('#');\n return url[url.length - 1];\n};\n\n/**\n *\n * get parent state, e.g \"checkout.sidebar.addCard\" -> \"checkout.sidebar\"\n */\nvar getParentState = function getParentState(path) {\n return _uiRouter.$state.get(path.slice(0, path.lastIndexOf('.')));\n};\n\n/**\n * Find route by slug\n * path - full path of the current route, e.g \"checkout.payWithSelection\"\n * slug - path of the route that we want to search, e.g \"payWithSelection\"\n */\nvar getRoute = function getRoute(path, slug) {\n var route = getParentState(path);\n\n if (!route) {\n return;\n }\n var children = route.children;\n\n if (children) {\n return children.find(function (child) {\n return child.slug === slug;\n });\n }\n};\n\n/**\n * Lazy load children routes in the background\n */\nvar lazyLoadChildren = function lazyLoadChildren(children) {\n if (children) {\n _logger.$logger.info('lazy_loading_route_load_children');\n children.forEach(function (child) {\n if (child.lazyRoute) {\n // request to download js chunk (dynamic import)\n child.lazyRoute();\n }\n });\n }\n};\n\n/**\n * Dynamically load route and initialize / register it\n * @param {Object} routeObj - route object from Route definition, e.g\n * {\n * name: '$PayWithSelection',\n * slug: 'payWithSelection',\n * lazyRouter: () => import('pages/payWithSelection/route)\n * }\n *\n * @param {Route} parent - parent of the passed routeObj\n * @param {String} fullRoutePath - full path of the route, e.g \"checkout.payWithselection\"\n */\nvar initRoute = exports.initRoute = function initRoute(routeObj, parent, fullRoutePath) {\n if (!routeObj) {\n return;\n }\n\n var name = routeObj.name,\n slug = routeObj.slug,\n attributes = routeObj.attributes,\n lazyRoute = routeObj.lazyRoute;\n\n\n _logger.$logger.info('lazy_loading_route_init', {\n name: name,\n slug: slug,\n fullRoutePath: fullRoutePath\n });\n\n return lazyRoute().then(function (route) {\n if (!route) {\n return;\n }\n if ((typeof route === 'undefined' ? 'undefined' : _typeof(route)) === 'object') {\n route = route[name];\n }\n var childRoute = new route({ //eslint-disable-line\n parent: parent || getParentState(fullRoutePath),\n childSpec: _core.$util.extend(routeObj, { route: route }),\n childAttributes: attributes\n });\n childRoute.register();\n return childRoute;\n });\n};\n\n/**\n * Promisify all lazy routes\n * Example:\n * targetState = 'checkout.sidebar.addCardFlow.addCard'\n * Lets say 'addCard', 'addCardFlow' and 'addCard' are lazy routes\n * 1. Go through each possible route, e.g 'checkout', 'checkout.sidebar', 'checkout.sidebar.addCardFlow', 'checkout.sidebar.addCardFlow.addCard'\n * 2. Check if each exists / already registered\n * 3. if route is not registered -> find that route and return promise\n * @param {String} targetState full path of the target route\n * Returns an array of promisified functions\n */\nvar findAndPromisifyRoutes = function findAndPromisifyRoutes(targetState) {\n var splittedTargetState = targetState.split('.');\n var states = splittedTargetState.slice(1);\n var routes = [];\n var path = splittedTargetState[0];\n\n states.forEach(function (state) {\n path += '.' + state;\n var fullRoutePath = path;\n\n if (!_uiRouter.$state.get(path)) {\n routes.push(function (parent) {\n var route = getRoute(fullRoutePath, state);\n\n return initRoute(route, parent, fullRoutePath);\n });\n }\n });\n return routes;\n};\n\n/**\n * Checks if it's a relative path (having `.` or `^`)\n * @param {String} stateName - path of the state, e.g `.mychildRoute`\n */\nvar isRelative = function isRelative(stateName) {\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n};\n\n/**\n * finds a full path of the relative state name\n * examples:\n * '^' - will go to a parent state\n * '^.sibling' - will go to a sibling state\n * '.child.grandchild' - will go to grandchild state\n * @param {String / Object} stateOrName - state to find, e.g `^.selectFi`\n * Returns full path name of the state, e.g `^.selectFi` -> `checkout.selectFi`\n */\nvar findRelativeState = exports.findRelativeState = function findRelativeState(stateOrName) {\n if (!stateOrName) {\n return;\n }\n var base = _uiRouter.$state.current;\n\n var rel = stateOrName.split('.');\n var current = base;\n var i = 0;\n\n for (; i < rel.length; i++) {\n if (rel[i] === '' && i === 0) {\n current = base;\n continue;\n }\n if (rel[i] === '^') {\n if (!current.parent) {\n throw new Error('lazy-loading: path \\'' + stateOrName + '\\' not valid for state \\'' + base.name + '\\'');\n }\n current = current.parent;\n continue;\n }\n break;\n }\n rel = rel.slice(i).join('.');\n return current.name + (current.name && rel ? '.' : '') + rel;\n};\n\n/**\n * Lazy load route and redirect if successfull or reject if route was not found\n * Note: routes will be loading sequentialy for now to load parent routes first if they are lazy as well.\n * Example:\n * targetState = 'checkout.sidebar.addCardFlow.addCard'\n * Lets say 'addCard', 'addCardFlow' and 'addCard' are lazy routes and represent separate js chunk\n * We have to load each js chunk in order one by one to be able to register them and attach to corresponding parents.\n * @param {String} targetState - route path, e.g 'checkout.payWithSelection'\n * @param {Object} targetParams - params which route may need\n * @param {Boolean} shouldChangeState - if state should be changed after route is loaded\n */\nvar lazyLoadRoute = exports.lazyLoadRoute = function lazyLoadRoute(targetState) {\n var targetParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var shouldChangeState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!targetState) {\n return _core.$promise.reject(new Error('lazy_loading_target_state_is_empty'));\n }\n _logger.$logger.info('lazy_loading_route', {\n targetState: targetState,\n targetParams: targetParams\n });\n if (isRelative(targetState)) {\n targetState = findRelativeState(targetState, _uiRouter.$state.current);\n }\n _core.$event.emit('loading');\n\n var routes = findAndPromisifyRoutes(targetState);\n\n return _core.$promise.sequential(routes).then(function (result) {\n if (_uiRouter.$state.get(targetState)) {\n if (result) {\n lazyLoadChildren(result.children);\n }\n _logger.$logger.info('lazy_loading_route_state_change', {\n targetState: targetState,\n targetParams: targetParams\n });\n if (!shouldChangeState) {\n return _core.$promise.resolve();\n }\n return _uiRouter.$state.go(targetState, targetParams)['catch'](function (err) {\n if (err.message === 'transition prevented' || err.message === 'transition superseded') {\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n } else {\n return _core.$promise.reject(new Error('lazy_loading_state_was_not_loaded'));\n }\n })['catch'](function (error) {\n // in case of exceptions, spinner must dissapear, because for each 'loading' event\n // that's sent in the beginning of the function must be corresponding 'loaded' event\n // otherwise, there will be infinite spinner\n\n _logger.$logger.info('lazy_loading_route_error', {\n targetState: targetState,\n targetParams: targetParams,\n errorMessage: error && error.message,\n errorStack: error && error.stack\n });\n\n return _core.$promise.reject(error);\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n};\n\n/**\n * mostly needed for use cases when user types route manually\n */\nwindow.addEventListener('hashchange', function (event) {\n if (_config.$meta.codeSplitting) {\n var fromHash = getHash(event.oldURL);\n var toHash = getHash(event.newURL || window.location.hash);\n\n // skip lazy loading in case hash is undefined or empty\n // example -> OpenModal\n // in that case `toHash` will be empty\n if (!toHash) {\n return;\n }\n\n var getHashQueryParams = function getHashQueryParams(path) {\n var splittedPath = path.split('?');\n // e.g #/checkout/genericError?code=ERROR_CODE -> code=ERROR_CODE\n var hashParams = splittedPath.length > 1 && splittedPath[1];\n\n if (hashParams) {\n // e.g code=ERROR_CODE -> { code: ERROR_CODE }\n return _core.$util.params(hashParams);\n }\n };\n // e.g #/checkout/review -> checkout.review\n var path = toHash.slice(1).replace(/\\//g, '.');\n var hashQueryParams = getHashQueryParams(path);\n\n if (hashQueryParams) {\n // e.g checkout.genericError?code=ERROR_CODE -> checkout.genericError\n path = path.split('?')[0];\n }\n\n if (_uiRouter.$state.get(path)) {\n return;\n }\n\n _logger.$logger.info('hashchange_lazy_loading', {\n from: fromHash,\n to: toHash\n });\n\n lazyLoadRoute(path, hashQueryParams)['catch'](function () {\n _logger.$logger.info('hashchange_lazy_loading_error', {\n from: fromHash,\n to: toHash,\n params: hashQueryParams\n });\n });\n }\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_config.$meta;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/locale.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/index.js\");\n\n(0, _angular.$registerDirective)('content', function () {\n return {\n restrict: 'A',\n\n link: function link($scope, element, attributes) {\n $scope.content = $scope.htmlContent = function (key, props) {\n if (attributes.content) {\n key = attributes.content + '.' + key;\n }\n var content = _locale.Content.get(key, props);\n\n if (content.toString()) {\n return content;\n } else {\n return;\n }\n };\n }\n };\n});\n\n(0, _angular.$registerDirective)('bind-html-compile', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $scope.$watch(function () {\n return $scope.$eval($attrs.bindHtmlCompile);\n }, function (value) {\n $element.html(value && value.toString());\n (0, _angular.$compile)($element.contents())($scope);\n });\n }\n };\n});\n\n(0, _angular.$registerDirective)('format-currency', function () {\n\n return {\n restrict: 'E',\n template: '',\n scope: {\n amount: '=?',\n symbol: '=?',\n code: '=?',\n currencyStyle: '@?'\n },\n controller: ['$scope', function ($scope) {\n\n function format() {\n $scope.amount_formatted = _angular.$sce.trustAsHtml((0, _locale.formatCurrency)($scope.amount, $scope.code, true, $scope.currencyStyle));\n }\n\n $scope.$on('$destroy', _core.$event.on('localeChange', format));\n\n $scope.$watch('amount', function (newValue, oldValue) {\n if (newValue !== oldValue && _locale.$locale.country) {\n format();\n }\n });\n\n if (_locale.$locale.country) {\n format();\n }\n }] // controller\n }; // return\n}); // registerDirective\n\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().value('$sanitize', function (val) {\n if (val instanceof _locale.Content) {\n return val.toSafeString();\n }\n return (0, _locale.sanitize)(val);\n});\n\n_angular.$sce;\n\n_angular.$registerDirective;\n\n_angular.$compile;\n\n_core.$event;\n\n_locale.formatCurrency;\n\n_locale.sanitize;\n\n_locale.Content;\n\n_locale.$locale;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/squid/dist/ng\", \"../node_modules/squid/dist/ng/locale.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/module.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.module = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _module = _angular2['default'].module;\nexports.module = _module;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/ng.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$angularInvoke = $angularInvoke;\nexports.$once = $once;\nexports.$cleanRootScope = $cleanRootScope;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nfunction $angularInvoke(method) {\n try {\n return method();\n } catch (err) {\n _angular.$injector.get('$exceptionHandler')(err);\n }\n}\n\nfunction $once(name, handler) {\n var cancel = _core.$event.on(name, function () {\n cancel();\n handler.apply(this, arguments);\n }, true);\n}\n\nfunction $cleanRootScope(rootScope) {\n\n var keys = Object.keys(rootScope);\n\n var autoCleanupEventHandlers = [];\n var eventHandlers = [];\n var eventCancelers = [];\n\n _core.$util.monkeyPatch(rootScope, '$on', function (_ref, original) {\n var name = _ref[0],\n handler = _ref[1],\n once = _ref[2];\n\n\n var cancel = original();\n\n var $state = void 0;\n\n try {\n $state = _angular.$injector.get('$state');\n } catch (err) {\n // pass\n }\n\n if (name === '$destroy' || !$state || !$state.current || !$state.current.name || $state.current.name === 'default') {\n autoCleanupEventHandlers.push(cancel);\n return function autoCleanedUpCancel() {}; // eslint-disable-line no-empty-function\n }\n\n if (once) {\n eventCancelers.push(cancel);\n return cancel;\n }\n\n // Let ng-router do its thing\n if (handler.toString().indexOf('updateView') !== -1) {\n return cancel;\n }\n\n var stack = void 0;\n\n try {\n throw new Error('$rootScope.$on');\n } catch (err) {\n stack = err.stack;\n }\n\n var reference = {\n name: name,\n handler: handler.toString(),\n stack: stack\n };\n\n eventHandlers.push(reference);\n\n return function () {\n cancel();\n eventHandlers.splice(eventHandlers.indexOf(reference), 1);\n };\n });\n\n return function () {\n\n _core.$event.emit('$destroy');\n\n autoCleanupEventHandlers.forEach(function (canceler) {\n return canceler();\n });\n autoCleanupEventHandlers = [];\n\n Object.keys(rootScope).forEach(function (key) {\n if (keys.indexOf(key) === -1) {\n delete rootScope[key];\n }\n });\n\n if (eventHandlers.length) {\n throw new Error('$rootScope event handlers not cleaned up:\\n\\n' + eventHandlers.map(function (eventHandler) {\n return eventHandler.name + '\\n\\n' + eventHandler.handler + '\\n\\n' + eventHandler.stack;\n }).join('\\n\\n'));\n }\n\n eventCancelers.forEach(function (cancel) {\n return cancel();\n });\n };\n}\n\nangular.value(\"$angularInvoke\", $angularInvoke);\nangular.value(\"$once\", $once);\nangular.value(\"$cleanRootScope\", $cleanRootScope);\n_angular.$injector;\n\n_core.$util;\n\n_core.$event;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/pxp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\n_core.$event.on('pxp_res', function (event, pxpRes) {\n _uiRouter.$state.current.trackingData = _uiRouter.$state.current.trackingData || {};\n _uiRouter.$state.current.trackingData.pxpData = _uiRouter.$state.current.trackingData.pxpData || [];\n _uiRouter.$state.current.trackingData.pxpData.push(pxpRes);\n});\n\n_uiRouter.$state;\n\n_core.$event;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/ng/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ComponentRoute = exports.$Route = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/index.js\");\n\nvar _component = __webpack_require__(\"../node_modules/squid/dist/ng/component.js\");\n\nvar _ng = __webpack_require__(\"../node_modules/squid/dist/ng/ng.js\");\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nvar _lazyLoadRoutes = __webpack_require__(\"../node_modules/squid/dist/ng/lazyLoadRoutes.js\");\n\nvar $Route = exports.$Route = _core.$Class.extend('$ComponentRoute', {\n\n childSpec: {},\n\n init: function init() {\n var _this = this;\n\n this.validate();\n\n this.url = '/' + (this.path || this.name);\n\n if (this.query) {\n this.url += '?' + this.query.join('&');\n }\n\n this.hasResolver = Boolean(this.resolve);\n\n var controller = this.controller = ['$scope', function ($scope) {\n $scope.route = _this;\n if ($scope.componentScope) {\n delete $scope.componentScope.view;\n }\n }];\n\n if (this.get('resolve.action')) {\n this.controller = ['$scope', 'action', function ($scope, action) {\n _angular.$injector.invoke(controller, this, { $scope: $scope });\n if (action) {\n if (!action.newState) {\n _angular.$location.replace();\n }\n\n if (angular.isObject(action) && action.to) {\n _uiRouter.$state.go(action.to, action.params);\n } else {\n _uiRouter.$state.go(action);\n }\n }\n }];\n }\n },\n\n validate: function validate() {\n\n if (_core.$config.deploy.isLive() && !_core.$config.deploy.isTest()) {\n return;\n }\n\n var routeName = this.constructor.name;\n\n if (!this.name && !this.path) {\n throw new Error(routeName + ' :: expected property \\'path\\'');\n }\n\n if (this.url) {\n _logger.$logger.warn(routeName + ' :: unexpected property \\'url\\' :: ' + this.url);\n }\n\n if (this.query && !(this.query instanceof Array)) {\n throw new Error(routeName + ' :: expected property \\'query\\' to be array of query params');\n }\n\n if (this.controller) {\n // throw new Error(`${routeName} :: unexpected property 'controller'`);\n }\n\n if (this.resolve) {\n if (this.resolve.action && !(this.resolve.action instanceof Function)) {\n throw new Error(routeName + ' :: expected property \\'resolve.action\\' to be a function');\n }\n\n Object.keys(this.resolve).forEach(function (name) {\n if (name === 'data') {\n _logger.$logger.warn(routeName + ' :: unexpected resolver :: ' + name);\n } else if (name !== 'action') {\n throw new Error(routeName + ' :: unexpected resolver :: ' + name);\n }\n });\n }\n\n if (this.template) {\n throw new Error(routeName + ' :: unexpected property \\'template\\'');\n }\n\n if (!this.directive && !this.resolve && !this.resolve.action) {\n throw new Error(routeName + ' :: expected property \\'directive\\'');\n }\n\n if (this.directive && angular.isString(this.directive) && !this.getDirective()) {\n throw new Error(routeName + ' :: unknown directive \\'' + this.directive + '\\'');\n }\n\n if (this.directive && !angular.isString(this.directive) && !_component.$Component.isChild(this.directive)) {\n throw new Error(routeName + ' :: expected directive to be subclass of $Component');\n }\n\n if (this.children) {\n this.children.forEach(function (childSpec) {\n\n if (!childSpec.route && !childSpec.name) {\n throw new Error(routeName + ' :: child expected property \\'route\\'');\n }\n\n var ChildRoute = childSpec.route;\n var childName = childSpec.name || ChildRoute.name;\n\n // skip loading route as it won't be available to validate\n if (_config.$meta.codeSplitting && childSpec.lazyRoute) {\n return;\n }\n\n if (!ChildRoute && childSpec.name) {\n try {\n ChildRoute = _angular.$injector.get(childSpec.name);\n } catch (err) {\n throw new Error(routeName + ' :: could not find child route \\'' + childName + '\\'');\n }\n }\n\n if (!$Route.isChild(ChildRoute)) {\n throw new Error(routeName + ' :: ' + childName + ' :: expected child to be instance of $Route');\n }\n });\n }\n },\n goto: function goto(route) {\n return _uiRouter.$state.go(route.replace('this.', this.absolutePath + '.'));\n },\n getDirective: function getDirective() {\n return _angular.$injector.get(_core.$util.dasherizeToCamel(this.getDirectiveTag() + 'Directive'))[0];\n },\n getDirectiveTag: function getDirectiveTag() {\n return angular.isString(this.directive) ? this.directive : this.directive.prototype.tag;\n },\n\n\n bootstrap: function bootstrap(defaultState, middleware) {\n var _this2 = this;\n\n return (0, _ng.$angularInvoke)(function () {\n // only bootstrap if not bootstrapped already\n var element = angular.element(document.body);\n\n if (!element.injector()) {\n angular.bootstrap(element, ['app']);\n }\n\n return _this2.load(defaultState, middleware);\n });\n },\n\n load: function load(defaultState, middleware) {\n\n defaultState = defaultState || this.defaultState;\n middleware = middleware || this.middleware;\n\n _logger.$logger.info('bootstrap_route', {\n route: this.path || this.name\n });\n\n var logStateNotFoundAndThrow = function logStateNotFoundAndThrow(_ref) {\n var unfoundState = _ref.unfoundState,\n fromState = _ref.fromState,\n fromParams = _ref.fromParams,\n _ref$logName = _ref.logName,\n logName = _ref$logName === undefined ? '' : _ref$logName;\n\n _logger.$logger.error('state_not_found' + logName, {\n name: unfoundState.to,\n from: fromState.name,\n fromParams: fromParams,\n hash: window.location.hash\n });\n throw new Error('state_not_found' + logName + ': ' + unfoundState.to);\n };\n\n (0, _ng.$once)('$stateNotFound', function (event, unfoundState, fromState, fromParams) {\n if (!_config.$meta.codeSplitting) {\n event.preventDefault();\n logStateNotFoundAndThrow({ unfoundState: unfoundState, fromState: fromState, fromParams: fromParams });\n }\n });\n\n // for code splitting this event handler will be triggered every single time user tries to load lazy route\n // so we need to have it being listening more than once\n _core.$event.on('$stateNotFound', function (event, unfoundState, fromState, fromParams) {\n if (_config.$meta.codeSplitting) {\n event.preventDefault();\n // if route was not found - lazy load it or throw state_not_found if it was not found\n (0, _lazyLoadRoutes.lazyLoadRoute)(unfoundState.to, unfoundState.toParams)['catch'](function () {\n logStateNotFoundAndThrow({ unfoundState: unfoundState, fromState: fromState, fromParams: fromParams, logName: '_lazy_loading' });\n });\n }\n });\n\n this.register();\n\n _uiRouter.$urlRouterProvider.otherwise(function () {\n return _logger.$logger.info('otherwise_after_bootstrap', {\n hash: window.location.hash\n });\n });\n\n this.runMiddleware(middleware).then(function () {\n var targetState = void 0;\n var targetParams = void 0;\n\n if (window.location.hash && window.location.hash.indexOf('#/') === 0) {\n\n targetState = window.location.hash.slice(2).split('?')[0].replace(/^\\/+/, '').replace(/\\/+$/, '').replace(/\\//g, '.');\n\n targetParams = _core.$util.params(window.location.hash.slice(2).split('?')[1] || '');\n }\n\n _logger.$logger.info('initializing_route', {\n target: targetState,\n defaultState: defaultState,\n hash: window.location.hash\n });\n\n _angular.$location.replace();\n\n /**\n * load default state in case target state was not found\n * e.g checkout.landing - is the default state in Hermes\n */\n var loadDefaultState = function loadDefaultState() {\n if (_uiRouter.$state.get(defaultState)) {\n _logger.$logger.info('default_state', {\n stateName: defaultState\n });\n return _uiRouter.$state.go(defaultState)['catch'](function (err) {\n if (err.message === 'transition prevented') {\n _logger.$logger.warn('transition_prevented', {\n targetState: defaultState\n });\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n }\n\n throw new Error('Default state not found: ' + defaultState);\n };\n\n if (targetState) {\n var logUnknownState = function logUnknownState() {\n var logName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n _logger.$logger.info('unknown_state' + logName, {\n stateName: targetState\n });\n };\n\n if (_uiRouter.$state.get(targetState)) {\n _logger.$logger.info('existing_state', {\n stateName: targetState\n });\n return _uiRouter.$state.go(targetState, targetParams)['catch'](function (err) {\n // lib/js/security.js event listener handles auth required state changes\n // and cancels transitions if user not authenticated\n if (err.message === 'transition prevented') {\n _logger.$logger.warn('transition_prevented', {\n targetState: targetState\n });\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n } else if (_config.$meta.codeSplitting) {\n // try to lazy load route and catch / handle redirect errors\n // 1. If route was not found -> log and try to load default state\n // 2. If route was found but redirect throws an error -> reject\n return (0, _lazyLoadRoutes.lazyLoadRoute)(targetState, targetParams)['catch'](function (err) {\n if (err.message === 'lazy_loading_state_was_not_loaded') {\n logUnknownState('_lazy_loading');\n return loadDefaultState();\n } else {\n return _core.$promise.reject(err);\n }\n });\n } else {\n logUnknownState();\n }\n }\n return loadDefaultState();\n })['catch'](function (err) {\n return _angular.$injector.get('$exceptionHandler')(err);\n });\n },\n\n runMiddleware: function runMiddleware(middleware) {\n\n _logger.$logger.info('middleware', {\n priority: _core.$util.map(middleware, function (method) {\n return method.name;\n }).join('|')\n });\n\n var promise = _core.$promise.resolve();\n\n angular.forEach(middleware, function (method) {\n promise = promise.then(function () {\n\n if (method.name) {\n _logger.$logger.info('middleware_' + method.name);\n }\n\n return method();\n });\n });\n\n return promise;\n },\n\n register: function register() {\n var _this3 = this;\n\n this.template = this.constructTemplate(this.childAttributes || {});\n\n this.absolutePath = this.path || this.name;\n\n if (this.parent) {\n this.absolutePath = this.parent.absolutePath + '.' + this.absolutePath;\n }\n\n if (!_uiRouter.$state.get(this.absolutePath)) {\n _uiRouter.$stateProvider.state(this.absolutePath, this);\n }\n\n angular.forEach(this.children, function (childSpec) {\n // skip registering child if it's supposed to be lazy loaded\n if (_config.$meta.codeSplitting && childSpec.lazyRoute) {\n return;\n }\n var ChildRoute = childSpec.route || _angular.$injector.get(childSpec.name);\n\n var childRoute = new ChildRoute({\n parent: _this3,\n childSpec: childSpec,\n childAttributes: childSpec.attributes\n });\n\n childRoute.register();\n });\n },\n\n /**\n * Constructs the template string for this route. If route.directive = 'xo-add-bank', then the template will be\n * ''.\n * If attributes are specified, they will be passed to directive. Ex: \n *\n * @param attributes - A map of name value pairs - {name: value}.\n * @returns {string}\n */\n constructTemplate: function constructTemplate(attributes) {\n var self = this;\n\n if (!self.directive) {\n return;\n }\n\n attributes['component-route'] = 'route';\n\n if (this.parent) {\n attributes['export'] = 'view';\n }\n\n var tag = this.getDirectiveTag();\n\n var paramString = '';\n\n angular.forEach(attributes, function (value, key) {\n paramString += ' ' + key + '=\"' + value + '\"';\n });\n\n return '
';\n }\n});\n\nif (!_uiRouter.$state.get('default')) {\n _uiRouter.$stateProvider.state('default', {\n auth: false\n });\n}\n\n$Route.reopenClass({\n render: function render(props) {\n\n _core.$event.emit('$resetState');\n _core.$loader.reset();\n _uiRouter.$state.go('default');\n setTimeout.flush();\n\n var $scope = angular.extend(_angular.$rootScope.$new(), props);\n\n var cleanRootScope = (0, _ng.$cleanRootScope)(_angular.$rootScope);\n var element = (0, _angular.$compile)('
')($scope);\n\n afterEach(_core.$util.once(function () {\n $scope.$destroy();\n cleanRootScope();\n _core.$loader.reset();\n angular.element(document.getElementById('app')).remove();\n }));\n\n var route = new this({\n // Pass child attributes to simulate a route receiving scope variables from the parent\n childAttributes: _core.$util.reduce(props, function (result, val, key) {\n result[_core.$util.camelToDasherize(key)] = key;\n return result;\n }, {})\n });\n\n route.bootstrap(route.defaultState || route.path || route.name);\n setTimeout.flush();\n\n element.isolateScope = function () {\n throw new Error('Please test this element by interfacing with its public api: define mock endpoints, and interact with html links, buttons and form fields');\n };\n\n // attaching to the document so DOM Api works in karma flow tests (e.g document.getElementById('myId'))\n angular.element(document.body).append(element);\n\n return element;\n },\n\n\n assertActive: function assertActive() {\n var isState = _uiRouter.$state.current instanceof this;\n\n if (!isState) {\n throw new Error('Current state should be \"' + (this.prototype.path || this.prototype.name) + '\", found \"' + _uiRouter.$state.current.name + '\"');\n }\n }\n});\n\nfunction getPageTitle(stateName) {\n\n var state = _uiRouter.$state.get(stateName);\n\n if (!state) {\n return;\n }\n\n if (state.titleContent) {\n return _locale.$locale.content.get(state.titleContent);\n }\n}\n\nfunction changePageTitle() {\n\n document.documentElement.setAttribute('lang', _locale.$locale.lang);\n\n if (!_uiRouter.$state.current || !_uiRouter.$state.current.name) {\n return;\n }\n\n var fullStateTitle = [];\n\n _uiRouter.$state.current.name.split('.').reduce(function (a, b) {\n\n var stateName = [a, b].filter(Boolean).join('.');\n var stateTitle = getPageTitle(stateName);\n\n if (stateTitle) {\n fullStateTitle.push(stateTitle);\n }\n\n return stateName;\n }, null);\n\n document.title = _core.$util.unique(fullStateTitle).join(' - ');\n}\n\n_core.$event.on('$stateChangeSuccess', changePageTitle);\n_core.$event.on('contentChange', changePageTitle);\n\nvar $ComponentRoute = exports.$ComponentRoute = $Route;\n\nangular.value(\"$Route\", $Route);\nangular.value(\"$ComponentRoute\", $ComponentRoute);\n_angular.$rootScope;\n\n_angular.$location;\n\n_angular.$injector;\n\n_angular.$compile;\n\n_uiRouter.$state;\n\n_uiRouter.$stateProvider;\n\n_uiRouter.$urlRouterProvider;\n\n_logger.$logger;\n\n_core.$config;\n\n_core.$Class;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_core.$loader;\n\n_locale.$locale;\n\n_component.$Component;\n\n_ng.$cleanRootScope;\n\n_ng.$angularInvoke;\n\n_ng.$once;\n\n_config.$meta;\n\n_lazyLoadRoutes.lazyLoadRoute;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/paypal/config.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _env = __webpack_require__(\"../node_modules/squid/dist/paypal/env.js\");\n\n_core.$config.deploy = _core.$config.deploy || _env.$env;\n\n_core.$config;\n\n_env.$env;\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/paypal/env.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar $env = exports.$env = {\n\n isLocal: function isLocal() {\n return window.location.hostname === 'localhost' || window.location.hostname === 'localhost.paypal.com';\n },\n\n isStage: function isStage() {\n return Boolean(window.location.hostname.match(/^.*\\.qa\\.paypal\\.com$/));\n },\n\n isSandbox: function isSandbox() {\n return Boolean(window.location.hostname.match(/^.*\\.sandbox\\.paypal\\.com$/));\n },\n\n isLive: function isLive() {\n return window.location.hostname === 'www.paypal.com';\n },\n\n isTest: function isTest() {\n return false;\n }\n};\n\nangular.value(\"$env\", $env);\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/paypal/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _env = __webpack_require__(\"../node_modules/squid/dist/paypal/env.js\");\n\nObject.keys(_env).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _env[key];\n }\n });\n});\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/paypal/config.js\");\n\nObject.keys(_config).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _config[key];\n }\n });\n});\n\nvar _pxp = __webpack_require__(\"../node_modules/squid/dist/paypal/pxp.js\");\n\nObject.keys(_pxp).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _pxp[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"../node_modules/squid/dist/paypal/pxp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$PXPModel = undefined;\nexports.$getPxpTreatments = $getPxpTreatments;\nexports.$pxp = $pxp;\nexports.$pxpMatch = $pxpMatch;\nexports.$pxpFactors = $pxpFactors;\nexports.$elmo = $elmo;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _core = __webpack_require__(\"../node_modules/squid/dist/core/index.js\");\n\nvar _locale = __webpack_require__(\"../node_modules/squid/dist/locale/index.js\");\n\nvar $PXPModel = exports.$PXPModel = _core.$Model.extend({\n api: new _core.$Api({\n uri: '/api/pxp/:pagename'\n })\n});\n\nfunction logPxp(pxpRes, params, logPayload) {\n var exp_name = [];\n var xe = [];\n var xt = [];\n var isElmoExperiment = params.isElmoExperiment;\n\n angular.forEach(pxpRes.treatments, function (treatment) {\n\n _logger.$logger.info('treatment_' + treatment.treatment_name, angular.extend({\n experiment: pxpRes.pagename,\n treatment: treatment.treatment_name,\n experiment_id: treatment.experiment_id,\n treatment_id: treatment.treatment_id,\n loc_country: _locale.$locale.country,\n loc_lang: _locale.$locale.lang,\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n }, params, logPayload));\n\n exp_name.push(treatment.treatment_name);\n xe.push(treatment.experiment_id);\n xt.push(treatment.treatment_id);\n });\n\n _logger.$logger.info('pxp_' + pxpRes.pagename, angular.extend({\n pxp_exp_id: xe.join('|'),\n pxp_trtmnt_id: xt.join('|'),\n treatments: exp_name.join('|'),\n loc_country: _locale.$locale.country,\n loc_lang: _locale.$locale.lang,\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n }, params, logPayload));\n\n _logger.$logger.info('fpti_pxp_check', {\n from: 'PXP_CHECK',\n to: 'process_pxp_check',\n pxp_exp_id: xe.join(','),\n pxp_trtmnt_id: xt.join(','),\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n });\n\n _core.$event.emit('pxp_res', pxpRes);\n}\n\nfunction $getPxpTreatments(id, params, logPayload) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var isElmoExperiment = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n\n return _core.$promise.run(function () {\n if (isElmoExperiment) {\n Object.assign(params, { isElmoExperiment: isElmoExperiment });\n }\n\n var pxp = $PXPModel.instance(_core.$util.buildURL(id, params), { pagename: id });\n var forceTreatments = _core.$util.param('pxp_' + id) || _core.$util.param('elmo_' + id);\n\n if (forceTreatments) {\n var treatments = forceTreatments.split(',').filter(Boolean);\n\n pxp.treatments = treatments.map(function (treatment_name) {\n return {\n treatment_name: treatment_name\n };\n });\n\n return pxp;\n }\n\n if (forceApiCall) {\n pxp.cached = false;\n\n return pxp.reload({\n params: params,\n silent: silent\n });\n }\n\n return pxp.retrieve({\n params: params,\n silent: silent,\n // Ignore all errors from this api, by passing transientError as true\n // Pxps are not critical calls, so they should fail silently without fallbacks (page reload / showing error page)\n transientError: true\n });\n }).then(function (pxp) {\n if (!pxp.cached) {\n logPxp(pxp, params, logPayload);\n }\n\n pxp.cached = true;\n\n return pxp;\n });\n}\n\nfunction $pxp(id, params, pattern) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var isElmoExperiment = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n if (!pattern) {\n pattern = params;\n params = {};\n }\n\n pattern = new RegExp('^' + pattern + '$');\n\n return exports.$getPxpTreatments(id, params, null, forceApiCall, silent, isElmoExperiment).then(function (experimentResponse) {\n var result = void 0;\n\n (experimentResponse.treatments || []).some(function (treatment) {\n if (!pattern.test(treatment.treatment_name)) {\n return false;\n }\n\n result = {\n treatment_name: treatment.treatment_name,\n factors: treatment.factors\n };\n\n return true;\n });\n\n return result;\n });\n}\n\nfunction $pxpMatch(id, params, patterns, logPayload) {\n if (!patterns) {\n patterns = params;\n params = {};\n }\n\n return exports.$getPxpTreatments(id, params, logPayload).then(function (pxpResponse) {\n var result = {};\n\n angular.forEach(patterns, function (pattern, name) {\n pattern = new RegExp('^' + pattern + '$');\n result[name] = false;\n\n (pxpResponse.treatments || []).some(function (treatment) {\n if (!pattern.test(treatment.treatment_name)) {\n return false;\n }\n\n result[name] = true;\n return true;\n });\n });\n\n return result;\n });\n}\n\nfunction $pxpFactors(id, params, pattern) {\n params.factors = 'true';\n return $pxp(id, params, pattern).then(function (pxpResponse) {\n var result = void 0;\n\n if (pxpResponse && pxpResponse.factors) {\n result = { treatment_name: pxpResponse.treatment_name };\n var pxpFactors = pxpResponse.factors;\n var length = pxpFactors.length;\n\n for (var i = 0; i < length; i++) {\n result[pxpFactors[i].name] = pxpFactors[i].value;\n }\n }\n\n return result;\n });\n}\n\nfunction $elmo(id, params, pattern) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n\n var isElmoExperiment = true;\n\n return $pxp(id, params, pattern, forceApiCall, silent, isElmoExperiment);\n}\n\nwindow.$pxp = $pxp;\nwindow.$elmo = $elmo;\n\nangular.value(\"$PXPModel\", $PXPModel);\nangular.value(\"$getPxpTreatments\", $getPxpTreatments);\nangular.value(\"$pxp\", $pxp);\nangular.value(\"$pxpMatch\", $pxpMatch);\nangular.value(\"$pxpFactors\", $pxpFactors);\nangular.value(\"$elmo\", $elmo);\n_logger.$logger;\n\n_core.$Model;\n\n_core.$Api;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_locale.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/ul-inline/dist/inject.js\":\n/***/ (function(module, exports) {\n\n/*** IMPORTS FROM imports-loader ***/\n(function() {\n\n!function(a,b){a.PAYPAL=a.PAYPAL||{},a.PAYPAL.unifiedLogin=b()}(this,function(){function a(a,b){var c,d={src:a,height:b.height||239,style:\"width: 100%;\",name:b.name||\"injectedUl\",frameborder:0,scrolling:b.scrolling||\"no\",title:b.title||\"PayPal\",sandbox:\"allow-same-origin allow-scripts allow-popups allow-forms allow-top-navigation\"},e=document.createElement(\"iframe\");b.hide&&(d.style=d.style+\"display: none;\");for(c in d)e.setAttribute(c,d[c]);return e}function b(a,b,c){var d,e=a||window.location.origin||window.location.protocol+\"//\"+window.location.host,f=e+(c||\"/signin/inject/\"),g=b?\"?\":\"\",h=0;if(!b)return f;for(d in b)h>0&&(g+=\"&\"),g=g+d+\"=\"+encodeURIComponent(b[d]),h+=1;return f+g}function c(a){var b,c=\"\";try{if(a.source.name!==q.name)return}catch(d){return}if(b=g(a.origin),!f(b))throw new Error(\"PostMessage iframe domain (\"+b+\"), must be a *.paypal.com domain\");if(c=a&&a.data,\"string\"==typeof c)try{c=JSON.parse(c)}catch(h){throw new Error(\"Invalid JSON string sent to onPostMessage handler: \"+c)}c.data&&\"resize\"===c.data.event?e(q,c.data.heightInPx):c.data&&\"htmlRendered\"===c.data.event?x=!0:!w&&p?p(c):w&&v.push(c)}function d(a){a&&\"resize\"===a.event?e(s,a.heightInPx):r(a)}function e(a,b){a.setAttribute(\"height\",b)}function f(a){var b=/\\.paypal\\.com$/gi;return b.test(a)}function g(a){if(a){var b=/^https?:\\/\\/(.*\\.paypal\\.com)(:[0-9]+)?$/gi,c=b.exec(a);return c&&c[1]}}function h(){var a;if(p){for(a=0;a\\n
\\n {{props.address.full_address}}\\n {{content('countryList.'+props.address.country)}}\\n
\\n\\n
\\n {{formattedAddr.displayLine1}}
\\n {{formattedAddr.displayLine2}}
\\n {{formattedAddr.displayLine3}}\\n
\\n\\n
\\n \\n {{content('shippingAddress.preferred')}}\\n \\n
\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-beaver/dist/level.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module('beaver.level', []).factory('$logLevel', function () {\n return {\n INFO: 'info',\n DEBUG: 'debug',\n ERROR: 'error',\n WARN: 'warn',\n ALERT: 'alert'\n };\n}).factory('$consoleLogLevel', function () {\n return {\n info: 'info',\n debug: 'debug',\n error: 'error',\n warn: 'warn',\n alert: 'info'\n };\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-beaver/dist\", \"../node_modules/xo-beaver/dist/level.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-beaver/dist/logger.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _level = __webpack_require__(\"../node_modules/xo-beaver/dist/level.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/* eslint-disable angular/di */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$Logger', function () {\n var logger = {};\n var HERMES_DEV_COOKIE = 'hermesdev';\n\n _angular2['default'].forEach(_level.$logLevel, function (level) {\n logger[level] = function (event, payload, settings) {\n return this.log(level, event, payload, settings);\n };\n });\n\n var hostname = _angular.$window.location && _angular.$window.location.hostname || '';\n var uniqueEvents = [];\n\n _angular2['default'].extend(logger, {\n autoLog: [_level.$logLevel.WARNING, _level.$logLevel.ERROR],\n flushInterval: 10 * 60 * 1000,\n heartbeatInterval: 5000,\n sizeLimit: 500,\n debounceInterval: 10,\n uri: '/api/log',\n rootTxnUri: '/api/log/crt',\n hearbeatMaxThreshold: 50,\n deploy: {\n isLocal: function isLocal() {\n return hostname === 'localhost' || hostname === 'localhost.paypal.com';\n },\n\n isStage: function isStage() {\n return Boolean(hostname.match(/^.*\\.qa\\.paypal\\.com$/));\n },\n\n isLive: function isLive() {\n return hostname === 'www.paypal.com';\n }\n },\n\n init: function init() {\n var self = this;\n\n this.buffer = [];\n\n var previousBeforeUnloadHandler = _angular.$window.onbeforeunload;\n\n _angular.$window.onbeforeunload = function (event) {\n if (self.isDone) {\n return;\n }\n\n self.info('window_beforeunload');\n\n if (previousBeforeUnloadHandler) {\n return previousBeforeUnloadHandler.apply(this, arguments);\n }\n };\n\n var previousUnloadHandler = _angular.$window.onunload;\n\n _angular.$window.onunload = function (event) {\n\n if (self.isDone) {\n return;\n }\n\n self.info('window_unload');\n self._flush();\n\n self.done();\n\n if (previousUnloadHandler) {\n return previousUnloadHandler.apply(this, arguments);\n }\n };\n\n this.heartbeat();\n this.daemon();\n },\n\n heartbeat: function heartbeat() {\n var self = this;\n\n if (!window.enablePerformance) {\n return;\n }\n\n function timestamp() {\n var perf = window.performance;\n\n return parseInt(perf.now() - (perf.timing.connectEnd - perf.timing.navigationStart), 10);\n }\n\n var howBusy = {\n lastSampledTime: timestamp(),\n lastLag: 0,\n maxLag: 0,\n dampendedLag: 0\n };\n\n var count = 0;\n\n (0, _angular.$interval)(function () {\n\n if (!self.buffer.length || self.buffer[self.buffer.length - 1].event !== 'heartbeat') {\n count = 0;\n }\n\n if (!self.buffer.length || count > self.hearbeatMaxThreshold) {\n return;\n }\n\n count += 1;\n\n var payload = {\n count: count\n };\n\n var now = timestamp();\n\n howBusy.lastLag = now - howBusy.lastSampledTime - self.heartbeatInterval;\n howBusy.maxLag = howBusy.lastLag > howBusy.maxLag ? howBusy.lastLag : howBusy.maxLag;\n howBusy.dampendedLag = (howBusy.lastLag + howBusy.dampendedLag * 2) / 3;\n howBusy.lastSampledTime = now;\n\n payload.lastLag = howBusy.lastLag.toFixed(4);\n payload.maxLag = howBusy.maxLag.toFixed(4);\n payload.dampendedLag = howBusy.dampendedLag.toFixed(4);\n payload.lastSampledTime = howBusy.lastSampledTime.toFixed(4);\n\n if (howBusy.lastLag > 10000) {\n self.info('toobusy', {}, {\n noConsole: true,\n unique: true\n });\n }\n\n self.info('heartbeat', payload, {\n noConsole: true\n });\n }, this.heartbeatInterval);\n },\n\n done: function done() {\n this.flush(true);\n this.isDone = true;\n },\n\n addPerformanceData: function addPerformanceData(payload) {\n\n if (window.enablePerformance) {\n var performance = window.performance;\n var timing = window.performance.timing || {};\n var now = performance.now();\n\n if (window.clientStartTime && _angular2['default'].isUndefined(payload.client_elapsed)) {\n payload.client_elapsed = parseInt(now - window.clientStartTime, 10);\n }\n\n if (timing.connectEnd && timing.navigationStart && _angular2['default'].isUndefined(payload.req_elapsed)) {\n payload.req_elapsed = parseInt(now - (timing.connectEnd - timing.navigationStart), 10);\n }\n }\n },\n\n addLocaleData: function addLocaleData(payload) {\n\n var context = {};\n\n try {\n context = _angular.$injector.get('$metaBuilder').buildContext();\n } catch (err) {\n return; // Continue without adding locale data\n }\n if (context.locale && context.locale.country) {\n payload.site_cntry = context.locale.country;\n }\n },\n\n /* jslint maxcomplexity: false */\n log: function log(level, event, payload, settings) {\n var self = this;\n\n payload = payload || {};\n\n if (_angular2['default'].isArray(payload) || !_angular2['default'].isObject(payload)) {\n payload = {\n payload: payload\n };\n }\n settings = settings || {};\n\n if (settings.unique) {\n var hash = event + ':' + _angular2['default'].toJson(payload);\n\n if (uniqueEvents.indexOf(hash) > -1) {\n return self;\n }\n uniqueEvents.push(hash);\n }\n\n payload.pageID = window.meta && window.meta.pageID;\n\n this.addPerformanceData(payload);\n this.addLocaleData(payload);\n\n self.print(level, event, payload, settings);\n\n if (this.buffer.length >= this.sizeLimit) {\n if (this.buffer.length === this.sizeLimit) {\n return self.enqueue('warn', 'logger_max_buffer_length');\n }\n return self;\n }\n\n return self.enqueue(level, event, payload, settings);\n },\n\n getTimestamp: function getTimestamp() {\n var now = Date.now();\n\n return window.logOffset ? window.logOffset + now : now;\n },\n\n enqueue: function enqueue(level, event, payload, settings) {\n payload = payload || {};\n settings = settings || {};\n\n var data = {\n level: level,\n event: event,\n timestamp: this.getTimestamp(),\n payload: payload\n };\n\n this.buffer.push(data);\n\n // If the log level is classified as autolog, then flush the data\n if (this.autoLog.indexOf(level) > -1) {\n this.flush();\n }\n\n return this;\n },\n\n shouldPrintLogsToConsole: function shouldPrintLogsToConsole(settings) {\n\n if (settings.noConsole) {\n return false;\n }\n\n if (window.meta && window.meta.corp) {\n return true;\n }\n\n if (this.deploy.isLocal() || this.deploy.isStage()) {\n return true;\n }\n\n var cookies = window.cookies || {};\n\n if (cookies[HERMES_DEV_COOKIE] && cookies[HERMES_DEV_COOKIE] === '1') {\n return true;\n }\n\n return false;\n },\n\n print: function print(level, event, payload, settings) {\n\n if (!this.shouldPrintLogsToConsole(settings)) {\n return;\n }\n\n var args = [event];\n\n if (payload) {\n args.push(payload);\n\n if (payload.stack || payload.error || payload.warning) {\n args.push('\\n\\n', payload.stack || payload.error || payload.warning);\n }\n }\n\n _angular.$log[_level.$consoleLogLevel[level] || 'info'].apply(_angular.$log, args);\n },\n\n flush: function flush(immediate) {\n var self = this;\n\n if (!this.buffer.length) {\n return _angular.$q.when();\n }\n\n if (immediate) {\n return _angular.$q.when(this._flush());\n }\n\n if (self.debouncer_timeout) {\n _angular.$timeout.cancel(self.debouncer_timeout);\n }\n\n self.debouncer_timeout = (0, _angular.$timeout)(function () {\n\n var resolver = self.debouncer_resolver;\n\n delete self.debouncer_promise;\n delete self.debouncer_resolver;\n delete self.debouncer_timeout;\n\n self._flush().then(function () {\n resolver();\n });\n }, this.debounceInterval);\n\n self.debouncer_promise = self.debouncer_promise || (0, _angular.$q)(function (resolver) {\n self.debouncer_resolver = resolver;\n });\n\n return self.debouncer_promise;\n },\n\n _flush: function _flush() {\n var self = this;\n\n if (!self.buffer.length) {\n return _angular.$q.when();\n }\n\n var meta = {};\n\n try {\n meta = _angular.$injector.get('$metaBuilder').build();\n } catch (err) {\n // @TODO - Log error\n }\n\n var req = this.ajax('post', _angular.$window.meta.logURL || _angular.$window.config.urls.baseUrl + this.uri, {\n data: {\n events: self.buffer\n },\n meta: meta\n });\n\n self.buffer = [];\n\n return req;\n },\n\n ajax: function ajax(method, url, json) {\n return (0, _angular.$q)(function (resolve) {\n var XRequest = window.XMLHttpRequest || ActiveXObject; // eslint-disable-line no-undef, block-scoped-var\n var req = new XRequest('MSXML2.XMLHTTP.3.0');\n var logAppName = _angular.$window.meta.logAppName;\n\n req.open(method.toUpperCase(), url);\n\n req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n req.setRequestHeader('Content-type', 'application/json');\n\n if (logAppName) {\n req.setRequestHeader('x-app-name', logAppName);\n }\n\n req.onreadystatechange = function () {\n if (req.readyState > 3) {\n resolve();\n }\n };\n req.send(_angular2['default'].toJson(json).replace(/&/g, '%26')); // eslint-disable-line angular/ng_json_functions\n });\n },\n\n daemon: function daemon() {\n this.stop();\n\n var self = this;\n\n this.timer = (0, _angular.$interval)(function () {\n self.flush();\n }, this.flushInterval);\n },\n\n stop: function stop() {\n if (this.timer) {\n _angular.$interval.cancel(this.timer);\n }\n },\n\n createCalRootTxn: function createCalRootTxn(data, txnName) {\n if (data !== null && _angular2['default'].isObject(data)) {\n var rootTxnData = { 'data': {}, 'transactionName': '' };\n var url = '' + _angular.$window.config.urls.baseUrl + this.rootTxnUri;\n if (_angular2['default'].isString(txnName)) {\n rootTxnData.transactionName = txnName;\n }\n Object.assign(rootTxnData.data, data);\n this.ajax('post', url, rootTxnData);\n }\n }\n });\n\n function Logger(val) {\n _angular2['default'].extend(this, val);\n this.init();\n }\n\n Logger.prototype = logger;\n Logger.prototype.constructor = Logger;\n\n return Logger;\n}).factory('$logger', ['$Logger', function ($Logger) {\n return new $Logger();\n}]).run(['$logger', function ($logger) {\n _angular2['default'].forEach(window.beaconQueue, function (payload) {\n $logger.log(payload.level, payload.event, payload);\n });\n\n window.beacon = function (level, events, payload) {\n _angular2['default'].forEach(events, function (event) {\n $logger.log(level, event, payload);\n });\n };\n}]);\n\n_level.$logLevel;\n\n_level.$consoleLogLevel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-beaver/dist\", \"../node_modules/xo-beaver/dist/logger.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _bml = __webpack_require__(\"../node_modules/xo-models/src/bml/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoBmlPopup', function () {\n return {\n template: _template2['default'],\n controller: ['$scope', function ($scope) {\n (0, _squid.$populate)($scope, {\n checkoutSession: _index.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n if ($scope.checkoutSession.showDeclinePopup) {\n if (!_angular.$rootScope.bml) {\n _angular.$rootScope.bml = new _bml.$BMLModel();\n }\n if (!$scope.bml) {\n $scope.bml = _angular.$rootScope.bml;\n }\n\n $scope.bml.preferenceCheck = false;\n $scope.bml.showModal = true;\n $scope.bml.showModalBackdrop = true;\n\n if ($scope.bml.applicationStatus() || $scope.bml.contingency) {\n $scope.bml.showModalBackdrop = true;\n }\n }\n });\n\n $scope.bmlSetPreferrence = function () {\n if ($scope.bml.preferenceCheck) {\n $scope.bml.action('preference', {\n data: {\n financial_instrument_id: $scope.bml.financial_instrument_id\n },\n success: function success() {\n _logger.$logger.info('COMPLETEBMLAPPLY_PREFERRED');\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['memberReview.bmlPreferredConfirmation']\n };\n }\n });\n } else {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n }\n $scope.bml.showModal = false;\n };\n\n $scope.bmlClickContinue = function ($event) {\n $event.preventDefault();\n $scope.bml.showModalBackdrop = false;\n $scope.bml.showModal = false;\n };\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$populate;\n\n_logger.$logger;\n\n_bml.$BMLModel;\n\n_index.$CheckoutSessionModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n
\\n
\\n\\n
\\n\\n
\\n\\n
\\n
\\n \\n

{{ content('memberReview.bmlSuccessHeader') }}

\\n\\n
\\n

{{ content('memberReview.bmlNapeLinkSuccess')}}

\\n
\\n
\\n

{{ content('memberReview.bmlApprovalMessage') }}

\\n
\\n
0\\\">\\n

\\n

{{ content('memberReview.bmlSuccessMessageSend', {email: bml.user_info.email_address}) }}

\\n
\\n\\n
\\n
\\n \\n \\n
\\n \\n
\\n\\n
\\n
\\n
\\n \\n
\\n

{{ content('memberReview.bmlSorry')}}

\\n

{{ content('bmlDeclined.hardDeclineMsg')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.bmlAcctLinkedHeader')}}

\\n

{{ content('bmlDeclined.bmlAcctLinkedMsg')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.hardDeclineHeader')}}

\\n

{{ content('bmlDeclined.hardDeclineMsg')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.creditNotAllowedHeader')}}

\\n

{{ content('bmlDeclined.creditNotAllowedMsg')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.creditEligibilityDeniedHeader')}}

\\n

{{ content('bmlDeclined.creditEligibilityDeniedMsg')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.declineOtherCreditInstrumentExistsHeader')}}

\\n

{{ content('bmlDeclined.declineOtherCreditInstrumentExistsLine1')}}

\\n

{{ content('bmlDeclined.declineOtherCreditInstrumentExistsLine2\\\" merchantName=\\\"{bmlResult.merchantFullName}')}}

\\n
\\n \\n
\\n

{{ content('bmlDeclined.systemErrorHeader')}}

\\n

{{ content('bmlDeclined.systemErrorMsg')}}

\\n
\\n
\\n\\n \\n \\n
\\n
\\n
\\n
\\n
\\n \\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/lib/personalizationManager.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.PERSONALIZATION_PHASES = undefined;\nexports.personalizationManager = personalizationManager;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _xoCreditBannerUtils = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar PERSONALIZATION_PHASES = exports.PERSONALIZATION_PHASES = {\n 'SHADOW': 'SHADOW',\n 'RAMP': 'RAMP',\n 'CONTROL': 'CONTROL'\n};\n\n/**\n * Calls SSOT for UK flow and MORS/SearchAds for US flows\n * @param token\n * @param models\n * @param contentKeys\n * @returns {*}\n */\nfunction callDefaultServiceAndMapBanner(token, models, contentKeys) {\n if (_squid.$locale.country.toUpperCase() === 'GB') {\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSsotAndMapBanner(token, models, contentKeys);\n } else {\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSearchAdsAndMapBanner(models);\n }\n}\n\n/**\n * This is a generic manager for personalization.\n * Typically, personalization has 3 phases.\n * CONTROL: Calls and use ONLY banner returned from MORS/searchAds\n * SHADOW: Calls MORS/searchAds && MORS/discoverMessages, compares results and logs differences. But returns banner from MORS/searchAds to use in Hermes\n * RAMP: Calls and use ONLY banner returned from MORS/discoverMessage\n * @param {string} phase\n * @param token\n * @param model\n * @param contentKeys\n * @returns {banner}\n */\nfunction personalizationManager(phase, token, models, contentKeys) {\n switch (phase) {\n case PERSONALIZATION_PHASES.SHADOW:\n return _angular.$q.all([callDefaultServiceAndMapBanner(token, models, contentKeys), _xoCreditBannerUtils.$xoCreditBannerUtils.callDiscoverMessagesAndMapToBanner(token, models)]).then(function (_ref) {\n var originalBanner = _ref[0],\n discoverMessageBanner = _ref[1];\n\n _xoCreditBannerUtils.$xoCreditBannerUtils.compareAdObjects(originalBanner, discoverMessageBanner);\n return originalBanner;\n });\n case PERSONALIZATION_PHASES.RAMP:\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callDiscoverMessagesAndMapToBanner(token, models).then(function (discoverMessageBanner) {\n if (discoverMessageBanner) {\n // return banner if it's defined\n return discoverMessageBanner;\n }\n // else call ssot\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSsotAndMapBanner(token, models, contentKeys);\n });\n default:\n return callDefaultServiceAndMapBanner(token, models, contentKeys).then(function (banner) {\n return banner;\n });\n }\n}\n\n_angular.$q;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n_squid.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar COUNTRY_CODE = exports.COUNTRY_CODE = {\n 'GreatBritain': 'GB',\n 'UnitedStates': 'US',\n 'Germany': 'DE'\n};\n\nvar PERSONALIZATION_TREATMENT = exports.PERSONALIZATION_TREATMENT = {\n 'GB': {\n 'SHADOW': 'xo_hermesnodeweb_gb_ppc_personalization_treatment1',\n 'RAMP': 'xo_hermesnodeweb_gb_ppc_personalization_treatment2',\n 'CONTROL': 'xo_hermesnodeweb_gb_ppc_personalization_control'\n }\n};\n\nvar PERSONALIZATION_MESSAGE_PREFIX = exports.PERSONALIZATION_MESSAGE_PREFIX = 'PS-';\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCreditBannerUtils = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _xoCreditBannerConstants = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\");\n\nvar $xoCreditBannerUtils = exports.$xoCreditBannerUtils = {\n getCreditInWallet: function getCreditInWallet(checkoutSession, isBANoPurchase) {\n if (!checkoutSession) {\n return false;\n }\n\n if (isBANoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = checkoutSession.getPlanList();\n return plans.find(function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n },\n /**\n * Check to see if PayPal Credit is in wallet\n * If the current transaction is BA without purchase, it looks at checkoutSession.futurePayment.isCreditInWallet\n * Otherwise, it loops through funding options to find BILL_ME_LATER instrument\n * @param checkoutSession\n * @param isBANoPurchase\n * @returns {*}\n */\n isCreditInWallet: function isCreditInWallet(checkoutSession, isBANoPurchase) {\n return this.getCreditInWallet(checkoutSession, isBANoPurchase) ? true : false;\n },\n /**\n * Check if PPC is set as default FI for the transaction\n * For BA-NOP, it checks sticky instrument.\n * For other BA transactions, it looks for future payment instruments\n * For non-BA transactions, it checks funding option instead\n * @param checkoutSession\n * @param isBANoPurchase\n * @returns {*}\n */\n isCreditSelected: function isCreditSelected(checkoutSession, isBANoPurchase) {\n var creditInWallet = this.getCreditInWallet(checkoutSession, isBANoPurchase);\n\n if (!creditInWallet) {\n return false;\n }\n\n if (isBANoPurchase) {\n var stickyFI = checkoutSession.getSelectedStickyInstrument();\n return stickyFI.type === 'BILL_ME_LATER';\n } else {\n return creditInWallet.selected;\n }\n },\n /**\n * Call SSOT and return $CreditInstallmentOptionsModel to caller\n * @param token\n * @param payee\n * @param checkoutCart\n * @param checkoutAppData\n * @param silent\n * @returns {*}\n */\n executeSsotCall: function executeSsotCall(token, payee, checkoutCart, checkoutAppData, silent) {\n var offers = new _index.$CreditInstallmentOptionsModel({\n id: token,\n payee: payee,\n checkoutCart: checkoutCart,\n checkoutAppData: checkoutAppData,\n isMemberCredit: true\n });\n\n return offers.save({\n silent: silent,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('xo-credit-banner-utils: executeSsotCall succeeded');\n return offers;\n },\n error: function error(err) {\n _logger.$logger.error('xo-credit-banner-utils: executeSsotCall error', { error: err });\n return;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n _logger.$logger.info('xo-credit-banner-utils: executeSsotCall: GET_INSTALLMENT_CONTINGENCY');\n }\n }\n });\n },\n /**\n * Constructs the application context to be used in the executeMorsDiscoverMessageCall()\n * @param models\n * @returns Array of Object {name, value}\n */\n getApplicationContext: function getApplicationContext(models) {\n var applicationContext = [{\n name: 'transaction_amount',\n value: (models.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }, {\n name: 'transaction_currency',\n value: models.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }, {\n name: 'ppc_in_wallet',\n value: this.isCreditInWallet(models.checkoutSession, models.checkoutCart.isBillingNoPurchase())\n }, {\n name: 'ppc_default_fi',\n value: models.checkoutSession.get('plan.paypal_credit')\n }, {\n name: 'is_mobile',\n value: _index3.$DeviceInfo.isDevice()\n }, {\n name: 'installments_not_allowed',\n value: !models.checkoutSession.creditInstallmentOffer || models.checkoutCart.isBilling()\n }, {\n name: 'is_ba_rt_no_purchase',\n value: models.checkoutCart.isBillingNoPurchase() && !models.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }];\n var ppcConversionInfo = models.checkoutSession.getPPCconversionInfo();\n if (ppcConversionInfo) {\n var ppcConversionRate = {\n name: 'currency_conversion_rate',\n value: ppcConversionInfo.to_amount\n };\n applicationContext.push(ppcConversionRate);\n }\n return applicationContext;\n },\n /**\n * Verify if the purchaseAmount is eligible for CORE offer\n * @param purchaseAmount\n * @returns {boolean}\n */\n isEligibleForCORE: function isEligibleForCORE(purchaseAmount) {\n var threshold = _checkout.$CreditOptionsModel.sacEligibleAmount[_squid.$locale.country];\n\n _logger.$logger.info('$xoCreditBannerUtils: purchaseAmount: ' + purchaseAmount + ', threshold: ' + threshold);\n\n return purchaseAmount < threshold;\n },\n\n /**\n * Calls $renderContent with all content keys for banner\n * Put all the dynamic content needs to be swapped out from bodyText or bodyText2 into props\n * @param keys\n * @param props\n * @returns {{ctaText: *, logo: *, bodyText: *, bodyText2: *, termsLink: *}}\n */\n renderContentByKey: function renderContentByKey(keys) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return {\n ctaText: (0, _squid.$renderContent)(keys.ctaText),\n logo: keys.logo,\n bodyText: (0, _squid.$renderContent)(keys.bodyText, props),\n bodyText2: (0, _squid.$renderContent)(keys.bodyText2, props),\n termsLink: keys.termsLink,\n messageId: 'JS-UK-Banner-ACQ'\n };\n },\n\n /**\n * Call SSOT and map SSOT response to a banner object\n * @param token\n * @param models\n * @returns {*}\n */\n callSsotAndMapBanner: function callSsotAndMapBanner(token, models, targetContentKey) {\n var _this = this;\n\n if (!token || !models.payee || !models.checkoutCart || !models.checkoutAppData || !models.checkoutSession || !targetContentKey) {\n return _angular.$q.when();\n }\n\n var isBillingNoPurchase = models.checkoutCart.isBillingNoPurchase();\n var isReuse = this.isCreditInWallet(models.checkoutSession, isBillingNoPurchase);\n\n if (isBillingNoPurchase) {\n // Use CORE content if is billing agreement without purchase\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapBanner(): BA-NOP, use CORE banner');\n return _angular.$q.when().then(function () {\n return _this.renderContentByKey(targetContentKey.core);\n });\n } else {\n return this.executeSsotCall(token, models.payee, models.checkoutCart, models.checkoutAppData, false).then(function (creditInstallmentOptionsModel) {\n if (!creditInstallmentOptionsModel) {\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapGBBanner(): No offer received from SSOT');\n return _angular.$q.when().then(function () {\n if (isReuse) {\n if (_this.isEligibleForCORE(models.checkoutCart.getPurchaseAmount())) {\n return _this.renderContentByKey(targetContentKey.core);\n } else {\n return _this.renderContentByKey(targetContentKey.ni);\n }\n }\n return;\n });\n }\n\n var formattedCartAmount = models.checkoutCart.get('purchase.amounts.total.amount_formatted');\n var props = { cartAmount: formattedCartAmount };\n\n if (creditInstallmentOptionsModel.getInstallmentOptionsPresent()) {\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapBanner(): INST Offer');\n var creditSharedInfoModel = _index.$CreditSharedInfoModel.instance();\n creditSharedInfoModel.setInstallmentOfferPresent(true);\n // Get info needed for banner content\n var installmentCount = creditInstallmentOptionsModel.getInstallmentCount();\n var installmentOffer = creditInstallmentOptionsModel.getInstallmentOffers(installmentCount - 1);\n var monthly = installmentOffer.monthlyPayment && installmentOffer.monthlyPayment.formattedAmt;\n var term = installmentOffer.term;\n props = {\n monthlyPayment: monthly,\n term: term\n };\n return _this.renderContentByKey(targetContentKey.installment, props);\n } else if (creditInstallmentOptionsModel.getNiOfferPresent()) {\n _logger.$logger.info('$xoCreditBannerUtils: NI Offer');\n return _this.renderContentByKey(targetContentKey.ni, props);\n } else {\n // if we don't see any (either EZP or NI) offer from SSOT, it's always CORE\n _logger.$logger.info('$xoCreditBannerUtils: CORE Offer');\n return _this.renderContentByKey(targetContentKey.core, props);\n }\n });\n }\n },\n /**\n * Build Credit Offer FPTI Object\n * @param token\n * @param banner\n * @returns {*}\n */\n buildCreditOfferFptiObject: function buildCreditOfferFptiObject(token, banner) {\n\n var Device = '';\n\n if (!_index3.$DeviceInfo.isDevice()) {\n Device = 'Desktop';\n } else if (_index3.$DeviceInfo.isTablet()) {\n Device = 'Tablet';\n } else {\n Device = 'Mobile';\n }\n var defaultValues = {\n 'buyer_country': _squid.$locale.country,\n 'locale': _squid.$locale.lang,\n 'context_id': token,\n 'context_type': 'EC-Token',\n 'device_type': Device,\n 'from': 'PERSONALIZATION',\n 'to': 'PERSONALIZATION_CREDIT',\n 'banner_type': banner.presentmentStyle + '-' + banner.presentmentType\n };\n var mapBannerToFptiProperties = {\n 'visaActive': 'visa_active',\n 'merchantUpstreamPresentment': 'merchant_presented_banner',\n 'product': 'product_identifier',\n 'offerCategory': 'offer_category',\n 'offerType': 'credit_offer_type',\n // offerText1 and bodyText are mapped to the same FPTI attribute intentionally for backward compatibility\n // Should use bodyText during US refactor\n 'offerText1': 'credit_offer_text',\n 'bodyText': 'credit_offer_text',\n 'incentiveOfferProgramId': 'incentive_offer_program_id',\n 'incentiveOfferValue': 'incentive_offer_value',\n 'propensity': 'model_propensity',\n 'approvability': 'credit_user_approvability',\n 'campaignId': 'caid',\n 'currencyConversionRate': 'fx_conversion_to',\n 'cartCurrency': 'currency_conversion_from_curr',\n 'cartAmount': 'converted_transaction_amount'\n };\n var queryValues = {};\n\n for (var key in mapBannerToFptiProperties) {\n if (banner[key] !== null && typeof banner[key] !== 'undefined') {\n queryValues[mapBannerToFptiProperties[key]] = banner[key];\n }\n }\n\n var creditSharedInfo = _index.$CreditSharedInfoModel.instance();\n queryValues.funding_instrument_count = creditSharedInfo.getFiCount();\n queryValues.cart_show_amt = creditSharedInfo.getCartAmountVisible();\n\n return Object.assign({}, defaultValues, queryValues);\n },\n\n /**\n * Calculating number of funding instruments\n * FI count is used in FPTI logs after calling MORS/DiscoverMessage for both US and UK\n * @param models\n * @returns {number}\n */\n getFiCount: function getFiCount(checkoutSessionModel, isBillingNoPurchase) {\n var fundingInstruments = void 0;\n var isBalanceCoveringPurchase = false;\n\n if (!isBillingNoPurchase) {\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n isBalanceCoveringPurchase = plans.find(function (fi) {\n return fi && fi.primaryFs && !fi.secondaryFIs && fi.primaryFs.name === 'BALANCE';\n });\n fundingInstruments = checkoutSessionModel.get('fundingOptions.instruments');\n } else {\n fundingInstruments = checkoutSessionModel.get('futurePaymentInstruments');\n }\n\n var fiApplicableForThisTransaction = 0;\n\n if (fundingInstruments && fundingInstruments.length > 0) {\n fundingInstruments.forEach(function (fundingOption, index) {\n if (fundingOption.type !== 'BALANCE' || isBalanceCoveringPurchase) {\n fiApplicableForThisTransaction++;\n }\n });\n }\n return fiApplicableForThisTransaction;\n },\n /**\n * Call MORS' /message-recommendation endpoint and return $CreditOfferModel to caller\n * @param token\n * @param models\n * @param silent\n * @returns $CreditOfferModel\n */\n executeMorsDiscoverMessagesCall: function executeMorsDiscoverMessagesCall(token, models, silent) {\n var application_context = this.getApplicationContext(models);\n\n var creditOfferModel = new _index2.$CreditOfferModel({\n id: token,\n locale: _squid.$locale,\n payer: models.checkoutSession.payer.id || '',\n payee: models.payee.merchant.id || '',\n touchpoint: 'PPC_HERMES_RYI',\n message_count: 10,\n application_context: application_context\n });\n\n return creditOfferModel.save({\n silent: silent,\n cache: true,\n params: creditOfferModel.getCacheKey(),\n data: creditOfferModel.serialize(),\n success: function success(result) {\n _logger.$logger.info('xo-credit-banner-utils: executeMorsDiscoverMessagesCall Success');\n return creditOfferModel;\n },\n error: function error(_error) {\n _logger.$logger.error('xo-credit-banner-utils: executeMorsDiscoverMessagesCall Fail', { error: _error });\n return creditOfferModel;\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n _logger.$logger.error('xo-credit-banner-utils: executeMorsDiscoverMessagesCall contingency', { contingency: name });\n }\n }\n });\n },\n /**\n * Call /message-recommendations & map the response to a banner object\n * @param token\n * @param models\n * @returns {*}\n */\n callDiscoverMessagesAndMapToBanner: function callDiscoverMessagesAndMapToBanner(token, models) {\n if (!token || !models.payee || !models.checkoutCart || !models.checkoutSession) {\n return _angular.$q.when();\n }\n\n return this.executeMorsDiscoverMessagesCall(token, models, true).then(function (creditOfferModel) {\n if (!creditOfferModel) {\n _logger.$logger.info('$xoCreditBannerUtils callDiscoverMessagesAndMapGBBanner(): No offer received from MORS');\n return _angular.$q.when();\n }\n var banner = void 0;\n if (creditOfferModel.hasBannerMessage()) {\n banner = {};\n var morsBanner = creditOfferModel.getBannerMessage().content.json;\n // Map to banner fields\n banner.messageId = '' + _xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX + morsBanner.MessageDescription;\n banner.ctaText = morsBanner.CTAText;\n banner.logo = morsBanner.Logo;\n banner.bodyText = morsBanner.OfferText1;\n banner.bodyText2 = morsBanner.OfferText2;\n banner.termsLink = morsBanner.TermsLink;\n banner.cartAmount = morsBanner.CartAmount;\n banner.cartCurrency = morsBanner.CartAmountCurrencyCode;\n banner.offerCategory = morsBanner.OfferCategory;\n banner.offerType = morsBanner.OfferType;\n banner.product = morsBanner.Product;\n banner.presentmentStyle = morsBanner.PresentmentStyle;\n banner.presentmentType = morsBanner.PresentmentType;\n banner.campaignId = creditOfferModel.getBannerMessage().id;\n\n if (morsBanner.CrossCurrencyTransaction === 'true' && morsBanner.CurrencyConversionRate && models.checkoutCart.get('purchase.amounts.total.currency_code')) {\n banner.crossCurrencyTransaction = true;\n banner.currencyConversionRate = morsBanner.CurrencyConversionRate;\n banner.toTargetCurrency = morsBanner.CurrencyConversionRate + ' ' + models.checkoutCart.purchase.amounts.total.currency_code;\n banner.fromUnitCurrency = '1 ' + morsBanner.CartAmountCurrencyCode;\n }\n\n // Address US1226988\n if (morsBanner.OfferType === 'EZP') {\n _logger.$logger.info('$xoCreditBannerUtils callDiscoverMessagesAndMapToBanner(): EZP Offer');\n var creditSharedInfoModel = _index.$CreditSharedInfoModel.instance();\n creditSharedInfoModel.setInstallmentOfferPresent(true);\n }\n }\n return banner;\n });\n },\n /**\n * Compares the equivalency of banner objects `base` & `compare`\n * @param base\n * @param compare\n * @returns Object {expected, actual}\n */\n compareAdObjects: function compareAdObjects(base, compare) {\n _logger.$logger.info('Comparing ad objects', { base_ad: base, recommended_message: compare });\n var diff = [];\n var keysToIgnore = ['campaignId', 'buyItemId', 'placementCode', 'impressionUrl', 'clickUrl', 'client_elapsed', 'req_elapsed', 'messageId'];\n\n if (!base) {\n diff.push('base_ad is not present');\n } else if (!compare) {\n diff.push('recommended_message is not present');\n } else {\n Object.keys(base).forEach(function (key) {\n if (keysToIgnore.indexOf(key) === -1) {\n if (!compare[key]) {\n if (base[key].toString().length > 0) {\n diff.push({\n key: key,\n expected: base[key].toString(),\n actual: undefined\n });\n }\n } else if (compare[key].toString() !== base[key].toString()) {\n diff.push({\n key: key,\n expected: base[key].toString(),\n actual: compare[key].toString()\n });\n }\n }\n });\n }\n\n if (diff.length !== 0) {\n _logger.$logger.warn('recommended_message_warning', diff);\n }\n },\n // TODO: Update comments and implement the actual MORS searchAds call during US breakout/refactor\n /**\n * This is a stub for US flow. Put this in place so we can finish up personalization manager implementation\n * @param models\n * @returns {{}}\n */\n callSearchAdsAndMapBanner: function callSearchAdsAndMapBanner(models) {\n _logger.$logger.info('Calling MORS/SearchAds and map banner');\n return {};\n }\n};\n\nangular.value(\"$xoCreditBannerUtils\", $xoCreditBannerUtils);\n_angular.$q;\n\n_logger.$logger;\n\n_squid.$locale;\n\n_squid.$renderContent;\n\n_index.$CreditSharedInfoModel;\n\n_index.$CreditInstallmentOptionsModel;\n\n_index2.$CreditOfferModel;\n\n_checkout.$CreditOptionsModel;\n\n_index3.$DeviceInfo;\n\n_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/offer/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _xoMORSCreditBannerUtils = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _xoCreditBannerConstants = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/offer/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar ACQ_Banner_Type = 'acquisition';\n\nangular.module().directive('xoOffer', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n promotion: '=?',\n bmlaction: '=?',\n installment: '=?',\n selectedmethod: '=?',\n reusetext: '=?',\n radio: '=?',\n parentContext: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.locale = _squid.$locale;\n $scope.buyerCountry = _squid.$locale.country;\n\n // Breakout of offer to go into xo-credit-offer-banners for GB flows\n if (_squid.$locale.country === _xoCreditBannerConstants.COUNTRY_CODE.GreatBritain) {\n _logger.$logger.info('Breaking into country specific credit offer flow');\n return (0, _angular.$q)(function () {\n return;\n });\n }\n\n var isCreditInWallet = void 0;\n var isRedirectFromCape = void 0;\n var discoverMessageError = null;\n\n var BANNER_TYPES = {\n 'PASSIVE': 'PASSIVE',\n 'PROMINENT': 'PROMINENT'\n };\n var USE_CASE = {\n 'REUSE': 'REUSE',\n 'ACQUISITION': 'ACQUISITION'\n };\n var CREDIT_TYPE = {\n 'CORE': 'CORE',\n 'SAC': 'SAC',\n 'NI': 'NI',\n 'EZP': 'EZP',\n 'BA': 'BA'\n };\n\n // track interstitials\n var CREDIT_BANNER_DISPLAY_COUNT_MAX = 1;\n var CREDIT_BANNER_DISPLAY_COUNT_KEY = 'credit_banner_display_count_key';\n $scope.locale = _squid.$locale;\n\n $scope.isNewMember = function () {\n var newMember = $scope.parentContext && $scope.parentContext.newMember;\n if (!newMember) {\n return false;\n }\n\n return newMember.variant === 'one_page' || newMember.variant === 'design_2' || newMember.variant === 'design_3';\n };\n\n // Returns false to use existing logic, true to hide the banner.\n var isNewMemberDecisionToHideBanner = function isNewMemberDecisionToHideBanner() {\n if (!$scope.isNewMember()) {\n return false;\n }\n\n // If we get to this point, it means it is new member traffic.\n // Hide banner when useCEPDEcision is set to false.\n var newMember = $scope.parentContext && $scope.parentContext.newMember;\n\n if (newMember.useCEPDecision) {\n return !newMember.creditOffer;\n } else {\n return true;\n }\n };\n\n var buildCreditOfferFptiObject = function buildCreditOfferFptiObject(query) {\n var Device = '';\n\n if (!_index.$DeviceInfo.isDevice()) {\n Device = 'Desktop';\n } else if (_index.$DeviceInfo.isTablet()) {\n Device = 'Tablet';\n } else {\n Device = 'Mobile';\n }\n var defaultValues = {\n 'buyer_country': _squid.$locale.country,\n 'locale': _squid.$locale.lang,\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'EC-Token',\n 'device_type': Device,\n 'from': 'PERSONALIZATION',\n 'to': 'PERSONALIZATION_CREDIT',\n 'banner_type': query.PresentmentStyle + '-' + query.PresentmentType\n };\n var creditOfferFptiMapObject = {\n 'VisaActive': 'visa_active',\n 'MerchantUpstreamPresentment': 'merchant_presented_banner',\n 'Product': 'product_identifier',\n 'OfferCategory': 'offer_category',\n 'OfferType': 'credit_offer_type',\n 'OfferTextTemplate': 'credit_offer_text',\n 'incentiveOfferProgramId': 'incentive_offer_program_id',\n 'incentiveOfferValue': 'incentive_offer_value',\n 'CartAmountVisible': 'cart_show_amt',\n 'NumberOfFIs': 'funding_instrument_count',\n 'Propensity': 'model_propensity',\n 'Approvability': 'credit_user_approvability',\n 'campaignId': 'caid'\n };\n var queryValues = {};\n\n for (var key in creditOfferFptiMapObject) {\n if (query[key] !== null && typeof query[key] !== 'undefined') {\n queryValues[creditOfferFptiMapObject[key]] = query[key];\n }\n }\n\n return Object.assign({}, defaultValues, queryValues);\n };\n\n var buildPSMonitoringObject = function buildPSMonitoringObject(message, bannerType, err) {\n var psMonitorObject = { 'token': _angular.$rootScope.token };\n if (err) {\n psMonitorObject.m_err = err;\n } else {\n psMonitorObject.m_prod_type = message.PresentmentStyle + '_' + message.PresentmentType;\n psMonitorObject.message = message.OfferType;\n psMonitorObject.m_udf1 = message.OfferCategory;\n psMonitorObject.m_udf2 = message.VisaActive;\n psMonitorObject.m_udf3 = message.MerchantUpstreamPresentment;\n psMonitorObject.m_inptype = !!message.incentiveOfferProgramId;\n psMonitorObject.type = message.OfferTextTemplate;\n }\n psMonitorObject.msgClass = ($scope.showPassiveBanner ? 'Passive' : 'Prominent') + '_' + bannerType;\n psMonitorObject.m_trdtype = $scope.showIncentiveBanner;\n psMonitorObject.m_event = $scope.banner.offerType;\n psMonitorObject.m_chnl = 'Desktop';\n if (_index.$DeviceInfo.isDevice()) {\n psMonitorObject.m_chnl = _index.$DeviceInfo.isTablet() ? 'Tablet' : 'Mobile';\n }\n return psMonitorObject;\n };\n\n var hideBannerForNewMember = isNewMemberDecisionToHideBanner();\n\n var getDefaultBanner = function getDefaultBanner(bannerType, useCase, creditType, amount, termsLink) {\n _logger.$logger.info('getDefaultBanner(): bannerType(' + bannerType + '), useCase(' + useCase + '), creditType(' + creditType + ')');\n if (bannerType === BANNER_TYPES.PROMINENT) {\n if (useCase === USE_CASE.ACQUISITION) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferSmallTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferTitleWithAmountZero'),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferLargeTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferEZPTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval')\n };\n }\n } else if (useCase === USE_CASE.REUSE) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmall', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmallDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferLarge', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferEZP', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.assetLite.cycoOfferBtn')\n };\n }\n }\n } else if (useCase === USE_CASE.ACQUISITION) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferTitleWithAmountZero'),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveNIDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveEZPDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveEZPCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval')\n };\n }\n }\n };\n\n var getReuseOfferInfo = function getReuseOfferInfo(creditType, termsLink, amount) {\n _logger.$logger.info('getReuseOfferInfo(): creditType(' + creditType + ')');\n if (!amount || amount === '') {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferAmountZeroDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmallDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferLargeDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferEZPDetails', { cartAmount: amount })\n };\n }\n };\n\n var isCreditTxnLowerThanThreshold = function isCreditTxnLowerThanThreshold() {\n var transactionAmount = $scope.getTransactionAmount();\n var largeEligibleAmount = _index2.$CreditOptionsModel.largeEligibleAmount[_squid.$locale.country];\n\n _logger.$logger.info('transactionAmount_sacEligibleAmount', {\n transactionAmount: transactionAmount,\n largeEligibleAmount: largeEligibleAmount\n });\n return transactionAmount < largeEligibleAmount;\n };\n\n var getCreditType = function getCreditType() {\n // Check if there is an offer already selected\n // This is the scenario where user has EZP but selects SAC or NI\n var instModel = _index3.$CreditInstallmentModel.instance($scope.token);\n var creditType = void 0;\n var resolution = void 0;\n\n if ($scope.isBillingNoPurchase) {\n creditType = CREDIT_TYPE.BA;\n resolution = 'BA_NOP';\n } else if (instModel && instModel.creditType === CREDIT_TYPE.SAC) {\n creditType = CREDIT_TYPE.SAC;\n resolution = 'SAC_SELECTED';\n } else if (instModel && instModel.creditType === CREDIT_TYPE.NI) {\n creditType = CREDIT_TYPE.NI;\n resolution = 'NI_SELECTED';\n } else if ($scope.banner && $scope.banner.offerType) {\n // Check MORS offer type\n creditType = $scope.banner.offerType;\n resolution = 'MORS';\n } else if ($scope.installmentOptionsPresent) {\n // Check SSOT response + installment eligibility\n creditType = CREDIT_TYPE.EZP;\n resolution = 'SSOT_INST';\n } else if ($scope.largeOfferType) {\n // Check SSOT response\n creditType = $scope.largeOfferType;\n resolution = 'SSOT_LARGE_OFFER';\n } else if (!isCreditTxnLowerThanThreshold()) {\n creditType = CREDIT_TYPE.NI;\n resolution = 'CART_NI';\n } else {\n creditType = CREDIT_TYPE.CORE;\n resolution = 'CART_CORE';\n }\n\n return {\n creditType: creditType,\n resolution: resolution\n };\n };\n\n var incrementTreatmentBannerDisplayedCount = function incrementTreatmentBannerDisplayedCount(localStorageKey) {\n _logger.$logger.info('Inside incrementTreatmentBannerDisplayedCount');\n if (_squid.$util.localStorageEnabled()) {\n var public_device_key = 'public_device_test';\n var credit_banner_displayed_count = void 0;\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest !== 'true') {\n // don't overuse localStorage as there is a size limit\n credit_banner_displayed_count = localStorage.getItem(localStorageKey) || 0;\n _logger.$logger.info('incrementTreatmentBannerDisplayedCount: credit_banner_displayed_count' + credit_banner_displayed_count);\n credit_banner_displayed_count++;\n localStorage.setItem(localStorageKey, credit_banner_displayed_count.toString());\n _logger.$logger.info('incrementTreatmentBannerDisplayedCount: credit_banner_displayed_count' + credit_banner_displayed_count);\n }\n }\n };\n\n var isTreatmentCapped = function isTreatmentCapped(result, maxCount) {\n _logger.$logger.info('Inside isTreatmentCapped');\n if (_squid.$util.localStorageEnabled()) {\n var public_device_key = 'public_device_test';\n var credit_banner_displayed_count = void 0;\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest === 'true') {\n // don't overuse localStorage as there is a size limit\n localStorage.removeItem(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n } else {\n credit_banner_displayed_count = localStorage.getItem(CREDIT_BANNER_DISPLAY_COUNT_KEY) || 0;\n _logger.$logger.info('isTreatmentCapped: credit_banner_displayed_count' + credit_banner_displayed_count);\n if (angular.isNumber(maxCount) && maxCount <= credit_banner_displayed_count) {\n _logger.$logger.info('Banner/interstitial treatment is capped');\n return true;\n }\n }\n }\n\n return false;\n };\n\n var isTreatmentIneligible = function isTreatmentIneligible(result, maxCount, localStorageKey) {\n if (CREDIT_TYPE.EZP === getCreditType().creditType) {\n _logger.$logger.info('INST available, Returning to control since its installments');\n return true;\n }\n\n if (isTreatmentCapped(result, maxCount, localStorageKey)) {\n _logger.$logger.info('Treatment Capped');\n return true;\n }\n\n return false;\n };\n\n var shouldSetInterstitial = function shouldSetInterstitial(result) {\n if (isCreditTxnLowerThanThreshold() || isTreatmentIneligible(result, CREDIT_BANNER_DISPLAY_COUNT_MAX, CREDIT_BANNER_DISPLAY_COUNT_KEY)) {\n _logger.$logger.info('setInterstitial: returning false (should not show interstitial)');\n return false;\n }\n var isMobileOrTablet = _index.$DeviceInfo.isDevice();\n\n if (isMobileOrTablet) {\n _logger.$logger.info('setInterstitial: returning false for mobile devices');\n return false;\n }\n\n _logger.$logger.info('setInterstitial: treatment is eligible and not capped');\n incrementTreatmentBannerDisplayedCount(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n return true;\n };\n\n var getInterstitialContent = function getInterstitialContent(params) {\n if (params.showDynamic) {\n $scope.creditOfferModel.fireInterstitialBeacon();\n return $scope.creditOfferModel.getInterstitialContent();\n } else {\n var interstitialContent = {};\n interstitialContent.messageId = 'JS-NI-Interstitial';\n interstitialContent.bodyText = 'No Interest if paid in full in 6 months for your purchase of ' + params.cart_amount;\n interstitialContent.bodyText2 = 'This offer is always available for purchases of $99+';\n interstitialContent.termsText = 'Subject to credit approval.';\n interstitialContent.termsText2 = 'Interest will be charged to your account from the purchase date if ' + 'the balance is not paid in full within 6 months. Minimum monthly ' + 'payments required.';\n interstitialContent.termsLink = 'https://www.billmelater.com/cm/paypal/landers/18ppcTERMS.html';\n interstitialContent.termsLinkText = 'See terms';\n interstitialContent.ctaText = 'Apply Now';\n return interstitialContent;\n }\n };\n\n var showInterstitial = function showInterstitial() {\n _logger.$logger.info('acq_banner', {\n 'from': 'xo_review',\n 'to': 'prepare_banner_interstitial'\n });\n\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped && $scope.creditOfferModel.hasInterstitialMessage()) {\n var interstitialMessage = Object.assign({}, $scope.creditOfferModel.getInterstitialMessage().content.json, { campaignId: $scope.creditOfferModel.getInterstitialMessage().id });\n\n _logger.$logger.info('checkout_fpti', buildCreditOfferFptiObject(interstitialMessage));\n _logger.$logger.createCalRootTxn(buildPSMonitoringObject(interstitialMessage, 'Interstitial', null), 'hermes_personalization');\n }\n\n var interstitialParams = {\n cart_amount: $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''),\n showDynamic: $scope.creditOfferModel && $scope.creditOfferModel.isRamped && $scope.creditOfferModel.hasInterstitialMessage()\n };\n\n return _uiRouter.$state.go('checkout.bannerInterstitial', {\n creditInterstitialTreatment: $scope.creditInterstitialTreatment,\n banner: getInterstitialContent(interstitialParams)\n }, {\n location: false\n });\n };\n\n var renderBanner = function renderBanner() {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T2' });\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutSession: _index2.$CheckoutSessionModel.instance($scope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance($scope.token),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance($scope.token),\n payee: _index2.$CheckoutPayeeModel.instance($scope.token)\n }).then(function () {\n $scope.creditData = _index3.$CreditDataModel.instance($scope.token);\n }).then(function () {\n var merchantId = $scope.payee.getId();\n var country = _squid.$locale.country;\n\n // Exit early for non UK countries\n if (country !== 'GB') {\n return _angular.$q.when();\n }\n\n // pxp for banner ramp in UK\n return (0, _squid.$pxp)('xo_hermes_cape_migration_UK', {\n 'ctx.COUNTRY': _squid.$locale.country,\n 'ctx.merchantID': merchantId,\n 'uid': merchantId\n }, 'xo_cape_migration_UK.*', false, true).then(function (result) {\n if (result && result.treatment_name === 'xo_cape_migration_UK_test') {\n $scope.isUKBannerEligible = true;\n }\n return _angular.$q.when();\n });\n }).then(function () {\n $scope.placementCode = '210004';\n $scope.presentation_types = ['PayPalCreditCheckout'];\n $scope.pu_type = 'PERSONAL';\n $scope.overrideLogoUrl = true;\n var morsCallFailed = false;\n var ssotCallFailed = false;\n\n /** --------------------------------------------------\n ** Populate credit offers and $scope.showBml\n ** -------------------------------------------------- */\n $scope.creditOffer = $scope.checkoutSession.creditOffer;\n $scope.creditOfferIntensity = 0;\n _logger.$logger.info('creditOffer: ' + $scope.creditOffer);\n $scope.buyerCountry = _squid.$locale.country;\n\n var isCoreSACEligible = $scope.creditOffer;\n isRedirectFromCape = $scope.creditData.isRedirectFromCape();\n\n $scope.isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n if ($scope.isBillingNoPurchase) {\n isCreditInWallet = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n isCreditInWallet = _squid.$util.find(plans, function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n\n $scope.checkIfSelectFiDisplayedBanner = function (showBanner) {\n var current = _uiRouter.$state.current;\n\n\n if (showBanner && current.name === 'checkout.selectFi') {\n _angular.$rootScope.hideBanner = true;\n } else if (_angular.$rootScope.hideBanner) {\n showBanner = false;\n }\n return showBanner;\n };\n\n // Banner for US installments and for all banners in UK\n var showBannerRules = function showBannerRules() {\n if (_squid.$locale.country === 'GB') {\n $scope.offerTypeKey = $scope.installmentOptionsPresent && !$scope.checkoutCart.isBilling() ? 'offers.bmlInstallmentTitle' : $scope.isBmlOfferSmallOrLarge(ACQ_Banner_Type);\n // FPTI tracking\n _logger.$logger.info('isUkBannerEligible ' + $scope.isUKBannerEligible);\n\n if ($scope.isUKBannerEligible && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n // UK banner eligible for credit test group\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'test_ACQUISITION'\n });\n } else if (!$scope.isUKBannerEligible && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n // UK banner eligible for credit control group (will not see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'control_ACQUISITION'\n });\n }\n\n if ($scope.checkoutCart.isBilling()) {\n return $scope.showUKBanner && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer) && !isCreditInWallet;\n } else if ($scope.showUKBanner && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n return true;\n } else {\n return false;\n }\n } else {\n return !isCreditInWallet && $scope.installmentOptionsPresent && !isRedirectFromCape;\n }\n };\n\n // Logic to determine is CYCO is shown in acquisiton and reuse\n // Warning: This value is being stored and used in other Hermes components (such as xo-review)\n var showCYCORules = function showCYCORules() {\n var commonRules = isCreditInWallet && $scope.checkoutSession.creditInstallmentOffer && $scope.installmentOptionsPresent;\n\n if (_squid.$locale.country === 'GB') {\n return $scope.showUKBanner && commonRules;\n } else {\n return commonRules;\n }\n };\n\n /**\n * This function is to determine that the offer is large offer (transaction amount >= 99) or\n * smaller (transaction amount < 99) to display appropriate text on ui\n * @returns bmlExistingSmall/LargeOffer\n */\n $scope.isBmlOfferSmallOrLarge = function (bannerType) {\n var key = void 0;\n\n if ($scope.isBmlOfferLarge()) {\n key = bannerType === ACQ_Banner_Type ? 'offers.bmlOfferLargeTitle' : 'offers.bmlExistingOfferLarge';\n } else {\n key = bannerType === ACQ_Banner_Type ? 'offers.bmlOfferSmallTitle' : 'offers.bmlExistingOfferSmall';\n }\n return key;\n };\n\n // small refactor of isBmlOfferSmallOrLarge() function\n $scope.isBmlOfferLarge = function () {\n var transactionAmount = $scope.getTransactionAmount();\n var sacEligibleAmount = _index2.$CreditOptionsModel.sacEligibleAmount[_squid.$locale.country];\n\n return transactionAmount >= sacEligibleAmount;\n };\n\n $scope.getTransactionAmount = function () {\n var transactionAmount = $scope.checkoutCart.get('purchase.amounts.total.amount');\n\n return parseFloat(transactionAmount) || 0;\n };\n\n if ($scope.buyerCountry === 'US' && $scope.creditOffer) {\n if ($scope.isBmlOfferLarge()) {\n $scope.creditOfferIntensity = 1;\n } else {\n $scope.creditOfferIntensity = 2;\n }\n $scope.installment.creditOfferIntensity = $scope.creditOfferIntensity;\n }\n\n var executeSsotCall = function executeSsotCall(silent) {\n _logger.$logger.info('executeSsotCall');\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutAppData.merchant.merchant_country === _squid.$locale.country && !$scope.isBillingNoPurchase) {\n var offers = new _index3.$CreditInstallmentOptionsModel({\n id: $scope.token,\n payee: $scope.payee,\n checkoutCart: $scope.checkoutCart,\n checkoutAppData: $scope.checkoutAppData,\n isMemberCredit: true\n });\n\n var processInstallmentResponse = function processInstallmentResponse(result) {\n $scope.installmentOptionsPresent = $scope.installment.installmentOptionsPresent = offers.getInstallmentOptionsPresent();\n $scope.installmentCount = offers.getInstallmentCount();\n $scope.creditOffers = offers.getInstallmentOffers();\n $scope.showUKBanner = _squid.$locale.country === 'GB' && ($scope.checkoutAppData.is_second_button_txn || $scope.isUKBannerEligible);\n $scope.largeOfferType = offers.getNiOfferPresent();\n\n if ($scope.buyerCountry === 'US') {\n $scope.installment.showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showBannerRules());\n $scope.installment.showWalletBanner = showBannerRules();\n } else {\n $scope.installment.showBanner = showBannerRules();\n }\n $scope.installment.showCYCO = showCYCORules();\n $scope.showCYCO = $scope.installment.showCYCO; // this is being used in the template for pink banner UK link content\n var hideSacBanner = $scope.installment.showBanner || isRedirectFromCape || _squid.$locale.country === 'GB';\n $scope.showBml = hideSacBanner ? false : isCoreSACEligible;\n\n // Logging when Both BA and EZP enabled.\n if ($scope.checkoutCart.isBilling() && $scope.installmentOptionsPresent && $scope.offerTypeKey === 'offers.bmlInstallmentTitle') {\n _logger.$logger.info('RYI SSOT call: Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found') + ' has both BA and EZP enabled');\n }\n };\n\n return offers.save({\n silent: silent,\n cache: true,\n params: {\n txnAmount: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n success: function success(result) {\n _logger.$logger.info('executeSsotCall succeeded');\n processInstallmentResponse(result);\n },\n error: function error(err) {\n _logger.$logger.error('executeSsotCall error', { error: err });\n ssotCallFailed = true;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n return _logger.$logger.info('GET_INSTALLMENT_CONTINGENCY');\n }\n }\n });\n } else {\n return (0, _angular.$q)(function (resolve) {\n var hideSacBanner = isRedirectFromCape || _squid.$locale.country === 'GB';\n\n $scope.showBml = hideSacBanner ? false : isCoreSACEligible;\n $scope.showUKBanner = _squid.$locale.country === 'GB' && ($scope.checkoutAppData.is_second_button_txn || $scope.isUKBannerEligible);\n $scope.installment.showBanner = showBannerRules();\n\n if ($scope.checkoutCart.isBilling()) {\n _logger.$logger.info('RYI no SSOT call for this BA flow, Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found'));\n }\n resolve();\n });\n }\n };\n\n /** --------------------------------------------------\n ** Call MORS for banner\n ** -------------------------------------------------- */\n $scope.creditTerms = _squid.$config.urls.creditTerms;\n $scope.creditReuseTerms = _squid.$config.urls.creditReuseTerms;\n\n // TODO Once the Asset Lite ramp is complete, change the config credit terms urls in hermesnodeweb config.json\n $scope.creditTerms = 'https://www.paypal.com/ppclander';\n $scope.creditReuseTerms = 'https://www.paypal.com/ppclander';\n\n var mapDefaultToBanner = function mapDefaultToBanner(creditReuseTerms, creditTerms) {\n $scope.useFallbackBanner = true;\n $scope.showPassiveBanner = !isCreditInWallet;\n var creditTypeModel = getCreditType();\n\n _logger.$logger.info('mapDefaultToBanner(): creditType(' + creditTypeModel.creditType + '), resolution(' + creditTypeModel.resolution + ')');\n $scope.banner = getDefaultBanner($scope.showPassiveBanner ? BANNER_TYPES.PASSIVE : BANNER_TYPES.PROMINENT, isCreditInWallet ? USE_CASE.REUSE : USE_CASE.ACQUISITION, creditTypeModel.creditType, $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''), isCreditInWallet ? creditReuseTerms : creditTerms);\n };\n\n var mapReuseText = function mapReuseText(creditReuseTerms) {\n var creditTypeModel = getCreditType();\n\n _logger.$logger.info('mapReuseText(): creditType(' + creditTypeModel.creditType + '), resolution(' + creditTypeModel.resolution + ')');\n $scope.reuseOfferInfo = getReuseOfferInfo(creditTypeModel.creditType, creditReuseTerms, $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''));\n };\n\n var shouldCallMors = _squid.$locale.country === 'US' && $scope.placementCode && (\n // creditOffer checks acquisition eligibility; isCreditInWallet checks reuse\n $scope.checkoutSession.creditOffer || isCreditInWallet);\n\n // Shared function to create application context\n var getApplicationContext = function getApplicationContext() {\n return [{\n name: 'transaction_amount',\n value: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }, {\n name: 'transaction_currency',\n value: $scope.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }, {\n name: 'ppc_in_wallet',\n value: !!isCreditInWallet\n }, {\n name: 'ppc_default_fi',\n value: $scope.checkoutSession.get('plan.paypal_credit')\n }, {\n name: 'is_mobile',\n value: _index.$DeviceInfo.isDevice()\n }, {\n name: 'installments_not_allowed',\n value: !$scope.checkoutSession.creditInstallmentOffer || $scope.checkoutCart.isBilling()\n }, {\n name: 'is_ba_rt_no_purchase',\n value: $scope.checkoutCart.isBillingNoPurchase() && !$scope.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }];\n };\n\n var executeMorsDiscoverMessagesCall = function executeMorsDiscoverMessagesCall(silent, useContentInBanner) {\n var morsCacheId = $scope.checkoutSession.id + '-' + $scope.placementCode + '-' + !!isCreditInWallet;\n var application_context = getApplicationContext();\n\n $scope.creditOfferModel = new _marketingoffer.$CreditOfferModel({\n id: $scope.token,\n locale: _squid.$locale,\n payer: $scope.checkoutSession.payer.id || '',\n payee: $scope.payee.merchant.id || '',\n touchpoint: 'PPC_HERMES_RYI',\n message_count: 10,\n isRamped: useContentInBanner,\n application_context: application_context\n });\n\n return $scope.creditOfferModel.save({\n silent: silent,\n cache: true,\n params: $scope.creditOfferModel.getCacheKey(),\n data: $scope.creditOfferModel.serialize(),\n success: function success(result) {\n _logger.$logger.info('discover_messages_response', result);\n var ad = {};\n var recommendationFound = false;\n\n if (result && result.touchpoint_messages) {\n $scope.recommendedMessage = {};\n var bannerContent = this.model.getBannerMessage() ? this.model.getBannerMessage().content : null;\n\n if (bannerContent) {\n recommendationFound = true;\n ad = bannerContent.json;\n\n // PresentmentStyle from Personalization Studio should be mapped to MessageType in campaign studio\n ad.MessageType = ad.PresentmentStyle;\n // OfferType from Personaliation Studio should be mapped to offertype\n ad.offertype = ad.OfferType;\n\n // Credit Incentive fields\n if (ad['Incentive-OfferProgramId']) {\n ad.incentiveOfferProgramId = ad['Incentive-OfferProgramId'];\n ad.incentiveOfferValue = ad['Incentive-OfferValue'];\n ad.incentiveOfferCurrencyCode = ad['Incentive-OfferCurrencyCode'];\n ad.incentiveOfferProgramCode = ad['Incentive-OfferProgramCode'];\n }\n\n var trackingDetails = this.model.getBannerMessage().tracking_details;\n\n if (trackingDetails) {\n ad.impressionUrl = trackingDetails.impression_url;\n ad.clickUrl = trackingDetails.click_url;\n }\n\n // Message id is used for fpti tracking.\n ad.campaignId = this.model.getBannerMessage().id;\n ad.buyItemId = ad.campaignId;\n ad.placementCode = this.model.getTouchpointCode();\n $scope.recommendedMessage = ad;\n }\n }\n\n // cache recommended message only if it's ramped\n if (useContentInBanner) {\n if (recommendationFound) {\n morsCallFailed = false;\n $scope.ad = $scope.recommendedMessage;\n _angular.$rootScope.MORS[morsCacheId] = $scope.ad;\n\n if (ad.CartAmount && ad.CartAmountCurrencyCode) {\n $scope.creditData.setCartAmountAndCurrency({\n cart_amount: ad.CartAmount,\n cart_currency: ad.CartAmountCurrencyCode\n });\n }\n\n $scope.showPassiveBanner = $scope.ad['MessageType'] !== 'Prominent';\n $scope.showIncentiveBanner = $scope.ad['incentiveOfferProgramId'] !== undefined;\n $scope.banner = _xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.mapResponseToCreditBanner($scope.ad, $scope.showPassiveBanner);\n } else {\n _logger.$logger.info('MORS_recommended_message_not_found_credit');\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_empty_message';\n }\n }\n },\n error: function error(_error) {\n _logger.$logger.error('MORS_api_failure_credit', { error: _error });\n\n // Only recognize morsCallFailed if it's ramped\n if (useContentInBanner) {\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_error_' + _error.message;\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n _logger.$logger.error('MORS_api_contingency_credit', { contingency: name });\n\n if (useContentInBanner) {\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_contingency_' + name;\n }\n }\n }\n });\n };\n\n var compareAdObjects = function compareAdObjects(base, compare) {\n _logger.$logger.info('Comparing ad objects', { base_ad: base, recommended_message: compare });\n var diff = [];\n var keysToIgnore = ['campaignId', 'buyItemId', 'placementCode', 'impressionUrl', 'clickUrl', 'client_elapsed', 'req_elapsed'];\n\n if (!base) {\n diff.push('base_ad is not present');\n } else if (!compare) {\n diff.push('recommended_message is not present');\n } else {\n Object.keys(base).forEach(function (key) {\n if (keysToIgnore.indexOf(key) === -1 && (!compare[key] || compare[key] !== base[key])) {\n diff.push({\n key: key,\n expected: base[key],\n actual: compare[key]\n });\n }\n });\n }\n\n if (diff.length !== 0) {\n _logger.$logger.warn('recommended_message_warning', diff);\n }\n };\n\n var executeMorsCall = function executeMorsCall(silent) {\n var morsCacheId = $scope.checkoutSession.id + '-' + $scope.placementCode + '-' + !!isCreditInWallet;\n var walletInstruments = []; // Get wallet instruments\n\n if (isCreditInWallet) {\n walletInstruments.push({\n financial_instrument_type: 'FI_PAYPAL_CREDIT',\n financial_instrument_product_type: 'PI_TYPE_CREDIT_TXN_CARD_BML',\n preferred: isCreditInWallet.isPreferred,\n out_of_wallet: false\n });\n }\n\n var marketingOfferModel = new _marketingoffer.$MarketingOfferModel(_xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.getMorsParametersForCreditBanner($scope));\n\n return marketingOfferModel.save({\n silent: silent,\n params: {\n cacheToken: morsCacheId,\n txnAmount: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n // Ignore all errors from this api, by passing transientError as true\n transientError: true,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('MORS_response', result);\n if (marketingOfferModel.isAdFound()) {\n $scope.ad = marketingOfferModel.getTargetAd();\n $scope.showPassiveBanner = $scope.ad['MessageType'] !== 'Prominent';\n $scope.showIncentiveBanner = $scope.ad['incentiveOfferProgramId'] !== undefined;\n $scope.banner = _xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.mapResponseToCreditBanner($scope.ad, $scope.showPassiveBanner);\n $scope.base_ad = $scope.ad;\n _angular.$rootScope.MORS[morsCacheId] = $scope.ad;\n } else {\n _logger.$logger.info('MORS_ad_not_found_credit');\n morsCallFailed = true;\n }\n },\n error: function error(err) {\n _logger.$logger.error('MORS_api_failure_credit', { error: err });\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n }\n });\n };\n\n var handlePersonalizationPXPResult = function handlePersonalizationPXPResult(result) {\n _angular.$rootScope.MORS = _angular.$rootScope.MORS || {};\n $scope.banner = {};\n switch (result && result.treatment_name) {\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment1':\n // Shadow only\n // 1. Call Mors search-ads & discover-messages\n // 2. Compare response from search-ads and discover-message and log warning if they differ\n // 3. Render banner with response from search-ads\n _logger.$logger.info('Personalization: Shadow only');\n return _angular.$q.all([executeMorsCall(true), executeMorsDiscoverMessagesCall(true, false)]).then(function () {\n return compareAdObjects($scope.base_ad, $scope.recommendedMessage);\n });\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment2':\n // Shadow and Ramp\n // 1. Call mors search-ads & discover-messages\n // 2. Compare response from search-ads and discover-messages and log warning if they differ\n // 3. Render banner with response from discover-messages\n _logger.$logger.info('Personalization: Shadow and Ramp');\n return _angular.$q.all([executeMorsCall(true), executeMorsDiscoverMessagesCall(true, true)]).then(function () {\n return compareAdObjects($scope.base_ad, $scope.recommendedMessage);\n });\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment3':\n // Ramp only\n // 1. call mors discover-messages\n // 2. Render banner with response from discover-messages\n _logger.$logger.info('Personalization: Ramp only');\n $scope.overrideLogoUrl = false;\n return executeMorsDiscoverMessagesCall(true, true);\n default:\n // Should catch traffic on control or any unexpected treatment\n // 1. Call mors search-ads\n // 2. Render banner with response from search-ads\n return executeMorsCall(true);\n }\n };\n\n // TODO: Move PXP into contry sepefic directive during refactoring\n var runPxpExperiment = function runPxpExperiment(experimentName, pxpPattern, resultKey, handler) {\n if (_angular.$rootScope[resultKey]) {\n return handler(_angular.$rootScope[resultKey]);\n } else if (_app.$PXPBlacklist.isMerchantBlacklisted($scope.payee.merchant.id)) {\n // Skip pxp and will default to control\n return handler();\n } else {\n // Call PXP\n return (0, _squid.$pxp)(experimentName, { 'ctx.COUNTRY': _squid.$locale.country }, pxpPattern, false, true).then(function (result) {\n _angular.$rootScope[resultKey] = result;\n return handler(result);\n });\n }\n };\n\n // Don't make SSOT call if MORS is being called, unless it fails\n if (shouldCallMors) {\n return _angular.$q.when().then(function () {\n return runPxpExperiment('xo_hermesnodeweb_us_ppc_personalization', 'xo_hermesnodeweb_us_ppc_personalization.*', 'creditPersonalizationPXPResult', handlePersonalizationPXPResult);\n })['finally'](function () {\n if (morsCallFailed) {\n return executeSsotCall(true)['finally'](function () {\n if (ssotCallFailed) {\n _logger.$logger.info('SSOT call failed; cannot determine EZP');\n }\n\n mapReuseText($scope.creditReuseTerms);\n mapDefaultToBanner($scope.creditReuseTerms, $scope.creditTerms);\n });\n } else {\n // Process installment response separately\n $scope.showBml = !isRedirectFromCape && isCoreSACEligible;\n $scope.installmentOptionsPresent = $scope.installment.installmentOptionsPresent = $scope.banner.offerType === CREDIT_TYPE.EZP;\n\n var showInstBanner = $scope.installmentOptionsPresent && !isCreditInWallet && !isRedirectFromCape;\n\n $scope.installment.showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showInstBanner);\n $scope.installment.showWalletBanner = showInstBanner;\n $scope.installment.showCYCO = isCreditInWallet && $scope.checkoutSession.creditInstallmentOffer && $scope.banner.offerType === CREDIT_TYPE.EZP;\n mapReuseText($scope.creditReuseTerms);\n\n // Logging when Both BA and EZP enabled.\n if ($scope.checkoutCart.isBilling() && $scope.installmentOptionsPresent) {\n _logger.$logger.info('RYI MORS call: Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found') + ' has both BA and EZP enabled');\n }\n }\n });\n } else {\n return executeSsotCall(false);\n }\n }).then(function () {\n var handleInterstitialTreatment = function handleInterstitialTreatment(result) {\n var treatmentName = 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial_treatment_1';\n var treatmentVariant = 1;\n\n $scope.creditInterstitialTreatment = null;\n if (result && result.treatment_name === treatmentName) {\n $scope.creditInterstitialTreatment = treatmentVariant;\n _logger.$logger.info('Showing \"' + treatmentName + '\"');\n $scope.isRedirectingToInterstitial = true;\n showInterstitial();\n }\n _logger.$logger.info('checkout_fpti', {\n 'ppc_acq_interstitial_variant_displayed': $scope.isRedirectingToInterstitial ? treatmentVariant : 0\n });\n return result;\n };\n\n // TODO: Move into country specific directives during refactor\n var runPxpExperiment = function runPxpExperiment(experimentName, pxpPattern, resultKey, handler) {\n // US814332 HERMES-OPTIMIZE: Acquisition banner test\n if (!hideBannerForNewMember && $scope.showBml && _squid.$locale.country === 'US' && !$scope.isRedirectingToInterstitial && $scope.showPassiveBanner !== undefined && !$scope.showPassiveBanner && ($scope.creditOfferModel && $scope.creditOfferModel.isRamped || !$scope.isBillingNoPurchase)) {\n\n if (_angular.$rootScope[resultKey]) {\n return handler(_angular.$rootScope[resultKey]);\n } else if (_app.$PXPBlacklist.isMerchantBlacklisted($scope.payee.merchant.id)) {\n // skip pxp and assume control\n return handler();\n } else {\n // Call PXP\n return (0, _squid.$pxp)(experimentName, { 'ctx.COUNTRY': _squid.$locale.country }, pxpPattern, false, true).then(function (result) {\n _angular.$rootScope[resultKey] = result;\n return handler(result);\n });\n }\n }\n };\n\n $scope.isRedirectingToInterstitial = false;\n return _angular.$q.when().then(function () {\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped) {\n // This means that we're getting our content from\n // the new /message-recommendations API\n if ($scope.creditOfferModel.hasInterstitialMessage() && !isTreatmentCapped(null, CREDIT_BANNER_DISPLAY_COUNT_MAX)) {\n incrementTreatmentBannerDisplayedCount(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n return runPxpExperiment('xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial', 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial.*', 'creditInterstitialPXPResult', handleInterstitialTreatment);\n }\n } else if (shouldSetInterstitial()) {\n return runPxpExperiment('xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial', 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial.*', 'creditInterstitialPXPResult', handleInterstitialTreatment);\n }\n });\n }).then(function () {\n // Add all reuse banner experience here.\n /**\n * Returns true if the buyer has a installment plan to use for this payment.\n * @returns boolean true if there is a installment plan(there can be other offers like sac with installments). false if not.\n */\n $scope.isEZP = function () {\n return CREDIT_TYPE.EZP === getCreditType().creditType;\n };\n\n /**\n * Only show PPC Reuse banner if:\n * Country is US or UK & Credit is not default AND There is credit in wallet AND pxp variant has banner\n **/\n $scope.showReuseBanner = function () {\n // FPTI tracking\n if (!$scope.fptiTrigger && _squid.$locale.country === 'GB') {\n if ($scope.showReuseBannerFlag) {\n // UK reuse banner eligible for credit test group (will see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'test_REUSE'\n });\n $scope.fptiTrigger = true;\n } else {\n // UK reuse banner eligible for credit control (will not see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'control_REUSE'\n });\n $scope.fptiTrigger = true;\n }\n }\n\n if (!$scope.usCreditBannerFptiFired && $scope.usReusePXPLoaded && $scope.buyerCountry === 'US') {\n $scope.usCreditBannerFptiFired = true;\n\n if ($scope.showReuseBannerFlag) {\n if ($scope.ad) {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.REUSE + '_' + $scope.ad['MessageType'] + '_MORS',\n 'caid': $scope.ad['campaignId']\n });\n _logger.$logger.info('MORS_ad_displayed_credit_' + USE_CASE.REUSE + '_' + $scope.ad['MessageType']);\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.REUSE + '_' + BANNER_TYPES.PASSIVE + '_MORSfallback'\n });\n _logger.$logger.info('MORS_fallback_ad_displayed_credit_' + USE_CASE.REUSE + '_' + BANNER_TYPES.PASSIVE);\n }\n } else {\n _logger.$logger.info('checkout_fpti', { 'banner_type': 'reuse_banner_not_shown' });\n }\n }\n return $scope.showReuseBannerFlag;\n };\n\n // The default plan is at different places in session for billing agreements without purchase and other use cases.\n // for billing agreement without purchase, it is set at futurePayment.isCreditInWallet.\n // for other usecases it is set at fundingOptions.plans.\n var isCreditInWalletForBAWithoutPurchase = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n\n // For billing agreement without purchase, show banner if the user has credit in wallet, but is not the sticky fi.\n // for others, show banner if the use has credit in wallet and the default plan is not credit.\n var creditInWalletButNotDefault = true;\n\n if ($scope.isBillingNoPurchase) {\n var stickyFi = $scope.checkoutSession.getSelectedStickyInstrument();\n\n creditInWalletButNotDefault = isCreditInWalletForBAWithoutPurchase && !(stickyFi.type === 'BILL_ME_LATER');\n } else {\n $scope.isCreditDefault = $scope.checkoutSession.get('plan.paypal_credit');\n creditInWalletButNotDefault = isCreditInWallet && !$scope.isCreditDefault;\n }\n\n $scope.showPPCLogo = true;\n // Start by saying no to banner and update to true when necessary.\n $scope.showReuseBannerFlag = false;\n // This is used by reuse usecase as well as acq usecase.\n $scope.installment.showCreditExample = $scope.showUKBanner && (creditInWalletButNotDefault || $scope.installment.showBanner || $scope.creditOffer);\n\n // Early exits for use cases where re-use banners are not applicable.\n // We only show reuse banners to GB and US users today.\n if (_squid.$locale.country !== 'GB' && _squid.$locale.country !== 'US') {\n return _angular.$q.when();\n }\n\n // We do not show banners for new members\n if (hideBannerForNewMember) {\n return _angular.$q.when();\n }\n\n if (_squid.$locale.country === 'GB') {\n if (($scope.showUKBanner && !isRedirectFromCape || $scope.checkoutCart.isBillingNoPurchase()) && creditInWalletButNotDefault) {\n $scope.reuseOfferTypeKey = $scope.installmentOptionsPresent && !$scope.checkoutCart.isBilling() ? 'offers.bmlExistingOfferInstallment' : $scope.isBmlOfferSmallOrLarge();\n $scope.showReuseBannerFlag = true;\n } else {\n $scope.showReuseBannerFlag = false;\n }\n return _angular.$q.when();\n } else if (_squid.$locale.country === 'US') {\n var showBanner = false;\n\n if (creditInWalletButNotDefault && !(isRedirectFromCape && isCreditInWallet)) {\n showBanner = true;\n }\n\n showBanner = $scope.checkIfSelectFiDisplayedBanner(showBanner);\n if (showBanner === true) {\n // pxp for banner ramp in US\n return (0, _squid.$pxp)('xo_hermesnodeweb_us_ryi_ppc_reuse_banner', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_us_ryi_ppc_reuse_banner.*', false, true).then(function (result) {\n $scope.usReusePXPLoaded = true;\n if (result && result.treatment_name === 'xo_hermesnodeweb_us_ryi_ppc_reuse_banner_none') {\n $scope.showReuseBannerFlag = false;\n } else {\n $scope.showReuseBannerFlag = true;\n }\n return _angular.$q.when();\n });\n } else {\n $scope.showReuseBannerFlag = false;\n return _angular.$q.when();\n }\n }\n }).then(function () {\n $scope.selectExistingBml = function () {\n if ($scope.ad) {\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.clickUrl);\n }\n\n if ($scope.isBillingNoPurchase) {\n var fpList = $scope.checkoutSession.get('futurePaymentInstruments');\n var bml = fpList.find(function (fp) {\n return fp.type === 'BILL_ME_LATER';\n });\n\n return $scope.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: bml.instrument_id\n },\n success: function success() {\n $scope.showReuseBannerFlag = false;\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n var fiList = $scope.checkoutSession.get('fundingOptions.instruments');\n var fundingSource = _squid.$util.find(fiList, function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n\n return $scope.checkoutSession.fundingOptions.action('select', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: fundingSource.planId\n },\n success: function success(result) {\n $scope.showReuseBannerFlag = false;\n // Update selectedmethod if provided, to reflect in multipleFi on RYI choice variant\n if ($scope.selectedmethod) {\n $scope.selectedmethod.index = 0;\n $scope.selectedmethod.planId = $scope.checkoutSession.get('plan.sources')[0].id;\n }\n\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n $scope.checkoutSession.installments = result.installments;\n }\n if (fundingSource.type === 'CREDIT' && $scope.installment.showCYCO) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n if (!fundingSource.selected) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n if ($scope.checkoutSession.selectedInstallmentData && !$scope.checkoutSession.selectedInstallmentData.preventChange) {\n // Resetting selected installment data, if installment change is not explicitly prohibited.\n $scope.checkoutSession.selectedInstallmentData = undefined;\n }\n }\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n }\n };\n\n $scope.getBmlOfferTitle = function (suffix, data) {\n if ($scope.creditOfferIntensity === 1) {\n return $scope.htmlContent('offers.bmlOfferLargeTitle' + suffix, data);\n } else if ($scope.creditOfferIntensity === 2) {\n return $scope.htmlContent('offers.bmlOfferSmallTitle' + suffix, data);\n } else {\n return '';\n }\n };\n\n if ($scope.buyerCountry === 'US') {\n $scope.bmlOfferTitle = $scope.getTransactionAmount() === 0 ? $scope.htmlContent('offers.bmlOfferTitleWithAmountZero') : $scope.getBmlOfferTitle('WithAmount', {\n cartAmount: $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', '')\n });\n\n // US766704: for use in xo-wallet\n $scope.installment.bmlOfferTitle = $scope.bmlOfferTitle;\n }\n\n $scope.showAcquisitionBanner = function () {\n var showBanner = void 0;\n\n showBanner = $scope.showBml && $scope.buyerCountry !== 'GB';\n\n // Combine acquisition banner and installment banner logic\n // TODO: Refactor all of this after control is removed - there needs to be clear separation between\n // countries, and installment acquisition banner logic should be in this function\n showBanner = showBanner || $scope.installment.showBanner;\n showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showBanner);\n\n if ($scope.installment.showPPCAcquisitionRadioButton && !$scope.radio) {\n showBanner = false;\n }\n\n if (!$scope.usCreditBannerFptiFired && showBanner && $scope.banner && $scope.buyerCountry === 'US') {\n $scope.usCreditBannerFptiFired = true;\n\n if ($scope.ad) {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.ACQUISITION + '_' + $scope.ad['MessageType'] + '_MORS',\n 'caid': $scope.ad['campaignId']\n });\n _logger.$logger.info('MORS_ad_displayed_credit_' + USE_CASE.ACQUISITION + '_' + $scope.ad['MessageType']);\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.ACQUISITION + '_' + BANNER_TYPES.PASSIVE + '_MORSfallback'\n });\n _logger.$logger.info('MORS_fallback_ad_displayed_credit_' + USE_CASE.ACQUISITION + '_' + BANNER_TYPES.PASSIVE);\n }\n }\n\n return showBanner;\n };\n\n $scope.bml = function () {\n if ($scope.ad) {\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.clickUrl);\n }\n\n if ($scope.installment.showBanner && $scope.installmentOptionsPresent) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n _uiRouter.$state.go('checkout.redirectToCape');\n }\n };\n }).then(function () {\n // we only show the xo-offer-top-banner in certain scenarios\n // based on pxp: xo_hermesnodeweb_us_ryi_ppc_ppcacquisitionbanner_v2\n if (!$scope.fptiCreditBannerTrigger && $scope.buyerCountry === 'US' && ($scope.showReuseBanner() || $scope.showAcquisitionBanner())) {\n\n $scope.fptiCreditBannerTrigger = true;\n var isBalanceCoveringPurchase = false;\n\n if (!$scope.isBillingNoPurchase) {\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n\n isBalanceCoveringPurchase = _squid.$util.find(plans, function (fi) {\n return fi && fi.primaryFs && !fi.secondaryFIs && fi.primaryFs.name === 'BALANCE';\n });\n }\n\n var fundingInstruments = void 0;\n\n if ($scope.isBillingNoPurchase) {\n fundingInstruments = $scope.checkoutSession.get('futurePaymentInstruments');\n } else {\n fundingInstruments = $scope.checkoutSession.get('fundingOptions.instruments');\n }\n // here we are calculating the number of FIs that are applicable for this transaction.\n // Balance counts as a standalone FI only if it covers the full txn amount.\n var fiApplicableForThisTransaction = 0;\n\n if (fundingInstruments && fundingInstruments.length > 0) {\n fundingInstruments.forEach(function (fundingOption, index) {\n if (fundingOption.type !== 'BALANCE' || isBalanceCoveringPurchase) {\n fiApplicableForThisTransaction++;\n }\n });\n }\n var userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && $scope.checkoutCart.get('purchase.items.length', 0) <= 0;\n\n (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id'), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped) {\n var BannerMessage = Object.assign({}, $scope.recommendedMessage, { CartAmountVisible: showAmount }, { NumberOfFIs: fiApplicableForThisTransaction });\n\n _logger.$logger.info('checkout_fpti', buildCreditOfferFptiObject(BannerMessage));\n _logger.$logger.createCalRootTxn(buildPSMonitoringObject(BannerMessage, 'Banner', discoverMessageError), 'hermes_personalization');\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'cart_show_amt': showAmount,\n 'funding_options_instruments': fiApplicableForThisTransaction\n });\n }\n });\n }\n }).then(function () {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T3' });\n });\n };\n\n renderBanner();\n $scope.$watch('checkoutCart.grossTotalAmount', function () {\n var newVal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var oldVal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!newVal.value || !oldVal.value || !newVal.currency || !oldVal.currency) {\n return;\n }\n\n var hasNewValue = newVal.value !== oldVal.value;\n var hasNewCurrency = newVal.currency !== oldVal.currency;\n\n if (hasNewValue || hasNewCurrency) {\n return renderBanner();\n }\n }, true);\n }]\n };\n});\n\n_uiRouter.$state;\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$DeviceInfo;\n\n_xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils;\n\n_app.$PXPBlacklist;\n\n_auth.$AuthModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CreditOptionsModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index2.$CheckoutSessionModel;\n\n_pxp.$pxpCartAmt;\n\n_marketingoffer.$MarketingOfferModel;\n\n_marketingoffer.$CreditOfferModel;\n\n_marketingoffer.$fireMORSBeacon;\n\n_index3.$CreditInstallmentModel;\n\n_index3.$CreditDataModel;\n\n_index3.$CreditInstallmentOptionsModel;\n\n_xoCreditBannerConstants.COUNTRY_CODE;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/offer/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n\\n \\n\\n
\\n \\n \\n {{reuseOfferInfo.termsLinkText}}\\n \\n \\n \\n \\n
\\n\\n
\\n\\n \\n\\n
\\n\\n \\n
\\n
\\n
\\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n
\\n
\\n \\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n\\n \\n
\\n \\n
\\n
\\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n
\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n\\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n\\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n\\n \\n \\n \\n \\n
\\n\\n

\\n

\\n

\\n \\n \\n

\\n
\\n
\\n\\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n \\n \\n \\n \\n
\\n

\\n

\\n \\n
\\n
\\n
\\n\\n \\n\\n \\n\\n
\\n \\n
\\n\\n \\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCreditExampleUkDirective', {\n tag: 'xo-credit-example-uk',\n template: _template2['default']\n});\n\n\n_squid.$Component;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n

{{content('chooseCreditOption.representativeEx')}}

\\n

{{content('chooseCreditOption.representativeExHeader')}}

\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
{{content('chooseCreditOption.purchaseRate')}}{{content('chooseCreditOption.purchaseRateValue')}}
{{content('chooseCreditOption.representativeAPR')}}{{content('chooseCreditOption.representativeAPRValue')}}
{{content('chooseCreditOption.exCreditLimit')}}{{content('chooseCreditOption.exCreditLimitValue')}}
\\n

{{content('chooseCreditOption.terms')}}

\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/pay-with-credit/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/pay-with-credit/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoPayWithCredit', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n token: '=?',\n doneFn: '=?'\n },\n controller: ['$scope', function ($scope) {\n var stateName = 'gce_pay_with_credit';\n\n (0, _squid.$populate)($scope, {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance($scope.token)\n }).then(function () {\n // For US and GB if txn amount is >= 99 or 150 resp show pay with credit option if credit in\n // wallet and is not the current funding option\n\n // required to avoid looging every digest cycle.\n // TODO: remove this when debounce is fixed for logger\n var offerShown = false;\n\n $scope.showPayWithCredit = function () {\n if (!$scope.checkoutCart.get('purchase.amounts.total.amount')) {\n offerShown = false;\n return false;\n }\n\n var amount = parseFloat($scope.checkoutCart.purchase.amounts.total.amount);\n var minAmount = _angular.$window.config.minCreditAmtNoInterest[_squid.$locale.country];\n var hasCredit = $scope.checkoutSession.fundingOptions.hasCredit();\n var fundingSource = $scope.checkoutSession.plan.sources;\n var showOffer = _squid.$config.features.DEFAULT.showPayWithCreditOffer && !$scope.checkoutSession.plccOffer;\n\n if (showOffer && minAmount && amount >= minAmount && hasCredit) {\n for (var i in fundingSource) {\n if (fundingSource[i].type === 'BILL_ME_LATER') {\n offerShown = false;\n return false;\n }\n }\n if (!offerShown) {\n _logger.$logger.info(stateName + '_offer_shown');\n }\n offerShown = true;\n return true;\n }\n offerShown = false;\n return false;\n };\n\n $scope.onSubmit = function () {\n _logger.$logger.info(stateName + '_offer_clicked');\n $scope.checkoutSession.message = null;\n\n var instruments = $scope.checkoutSession && $scope.checkoutSession.fundingOptions && $scope.checkoutSession.fundingOptions.instruments;\n var creditPlanId = void 0;\n\n for (var i in instruments) {\n if (instruments[i].type === 'CREDIT' && instruments[i].name === 'BILL_ME_LATER') {\n creditPlanId = instruments[i].planId;\n }\n }\n\n if (!creditPlanId) {\n _logger.$logger.info(stateName + '_credit_planid_not_found');\n return;\n }\n\n return $scope.checkoutSession.fundingOptions.action('select', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: creditPlanId\n },\n success: function success() {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _logger.$logger.info(stateName + '_success');\n }\n });\n };\n });\n }]\n };\n});\n\n_angular.$window;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutSessionModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/pay-with-credit/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n

{{ content('memberReview.switchToBml') }}

\\n \\n
\\n {{ content('common.select') }}\\n
\\n
\\t\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCreditOffer = undefined;\n\nvar _index = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _xoCreditBannerUtils = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCreditOffer = exports.$xoCreditOffer = _index.$Component.extend('$xoCreditOfferBannersDirective', {\n tag: 'xo-credit-offer-banners',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve(),\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n checkoutCart: _index2.$CheckoutCartModel.instance(this.props.token).retrieve(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(this.props.token).retrieve(),\n payee: _index2.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n creditData: _index3.$CreditDataModel.instance(this.props.token),\n creditSharedInfo: _index3.$CreditSharedInfoModel.instance()\n };\n }\n },\n lifecycle: {\n enter: function enter() {},\n populate: function populate() {\n var self = this;\n self.buyerCountry = _index.$locale.country;\n self.showCreditBanner = false;\n\n // Don't show credit banner if it's redirected from CAPE\n if (self.models.creditData && self.models.creditData.isRedirectedFromCape) {\n return;\n }\n\n var isBillingNoPurchase = self.models.checkoutCart.isBillingNoPurchase();\n var isCreditSelected = _xoCreditBannerUtils.$xoCreditBannerUtils.isCreditSelected(self.models.checkoutSession, isBillingNoPurchase);\n // FI count is used in FPTI logs after calling MORS/DiscoverMessage for both US and UK\n self.models.creditSharedInfo.setFiCount(_xoCreditBannerUtils.$xoCreditBannerUtils.getFiCount(self.models.checkoutSession, isBillingNoPurchase));\n\n if (!isCreditSelected) {\n // only show credit banner when PPC is not selected/no PPC\n self.showCreditBanner = true;\n // show UK credit example whenever we show credit banner\n self.models.creditSharedInfo.setShowCreditExample(true);\n }\n }\n }\n});\n\nangular.value(\"$xoCreditOffer\", $xoCreditOffer);\n_index.$Component;\n\n_index.$locale;\n\n_index2.$CheckoutSessionModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index3.$CreditSharedInfoModel;\n\n_index3.$CreditDataModel;\n\n_auth.$AuthModel;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.gbPersonalizationTreatmentMapping = exports.bannerTypes = exports.gbContentKeys = undefined;\n\nvar _personalizationManager = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/personalizationManager.js\");\n\nvar gbContentKeys = exports.gbContentKeys = {\n reuse: {\n installment: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferInstallment',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n ni: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferLarge',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n core: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferSmall',\n termsLink: 'https://www.paypal.com/ppclander'\n }\n },\n acq: {\n installment: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlInstallmentTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n ni: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlOfferLargeTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n core: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlOfferSmallTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n }\n }\n};\n\nvar bannerTypes = exports.bannerTypes = {\n 'ACQ': 'ACQ',\n 'REUSE': 'REUSE',\n 'NONE': 'NONE'\n};\n\nvar gbPersonalizationTreatmentMapping = exports.gbPersonalizationTreatmentMapping = {\n 'xo_hermesnodeweb_gb_ppc_personalization_treatment1': _personalizationManager.PERSONALIZATION_PHASES.SHADOW,\n 'xo_hermesnodeweb_gb_ppc_personalization_treatment2': _personalizationManager.PERSONALIZATION_PHASES.RAMP,\n 'xo_hermesnodeweb_gb_ppc_personalization_control': _personalizationManager.PERSONALIZATION_PHASES.CONTROL\n};\n\n_personalizationManager.PERSONALIZATION_PHASES;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCreditOfferGBBanner = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _xoCreditBannerUtils = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\");\n\nvar _xoCreditBannerConstants = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\");\n\nvar _personalizationManager = __webpack_require__(\"../node_modules/xo-credit-components/src/lib/personalizationManager.js\");\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nvar _constants = __webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCreditOfferGBBanner = exports.$xoCreditOfferGBBanner = _squid.$Component.extend('$xoCreditOfferGBBanner', {\n tag: 'xo-credit-offer-gb-banners',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _index.$CheckoutCartModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n payee: _index.$CheckoutPayeeModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n creditData: _index2.$CreditDataModel.instance(this.props.token),\n creditSharedInfo: _index2.$CreditSharedInfoModel.instance()\n };\n },\n experiments: function experiments(resolvers) {\n return resolvers.models.then(function (models) {\n var userAction = models.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && models.checkoutCart.get('purchase.items.length', 0) <= 0;\n return {\n gb_personalization: (0, _squid.$pxp)('xo_hermesnodeweb_gb_ppc_personalization', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_gb_ppc_personalization_.*').then(function (result) {\n var treatment_name = result && result.treatment_name;\n _logger.$logger.info('checkout_fpti', { 'xo_hermesnodeweb_gb_ppc_personalization': treatment_name || 'xo_hermesnodeweb_gb_ppc_personalization_control' });\n return _constants.gbPersonalizationTreatmentMapping[treatment_name];\n }),\n showCartAmount: (0, _pxp.$pxpCartAmt)(models.checkoutAppData.get('merchant.merchant_country'), models.payee.get('merchant.id'), noLineItemDetails, models.checkoutCart.isPurchase()).then(function (showAmount) {\n models.creditSharedInfo.setCartAmountVisible(showAmount);\n })\n };\n });\n }\n },\n actions: {\n selectExistingBml: function selectExistingBml() {\n // This is called on UI when user clicks on \"Select\" link in reuse banner\n // might be sharable between country flows\n _logger.$logger.info('Select existing BML');\n var self = this;\n if (self.models.checkoutCart.isBillingNoPurchase()) {\n // if this is a BA-NOP transaction, set sticky FI and go to review page\n var fpList = self.models.checkoutSession.get('futurePaymentInstruments');\n var ppc = fpList.find(function (fp) {\n return fp.type === 'BILL_ME_LATER';\n });\n this.models.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: ppc.instrument_id\n },\n success: function success(result) {\n self.showReuseBannerFlag = false;\n self.models.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n // Anything other than BA-NOP, we set fundingOption for this transaction and go to the next page\n var _fpList = self.models.checkoutSession.get('fundingOptions.instruments');\n var fundingSource = _fpList.find(function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n\n self.models.checkoutSession.fundingOptions.action('select', {\n resultModel: self.models.checkoutSession,\n data: {\n planId: fundingSource.planId\n },\n success: function success(result) {\n // Do not show PPC banner after user selected PPC\n self.showReuseBanner = false;\n\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n self.models.checkoutSession.installments = result.installments;\n }\n\n // If selected fundingSource is CREDIT and there's installment offers present, we go to CYCO\n if (fundingSource.type === 'CREDIT' && self.models.creditSharedInfo.hasInstallmentOffers()) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n // otherwise, we go to review page\n if (!fundingSource.selected) {\n self.models.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n if (self.models.checkoutSession.selectedInstallmentData && !self.models.checkoutSession.selectedInstallmentData.preventChange) {\n // Resetting selected installment data, if installment change is not explicitly prohibited.\n self.models.checkoutSession.selectedInstallmentData = undefined;\n }\n }\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n }\n },\n selectAcqBml: function selectAcqBml() {\n // this is called on UI when user clicks on \"Apply\" link in ACQ banner\n // if installment offers are present, go CYCO.\n // otherwise, go CAPE\n if (this.models.creditSharedInfo.hasInstallmentOffers()) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n _uiRouter.$state.go('checkout.redirectToCape');\n }\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var self = this;\n\n var isBillingNoPurchase = self.models.checkoutCart.isBillingNoPurchase();\n var isReuse = _xoCreditBannerUtils.$xoCreditBannerUtils.isCreditInWallet(self.models.checkoutSession, isBillingNoPurchase);\n var contentKeys = isReuse ? _constants.gbContentKeys.reuse : _constants.gbContentKeys.acq;\n\n self.displayBannerType = undefined;\n // putting bannerTypes into scope so we can use bannerTypes.REUSE or bannerTypes.ACQ in template.html\n self.bannerTypes = _constants.bannerTypes;\n\n (0, _personalizationManager.personalizationManager)(self.experiments.gb_personalization, self.props.token, self.models, contentKeys).then(function (banner) {\n if (banner) {\n // use whatever banner returned from personalizationManager\n self.banner = banner;\n\n // stick cartAmount and cartCurrency into creditData so it's passed to CAPE\n if (banner.cartAmount && banner.cartCurrency) {\n self.models.creditData.setCartAmountAndCurrency({\n cart_amount: banner.cartAmount,\n cart_currency: banner.cartCurrency\n });\n }\n // Send FPTI log if the banner is from personalization studio and it's not already sent\n if (banner.messageId.startsWith(_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX) && !_this.models.creditSharedInfo.getMorsFptiFiredFlag()) {\n _logger.$logger.info('checkout_fpti', _xoCreditBannerUtils.$xoCreditBannerUtils.buildCreditOfferFptiObject(_this.props.token, banner));\n _this.models.creditSharedInfo.setMorsFptiFiredFlag(true);\n }\n\n if (isReuse) {\n self.displayBannerType = _constants.bannerTypes.REUSE;\n } else {\n self.displayBannerType = _constants.bannerTypes.ACQ;\n }\n } else {\n // Address US1226993. But need to be tested\n self.displayBannerType = _constants.bannerTypes.NONE;\n }\n });\n }\n }\n});\n\nangular.value(\"$xoCreditOfferGBBanner\", $xoCreditOfferGBBanner);\n_angular.noop;\n\n_logger.$logger;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index2.$CreditSharedInfoModel;\n\n_index2.$CreditDataModel;\n\n_auth.$AuthModel;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX;\n\n_personalizationManager.personalizationManager;\n\n_pxp.$pxpCartAmt;\n\n_constants.bannerTypes;\n\n_constants.gbContentKeys;\n\n_constants.gbPersonalizationTreatmentMapping;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoOfferTopBanner', {\n tag: 'xo-offer-top-banner',\n template: _template2['default'],\n controller: ['$scope', function ($scope) {\n $scope.isTopBannerVisible = false;\n $scope.offerTopBanner = {};\n\n // this data comes from an $emit() call in:\n // xo-credit-components/src/offer/directive.js\n var unbind = _angular.$rootScope.$on('setOfferTopBanner', function (event, data) {\n $scope.offerTopBanner = data;\n $scope.isTopBannerVisible = true;\n });\n\n $scope.$on('$destroy', unbind);\n }]\n});\n\n\n_squid.$Component;\n\n_angular.$rootScope;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n
\\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-device-info/dist/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$DeviceInfo', function () {\n var userAgent = _angular.$window.navigator.userAgent;\n var standalone = _angular.$window.navigator.standalone;\n var DEVICE_PATTERN = /iPod|iPhone|iPad|Android|BlackBerry|BB10|Palm|CriOS|IEMobile|Windows Phone OS|webOS|Symbian|silk|Kindle|Opera Mini|mobile/i;\n var TABLET_PATTERN = /ip(a|ro)d|silk|xoom|playbook|tablet|kindle|Nexus 7|GT-P10|SC-01C|SHW-M180S|SM-T320|SGH-T849|SCH-I800|SHW-M180L|SPH-P100|SGH-I987|zt180|HTC( Flyer|_Flyer)|Sprint ATP51|ViewPad7|pandigital(sprnova|nova)|Ideos S7|Dell Streak 7|Advent Vega|A101IT|A70BHT|MID7015|Next2|nook|FOLIO|MB511.*RUTEM|Mac OS.*Silk/i;\n var IOS_PATTERN = /iP(hone|od|ad)/i;\n\n function getIntegrationContext(integrationKey) {\n // additonal context sent via partners in regards to integration\n var integrationContext = _squid.$meta.integrationCTX || {};\n\n return integrationContext[integrationKey];\n }\n\n // Supports iOS and Android. Updated / more accurate method of detecting webviews\n function isWebView() {\n var logEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var ua = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : userAgent;\n\n var ios = /iphone|ipod|ipad/i.test(ua);\n var android = /Android/i.test(ua);\n\n if (ios) {\n // Unfortunately no perfectly reliable way, this will detect some 3rd party browsers as ui webview\n // Major browsers: chrome, safari, firefox, uc browser, puffin, are detected reliably.\n var ios_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua);\n\n if (!standalone && ios_uiwebview && !isSafariViewController()) {\n // uiwebview\n logWebView('iOS');\n return true;\n }\n } else if (android) {\n // not iOS, Android platform handling\n // Whitelist for x-requested-with header values for web view detection\n var allowedXRequestedWithRegexMap = {\n ajax: /XMLHttpRequest/i,\n baiduBrowser: /com.baidu.browser.inter/i,\n operaMini: /com.opera.mini.native/i,\n maxthon: /com.mx.browser/i,\n litterPenguinBrowser: /com.explore.web.browser/i\n };\n var xRequestedWithHeaderVal = _squid.$meta.requestHeaders['x-requested-with'];\n\n if (xRequestedWithHeaderVal) {\n // check if x-requested-with header val is in whitelist\n for (var key in allowedXRequestedWithRegexMap) {\n if (allowedXRequestedWithRegexMap.hasOwnProperty(key)) {\n if (allowedXRequestedWithRegexMap[key].test(xRequestedWithHeaderVal)) {\n return false;\n }\n }\n }\n logWebView('Android');\n return true;\n }\n }\n\n return false;\n\n function logWebView(device) {\n if (!logEnabled) {\n return;\n }\n // cal log\n _logger.$logger.info('WebView :: ' + device);\n }\n }\n\n /**\n * Check if the given the user-agent string is belongs to a device.\n */\n function isDevice() {\n if (_angular2['default'].isString(userAgent)) {\n return DEVICE_PATTERN.test(userAgent) || TABLET_PATTERN.test(userAgent);\n }\n\n return false;\n }\n\n /**\n * Check if the given the user-agent string is belongs to a tablet.\n */\n function isTablet() {\n if (_angular2['default'].isString(userAgent)) {\n return TABLET_PATTERN.test(userAgent);\n }\n\n return false;\n }\n\n /**\n * Check if the given the user-agent string is belongs to a mobile\n */\n function isMobile() {\n return isDevice(userAgent) && !isTablet(userAgent);\n }\n\n /**\n * Get the mobile platform value given the user-agent string.\n */\n function getDevicePlatform() {\n if (_angular2['default'].isString(userAgent)) {\n var matched = userAgent.match(/iPod|iPhone|iPad|Android|BlackBerry|Windows Phone OS|webOS|Symbian|mobile/g);\n\n if (matched && matched.length > 0) {\n return matched[0];\n }\n }\n }\n\n /**\n * Check if the give user agent is from an app.\n */\n function isApp(uaString) {\n userAgent = uaString || userAgent;\n\n if (DEVICE_PATTERN.test(userAgent) || TABLET_PATTERN.test(userAgent)) {\n if (getDevicePlatform(userAgent) === 'Android') {\n return (/Version\\/\\d.\\d/i.test(userAgent)\n );\n }\n\n return (/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)|PLAYSTATION|iPadApp/i.test(userAgent)\n );\n }\n\n return false;\n }\n\n function isSafariViewController() {\n if (getIntegrationContext('brainTreeIntegration') === 'SFVC') {\n return true;\n }\n if (_angular2['default'].isString(userAgent)) {\n var ios = /iphone|ipod|ipad/i.test(userAgent);\n\n return ios && _angular.$window.indexedDB && isApp();\n } else {\n return false;\n }\n }\n\n /**\n * Get the device capabilities\n */\n function getCapabilities() {\n var capabilities = {};\n var device = DEVICE_PATTERN.test(userAgent);\n var tablet = TABLET_PATTERN.test(userAgent);\n var app = isApp(userAgent);\n\n if (_angular2['default'].isString(userAgent)) {\n capabilities.isWireless = device || tablet;\n capabilities.isTablet = tablet;\n capabilities.isMobile = device && !tablet;\n capabilities.isDesktop = !device;\n capabilities.isApp = app;\n }\n return capabilities;\n }\n\n /**\n * Get various AppIntegrationType\n */\n function getAppIntegrationType() {\n var app_int_type = void 0;\n\n if (isDevice()) {\n if (isApp()) {\n if (isSafariViewController()) {\n app_int_type = 'SFVC';\n } else {\n app_int_type = 'WebView';\n }\n } else {\n app_int_type = 'Browser';\n }\n }\n return app_int_type;\n }\n\n function isSafariiOSBrowserView() {\n var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : userAgent;\n\n var ios = IOS_PATTERN.test(ua);\n var safari = /safari/i.test(ua);\n var isIOSApp = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua);\n var isChromeOnIOS = /(.*?CriOS)/i.test(ua);\n var isFirefoxOnIOS = /(.*?FxiOS)/i.test(ua);\n var isSafariBrowserOnly = safari && !isChromeOnIOS && !isFirefoxOnIOS;\n\n return ios && !standalone && isSafariBrowserOnly && !isIOSApp;\n }\n\n function getiOSVersion() {\n var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : userAgent;\n\n var ios = IOS_PATTERN.test(ua);\n\n if (ios) {\n var version = ua.match(/OS (\\d+)_(\\d+)/);\n return [parseInt(version[1], 10), parseInt(version[2], 10)];\n }\n return false;\n }\n\n return {\n isDevice: isDevice,\n isTablet: isTablet,\n isMobile: isMobile,\n isApp: isApp,\n isSafariViewController: isSafariViewController,\n getCapabilities: getCapabilities,\n getAppIntegrationType: getAppIntegrationType,\n isWebView: isWebView,\n isSafariiOSBrowserView: isSafariiOSBrowserView,\n getiOSVersion: getiOSVersion\n };\n});\n\n_squid.$meta;\n\n_logger.$logger;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-device-info/dist\", \"../node_modules/xo-device-info/dist/index.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-form-components/src/language-options/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nexports.__esModule = true;\nexports.VALID_DIRECTION = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-form-components/src/language-options/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar VALID_DIRECTION = exports.VALID_DIRECTION = ['top', 'bottom'];\nvar isValidDirection = function isValidDirection(n) {\n return VALID_DIRECTION.includes(n);\n};\n\n\nangular.module().directive('xoLanguageOptions', function () {\n return {\n template: _template2['default'],\n\n scope: {\n direction: '@?'\n },\n\n controller: ['$scope', function ($scope) {\n $scope.direction = isValidDirection($scope.direction) ? $scope.direction : 'bottom';\n $scope.showLanguages = false;\n\n function setLanguageVars() {\n $scope.localeModel = _squid.$locale;\n $scope.currentLanguage = $scope.localeModel.lang;\n $scope.currentCountry = $scope.localeModel.country;\n $scope.languageList = $scope.localeModel.metadata.languageLabel;\n $scope.supportedLanguages = _squid.$config.supportedCountries[$scope.currentCountry];\n $scope.hasMultipleLanguages = $scope.supportedLanguages && $scope.supportedLanguages.length > 1 ? true : false;\n }\n\n $scope.selectLanguage = function (language) {\n $scope.currentLanguage = language;\n _squid.$locale.chooseLang(language);\n };\n\n $scope.toggle = function ($event) {\n if ($event) {\n $event.preventDefault();\n }\n\n $scope.showLanguages = !$scope.showLanguages;\n };\n\n setLanguageVars();\n\n // Reset locale properties for languageToggle\n $scope.$on('localeChange', function () {\n setLanguageVars();\n });\n\n // \"clickBody\" is an artifical event broadcast by the xo-checkout component (essentially document.click)\n $scope.$on('clickBody', function ($event, target) {\n if ($(target).parents('.languageToggleDisplay div').length === 0) {\n $scope.showLanguages = false;\n $scope.$apply();\n }\n });\n }]\n };\n});\n\n_squid.$config;\n\n_squid.$locale;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-form-components/src/language-options/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-form-components/src/select-shipping-method/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/shippingMethod/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/modal/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-form-components/src/select-shipping-method/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/ui.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Import the decodeEntities angular filter\n\nvar callbackShippingOptions = void 0,\n fallbackShippingOptions = void 0,\n callbackInsuranceOffered = void 0;\nvar defaultFallbackOptionIndex = void 0;\n\nexports['default'] = _squid.$Component.extend('$xoSelectShippingMethod', {\n tag: 'xo-select-shipping-method',\n template: _template2['default'],\n\n props: {\n token: {\n type: 'var',\n required: false\n },\n showShippingAddress: {\n type: 'var',\n required: false\n },\n errorHandlerHelper: {\n type: 'var',\n required: false\n },\n instantUpdateFeature: {\n type: 'var',\n required: false\n }\n },\n\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n checkoutCart: _index2.$CheckoutCartModel.instance(this.props.token).retrieve(),\n checkoutPayee: _index2.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n checkoutShippingAddresses: _index2.$CheckoutShippingAddressesModel.instance(this.props.token).retrieve(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(this.props.token).retrieve()\n };\n }\n },\n\n actions: {\n closeModal: function closeModal() {\n this.showModal = false;\n },\n openModal: function openModal() {\n this.showModal = true;\n },\n continueHandler: function continueHandler() {\n\n /**\n * Function responsible to patch Cart for\n * 1. Buyer select's a new shipping method.\n * 2. Buyer chooses to opt for insurance or chooses not to.\n */\n if (this.selectedMethod.current.index !== this.selectedMethod.previous.index || this.selectedMethod.current.insuranceSelected !== this.selectedMethod.previous.insuranceSelected) {\n\n var selectedMethodCharges = void 0,\n taxAmtApplied = void 0,\n insurance = void 0;\n selectedMethodCharges = this.response.charges[this.selectedMethod.current.index];\n taxAmtApplied = this.getTax(selectedMethodCharges);\n insurance = this.getInsurance(selectedMethodCharges);\n this.shippingAmtApplied = this.safeConvert(selectedMethodCharges.shipping_charge.shipping_amount.value);\n if (this.isInstantUpdateFlow) {\n this.selectedMethod.showInsuranceAmount = this.selectedMethod.current.insuranceSelected;\n this.insuranceApplied = insurance;\n this.updateSelectedExternalCallbackOption(this.response.shipping_options_source, this.selectedMethod.previous.index, this.selectedMethod.current.index);\n this.selectedMethod.previous.insuranceSelected = this.selectedMethod.current.insuranceSelected;\n }\n this.updateShippingTaxCharge(this.shippingAmtApplied, taxAmtApplied, selectedMethodCharges.shipping_charge.shipping_method_type, insurance);\n this.selectedShippingMethod = selectedMethodCharges.shipping_charge.shipping_method;\n this.selectedMethod.previous.index = this.selectedMethod.current.index;\n }\n\n this.actions.closeModal();\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.selectedMethod = {\n current: {\n index: 0,\n insuranceSelected: false\n },\n previous: {\n index: 0,\n insuranceSelected: false\n },\n insuranceAvailable: false,\n showInsuranceAmount: false\n };\n\n // Initialization\n this.showModal = false;\n this.shippingInfoDisplay = 'noHighlight';\n this.addressChanged = false;\n\n var timer = void 0;\n this.previousCosts = {};\n\n // Function used to format amount based on currency code\n this.formatAmount = function (amount) {\n if (amount && amount.value) {\n var amountToBeFormatted = (parseInt(amount.value.toString(), 10) / 100).toFixed(2);\n if (amountToBeFormatted) {\n return (0, _squid.formatCurrency)(amountToBeFormatted, _this.currencyCode);\n }\n }\n };\n\n this.uncheckInsuranceCheckbox = function () {\n _this.selectedMethod.current.insuranceSelected = false;\n };\n\n this.showInsurance = function (selectedIndex) {\n return Number(_this.selectedMethod.current.index) === selectedIndex;\n };\n\n // Function to check if is insurance is offered for a shipping charge\n this.isInsuranceOfferedInCharge = function (charge) {\n return charge.shipping_charge.offer_insurance_option;\n };\n\n var responseHasShippingCharges = function responseHasShippingCharges() {\n if (_this.response.charges.length === 0) {\n return false;\n }\n return !!_this.response.charges[0].shipping_charge;\n };\n\n var responseHasTaxCharges = function responseHasTaxCharges() {\n if (_this.response.charges.length === 0) {\n return false;\n }\n return !!_this.response.charges[0].tax;\n };\n\n this.safeConvert = function (value) {\n value = Number(value);\n if (isNaN(value)) {\n throw new Error(value + ' cannot be divided');\n }\n return value / 100;\n };\n\n /*\n This function is responsible to update the previously selected external callback option to newly selected one.\n */\n this.updateSelectedExternalCallbackOption = function (optionsSource, prevIndex, index) {\n if (optionsSource === 'CALLBACK' && callbackShippingOptions) {\n if (!isNaN(prevIndex)) {\n callbackShippingOptions[prevIndex].is_selected = false;\n }\n callbackShippingOptions[index].is_selected = true;\n } else if (optionsSource === 'FALLBACK' && fallbackShippingOptions) {\n if (!isNaN(prevIndex)) {\n fallbackShippingOptions[prevIndex].is_selected = false;\n }\n fallbackShippingOptions[index].is_selected = true;\n }\n };\n\n var highlight = function highlight(duration) {\n _this.shippingInfoDisplay = 'highlight';\n if (timer) {\n _angular.$timeout.cancel(timer);\n }\n timer = (0, _angular.$timeout)(function () {\n _this.shippingInfoDisplay = 'noHighlight';\n }, duration);\n };\n\n this.getTax = function (charge) {\n var tax = void 0;\n if (!_this.isInstantUpdateFlow && (_this.isBuyNow || _this.isCartUpload) && _this.cartAmounts.taxAmt >= 0) {\n tax = _this.cartAmounts.taxAmt;\n }\n // tax calculation\n else {\n charge = charge || responseHasTaxCharges() && _this.response.charges[0];\n if (charge && charge.tax && charge.tax.total_tax) {\n tax = _this.safeConvert(charge.tax.total_tax.value);\n }\n }\n return tax;\n };\n\n /**\n * Function to return the insurance from shipping charge.\n * 1. By default return insurance amount from the charge.\n * 2. In case insurance is offered and is not chosen , do not return the insurance amount.\n * @param charge - shipping charge\n * @param index - index of the shipping charge\n */\n this.getInsurance = function (charge) {\n if (charge && charge.shipping_charge && charge.shipping_charge.insurance_amount) {\n if (charge.shipping_charge.offer_insurance_option && !_this.selectedMethod.current.insuranceSelected) {\n return;\n }\n return _this.safeConvert(charge.shipping_charge.insurance_amount.value);\n }\n };\n\n var updatePreviousCosts = function updatePreviousCosts() {\n _this.previousCosts = {};\n if (_this.models.checkoutCart.purchase.amounts.shipping) {\n _this.previousCosts.shippingAmount = _this.models.checkoutCart.purchase.amounts.shipping.amount;\n }\n if (_this.models.checkoutCart.purchase.amounts.tax) {\n _this.previousCosts.taxAmount = _this.models.checkoutCart.purchase.amounts.tax.amount;\n }\n };\n\n var hasShippingCostChanged = function hasShippingCostChanged(newShipping) {\n if (newShipping !== undefined) {\n return newShipping.amount !== _this.previousCosts.shippingAmount;\n }\n return newShipping !== _this.previousCosts.shippingAmount;\n };\n\n var hasTaxCostChanged = function hasTaxCostChanged(newTax) {\n if (newTax !== undefined) {\n return newTax.amount !== _this.previousCosts.taxAmount;\n }\n return newTax !== _this.previousCosts.taxAmount;\n };\n\n var setToolTipMessage = function setToolTipMessage() {\n _this.models.checkoutSession.message.msgKeys = hasShippingCostChanged(_this.models.checkoutCart.purchase.amounts.shipping) || hasTaxCostChanged(_this.models.checkoutCart.purchase.amounts.tax) ? ['smallToolTip.addressShippingChargesUpdated'] : ['smallToolTip.onlyAddressUpdated'];\n };\n\n var addExternalCallBackOptionsToPatchRequest = function addExternalCallBackOptionsToPatchRequest(patchEntities) {\n var externalCallbackOptions = _this.models.checkoutCart.purchaseUnits[0].external_callback_options;\n\n if (_this.response.shipping_options_source === 'CALLBACK') {\n externalCallbackOptions.callback_shipping_options = callbackShippingOptions;\n externalCallbackOptions.callback_insurance_option_offered = callbackInsuranceOffered;\n } else if (_this.response.shipping_options_source === 'FALLBACK') {\n externalCallbackOptions.fallback_shipping_options = fallbackShippingOptions;\n\n // if callback shipping option failed, delete it as fallback is default now\n // use case , say if buyer changes shipping address multiple times and the first attempt callback success\n // and second attempt callback failed, as patchCart of first attempt updated checkout session we may endup in having\n // both callback and fallback shipping option , and only one if possible (useful) from checkout session\n // delete the callback as it is not always source of shipping charge\n delete externalCallbackOptions.callback_shipping_options;\n }\n\n patchEntities.push({\n field: 'externalCallbackOptions',\n value: externalCallbackOptions\n });\n };\n\n var populatePatchShippingDetails = function populatePatchShippingDetails(patchEntities, shipMethod) {\n if (_this.isInstantUpdateFlow) {\n addExternalCallBackOptionsToPatchRequest(patchEntities);\n } else {\n patchEntities.push({\n field: 'shippingMethod',\n value: shipMethod ? _this.shippingMethods.getShippingMethodId(shipMethod) : ''\n });\n }\n };\n\n var populatePatchAmountDetails = function populatePatchAmountDetails(patchableAmountEntities, constantAmountEntities, decimalDigits, amounts) {\n var newTotal = _this.cartAmounts.total;\n Object.keys(patchableAmountEntities).forEach(function (key) {\n var detail = patchableAmountEntities[key];\n if (!isNaN(detail.value)) {\n detail.value = Number(detail.value);\n amounts.details[key] = detail.value.toFixed(decimalDigits);\n } else {\n detail.value = 0;\n }\n newTotal += detail.valueInCart ? detail.value - detail.valueInCart : detail.value;\n });\n amounts.total = newTotal.toFixed(decimalDigits);\n Object.keys(constantAmountEntities).forEach(function (key) {\n var detail = constantAmountEntities[key];\n if (detail.valueInCart !== undefined) {\n amounts.details[key] = detail.valueInCart.toFixed(decimalDigits);\n }\n });\n };\n\n // Generates the request body to be used for patch Cart\n var getPatchReqData = function getPatchReqData(shippingAmt, taxAmt, shipMethod, insuranceAmt) {\n // 1. amount values in the cart,\n // 2. shipping method (only in case of non instant update flows)\n // 3. external_callback_options (only in case of instant update flows)\n\n var currencyDigits = _squid.$locale.metadata && _squid.$locale.metadata.currency && _squid.$locale.metadata.currency.digits;\n var decimalDigits = currencyDigits && currencyDigits[_this.currencyCode];\n if (isNaN(decimalDigits)) {\n decimalDigits = 2;\n }\n var patchEntities = [];\n var amounts = {\n 'currency': _this.currencyCode,\n 'details': {\n 'subtotal': _this.cartAmounts.subTotal.toFixed(decimalDigits)\n }\n };\n var patchableAmountEntities = {\n shipping: {\n value: shippingAmt,\n valueInCart: _this.cartAmounts.shippingAmt\n },\n tax: {\n value: taxAmt,\n valueInCart: _this.cartAmounts.taxAmt\n },\n insurance: {\n value: insuranceAmt,\n valueInCart: _this.cartAmounts.insuranceAmt\n }\n };\n\n // amount details which are not affected by SnT response,\n // but still need to get included in the patch request if initially present\n var constantAmountEntities = {\n handling_fee: {\n valueInCart: _this.cartAmounts.handlingAmt\n },\n shipping_discount: {\n valueInCart: _this.cartAmounts.shippingDiscountAmt\n },\n discount: {\n valueInCart: _this.cartAmounts.discountAmt\n }\n };\n populatePatchAmountDetails(patchableAmountEntities, constantAmountEntities, decimalDigits, amounts);\n\n patchEntities.push({\n field: 'purchaseAmount',\n value: amounts\n });\n\n populatePatchShippingDetails(patchEntities, shipMethod);\n\n return {\n id: _this.token,\n patchEntities: patchEntities\n };\n };\n\n this.updateShippingTaxCharge = function (shippingAmt, taxAmt, shipMethod, insurance) {\n _this.models.checkoutCart.action('patchCartData', {\n data: getPatchReqData(shippingAmt, taxAmt, shipMethod, insurance),\n success: function success(result) {\n _this.models.checkoutSession.invalidate();\n (0, _squid.$populate)(_this, {\n checkoutSession: _index2.$CheckoutSessionModel.instance(_this.token)\n }).then(function () {\n // update checkout cart model with item information\n // this is for displaying additional item information in cart\n // any modification here need check in xo-page-component-> cart directive also\n _this.models.checkoutCart.get('purchase.items', []).forEach(function addDetails(item) {\n item.details = {};\n\n if (item.quantity > 1) {\n item.details.price = item.price.amount;\n item.details.quantity = (0, _squid.formatQuantity)(item.quantity);\n }\n\n if (item.description) {\n if (!item.name) {\n item.name = item.description;\n } else {\n item.details.description = item.description;\n }\n }\n\n // move options to detail section\n if (item.item_option_selections) {\n item.details.hasSelections = true;\n item.details.item_option_selections = item.item_option_selections;\n }\n\n if (item.sku) {\n item.details.sku = item.sku;\n }\n\n item.hasDetails = Object.keys(item.details).length > 0;\n item.details.hasMore = item.hasDetails || item.details.hasSelections;\n });\n }).then(function () {\n highlight(4000);\n if (_this.addressChanged) {\n setToolTipMessage();\n _this.addressChanged = false;\n }\n updatePreviousCosts();\n });\n }\n });\n };\n\n var populateCallbackShippingOptions = function populateCallbackShippingOptions() {\n var charges = _this.response && _this.response.charges;\n if (charges) {\n callbackShippingOptions = charges.map(function (charge, index) {\n var shippingCharge = charge.shipping_charge;\n var taxCharge = charge.tax;\n var option = {};\n if (shippingCharge) {\n option = {\n method: shippingCharge.shipping_method,\n amount: {\n value: _this.safeConvert(shippingCharge.shipping_amount.value),\n currency: shippingCharge.shipping_amount.currency_code\n },\n is_default: shippingCharge.default_method,\n is_selected: false\n };\n if (shippingCharge.insurance_amount) {\n option.insurance = {\n value: _this.safeConvert(shippingCharge.insurance_amount.value),\n currency: shippingCharge.insurance_amount.currency_code\n };\n callbackInsuranceOffered = shippingCharge.offer_insurance_option;\n }\n if (taxCharge) {\n option.tax = {\n value: _this.safeConvert(taxCharge.total_tax.value),\n currency: taxCharge.total_tax.currency_code\n };\n }\n }\n return option;\n });\n }\n };\n\n var setDefaultShippingMethod = function setDefaultShippingMethod() {\n _this.showShippingOptions = true;\n var chargesElement = void 0,\n methodType = void 0,\n taxAmtApplied = void 0,\n insurance = void 0;\n for (var i = 0; i < _this.response.charges.length; i++) {\n chargesElement = _this.response.charges[i];\n if (chargesElement.shipping_charge.default_method) {\n _this.selectedMethod.current.index = i;\n _this.selectedMethod.previous.index = i;\n insurance = _this.getInsurance(chargesElement);\n if (_this.isInstantUpdateFlow) {\n _this.updateSelectedExternalCallbackOption(_this.response.shipping_options_source, _this.selectedMethod.previous.index, _this.selectedMethod.current.index);\n }\n _this.selectedShippingMethod = chargesElement.shipping_charge.shipping_method;\n methodType = chargesElement.shipping_charge.shipping_method_type;\n _this.shippingAmtApplied = _this.safeConvert(chargesElement.shipping_charge.shipping_amount.value);\n\n taxAmtApplied = _this.getTax(chargesElement);\n\n insurance = _this.getInsurance(chargesElement);\n\n break;\n }\n }\n _this.updateShippingTaxCharge(_this.shippingAmtApplied, taxAmtApplied, methodType, insurance);\n };\n\n var isPatchCartRequired = function isPatchCartRequired(applicableShippingAmt, applicableTaxAmt) {\n return applicableShippingAmt !== _this.previousCosts.shippingAmount || applicableTaxAmt !== _this.previousCosts.taxAmount;\n };\n\n // Find the charges of the default option and patch cart with corresponding values.\n var updateShippingTaxChargeWithDefaultOption = function updateShippingTaxChargeWithDefaultOption() {\n var defaultOption = void 0,\n shippingAmt = void 0,\n taxAmt = void 0,\n insuranceAmt = void 0,\n methodType = void 0;\n if (_this.response.shipping_options_source === 'FALLBACK' && !isNaN(defaultFallbackOptionIndex)) {\n defaultOption = fallbackShippingOptions[defaultFallbackOptionIndex];\n }\n if (defaultOption) {\n shippingAmt = defaultOption.amount && defaultOption.amount.value;\n taxAmt = defaultOption.tax && defaultOption.tax.value;\n insuranceAmt = defaultOption.insurance && defaultOption.insurance.value;\n methodType = defaultOption.shipping_method_type || 'DEFAULT';\n }\n _this.updateShippingTaxCharge(shippingAmt, taxAmt, methodType, insuranceAmt);\n };\n\n /**\n Function to enable the link to select insurance's by the user if offered in charges\n */\n var enableUserToChooseInsuranceOptionsIfAvailable = function enableUserToChooseInsuranceOptionsIfAvailable() {\n var charges = _this.response && _this.response.charges;\n if (!charges) {\n return;\n }\n for (var i = 0; i < charges.length; i++) {\n if (_this.isInsuranceOfferedInCharge(charges[i])) {\n _this.selectedMethod.insuranceAvailable = true;\n _this.selectedMethod.showInsuranceAmount = false;\n break;\n }\n }\n };\n\n /* Function which is responsible to process shipping tax response\n Use cases\n ---------\n 1. (i) WPS: If response has shipping charges and shipping options are to be shown, set default shipping method else patch cart\n with shipping amount returned.\n (ii)Instant Update: If the shipping region is unsupported, display error message. Otherwise the above behavior applies.\n 2. If no_shipping = 1\n (i) WPS: If profile_override = true , apply shipping from button if it is not empty.\n (ii) Instant Update: Do not display the shipping options. Apply the default fallback(or callback) shipping option charges.\n 3. Apply tax if applicable.\n */\n var processShippingAndTaxResponse = function processShippingAndTaxResponse() {\n\n var applicableShippingAmt = void 0,\n applicableTaxAmt = void 0;\n\n if (_this.isInstantUpdateFlow) {\n if (!_this.response.shipping_region_supported) {\n _this.errorHandlerHelper.addPageError('shippingMethod.shippingRegionUnsupported', { merchant: _this.nonEmptyMerchantDisplayName });\n _this.instantUpdateFeature.shippingRegionSupported = false;\n }\n\n if (_this.response.shipping_options_source === 'CALLBACK') {\n populateCallbackShippingOptions();\n }\n\n enableUserToChooseInsuranceOptionsIfAvailable();\n\n // no_shipping = 0\n if (_this.showShippingAddress) {\n if (responseHasShippingCharges()) {\n setDefaultShippingMethod();\n }\n }\n // no_shipping=1 in case of instant update api , hide the overlay, shipping and tax from default fallback or callback options should be applied\n else {\n _this.showShippingOptions = false;\n updateShippingTaxChargeWithDefaultOption();\n }\n return;\n }\n\n // shipping calculation\n if (_this.showShippingAddress) {\n if (responseHasShippingCharges()) {\n if (_this.response.show_shipping_options) {\n setDefaultShippingMethod(); // setDefaultShippingMethod takes care of both shipping and tax\n return;\n } else if (_this.response.charges[0].shipping_charge.shipping_amount) {\n // if no shipping options , try to get the shipping amount if returned from SNTService\n applicableShippingAmt = _this.safeConvert(_this.response.charges[0].shipping_charge.shipping_amount.value);\n }\n }\n }\n // when not instant update flow , no_shipping is 1, shipping is applied only when override is true and shipping is passed in button\n else if (_this.response.profile_override_allowed) {\n if (_this.cartAmounts.shippingAmt !== undefined) {\n applicableShippingAmt = _this.cartAmounts.shippingAmt;\n }\n }\n\n applicableTaxAmt = _this.getTax();\n\n if (isPatchCartRequired(applicableShippingAmt, applicableTaxAmt)) {\n _this.updateShippingTaxCharge(applicableShippingAmt, applicableTaxAmt);\n }\n };\n\n var clearFallbackOptionsSelectionFlags = function clearFallbackOptionsSelectionFlags() {\n for (var i = 0; i < fallbackShippingOptions.length; i++) {\n fallbackShippingOptions[i].is_selected = false;\n }\n };\n\n this.getShippingMethods = function () {\n _this.showShippingOptions = false;\n _this.selectedShippingMethod = '';\n _this.shippingAmtApplied = 0;\n _this.insuranceAmountOffered = 0;\n _this.response = {};\n\n // when no_shipping = 1, checkoutSession,shipping is undefined. Primary address is considered for SnT as per legacy\n var shippingAddress = _this.models.checkoutSession.shipping ? _this.models.checkoutSession.getShippingAddressMinimalDetails() : _this.models.checkoutShippingAddresses.getPrimaryShippingAddress();\n\n var sntRequest = {\n 'address': shippingAddress,\n 'cart_weight': _this.cartWeight,\n 'cart_handling': { value: _this.cartAmounts.handlingAmt, currency_code: _this.currencyCode },\n 'discount': _this.cartDiscount,\n 'item_list': _this.models.checkoutCart.purchase.items,\n 'tax_on_shipping_required': _this.showShippingAddress, // tax on shipping is not applicable when no_shipping is 1\n 'merchant_id': _this.models.checkoutPayee.merchant.id,\n 'locale': _squid.$locale.content.lang + '_' + _squid.$locale.chosenCountry,\n 'currency_code': _this.currencyCode,\n 'id': _this.token\n };\n\n if (_this.isInstantUpdateFlow) {\n _this.selectedMethod = {\n current: {\n index: 0,\n insuranceSelected: false\n },\n previous: {\n index: 0,\n insuranceSelected: false\n },\n insuranceAvailable: false,\n showInsuranceAmount: false\n };\n callbackShippingOptions = [];\n callbackInsuranceOffered = false;\n clearFallbackOptionsSelectionFlags();\n _this.instantUpdateFeature.shippingRegionSupported = true;\n _this.errorHandlerHelper.clearPageErrors();\n\n if (_this.models.checkoutCart.purchaseUnits && _this.models.checkoutCart.purchaseUnits[0]) {\n sntRequest.external_callback_options = _this.models.checkoutCart.purchaseUnits[0].external_callback_options;\n }\n }\n\n _this.shippingMethods = new _index.$ShippingMethodModel(sntRequest);\n\n _logger.$logger.info('calculate_shipping_charges_call');\n _this.shippingMethods.save({\n data: _this.shippingMethods,\n success: function success(result) {\n _this.response = result;\n processShippingAndTaxResponse();\n }\n });\n };\n },\n populate: function populate() {\n var _this2 = this;\n\n var set = function set(key, value) {\n if (value) {\n _this2.cartAmounts[key] = Number(value.amount);\n }\n };\n\n function hasAddressChanged(newValue, oldValue, isInstantUpdateFlow) {\n // only these values determine if the shiptax service needs to be called again\n var countryZipStateCityChanged = newValue.country !== oldValue.country || newValue.state !== oldValue.state || newValue.city !== oldValue.city || newValue.postal_code !== oldValue.postal_code;\n\n if (!countryZipStateCityChanged && isInstantUpdateFlow) {\n // For instant update flow any change of address variable must trigger a call to shiptax\n var anyAddressFieldChanged = newValue.line1 !== oldValue.line1 || newValue.line2 !== oldValue.line2;\n return anyAddressFieldChanged;\n }\n\n return countryZipStateCityChanged;\n }\n\n this.currencyCode = this.models.checkoutCart.purchase.amounts.total.currency_code;\n\n var appDataFlags = this.models.checkoutAppData && this.models.checkoutAppData.flags;\n\n // We need merchantDisplayName to be non empty and if merchant_name or brand_name is undefined\n // then we need the value of merchantDisplayName to be 'The merchant' as it is the first word\n // in page level error below (look for place where nonEmptyMerchantDisplayName var is used)\n this.nonEmptyMerchantDisplayName = this.models.checkoutAppData && this.models.checkoutAppData.getMerchantDisplayName({\n nonEmptyReturnValue: true,\n isSentenceBeginning: true\n });\n\n this.isBuyNow = appDataFlags && appDataFlags.is_buy_now_flow;\n\n this.isCartUpload = appDataFlags && appDataFlags.is_cart_upload_flow;\n\n this.isInstantUpdateFlow = this.models.checkoutCart && this.models.checkoutCart.instantUpdateIntegration;\n\n if (this.isInstantUpdateFlow) {\n fallbackShippingOptions = this.models.checkoutCart.purchaseUnits[0].external_callback_options.fallback_shipping_options;\n if (fallbackShippingOptions) {\n defaultFallbackOptionIndex = _squid.$util.findIndex(fallbackShippingOptions, function (option) {\n return option.is_default;\n });\n }\n }\n\n this.cartAmounts = {};\n set('shippingAmt', this.models.checkoutCart.purchase.amounts.shipping);\n set('taxAmt', this.models.checkoutCart.purchase.amounts.tax);\n set('subTotal', this.models.checkoutCart.purchase.amounts.subtotal);\n set('total', this.models.checkoutCart.purchase.amounts.total);\n set('handlingAmt', this.models.checkoutCart.purchase.amounts.handling_fee);\n set('insuranceAmt', this.models.checkoutCart.purchase.amounts.insurance);\n set('shippingDiscountAmt', this.models.checkoutCart.purchase.amounts.shipping_discount);\n set('discountAmt', this.models.checkoutCart.purchase.amounts.discount);\n this.previousCosts = {\n shippingAmount: this.models.checkoutCart.purchase.amounts.shipping ? Number(this.models.checkoutCart.purchase.amounts.shipping.amount) : undefined,\n taxAmount: this.models.checkoutCart.purchase.amounts.tax ? Number(this.models.checkoutCart.purchase.amounts.tax.amount) : undefined\n };\n\n if (this.models.checkoutCart.cartWeight) {\n this.cartWeight = {};\n if (this.models.checkoutCart.cartWeight.value) {\n this.cartWeight.value = Number(this.models.checkoutCart.cartWeight.value).toFixed(2);\n }\n this.cartWeight.unit = this.models.checkoutCart.cartWeight.unit;\n }\n\n if (this.models.checkoutCart.purchase.amounts.discount) {\n this.cartDiscount = {\n value: Number(this.models.checkoutCart.purchase.amounts.discount.amount).toFixed(2),\n currency_code: this.currencyCode\n };\n }\n\n if (this.showShippingAddress) {\n this.$watch('this.models.checkoutSession.shipping', function (newValue, oldValue) {\n if (hasAddressChanged(newValue, oldValue, _this2.isInstantUpdateFlow)) {\n _this2.addressChanged = true;\n _this2.getShippingMethods();\n }\n });\n }\n this.getShippingMethods();\n }\n }\n});\n\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.formatCurrency;\n\n_squid.formatQuantity;\n\n_index.$ShippingMethodModel;\n\n_index2.$CheckoutSessionModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutShippingAddressesModel;\n\n_index2.$CheckoutAppDataModel;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-form-components/src/select-shipping-method/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n
\\n
\\n
\\n
{{ content('shippingMethod.shipTo') }}
\\n
{{ content('shippingMethod.storeLocation') }}
\\n

{{ content('shippingMethod.storeLocationInfo') }}

\\n
\\n
\\n
\\n {{ content('shippingMethod.shipping') }}:\\n \\n \\n {{selectedShippingMethod | decodeEntities}} - \\n \\n \\n \\n
\\n
\\n {{ content('shippingMethod.shippingInsurance') }}:\\n \\n \\n {{ content('shippingMethod.insuranceNoneSelected')}}\\n \\n \\n \\n \\n \\n
\\n
\\n \\n
\\n
\\n
\\n {{ content('shippingMethod.selectMethod') }}\\n {{ content('shippingMethod.merchantOptions') }}\\n
\\n
\\n
\\n
\\n \\n \\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/create-password/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/create-password/styles.less\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/create-password/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar CONTENT_KEY_MAP = {\n ADD_CARD: {\n benefitsKey: 'passwordRecovery.stepUpBenefits',\n reasonKey: 'passwordRecovery.stepUpAddCard'\n },\n ADD_SHIPPING: {\n benefitsKey: 'passwordRecovery.stepUpBenefits',\n reasonKey: 'passwordRecovery.stepUpAddShipping'\n },\n APPLY_PPC: {\n benefitsKey: 'passwordRecovery.stepUpApplyPPCBenefits',\n reasonKey: 'passwordRecovery.stepUpApplyPPC'\n },\n GENERIC: {\n benefitsKey: 'passwordRecovery.stepUpGenericBenefits',\n reasonKey: 'passwordRecovery.stepUpGeneric'\n },\n NEW_PHONE: {\n reasonKey: 'passwordRecovery.stepUpNewPhone'\n },\n NEED_US_ADDRESS: {\n reasonKey: 'passwordRecovery.stepUpNeedUSAddress'\n },\n CARD_EXPIRED: {\n reasonKey: 'passwordRecovery.stepUpCardExpired'\n },\n MERCHANT_NOT_ACCEPT_AMEX: {\n reasonKey: 'passwordRecovery.stepUpMerchantNotAcceptAmex'\n },\n NEED_CREDIT_CARD: {\n reasonKey: 'passwordRecovery.stepUpContigencyAddCard'\n },\n PAYER_AUTHENTICATION_REQUIRED: {\n reasonKey: 'passwordRecovery.stepUpNewAddress'\n },\n BILLING_AGREEMENTS: {\n reasonKey: 'passwordRecovery.stepUpBillingAgreements'\n },\n GENERIC_CONTINGENCY: {\n reasonKey: 'passwordRecovery.stepUpContigencyGeneric'\n }\n};\n\nexports['default'] = _squid.$Component.extend('$xoPasswordRecoveryLandingDirective', {\n tag: 'xo-create-password',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n onContinue: {\n type: 'var',\n required: false\n },\n onCancel: {\n type: 'var',\n required: false\n },\n reason: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.contingencyName = this.reason && _squid.$util.camelToCapsUnderscore(this.reason) || 'GENERIC';\n this.getReasonKey = function () {\n return (CONTENT_KEY_MAP[_this.contingencyName] || CONTENT_KEY_MAP['GENERIC']).reasonKey;\n };\n\n this.getBenefitsKey = function () {\n return (CONTENT_KEY_MAP[_this.contingencyName] || CONTENT_KEY_MAP['GENERIC']).benefitsKey;\n };\n this.onSubmit = function () {\n _logger.$logger.info('checkout_fpti', {\n from: 'quick_security_check',\n to: 'process_quick_security_check'\n });\n _this.onContinue();\n };\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.$util;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/create-password/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/create-password/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
{{content('passwordRecovery.quickSecurityCheck')}}
\\n\\n
{{content(getReasonKey())}}
\\n\\n
{{content(getBenefitsKey())}}
\\n\\n \\n \\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/dolphin/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-login-components/src/dolphin/utils.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/dolphin/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-login-components/src/dolphin/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-dolphin',\n template: _template2['default'],\n hasUserClosedTheBanner: false,\n isPhoneConfirmed: false,\n // prevent iframe timer from executing overlay has loaded in any scenario (error or success)\n hasOverlayLoaded: false,\n isTimerRunning: false,\n timerDuration: 10000,\n actions: {\n startTimer: function startTimer() {\n var _this = this;\n\n _logger.$logger.info('xoDolphin_startTimer');\n // Set a 10 second timer to check if UL has loaded or not\n this.isTimerRunning = true;\n (0, _angular.$timeout)(function () {\n if (!_this.hasOverlayLoaded && _this.isTimerRunning) {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_timeout',\n 'context_id': _angular.$rootScope.token\n });\n _this.isTimerRunning = false;\n }\n }, this.timerDuration);\n },\n closeBanner: function closeBanner() {\n this.showBanner = false;\n this.hasUserClosedTheBanner = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'close_banner',\n 'context_id': _angular.$rootScope.token\n });\n },\n openOverlay: function openOverlay() {\n var _this2 = this;\n\n this.showOverlay = true;\n var onPostMessagesHandler = function onPostMessagesHandler(postMessage) {\n if (!angular.isObject(postMessage)) {\n try {\n postMessage = JSON.parse(postMessage);\n } catch (e) {\n _logger.$logger.info('xoDolphin_jsonParseFailed');\n }\n }\n\n if (!postMessage || !postMessage.data || !postMessage.data.event) {\n _logger.$logger.info('xoDolphin_invalidPostMessage');\n return;\n }\n\n if (postMessage.data.event === 'phoneConfirmationLoaded') {\n _this2.hasOverlayLoaded = true;\n _angular.$rootScope.$emit('loaded');\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_loaded',\n 'context_id': _angular.$rootScope.token\n });\n }\n\n if (postMessage.data.event === 'phoneConfirmationCompleted') {\n _this2.isPhoneConfirmed = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'successfully_confirmed',\n 'context_id': _angular.$rootScope.token\n });\n _this2.actions.closeOverlay();\n }\n\n if (postMessage.data.event === 'phoneConfirmationError') {\n _this2.hasOverlayLoaded = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'generic_error',\n 'context_id': _angular.$rootScope.token\n });\n _this2.actions.closeOverlay();\n }\n\n if (postMessage.data.event === 'notNowClicked') {\n _this2.hasOverlayLoaded = true;\n _this2.actions.closeOverlay();\n }\n };\n (0, _angular.$timeout)(function () {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'show_overlay',\n 'context_id': _angular.$rootScope.token\n });\n\n _this2.$element.addClass('overlayOpen').promise().then(function () {\n // Note: A second timeout is added here to avoid a race condition where the DOM is not yet available\n // for the inject script to pick a targetElement for injecting the iframe.\n (0, _angular.$timeout)(function () {\n var variant = _this2.toastParams && _this2.toastParams.variant;\n var options = (0, _utils.getInjectULBaseObject)(variant);\n options.onPostMessage = onPostMessagesHandler;\n if (!options.targetElement) {\n _logger.$logger.info('xoDolphin_missingTargetElement');\n }\n if (window.PAYPAL && window.PAYPAL.unifiedLogin && options.targetElement) {\n _logger.$logger.info('xoDolphin_injectIframe');\n window.PAYPAL.unifiedLogin.inject(options);\n _this2.actions.startTimer();\n }\n });\n });\n });\n },\n closeOverlay: function closeOverlay() {\n var _this3 = this;\n\n this.$element.removeClass('overlayOpen');\n this.isTimerRunning = false;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_closed',\n 'context_id': _angular.$rootScope.token\n });\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('xoDolphin_hideOverlay');\n _this3.showOverlay = false;\n _this3.hasOverlayLoaded = false;\n }, 300);\n }\n },\n lifecycle: {\n enter: function enter() {\n var ulToast = _squid.$util.param('ulToast') || _squid.$util.param('ulToastWpsDone');\n this.toastParams = ulToast && _utils.variantParams[ulToast];\n },\n populate: function populate() {\n var _this4 = this;\n\n if (!this.toastParams) {\n _logger.$logger.info('Missing or invalid toast param!');\n return;\n }\n\n this.showBanner = !this.toastParams.autoTriggeredOverlay;\n this.bannerContent = this.toastParams.messageKey;\n this.successContent = this.toastParams.successKey;\n this.autoTriggeredOverlay = this.toastParams.autoTriggeredOverlay;\n this.variant = this.toastParams.variant;\n // DeviceInfo doesnt seem to have isDesktop, hence just avoiding the mobile use case\n this.fixedBanner = _index.$DeviceInfo.isMobile() ? '' : 'dolphinBannerFixed';\n\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': this.toastParams.transitionName,\n 'banner_type': this.toastParams.bannerType,\n 'context_id': _angular.$rootScope.token\n });\n\n // Cannot use `$apply` as we need to wait for the entire digest cycle to complete\n (0, _angular.$timeout)(function () {\n if (_this4.autoTriggeredOverlay) {\n _this4.actions.openOverlay();\n }\n angular.element('#confirmPhoneBtn').on('click', function () {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'click_link',\n 'context_id': _angular.$rootScope.token\n });\n _this4.actions.openOverlay();\n });\n // Add a delay to open the overlay when it's A) auto trigger and B) Not WPS\n // `ulToastWpsDone` will be added by UL only if it is indeed a WPS flow\n }, this.autoTriggeredOverlay && !_squid.$util.param('ulToastWpsDone') ? 1800 : 0);\n }\n }\n});\n\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_utils.getInjectULBaseObject;\n\n_utils.flowName;\n\n_utils.variantParams;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/dolphin/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/dolphin/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n
\\n \\n {{ content(successContent) }}

\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/dolphin/utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.getDolphinEligibility = exports.variantParams = exports.flowName = exports.getInjectULBaseObject = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _eligibility = __webpack_require__(\"../node_modules/xo-models/src/eligibility/index.js\");\n\nvar getCreditInterstitialEligibility = function getCreditInterstitialEligibility() {\n // TODO: Refactor the usage of PXP result stored in rootScope once Credit team make a change to this\n var creditInterstitialPXPResult = _angular.$rootScope['creditInterstitialPXPResult'];\n var creditInterstitialControl = 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial_control';\n // If there is a value && it is not Control, then it's any of the treatments\n return creditInterstitialPXPResult && creditInterstitialPXPResult !== creditInterstitialControl;\n};\n\nvar getInjectULBaseObject = exports.getInjectULBaseObject = function getInjectULBaseObject(variant) {\n var options = {\n config: {\n name: 'PPFrameRedirect',\n height: 577\n },\n queryParams: {\n intent: variant === 'add3' || variant === 'confirm3' ? 'xoAutoTrigger' : 'xoToast',\n flowId: _angular.$rootScope.token,\n flowInfo: _uiRouter.$state.current && _uiRouter.$state.current.name,\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.getLocaleCode()\n },\n iframePathname: '/signin/phone-confirmation',\n targetElement: document.getElementById('injectedULPhoneConfirmation')\n };\n\n return options;\n};\n\nvar flowName = exports.flowName = 'ul_dolphin';\n\n// A simple object to map all the properties specific to a particular variant\n// Not creating a function & abstracting common things for the sake of simplicity\n// Once the performance is measured, only 1 of the 4 variants will be left behind\n// and this object will have only 2 props again.\n// A variant prop is added to define the class name in the template\n// The query param's value is not used directly to avoid XSS\nvar variantParams = exports.variantParams = {\n confirm: {\n messageKey: 'login.confirmPhone',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'short_text_link',\n // `variant` uses a hardcoded value for th ulToast query param\n // it is used later in the flow from here instead of the query param\n variant: 'confirm'\n },\n confirm1: {\n messageKey: 'login.confirmPhoneWithButton',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'short_text_button',\n variant: 'confirm1'\n },\n confirm2: {\n messageKey: 'login.confirmPhoneLongWithButton',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'long_text_button',\n variant: 'confirm2'\n },\n confirm3: {\n // There is no messageKey in this variant\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'auto_trigger',\n variant: 'confirm3',\n autoTriggeredOverlay: true\n },\n add: {\n messageKey: 'login.addPhone',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'short_text_link',\n variant: 'add'\n },\n add1: {\n messageKey: 'login.addPhoneWithButton',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'short_text_button',\n variant: 'add1'\n },\n add2: {\n messageKey: 'login.addPhoneLongWithButton',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'long_text_button',\n variant: 'add2'\n },\n add3: {\n // There is no messageKey in this variant\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'auto_trigger',\n variant: 'add3',\n autoTriggeredOverlay: true\n }\n};\n\nvar getDolphinEligibility = exports.getDolphinEligibility = function getDolphinEligibility(stateName) {\n var isReviewOrFi = /checkout\\.review|checkout\\.selectFi/.test(stateName) && _squid.$util.param('ulToast');\n\n if (!isReviewOrFi) {\n _logger.$logger.info(flowName, {\n 'from': 'dolphin_elg_chk',\n 'to': 'process_dolphin_elg_chk',\n 'eligibility_reason': 'not_ryp',\n 'context_id': _angular.$rootScope.token\n });\n return _squid.$promise.resolve();\n }\n\n return _eligibility.$stickyCTA.instance().getEligibility()\n // Dolphin can be enabled only in case sticky & credit interstitial are not eligibile\n .then(function (isStickyEligible) {\n var eligibilityReason = 'no_sticky_or_credit';\n var isCreditInsterstialEligible = getCreditInterstitialEligibility();\n\n if (isCreditInsterstialEligible) {\n eligibilityReason = 'has_credit_interstitial';\n }\n\n if (isStickyEligible) {\n eligibilityReason = 'has_sticky';\n }\n\n _logger.$logger.info(flowName, {\n 'from': 'dolphin_elg_chk',\n 'to': 'process_dolphin_elg_chk',\n 'eligibility_reason': eligibilityReason,\n 'context_id': _angular.$rootScope.token\n });\n\n return !isStickyEligible && !isCreditInsterstialEligible;\n });\n};\n\n_angular.$rootScope;\n\n_uiRouter.$state;\n\n_squid.$locale;\n\n_squid.$promise;\n\n_squid.$util;\n\n_logger.$logger;\n\n_eligibility.$stickyCTA;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login-overlay/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/create-password/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/login/handler/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/password-recovery/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/login-overlay/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLoginOverlay', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n stateInfo: '=?',\n modalCallback: '=?'\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.autoLogin = false;\n $scope.ulEligibility = true;\n $scope.auth = _auth.$AuthModel.instance();\n\n var stateInfo = {};\n var subFlowTitles = {\n addCard: 'loginAddCard',\n bank: 'loginAddBank',\n addShipping: 'loginAddAddress',\n deleteShipping: 'loginDeleteAddress',\n confirmUpop: 'loginConfirmUpop',\n redirectToCape: 'loginApplyCredit',\n sepaAgreement: 'riskyLoginSepa',\n DEFAULT: 'loginTitle'\n };\n\n function getFptiStateName() {\n if ($scope.createPassword) {\n return 'quick_security_check';\n } else if ($scope.passwordRecovery) {\n return 'password_recovery';\n } else {\n return 'LOGIN_STEP_UP_AUTH';\n }\n }\n\n /**\n * Use iframe for risky login use case.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLoginViaIframe = function doRiskyLoginViaIframe(event, data) {\n _logger.$logger.debug('doRiskyLoginViaIframe');\n $scope.showOverlay = true;\n\n $('#wrapper #spinner').hide();\n\n stateInfo = data;\n\n var subFlowName = (stateInfo.newState || '').replace(/^.*\\./, '');\n\n if (subFlowName) {\n $scope.subFlowName = subFlowName;\n $scope.subFlowTitleKey = 'login.' + subFlowTitles[subFlowName] || subFlowTitles.DEFAULT;\n }\n\n $scope.createPassword = (0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less;\n $scope.passwordRecovery = false;\n if ($scope.createPassword) {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'prepare_quick_security_check'\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'prepare_login_step_up_AUTH'\n });\n }\n\n (0, _angular.$timeout)(function () {\n $element.addClass('overlayOpen');\n });\n };\n\n /**\n * Do a full page redirect to ul as landing for risky login use case.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLoginViaFullpageRedirect = function doRiskyLoginViaFullpageRedirect(event, data) {\n _logger.$logger.debug('doRiskyLoginViaFullpageRedirect');\n stateInfo = data;\n var subFlowName = (stateInfo.newState || '').replace(/^.*\\./, '');\n var subFlowTitleKey = subFlowName && subFlowTitles[subFlowName] || subFlowTitles.DEFAULT;\n\n return $scope.auth.redirectToLogin('insufficientPermission', {\n ulClientKey: subFlowTitleKey\n });\n };\n\n /**\n * Decide to do fullpage or iframe risky login.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLogin = function doRiskyLogin(event, data) {\n _logger.$logger.debug('doRiskyLogin');\n if (_squid.$config.fullPageRiskyLogin) {\n return doRiskyLoginViaFullpageRedirect(event, data);\n } else {\n return doRiskyLoginViaIframe(event, data);\n }\n };\n\n var cancelInsufficientPermission = _angular.$rootScope.$on('$insufficientPermission', doRiskyLogin);\n\n $scope.$on('$destroy', cancelInsufficientPermission);\n\n var hideOverlay = function hideOverlay() {\n $('#wrapper #spinner').attr('style', '');\n $element.removeClass('overlayOpen');\n return (0, _angular.$timeout)(function () {\n $scope.showOverlay = false;\n }, 300);\n };\n\n function logCancel() {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'process_user_cancel'\n });\n }\n\n $scope.hideModal = function (event) {\n event.preventDefault();\n logCancel();\n hideOverlay();\n _uiRouter.$state.go(stateInfo.oldState);\n };\n\n $scope.onCreatePassword = function () {\n _angular.$rootScope.$emit('loading');\n $scope.passwordRecovery = true;\n };\n\n $scope.onPasswordRecoveryReady = function () {\n _angular.$rootScope.$emit('loaded');\n $scope.createPassword = false;\n };\n\n $scope.onCompletePasswordRecovery = function () {\n $scope.passwordRecovery = false;\n };\n\n $scope.onPasswordRecovery = function () {\n $scope.auth.password_less = false;\n };\n\n $scope.onSuccess = function () {\n var checkoutSession = _index.$CheckoutSessionModel.instance($scope.token);\n var checkoutCart = _index.$CheckoutCartModel.instance(_angular.$rootScope.token);\n return checkoutSession.action('create', {\n data: {\n baToken: checkoutCart.billing && checkoutCart.billing.ba_token\n },\n success: function success() {\n if (stateInfo.pageOnOverlay) {\n _uiRouter.$state.go(stateInfo.newState, { fromLoginOverlay: true });\n $scope.showOverlay = false;\n } else {\n hideOverlay().then(function () {\n _uiRouter.$state.go(stateInfo.newState);\n });\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'process_login_step_up_AUTH'\n });\n }\n })['finally'](function () {\n hideOverlay();\n });\n };\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$feature;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutSessionModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login-overlay/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n
\\n \\n
\\n \\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _dist = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _user = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/popup/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/error-tooltip/directive.js\");\n\nvar _fn = __webpack_require__(\"../node_modules/xo-login-components/src/login/fn.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/login/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLogin', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n doneFn: '=?',\n errorFn: '=?',\n clientId: '=?',\n redirectUri: '=?',\n scope: '=?',\n autoLogin: '=?',\n apsIntegration: '=?',\n batch: '=?',\n loginSubmit: '=?'\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.locale = _squid.$locale;\n var lang = _squid.$locale.lang ? _squid.$locale.lang : 'en';\n var country = _squid.$locale.country ? _squid.$locale.country : 'US';\n var localeNVP = 'locale.x=' + lang.toLowerCase() + '_' + country.toUpperCase();\n var forgotPasswordUrl = 'https://www.paypal.com/' + country.toLowerCase() + '/webapps/accountrecovery/passwordrecovery?' + localeNVP;\n var legacyForgotPasswordUrl = 'https://www.paypal.com/' + country.toLowerCase() + '/merchantpaymentweb?cmd=_account-recovery&from=PayPal&' + localeNVP;\n var checkoutInputData = _user.$CheckoutInputDataModel.instance(_angular.$rootScope.token);\n var creditData = _credit.$CreditDataModel.instance(_angular.$rootScope.token);\n var apsRemMe = $scope.apsIntegration === 'apsIntegrationRM';\n var $passwordField = $element.find('[ng-model=\"auth.password\"]');\n var fptiStateName = $scope.apsIntegration ? 'LOGIN_APS' : 'LOGIN';\n\n $scope.forgotPasswordUrl = (0, _squid.$feature)('newForgotPasswordSupported') ? forgotPasswordUrl : legacyForgotPasswordUrl;\n _fn.$fn.sendTypingSpeedPayload('Hermes');\n\n /* ******** Here goes the Remember User controls *************************** */\n\n // Show the RM consent section when\n // 1. feature is ON\n // 2. when its not a contingency flow\n // 3. eBay doesn't want to hide it explicitly\n\n if (checkoutInputData.rmEnabled(Boolean(_squid.$config.rememberMeFeatureEnabled)) && !checkoutInputData.hideRM()) {\n fptiStateName = 'LOGIN_RM';\n $scope.rememberMe = 'nonKmli';\n } else if (apsRemMe) {\n $scope.rememberMe = 'kmli';\n }\n $scope.rememberMeChkBox = {\n // Leave the consent box un-ticked by default\n agreed: false\n };\n\n // Show the RM details only if user clicks on 'learn more' link or clicks on Checkbox\n $scope.showRmMore = false;\n\n // Expand details when RM check-box is ticked and Remember the user\n $scope.toggleRMDetails = function () {\n $scope.showRmMore = $scope.rememberMeChkBox.agreed;\n };\n\n function setRememberUser() {\n if (checkoutInputData.rmEnabled(Boolean(_squid.$config.rememberMeFeatureEnabled))) {\n if (checkoutInputData.hideRM() === 'true') {\n // Feature is ON but consent box is hidden since hideRM param is true\n // Do not remember user in this case\n $scope.auth.rememberUser = false;\n } else {\n // RM is enabled and consent box displayed on login page\n // Remember the user based on the consent of user\n $scope.auth.rememberUser = $scope.rememberMeChkBox.agreed ? true : false;\n }\n } else {\n // Feature is wired off\n // If RM is not enabled that means the control is with eBay and we should retain current behavior by remembering the user\n $scope.auth.rememberUser = true;\n }\n }\n\n /* ************ Remember User Ends *************************************** */\n\n function showLoadingMessage() {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get(creditData.isRedirectFromCape() || creditData.isChangeStatus() ? 'base.processing' : 'base.loggingIn'));\n }\n\n function loginAction() {\n showLoadingMessage();\n var loginInput = {\n user: {\n email: $scope.auth.email,\n password: $scope.auth.password\n }\n };\n\n if ($scope.clientId) {\n loginInput.client = {\n redirect_uri: _squid.$config.app_redirect_uri,\n client_id: _squid.$config.app_clientId || '',\n target_client_id: _squid.$util.param('fromLipp') === 'true' ? $scope.clientId : _squid.$util.base64Decode($scope.clientId), // eslint-disable-line block-scoped-var,no-undef\n scope: $scope.scope,\n response_type: 'token id_token',\n skip_oauth: false,\n skip_consent: true\n };\n } else if ($scope.apsIntegration) {\n loginInput.client = {\n remember_me: Boolean(apsRemMe && $scope.rememberMeChkBox.agreed)\n };\n loginInput.fastLogin = true;\n }\n\n // updated the product to decide the entry point\n loginInput.product = _angular.$rootScope.wps ? 'wps' : 'ec';\n\n // if risk_correlation_id (fraudNetId) is present in cart, then include it to req\n loginInput.fraudnet_id = $scope.checkoutCart.supplementary && $scope.checkoutCart.supplementary.risk_correlation_id;\n\n // add token (cart-id) in context for RL\n var adsClientContextData = { context_type: 'Cart-ID', context_id: $scope.token };\n\n loginInput['ads-client-context-data'] = adsClientContextData;\n $scope.auth.action('login', {\n data: loginInput,\n headers: {\n 'x-pp-ads-client-context-data': JSON.stringify(adsClientContextData)\n },\n success: function success(result) {\n var transition_name = $scope.rememberMeChkBox.agreed ? 'process_login_rm' : 'process_login';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name\n });\n\n if (window.xprops && window.xprops.onAuth && $scope.auth.access_token) {\n return window.xprops.onAuth({\n accessToken: $scope.auth.access_token\n }).then(function () {\n return $scope.doneFn($scope.auth);\n });\n }\n return $scope.doneFn($scope.auth);\n },\n\n contingencies: {\n DEFAULT: function DEFAULT(name, contingency) {\n var transition_name = $scope.rememberMeChkBox.agreed ? 'process_login_rm' : 'process_login';\n var error_source = $scope.apsIntegration ? 'aps' : 'userauth';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name,\n 'int_error_description': contingency && contingency.message,\n 'error_type': 'soft_decline',\n 'error_source': error_source\n });\n $scope.auth.password = '';\n $passwordField.focus();\n return $scope.errorFn(name, contingency);\n }\n }\n });\n }\n\n $scope.$on('$destroy', function () {\n $scope.auth.password = '';\n });\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n }).then(function () {\n if ($scope.auth.loggedIn()) {\n if ($scope.autoLogin) {\n showLoadingMessage();\n if ($scope.auth.remembered) {\n _logger.$logger.info('REMEMBERED_ACTIVE_SESSION');\n } else {\n _logger.$logger.info('ACTIVE_SESSION');\n }\n return $scope.doneFn($scope.auth);\n }\n } else if ($scope.checkoutCart.payer && $scope.checkoutCart.payer.email && !$scope.auth.timed_out) {\n $scope.auth.email = $scope.checkoutCart.payer.email;\n }\n var transition_name = void 0;\n\n if (apsRemMe) {\n transition_name = 'prepare_login_rm';\n } else if (creditData.isCreditTxn()) {\n transition_name = 'prepare_login_ppc';\n } else {\n transition_name = 'prepare_login';\n }\n\n var app_int_type = _dist.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name,\n 'app_int_type': app_int_type\n });\n $scope.onSubmit = function () {\n setRememberUser();\n loginAction();\n };\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_dist.$DeviceInfo;\n\n_credit.$CreditDataModel;\n\n_user.$CheckoutInputDataModel;\n\n_index.$CheckoutCartModel;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$util;\n\n_fn.$fn;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/fn.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fn', function () {\n var fncls = 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99';\n var fnCorrId;\n var fraudnetConfig = _squid.$config.fraudnet;\n var token = _angular.$rootScope.token || _squid.$meta.token;\n\n if (_squid.$meta.baToken) {\n _logger.$logger.info('BEAM_In_Hermes_Checkout');\n fnCorrId = _squid.$meta.baToken;\n } else if (_angular.$rootScope.fraudNetId) {\n fnCorrId = _angular.$rootScope.fraudNetId;\n } else {\n fnCorrId = _angular.$rootScope.token || _squid.$meta.token;\n }\n\n var options = {\n fnSessionId: fnCorrId,\n sourceId: fraudnetConfig && fraudnetConfig.sourceId || 'HERMES_SIGNIN',\n allowsCustomEvent: typeof CustomEvent !== 'undefined' && _angular2['default'].isFunction(CustomEvent)\n };\n\n function init() {\n\n _logger.$logger.info('FN_contexts', {\n 'token': token,\n 'fnSessionId': options.fnSessionId\n });\n\n // Todo: remove the conditional logic after all the boxes picked up latest config.\n if (_angular2['default'].isString(_squid.$config.urls.fraudnetUrl)) {\n options.fnUrl = _squid.$config.urls.fraudnetUrl;\n } else {\n options.fnUrl = _squid.$config.urls.fraudnetUrl && _squid.$config.urls.fraudnetUrl.passive;\n }\n\n _logger.$logger.info('FN_Initialised', {\n 'allowsCustomEvent': options.allowsCustomEvent\n });\n }\n\n var enableFraudnet = function enableFraudnet() {\n var userAgent = _angular.$window.navigator.userAgent;\n\n // Disable for web view\n if (_index.$DeviceInfo.isApp()) {\n if (_angular.$window.enableFraudNetForMobileWebView) {\n _logger.$logger.info('Enable_FN_MobileApp_PXP_Decision');\n return true;\n }\n\n _logger.$logger.info('Disable_FN_Mobileapp');\n return false;\n } else if (userAgent.indexOf('EtsyInc') > -1) {\n _logger.$logger.info('Disable_FN_Etsy');\n return false;\n }\n _logger.$logger.info('Enable_FN');\n return true;\n };\n\n function injectScript(fnUrl) {\n var script = document.createElement('script');\n script.id = 'js-sync';\n script.src = fnUrl;\n document.body.appendChild(script);\n }\n\n function injectIframe(beaconOptions) {\n var iframe = document.createElement('iframe');\n var dom;\n var doc;\n var where;\n\n iframe.src = 'about:blank'; // eslint-disable-line no-script-url\n iframe.title = '';\n iframe.role = 'presentation';\n (iframe.frameElement || iframe).style.cssText = 'width: 0; height: 0; border: 0; display: none;';\n\n where = document.getElementsByTagName('script');\n where = where[where.length - 1];\n where.parentNode.insertBefore(iframe, where);\n\n try {\n doc = iframe.contentWindow.document;\n } catch (e) {\n dom = document.domain;\n iframe.src = 'javascript:var d=document.open();d.domain=\"' + dom + '\";void(0);'; // eslint-disable-line no-script-url\n doc = iframe.contentWindow.document;\n }\n\n doc.open()._l = function () {\n var js = this.createElement('script');\n if (dom) {\n this.domain = dom;\n }\n js.id = 'js-iframe-async';\n js.src = beaconOptions.fnUrl;\n this.body.appendChild(js);\n };\n function listener() {\n doc._l();\n }\n if (iframe.addEventListener) {\n iframe.addEventListener('load', listener, false);\n } else if (iframe.attachEvent) {\n iframe.attachEvent('onload', listener);\n } else {\n doc.write('');\n }\n doc.close();\n }\n\n function _injectConfig(configOptions) {\n var script = document.getElementById('fconfig');\n\n if (script) {\n if (script.parentNode) {\n script.parentNode.removeChild(script);\n }\n }\n\n script = document.createElement('script');\n script.id = 'fconfig';\n script.type = 'application/json';\n script.setAttribute('fncls', fncls);\n\n script.text = '{\"f\": \"' + configOptions.fnSessionId + '\", \"s\": \"' + configOptions.sourceId + '\", \"cb\": \"fnCallback\"}';\n document.body.appendChild(script);\n }\n\n /**\n * Loads the fraudnet beacons (triggers 2 image beacons to c.paypal.com and c6.paypal.com)\n *\n * Integration pattern ripped from the Fraudnet Integration guide:\n * https://confluence.paypal.com/display/RiskDataAcquisition/FraudNet+Client+System+Integration+Guide+3.0#FraudNetClientSystemIntegrationGuide3.0-IntegrationCode\n */\n function _loadBeacon(beaconOptions) {\n if (_index.$DeviceInfo.isApp() && _angular.$window.enableFraudNetForMobileWebView) {\n injectScript(beaconOptions.fnUrl);\n } else {\n injectIframe(beaconOptions);\n }\n }\n\n function trigger(scope) {\n\n var fnLoaded = !!_angular.$rootScope.fnLoaded;\n\n if (fnLoaded) {\n return false;\n }\n _logger.$logger.info('Trigger_FN');\n\n if (options.fnUrl) {\n if (enableFraudnet()) {\n _angular.$window.fnCallback = function () {\n if (scope) {\n scope.$emit('fnCallback');\n }\n };\n _injectConfig(options);\n _loadBeacon(options);\n _angular.$rootScope.fnLoaded = true;\n return true;\n }\n }\n return false;\n }\n\n /**\n * send a payload to fraudnet for analysing typing speed\n * @param type\n */\n function sendTypingSpeedPayload(type) {\n\n var tsLoadPayload = {\n 'detail': {\n 'type': type\n }\n };\n\n if (type === 'Hermes') {\n tsLoadPayload.detail['fields'] = ['username', 'password'];\n }\n if (type === 'HermesUL') {\n tsLoadPayload.detail['frame'] = 'injectedUl';\n tsLoadPayload.detail['fields'] = ['email', 'password'];\n }\n\n if (type) {\n var event;\n if (options.allowsCustomEvent) {\n // document.createEvent deprecated\n _logger.$logger.info('fn_CustomEvent_type1');\n event = new CustomEvent('tsLoad', tsLoadPayload);\n } else {\n // IE does not support CustomEvent constructor\n try {\n _logger.$logger.info('fn_CustomEvent_type2');\n event = window.document.createEvent('CustomEvent');\n event.initCustomEvent('tsLoad', true, true, tsLoadPayload.detail);\n } catch (err) {\n _logger.$logger.info('fn_CustomEvent_None', {\n 'error': err\n });\n }\n }\n if (event) {\n window.document.dispatchEvent(event);\n _logger.$logger.info('Dispatched_FN_TS_Payload_' + type);\n }\n }\n }\n\n return {\n init: init,\n trigger: trigger,\n sendTypingSpeedPayload: sendTypingSpeedPayload\n };\n});\n\n_squid.$config;\n\n_squid.$meta;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-login-components/src/login\", \"../node_modules/xo-login-components/src/login/fn.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/handler/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _props = __webpack_require__(\"../node_modules/xo-login-components/src/login/props.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/login/handler/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-login-components/src/unified-login/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/login/directive.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLoginHandler', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n successCallback: '=?',\n contingencyCallback: '=?',\n autoLogin: '=?',\n ulEligibility: '=?',\n subFlowTitleKey: '=?',\n apsIntegration: '=?',\n batch: '=?',\n loginSubmit: '=?',\n logout: '=?',\n preAuth: '=?',\n hideloginpp: '=?',\n flowcontext: '=?',\n hideTitle: '=?'\n },\n\n controller: ['$scope', function ($scope) {\n // Login Contingency Handling\n var CONTENT_KEY = {\n INVALID_EMAIL_PASSWORD: 'invalidEmailPasswordPageError',\n ACCOUNT_LOCKED: 'accountLockedPageError',\n ACCOUNT_CLOSED: 'accountLockedPageError',\n INVALID_PHONE: 'invalidPhone',\n INVALID_PIN: 'invalidPin',\n INVALID_ACCESS_TOKEN: 'invalidAccessToken',\n TIMED_OUT: 'loginStatusTimedOut',\n CANNOT_PAY_SELF: 'cannotPaySelf',\n RISK_DECLINE: 'riskDeclinePageError',\n LOGIN_ADD_PHONE: 'loginAddPhone',\n LOGIN_PREFILLED_SHIPPING_ADDRESS: 'loginMerchantPassedAddress',\n LOGIN_CONTINGENCY: 'loginContingency',\n LOGIN_REACTIVATE: 'checkOneTouch',\n LOGIN_LEAVECHECKED: 'leaveOneTouchChecked',\n LOGIN_OT_GENERIC_ERROR: 'reactivateOneTouch',\n VENMO_GENERIC_ERROR: 'venmoGenericError'\n };\n\n var CONTENT_MAPPING = {\n INVALID_USER: { content: CONTENT_KEY.INVALID_EMAIL_PASSWORD, type: 'error' },\n INVALID_PHONE_PIN: { content: CONTENT_KEY.INVALID_PIN, type: 'error' },\n INVALID_ACCESS_TOKEN: { content: CONTENT_KEY.INVALID_ACCESS_TOKEN, type: 'error' },\n LOCKED_USER: { content: CONTENT_KEY.ACCOUNT_LOCKED, type: 'error' },\n ACCOUNT_LOCKED: { content: CONTENT_KEY.ACCOUNT_LOCKED, type: 'error' },\n CLOSED_USER: { content: CONTENT_KEY.ACCOUNT_CLOSED, type: 'error' },\n TIMED_OUT: { content: CONTENT_KEY.TIMED_OUT, type: 'error' },\n CANNOT_PAY_SELF: { content: CONTENT_KEY.CANNOT_PAY_SELF, type: 'error' },\n RISK_DECLINE: { content: CONTENT_KEY.RISK_DECLINE, type: 'error' },\n addPhone: { content: CONTENT_KEY.LOGIN_ADD_PHONE, type: 'error' },\n PAYER_AUTHENTICATION_REQUIRED: {\n content: CONTENT_KEY.LOGIN_PREFILLED_SHIPPING_ADDRESS,\n type: 'info'\n },\n LOGIN_CONTINGENCY: { content: CONTENT_KEY.LOGIN_CONTINGENCY, type: 'error' },\n ONETOUCH_REACTIVATE: { content: CONTENT_KEY.LOGIN_REACTIVATE, type: 'warning' },\n ONETOUCH_LEAVECHECKED: { content: CONTENT_KEY.LOGIN_LEAVECHECKED, type: 'warning' },\n ONETOUCH_GENERIC_ERROR: { content: CONTENT_KEY.LOGIN_OT_GENERIC_ERROR, type: 'warning' },\n VENMO_ERROR: { content: CONTENT_KEY.VENMO_GENERIC_ERROR, type: 'error' }\n };\n\n function populateMessage(name, type) {\n var contentKey = CONTENT_MAPPING[name];\n if (contentKey) {\n $scope.message = {\n msgKeys: ['login.' + contentKey.content],\n type: type || contentKey.type\n };\n } else {\n _logger.$logger.debug('unresolved content for login ' + type + ' message ' + name + ' in xo-login page');\n }\n }\n\n function handleAuthChallengeFailure(urlParams) {\n if (urlParams.acRedirect === '2fa') {\n var userLocale = urlParams['locale.test'];\n\n if (userLocale) {\n _squid.$locale.chosenLang = _squid.$localeHelper.normalizeLocale(userLocale).language;\n }\n\n if (urlParams.ulMethod === 'phone') {\n _logger.$logger.debug('2FA_RETURNED_FAILED_PHONE');\n populateMessage('INVALID_PHONE_PIN', 'error');\n } else {\n _logger.$logger.debug('2FA_RETURNED_FAILED_EMAIL');\n populateMessage('INVALID_USER', 'error');\n }\n } else if (urlParams.acRedirect === 'loginato') {\n _logger.$logger.debug('LOGIN_ATO_RETURNED_FAILED');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n } else if (urlParams.acRedirect === 'safe') {\n _logger.$logger.debug('SAFE_RETURNED_FAILED');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n }\n\n function handleAuthChallengeSuccess(urlParams) {\n switch (urlParams.acRedirect) {\n case '2fa':\n _logger.$logger.debug('2FA_RETURNED_SUCCESS');\n break;\n case 'loginato':\n _logger.$logger.debug('LOGIN_ATO_RETURNED_SUCCESS');\n break;\n case 'safe':\n _logger.$logger.debug('SAFE_RETURNED_SUCCESS');\n break;\n default:\n // do nothing\n }\n $scope.auth.is_auth_api_call = !urlParams.acRedirect;\n }\n\n $scope.onComplete = function (auth) {\n // Dont show the login contingency message once poma password recovery is enabled.\n if (!(0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less && $scope.checkoutCart.isBilling()) {\n populateMessage('LOGIN_CONTINGENCY', 'info');\n }\n\n if (_angular.$rootScope.contingency && _angular.$rootScope.contingency.message) {\n populateMessage(_angular.$rootScope.contingency.message, 'error');\n } else {\n if (!_squid.$util.param('langTgl')) {\n // for UL Landing\n _squid.$locale.choose(auth.country, auth.language, false);\n }\n $scope.successCallback();\n }\n };\n\n // Make country and lang available to htmlContent for dynamically generating content\n $scope.locale = _squid.$locale;\n\n if (_uiRouter.$stateParams.targetPage) {\n if (_props.$loginProps.inList(_uiRouter.$stateParams.targetPage) && (0, _squid.$feature)('riskyLoginContingency')) {\n var riskyLoginInfo = _props.$loginProps.mapInfo(_uiRouter.$stateParams.targetPage);\n $scope.subFlowTitleKey = riskyLoginInfo.title;\n $scope.contingencyDesc = riskyLoginInfo.subtitle;\n $scope.hideloginpp = true;\n $scope.postlogout = function () {\n delete $scope.subFlowTitleKey;\n\n if ($scope.contingencyDesc) {\n delete $scope.contingencyDesc;\n }\n\n delete $scope.hideloginpp;\n $scope.showLanguageDropdown = (0, _squid.$feature)('languageToggle');\n $scope.logout();\n };\n } else {\n var errMessage = CONTENT_MAPPING[_uiRouter.$stateParams.targetPage] ? _uiRouter.$stateParams.targetPage : 'LOGIN_CONTINGENCY';\n var type = errMessage.type ? errMessage.type : 'info';\n populateMessage(errMessage, type);\n }\n }\n\n if (_auth.$AuthModel.instance().meta.invalidated) {\n populateMessage('TIMED_OUT', 'error');\n } else if (_auth.$AuthModel.instance().meta.selfPay) {\n populateMessage('CANNOT_PAY_SELF', 'error');\n _auth.$AuthModel.instance().meta.selfPay = false;\n }\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token).retrieve()\n }).then(function () {\n // Land on create password info page in case poma user was routed to login, after the\n // initial login/auth.\n if ((0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less && !$scope.autoLogin) {\n _uiRouter.$state.go('checkout.createPassword', { targetPage: _uiRouter.$stateParams.targetPage });\n return;\n }\n\n var ULCallbacks = {\n showErrorMessages: function showErrorMessages(errorCase) {\n populateMessage(errorCase);\n (0, _angular.$timeout)(function () {\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n },\n toggleUnifiedLogin: function toggleUnifiedLogin(value) {\n $scope.ulEligibility = value;\n $scope.apsIntegration = true;\n _angular.$rootScope.continueLoadingForUL = value;\n (0, _angular.$timeout)(function () {\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n }\n };\n\n // redirect to UL if config says true and we have targetPage\n if (_squid.$config.fullPageRiskyLogin && _uiRouter.$stateParams.targetPage) {\n _logger.$logger.debug('doRiskyLoginViaRedirectToUL');\n // delete scope variables to avoid UL iframe execution\n delete $scope.ulEligibility;\n delete $scope.apsIntegration;\n\n var subFlowTitleKey = $scope.subFlowTitleKey && $scope.subFlowTitleKey.split('.')[1];\n\n return $scope.auth.redirectToLogin('insufficientPermission', {\n ulClientKey: subFlowTitleKey\n });\n } else {\n _logger.$logger.debug('doRiskyLoginViaiFrameInHermes');\n $scope.ULCallback = function (name, value) {\n var callback = ULCallbacks[name];\n if (callback) {\n callback(value);\n }\n };\n }\n\n if ($scope.auth.timed_out) {\n populateMessage('TIMED_OUT', 'error');\n }\n\n if (!$scope.subFlowTitleKey) {\n $scope.showLanguageDropdown = (0, _squid.$feature)('languageToggle');\n }\n\n var urlParams = _squid.$util.params();\n\n if (urlParams.acRedirect) {\n // Returning from auth challenge\n if (urlParams.failedBecause) {\n handleAuthChallengeFailure(urlParams);\n } else {\n handleAuthChallengeSuccess(urlParams);\n }\n }\n\n var getErrorDesc = function getErrorDesc(msg) {\n return decodeURIComponent(msg);\n };\n\n var getErrorType = function getErrorType(msg) {\n var errorNum = decodeURIComponent(msg).match(/\\d+/g); // to extract the error type from the error msg\n return errorNum ? errorNum : '';\n };\n\n var mapCodeToError = function mapCodeToError(code) {\n\n var errorMap = {\n '82016': 'RISK',\n '82017': 'COMPLIANCE'\n };\n\n return errorMap[code];\n };\n\n if (_uiRouter.$stateParams.venmoError) {\n\n if (_uiRouter.$stateParams.errorCode) {\n\n var errorSource = mapCodeToError(_uiRouter.$stateParams.errorCode);\n if (errorSource) {\n _logger.$logger.info('checkout_fpti', {\n from: 'VENMO_ENTRYPOINT',\n to: 'process_checkout_login',\n 'int_error_code': _uiRouter.$stateParams.errorCode,\n 'int_error_description': _uiRouter.$stateParams.errorMessage ? getErrorDesc(_uiRouter.$stateParams.errorMessage) : '',\n 'error_type': _uiRouter.$stateParams.errorMessage ? getErrorType(_uiRouter.$stateParams.errorMessage) : '',\n 'error_source': errorSource\n });\n }\n }\n\n populateMessage('VENMO_ERROR', 'error');\n }\n\n var handleContingency = {\n // Errors - Show Page Level Error\n INVALID_USER: populateMessage,\n LOCKED_USER: populateMessage,\n ACCOUNT_LOCKED: populateMessage,\n CLOSED_USER: populateMessage,\n ONETOUCH_REACTIVATE: populateMessage,\n ONETOUCH_LEAVECHECKED: populateMessage\n\n };\n\n $scope.onContingency = function (name, contingency, type) {\n // eslint-disable-line no-shadow\n\n _squid.$locale.choose($scope.auth.country, $scope.auth.language, false);\n\n if (!handleContingency[name]) {\n return $scope.contingencyCallback(name, contingency);\n }\n\n var message_type = type || 'error';\n return handleContingency[name](name, message_type);\n };\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$localeHelper;\n\n_squid.$populate;\n\n_squid.$util;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_props.$loginProps;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/handler/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n
\\n \\n \\n
\\n
\\n

\\n

\\n
\\n

\\n

\\n \\n \\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/kmliEligibility.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$KmliEligibility = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar scope = { eligibility: {} };\nvar ulMeta = _squid.$config.ulMeta || {};\n\nvar getPXPList = function getPXPList(country) {\n // returns a list of Pxp's that needs to be executed\n var countryCTX = { 'ctx.COUNTRY': country };\n var pxpExpId = ulMeta.pxpExpId;\n var pxpList = [(0, _squid.$pxp)(pxpExpId, countryCTX, 'xo_hermes_ul_timeout_treatment.*', false, true), (0, _squid.$pxp)(pxpExpId, countryCTX, 'xo_hermes_ul_preload_treatment', false, true)];\n\n return pxpList;\n};\n\nvar routingReason = function routingReason() {\n // Check for conditions that deviates from the PXP eligibility\n // Reasons that deviates from control to treatment\n var isRememberedUser = scope.auth.refreshToken();\n\n if (scope.kmli === true) {\n return 'kmliMandated';\n } else if (isRememberedUser) {\n return 'rememberedUser';\n } else if (_squid.$util.param('ul') === '2') {\n return 'ulParam';\n } else if (_squid.$meta.corp && ulMeta.allowKMLIForInternalIP) {\n var merchantCountry = scope.checkoutAppData.merchant.merchant_country;\n\n if ((0, _squid.$feature)('enableOneTouchInternalIP', false, merchantCountry)) {\n return 'internalIP';\n }\n } else if (ulMeta.enableOneTouchByDefault) {\n return 'oneTouchByDefault';\n }\n};\n\nvar compatibility = function compatibility(reasons) {\n // Check for compatibility/environment issues which impacts UL/KMLI overall\n // This should override previous decisions\n if (_index.$DeviceInfo.isApp()) {\n scope.kmliEligibility = false;\n reasons.push('Webview');\n } else if (!_squid.$util.cookiesEnabled()) {\n scope.kmliEligibility = false;\n reasons.push('cookiesDisabled');\n } else if (scope.auth.ota) {\n scope.kmliEligibility = false;\n reasons.push('otaDevice');\n }\n\n if (scope.forcedLogin === true) {\n scope.kmliEligibility = false;\n reasons.push('forcedLogin');\n }\n if (scope.logoutCallback) {\n scope.kmliEligibility = true;\n reasons.push('riskyLoginContingency');\n }\n};\n\nvar isULpreload = function isULpreload(preloadULTreatments) {\n // const userAgent = $window.navigator.userAgent;\n // const isIE = !!userAgent.match(/MSIE|trident|edge/i);\n var isTreatment = Boolean(preloadULTreatments && preloadULTreatments.treatment_name);\n var forceUlss = _squid.$util.param('_ulss') === 'true';\n var preloadUL = forceUlss || isTreatment;\n\n return preloadUL;\n};\n\nvar isUlAsLanding = function isUlAsLanding() {\n // markes\n var forceUlAsLanding = _squid.$util.param('ul') === 'landing';\n var ulAsLandingParam = _squid.$util.param('ulReturn') === 'true';\n\n // tried Ul as landing -> failed -> used iframe\n var failedAttempt = _squid.$util.param('lndgFailedBecause'); // eslint-disable-line no-unused-vars\n\n\n return forceUlAsLanding || ulAsLandingParam;\n};\n\nvar getTimeoutLimit = function getTimeoutLimit(pxpTimeoutTrt) {\n var ulTimeoutLimit = void 0;\n var timeoutTrtFact = pxpTimeoutTrt && angular.isArray(pxpTimeoutTrt.factors);\n var pxpTimeoutVal = timeoutTrtFact && pxpTimeoutTrt.factors[0] && pxpTimeoutTrt.factors[0].value;\n\n if (pxpTimeoutVal) {\n ulTimeoutLimit = pxpTimeoutVal;\n _logger.$logger.info('pxp_timeout_treatment', { ulTimeoutLimit: ulTimeoutLimit });\n }\n return ulTimeoutLimit;\n};\n\nvar $KmliEligibility = exports.$KmliEligibility = {\n init: function init(params) {\n if (scope.eligibility.treatment) {\n // do not init twice\n return _angular.$q.resolve(scope.eligibility);\n }\n _logger.$logger.debug('kmliEligibility_init');\n scope.forcedLogin = params && params.forcedLogin;\n scope.logoutCallback = params && params.logoutCallback;\n\n return (0, _squid.$populate)(scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = scope.checkoutAppData.merchant.merchant_country;\n\n return _angular.$q.all(getPXPList(country)).then(function (result) {\n scope.eligibility.ulTimeoutLimit = getTimeoutLimit(result[0]);\n scope.eligibility.preloadUL = isULpreload(result[1]);\n scope.eligibility.safeEligibility = true;\n scope.eligibility.ulAsLanding = isUlAsLanding();\n });\n }).then(function () {\n // STEP1: kmli pxp ramped to 100%, so always kmli eligible\n scope.kmliEligibility = true;\n\n // STEP2: Push the eligible reasons from routingReason check.\n var reasons = []; // Reasons that deviates from control to treatment\n\n reasons.push('pxpFullyRamped');\n\n var reason = routingReason();\n\n if (reason) {\n scope.kmliEligibility = true;\n reasons.push(reason);\n }\n\n // STEP3: Check for compatibility/environment issues which impacts UL/KMLI overall\n compatibility(reasons);\n\n var routing_reason = reasons[reasons.length - 1];\n\n scope.eligibility.treatment = true;\n scope.eligibility.routingReason = routing_reason;\n scope.eligibility.deviatingReasons = reasons;\n scope.eligibility.kmliEligibility = scope.kmliEligibility;\n\n // STEP4: Instrument deterministically whether KMLI is shown to the user or not\n _logger.$logger.debug(scope.kmliEligibility ? 'KMLI_ELIGIBLE_USER' : 'KMLI_INELIGIBLE_USER', { userGroup: reasons, routing_reason: routing_reason });\n _logger.$logger.info('checkout_fpti', {\n 'from': 'KMLI_ELG_CHK',\n 'to': 'process_kmli_elg_chk',\n routing_reason: routing_reason\n });\n return scope.eligibility;\n });\n },\n eligible: function eligible() {\n return scope.eligibility;\n }\n};\n\nangular.value(\"$KmliEligibility\", $KmliEligibility);\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_auth.$AuthModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/props.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar RISKY_LOGIN_TITLE = {\n ECONSENT_REQUIRED: '',\n ELV_DECLINE: '',\n EXPIRED_CREDIT_CARD: 'login.riskyLoginUpdateCard',\n INSTANT_FUNDING_SOURCE_UPSELL_NEEDED: '',\n NEED_CREDIT_CARD: 'login.riskyLoginAddCard',\n NEED_CREDIT_CARD_OR_BANK_ACCOUNT: 'login.riskyLoginAddFi',\n NEED_CONFIRMED_CARD: '',\n NEED_AUTHENTICATED_CARD: 'login.riskyLoginUpdateCard',\n NEED_SHIPPING_ADDRESS: 'login.riskyLoginAddShipping',\n PHONE_NUMBER_REQUIRED: 'login.riskyLoginAddPhone',\n PAYER_AUTHENTICATION_REQUIRED: 'login.riskyLoginShippingPassed',\n SEPA_MANDATE_ACCEPTANCE_NEEDED: 'login.riskyLoginSepa',\n TAX_ID_REQUIRED: ''\n};\nvar RISKY_LOGIN_SUBTITLE = {\n EXPIRED_CREDIT_CARD: 'login.riskyLoginExpiredCardST',\n NEED_SHIPPING_ADDRESS: 'login.riskyLoginAddShippingST',\n PHONE_NUMBER_REQUIRED: 'login.riskyLoginAddPhoneST',\n SEPA_MANDATE_ACCEPTANCE_NEEDED: 'login.riskyLoginSepaST',\n PAYER_AUTHENTICATION_REQUIRED: 'login.riskyLoginShippingPassedST'\n};\n\nvar $loginProps = exports.$loginProps = {\n mapInfo: function mapInfo(contingency) {\n var contingencyTitle = RISKY_LOGIN_TITLE[contingency] ? RISKY_LOGIN_TITLE[contingency] : 'login.loginContingency';\n var contingencySubTitle = RISKY_LOGIN_SUBTITLE[contingency];\n\n return { title: contingencyTitle, subtitle: contingencySubTitle };\n },\n\n inList: function inList(contingency) {\n return RISKY_LOGIN_TITLE.hasOwnProperty(contingency);\n }\n};\n\nangular.value(\"$loginProps\", $loginProps);\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/login/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n \\n \\n
\\n\\n
\\n \\n \\n
\\n\\n
\\n
\\n \\n \\n
    \\n
  • {{ content('rememberMe.skipLogin') }}
  • \\n
  • {{ content('rememberMe.toCancel') }}
  • \\n
  • {{ content('rememberMe.protectAccounts') }}
  • \\n
\\n
\\n
\\n \\n \\n
\\n \\\"{{\\n
\\n
\\n
\\n\\n \\n
\\n

{{ content('login.kmliTooltipLine1') }}

\\n

{{ content('login.kmliTooltipLine2') }}

\\n

{{ content('login.kmliTooltipLine3') }}

\\n
\\n
\\n\\n \\n\\n \\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$KmliUpsell = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _newMember = __webpack_require__(\"../node_modules/xo-models/src/newMember/index.js\");\n\nvar _kmliEligibility = __webpack_require__(\"../node_modules/xo-login-components/src/login/kmliEligibility.js\");\n\n// Model Retrived\nvar idToken = void 0;\n// models\n\nvar successfulLogin = void 0;\nvar isOneTouched = void 0;\nvar upsellOptInDisplayed = void 0; // eslint-disable-line no-unused-vars\nvar kmliEligible = void 0;\nvar walletTokenization = void 0;\nvar preloadUL = void 0;\nvar lastUpsellVersion = void 0; // eslint-disable-line no-unused-vars\nvar showReactivationInterstitial = void 0;\nvar kmliChecked = void 0; // Passed in init\nvar expPromise = void 0; // Promisified experience data\nvar scope = {};\n\nvar getKmliContentKey = function getKmliContentKey() {\n // NOTE: `xo_hermesnode_kmli_upsell` has been removed\n // and currently it's always returned `xo_hermesnode_kmli_content_t1`\n scope.oneTouchContentVersion = 1;\n return _angular.$q.resolve();\n};\n\n// Determine if the NMJ experience the user has is ineligible\nvar getIsNmj = function getIsNmj() {\n return _newMember.$NewMemberEligibility.instance().isNmj(scope.token);\n};\n\nvar resolveEligibilityConditions = function resolveEligibilityConditions(params) {\n idToken = Boolean(scope.auth.idTokenPresent);\n successfulLogin = scope.auth.loggedIn();\n isOneTouched = scope.auth.loggedIn() && scope.auth.refreshToken();\n walletTokenization = scope.checkoutCart.isWalletTokenization() || scope.auth.remembered_partner_assertion; // android pay, apple pay, etc\n kmliChecked = Boolean(params.isKmliSet); // may not be OT but user has already opted in\n upsellOptInDisplayed = Boolean(scope.auth.upsellOptInDisplayed);\n lastUpsellVersion = scope.auth.ryiOptIn && scope.auth.ryiOptIn.interstitialDisplayed;\n showReactivationInterstitial = Boolean(params.showReactivationInterstitial);\n _logger.$logger.debug('kmliUpsell_resolveEligibilityConditions', { params: params });\n\n if (walletTokenization || preloadUL || scope.oneTouchContentVersion !== '3') {\n // do not trigger pxp for walletTokenization, ulpreload\n // Interstitial is only eligibile when the contentKey is set to treatment 3\n _logger.$logger.debug('kmliUpsell_init_ineligible');\n }\n return _angular.$q.resolve();\n};\n\nvar $KmliUpsell = exports.$KmliUpsell = {\n init: function init(params) {\n scope.token = _angular.$rootScope.token;\n\n if (expPromise) {\n return; // do not init twice\n }\n _logger.$logger.debug('kmliUpsell_init', params);\n expPromise = _kmliEligibility.$KmliEligibility.init().then(function (KmliEligibility) {\n kmliEligible = Boolean(KmliEligibility.kmliEligibility) && !params.jwtBasedAssertion;\n preloadUL = Boolean(KmliEligibility.preloadUL);\n return (0, _squid.$populate)(scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance(scope.token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(scope.token)\n });\n }).then(getKmliContentKey).then(function () {\n return resolveEligibilityConditions(params);\n });\n },\n // This should be called after checkout session is populated\n // Any data depending on the checkout session should be resolved here\n eligible: function eligible() {\n var eligibility = {};\n\n if (!expPromise) {\n _logger.$logger.debug('kmliUpsell_init_not_executed');\n return _angular.$q.resolve(eligibility);\n }\n return _angular.$q.all([expPromise, getIsNmj()]).then(function (result) {\n var experience = result[0];\n var isNmj = result[1];\n var eligibilityCriteria = {\n pxp: experience,\n profile_country: (0, _squid.$feature)('ryiOptIn'),\n isNotNmj: !isNmj\n };\n\n _logger.$logger.debug('kmliUpsell_eligiblityCheck', { eligibilityCriteria: eligibilityCriteria });\n\n var ineligibleReasons = _squid.$util.filter(Object.keys(eligibilityCriteria), function (key) {\n return !eligibilityCriteria[key];\n });\n var upsellFeatureEnabled = ineligibleReasons.length === 0;\n var regularLogin = kmliEligible && idToken;\n var autoLoginEnabled = isOneTouched || kmliChecked || scope.auth.remembered;\n\n eligibility.banner = upsellFeatureEnabled && (0, _squid.$feature)('optinToggle') && Boolean(isOneTouched || regularLogin);\n\n eligibility.interstitial = {\n eligible: upsellFeatureEnabled && !autoLoginEnabled && experience && experience.name && (experience.name.slice(-1) === '1' || experience.name.slice(-1) === '3') // use only treatment 1,3 for interstitial\n && experience.version,\n type: showReactivationInterstitial ? 'reactivation' : successfulLogin ? 'member' : '', // eslint-disable-line no-nested-ternary\n color: experience && experience.color,\n pxpVersion: experience && experience.pxpVersion\n };\n\n var elgStr = 'interstitial-' + eligibility.interstitial.eligible + '&toggle-';\n\n _logger.$logger.info('ryi_optin', {\n 'from': 'ryi_optin_elg_chk',\n 'to': 'process_ryi_optin_elg_chk',\n 'eligibility_reason': upsellFeatureEnabled ? elgStr + 'eligible' : elgStr + 'ineligible_' + ineligibleReasons.join()\n });\n _logger.$logger.debug('kmliUpsell_eligibility', {\n eligibility: eligibility,\n experience: experience,\n cases: {\n activeOT: isOneTouched,\n regularLogin: regularLogin,\n feature: upsellFeatureEnabled\n }\n });\n return eligibility;\n });\n },\n getOptions: function getOptions() {\n if (showReactivationInterstitial) {\n return {\n flowName: 'expiredUpsell'\n };\n }\n },\n getFPTIAttributes: function getFPTIAttributes() {\n if (showReactivationInterstitial) {\n return {\n stateName: 'KMLI_reactivation',\n transInfix: '_kmli_reactivation_'\n };\n } else {\n return {\n stateName: 'KMLI_UPSELL',\n transInfix: '_kmli_upsell_'\n };\n }\n }\n};\n\nangular.value(\"$KmliUpsell\", $KmliUpsell);\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$util;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_newMember.$NewMemberEligibility;\n\n_kmliEligibility.$KmliEligibility;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/password-recovery/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/password-recovery/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoPasswordRecoveryDirective', {\n tag: 'xo-password-recovery',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n onContinue: {\n type: 'var',\n required: false\n },\n onPasswordRecovery: {\n type: 'var',\n required: false\n },\n onLoad: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n var PAYPAL = window.PAYPAL;\n\n this.loaded = false;\n var postMessageHandler = function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n switch (response.event) {\n case 'render':\n if (response.pageName === 'authflow/password-recovery/done') {\n _this.onPasswordRecovery();\n _logger.$logger.info('checkout_fpti', {\n from: 'password_recovery',\n to: 'process_password_recovery'\n });\n } else if (response.pageName === 'authflow/password-recovery') {\n _this.onLoad();\n _this.loaded = true;\n _logger.$logger.info('checkout_fpti', {\n from: 'password_recovery',\n to: 'prepare_password_recovery'\n });\n } else {\n // Do nothing\n }\n break;\n case 'passwordSetSuccess':\n _this.onContinue();\n break;\n default:\n break;\n }\n });\n };\n\n this.loadPasswordRecoveryFlow = function () {\n var isHermesInsideIframe = _squid.$util.isIFrame();\n\n if (isHermesInsideIframe) {\n _logger.$logger.info('MERCHANT_IFRAME_INTEGRATION');\n }\n var options = {\n targetElement: document.getElementById('injectedPasswordRecovery'),\n xhrRequest: isHermesInsideIframe,\n iframePathname: '/authflow/password-recovery',\n caller: 'secondaryIframe',\n queryParams: {\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.getLocaleCode(),\n 'contextId': _this.token,\n 'correlationId': _model.$CalDataModel.getCalCorrId()\n },\n onPostMessage: postMessageHandler\n };\n\n if (_squid.$config.deploy.isLocal()) {\n options.origin = 'https://' + _squid.$meta.stage;\n }\n\n if (PAYPAL && PAYPAL.unifiedLogin) {\n PAYPAL.unifiedLogin.inject(options);\n }\n };\n\n (0, _angular.$timeout)(this.loadPasswordRecoveryFlow);\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_model.$CalDataModel;\n\n_angular.$timeout;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/password-recovery/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/unified-login/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _fpti = __webpack_require__(\"../node_modules/xo-tracking/dist/fpti.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nvar _fn = __webpack_require__(\"../node_modules/xo-login-components/src/login/fn.js\");\n\nvar _kmliEligibility = __webpack_require__(\"../node_modules/xo-login-components/src/login/kmliEligibility.js\");\n\nvar _kmliUpsell = __webpack_require__(\"../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-login-components/src/unified-login/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoUnifiedLogin', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n redirectUri: '=?',\n parentCallback: '=?',\n doneFn: '=?',\n errorFn: '=?',\n autoLogin: '=?',\n promptlogin: '=?',\n logoutCallback: '=?',\n kmli: '=?',\n preAuth: '=?',\n postAuth: '=?',\n flowcontext: '=?'\n },\n controller: ['$scope', function ($scope) {\n var ulClientRedirect = _squid.$util.param('ulClientRedirect') || '';\n var redirect_reason_timeout = 'timeout';\n var PAYPAL = window.PAYPAL || {};\n var failureReasons = {\n timeout: 'TIMEDOUT',\n error: 'INTERNALERROR',\n blacklistedDevice: 'PLATFORM_NOT_SUPPORTED',\n fallback: 'FALLBACK'\n };\n var enteringTime = Date.now();\n var loginAttemptedMethod = '';\n var userSelectedLanguage = '';\n\n _logger.$logger.debug('ENTERING_LOADING_UL_IFRAME', { enteringTime: enteringTime });\n $scope.locale = _squid.$LocaleModel.instance();\n $scope.forcedLogin = !$scope.autoLogin; // change to true during forcedLogin scenario\n\n if (_uiRouter.$stateParams.source === 'NOT_YOU' || _uiRouter.$stateParams.source === 'FRESH_START') {\n $scope.forcedLogin = false;\n }\n\n var ulTimeoutLimit = 35000;\n var ulTimeoutPromise = null;\n var loadCnt = 0;\n\n if (ulClientRedirect === redirect_reason_timeout) {\n _logger.$logger.info('ulClientRedirect_timeout');\n }\n\n function setLoading(tag, isRT) {\n _angular.$rootScope.$emit('loading');\n if (isRT && !$scope.auth.loggedIn()) {\n _angular.$rootScope.$emit('loadingMessage', {\n heading: _squid.$locale.content.get('base.loggingIn'),\n subHeading: _squid.$locale.content.get('login.rmSubHeading')\n });\n }\n loadCnt++;\n _logger.$logger.debug('setLoading by ' + tag + ' cnt ' + loadCnt);\n }\n\n function setLoaded(tag) {\n if (loadCnt > 0) {\n _angular.$rootScope.$emit('loaded');\n loadCnt--;\n } else {\n _logger.$logger.error('loadCnt_zero');\n }\n _logger.$logger.debug('setLoaded by ' + tag + ' cnt ' + loadCnt);\n }\n\n function fallback(product, reason, params) {\n throw new _squid.$FallbackError({\n product: product || 'ux',\n reason: reason,\n params: params\n });\n }\n\n function appLoginHandler(status) {\n _logger.$logger.debug('ULLOGIN_' + status);\n _logger.$logger.info('checkout_fpti', { 'from': 'LOGIN', 'to': 'prepare_login' });\n fallback('ux', 'ul_server_error');\n }\n\n var startTimerTS = void 0;\n\n function startTimer(tag) {\n startTimerTS = Date.now();\n _logger.$logger.debug('startTimer by ' + tag, {\n startTime: startTimerTS\n });\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'prepare_' + tag\n });\n\n ulTimeoutPromise = (0, _angular.$timeout)(function () {\n _logger.$logger.error('load_ul_timeout');\n var stop_time = Date.now();\n var time_taken = stop_time - startTimerTS;\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'process_timeout',\n 'int_error_code': 'ULLOGIN_TIMEOUT',\n 'int_error_description': 'ULLOGIN_TIMEOUT',\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline',\n 'page_load_time': time_taken\n });\n if (!_squid.$config.disableUlTimeout) {\n fallback('ux', 'ul_load_timeout');\n } else {\n // remove after ulAsLanding risky login\n var isRememberedUser = $scope.auth && $scope.auth.remembered;\n\n // remove after ulAsLanding starts to support tokenexchange\n var isTokenExchange = $scope.auth && $scope.auth.refreshToken() && !$scope.auth.accessToken();\n // Do trigger for remebered user\n // Do not trigger if already triggered before\n // Do not trigger for RT to AT case\n if (!ulClientRedirect && !isRememberedUser && !isTokenExchange) {\n $scope.auth.redirectToLogin(redirect_reason_timeout);\n }\n }\n }, ulTimeoutLimit);\n }\n\n function stopTimer(tag, keepLoading) {\n var stopTimerTS = Date.now();\n var timeTaken = stopTimerTS - startTimerTS;\n\n _logger.$logger.debug('stopTimer by ' + tag, {\n stopTimer: stopTimerTS,\n page_load_time: timeTaken\n });\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'process_' + tag,\n 'page_load_time': timeTaken\n });\n\n if (!keepLoading) {\n setLoaded('stopTimer');\n }\n\n if (ulTimeoutPromise) {\n _angular.$timeout.cancel(ulTimeoutPromise);\n }\n }\n\n function logFptiData(fptiData, eventName) {\n var errorDescription = void 0;\n\n switch (eventName) {\n case '2fa':\n errorDescription = '2fa_required';\n break;\n case 'safeRequired':\n errorDescription = 'SAFE_required';\n break;\n case 'stepupRequired':\n errorDescription = 'Login_ATO_required';\n break;\n default:\n // nothing to do here\n }\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': fptiData.fptiTransition,\n 'int_error_code': eventName,\n 'int_error_description': errorDescription,\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n }\n\n function buildRedirectURL(contingencyUrl, eventName) {\n var authChallengeUrl = contingencyUrl;\n var paramIndex = authChallengeUrl.indexOf('?');\n var urlParams = _squid.$util.params(authChallengeUrl.substring(paramIndex + 1));\n\n urlParams.returnUri = _squid.$config.ulMeta.authChallengeReturnUri;\n if (userSelectedLanguage) {\n urlParams['locale.x'] = _squid.$locale.getLocaleCode();\n urlParams['state'] += '&locale.test=' + _squid.$locale.getLocaleCode();\n }\n switch (eventName) {\n case '2fa':\n urlParams['state'] += '&acRedirect=2fa&ulMethod=' + loginAttemptedMethod;\n break;\n case 'safeRequired':\n urlParams['state'] += '&acRedirect=safe';\n break;\n case 'stepupRequired':\n urlParams['state'] += '&acRedirect=loginato';\n break;\n default:\n // nothing to do here\n }\n var redirectUrl = _squid.$util.buildURL(authChallengeUrl.substring(0, paramIndex), urlParams);\n\n return redirectUrl;\n }\n\n if (!_squid.$config.ulMeta) {\n _logger.$logger.error('config_no_ulMeta');\n }\n\n var ulMeta = _squid.$config.ulMeta || {};\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance($scope.token)\n }).then(function () {\n // if remebered user then update spinner text\n var isRememberedUser = $scope.auth.refreshToken();\n\n setLoading('loadUL', isRememberedUser);\n\n return _kmliEligibility.$KmliEligibility.init({\n forcedLogin: $scope.forcedLogin,\n logoutCallback: $scope.logoutCallback\n });\n }).then(function (eligibility) {\n ulTimeoutLimit = eligibility.ulTimeoutLimit ? eligibility.ulTimeoutLimit : ulTimeoutLimit;\n $scope.preloadUL = eligibility.preloadUL;\n $scope.safeEligibility = eligibility.safeEligibility;\n $scope.kmliEligibility = eligibility.kmliEligibility;\n\n if ($scope.preloadUL) {\n _logger.$logger.debug('ULSS_CLIENT_PRELOAD_TREATMENT');\n return (0, _squid.$populate)($scope, { ulSource: _auth.$ULoginModel.instance() });\n }\n\n if (!$scope.checkoutCart.isWalletTokenization() && !$scope.preloadUL) {\n $scope.ryiOptin = false;\n }\n return _angular.$q.resolve(true);\n }).then(function () {\n var rememberMe = !$scope.auth.refreshToken() ? false : $scope.kmliEligibility; // UL needs 'rememberMe=true' for RT exchange\n var app_int_type = _index.$DeviceInfo.getAppIntegrationType();\n\n if ($scope.auth.refreshToken() && !$scope.forcedLogin) {\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'prepare_login_ul_RM',\n app_int_type: app_int_type\n });\n }\n\n function getPostLoginFpti(data) {\n var result = void 0;\n\n if (data.event === 'tokenExchanged') {\n // This is either OneTouch or JWT (Partner Integration).\n if (data.authorizationToken === 'jwt_token') {\n result = { fptiState: 'LOGIN_UL_JWT', fptiTransition: 'process_UL_JWT' };\n } else {\n result = { fptiState: 'LOGIN_UL_RM', fptiTransition: 'process_RT_AT_exch' };\n }\n } else {\n var fptiTransitionName = data.keepMeLoggedIn === true ? 'process_login_UL_RM' : 'process_login_UL';\n var ULState = rememberMe === true ? 'LOGIN_UL_RM' : 'LOGIN_UL';\n\n result = { fptiState: ULState, fptiTransition: fptiTransitionName };\n }\n\n return result;\n }\n\n var cancelLocaleChange = void 0;\n\n function loginComplete(data) {\n var jwtBasedAssertion = data.event === 'tokenExchanged' && data.authorizationToken === 'jwt_token';\n var rtExchanged = data.event === 'tokenExchanged' && data.authorizationToken !== 'jwt_token';\n\n _squid.$promise.run(function () {\n // eslint-disable-line\n $scope.auth.stepupAuthRequired = false;\n\n stopTimer('loginComplete');\n\n if (cancelLocaleChange) {\n cancelLocaleChange();\n }\n\n $scope.auth.isKmliSet = data.keepMeLoggedIn || rtExchanged;\n $scope.auth.rtExchanged = rtExchanged;\n\n var fptiData = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': fptiData.fptiTransition\n });\n\n if (window.xprops && window.xprops.onAuth && data && data.accessToken) {\n return window.xprops.onAuth({\n accessToken: data.accessToken\n });\n }\n }).then(function () {\n var upsellEligibilityData = { ulData: data };\n\n // Doesn't exist in risky login case\n if ($scope.preAuth) {\n // Fires off eligibility + econsent + xosession in batch mode\n $scope.preAuth();\n }\n\n if (data.event === 'tokenExchanged') {\n if ((0, _squid.$feature)('rmSpinnerText') && !jwtBasedAssertion) {\n _angular.$rootScope.$emit('loadingMessage', {\n heading: _squid.$locale.content.get('base.planning'),\n subHeading: _squid.$locale.content.get('login.rmSubHeading')\n });\n } else {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('base.planning'));\n }\n }\n\n return $scope.auth.reload({\n resultModel: $scope.auth,\n headers: {\n 'x-paypal-internal-euat': data.accessToken\n },\n batch: {\n name: 'setbuyer',\n id: 'securityCtx',\n dependencies: []\n },\n success: function success() {\n $scope.auth.is_auth_api_call = data.event === 'tokenExchanged';\n angular.extend(upsellEligibilityData, {\n buyerCountry: $scope.auth.country,\n jwtBasedAssertion: jwtBasedAssertion,\n showReactivationInterstitial: $scope.showReactivationInterstitial\n });\n _kmliUpsell.$KmliUpsell.init(upsellEligibilityData);\n $scope.postAuth($scope.auth);\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, contingency) {\n $scope.auth.password = '';\n $scope.errorFn(name, contingency);\n }\n }\n });\n });\n }\n\n var ulEventHandlers = {\n 'loginRendered': function loginRendered(data) {\n var loadingCompletedTime = Date.now();\n\n _logger.$logger.debug('ULLOGIN_FRAME_LOADED_SUCCESSFULLY', {\n page_load_time: loadingCompletedTime - enteringTime\n });\n\n // Check if this is triggered by JWT assertion failure.\n // If so, do FPTI instrumentation.\n if (data.authorizationType === 'token' && data.authorizationToken === 'jwt_token') {\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_JWT',\n 'to': 'process_UL_JWT',\n 'int_error_code': 'unknown',\n 'int_error_description': 'JWT assertion failed',\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline'\n });\n }\n },\n 'loginFullyLoaded': function loginFullyLoaded(data) {\n stopTimer(data.event);\n\n if ($scope.notYou) {\n _angular.$rootScope.$emit('loaded');\n delete $scope.notYou;\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'prepare_login_ul'\n });\n _fn.$fn.sendTypingSpeedPayload('HermesUL');\n return $scope.logoutCallback();\n }\n\n if (!_uiRouter.$state.current.trackingData) {\n _uiRouter.$state.current.trackingData = { fptiState: 'ulLoginDefault' };\n }\n _uiRouter.$state.current.trackingData.pageQualifier = 'ulLogin';\n\n var loadingCompletedTime = Date.now();\n var timeTaken = loadingCompletedTime - enteringTime;\n\n _logger.$logger.debug('ULLOGIN_LOADED_SUCCESSFULLY', {\n page_load_time: timeTaken\n });\n\n if ($scope.preLoadedSource) {\n _logger.$logger.debug('ULSS_CLIENT_LOADED_SUCCESSFULLY', {\n page_load_time: timeTaken\n });\n }\n\n var ULState = rememberMe === true && !$scope.logoutCallback ? 'LOGIN_UL_RM' : 'LOGIN_UL';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': ULState,\n 'to': 'prepare_iframe',\n 'page_load_time': timeTaken\n });\n\n var payload = {\n 'from': ULState,\n 'to': 'prepare_login_ul',\n 'app_int_type': app_int_type\n };\n\n if (_uiRouter.$stateParams.targetPage) {\n angular.extend(payload, { 'int_error_code': _uiRouter.$stateParams.targetPage });\n }\n\n _logger.$logger.info('checkout_fpti', payload);\n _fn.$fn.sendTypingSpeedPayload('HermesUL');\n _logger.$logger.flush();\n },\n 'loginEmailPasswordAttempted': function loginEmailPasswordAttempted() {\n loginAttemptedMethod = 'email';\n },\n 'loginPhonePinAttempted': function loginPhonePinAttempted() {\n loginAttemptedMethod = 'phone';\n },\n 'loginAttempted': function loginAttempted(data) {\n setLoading(data.event);\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('base.loggingIn'));\n if (rememberMe === true) {\n var kmliStatus = data.keepMeLoggedIn === true ? 'KMLI_CHECKED' : 'KMLI_UNCHECKED';\n\n _logger.$logger.debug(kmliStatus);\n }\n startTimer(data.event);\n },\n 'loginSuccess': loginComplete,\n 'tokenExchanged': function tokenExchanged(data) {\n _logger.$logger.info('TOKEN_EXCHANGED', {\n authorizationType: data.authorizationType,\n authorizationToken: data.authorizationToken || ''\n });\n loginComplete(data);\n },\n 'notYouLinkClicked': function notYouLinkClicked(data) {\n _angular.$rootScope.$emit('loading');\n $scope.notYou = true;\n _logger.$logger.info('checkout_fpti', {\n from: 'LOGIN_UL',\n to: 'login_with_diff_user'\n });\n startTimer(data.event);\n },\n '2fa': function fa(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n if (data.contingencyUrl) {\n _logger.$logger.debug('ULLOGIN_TWO_FA_AUTH_REDIRECT');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('ULLOGIN_TWO_FA_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'DEFAULT' });\n }\n },\n 'safeRequired': function safeRequired(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n if ($scope.safeEligibility && data.contingencyUrl) {\n if (data.authorizationType && data.authorizationType === 'token') {\n // for remembered user redirect to login instead of SAFE APP\n _logger.$logger.debug('LOGIN_REDIRECTION_SAFE_RM_USER');\n _uiRouter.$state.go('checkout.login', { targetPage: 'LOGIN_CONTINGENCY' });\n }\n _logger.$logger.debug('ULSAFE_REDIRECTION');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('ULSAFE_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n },\n 'serverError': function serverError(data) {\n stopTimer(data.event);\n var error_code = 'INVALID_USER';\n var error = {\n type: 'pageError',\n code: 500\n };\n\n // internalServerError, code: 500, take user to hermes login, no need for error message\n switch (data.reason) {\n case 'serverValidationError':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else if (loginAttemptedMethod === 'phone') {\n error_code = 'INVALID_PHONE_PIN';\n error.msg = _squid.$locale.content.get('login.invalidPin');\n } else {\n error.msg = _squid.$locale.content.get('login.invalidEmailPasswordPageError');\n }\n break;\n case 'invalidUser':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n }\n break;\n case 'internalServerError':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else {\n error.msg = _squid.$locale.content.get('login.invalidEmailPasswordPageError');\n }\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n return appLoginHandler(failureReasons.error);\n case 'accountTemporaryLocked':\n case 'accountPermanentlyLocked':\n error.code = data.code;\n error.msg = _squid.$locale.content.get('login.accountLockedPageError');\n error_code = 'ACCOUNT_LOCKED';\n break;\n case 'riskDecline':\n error.code = data.code;\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else {\n error.msg = _squid.$locale.content.get('login.riskDeclinePageError');\n error_code = 'RISK_DECLINE';\n }\n break;\n default:\n // Do nothing\n }\n var fptidata = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptidata.fptiState,\n 'to': fptidata.fptiTransition,\n 'int_error_code': data.code,\n 'int_error_description': data.reason,\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n $scope.parentCallback('showErrorMessages', error_code);\n },\n 'client_validation_error': function client_validation_error(data) {\n var error = {\n type: 'pageError',\n msg: _squid.$locale.content.get('login.invalidEmailPasswordPageError')\n };\n var fptidata = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptidata.fptiState,\n 'to': fptidata.fptiTransition,\n 'int_error_code': data.event,\n 'int_error_description': 'invalid_credentials',\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n },\n 'stepupRequired': function stepupRequired(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n\n if (data.authorizationType && data.authorizationType === 'token') {\n // for remembered user redirect to login instead of AuthChallenge APP\n _logger.$logger.debug('LOGIN_ATO_RM_USER');\n\n // doing nothing, ul will render the login page, we need to show warning on top though\n var error_code = 'ONETOUCH_GENERIC_ERROR';\n } else if (data.contingencyUrl) {\n _logger.$logger.debug('LOGIN_ATO_USER');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('LOGIN_ATO_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n // to show error message on login page\n $scope.parentCallback('showErrorMessages', error_code); // eslint-disable-line block-scoped-var\n },\n 'captcha': function captcha(data) {\n var fptiData = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': 'prepare_captcha'\n });\n },\n 'bodyClick': function bodyClick() {\n _angular.$rootScope.$broadcast('clickBody');\n },\n 'expiredRefreshToken': function expiredRefreshToken(data) {\n var treatment = data.treatment;\n\n _logger.$logger.info('EXPIRED_RT_' + treatment);\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'process_RT_AT_exch',\n 'int_error_code': 'expired_RT_Token',\n 'int_error_desc': treatment,\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline'\n });\n\n switch (treatment) {\n case 'showInterstitial':\n $scope.showReactivationInterstitial = true;\n break;\n\n case 'checkboxPreselectedWithNotification':\n $scope.errorFn('ONETOUCH_LEAVECHECKED', {}, 'warning');\n break;\n\n case 'checkboxNotPreselectedWithNotification':\n $scope.errorFn('ONETOUCH_REACTIVATE', {}, 'warning');\n break;\n\n case 'expiredRefreshTokenControl':\n break;\n\n default:\n break;\n }\n }\n };\n\n function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('ul_postmessaged_received', response);\n var data = response.data || response.error;\n var eventId = data && data.event;\n\n if (eventId) {\n _logger.$logger.debug('ULLOGIN_' + eventId, response);\n var handler = ulEventHandlers[eventId];\n\n if (handler) {\n handler(data);\n }\n }\n });\n }\n\n function loadUnifiedLogin(iframeCopy) {\n var queryString = _squid.$util.queryStringSplice(_squid.$util.queryString(), {\n 'flow': '1-P',\n 'token': $scope.token\n }, ['cmd']);\n var isHermesInsideIframe = _squid.$util.isIFrame();\n\n if (isHermesInsideIframe) {\n _logger.$logger.info('MERCHANT_IFRAME_INTEGRATION');\n }\n\n var options = {\n targetElement: document.getElementById('injectedUnifiedLogin'),\n xhrRequest: isHermesInsideIframe,\n queryParams: {\n 'stsRedirectUri': ulMeta.stsReturnUrl,\n 'country.x': $scope.locale.country,\n 'locale.x': $scope.locale.getLocaleCode(),\n 'returnUri': ulMeta.ulReturnUri,\n 'state': queryString,\n 'flowId': $scope.token,\n 'correlationId': _model.$CalDataModel.getCalCorrId()\n },\n config: {\n title: 'PayPal - ' + _squid.$locale.content.get('common.login')\n },\n onPostMessage: postMessageHandler\n };\n\n if (_squid.$meta.baToken) {\n angular.extend(options.queryParams, { 'fn_dt': _squid.$meta.baToken });\n }\n\n if ($scope.forcedLogin) {\n angular.extend(options.queryParams, { 'prompt': 'login' });\n }\n\n if ($scope.logoutCallback) {\n angular.extend(options.queryParams, { 'showNotYou': true });\n }\n\n if (_uiRouter.$stateParams.source !== 'NOT_YOU') {\n $scope.flowcontext = $scope.checkoutCart.flow_context;\n } else {\n $scope.flowcontext = $scope.checkoutCart.flow_context_without_email;\n }\n\n if ($scope.flowcontext) {\n angular.extend(options.queryParams, { 'flowContextData': $scope.flowcontext });\n }\n\n if (_squid.$config.deploy.isLocal()) {\n options.origin = 'https://' + _squid.$meta.stage;\n if (!_squid.$meta.stage) {\n // if no stage url shows up then use any backup url for origin\n var backupURL = _squid.$config.onboarding.url.split('/webapps/')[0];\n options.origin = backupURL;\n }\n }\n\n // preload only for first time login attempts\n if ($scope.preloadUL && $scope.ulSource && $scope.ulSource.src && !$scope.forcedLogin && _uiRouter.$stateParams.source !== 'NOT_YOU' && !userSelectedLanguage && rememberMe) {\n _logger.$logger.debug('ULSS_CLIENT_PRELOAD_INJECT');\n $scope.preLoadedSource = true;\n options.preLoadedSource = decodeURI($scope.ulSource.src);\n }\n\n function ulInvoke() {\n if (PAYPAL && PAYPAL.unifiedLogin) {\n startTimer('ulInvoke');\n if (!iframeCopy) {\n PAYPAL.unifiedLogin.inject(options);\n } else {\n PAYPAL.unifiedLogin.copyPasteIframe({\n targetElement: document.getElementById('injectedUnifiedLogin'),\n onPostMessage: postMessageHandler\n });\n }\n } else {\n return appLoginHandler(failureReasons.fallback);\n }\n }\n\n var jwtToken = _squid.$util.param('jwtToken');\n\n if (jwtToken) {\n options.queryParams.jwtToken = jwtToken;\n }\n\n if (rememberMe === true) {\n options.queryParams.rememberMe = true;\n // NOTE: `xo_hermesnode_kmli_upsell` has been ramped to 100%\n // and it's always return `xo_hermesnode_kmli_content_t1`\n options.queryParams.rememberMeContent = 1;\n }\n return ulInvoke();\n }\n\n var cancelAllLoaded = _angular.$rootScope.$on('allLoaded', function () {\n cancelLocaleChange = $scope.$on('localeChange', function () {\n userSelectedLanguage = _squid.$locale.lang;\n setLoading('localeChange');\n loadUnifiedLogin();\n });\n cancelAllLoaded();\n });\n\n $scope.$on('$destroy', cancelAllLoaded);\n loadUnifiedLogin(ulMeta.iframeCopy);\n });\n }]\n };\n});\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$LocaleModel;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.$promise;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_auth.$AuthModel;\n\n_auth.$ULoginModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_fpti.$fpti;\n\n_model.$CalDataModel;\n\n_fn.$fn;\n\n_kmliEligibility.$KmliEligibility;\n\n_kmliUpsell.$KmliUpsell;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/unified-login/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n \\n
\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-login-components/src/unified-login/ul.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ul = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _config = __webpack_require__(\"../node_modules/squid/dist/core/config.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\n__webpack_require__(\"../node_modules/ul-inline/dist/inject.js\");\n\n/**\n * Created by upigilam on 4/8/16.\n * UL handler is to exchange ST to RT exchanges.\n */\n\nvar $ul = exports.$ul = {\n\n optInToOneTouch: function optInToOneTouch(token, locale_country, locale_code, silent, fptiData, flowName) {\n\n return (0, _angular.$q)(function (resolve, reject) {\n\n var PAYPAL = window.PAYPAL || {};\n var ulTimeOutValue = 10000;\n var ulTimeoutPromise = null;\n\n function logSubmit(data) {\n var fptiPayload = {\n 'from': fptiData && fptiData.stateName ? fptiData.stateName : 'poma_page',\n 'to': fptiData && fptiData.transInfix ? fptiData.transInfix : 'process_kmli_optin'\n };\n if (data && data.errorCode) {\n angular.extend(fptiPayload, {\n 'int_error_code': data.errorCode,\n 'error_type': 'hard_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n }\n _logger.$logger.info('checkout_fpti', fptiPayload);\n }\n\n function failureHandler(reason) {\n logSubmit({ errorCode: reason });\n _logger.$logger.info('UL_Loading_error_' + reason);\n return reject(new Error('UL_Loading_error_' + reason));\n }\n\n function startTimer(tag) {\n _logger.$logger.info('UL_START_TIMER_' + tag);\n ulTimeoutPromise = (0, _angular.$timeout)(function () {\n failureHandler('timed_out');\n if (!silent) {\n _angular.$rootScope.$emit('loaded');\n }\n }, ulTimeOutValue);\n }\n\n function stopTimer(tag) {\n if (!silent) {\n _angular.$rootScope.$emit('loaded');\n }\n _logger.$logger.info('UL_STOP_TIMER_' + tag);\n\n if (ulTimeoutPromise) {\n _angular.$timeout.cancel(ulTimeoutPromise);\n ulTimeoutPromise = null;\n }\n }\n\n var ulEventHandlers = {\n 'oneTouchInterstitialOptInLoaded': function oneTouchInterstitialOptInLoaded(data) {\n // Don't start or stop timer. Flow should not get block even the post messages is not returned from UL\n },\n 'oneTouchInterstitialOptInAttempted': function oneTouchInterstitialOptInAttempted(data) {\n // Don't start or stop timer. Flow should not get block even the post messages is not returned from UL\n },\n 'oneTouchInterstitialOptInSuccess': function oneTouchInterstitialOptInSuccess(data) {\n stopTimer(data.event);\n logSubmit();\n // UL will drop RT cookie and respond oneTouchInterstitialOptInSuccess postmessage.\n _auth.$AuthModel.instance().retrieve().then(function (auth) {\n auth.refresh_token = true;\n });\n return resolve();\n },\n 'oneTouchInterstitialOptInFailed': function oneTouchInterstitialOptInFailed(data) {\n stopTimer(data.event);\n failureHandler(data.event);\n },\n 'oneTouchInterstitialOptInNotAuthorized': function oneTouchInterstitialOptInNotAuthorized(data) {\n // removing the element - ulTargetAttribute from DOM, to avoid any other accidental\n // actions on the element which is causing excess spinners later.\n var child = document.getElementById('ulTargetAttribute');\n child.parentNode.removeChild(child);\n stopTimer(data.event);\n failureHandler(data.event);\n }\n };\n\n function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('ul_postmessaged_received', response);\n var data = response.data || response.error;\n var eventId = data && data.event;\n if (eventId) {\n _logger.$logger.debug('UL' + eventId, response);\n var handler = ulEventHandlers[eventId];\n if (handler) {\n handler(data);\n }\n }\n });\n }\n\n function loadOneTouchUpsell() {\n if (!silent) {\n _angular.$rootScope.$emit('loading');\n }\n\n var ulTargetAttribute = document.createElement('div');\n ulTargetAttribute.setAttribute('id', 'ulTargetAttribute');\n\n // setting display to None leading FireFox hiding all the ul elements due to which body click doesn't work\n // ulTargetAttribute.style.display = \"None\";\n\n // Making 0px, it works for FF, Chrome, Safari\n ulTargetAttribute.style.width = '0px';\n ulTargetAttribute.style.margin = '0px';\n ulTargetAttribute.style.height = '0px';\n ulTargetAttribute.style.padding = '0px';\n\n document.body.appendChild(ulTargetAttribute);\n\n var options = {\n targetElement: document.getElementById('ulTargetAttribute'),\n queryParams: {\n 'country.x': locale_country,\n 'locale.x': locale_code,\n 'flowId': token,\n 'correlationId': _model.$CalDataModel.getCalCorrId(),\n 'flowName': flowName ? flowName : 'checkoutOnlyMember' // default is poma flow\n },\n iframePathname: '/signin/activate-one-touch',\n onPostMessage: postMessageHandler\n };\n\n if (_config.$config.deploy.isLocal()) {\n if (_config.$meta.stage) {\n options.origin = 'https://' + _config.$meta.stage;\n } else {\n // if no stage url shows up then use any backup url for origin\n options.origin = _config.$config.urls.onboarding.split('/webapps/')[0];\n }\n }\n\n if (PAYPAL && PAYPAL.unifiedLogin) {\n startTimer('initializeUl');\n PAYPAL.unifiedLogin.inject(options);\n } else {\n failureHandler('PAYPAL.unifiedLogin_undefined');\n }\n }\n\n loadOneTouchUpsell();\n });\n }\n};\n\n// Loads unifiedLogin key on to PAYPAL window object\n\n\nangular.value(\"$ul\", $ul);\n_angular.$rootScope;\n\n_angular.$q;\n\n_angular.$timeout;\n\n_logger.$logger;\n\n_config.$config;\n\n_config.$meta;\n\n_model.$CalDataModel;\n\n_auth.$AuthModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/backup-label/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoBackupLabel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/backup-label/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/backup-label/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoBackupLabel = exports.$xoBackupLabel = _squid.$Component.extend('$xoBackupLabel', {\n tag: 'xo-backup-label',\n template: _template2['default'],\n props: {\n plan: {\n type: 'var',\n required: false\n },\n hasMask: {\n type: 'var',\n required: false\n }\n }\n});\n\nangular.value(\"$xoBackupLabel\", $xoBackupLabel);\n_squid.$Component;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/backup-label/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/backup-label/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n {{plan.backup.name}}\\n \\n x-{{plan.backup.last4}} {{ content('paymentMethod.backup') }}\\n {{plan.backup.last4}} {{ content('paymentMethod.backup') }}\\n \\n
\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/billing-address/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _fi = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/billing-address/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/billing-address/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(0, _squid.$registerDirective)('xo-billing-address', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n editUri: '=?'\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('xo-billing-address_enter');\n }\n },\n controller: ['$scope', function ($scope) {\n var getBillingAddress = function getBillingAddress(cardId) {\n return (0, _squid.$populate)($scope, {\n cardInfo: _fi.$CardInfoModel.instance(cardId)\n }).then(function () {\n return $scope.cardInfo && $scope.cardInfo.billingAddress;\n });\n };\n\n var updateScopeData = function updateScopeData(checkoutSession) {\n $scope.selectedCardId = $scope.checkoutSession.plan.sources[0].instrument_id;\n return getBillingAddress($scope.selectedCardId).then(function (address) {\n $scope.address = address;\n $scope.line3 = address.city + ', ' + address.state + ' ' + address.postal_code;\n });\n };\n\n (0, _squid.$populate)($scope, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance($scope.token)\n }).then(function () {\n $scope.header = _squid.$locale.content.get('addCard.billingAddress');\n $scope.updateType = _squid.$locale.content.get('common.edit');\n return updateScopeData($scope.checkoutSession);\n }); // populate\n\n $scope.$watchCollection('checkoutSession', function (newVal) {\n if (newVal) {\n // Clear the cached CardInfo so we can get the latest associated Billing Address\n if ($scope.cardInfo) {\n $scope.cardInfo.invalidate();\n }\n }\n return updateScopeData($scope.checkoutSession);\n });\n }]\n };\n});\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$registerDirective;\n\n_logger.$logger;\n\n_checkout.$CheckoutSessionModel;\n\n_fi.$CardInfoModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/billing-address/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/billing-address/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
{{header}}
\\n
\\n
\\n {{address.line1}},\\n {{address.line2}},\\n {{line3}}\\n \\n {{updateType}}\\n \\n\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/card-backup/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fiMeta = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/card-backup/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/card-backup/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * xo-card-backup\n * Render a dropdown for user to select their backup instrument in case their card\n * gets declined\n * @params {String} token - token for models\n */\nexports['default'] = _squid.$Component.extend('$CardBackupComponent', {\n tag: 'xo-card-backup',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n // Since selected method means the user might have something different selected compared to the checkout session,\n // might need to have this passed in to filter out the plan\n selectedmethod: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n fiMeta: _fiMeta2['default'].instance(this.props.token).fetch()\n };\n }\n },\n actions: {\n getAllowedBackups: function getAllowedBackups() {\n var planList = this.models.checkoutSession.getPlanList() || [];\n var currentPlanId = this.props.selectedmethod ? this.props.selectedmethod.planId : planList[0].planId;\n\n return planList.filter(function (a) {\n return a.planId !== currentPlanId && a.primaryFs && a.primaryFs.type === 'CARD' && a.secondaryFIs === false;\n });\n },\n renderCover: function renderCover() {\n var backup = this.models.checkoutSession.cardBackup.getPlan();\n\n if (!backup) {\n return (0, _squid.$renderContent)('paymentMethod.chooseBackup');\n } else {\n return this.actions.renderOption(backup) + ' ' + (0, _squid.$renderContent)('paymentMethod.backup');\n }\n },\n renderOption: function renderOption(plan) {\n return this.models.fiMeta.getName(plan.primaryFs) + ' x-' + plan.primaryFs.lastDigits;\n },\n selectBackup: function selectBackup(plan) {\n var _this = this;\n\n var selectedmethodPlan = this.props.selectedmethod ? (this.models.checkoutSession.getPlanList() || []).find(function (p) {\n return p.planId === _this.props.selectedmethod.planId;\n }) : null;\n\n this.models.checkoutSession.cardBackup.setPlan(plan, selectedmethodPlan);\n this.actions.toggleDropdown();\n },\n toggleDropdown: function toggleDropdown() {\n var _this2 = this;\n\n this.showDropdown = !this.showDropdown;\n\n if (this.showDropdown) {\n (0, _angular.$timeout)(function () {\n return _this2.actions.showDropdownUI();\n });\n }\n },\n\n // UI change - the box is right aligned, but need to position it so that\n // it doesn't overflow on the left\n showDropdownUI: function showDropdownUI(open) {\n var position = this.$element.find('.card-backup-dropdown').position();\n\n this.$element.find('.card-backup-options').css({\n right: position && position.left < 0 ? position.left : 0,\n visibility: 'visible'\n });\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this3 = this;\n\n // Close the dropdown if focus leaves the menu\n _angular.$document.on('focusin.cardBackup', function (event) {\n if (_this3.showDropdown && !_this3.$element[0].contains(event.target)) {\n _this3.showDropdown = false;\n }\n });\n },\n exit: function exit() {\n // Clean up the dropdown handler\n _angular.$document.off('focusin.cardBackup');\n }\n }\n});\n\n\n_angular.$document;\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_checkout.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/card-backup/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/card-backup/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n
\\n {{content('paymentMethod.cardBackupDescription')}}\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/give-at-checkout/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/give-at-checkout/factory.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/give-at-checkout/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/give-at-checkout/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoDonate', {\n tag: 'xo-donate',\n template: _template2['default'],\n props: {\n merchantName: {\n type: 'str',\n required: false\n }\n },\n actions: {\n showConsent: function showConsent() {\n this.showConsentBox = !this.showConsentBox;\n _factory.$GiveAtCheckoutFactory.set({ donateCheckboxSelected: this.showConsentBox });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.showConsentBox = false;\n },\n populate: function populate() {\n this.isWpsflow = _factory.$GiveAtCheckoutFactory.get().isWPSflow;\n this.charity = _factory.$GiveAtCheckoutFactory.get().charity;\n if (this.charity) {\n this.formattedAmount = (0, _squid.formatCurrency)(this.charity.amount, this.charity.currency, false, 'Currency');\n }\n this.tracking = _factory.$GiveAtCheckoutFactory.get().tracking;\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.formatCurrency;\n\n_factory.$GiveAtCheckoutFactory;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/give-at-checkout/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nfunction parseMessage(mors) {\n if (!(mors && mors.data)) {\n return {};\n }\n var touchpoints = mors.data.touchpoint_messages || [];\n\n if (Array.isArray(touchpoints) && touchpoints.length > 0) {\n var messages = touchpoints[0].messages || [];\n\n var chosen = messages.filter(function (message) {\n return message.content && message.content.json && message.content.json.model_score;\n }).reduce(function (prev, curr) {\n return prev && prev.content.json.model_score > curr.content.json.model_score ? prev : curr;\n }, undefined);\n if (chosen) {\n var charity = chosen.content.json;\n var tracking = chosen.tracking_details;\n\n if (charity) {\n return { charity: charity, tracking: tracking };\n }\n }\n }\n return {};\n}\n\nfunction parseUserType(charity) {\n if (charity && charity.user_type) {\n return charity.user_type;\n }\n var DONOR_MODELS = ['0', '1'];\n if (charity && charity.model_id) {\n return DONOR_MODELS.indexOf(charity.model_id) >= 0 ? 'DONOR' : 'NONDONOR';\n }\n}\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$GiveAtCheckoutFactory', function () {\n var state = {\n donateCheckboxSelected: false,\n eligible: false,\n charity: undefined,\n tracking: undefined,\n isWPSflow: undefined\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n var decideEligibility = function decideEligibility() {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token)\n }).then(function () {\n return _marketingoffer.$MessageDiscoverModel.instance().save({\n silent: true,\n data: {\n 'country_code': _squid.$locale.getCountryCodeISO(),\n 'language': _squid.$locale.getLocaleCode(),\n 'identity_context': [{\n 'type': 'PAYER_ID',\n 'value': models.checkoutSession.get('payer.id')\n }, {\n 'type': 'MERCHANT_PAYER_ID',\n 'value': models.payee && models.payee.merchant && models.payee.merchant.id\n }],\n 'recommendation_context': {\n 'touchpoint_details': [{\n 'code': 'hermes_gac_touchpoint',\n 'message_count': -1\n }]\n }\n },\n error: function error(err) {\n return _squid.$promise.reject(err);\n }\n });\n }).then(function (mors) {\n var _parseMessage = parseMessage(mors),\n charity = _parseMessage.charity,\n tracking = _parseMessage.tracking;\n\n if (charity) {\n state.charity = charity;\n state.tracking = tracking;\n _logger.$logger.info('mors_eligibility', {\n eligible: !!charity\n });\n\n return charity;\n }\n }).then(function (charity) {\n if (!charity) {\n return;\n }\n var userType = parseUserType(charity);\n if (userType) {\n var paymentAction = models.checkoutCart && models.checkoutCart.get('payment_action');\n var currencyCode = models.checkoutCart && models.checkoutCart.get('purchase.amounts.total.currency_code');\n var buyerCountry = _squid.$locale.country;\n var merchantId = models.payee && models.payee.getId();\n var merchantCountry = models.checkoutAppData && models.checkoutAppData.get('merchant.merchant_country');\n var billingAgreement = models.checkoutCart && models.checkoutCart.isBilling();\n var isWPSflow = models.checkoutAppData && !!models.checkoutAppData.is_wps_flow();\n var is_wps_subscription_flow = models.checkoutAppData && !!models.checkoutAppData.is_wps_subscription_flow();\n var is_buy_now_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_buy_now_flow;\n var is_cart_upload_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_cart_upload_flow;\n var is_shopping_cart_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_shopping_cart_flow;\n var is_invoice_flow = models.checkoutAppData && !!models.checkoutAppData.isInvoiceFlow();\n var buyerID = models.checkoutSession.get('payer.id');\n var isMobile = _index.$DeviceInfo.isMobile();\n var isCorp = _squid.$meta.corp;\n\n state.isWPSflow = isWPSflow;\n\n _logger.$logger.info('gac_pxpContext', {\n userType: userType,\n currencyCode: currencyCode,\n paymentAction: paymentAction,\n merchantCountry: merchantCountry,\n buyerCountry: buyerCountry,\n billingAgreement: billingAgreement,\n isWPSflow: isWPSflow,\n is_wps_subscription_flow: is_wps_subscription_flow,\n is_buy_now_flow: is_buy_now_flow,\n is_cart_upload_flow: is_cart_upload_flow,\n is_shopping_cart_flow: is_shopping_cart_flow,\n is_invoice_flow: is_invoice_flow,\n buyerID: buyerID,\n isMobile: isMobile,\n isCorp: isCorp\n });\n\n var pageName = 'xo_hermes_gac';\n var wpsTreatment = isWPSflow ? 'xo_hermes_gac_treatment_wps' : 'xo_hermes_gac_treatment';\n var pxpTreatment = userType === 'DONOR' ? wpsTreatment : 'xo_hermes_gac_nondonor_treatment';\n\n return (0, _squid.$pxp)(pageName, {\n 'uid': buyerID,\n 'ctx.userType': userType,\n 'ctx.currencyCode': currencyCode,\n 'ctx.paymentAction': paymentAction,\n 'ctx.merchantId': merchantId,\n 'ctx.merchantCountry': merchantCountry,\n 'ctx.buyerCountry': buyerCountry,\n 'ctx.isBillingAgreement': billingAgreement,\n 'ctx.isWpsFlow': isWPSflow,\n 'ctx.isSubscriptionFlow': is_wps_subscription_flow,\n 'ctx.isBuyNowFlow': is_buy_now_flow,\n 'ctx.isCartUploadFlow': is_cart_upload_flow,\n 'ctx.isShoppingCartFlow': is_shopping_cart_flow,\n 'ctx.isInvoiceFlow': is_invoice_flow,\n 'ctx.isMobile': isMobile,\n 'ctx.isCorp': isCorp\n }, pxpTreatment, false, true);\n }\n }).then(function (pxp) {\n if (pxp) {\n var pxpResult = !!pxp;\n\n _logger.$logger.info('gac_pxpResult', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n\n if (state.eligible && state.tracking && state.tracking.impression_url) {\n _marketingoffer.$fireMORSBeacon.fireBeacon(state.tracking.impression_url);\n }\n } else {\n state.eligible = false;\n }\n })['catch'](function (err) {\n _logger.$logger.error('gac_eligibility', err);\n state.eligible = false;\n return state.eligible;\n });\n };\n\n return {\n get: get,\n set: set,\n decideEligibility: decideEligibility\n };\n});\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_marketingoffer.$MessageDiscoverModel;\n\n_marketingoffer.$fireMORSBeacon;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/give-at-checkout\", \"../node_modules/xo-member-components/src/give-at-checkout/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/give-at-checkout/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/give-at-checkout/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n \\n
\\n
\\n \\n \\n
\\n
\\n
\\n

\\n {{content('donate.ecFlowConsentLine1')}}\\n

\\n

\\n {{content('donate.ecFlowConsentLine2')}}\\n

\\n

\\n {{content('donate.ecFlowConsentLine3')}}\\n

\\n
\\n
\\n

\\n {{content('donate.wpsFlowConsentLine1')}}\\n

\\n

\\n {{content('donate.wpsFlowConsentLine2')}}\\n

\\n
\\n
\\n\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/msb-offer/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoMsbOffer = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/tooltip/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/msb-offer/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/msb-offer/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Component for rendering Merchant specific balance on the review page for multi fi\n * It renders on top of the list of the FI's\n * As far as we know - there can only be 1 msb applied per plan\n * and so each should have \"incentive\" attached\n*/\nvar $xoMsbOffer = exports.$xoMsbOffer = _squid.$Component.extend('$xoMsbOffer', {\n tag: 'xo-msb-offer',\n template: _template2['default'],\n props: {\n /**\n * incentive field from FI object\n */\n msb: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n var msb = this.props.msb;\n\n\n this.amount = (0, _squid.formatCurrency)(msb.amount.value, msb.amount.currency);\n this.minPurchaseAmount = msb.minPurchaseAmount;\n }\n }\n});\n\nangular.value(\"$xoMsbOffer\", $xoMsbOffer);\n_squid.$Component;\n\n_squid.formatCurrency;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/msb-offer/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/msb-offer/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n \\n
\\n \\n {{ content('paymentMethod.msbOffer') }}\\n \\n\\n
\\n {{ content('paymentMethod.msbHelpText', {amount: amount})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n
\\n\\n
\\n\\n
\\n
\\n \\n
\\n

{{ content('paymentMethod.msbToolTipOffer') }}

\\n
\\n

\\n {{ content('paymentMethod.msbToolTipText', {amount: amount, minimumPurchase: minPurchaseAmount}) }}\\n

\\n

\\n {{ content('paymentMethod.msbToolTipText2', {amount: amount}) }}\\n

\\n
\\n
\\n
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/no-balance/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoNoBalance = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/no-balance/factory.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/no-balance/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/no-balance/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Banner with text messages that user have pending (not claimed yet) balance available,\n * but needs to go through verification steps on 8ball\n *\n * Used in the following pages:\n * 1. review page - hermesnodeweb/public/pages/xo-review\n * 2. add card contingency page - hermesnodeweb/public/pages/xo-add-card\n */\nvar $xoNoBalance = exports.$xoNoBalance = _squid.$Component.extend('$xoNoBalance', {\n tag: 'xo-no-balance-banner',\n template: _template2['default'],\n actions: {\n /**\n * event when clicking on info icon to show secondary message\n */\n onShowSecondaryMsg: function onShowSecondaryMsg($event) {\n $event.preventDefault();\n this.showSecondaryMsg = true;\n _logger.$logger.info('no_balance', {\n from: 'no_balance',\n to: 'no_balance_click_info'\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n var _$NoBalanceFactory$ge = _factory.$NoBalanceFactory.get(),\n showMsgWithAmount = _$NoBalanceFactory$ge.showMsgWithAmount,\n pendingBalances = _$NoBalanceFactory$ge.pendingBalances;\n\n if (showMsgWithAmount) {\n var balance1 = pendingBalances[0],\n balance2 = pendingBalances[1];\n\n\n if (pendingBalances.length === 1) {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsgWithAmt', { amt: (0, _squid.formatCurrency)(balance1.value, balance1.currency) });\n } else {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsgWithMultiAmt', {\n amt1: (0, _squid.formatCurrency)(balance1.value, balance1.currency),\n amt2: (0, _squid.formatCurrency)(balance2.value, balance2.currency)\n });\n }\n } else {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsg');\n }\n }\n }\n});\n\nangular.value(\"$xoNoBalance\", $xoNoBalance);\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.formatCurrency;\n\n_logger.$logger;\n\n_factory.$NoBalanceFactory;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/no-balance/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _wallet = __webpack_require__(\"../node_modules/xo-models/src/wallet/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\n/**\n * Money Waiting (no balance) factory\n * story with details - https://rally1.rallydev.com/#/42145958143/detail/userstory/243026109436\n */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$NoBalanceFactory', function () {\n\n /**\n * eligible - to show / hide xo-no-balance component\n * showMsgWithAmount - to show / hide message with amount\n * pendingBalances - list of pending(non claimed yet) balances amounts\n * isAlreadyShown - was banner already shown or not\n */\n var state = {\n eligible: false,\n showMsgWithAmount: false,\n pendingBalances: undefined,\n isAlreadyShown: false\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n /**\n * call \"No Balance\" pxp:\n * stage url - https://engineering.paypalcorp.com/pxptoolstage/configuration?exptId=5007\n * xo_hermes_nobalance_treatment1 - for showing message without amount\n * xo_hermes_nobalance_treatment2 - for showing message with amount\n */\n var getPxp = function getPxp() {\n return (0, _squid.$pxp)('xo_hermes_nobalance', 'xo_hermes_nobalance_treatment(1|2)', undefined, false, true);\n };\n\n /**\n * Decide to show / hide message with amount / amounts\n * @param {Object} pxpResult - pxp result\n * @param {Object} pendingBalances - array of pending (non claimed yet) balances\n */\n var shouldShowMsgWithAmount = function shouldShowMsgWithAmount(_ref) {\n var pxpResult = _ref.pxpResult,\n pendingBalances = _ref.pendingBalances;\n\n return pendingBalances.length > 0 && pxpResult && pxpResult.treatment_name === 'xo_hermes_nobalance_treatment2';\n };\n\n /**\n * req.user has noBalance flag in case there is pending balance availaible which is getting mapped to auth model\n * mapping - https://github.paypal.com/Checkout/xo-hercules/blob/master/apis/auth/outputMapper.js\n */\n var hasUserPendingBalance = function hasUserPendingBalance() {\n return _auth.$AuthModel.instance().no_balance;\n };\n\n /**\n * Mark as already shown, for example:\n * if user doesn't have any FI -> user will see \"no balance\" banner on Add Card Page.\n * And so after user adds cart successfully -> we should not show banner on review page\n */\n var markAsAlreadyShown = function markAsAlreadyShown() {\n state.isAlreadyShown = true;\n state.eligible = false;\n };\n\n /**\n * experiment is eligible in the following cases:\n * 1. user has `no_balance` flag as `true` - means there is pending balance that user can claim, but need to go through verification first on 8ball\n * 2. user has less than 3 balance accounts\n * 3. pxp returns treatment1 or treatment2\n */\n var decideEligibility = function decideEligibility() {\n if (state.isAlreadyShown) {\n return _squid.$promise.resolve({});\n }\n\n var isUserWithPendingBalance = hasUserPendingBalance();\n\n return _wallet.$WalletModel.instance(_angular.$rootScope.token).retrieve().then(function (wallet) {\n var pendingBalances = wallet.getAmountsOfBalances();\n var isNoBalanceEligible = isUserWithPendingBalance && pendingBalances.length > 0 && pendingBalances.length < 3;\n\n var balance1 = pendingBalances[0],\n balance2 = pendingBalances[1];\n\n\n _logger.$logger.info('no_balance', {\n from: 'no_balance',\n to: 'no_balance_eligibility',\n number_of_balances: pendingBalances.length,\n no_balance_eligible: isNoBalanceEligible,\n balance_amount1: balance1 && balance1.value,\n balance_currency1: balance1 && balance1.currency,\n balance_amount2: balance2 && balance2.value,\n balance_currency2: balance2 && balance2.currency\n });\n\n if (!isNoBalanceEligible) {\n return _squid.$promise.resolve({});\n }\n\n return getPxp().then(function (pxpResult) {\n state.eligible = !!pxpResult;\n if (state.eligible) {\n state.pendingBalances = pendingBalances;\n state.showMsgWithAmount = shouldShowMsgWithAmount({ pxpResult: pxpResult, pendingBalances: pendingBalances });\n }\n return state;\n });\n });\n };\n\n return {\n get: get,\n set: set,\n markAsAlreadyShown: markAsAlreadyShown,\n decideEligibility: decideEligibility\n };\n});\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n_logger.$logger;\n\n_wallet.$WalletModel;\n\n_auth.$AuthModel;\n\n_angular.$rootScope;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/no-balance\", \"../node_modules/xo-member-components/src/no-balance/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/no-balance/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/no-balance/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n \\n
{{ msg }}
\\n
\\n
{{ content('noBalance.secondaryMsg') }}
\\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/preferred-checkbox/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/preferred-checkbox/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/preferred-checkbox/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-preferred-checkbox',\n template: _template2['default'],\n props: {\n makeFiPreferred: {\n type: 'var',\n required: false\n },\n plan: {\n type: 'var',\n required: false\n },\n cardart: {\n type: 'var',\n required: false\n }\n },\n actions: {\n toggleModel: function toggleModel() {\n if (this.props.makeFiPreferred.selected) {\n this.props.makeFiPreferred.planId = this.props.plan.planId;\n this.props.makeFiPreferred.fiId = this.props.plan.primaryFs.type === 'BALANCE' ? this.props.plan.primaryFs.type : // Balance doesn't have an instrument id\n this.props.plan.primaryFs.id;\n }\n }\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('checkout_fpti', { 'pref_fi_option_shown': '1' });\n }\n }\n});\n\n\n_squid.$Component;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/preferred-checkbox/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$PreferredCheckboxFactory', function () {\n var state = {\n eligible: false\n };\n\n /**\n * call pxp to determint if we should show preferred checkbox in case of single fi\n */\n var getSinglePreferredCheckboxPxp = function getSinglePreferredCheckboxPxp() {\n return (0, _squid.$pxp)('xo_hermes_single_preffered_checkbox', 'xo_hermes_single_preffered_checkbox_treatment', undefined, false, true).then(function (pxpRes) {\n return !!pxpRes;\n });\n };\n\n /**\n * check choice eligibility based on:\n * 1. pxp\n * 2. is billing or not\n */\n var getChoicePreferredCheckboxEligibility = function getChoicePreferredCheckboxEligibility(checkoutCart) {\n return _index.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n var checkboxVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n\n return checkboxVariants.indexOf(variant) !== -1 && !checkoutCart.isBilling();\n });\n };\n\n /**\n * eligible if:\n *\n * 1. choice eligibility is successfull\n * 2. number of plans >= 1\n *\n * If there is only 1 plan, xo_hermes_single_preffered_checkbox pxp (https://engineering.paypalcorp.com/pxptoolstage/configuration?exptId=5480&version=1)\n * must return treatment\n *\n */\n var decideEligibility = function decideEligibility(_ref) {\n var plans = _ref.plans,\n checkoutCart = _ref.checkoutCart;\n\n if (!plans || plans.length === 0) {\n state.eligible = false;\n return;\n }\n\n return getChoicePreferredCheckboxEligibility(checkoutCart).then(function (choiceEligibility) {\n if (!choiceEligibility) {\n state.eligible = false;\n return;\n }\n\n if (plans.length > 1) {\n state.eligible = true;\n return;\n }\n\n return getSinglePreferredCheckboxPxp().then(function (pxpResult) {\n _logger.$logger.info('single_fi_preferred_checkbox_eligibility', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n });\n });\n };\n\n var isSinglePreferredCheckboxEligible = function isSinglePreferredCheckboxEligible(_ref2) {\n var plans = _ref2.plans;\n\n return plans && plans.length > 0 && state.eligible;\n };\n\n var showPreferredCheckbox = function showPreferredCheckbox(plan, fundingOptions) {\n return (plan.primaryFs.id || plan.primaryFs.type === 'BALANCE') && !fundingOptions.isPreferred(plan);\n };\n\n return {\n isSinglePreferredCheckboxEligible: isSinglePreferredCheckboxEligible,\n decideEligibility: decideEligibility,\n showPreferredCheckbox: showPreferredCheckbox\n };\n});\n\n_squid.$pxp;\n\n_squid.$config;\n\n_logger.$logger;\n\n_index.$ChoiceEligibility;\n\n_angular.$rootScope;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/preferred-checkbox\", \"../node_modules/xo-member-components/src/preferred-checkbox/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/preferred-checkbox/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/preferred-checkbox/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n \\n \\n
\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-address/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\n__webpack_require__(\"../node_modules/xo-address-components/src/address-display/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/review-address/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-review-address',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n makeAddrPreferred: {\n type: 'var',\n required: false\n },\n countryCode: {\n type: 'str',\n required: false\n },\n storePickUpSelected: {\n type: 'var',\n required: false\n },\n nmjExperience: {\n type: 'var',\n required: false\n },\n hideShipToHeader: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n auth: _index2.$AuthModel.instance().retrieve()['catch'](_angular.noop)\n };\n }\n },\n actions: {\n gotoShipping: function gotoShipping() {\n if (this.models.checkoutAppData.flags.allow_change_shipping) {\n _uiRouter.$state.go('checkout.review.sidebar.shipping');\n } else {\n this.cannotChangeShippingInfoMessages = true;\n }\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n var updateMakePreferredFlag = function updateMakePreferredFlag(flag) {\n if (_this.makeAddrPreferred) {\n // Update the makeAddrPreferred.shown flag, for the caller to know about it.\n _this.makeAddrPreferred.shown = flag;\n }\n return flag;\n };\n\n /**\n * Decision on whether to show Make Preferred Checkbox\n * @returns {boolean}\n */\n this.isMakePreferred = function () {\n if (_this.models.auth.remembered) {\n return updateMakePreferredFlag(false);\n }\n\n if (_this.isPreferredShippingEnabled && !_this.models.checkoutSession.get('shipping.preferred_address') && !_this.models.checkoutSession.get('shipping.s2s_address')) {\n return updateMakePreferredFlag(true);\n }\n return updateMakePreferredFlag(false);\n };\n },\n populate: function populate() {\n // countryCode is not available, hence we use the shipping.county to retrieve the feature flag.\n var shipping = this.models.checkoutSession && this.models.checkoutSession.shipping || {};\n\n this.isPreferredShippingEnabled = (0, _squid.$feature)('preferredShipping', false, shipping.country);\n this.isNmj = this.props.nmjExperience && (this.props.nmjExperience.one_page || this.props.nmjExperience.design_2 || this.props.nmjExperience.design_3);\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$feature;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\n\n_index2.$AuthModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-address/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
\\n
\\n
\\n

{{ content('shippingAddress.shipTo') }}

\\n
\\n

{{ content('shippingAddress.yourAddress') }}

\\n {{ content('shippingAddress.merchantReq') }}\\n
\\n
\\n
\\n {{models.checkoutSession.shipping.name}}\\n \\n \\n
\\n
\\n \\n
\\n {{models.checkoutSession.shipping.name}}\\n \\n
\\n
\\n
\\n
\\n \\n {{ content('common.change') }}\\n \\n \\n
\\n
\\n
\\n \\n
    \\n
  • \\n {{ content('memberReview.cannotChangeShippingMsgUserActionCommit', {merchantName: models.checkoutAppData.merchant.brand_name, merchantName2: models.checkoutAppData.merchant.brand_name}) }}\\n
  • \\n
  • \\n {{ content('memberReview.cannotChangeShippingMsg', {merchantName: models.checkoutAppData.merchant.brand_name, merchantName2: models.checkoutAppData.merchant.brand_name}) }}\\n
  • \\n
\\n
\\n
\\n\\n
\\n \\n \\n
\\n\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-paywith/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/xo-wallet-components/src/add-card/cvv/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/tooltip/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/cardicon/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/fi-panel/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/experience/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/pay-with-credit/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/offer/directive.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/billing-address/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/card-backup/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/preferred-checkbox/directive.js\");\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/show-more-fi/directive.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/show-more-fi/factory.js\");\n\nvar _factory2 = __webpack_require__(\"../node_modules/xo-member-components/src/preferred-checkbox/factory.js\");\n\nvar _factory3 = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/factory.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/directive.js\");\n\nvar _factory4 = __webpack_require__(\"../node_modules/xo-member-components/src/review-paywith/factory.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/msb-offer/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/backup-label/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/review-paywith/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _factory5 = __webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion/factory.js\");\n\n__webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js\");\n\nvar _experiments = __webpack_require__(\"../node_modules/xo-models/src/experiments/index.js\");\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// billing address display\n// PPC offer banner\n// \nvar ADD_CARD_URLS = {\n SIDEBAR_DEFAULT: {\n route: 'checkout.review.sidebar.sidebarAddCard.addCardFlow.addCard',\n label: 'fundingInstruments.addNewCard'\n },\n SIDEBAR_ADDCARD_WITH_ADDBANK: {\n route: 'checkout.review.sidebar.sidebarAddNew.bank.add',\n label: 'common.addNew'\n }\n}; // \n// accessibility directives\n// \n\n\n(0, _angular.$registerDirective)('xo-review-paywith', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n token: '=?',\n showBmlPopup: '=?',\n installmentNotSelected: '=?',\n payButtonText: '=?',\n installment: '=?',\n padToggleFeature: '=?',\n selectedmethod: '=?',\n makeFiPreferred: '=?',\n selectFiVariant: '=?',\n nmjExperience: '=?',\n creditParentContext: '=?',\n choiceBalanceCheckboxState: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.locale = _squid.$locale;\n $scope.formatCurrency = _squid.formatCurrency;\n $scope.nmjMultiPage = $scope.nmjExperience && $scope.nmjExperience.multiPage;\n $scope.showMoreFiFactory = _factory.$ShowMoreFiFactory;\n $scope.smartAuthFactory = _factory4.$SmartAuthFactory;\n $scope.currencyConversionFactory = _factory5.$CurrencyConversionFactory;\n $scope.isCountryDE = _squid.$locale.country === 'DE';\n\n // check for feature enabled in config/inc/ui.json for AU country\n // this feature is there only in country AU as of June 29th, 2015\n $scope.showUachFeatureDiscalimer = false;\n\n /**\n * isMultiFiPadEligible\n * Used to determine if we should combine plans to be able to show\n * a PAD toggle checkbox instead of 2 plans\n *\n * padToggleEnabled is used to control ramp per country using a combination of pxp\n * and a feature flag\n *\n * If the coutnry is included on the list of countires that should look at the pxp config\n * we check the pxp and then the feature flag to check if its enabled,\n *\n * If the country its not included in the list of countries that should check pxp\n * we just use the feature flag.\n *\n */\n var isMultiFiPadEligible = function isMultiFiPadEligible() {\n return $scope.isPadToggleFeatureApplicable() && $scope.padToggleEnabled;\n };\n\n var setPadStatus = function setPadStatus(state) {\n $scope.padToggleFeature.checkboxEnabled = state;\n };\n\n var getPadStatus = function getPadStatus() {\n return $scope.padToggleFeature.checkboxEnabled;\n };\n\n var getMultiFiPadCheckboxState = function getMultiFiPadCheckboxState(id) {\n return $scope.padToggleFeature.multiFiCheckboxStates[id];\n };\n\n // used for multiFi DE\n // update pad status which is used to show/hide \"Pay after 14 Days\" label as a text on a blue Pay button\n var setPadStatusForMultiFi = function setPadStatusForMultiFi(plan) {\n if ($scope.checkoutSession.fundingOptions.isPAD(plan) || $scope.checkoutSession.fundingOptions.isIACH(plan)) {\n setPadStatus(getMultiFiPadCheckboxState(plan.primaryFs.id));\n } else {\n setPadStatus(false);\n }\n };\n\n // TODO: remove after PAPS fix\n $scope.balanceWithRewards = function (fi) {\n return _factory3.$RewardsCheckboxFactory.hideAmount(fi);\n };\n\n $scope.hasRewards = function (plan) {\n return _factory3.$RewardsCheckboxFactory.isRewardsPlan(plan);\n };\n\n $scope.getRewardsContent = function (plan) {\n // Need a content mapper because content experience\n // changes based on type of rewards in plan.\n var contentKeys = _factory3.$RewardsCheckboxFactory.getContentKeys(plan);\n\n return contentKeys || {};\n };\n\n $scope.isSelected = function (plan) {\n if (!plan) {\n return false;\n }\n var getID = function getID(obj) {\n return obj.planId || obj.id;\n };\n var selection = $scope.selectedmethod ? $scope.selectedmethod : $scope.checkoutSession.plan;\n var result = getID(plan) === getID(selection);\n // When the user is on RYI after selectFI\n // selection logic is maintained by the session\n // and not by radio button clicks on $scope.selectedmethod\n return result;\n };\n\n $scope.$on('$destroy', function () {\n return _factory3.$RewardsCheckboxFactory.destroy();\n });\n\n $scope.showChangeFI = function () {\n return $scope.canChangeFI && !$scope.selectedmethod && !$scope.nmjExperience;\n };\n\n $scope.showCreditPlacement = function (fs) {\n return fs && !fs.is_pinless_debit && fs.name === 'PayPal Credit' || fs.primaryFs && fs.primaryFs.name === 'BILL_ME_LATER';\n };\n\n $scope.isPadToggleFeatureApplicable = function () {\n return $scope.padToggleEnabled && $scope.padToggleFeature.applicable;\n };\n\n // for PAD eligible get combined plans\n $scope.getSortedPlans = function () {\n if (isMultiFiPadEligible()) {\n return $scope.checkoutSession.fundingOptions.getPadAndIachCombinedPlans();\n } else {\n return $scope.checkoutSession.getPlanList();\n }\n };\n\n $scope.showMultiFiPadToggle = function (plan) {\n var padToggle = false;\n\n if (isMultiFiPadEligible() && $scope.checkoutSession.fundingOptions.isPadToggleApplicableForFS(plan.planId) && plan.planId === $scope.selectedmethod.planId) {\n padToggle = true;\n setPadStatusForMultiFi(plan);\n }\n return padToggle;\n };\n\n $scope.showPadLabelForPadEligibleCountries = function (plan) {\n return $scope.checkoutSession.fundingOptions.isPAD(plan) || $scope.checkoutSession.fundingOptions.isIACHWithPad(plan) && $scope.padToggleEnabled && plan.planId !== $scope.selectedmethod.planId;\n };\n\n $scope.isUSGambling = function () {\n // US Only Real Money Gaming\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = $scope.checkoutAppData && $scope.checkoutAppData.merchant && $scope.checkoutAppData.merchant.merchant_country === 'US';\n\n return $scope.payee && $scope.payee.isGambling() && isUSBuyer && isUSmerchant;\n };\n\n // get add card link state to display different versions based on country\n $scope.getAddCardLink = function () {\n var linkObj = ADD_CARD_URLS.SIDEBAR_DEFAULT;\n\n if ((0, _squid.$feature)('addBank')) {\n linkObj = ADD_CARD_URLS.SIDEBAR_ADDCARD_WITH_ADDBANK;\n }\n\n var state = {\n show: $scope.selectedmethod && !$scope.nmjExperience && !$scope.isUSGambling(),\n route: linkObj.route,\n label: $scope.content(linkObj.label)\n };\n\n return state;\n };\n\n var populateModels = function populateModels() {\n _index2['default'].instance($scope.token).fetch();\n return (0, _squid.$populate)($scope, {\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _checkout.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance($scope.token),\n payee: _checkout.$CheckoutPayeeModel.instance($scope.token)\n });\n };\n\n var setShowAmount = function setShowAmount() {\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && $scope.checkoutCart.get('purchase.items.length', 0) === 0;\n\n return (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n $scope.showAmt = $scope.checkoutCart.get('payment_action') !== 'authorize' && showAmount;\n });\n };\n\n var setNegativeBalanceData = function setNegativeBalanceData() {\n var negBals = $scope.checkoutSession && $scope.checkoutSession.negBals;\n\n // re-order multiple currencies when first balance has different currency\n if (negBals && negBals[0].currency_code !== $scope.checkoutCart.purchase.amounts.currency_code) {\n negBals = negBals.reverse();\n }\n $scope.negBals = negBals;\n };\n\n var setShowBillingAddress = function setShowBillingAddress() {\n if (!$scope.nmjMultiPage) {\n return;\n }\n // only show billing address if the selected instrument is a Credit Card\n var selectedInstrument = $scope.checkoutSession.plan.sources && $scope.checkoutSession.plan.sources[0];\n\n if (selectedInstrument && selectedInstrument.type === 'PAYMENT_CARD') {\n $scope.showBillingAddress = true;\n }\n };\n\n var setCurrencyConversionExperiment = function setCurrencyConversionExperiment() {\n var plan = $scope.checkoutSession.plan;\n\n var callCurrencyConversionPXP = plan.hasConversion() && (0, _squid.$feature)('showConversionOverlay');\n var conversion = plan.conversion;\n\n\n if (conversion) {\n $scope.toTargetCurrency = conversion.to_amount_forex + ' ' + conversion.to_code;\n $scope.fromUnitCurrency = '1 ' + conversion.from_code;\n }\n\n // The following if block is the condition to call the currency conversion PXP,\n // remove it after Nov 11th 2018, as one of the treatment has been ramped to 100% on Oct 12th.\n if (callCurrencyConversionPXP) {\n return _factory5.$CurrencyConversionFactory.fetchPXPTreatments();\n }\n };\n\n var setMultiFiPadCheckboxState = function setMultiFiPadCheckboxState(id, state) {\n $scope.padToggleFeature.multiFiCheckboxStates[id] = state;\n };\n\n $scope.getPadStatus = getPadStatus;\n\n var logFptiForPadToggle = function logFptiForPadToggle(status) {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggle' + status\n });\n };\n\n // for PAD checking the corresponding IACH bank is preferred or not\n // only MEFT and IACH subtypes can have isPreferred as true\n $scope.showPreferredLabelForMultiFi = function (plan) {\n var preferred = $scope.checkoutSession.fundingOptions.isPreferred(plan);\n\n return $scope.makeFiPreferred && preferred && !$scope.checkoutSession.fundingOptions.isMEFT(plan);\n };\n\n $scope.showPreferredLabelForSingleFi = function (fs) {\n var plans = $scope.checkoutSession.get('fundingOptions.plans') || [];\n var filteredPlans = plans.filter(function (plan) {\n return plan.planId === fs.id && plan.primaryFs && plan.primaryFs.id === fs.instrument_id;\n });\n\n if (filteredPlans.length > 0) {\n return $scope.checkoutSession.fundingOptions.isPreferred(filteredPlans[0]) && $scope.showPreferredLabel;\n } else {\n return false;\n }\n };\n\n // show / hide preferred checkbox for multi fi use case\n $scope.showPreferredCheckboxForMultiFi = function (plan) {\n var preferred = $scope.checkoutSession.fundingOptions.isPreferred(plan);\n\n return $scope.makeFiPreferred && plan.planId === $scope.selectedmethod.planId && !preferred;\n };\n\n // Decide whether multiple FI or single FI section should be shown, based on choice experiment criteria\n var initPadToggleFeatureParams = function initPadToggleFeatureParams() {\n $scope.padToggleFeature.applicable = $scope.checkoutSession.fundingOptions.isPadToggleApplicable();\n setPadStatus($scope.padToggleFeature.applicable && $scope.checkoutSession.plan.isPAD() ? true : false);\n var sortedPlans = $scope.getSortedPlans();\n\n // sortedPlans (fundingOptions.plans) is undefined for BA no purchase case\n if (sortedPlans) {\n sortedPlans.forEach(function (plan) {\n if ($scope.checkoutSession.fundingOptions.isPAD(plan)) {\n setMultiFiPadCheckboxState(plan.primaryFs.id, true);\n }\n });\n }\n $scope.padToggleFeature.defaultPlan = $scope.checkoutSession.plan.isPAD();\n };\n\n // Decide whether multiple FI or single FI section should be shown, based on choice experiment criteria\n $scope.showMultipleFi = function () {\n var length = $scope.selectedmethod && $scope.getSortedPlans() && $scope.getSortedPlans().length || 0;\n\n // If the PPC Acquisition Banner experiment is treatment 1, add banner as an \"FI\"\n if ($scope.installment && $scope.installment.showPPCAcquisitionRadioButton) {\n length++;\n }\n\n return length > 1;\n };\n\n var setPadToggleEligbiility = function setPadToggleEligbiility() {\n if ($scope.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n return Experiments.padToggleFeatureSupported().then(function (result) {\n $scope.padToggleEnabled = result;\n });\n } else {\n $scope.padToggleEnabled = false;\n }\n };\n\n return populateModels().then(function () {\n var sortedPlans = $scope.getSortedPlans();\n\n return _angular.$q.all([setShowAmount(), setNegativeBalanceData(), setShowBillingAddress(), setCurrencyConversionExperiment(), _factory.$ShowMoreFiFactory.decideEligibility({\n plans: sortedPlans\n }), _factory2.$PreferredCheckboxFactory.decideEligibility({\n plans: sortedPlans,\n checkoutCart: $scope.checkoutCart\n }), setPadToggleEligbiility(), _factory3.$RewardsCheckboxFactory.buildCache()]).then(function () {\n if (sortedPlans) {\n _factory.$ShowMoreFiFactory.init(sortedPlans);\n }\n\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n var merchant = $scope.checkoutAppData.merchant;\n\n $scope.merchant = merchant.brand_name || merchant.merchant_name || merchant.merchant_email;\n\n // add FPTI tracking for CVV field\n var cvvData = $scope.checkoutSession.cvvData;\n\n if (cvvData && !cvvData.lastAddedCard) {\n _logger.$logger.info('checkout_fpti', {\n 'iscvvshown': 'true'\n });\n }\n\n var isBilling = $scope.checkoutCart.isBilling();\n var isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n var disableStickyForMerchant = _squid.$config.disableMerchantForStickyBA.indexOf($scope.payee.merchant.id) > -1;\n var stickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n var isWpsSubscription = $scope.checkoutAppData.is_wps_subscription_flow();\n\n // Hide 'change' link for sticky disabled merchants\n $scope.showPayMerchantWithPayPal = isBillingNoPurchase && (disableStickyForMerchant || !stickyInstrument);\n\n // Hide 'Pay With' header for NMJ multiple step experience\n $scope.showPayWithText = !$scope.nmjMultiPage && !$scope.showPayMerchantWithPayPal;\n $scope.showPreferredLabel = $scope.selectFiVariant && $scope.makeFiPreferred && $scope.checkoutSession.getPlanList() && $scope.checkoutSession.getPlanList().length > 1;\n\n var checkoutPlan = $scope.checkoutSession.plan;\n\n $scope.canChangeFI = true;\n if ($scope.showPayMerchantWithPayPal || checkoutPlan.isMSB() || $scope.nmjMultiPage) {\n $scope.canChangeFI = false;\n } else if (checkoutPlan.isBalance() && !(0, _squid.$feature)('choiceExperiment')) {\n // Show the change link always for US, where planning is finished ramping choice.\n // For other countries, keep old checks until we're sure planning has ramped choice changes there.\n $scope.canChangeFI = $scope.checkoutSession.plan.hasConversion() || $scope.checkoutSession.fundingOptions.hasECheck() || $scope.checkoutSession.fundingOptions.hasCredit() || Boolean($scope.checkoutSession.getDisallowedPreferred()) || Boolean($scope.checkoutSession.fundingOptions.getPreferred());\n }\n\n $scope.hasMultipleBalances = plans && plans.filter(function (p) {\n return p.primaryFs.type === 'BALANCE';\n }).length > 1;\n\n $scope.gotoWallet = function () {\n // For choice variant, go to manage wallet instead. Always available\n if ($scope.selectedmethod) {\n return _uiRouter.$state.go('checkout.review.sidebar.sidebarManageWallet');\n }\n\n if ($scope.canChangeFI) {\n return _uiRouter.$state.go('checkout.review.sidebar.wallet', { padToggleFeature: $scope.padToggleFeature });\n }\n };\n\n $scope.bmlSeeTerms = function () {\n $scope.showBmlPopup();\n };\n\n var currentPlanId = $scope.checkoutSession.plan.id;\n\n $scope.isSplitPaymentWithBalanceAndIachPlan = false;\n\n if ($scope.padToggleEnabled) {\n initPadToggleFeatureParams();\n }\n\n // page section changes to show pad toggle tooltip properly\n if ($scope.padToggleEnabled && $scope.padToggleFeature.applicable) {\n var checkoutPageSection = angular.element(document.getElementById('sliding-area'));\n\n checkoutPageSection.css('overflow', 'visible');\n }\n\n $scope.showPadToggle = function () {\n var padToggle = false;\n\n if ($scope.padToggleEnabled && $scope.padToggleFeature.applicable) {\n var padToggleForFS = $scope.checkoutSession.fundingOptions.isPadToggleApplicableForFS($scope.checkoutSession.plan.id);\n var isPadPlan = $scope.checkoutSession.plan.isPAD();\n\n $scope.isIachPlan = $scope.checkoutSession.plan.isIACH();\n if ($scope.isIachPlan && !$scope.isSplitPaymentWithBalanceAndIachPlan) {\n $scope.isSplitPaymentWithBalanceAndIachPlan = $scope.checkoutSession.plan.isSplitPaymentWithBalanceAndIach();\n }\n\n $scope.padToggleFeature.showCheckbox = padToggleForFS && (isPadPlan || $scope.isIachPlan);\n\n if (!padToggleForFS) {\n setPadStatus(false);\n currentPlanId = $scope.checkoutSession.plan.id;\n } else if (currentPlanId !== $scope.checkoutSession.plan.id && !isPadPlan) {\n setPadStatus(false);\n currentPlanId = $scope.checkoutSession.plan.id;\n } else if (currentPlanId !== $scope.checkoutSession.plan.id && isPadPlan) {\n setPadStatus(true);\n currentPlanId = $scope.checkoutSession.plan.id;\n }\n\n if ($scope.padToggleFeature.showCheckbox) {\n padToggle = true;\n\n // padToggle is false when split balance and `choice` balance checkbox is selected by user\n var checkboxBalanceChecked = $scope.choiceBalanceCheckboxState && $scope.choiceBalanceCheckboxState.checkbox;\n\n if ($scope.isSplitPaymentWithBalanceAndIachPlan && checkboxBalanceChecked) {\n padToggle = false;\n }\n }\n }\n return padToggle;\n };\n\n $scope.getPadFsContent = function (fs) {\n return $scope.isPadToggleFeatureApplicable() ? $scope.content('paymentMethod.padToggleFs', { bank: fs.name, last4: fs.last4 }) : $scope.content('paymentMethod.padFs', { bank: fs.name, date: fs.hop_date, last4: fs.last4 });\n };\n\n $scope.updatePlan = function (planId) {\n currentPlanId = planId;\n\n $scope.checkoutSession.fundingOptions.action('select', {\n data: {\n planId: planId\n },\n success: function success(result) {\n $scope.checkoutSession.populate(result);\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n $scope.checkoutSession.installments = result.installments;\n }\n }\n });\n };\n\n function getBankInstrumentId() {\n var instrumentId = void 0;\n\n if ($scope.isSplitPaymentWithBalanceAndIachPlan) {\n var iachSource = $scope.checkoutSession.plan.sources.find(function (source) {\n return source.type === 'BANK_ACCOUNT' && source.sub_type === 'INSTANT_TRANSFER';\n });\n\n instrumentId = iachSource && iachSource.instrument_id;\n } else if ($scope.isIachPlan) {\n instrumentId = $scope.checkoutSession.plan.sources[0].instrument_id;\n }\n return instrumentId;\n }\n\n $scope.multiFiPadToggleCheckboxEvent = function (plan) {\n setPadStatusForMultiFi(plan);\n\n // if pad checkbox is checked for the selected plan\n if (getMultiFiPadCheckboxState(plan.primaryFs.id)) {\n logFptiForPadToggle('On');\n } else {\n logFptiForPadToggle('Off');\n }\n };\n\n $scope.padToggleCheckboxEvent = function () {\n var planId = void 0;\n\n // For choice multi FI experience, we want to keep this in sync since this is read on clicking 'Continue' in RYI page\n // Skip the rest of it though. Doesn't apply for the multiFi variant\n if ($scope.selectedmethod) {\n var plan = $scope.checkoutSession.fundingOptions.plans[0];\n\n $scope.padToggleFeature.multiFiCheckboxStates[plan.primaryFs.id] = getPadStatus();\n return $scope.multiFiPadToggleCheckboxEvent(plan);\n }\n\n // if getPadStatus() === true, that means we're currently selecting a PAD plan\n if (getPadStatus()) {\n var bankInstrumentId = getBankInstrumentId();\n\n planId = $scope.checkoutSession.fundingOptions.getBankPadPlanIdByInstrumentId(bankInstrumentId, 'IACH');\n logFptiForPadToggle('On');\n } else {\n // otherwise we have to find the corresponding IACH plan\n var padInstrumentId = $scope.checkoutSession.plan.sources[0].instrument_id;\n\n planId = $scope.checkoutSession.fundingOptions.getBankPadPlanIdByInstrumentId(padInstrumentId, 'PAD');\n\n // when a user intentionally un-check the PayPal balance from choice view\n var isChoiceBalanceUnchecked = $scope.choiceBalanceCheckboxState.checkbox !== undefined && $scope.choiceBalanceCheckboxState.checkbox === false;\n\n if (isChoiceBalanceUnchecked) {\n // find a IACH plan without a balance\n var iachPlanWithoutBalance = $scope.checkoutSession.fundingOptions.plans.find(function (p) {\n return (p.primaryFs && p.primaryFs.id) === padInstrumentId && $scope.checkoutSession.fundingOptions.isIACH(p) && !p.secondaryFIs;\n });\n\n if (iachPlanWithoutBalance) {\n planId = iachPlanWithoutBalance.planId;\n }\n }\n logFptiForPadToggle('Off');\n }\n\n return $scope.updatePlan(planId);\n };\n\n var processAllLoadedPadToggle = function processAllLoadedPadToggle() {\n if ($scope.padToggleEnabled && $scope.showPadToggle()) {\n // To remove focus from checkbox so that focus style is not applied\n if (getPadStatus()) {\n var section = document.querySelector('#padToggleHelp');\n\n if (section) {\n section.focus();\n section.blur();\n }\n }\n // fpti logging\n if (!$scope.padToggleFeature.fptiLogged) {\n if (getPadStatus()) {\n _logger.$logger.info('pad_toggle_on_feature_shown');\n logFptiForPadToggle('OnShown');\n } else {\n _logger.$logger.info('pad_toggle_off_feature_shown');\n logFptiForPadToggle('OffShown');\n }\n\n $scope.padToggleFeature.fptiLogged = true;\n }\n }\n };\n\n var handleAllLoadedForPadToggle = _angular.$rootScope.$on('allLoaded', processAllLoadedPadToggle);\n\n $scope.$on('$destroy', handleAllLoadedForPadToggle);\n\n var stickyEligible = isBilling && !disableStickyForMerchant;\n\n // save sticky decision - to be used in the app and other components\n _squid.$config.features.DEFAULT.enableStickyFunding = stickyEligible;\n $scope.getPlanList = function (n) {\n // with purchase - always use plan\n var sources = $scope.checkoutSession.plan.sources || [];\n var planList = stickyEligible && isBillingNoPurchase ? $scope.checkoutSession.getSelectedStickyInstrument() && [$scope.checkoutSession.getSelectedStickyInstrument()] : sources.filter(function (instrument) {\n return instrument.type !== 'REWARDS';\n });\n\n $scope.showUachFeatureDiscalimer = false;\n\n // required to display direct debit agreement to AU buyers with unconfirmed bank as payment mode\n angular.forEach(planList, function (plan) {\n // display uach - direct debit agreement for AU as of July 1st, 2015\n if (plan && plan.type === 'BANK_ACCOUNT' && plan.unconfirmed_bank && (0, _squid.$feature)('directDebitAgreement', false, plan.country_code)) {\n $scope.showUachFeatureDiscalimer = true;\n }\n });\n\n if (!n) {\n return planList;\n } else {\n return planList.slice(0, n);\n }\n };\n\n $scope.showBackupPlan = function (plan) {\n return plan.backup && !(stickyEligible && isBillingNoPurchase);\n };\n\n var isRP = void 0;\n var isSubscriptionsV1 = void 0;\n\n if (isBilling) {\n isRP = $scope.checkoutCart.billing.type === 'RECURRING_PAYMENTS';\n isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n }\n\n $scope.showRpBaText = isRP || isWpsSubscription || isSubscriptionsV1;\n\n // Show expanded Variant of Text\n $scope.showExpandedText = function () {\n $scope.isExpandedAgreementText = true;\n };\n\n if (_squid.$locale.country === 'US') {\n $scope.isExpandedAgreementText = true;\n }\n\n $scope.getBAContent = function () {\n var consentCode = $scope.checkoutCart.billing.consent_code;\n var useraction = $scope.checkoutAppData.useraction() === 'commit' ? 'Pay' : 'Continue';\n var stickyFI = $scope.checkoutSession.getSelectedStickyInstrument();\n var stickyOrNoStickyText = stickyEligible && stickyFI ? 'FiSticky' : 'NoFiSticky';\n var expandedOrCollapsedText = $scope.isExpandedAgreementText === true ? 'Expanded' : 'Collapsed';\n var isIndiaDomestic = _squid.$locale.country === 'IN' && _squid.$locale.country === $scope.checkoutAppData.get('merchant.merchant_country', 'US');\n var indiaDomestic = isIndiaDomestic ? 'Domestic' : '';\n var contentKey = void 0;\n\n if (consentCode) {\n contentKey = 'enterpriseAgreement.' + consentCode + (stickyEligible && stickyFI ? '' : 'No') + 'FiStickyConsent';\n } else {\n contentKey = 'billingAgreement.';\n\n $scope.isCIB = $scope.checkoutCart.billing.type === 'CHANNEL_INITIATED_BILLING';\n\n if ($scope.isCIB) {\n contentKey += 'memberAgreementCib' + stickyOrNoStickyText + useraction + expandedOrCollapsedText;\n } else {\n contentKey += 'memberAgreement' + stickyOrNoStickyText + indiaDomestic + useraction;\n }\n }\n return contentKey;\n };\n\n $scope.getRPContent = function () {\n var contentKey = 'billingAgreement.';\n var useraction = $scope.checkoutAppData.useraction() === 'commit' ? 'Pay' : 'Continue';\n\n if (stickyEligible && $scope.checkoutSession.getSelectedStickyInstrument()) {\n contentKey += 'rpAgreementFiSticky' + useraction;\n } else {\n contentKey += 'rpAgreementNoFiSticky' + useraction;\n }\n return contentKey;\n };\n\n $scope.getStickyFiName = function () {\n var selectedStickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n\n return stickyEligible && selectedStickyInstrument && selectedStickyInstrument.name;\n };\n\n $scope.getStickyFiLast4 = function () {\n var selectedStickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n\n return stickyEligible && selectedStickyInstrument && selectedStickyInstrument.last4 && 'x-' + selectedStickyInstrument.last4;\n };\n\n // Choice Experiment\n // Preferred checkbox for single FI variants should only be shown if:\n $scope.showSinglePreferred = function () {\n return _factory2.$PreferredCheckboxFactory.isSinglePreferredCheckboxEligible({ plans: $scope.getSortedPlans() });\n };\n\n $scope.showPreferredCheckbox = function (plan) {\n return _factory2.$PreferredCheckboxFactory.showPreferredCheckbox(plan, $scope.checkoutSession.fundingOptions);\n };\n\n // Update selectedmethod to call update on checkout session later\n $scope.updateFS = function (fundingsource, index) {\n $scope.selectedmethod.planId = fundingsource.planId;\n $scope.selectedmethod.index = index;\n\n if ($scope.makeFiPreferred) {\n $scope.makeFiPreferred.selected = false;\n }\n\n $scope.checkoutSession.cardBackup.resetIfDoesNotApply(fundingsource);\n setPadStatusForMultiFi(fundingsource);\n };\n\n $scope.isBillingNoCards = function () {\n if ($scope.checkoutCart.isBillingNoPurchase()) {\n var emptyPlan = $scope.checkoutSession.futurePaymentInstruments && $scope.checkoutSession.futurePaymentInstruments.length === 0;\n\n if ($scope.checkoutAppData.flags.allow_billing_agreement_without_bufs && emptyPlan) {\n $scope.canChangeFI = false;\n $scope.showEmptyPlanHeader = true;\n _logger.$logger.info('BA_nocards_toggle_on_and_empty_plan');\n return true;\n }\n }\n return false;\n };\n\n $scope.showPPCAcquisitionRadioButton = function () {\n return $scope.installment && $scope.installment.showPPCAcquisitionRadioButton;\n };\n\n $scope.selectApplyForPPC = function () {\n return $scope.updateFS({\n planId: 'applyForPPCRadio'\n });\n };\n\n $scope.showConversionOptions = function () {\n if (_factory5.$CurrencyConversionFactory.getConversionOverlayFlag()) {\n _angular.$rootScope.$broadcast('$showConversionOverlay');\n } else {\n return _uiRouter.$state.go('checkout.review.sidebar.currencyConversion');\n }\n };\n });\n });\n }]\n };\n});\n\n_logger.$logger;\n\n_pxp.$pxpCartAmt;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_squid.formatCurrency;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$locale;\n\n_uiRouter.$state;\n\n_angular.$registerDirective;\n\n_angular.$rootScope;\n\n_angular.$q;\n\n_factory.$ShowMoreFiFactory;\n\n_factory2.$PreferredCheckboxFactory;\n\n_factory3.$RewardsCheckboxFactory;\n\n_factory4.$SmartAuthFactory;\n\n_factory5.$CurrencyConversionFactory;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-paywith/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$SmartAuthFactory', function () {\n\n var isAuthRequired = function isAuthRequired(fs) {\n return fs.constraint;\n };\n\n var getConstraintAmount = function getConstraintAmount(fs) {\n var constraint = fs.constraint;\n return (0, _squid.formatCurrency)(constraint.amount.value, constraint.amount.currency, false);\n };\n\n return {\n isAuthRequired: isAuthRequired,\n getConstraintAmount: getConstraintAmount\n };\n});\n_squid.formatCurrency;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/review-paywith\", \"../node_modules/xo-member-components/src/review-paywith/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-paywith/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
\\n
1)}\\\">\\n
\\n
\\n

\\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n \\n {{ content('paymentMethod.payAfter') }}\\n \\n \\n \\n {{ content('paymentMethod.payMerchantWithPayPal', {merchantName: merchant}) }}\\n \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n \\n

\\n \\n
    \\n
  • \\n
    \\n \\n \\n \\n \\n \\n {{ content('paymentMethod.billmelater') }}\\n \\n \\n \\n \\n \\n \\n {{ content('paymentMethod.msbOffer') }}\\n \\n \\n {{ content('paymentMethod.paypalBalance') }}\\n \\n \\n {{ content('fsMappings.PAYPAL_EXTRAS_MASTERCARD') }}\\n \\n \\n \\n {{ content('paymentMethod.pinlessDebit') }}\\n \\n \\n {{fs.name}}\\n \\n {{ content('paymentMethod.eCheck') }}\\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n \\n {{ content('paymentMethod.meft') }}\\n \\n \\n {{ content('paymentMethod.iach') }}\\n \\n \\n {{ content('paymentMethod.instantTransfer') }}\\n \\n \\n \\n \\n
    \\n {{ content('memberReview.preferred') }}\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n

    \\n {{ content('paymentMethod.msbHelpText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n

    \\n\\n \\n
    \\n

    {{ content('paymentMethod.msbToolTipOffer') }}

    \\n
    \\n

    \\n {{ content('paymentMethod.msbToolTipText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code), minimumPurchase:fs.minPurchaseAmount})\\n }}\\n

    \\n

    \\n {{ content('paymentMethod.msbToolTipText2', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)}) }}\\n

    \\n

    \\n

    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n

    \\n {{content('paymentMethod.padHelpTxt')}}\\n

    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n 1)\\\" class=\\\"methodAmount\\\">\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
  • \\n
  • \\n \\n
  • \\n
  • \\n \\n \\n
  • \\n
  • \\n \\n \\n \\n
  • \\n
  • 1)\\\" ng-click=\\\"$event.stopPropagation()\\\">\\n \\n {{checkoutSession.selectedInstallmentData.term}}X {{content('paymentMethod.of')}} {{checkoutSession.selectedInstallmentData.monthly_payment.formatted_value}}\\n {{content('paymentMethod.changeInstallmentLink') }}\\n \\n \\n
  • \\n
  • \\n \\n {{ content('paymentMethod.eCheckDescription') }}\\n \\n \\n {{ content('paymentMethod.payAfterDeliveryDetails') }}\\n \\n
    \\n {{ content('paymentMethod.padHelpTxt', {date: fs.HOPDate}) }}\\n {{ content('paymentMethod.padHelpTxtList') }}\\n
    \\n
    \\n
    \\n
  • \\n
  • \\n ‏:\\n \\n \\n \\n
  • \\n
  • \\n {{ content('memberReview.nbrPaypalCut') }}:\\n \\n \\n \\n
  • \\n
  • \\n
    \\n {{ content('memberReview.enterCSC') }}\\n \\n
    \\n
  • \\n\\n
  • \\n
    \\n {{content('currencyOptions.paypalRate')}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n
    \\n
    \\n {{content('currencyOptions.issuerFeesDisclaimer')}}\\n
    \\n \\n \\n
  • \\n
\\n
\\n \\n
\\n
  • \\n 1) && !balanceWithRewards(fs)\\\"\\n name-override=\\\"fs.sub_type === 'DELAYED_TRANSFER' && getPadFsContent(fs)\\\"\\n >\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n

    \\n {{ content('paymentMethod.msbHelpText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n

    \\n\\n \\n \\n\\n
    \\n {{ content('memberReview.preferred') }}\\n
    \\n
    \\n \\n
    \\n

    {{ content('paymentMethod.msbToolTipOffer') }}

    \\n
    \\n

    \\n {{ content('paymentMethod.msbToolTipText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code), minimumPurchase:fs.minPurchaseAmount}) }}\\n

    \\n

    \\n {{ content('paymentMethod.msbToolTipText2', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)}) }}\\n

    \\n

    \\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n

    \\n {{content('paymentMethod.padHelpTxt')}}\\n

    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
  • \\n
    \\n \\n \\n
    \\n \\n \\n \\n
  • \\n :\\n \\n \\n \\n
  • \\n
  • \\n {{ content('memberReview.nbrPaypalCut') }}:\\n \\n \\n \\n
  • \\n
  • \\n
    \\n {{ content('memberReview.enterCSC') }}\\n \\n
    \\n
  • \\n\\n
    \\n
    \\n {{content('currencyOptions.paypalRate')}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n
    \\n
    \\n {{content('currencyOptions.issuerFeesDisclaimer')}}\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    \\n \\n {{ content('paymentMethod.payAfter') }}\\n \\n \\n \\n {{ content('paymentMethod.payMerchantWithPayPal', {merchantName: merchant}) }}\\n \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n

    \\n\\n
    \\n \\n
    \\n\\n
      \\n \\n
    • \\n \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n \\n \\n
      \\n
      \\n {{ content('paymentMethod.eCheckDescription') }}\\n
      \\n\\n
      \\n \\n \\n
      \\n

      \\n \\n

      \\n \\n
      \\n

      \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

      \\n

      \\n \\n

      \\n
      \\n
      \\n
      \\n
      \\n

      \\n \\n

      \\n \\n
      \\n

      \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

      \\n

      \\n \\n

      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n \\n \\n
      \\n
    • \\n
    \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n

    \\n \\n

    \\n \\n
    \\n

    \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n

    \\n \\n
    \\n

    \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n

    \\n \\n {{ content('paymentMethod.emptyPlanHeader') }}\\n \\n

    \\n \\n\\n

    \\n \\n

    \\n\\n

    \\n \\n

    \\n\\n
    \\n \\n
    \\n\\n \\n

    \\n\\n \\n {{ locale.country === 'BR' ? content('common.changePayment') : content('common.change') }}\\n \\n \\n\\n \\n {{ content('asideHeader.manage') }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-address-components/src/address-display/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-address/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar SHIPPING_TYPE_MAPPING = {\n SHIPPING: 'shipping.shipHome',\n PICKUP: 'shipping.shipStore'\n};\n\nvar SHIPPING_TYPE = {\n SHIPPING: 'SHIPPING',\n PICKUP: 'PICKUP'\n};\n\nvar TAB_STATE = {\n SHIP: 'ship',\n PICKUP: 'pickup'\n};\n\nexports['default'] = _squid.$Component.extend('$xoReviewShippingOptionsComponent', {\n tag: 'xo-review-shipping-options',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n methods: {\n type: 'var',\n required: true\n },\n shippingChangeFeature: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n\n actions: {\n gotoShipping: function gotoShipping() {\n // action defined to either take you to view your shipping option selection or explain why you can't change this address\n if (this.models.checkoutAppData.flags.allow_change_shipping || this.shippingMethods && this.shippingMethods.length === 0) {\n _uiRouter.$state.go('checkout.review.sidebar.shipping');\n } else {\n this.cannotChangeShippingInfoMessages = true;\n }\n },\n setStateTo: function setStateTo(state) {\n this.state = state;\n\n if (state === TAB_STATE.SHIP) {\n // resetting the Pick Up methods since we're transitioning to the Shipping Tab\n this.selectedPickupMethod = undefined;\n if (this.shippingMethods && this.shippingMethods.length === 1) {\n\n this.actions.selectShippingMethod(this.shippingMethods[0]);\n return;\n }\n }\n\n if (state === TAB_STATE.PICKUP) {\n // resetting the Shipping methods since we're transitioning to the Pick Up Tab\n this.selectedShippingMethod = undefined;\n if (this.pickupMethods && this.pickupMethods.length === 1) {\n\n this.actions.selectShippingMethod(this.pickupMethods[0]);\n return;\n }\n }\n /*\n if none of these, then it means that the buyer has multiple choices in the next tab and we can't make any assumptions\n so we'll unselect them by storing undefined in our cache.\n */\n window.xprops.supplement.addPaymentDetails(this.models.checkoutAppData.get('payment_id'), undefined);\n },\n\n\n /*\n selects a Shipping Method and saves it in our incontext checkout.js caching in-script.\n */\n selectShippingMethod: function selectShippingMethod(selected) {\n var _this = this;\n\n var callCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\n if (!selected) {\n this.selectedPickupMethod = undefined;\n this.selectedShippingMethod = undefined;\n return;\n }\n\n var _ref = this.props.methods.filter(function (method) {\n // eslint-disable-line array-callback-return\n if (method && selected && method.id === selected.id) {\n return method;\n }\n }) || [],\n shippingMethod = _ref[0];\n\n switch (shippingMethod.type) {\n case SHIPPING_TYPE.SHIPPING:\n this.selectedShippingMethod = selected;\n break;\n case SHIPPING_TYPE.PICKUP:\n this.selectedPickupMethod = selected;\n break;\n default:\n break;\n }\n\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.addPaymentDetails) {\n var addedPaymentDetails = window.xprops.supplement.addPaymentDetails(this.models.checkoutAppData.get('payment_id'), {\n selected_shipping_method: shippingMethod\n });\n\n if (addedPaymentDetails) {\n addedPaymentDetails.then(function () {\n if (_this.shippingChangeFeature && _this.shippingChangeFeature.callOnShippingChange && callCallback) {\n _this.shippingChangeFeature.callOnShippingChange();\n }\n });\n }\n }\n },\n\n /*\n Helper to map shipping methods passed by the props and\n select only the ones that fit the 'type'.\n Returns typed shipping methods with shippingType and\n shippingLabel containing their localized content\n */\n mapShippingMethodsByType: function mapShippingMethodsByType() {\n var shippingMethods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var type = arguments[1];\n\n return shippingMethods.filter(function (shippingMethod) {\n return SHIPPING_TYPE[shippingMethod.type] === type;\n });\n },\n getTypeLabel: function getTypeLabel() {\n var shippingMethod = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return (0, _squid.$renderContent)(SHIPPING_TYPE_MAPPING[shippingMethod.type] || '');\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this2 = this;\n\n // Tab State between 'ship' and 'pickup'\n this.state = TAB_STATE.SHIP;\n // Dropdown active flag\n this.isPickupDropdownActive = false;\n this.isShippingDropdownActive = false;\n\n // selectedShippingMethod contains the buyer's current selection\n this.selectedShippingMethod; // eslint-disable-line no-unused-expressions\n this.selectedPickupMethod; // eslint-disable-line no-unused-expressions\n\n // map JSV4 shipping methods\n this.pickupMethods = this.actions.mapShippingMethodsByType(this.props.methods, SHIPPING_TYPE.PICKUP);\n this.shippingMethods = this.actions.mapShippingMethodsByType(this.props.methods, SHIPPING_TYPE.SHIPPING);\n\n this.isShipping = function () {\n return _this2.state === TAB_STATE.SHIP;\n };\n this.isPickup = function () {\n return _this2.state === TAB_STATE.PICKUP;\n };\n\n // We'll render dual tabs ONLY when there are TWO Shipping types sent by the merchant\n this.renderTabs = function () {\n return Boolean(_this2.pickupMethods.length && _this2.shippingMethods.length);\n };\n\n // Find the right header to render\n this.choosePageHeader = function () {\n if (_this2.renderTabs()) {\n return (0, _squid.$renderContent)('shipping.orderChoiceLabel');\n } else if (_this2.shippingMethods.length) {\n _this2.actions.setStateTo(TAB_STATE.SHIP);\n return (0, _squid.$renderContent)('shipping.ShipOnlyHeader');\n } else {\n _this2.actions.setStateTo(TAB_STATE.PICKUP);\n return (0, _squid.$renderContent)('shipping.PickupOnlyHeader');\n }\n };\n // when clicking outside the dropdown\n var self = this;\n this.$on('clickBody', function () {\n self.isPickupDropdownActive = false;\n self.isShippingDropdownActive = false;\n });\n },\n populate: function populate() {\n // If there's only one choice from the start, we'll select it\n if (this.isShipping()) {\n if (this.shippingMethods && this.shippingMethods.length === 1) {\n this.actions.selectShippingMethod(this.shippingMethods[0], false);\n }\n } else if (this.pickupMethods && this.pickupMethods.length === 1) {\n this.actions.selectShippingMethod(this.pickupMethods[0], false);\n }\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/dropdown/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoShippingOptionsDropdownComponent', {\n tag: 'xo-shipping-options-dropdown',\n template: _template2['default'],\n props: {\n defaultText: {\n type: 'var',\n required: true\n },\n type: {\n type: 'var',\n required: true\n },\n methods: {\n type: 'var',\n required: true\n },\n onSelect: {\n type: 'var',\n required: true\n }\n },\n actions: {\n getFormattedLabel: function getFormattedLabel(shippingMethod) {\n if (shippingMethod.amount && parseFloat(shippingMethod.amount.value) > 0) {\n var amountFormatted = (0, _squid.formatCurrency)(shippingMethod.amount.value, shippingMethod.amount.currency_code);\n return (0, _squid.$renderContent)('shipping.customLabelAndAmount', {\n amount: amountFormatted,\n label: shippingMethod.label\n });\n }\n\n return shippingMethod.label;\n },\n select: function select(shippingMethod) {\n this.selectedMethod = shippingMethod;\n\n if (shippingMethod) {\n this.props.onSelect(shippingMethod);\n }\n },\n clickDropdown: function clickDropdown($event) {\n if ($event) {\n $event.stopPropagation();\n }\n\n if (this.selectedMethod) {\n this.cachedSelectedMethod = (0, _angular.copy)(this.selectedMethod);\n }\n\n this.isActive = !this.isActive;\n\n if (this.isActive) {\n this.selectedMethod = undefined;\n }\n\n if (!this.isActive && this.cachedSelectedMethod) {\n this.selectedMethod = (0, _angular.copy)(this.cachedSelectedMethod);\n }\n }\n },\n lifecycle: {\n reenter: function reenter() {\n if (this.selectedMethod && this.cachedSelectedMethod) {\n this.cachedSelectedMethod = undefined;\n }\n }\n }\n});\n\n\n_angular.copy;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.formatCurrency;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/dropdown/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
      \\n
    • \\n \\n
    • \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-shipping-options/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n\\n

    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n\\n \\n
    \\n\\n \\n
    \\n {{models.checkoutSession.shipping.name}}\\n \\n \\n {{ content('common.change') }}\\n \\n \\n
    \\n\\n \\n \\n\\n
    \\n\\n \\n
    \\n\\n \\n
    \\n \\n
    \\n\\n \\n \\n\\n
    \\n\\n\\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-topup/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _fi = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/modal/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-topup/styles.less\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/review-topup/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('xoReviewTopup', {\n tag: 'xo-review-topup',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n flags: {\n // flags.sepaAgree is set to true when the Sepa Mandate checkbox is checked by user\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n var checkoutCart = _checkout.$CheckoutCartModel.instance(this.props.token);\n var auth = _auth.$AuthModel.instance();\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n walletPreferences: _fi.$WalletPreferences.instance(this.props.token).retrieve()['catch'](_angular.noop),\n tokenizedFundingCapabilitiesModel: _app.$TokenizedFundingCapabilitiesModel.instance(this.props.token).retrieve({\n params: {\n tokenizedWalletToken: checkoutCart.tokenizedWalletToken,\n country: auth.country\n }\n })['catch'](_angular.noop)\n };\n }\n },\n actions: {\n gotoTopupFunding: function gotoTopupFunding() {\n _uiRouter.$state.go('checkout.review.sidepage.topupFunding');\n },\n closeModal: function closeModal() {\n this.showSepaModal = false;\n },\n openModal: function openModal() {\n this.showSepaModal = true;\n },\n\n /**\n * This function is refered in the signupTerms.agreeSepaTermsV2 content which has a link to open the Sepa page.\n */\n openSepa: function openSepa() {\n var sepaModel = _fi.$SepaModel.instance();\n this.sepa = {};\n var that = this;\n sepaModel.action('sepaDirectMandate', {\n resultModel: this.sepa,\n data: {\n bank: {\n id: this.models.checkoutSession.sepa_mandate.bankId\n }\n },\n success: function success() {\n that.actions.openModal();\n }\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.showSepaModal = false;\n this.formatCurrency = _squid.formatCurrency;\n this.instrumentIconId = function (name) {\n return _fi.$WalletInstrumentNameMapping.instance().getInstrumentNameNormalized(name);\n };\n },\n populate: function populate() {\n var _this = this;\n\n /**\n * Identify the preferred fs from the matching instrument_id\n */\n this.identifyPreferred = function (preferred, userSelectedFundingSource, fundingSources) {\n if (!preferred || !preferred.instrument_id) {\n // Preferred does not have an instrument_id, hence pick the userSelectedFundingSource\n return userSelectedFundingSource;\n } else if (!preferred.name) {\n // Preferred has an instrument_id but does not have the full details, so map the corresponding element\n return _squid.$util.find(fundingSources, function (fs) {\n return fs.instrument_id === preferred.instrument_id;\n });\n }\n return preferred;\n };\n\n /**\n * PatchXO api call for tokenization flows\n */\n this.tokenizationPatchXO = function (instrumentId) {\n return _this.models.checkoutSession.action('setTopupFI', {\n data: {\n instrument_id: instrumentId\n }\n });\n };\n\n var _models = this.models,\n checkoutSession = _models.checkoutSession,\n walletPreferences = _models.walletPreferences,\n tokenizedFundingCapabilitiesModel = _models.tokenizedFundingCapabilitiesModel;\n var topupFundingSources = checkoutSession.topupFundingSources,\n futurePaymentInstruments = checkoutSession.futurePaymentInstruments;\n // Topup does not have userSelectedFundingSource during the initial CreateXO api call\n\n var userSelectedFundingSource = checkoutSession.userSelectedFundingSource || topupFundingSources && topupFundingSources[0] || {};\n\n // Set the FI preferred currency\n walletPreferences.currency = tokenizedFundingCapabilitiesModel.getCurrency();\n\n if (tokenizedFundingCapabilitiesModel.isTopupEnabled()) {\n // Reset the users walletPreferences.direct to an empty object in an Topup flow.\n walletPreferences.direct = {};\n // Identify the preferred topup instrument\n walletPreferences.topup.fundingSource = this.identifyPreferred(walletPreferences.topup.fundingSource, userSelectedFundingSource, topupFundingSources);\n\n // topup amount is fixed to single value\n walletPreferences.topup.amount = _squid.$config.topup.topupAmounts[0];\n walletPreferences.topup.currency = _squid.$config.topup.currency;\n } else if (tokenizedFundingCapabilitiesModel.isDirectFundingEnabled()) {\n // Reset the users walletPreferences.topup to an empty object in an Direct funding flow.\n walletPreferences.topup = {};\n // futurePaymentInstruments could have balance in it\n walletPreferences.direct.fundingSource = this.identifyPreferred(walletPreferences.direct.fundingSource, userSelectedFundingSource, futurePaymentInstruments);\n }\n\n if (walletPreferences.getPreferred().instrument_id !== userSelectedFundingSource.instrument_id && userSelectedFundingSource.instrument_id !== null) {\n /**\n * instrumet_id not in sync with XO, hence make a patchXO api call.\n * Use Case:\n * When there are 2 banks (B1, B2) in the user account, and the user had linked his PayPal account in his Google wallet, with B2 as the preferred instrument.\n * User then tries to link his PayPal account in a different Google wallet.\n * - PAPS CreateXO api always returns the 1st direct funding instrument (i.e. B1) as the userSelectedFundingSource, and the contingency would be resolved for it.\n * - But wallet preference for the user will return B2.\n * - Since we need to show B2 to the user, we will update PAPS with B2 using the PatchXO api call.\n */\n this.tokenizationPatchXO(walletPreferences.getPreferred().instrument_id);\n }\n\n if (tokenizedFundingCapabilitiesModel.isTopupEnabled()) {\n this.fundingLabel = (0, _squid.$renderContent)('review.topupFundingLabel');\n } else {\n this.fundingLabel = (0, _squid.$renderContent)('review.paymentMethod');\n }\n\n /**\n * Checks whether Sepa manadate agreement needs to be shown to the user or not\n */\n this.isSepaMandateRequired = function () {\n if (this.models.checkoutSession.sepa_mandate) {\n return true;\n }\n };\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.formatCurrency;\n\n_squid.$util;\n\n_squid.$renderContent;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutCartModel;\n\n_fi.$WalletPreferences;\n\n_fi.$WalletInstrumentNameMapping;\n\n_fi.$SepaModel;\n\n_app.$TokenizedFundingCapabilitiesModel;\n\n_auth.$AuthModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-topup/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/review-topup/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n {{content('review.topupAmountLabel')}}\\n \\n
    \\n
    \\n
    \\n {{ fundingLabel }}\\n
    \\n \\n\\n \\n \\n {{models.walletPreferences.getPreferred().name}}\\n  x-{{models.walletPreferences.getPreferred().last4}}\\n \\n \\n \\n
    {{models.walletPreferences.getPreferred().name}}
    \\n
    ••••{{models.walletPreferences.getPreferred().last4}}
    \\n
    \\n\\n \\n \\n \\n
    \\n
    \\n
    \\n {{content('review.topupFundingSourceInfo')}}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n

    {{content('directDebitAgreement.ddFullAgreementTitle')}}

    \\n

    {{content('DEMemberGuest.ddAgreementPara1')}}

    \\n
    \\n
    \\n {{content('DEMemberGuest.accountCarrier')}}\\n

    \\n {{sepa.user.name}}\\n
    {{sepa.user.address.line1}}\\n
    {{sepa.user.address.line2}}\\n
    {{sepa.user.address.city}}, {{sepa.user.address.postal_code}}\\n
    {{sepa.user.address.country}}\\n

    \\n
    \\n
    \\n

    \\n {{content('DEMemberGuest.IBAN')}}\\n

    \\n {{sepa.bank.iban_number}}\\n

    \\n {{content('DEMemberGuest.bankName')}}\\n

    \\n {{sepa.bank.bank_name}}\\n

    \\n {{content('DEMemberGuest.bic')}}\\n

    \\n {{sepa.bank.bic}}\\n
    \\n
    \\n\\n \\n\\n
    {{ content('base.payPal') }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/rewards-checkbox/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\n__webpack_require__(\"../node_modules/xo-angular-ui-utils/ui-utils.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/modal/directive.js\");\n\nvar _choice = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/factory.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/utils.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// eslint-disable-line no-unused-vars\n// for ui-validate directive\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-rewards-checkbox',\n template: _template2['default'],\n props: {\n selectedmethod: {\n type: 'var',\n required: false\n },\n plan: {\n type: 'var',\n required: false\n },\n cardart: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n choiceVariant: _choice.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token)\n };\n }\n },\n actions: {\n open: function open() {\n this.rewards.interstitialValue = this.rewards.value; // Set initial value to be the same as regular\n this.showOverlay = true;\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'prepare_update_rewards_amount',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n },\n close: function close() {\n this.showOverlay = false;\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_cancellation',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n },\n toggle: function toggle() {\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n if (this.state.selected) {\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: true,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'FUNDING_OPTION_SELECTION',\n 'to': 'process_funding_option_selection',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n } else {\n // set done to false if user disables checkbox\n this.done = false;\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: false,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n }\n },\n submit: function submit() {\n var _this = this;\n\n _logger.$logger.info('PayWithRewards_interstitial_submit');\n var loaded = this.rewards && this.rewards.rewardsPayload && this.rewards.rewardsPayload.rewardsAssociatedIds && this.rewards.value;\n\n if (!loaded) {\n // should not actually be needed\n return false;\n }\n\n if (!_factory.$RewardsCheckboxFactory.isRewardsTypeChangeable(this.rewards.rewardsPayload.issuerDetails.rewardsType)) {\n this.showOverlay = false;\n return;\n }\n\n var ctx = this.getContext();\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n var value = this.rewards.interstitialValue;\n\n _factory.$RewardsCheckboxFactory.submitRewards(this.models.checkoutSession, ctx.currency_code, rewardsAssociatedIds.planID, rewardsAssociatedIds.rewardsID, value).then(function (data) {\n var isFail = typeof data === 'boolean' && data === false;\n var iRewardsPlan = _this.models.checkoutSession.plan.sources.length > 1; // TODO: maybe a better way to de this check ?\n\n _this.state.selected = !isFail && iRewardsPlan;\n if (!isFail) {\n _this.rewards.value = _this.rewards.interstitialValue;\n\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: true,\n plan: _this.plan,\n selectedmethod: _this.selectedmethod,\n isReplan: true\n });\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_update_rewards_amount',\n 'rewards_type': ctx.issuerData.issuerName,\n 'rewards_amt': value,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n }\n _this.done = _this.done || !isFail; // TODO: check if already selected ?\n })['finally'](function () {\n // TODO: error handler\n _this.showOverlay = false;\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.state = {\n selected: false\n };\n this.done = false;\n this.rewards = this.rewards || {\n // TODO: remove after moving logic to use selectedmethod\n // as opposed to separate var\n // placeholder var until cleanup/removal\n value: '',\n interstitialValue: '',\n planid: '',\n rewardsPayload: {},\n type: ''\n };\n this.form_error = false;\n\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: false,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n },\n populate: function populate() {\n this.showOverlay = false;\n this.plan = this.plan || this.props.plan || this.models.checkoutSession.plan;\n // TODO: Consider a mapper of sorts here for the payload\n this.rewards.rewardsPayload = _factory.$RewardsCheckboxFactory.getRewardDetails(this.plan);\n this.contentkeys = _factory.$RewardsCheckboxFactory.getContentKeys(this.plan, this.rewards.rewardsPayload);\n this.rewards.type = this.contentkeys.type; // type is a predefined key // recheck later\n\n var rewardsPayload = this.rewards && this.rewards.rewardsPayload && this.rewards.rewardsPayload.rewardsPayload || {};\n\n this.rewards.value = this.rewards.interstitialValue = (0, _utils.getInitialRewardsValue)(this.models, rewardsPayload);\n this.fullOverlay = this.rewards.type === 'statement-credit';\n }\n },\n controller: ['$scope', function ($scope) {\n\n $scope.getContext = function () {\n var ctx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // TODO: first destructor and then get rid of it\n // need to refactor base payload first\n var rewardsDetails = $scope.rewards && $scope.rewards.rewardsPayload || {};\n var issuerData = rewardsDetails && rewardsDetails.issuerDetails || {};\n var constraint = rewardsDetails && rewardsDetails.rewardsPayload && rewardsDetails.rewardsPayload.rewards_constraint;\n var currency_code = $scope.models.checkoutCart.purchase && $scope.models.checkoutCart.purchase.amounts && $scope.models.checkoutCart.purchase.amounts.total.currency_code;\n return _squid.$util.extend({\n issuerData: issuerData, constraint: constraint, currency_code: currency_code,\n rewards_type: issuerData.rewardsType,\n conversion_metadata: rewardsDetails.rewardsPayload && rewardsDetails.rewardsPayload.conversion_metadata\n }, ctx);\n };\n\n $scope.showCheckbox = function () {\n var result = _factory.$RewardsCheckboxFactory.showCheckbox($scope.plan, $scope.selectedmethod, $scope.models.choiceVariant);\n\n return result;\n };\n\n $scope.valueValidator = function (data) {\n /**\n * Cases:\n * 1) less than max usable\n * 2) less than equal to cart\n * 3) should be a number\n * 4) 2 digit decimal place\n * 5) should be greater than min value\n */\n var constraint = $scope.getContext().constraint;\n\n if (!constraint || !constraint.maximum_usable) {\n // safe check to see if constraint is populated\n return true;\n }\n var rawValue = data || $scope.rewards && $scope.rewards.interstitialValue;\n var value = (0, _utils.toNumber)(rawValue);\n var maxUsable = (0, _utils.toNumber)(constraint.maximum_usable.value);\n $scope.minAllowed = (0, _utils.toNumber)(constraint.minimum_spend.value);\n var cartAmount = (0, _utils.toNumber)($scope.models.checkoutCart.purchase.amounts.total.amount, 2);\n var exists = value && maxUsable;\n var hasMax2DigitDecimal = /^\\d+(\\.\\d{1,2})?$/i;\n var errorMap = [['default', !exists], ['default', isNaN(value)], ['default', !hasMax2DigitDecimal.test(rawValue)], ['minimum', value < $scope.minAllowed], ['moreThanAvailable', value > maxUsable && value <= cartAmount], ['moreThanPurchase', value > cartAmount]];\n var errorList = errorMap.find(function (testcase) {\n return testcase[1];\n });\n\n if (errorList) {\n // TODO: Make into debug or remove once rewards is stable.\n _logger.$logger.info('PayWithRewards_client_validation_error_' + errorList[0]);\n }\n $scope.form_error = errorList && errorList[0] || false;\n return !$scope.form_error;\n };\n\n $scope.useAmountContent = function () {\n /**\n * Final interstitial value to checkbox.\n *\n * cashback : currency -> currency\n * points : currency -> reward(currency)\n * miles : currency -> reward(currency)\n * statement-credit : currency -> currency\n */\n var ctx = $scope.getContext();\n var currency_symbol = (0, _squid.getCurrencySymbol)(ctx.currency_code);\n\n // inputType === 'currency' (cashback, chase)\n var rewardAmount = (0, _utils.toCommaSeparatedString)($scope.rewards.value, $scope.getContext({\n conversion_type: 'REWARDS_TO_AMOUNT'\n }));\n var currencyAmount = '';\n\n // inputType === 'rewards' (points, miles)\n if ((0, _utils.conversionDetails)(ctx.issuerData.rewardsType).inputType === 'rewards') {\n rewardAmount = (0, _utils.convert)('AMOUNT_TO_REWARDS', $scope.rewards.value, ctx, true);\n currencyAmount = (0, _utils.toCommaSeparatedString)($scope.rewards.value, $scope.getContext({\n conversion_type: 'REWARDS_TO_AMOUNT'\n }));\n }\n\n return (0, _squid.$renderContent)('rewards.useAmount.' + ctx.issuerData.contentKey, {\n rewardAmount: rewardAmount,\n currency_symbol: currency_symbol,\n currencyAmount: currencyAmount\n });\n };\n\n $scope.formOutputContent = function () {\n var ctx = $scope.getContext();\n var rewardPoints = (0, _utils.convert)('AMOUNT_TO_REWARDS', $scope.rewards.interstitialValue, ctx, true);\n\n return (0, _squid.$renderContent)('rewards.formResultLabel.' + ctx.issuerData.contentKey, {\n rewardPoints: rewardPoints\n });\n };\n }]\n});\n\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.getCurrencySymbol;\n\n_squid.$util;\n\n_logger.$logger;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_choice.$ChoiceEligibility;\n\n_factory.$RewardsCheckboxFactory;\n\n_utils.toNumber;\n\n_utils.toCommaSeparatedString;\n\n_utils.getInitialRewardsValue;\n\n_utils.convert;\n\n_utils.conversionDetails;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/rewards-checkbox/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/utils.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n// eslint-disable-line no-unused-vars\n\n/**\n * TODO: Somehow try to move some of this constant\n * mapping logic to some facade layer.\n */\nvar REWARD_CODE_MAPPINGS = {\n 'DLR': {\n issuerName: 'discover',\n rewardsType: 'cashback',\n contentKey: 'discover.cashback'\n },\n 'MIL': {\n issuerName: 'discover',\n rewardsType: 'miles',\n contentKey: 'discover.miles'\n },\n 'TYP': {\n issuerName: 'citi',\n rewardsType: 'points',\n contentKey: 'citi'\n },\n 'LPTS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'WPTS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'USD': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'MLS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'DEFAULT': {\n // This should never really be used.\n issuerName: 'default',\n rewardsType: 'points',\n contentKey: 'default'\n }\n};\n\n/**\n * Given a rewards instrument\n * Returns all ids and keys we need to link rewards\n * to different plans and instruments\n *\n * @param {*} instrument\n * @returns\n */\nvar rewardsAssociatedIds = function rewardsAssociatedIds(instrument) {\n var rewardsPayload = instrument.rewards || {};\n var related_card = rewardsPayload && rewardsPayload.related_card;\n var cardID = related_card && related_card.id;\n var rewardsID = instrument.id;\n var planID = instrument.planId;\n\n return {\n rewardsID: rewardsID,\n cardID: cardID,\n planID: planID\n };\n};\n\n/**\n * Returns all issuer related info required to render\n * custom experience for different reward programs\n *\n * @param {*} instrument\n * @returns\n */\nvar issuerDetails = function issuerDetails(instrument) {\n var rewardsPayload = instrument.rewards || {};\n var available_incentive = rewardsPayload && rewardsPayload.available_incentive;\n var rewards_currency_code = available_incentive.rewards_code || '';\n var issuerData = available_incentive && REWARD_CODE_MAPPINGS[rewards_currency_code];\n var issuerName = issuerData.issuerName,\n rewardsType = issuerData.rewardsType,\n contentKey = issuerData.contentKey;\n\n var rewardPoints = available_incentive && available_incentive.value;\n var rewardMonetaryValue = available_incentive && available_incentive.monetary_value && available_incentive.monetary_value.value;\n\n // Convert strings to numeric values\n rewardPoints = (0, _utils.toNumber)(rewardPoints);\n rewardMonetaryValue = (0, _utils.toNumber)(rewardMonetaryValue);\n\n return {\n rewards_currency_code: rewards_currency_code,\n rewardPoints: rewardPoints,\n rewardMonetaryValue: rewardMonetaryValue,\n rewardsType: rewardsType,\n issuerName: issuerName,\n contentKey: contentKey\n };\n};\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$RewardsCheckboxFactory', function () {\n\n var rewardsCache = {};\n var models = {};\n var cancelSessionWatcher = void 0; // holds the deactivator function\n\n var checkboxSelection = {\n planId: null,\n rewardsChosenPlan: null\n };\n\n var buildCache = function buildCache() {\n /**\n * TODO:\n * Consider developing a focus around fi as opposed to plans\n * once you proved stability in rewards move it out and expand to\n * all FI not just rewards. The case we need to confirm is plan refreshes.\n * 1) If we are starting a cache then how does cache management work with the\n * different plan refresh cases?\n * 2) How can we leverage the xo-models cache infrastructure ?\n */\n var isFeatureEnabled = (0, _squid.$feature)('payWithRewards');\n if (isFeatureEnabled && !cancelSessionWatcher) {\n cancelSessionWatcher = _squid.$event.on('checkoutSessionChange', function (event) {\n // For SNT in WPS there is a plan refresh upon RYI render.\n refreshCache();\n });\n }\n\n (0, _squid.$populate)(models, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var _models$checkoutSessi = models.checkoutSession.fundingOptions.instruments,\n instruments = _models$checkoutSessi === undefined ? [] : _models$checkoutSessi;\n\n\n if (isFeatureEnabled) {\n _squid.$util.forEach(instruments, function (instrument) {\n var payload = {};\n\n if (instrument.type === 'REWARDS') {\n payload.rewardsAssociatedIds = rewardsAssociatedIds(instrument);\n payload.issuerDetails = issuerDetails(instrument);\n payload.rewardsPayload = instrument.rewards || {};\n // TODO: DO we still need to hold on to raw payload ?\n // move to store only whats needed approach\n var cardID = payload.rewardsAssociatedIds.cardID; // set focus on card as opposed to rewards/plans\n\n rewardsCache[cardID] = payload;\n _logger.$logger.info('PayWithRewards_instrument_check', {\n 'fi_id': cardID\n });\n }\n });\n }\n })['finally'](function () {\n // instrumentation here\n });\n };\n\n var refreshCache = function refreshCache() {\n // TODO: Consider this when handling\n // plan refresh use case\n rewardsCache = {};\n buildCache();\n };\n\n var destroy = function destroy() {\n if (cancelSessionWatcher) {\n cancelSessionWatcher();\n }\n };\n\n /**\n * Checks to see if the current session\n * has any rewards FI in any plan.\n *\n * @returns Boolean\n */\n var rewardsFound = function rewardsFound() {\n return Object.keys(rewardsCache).length > 0;\n };\n\n /**\n * Returns a string representing rewards fi's\n * with issuer name.\n * Sample: \"CC-T2RX5VBELRL7C_discover:CC-ZKQBGHWZQECYJ:chase\"\n *\n * @returns String\n */\n var toString = function toString() {\n var result = '';\n _squid.$util.forEach(rewardsCache, function (instrument, instrument_id) {\n var issuerData = instrument.issuerDetails;\n var issuerName = issuerData.issuerName;\n if (instrument_id && issuerName) {\n result = result ? result + ':' + instrument_id + '_' + issuerName : instrument_id + '_' + issuerName;\n }\n });\n return result;\n };\n\n /**\n * Checks if the FI has a rewards\n * instrument attached\n *\n * @param {*} fi\n * @returns\n */\n var isRewardsFi = function isRewardsFi(fi) {\n // const isCard = fi.type === 'CARD';\n var result = Boolean(rewardsCache[fi.instrument_id]);\n\n return result;\n };\n\n /**\n * Checks if the primary FI associated\n * with the plan has rewards\n *\n * @param {*} plan\n * @returns\n */\n var isRewardsPlan = function isRewardsPlan(plan) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var isBalanceSelected = (0, _utils.isPayPalBalanceSelected)(plan);\n var isRewards = isRewardsFi(fi);\n // balance and rewards are incompatible\n // if balance then do not use rewards\n // Should we check for balance as part of isRewards check\n // or separate?\n\n return isRewards && !isBalanceSelected;\n };\n\n /**\n * Returns if the rewards has a changeable amount, based on the provided type\n */\n var isRewardsTypeChangeable = function isRewardsTypeChangeable(type) {\n return type !== 'statement-credit';\n };\n\n var getRewardDetails = function getRewardDetails(plan) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var result = isRewardsFi(fi) && rewardsCache[fi.instrument_id];\n\n return result;\n };\n\n var getRewardsPlanFromFi = function getRewardsPlanFromFi(fi) {\n var fiDetails = rewardsCache[fi.instrument_id] || {};\n var planID = fiDetails.rewardsAssociatedIds && fiDetails.rewardsAssociatedIds.planID;\n\n return (0, _utils.getPlanFromId)(planID);\n };\n\n var ifRewardsThenUpdatePlan = function ifRewardsThenUpdatePlan(currentPlanId, selectedmethod, checkoutSession) {\n\n // Given an Id\n // get plan object.\n // check if plan object contains rewards\n\n // ------------------------------------\n // -----> handle these before the plan comes into this function\n // check if plan is selected (2 cases)\n // 1st check if plan is user selected\n // --- We need this to give precedence to checkbox which wont trigger replan\n // 2nd check if plan is session selected\n // -- if we have a replan or initial plan already selecting rewards then honor it.\n // ------------------------------------\n var isRewardsChosen = selectedmethod ? selectedmethod.rewardsChosenPlan : // multiple FI selection\n checkboxSelection.rewardsChosenPlan; // single FI selection\n var selectedPlan = (0, _utils.getPlanFromId)(checkoutSession, selectedmethod ? selectedmethod.planId : currentPlanId);\n var rewardsEligible = isRewardsPlan(selectedPlan);\n\n if (!rewardsEligible) {\n return currentPlanId;\n }\n\n var result = (0, _utils.matchPlanFromConstraints)({\n checkoutSession: checkoutSession,\n instrumentId: (0, _utils.getInstrumentID)(selectedPlan),\n // For now, we never want balance with this method.\n balance: false,\n rewards: isRewardsChosen\n });\n\n return result && (0, _utils.getPlanID)(result);\n };\n\n var showCheckbox = function showCheckbox(plan, fiSelectionContext, choiceVariant) {\n var isChoiceVariant = Boolean(choiceVariant === '6');\n var isMultiFi = Boolean(plan && plan.primaryFs); // TODO: fails for selectFI use case\n var usingPayPalBalance = Boolean(plan && plan.secondaryFIs);\n var uiSelectedPlanId = plan && (0, _utils.getPlanID)(plan);\n var clickSelectedPlanId = fiSelectionContext && fiSelectionContext.planId;\n // Differentiating between uiSelection vs clickSelection to avoid the case\n // when this function gets triggered due to digest while the user has clicked\n // on a different fi. Do not show checkbox for this case. Would cause flickering.\n var isRewards = isRewardsPlan(plan);\n var disregardClickSelection = isChoiceVariant || !isMultiFi;\n var isSelected = uiSelectedPlanId && uiSelectedPlanId === clickSelectedPlanId || disregardClickSelection;\n\n var result = isSelected && isRewards && !usingPayPalBalance;\n return result;\n };\n\n /**\n * When session has balance and\n * fi has rewards then hide amount.\n * TODO: consider removing this after PAPS fix\n *\n * @param {*} fi\n * @returns\n */\n var hideAmount = function hideAmount(fi) {\n if (!fi) {\n return false;\n }\n var isRewards = isRewardsFi(fi);\n var _models$checkoutSessi2 = models.checkoutSession,\n checkoutSession = _models$checkoutSessi2 === undefined ? {} : _models$checkoutSessi2;\n var _checkoutSession$fund = checkoutSession.fundingOptions.instruments,\n instruments = _checkoutSession$fund === undefined ? [] : _checkoutSession$fund;\n\n var sessionHasBalance = instruments.some(function (instrument) {\n return instrument.type === 'BALANCE';\n });\n\n return isRewards && sessionHasBalance;\n };\n\n var setCheckboxSelectionForPlan = function setCheckboxSelectionForPlan(_ref) {\n var selected = _ref.selected,\n plan = _ref.plan,\n selectedmethod = _ref.selectedmethod,\n isReplan = _ref.isReplan;\n\n if (selectedmethod) {\n if (selected) {\n (0, _utils.setSelectedPlan)(plan, selectedmethod, isReplan);\n } else {\n (0, _utils.clearSelectedPlan)(plan, selectedmethod);\n }\n } else {\n var planId = (0, _utils.getPlanID)(plan);\n\n checkboxSelection.planId = planId;\n checkboxSelection.rewardsChosenPlan = selected ? planId : null;\n }\n };\n\n var getContentKeys = function getContentKeys(plan, rewardsPayload) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var last4Digits = fi && fi.lastDigits;\n var rewardsDetails = rewardsPayload || getRewardDetails(plan);\n var issuerData = rewardsDetails && rewardsDetails.issuerDetails || {};\n var currency_code = fi && fi.amount && fi.amount.currency_code;\n var rewardPoints = (0, _utils.toCommaSeparatedString)(issuerData.rewardPoints, {\n conversion_metadata: rewardsDetails.conversion_metadata,\n conversion_type: 'AMOUNT_TO_REWARDS',\n rewards_type: issuerData.rewardsType,\n currency_code: currency_code\n });\n var rewardMonetaryValue = (0, _utils.toCommaSeparatedString)(issuerData.rewardMonetaryValue, {\n conversion_metadata: rewardsDetails.conversion_metadata,\n conversion_type: 'REWARDS_TO_AMOUNT',\n rewards_type: issuerData.rewardsType,\n currency_code: currency_code\n });\n var currency_symbol = (0, _squid.getCurrencySymbol)(currency_code);\n var getString = function getString(key) {\n return (0, _squid.$renderContent)(key + '.' + issuerData.contentKey, {\n issuerName: issuerData.issuerName,\n last4Digits: last4Digits,\n rewardPoints: rewardPoints,\n rewardAmount: rewardMonetaryValue,\n currency_symbol: currency_symbol\n });\n };\n var map = {\n header: getString('rewards.header'),\n rewardsAvailble: getString('rewards.rewardsAvailble'),\n subText: getString('rewards.subText'),\n policy: getString('rewards.policy'),\n secondLineText: getString('rewards.secondLineText'),\n chargeAmount: getString('rewards.chargeAmount'),\n changeAmount: getString('rewards.changeAmount'),\n formInputLabel: getString('rewards.formInputLabel'),\n formResultLabel: getString('rewards.formResultLabel'),\n // TODO: use dynamic amount\n // useAmount:$renderContent(`rewards.useAmount.${issuerData.contentKey}`, {\n // rewardAmount: '919191',\n // currencyUnit: '$',\n // currencyAmount: '9999'\n // }),\n enterValidAmount: (0, _squid.$renderContent)('rewards.enterValidAmount.default'),\n type: issuerData.rewardsType,\n overlayButton: (0, _squid.$renderContent)(isRewardsTypeChangeable(issuerData.rewardsType) ? 'common.save' : 'common.OK'),\n issuerName: issuerData.issuerName,\n value: {\n rewardPoints: rewardPoints, // Amount in rewards\n rewardAmount: rewardMonetaryValue // Amount in currency\n }\n };\n\n return map;\n };\n\n /**\n * Do a select call and an update call in sequence.\n * Consider batching this later\n *\n * @param {*} checkoutSession\n * @param {*} currency_code\n * @param {*} planID\n * @param {*} rewardsID\n * @param {*} value\n * @returns\n */\n var submitRewards = function submitRewards(checkoutSession, currency_code, planID, rewardsID, value) {\n var payload = {\n type: 'REWARDS',\n value: value,\n currency: currency_code,\n id: rewardsID\n };\n\n var errorHandler = function errorHandler(name, err, action, type) {\n // TODO: Get rid of this or discuss better handling with product\n // Do we really need 2 handlers? once we have decided the kind of errors\n // that get thrown then pick one type of handler contingency or error\n\n checkoutSession.message = {\n type: 'error',\n msgKeys: ['paymentMethod.cycoSsotWarning']\n };\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_planning_response',\n 'int_error_code': err,\n 'int_error_description': action + '-' + type,\n 'error_source': 'paymentapiplatformserv'\n });\n return _squid.$promise.reject(err);\n };\n\n return checkoutSession.fundingOptions.action('select', {\n resultModel: checkoutSession,\n data: {\n planId: planID\n },\n success: function success(result) {\n checkoutSession.populate(result);\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return errorHandler(name, err, 'select', 'contingency');\n }\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'select', 'error');\n }\n }).then(function () {\n return checkoutSession.fundingOptions.action('patch', {\n resultModel: checkoutSession,\n data: payload,\n success: function success(result) {\n checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return errorHandler(name, err, 'patch', 'contingency');\n }\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'patch', 'error');\n }\n\n });\n });\n };\n\n return {\n buildCache: buildCache,\n refreshCache: refreshCache,\n destroy: destroy,\n rewardsFound: rewardsFound,\n toString: toString,\n isRewardsPlan: isRewardsPlan,\n isRewardsFi: isRewardsFi,\n isRewardsTypeChangeable: isRewardsTypeChangeable,\n getRewardsPlanFromFi: getRewardsPlanFromFi,\n getRewardDetails: getRewardDetails,\n getContentKeys: getContentKeys,\n showCheckbox: showCheckbox,\n hideAmount: hideAmount,\n setCheckboxSelectionForPlan: setCheckboxSelectionForPlan,\n ifRewardsThenUpdatePlan: ifRewardsThenUpdatePlan,\n submitRewards: submitRewards\n };\n});\n\n_squid.$util;\n\n_squid.$renderContent;\n\n_squid.$populate;\n\n_squid.$feature;\n\n_squid.$promise;\n\n_squid.$event;\n\n_squid.getCurrencySymbol;\n\n_angular.$rootScope;\n\n_checkout.$CheckoutSessionModel;\n\n_utils.getPlanID;\n\n_utils.getInstrumentID;\n\n_utils.getPrimaryFI;\n\n_utils.getPlanFromId;\n\n_utils.toNumber;\n\n_utils.toCommaSeparatedString;\n\n_utils.isPayPalBalanceSelected;\n\n_utils.setSelectedPlan;\n\n_utils.clearSelectedPlan;\n\n_utils.matchPlanFromConstraints;\n\n_logger.$logger;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/rewards-checkbox\", \"../node_modules/xo-member-components/src/rewards-checkbox/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/rewards-checkbox/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/rewards-checkbox/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n \\n \\n
    \\n {{contentkeys.chargeAmount}}\\n
    \\n
    \\n
    \\n \\n
    \\n \\n

    \\n \\n

    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n\\n \\n \\n \\n \\n \\n =\\n \\n \\n
    \\n
    \\n
    \\n
    {{contentkeys.subText}}
    \\n
    {{content('rewards.enterValidAmount.default')}}
    \\n
    {{content('rewards.enterValidAmount.minimum', { value: minAllowed })}}
    \\n
    {{content('rewards.enterValidAmount.moreThanAvailable')}}
    \\n
    {{content('rewards.enterValidAmount.moreThanPurchase')}}
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/rewards-checkbox/utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.matchPlanFromConstraints = exports.getSelectedPlan = exports.isPayPalBalanceSelected = exports.getInitialRewardsValue = exports.getPlanFromId = exports.getPrimaryFI = exports.clearSelectedPlan = exports.setSelectedPlan = exports.isPayNow = exports.convert = exports.convertValue = exports.toCommaSeparatedString = exports.toNumber = exports.sanitizeNumber = exports.conversionDetails = exports.getInstrumentID = exports.getPlanID = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n// eslint-disable-line no-unused-vars\n\n/**\n * fundingOptions has plan.planId\n * checkoutSession has plan.id\n *\n * @param {*} plan\n */\nvar getPlanID = exports.getPlanID = function getPlanID(plan) {\n if (!plan) {\n return plan;\n }\n return plan.planId || plan.id;\n};\n\n/**\n * getInstrumentId\n * @param {Object} plan Any type of plan\n * @retursn {String} Instrument ID of primary fs\n */\nvar getInstrumentID = exports.getInstrumentID = function getInstrumentID(plan) {\n return plan.sources ? plan.sources[plan.sources.length - 1].instrument_id : plan.primaryFs.id;\n};\n\n/**\n * Returns an object containing input\n * and output details about the conversion\n *\n * @param {*} rewards_type\n * @param {*} conversion_type\n * @returns {}\n */\nvar conversionDetails = exports.conversionDetails = function conversionDetails(rewards_type, conversion_type) {\n var result = {};\n\n if (rewards_type) {\n var rewardsInCurrency = rewards_type === 'cashback'\n // TODO: Consider replacing rewardsInCurrency with monetary flag from PSS.\n // As of now not receiving it from PAPS.\n ;\n\n result.inputType = rewardsInCurrency ? 'currency' : 'rewards';\n if (conversion_type) {\n var useCurrency = conversion_type === 'REWARDS_TO_AMOUNT' || rewardsInCurrency && conversion_type === 'AMOUNT_TO_REWARDS';\n\n result.outputType = useCurrency ? 'currency' : 'rewards';\n result.skipConversion = result.inputType === result.outputType;\n }\n }\n return result;\n};\n\n/**\n * sanatizes undefined, NAN numbers\n * does rounding and limits\n *\n * @param {*} value\n * @param {*} limit\n * @param {*} rounding\n * @returns\n */\nvar sanitizeNumber = exports.sanitizeNumber = function sanitizeNumber(value, limit, rounding) {\n var isString = value && typeof value === 'string';\n var hasComma = isString && value.indexOf(',') >= 0;\n\n if (!value || hasComma) {\n /** \n * Avoid accidental double sanitization\n * TODO: figure out how to prevent double \n * sanitization in the first place\n */\n return !value ? '0' : value;\n }\n\n var num = Number(value);\n num = isNaN(num) || !num ? 0 : num;\n num = rounding === 1 ? Math.round(num) : num;\n num = limit ? num.toFixed(limit) : num;\n num = isString ? num : Number(num);\n /** \n * if you get a string return a string\n * required for 1.20 or decimal/currency use case\n * since toFixed return a string\n */\n\n return num;\n};\n\n/**\n * Given a string return a number\n *\n * @param {*} str\n * @param {number} [limit=2]\n * @param {number} [rounding=0]\n * @returns\n */\nvar toNumber = exports.toNumber = function toNumber(value) {\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var rounding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var num = typeof value === 'string' ? parseFloat(value) : value;\n\n return sanitizeNumber(num, limit, rounding);\n};\n\n/**\n * extract the required decimal precision from rewards\n *\n * @param {*} conversion_metadata\n * @param {*} key\n * @returns\n */\nvar getPrecision = function getPrecision(conversion_metadata, key) {\n var decimal_precision = {};\n\n _squid.$util.forEach(conversion_metadata.decimal_precisions, function (ele) {\n decimal_precision[ele.conversion_type] = toNumber(ele.length, 0);\n });\n return decimal_precision[key] || 0;\n};\n\n/**\n * extract the required rounding details from rewards\n *\n * @param {*} conversion_metadata\n * @param {*} key\n * @returns\n */\nvar getRounding = function getRounding(conversion_metadata, key) {\n var rounding_modes = {};\n var mapper = {\n 'UNNECESSARY': 0,\n 'HALF_UP': 1\n // More may be added over time\n };\n _squid.$util.forEach(conversion_metadata.rounding_modes, function (ele) {\n rounding_modes[ele.conversion_type] = ele.value;\n });\n var value = rounding_modes[key] || 'UNNECESSARY';\n\n return mapper[value];\n};\n\nvar toCommaSeparatedString = exports.toCommaSeparatedString = function toCommaSeparatedString(value) {\n var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!value) {\n return '';\n }\n var currency_code = ctx.currency_code,\n _ctx$conversion_metad = ctx.conversion_metadata,\n conversion_metadata = _ctx$conversion_metad === undefined ? {} : _ctx$conversion_metad,\n conversion_type = ctx.conversion_type,\n rewards_type = ctx.rewards_type;\n\n var locale_code = _squid.$locale.lang + '-' + _squid.$locale.country;\n var useCurrency = conversionDetails(rewards_type, conversion_type).outputType === 'currency';\n var precision = getPrecision(conversion_metadata, conversion_type);\n var rounding = getRounding(conversion_metadata, conversion_type);\n var num = toNumber(value, '', rounding);\n var result = '';\n\n if (useCurrency) {\n result = (0, _squid.formatCurrency)(value, currency_code, false, 'AmountOnlyStyle');\n result = sanitizeNumber(result, 2, 0);\n } else {\n result = num.toLocaleString(locale_code, {\n useGrouping: true, // may only need for certain countries.\n minimumFractionDigits: precision\n });\n result = sanitizeNumber(result);\n }\n\n return result;\n};\n\n/**\n * Conversion math logic.\n * use precision and rounding from the rewards payload\n * to preform conversion to & from rewards\n *\n * @param {*} amount\n * @param {*} conversion_type\n * @param {*} conversionData\n * @returns\n */\nvar convertValue = exports.convertValue = function convertValue(amount, conversion_type, conversionData) {\n var result = '';\n\n if (!amount || !conversion_type || !conversionData) {\n return result;\n }\n var precision = getPrecision(conversionData, conversion_type);\n var rounding = getRounding(conversionData, conversion_type);\n // Use 4 decimal places or more for factor multiplication.\n // We need this to maintain decimal precision during calculation.\n var factor = toNumber(conversionData.conversion_factor, 4);\n\n // convert from rewards to points and vice-versa\n result = conversion_type === 'AMOUNT_TO_REWARDS' ? amount * 1.0 / factor : amount * factor;\n // Choose final precision based on downstream requirements\n var res = toNumber(result, precision, rounding);\n\n return res;\n};\n\n/**\n * Conversion business logic.\n * It decides when to convert and when not to and\n * finally returns the appropriate formated value.\n *\n * @param {*} conversion_type\n * @param {*} amount\n * @param {*} [ctx={}]\n * @returns\n */\nvar convert = exports.convert = function convert(conversion_type, amount) {\n var ctx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!amount || !conversion_type) {\n return '';\n }\n var _ctx$conversion_metad2 = ctx.conversion_metadata,\n conversion_metadata = _ctx$conversion_metad2 === undefined ? {} : _ctx$conversion_metad2,\n _ctx$issuerData = ctx.issuerData,\n issuerData = _ctx$issuerData === undefined ? {} : _ctx$issuerData,\n currency_code = ctx.currency_code;\n\n var skip = !force && conversionDetails(issuerData.rewardsType, conversion_type).skipConversion;\n var converted = skip ? toNumber(amount) : convertValue(amount, conversion_type, conversion_metadata);\n\n converted = toCommaSeparatedString(converted, {\n rewards_type: issuerData.rewardsType,\n conversion_metadata: conversion_metadata,\n conversion_type: conversion_type,\n currency_code: currency_code\n });\n return converted;\n};\n\n/**\n * Checks for paynow vs continue usecase\n * TODO: expand and move logic to $CheckoutAppDataModel\n *\n * @param {*} checkoutAppData\n * @returns Boolean\n */\nvar isPayNow = exports.isPayNow = function isPayNow(checkoutAppData) {\n var isWPS = checkoutAppData.is_wps_flow();\n var userAction = checkoutAppData.useraction();\n\n return !!(!isWPS && userAction === 'commit');\n};\n\n/**\n * UI related operations to be performed on select.\n *\n * @param {*} plan\n * @param {*} selectedmethod\n * @param {*} isReplan\n */\nvar setSelectedPlan = exports.setSelectedPlan = function setSelectedPlan(plan, selectedmethod, isReplan) {\n // use applyAsync in order to wait for all plans to be updated and etc.\n // Wait for the radio buttons to have all the latest plan ids in its scope\n if (selectedmethod) {\n _angular.$rootScope.$applyAsync(function () {\n selectedmethod.planId = getPlanID(plan); // force UI selected method to use non-reward plan.\n selectedmethod.index = isReplan ? 0 : selectedmethod.index; // reset index on replan\n selectedmethod.rewardsChosenPlan = getPlanID(plan);\n });\n }\n};\n\n/**\n * UI related operations to be performed on de-select.\n *\n * @param {*} plan\n * @param {*} selectedmethod\n */\nvar clearSelectedPlan = exports.clearSelectedPlan = function clearSelectedPlan(plan, selectedmethod) {\n var hasPlanSelected = selectedmethod && selectedmethod.rewardsChosenPlan === getPlanID(plan);\n\n if (hasPlanSelected) {\n delete selectedmethod.rewardsChosenPlan;\n }\n};\n\n/**\n * Returns the primaryFI for multi-fi use case\n * else returns the first FI for single FI use case\n *\n * @param {*} plan\n * @returns {*} fiPayload\n */\nvar getPrimaryFI = exports.getPrimaryFI = function getPrimaryFI(plan) {\n // TODO: return '' instead of {}\n if (!plan || !getPlanID(plan)) {\n return {};\n }\n var firstPlanFi = plan && plan.sources && plan.sources[plan.sources.length - 1];\n var fi = plan && plan.primaryFs || firstPlanFi || {};\n\n fi.instrument_id = fi.instrument_id || fi.id;\n return fi;\n};\n\n/**\n * Given a planId it returns a complete plan object\n *\n * @param {*} checkoutSession\n * @param {*} planId\n * @returns\n */\nvar getPlanFromId = exports.getPlanFromId = function getPlanFromId(checkoutSession, planId) {\n var matchingPlans = _squid.$util.filter(checkoutSession.fundingOptions.plans, function (plan) {\n if (getPlanID(plan) === planId) {\n return plan;\n }\n });\n\n return matchingPlans && matchingPlans.length > 0 ? matchingPlans[0] : '';\n};\n\n/**\n * Returns the initial value to use considering\n * cart amount and rewards availability\n *\n * @param {*} models\n * @param {*} rewardsPayload\n * @returns\n */\nvar getInitialRewardsValue = exports.getInitialRewardsValue = function getInitialRewardsValue(models, rewardsPayload) {\n // TODO: Consider relying only on PAPS amount for initial value.\n // It would help with page refresh use case.\n var constraint = rewardsPayload.rewards_constraint;\n var grossTotal = toNumber(models.checkoutCart.purchase.amounts.total.amount, 2);\n if (!constraint.maximum_usable) {\n return grossTotal;\n }\n var maximumUsuableRewards = toNumber(constraint.maximum_usable.value);\n var initialValue = grossTotal < maximumUsuableRewards ? grossTotal : maximumUsuableRewards;\n\n return initialValue;\n};\n\n/**\n * Checks if the plan has PayPal balance in it\n *\n * @param {*} plan\n */\nvar isPayPalBalanceSelected = exports.isPayPalBalanceSelected = function isPayPalBalanceSelected() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // TODO: should default initialize to {} or error handle ?\n var sources = plan.sources || plan.secondaryFIs || [];\n\n return sources.some(function (source) {\n return source.type === 'BALANCE';\n });\n};\n\n/**\n * Return the current selected plan id.\n * Prioritize clickSelectedPlanID\n * over sessionSelectedPlanID\n *\n * @param {*} selectedmethod\n * @param {*} checkoutSession\n * @returns {*} planID\n */\nvar getSelectedPlan = exports.getSelectedPlan = function getSelectedPlan(selectedmethod, checkoutSession) {\n var clickSelectedPlanID = selectedmethod && selectedmethod.planId;\n var sessionSelectedPlan = checkoutSession && checkoutSession.plan || {};\n var sessionSelectedPlanID = getPlanID(sessionSelectedPlan);\n var selectionID = selectedmethod ? clickSelectedPlanID // Radio checkbox selection\n : sessionSelectedPlanID; // selectFI use-case, session selection\n\n return selectionID;\n};\n\n/**\n * Given some contraints and a checkoutSession, return the plan that matches exactly\n * TODO: HANDLE BALANCE PROPERLY\n * @param {String} instrumentId\n * @param {String} balance The currency code of the balance to be used\n * @param {Boolean} rewards Whether to use the rewards plan or not\n * @returns {String} planId of the plan to select\n */\nvar matchPlanFromConstraints = exports.matchPlanFromConstraints = function matchPlanFromConstraints(_ref) {\n var instrumentId = _ref.instrumentId,\n balance = _ref.balance,\n rewards = _ref.rewards,\n checkoutSession = _ref.checkoutSession;\n\n return checkoutSession.get('fundingOptions.plans', []).find(function (plan) {\n var idMatches = plan.primaryFs.id === instrumentId;\n var planHasBalance = plan.secondaryFIs && plan.secondaryFIs.length;\n var balanceMatches = balance && planHasBalance || !balance && !planHasBalance;\n var rewardsMatches = rewards && plan.rewards || !rewards && !plan.rewards;\n\n if (!idMatches || !balanceMatches || !rewardsMatches) {\n return false;\n }\n\n return plan;\n });\n};\n\n_angular.$rootScope;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.formatCurrency;\n\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/show-more-fi/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoShowMoreFiLink = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/link/directive.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/show-more-fi/factory.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-member-components/src/show-more-fi/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoShowMoreFiLink = exports.$xoShowMoreFiLink = _squid.$Component.extend('$xoShowMoreFiLink', {\n tag: 'xo-show-more-fi-link',\n template: _template2['default'],\n actions: {\n showMore: function showMore() {\n _factory.$ShowMoreFiFactory.set({ isShowMoreBtnClicked: true });\n _logger.$logger.info('checkout_fpti', {\n from: '3fi',\n to: 'process_3fi'\n });\n }\n },\n lifecycle: {\n enter: function enter() {}\n }\n});\n\nangular.value(\"$xoShowMoreFiLink\", $xoShowMoreFiLink);\n_squid.$Component;\n\n_logger.$logger;\n\n_factory.$ShowMoreFiFactory;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/show-more-fi/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _ui = __webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/ui.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$ShowMoreFiFactory', function () {\n var state = {\n isTooManyFi: false,\n isShowMoreBtnClicked: false,\n eligible: false\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n // max number of FI to be shown by default\n // if user has <= 4 -- all 4 FI will be shown\n // if user has > 4 -- 3 FI will be shown\n var MAX_FI_NUMBER = 4;\n\n // condition to determine if there are too many FI's\n // to hide them and display \"Show More\" link\n var isTooManyFi = function isTooManyFi() {\n var planList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n return planList.length > MAX_FI_NUMBER;\n };\n\n // get pxp result\n var getPxp = function getPxp() {\n return (0, _squid.$pxp)('xo_hermes_3fi', 'xo_hermes_3fi_treatment', undefined, false, true).then(function (pxpRes) {\n return !!pxpRes;\n });\n };\n\n // when logout -> reset flag\n _angular.$rootScope.$on('logout', function (event, args) {\n state.isShowMoreBtnClicked = false;\n });\n\n // returns true if:\n // 1) there are too many FI's\n // 2) \"Show more\" link was not clicked yet\n var isFiNeverExpanded = function isFiNeverExpanded() {\n return !state.isShowMoreBtnClicked && state.isTooManyFi;\n };\n\n var init = function init(planList) {\n if (!state.eligible) {\n return;\n }\n state.isTooManyFi = isTooManyFi(planList);\n if (isFiNeverExpanded()) {\n _logger.$logger.info('checkout_fpti', {\n from: '3fi',\n to: 'prepare_3fi'\n });\n }\n };\n\n // eligible if:\n // 1. multi fi\n // 2. 3fi pxp returns treatment\n var decideEligibility = function decideEligibility(_ref) {\n var plans = _ref.plans;\n\n if (!isTooManyFi(plans)) {\n return;\n }\n\n return _index.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n var multipleFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.multipleFi || [];\n\n if (multipleFiVariants.indexOf(variant) !== -1) {\n return getPxp().then(function (pxpResult) {\n _logger.$logger.info('3fi_eligibility', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n });\n }\n });\n };\n\n // used to show / hide individual fi entry of the plan list\n // index - selected radio box index starting from 0\n var shouldHideFiEntry = function shouldHideFiEntry(index) {\n return isFiNeverExpanded() && index + 1 > MAX_FI_NUMBER - 1;\n };\n\n // event handler for accessibility\n // if current index is 0 and user press UP - expand FI's\n // if current index is one which goes before the last visible one\n var selectFiOnKeyDown = function selectFiOnKeyDown(event, index) {\n if (index === 0 && event.keyCode === _ui.KEYS.UP || index + 1 >= MAX_FI_NUMBER - 2 && event.keyCode === _ui.KEYS.DOWN) {\n state.isShowMoreBtnClicked = true;\n }\n };\n\n return {\n get: get,\n set: set,\n init: init,\n isFiNeverExpanded: isFiNeverExpanded,\n decideEligibility: decideEligibility,\n shouldHideFiEntry: shouldHideFiEntry,\n selectFiOnKeyDown: selectFiOnKeyDown\n };\n});\n\n_angular.$rootScope;\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$config;\n\n_logger.$logger;\n\n_ui.KEYS;\n\n_index.$ChoiceEligibility;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-member-components/src/show-more-fi\", \"../node_modules/xo-member-components/src/show-more-fi/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/show-more-fi/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-member-components/src/vaulting/utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.authorize = exports.checkVaultingEligibility = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\n/**\n * checks if the current user is eligible\n * for vaulting based on PXP\n *\n * @returns {Promise} Represents current vaulting treatment\n */\nvar checkPxp = function checkPxp() {\n return (0, _squid.$elmo)('xo_hermes_vaulting', { 'ctx.country': _squid.$locale.country }, 'Trmt_xo_hermes_vaulting_1').then(function (result) {\n return result && result.treatment_name;\n });\n};\n\n/**\n * Checks weather a specific set of use cases are enabled/disabled.\n *\n * @returns {Object} Represents list of eligibility flags\n */\n// eslint-disable-line no-unused-vars\nvar getEligibility = function getEligibility() {\n var token = _angular.$rootScope.token;\n var models = {};\n return (0, _squid.$populate)(models, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance(token),\n checkoutSession: _index.$CheckoutSessionModel.instance(token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n var hasBackupFunding = models.checkoutSession.cardBackup && models.checkoutSession.cardBackup.getPlan() && models.checkoutSession.cardBackup.getPlan().planId;\n\n return {\n billing: models.checkoutCart.isBilling(),\n invoice: models.checkoutAppData.get('flags.is_invoice_flow'),\n upop: models.checkoutSession.unconfirmed_upop,\n walletTokenization: models.checkoutCart.isWalletTokenization(),\n threeDS: models.checkoutSession.resolve_3ds,\n sepa: models.checkoutSession.get('sepa_mandate.bankId'),\n negativeBalance: models.checkoutSession.negBals,\n poma: models.auth.password_less,\n isXoonUpopRedirect: _squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon',\n miniBrowser: _angular.$rootScope.miniBrowser,\n secondButtonCredit: models.checkoutAppData.get('is_second_button_txn'),\n hasBackupFunding: hasBackupFunding\n };\n });\n};\n\n/**\n * Checks to see whether the current vaulting experience is eligible.\n * return the current experience based flow and pxp\n *\n * @returns {Promise} Represents current vaulting experience\n */\nvar checkVaultingEligibility = exports.checkVaultingEligibility = function checkVaultingEligibility() {\n var isCorp = _squid.$meta.corp;\n var isVaultFlow = _squid.$util.param('vault');\n if (isCorp && isVaultFlow === 'true') {\n _logger.$logger.info('xo_hermes_vaulting_eligibility_forced', {\n isCorp: isCorp, isVaultFlow: isVaultFlow\n });\n return _squid.$promise.resolve(isVaultFlow);\n }\n return getEligibility().then(function (eligibility) {\n // Define an explicit check since it makes the eligibility more easier to reference\n var decision = !eligibility.billing && !eligibility.invoice && !eligibility.upop && !eligibility.walletTokenization && !eligibility.threeDS && !eligibility.sepa && !eligibility.negativeBalance && !eligibility.poma && !eligibility.isXoonUpopRedirect && !eligibility.miniBrowser && !eligibility.secondButtonCredit && !eligibility.hasBackupFunding;\n _logger.$logger.info('xo_hermes_vaulting_eligibility', {\n eligibility: eligibility,\n decision: decision\n });\n return decision ? checkPxp() : _squid.$promise.resolve('');\n });\n};\n\n/**\n * Given an error use cases handles logging\n * and functionality\n *\n * @param {*} name of error\n * @param {*} err Error object\n * @param {*} type 'contingency' or 'error'\n */\nvar errorHandler = function errorHandler(name, err, type) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_' + type, { name: name });\n throw err;\n};\n\n/**\n * Performs an authorize on checkout and returns a response\n *\n * @param {*} checkoutSession\n * @param {*} checkoutAppData\n * @returns {String} Representing next state\n */\nvar authorize = exports.authorize = function authorize(checkoutSession, checkoutAppData) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_attempt');\n _angular.$rootScope.$emit('loadingMessage', 'Vaulting through checkout.');\n var cardBackup = checkoutSession.cardBackup && checkoutSession.cardBackup.getPlan();\n return checkoutSession.action('authorize', {\n data: {\n alternateFundingOptionId: cardBackup && cardBackup.planId\n },\n success: function success(result) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_success');\n if (!window.xchild && checkoutAppData.doec_on_approve()) {\n return 'checkout.pay';\n }\n return 'checkout.end';\n },\n contingencies: function contingencies(name, err) {\n return errorHandler(name, err, 'contingency');\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'error');\n }\n });\n};\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$locale;\n\n_squid.$util;\n\n_squid.$elmo;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$meta;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\n\n_auth.$AuthModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/app/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$PXPBlacklist = exports.$TokenizedWalletMsbOfferModel = exports.$TokenizedWalletPinModel = exports.$TokenizedFundingCapabilitiesModel = exports.$TokenizedWalletInfoModel = exports.$TokenizedWalletEligibilityModel = exports.$MessengerIntegrationDataModel = exports.$AppDataModel = exports.$LocaleConfigModel = exports.$PXPModel = undefined;\n\nvar _brandNames, _msbDisclaimerLinks;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $PXPModel = exports.$PXPModel = _squid.$Model.extend('$PXPModel', {\n api: new _squid.$Api({\n uri: '/api/pxp/:id'\n })\n});\n\nvar $LocaleConfigModel = exports.$LocaleConfigModel = _squid.$Model.extend('$LocaleConfigModel', {\n api: new _squid.$Api({\n uri: '/api/localeConfig'\n })\n});\n\nvar $AppDataModel = exports.$AppDataModel = _squid.$Model.extend('$AppDataModel', {\n api: new _squid.$Api({\n uri: '/api/app'\n }),\n\n isMobile: function isMobile() {\n return this.platform === 'mobile';\n }\n});\n\nvar $MessengerIntegrationDataModel = exports.$MessengerIntegrationDataModel = _squid.$Model.extend('$MessengerIntegrationDataModel', {\n api: new _squid.$Api({\n uri: '/api/messenger'\n })\n});\n\nvar $TokenizedWalletEligibilityModel = exports.$TokenizedWalletEligibilityModel = _squid.$Model.extend('$TokenizedWalletEligibilityModel', {\n api: new _squid.$Api({\n uri: '/api/eligibility/tokenizedWallet/:id'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n isEligible: function isEligible() {\n return this.eligible;\n }\n});\n\nvar subjectTypes = {\n SAMSUNG_PAY: 'Samsung',\n ANDROID_PAY: 'google'\n};\n\nvar brandNames = (_brandNames = {}, _brandNames[subjectTypes.SAMSUNG_PAY] = 'Samsung Pay', _brandNames[subjectTypes.ANDROID_PAY] = 'Google Pay', _brandNames);\n\n/**\n * disclaimer links used on the *pay review page\n */\nvar disclaimerLinks = function disclaimerLinks(country) {\n var _ref;\n\n return _ref = {}, _ref[subjectTypes.SAMSUNG_PAY] = 'https://www.paypal.com/' + country + '/webapps/mpp/ua/ppsamsungpay-tnc', _ref[subjectTypes.ANDROID_PAY] = 'https://www.paypal.com/' + country + '/webapps/mpp/ua/ppandroidpay-tnc', _ref;\n};\n\n// disclaimer links used on Msb offer popup\nvar msbDisclaimerLinks = (_msbDisclaimerLinks = {}, _msbDisclaimerLinks[subjectTypes.SAMSUNG_PAY] = 'https://www.paypal.com/us/smarthelp/article/samsung-pay-terms-and-conditions-faq3863', _msbDisclaimerLinks[subjectTypes.ANDROID_PAY] = 'https://www.paypal.com/us/smarthelp/article/google-pay-terms-and-conditions-faq3862', _msbDisclaimerLinks);\n\n/**\n * this model populates data from tokenized wallet mayfly object\n * (see xo-hermes-app/apis/tokenizedWalletInfo) which contains:\n *\n * - wallet_id (used for both Samsung Pay and Android Pay)\n * - external_device_id (used for Samsung Pay only)\n * - subject (used for both Samsung Pay and Android Pay)\n *\n * Note: model is being populated in xo-preload on the server (see config.json)\n */\n\nvar $TokenizedWalletInfoModel = exports.$TokenizedWalletInfoModel = _squid.$Model.extend('$TokenizedWalletInfoModel', {\n\n api: new _squid.$Api({\n uri: '/api/info/tokenizedWallet/:id'\n }),\n\n isAndroidPay: function isAndroidPay() {\n return this.subject === subjectTypes.ANDROID_PAY;\n },\n\n isSamsungPay: function isSamsungPay() {\n return this.subject === subjectTypes.SAMSUNG_PAY;\n },\n\n getSubject: function getSubject() {\n return this.subject || subjectTypes.ANDROID_PAY;\n },\n\n // until we use mayfly for android pay - fallback to Android Pay\n brandName: function brandName() {\n return brandNames[this.subject] || brandNames[subjectTypes.ANDROID_PAY];\n },\n\n // until we use mayfly for android pay - fallback to Android Pay\n getDisclaimerLink: function getDisclaimerLink() {\n var country = _squid.$locale.country.toLowerCase();\n\n return disclaimerLinks(country)[this.subject] || disclaimerLinks(country)[subjectTypes.ANDROID_PAY];\n },\n\n // get Msb terms and conditions link based on the subject\n getMsbDisclaimerLink: function getMsbDisclaimerLink() {\n return msbDisclaimerLinks[this.subject] || msbDisclaimerLinks[subjectTypes.ANDROID_PAY];\n }\n});\n\nvar $TokenizedFundingCapabilitiesModel = exports.$TokenizedFundingCapabilitiesModel = _squid.$Model.extend('$TokenizedFundingCapabilitiesModel', {\n api: new _squid.$Api({\n uri: '/api/capabilities/tokenizedWallet/:id'\n }),\n invalidateOnLogout: true,\n\n isDirectFundingEnabled: function isDirectFundingEnabled() {\n return this.directFundingEnabled;\n },\n\n isTopupEnabled: function isTopupEnabled() {\n return this.topupFundingEnabled;\n },\n getProductName: function getProductName() {\n return this.name;\n },\n\n getCurrency: function getCurrency() {\n return this.issuingCurrency;\n },\n\n getContingencies: function getContingencies() {\n return this.contingencies;\n },\n\n getTopupAmountChoices: function getTopupAmountChoices() {\n return this.topUpAmountChoices;\n }\n});\n\nvar $TokenizedWalletPinModel = exports.$TokenizedWalletPinModel = _squid.$Model.extend('$TokenizedWalletPinModel', {\n api: new _squid.$Api({\n uri: '/api/pin/tokenizedWallet/:id'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n getPinOrigin: function getPinOrigin() {\n return this.pinOrigin;\n },\n getSuggestedPin: function getSuggestedPin() {\n return this.suggestedPin;\n },\n getSuggestedKey: function getSuggestedKey() {\n return this.suggestedKey;\n },\n getPinId: function getPinId() {\n return this.pinId;\n },\n isPinIdPresent: function isPinIdPresent() {\n return !!this.pinId;\n },\n isSetupEligible: function isSetupEligible() {\n return this.pinOrigin === 'UNSET' || this.pinOrigin === 'SYSTEM';\n }\n});\n\nvar $TokenizedWalletMsbOfferModel = exports.$TokenizedWalletMsbOfferModel = _squid.$Model.extend('$TokenizedWalletMsbOfferModel', {\n api: new _squid.$Api({\n uri: '/api/msb/tokenizedWallet/:id'\n }),\n invalidateOnLogout: true\n});\n\nvar $PXPBlacklist = exports.$PXPBlacklist = {\n isMerchantBlacklisted: function isMerchantBlacklisted(merchantId) {\n return _squid.$config.pxpBlacklist && _squid.$config.pxpBlacklist.merchant && _squid.$config.pxpBlacklist.merchant.indexOf(merchantId) !== -1;\n }\n};\n\nangular.value(\"$PXPModel\", $PXPModel);\nangular.value(\"$LocaleConfigModel\", $LocaleConfigModel);\nangular.value(\"$AppDataModel\", $AppDataModel);\nangular.value(\"$MessengerIntegrationDataModel\", $MessengerIntegrationDataModel);\nangular.value(\"$TokenizedWalletEligibilityModel\", $TokenizedWalletEligibilityModel);\nangular.value(\"$TokenizedWalletInfoModel\", $TokenizedWalletInfoModel);\nangular.value(\"$TokenizedFundingCapabilitiesModel\", $TokenizedFundingCapabilitiesModel);\nangular.value(\"$TokenizedWalletPinModel\", $TokenizedWalletPinModel);\nangular.value(\"$TokenizedWalletMsbOfferModel\", $TokenizedWalletMsbOfferModel);\nangular.value(\"$PXPBlacklist\", $PXPBlacklist);\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/auth/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ULoginModel = exports.$AuthModel = exports.$AuthApi = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar $AuthApi = exports.$AuthApi = _squid.$Model.extend('$AuthApi', {\n api: new _squid.$Api({\n uri: '/api/auth',\n postAttempts: 3\n })\n});\n\nvar $AuthModel = exports.$AuthModel = _squid.$Model.extend('$AuthModel', {\n api: new _squid.$Api({\n uri: '/api/auth',\n postAttempts: 3\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n loggedIn: function loggedIn() {\n return this.logged_in;\n },\n\n visitorId: function visitorId() {\n return this.visitor_id;\n },\n\n accessToken: function accessToken() {\n return this.access_token;\n },\n\n accessTokenPresent: function accessTokenPresent() {\n return this.access_token_present;\n },\n\n refreshToken: function refreshToken() {\n return this.refresh_token;\n },\n\n rememberedOT: function rememberedOT() {\n return this.remembered && this.remembered_device_token;\n },\n\n isSessionTimeout: function isSessionTimeout() {\n return this.meta && this.meta.invalidated;\n },\n\n clearCookies: function clearCookies() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.action('clearCookies', { data: data });\n },\n\n showNotYou: function showNotYou() {\n var isAuthApiCall = this.is_auth_api_call;\n var isConsumerApp = _squid.$util.param('source') === 'consumerApp';\n var redirectToHermesOn3DSDecline = _squid.$util.param('redirectToHermesOn3DSDecline');\n var isUlReturnLoggedIn = _squid.$util.param('ulReturn') && this.auth_state === 'LOGGEDIN';\n\n // for Tokenized Venice integraion (Google Pay Venice / Samsung Pay Venice) - `not you` link should be hidden.\n // `TokenizedWalletInfoModel` is always populated in xo-preload (even for error cases - it will be just empty)\n // so we don't need to retrieve the model\n var tokenizedWalletInfo = _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token);\n var isNotVeniceTokenizedIntegration = function isNotVeniceTokenizedIntegration() {\n return !tokenizedWalletInfo || tokenizedWalletInfo && !tokenizedWalletInfo.is_venice_integration;\n };\n\n // disallow_login_switch is used for Google Pay - acount linking to hide \"not you\" button (see xo-hercules/auth/outputMapper)\n return isAuthApiCall && !isConsumerApp && !redirectToHermesOn3DSDecline && !isUlReturnLoggedIn && !this.disallow_login_switch && isNotVeniceTokenizedIntegration();\n },\n\n logout: function logout() {\n _squid.$Model.bulkInvalidate('invalidateOnLogout');\n _angular.$rootScope.$broadcast('logout');\n return this.action('logout');\n },\n\n /**\n * Perform a logout and then redirect.\n * @param reason - used to log reason why a redirect was trigged.\n */\n logoutAndRedirect: function logoutAndRedirect() {\n var _this = this;\n\n var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'logout';\n\n return this.logout().then(function () {\n return _this.redirectToLogin(reason);\n });\n },\n\n // redirect to UL as landing through xo-landing-router\n // so first it hits hermes app and then redirects to UL\n redirectToLogin: function redirectToLogin(reason, ctx) {\n if (!reason) {\n return false;\n }\n // current query parameters\n var qs = _squid.$util.queryString() || '';\n var params = { 'ulClientRedirect': reason };\n\n params = _squid.$util.extend(params, ctx); // update params with context that may be sent\n\n // insert \"ulClientRedirect\" param and remove \"ul\", \"ulReturn\"\n var updatedQs = _squid.$util.queryStringSplice(qs, params, ['ul', 'ulReturn']);\n\n // base url should not be hardcoded to \"/webapps/hermes\" due to other use cases such as\n // 1. * Pay (Android Pay / Samsung Pay) -- uses /agreements/setup to exchange BA token to EC token\n var ulAsLandingUrl = _squid.$util.paypalURL('' + window.location.pathname + updatedQs);\n\n _logger.$logger.info('redirecting_to_ulAsLanding');\n return _squid.$util.redirect(ulAsLandingUrl);\n }\n\n});\n\nvar $ULoginModel = exports.$ULoginModel = _squid.$Model.extend('$ULoginModel', {\n api: new _squid.$Api({\n uri: '/api/auth/ulogin',\n postAttempts: 1,\n cache: false\n })\n});\n\nangular.value(\"$AuthApi\", $AuthApi);\nangular.value(\"$AuthModel\", $AuthModel);\nangular.value(\"$ULoginModel\", $ULoginModel);\n_angular.$rootScope;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_logger.$logger;\n\n_app.$TokenizedWalletInfoModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/bml/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$BMLApplicationModel = exports.$BMLModel = exports.$ApplyForBMLModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $ApplyForBMLModel = exports.$ApplyForBMLModel = _squid.$Model.extend('$ApplyForBMLModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/cart',\n cache: true\n }),\n\n personalInformation: {\n day: '',\n month: '',\n year: '',\n natId: '',\n phone: {\n telephone: '',\n phoneType: ''\n }\n },\n\n billingAdrress: {\n phoneType: '',\n phoneNumber: ''\n }\n});\n\nvar $BMLModel = exports.$BMLModel = _squid.$Model.extend('$BMLModel', {\n api: new _squid.$Api({\n uri: '/api/bml',\n cache: false\n }),\n\n applicationStatus: function applicationStatus() {\n return this.application_status;\n },\n\n applicationId: function applicationId() {\n return this.application_id;\n }\n});\n\nvar $BMLApplicationModel = exports.$BMLApplicationModel = _squid.$Model.extend('$BMLApplicationModel', {\n api: new _squid.$Api({\n uri: '/api/bml/:application_id',\n cache: false\n })\n});\n\nangular.value(\"$ApplyForBMLModel\", $ApplyForBMLModel);\nangular.value(\"$BMLModel\", $BMLModel);\nangular.value(\"$BMLApplicationModel\", $BMLApplicationModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/checkout/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$CheckoutSessionModel = exports.$CardBackupModel = exports.$CheckoutPlanModel = exports.$CheckoutShippingAddressesModel = exports.$CreditOptionsModel = exports.$CheckoutPayeeModel = exports.$ShippingAddressModel = exports.$CheckoutShippingAddressModel = exports.$FlowEligibilityModel = exports.$InstallmentOptionsModel = exports.serializeInstallmentsOptionsData = exports.$FundingOptionsModel = exports.$FundingSourceModel = exports.$CheckoutAppDataModel = exports.$CheckoutCartModel = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _processorDecline = __webpack_require__(\"../node_modules/xo-models/src/processorDecline/index.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-models/src/checkout/lib/utils.js\");\n\nvar $CheckoutCartModel = exports.$CheckoutCartModel = _squid.$Model.extend('$CheckoutCartModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/cart',\n cache: true\n }),\n\n isPurchase: function isPurchase() {\n return Boolean(this.purchase);\n },\n\n getCartCurrencyCode: function getCartCurrencyCode() {\n return _squid.$util.getProperty(this, 'purchase.amounts.total.currency_code');\n },\n\n // NOTE returns undefined if this is not a purchase or there is some other error\n getPurchaseAmount: function getPurchaseAmount() {\n if (!this.isPurchase()) {\n return;\n }\n var purchaseAmount = _squid.$util.getProperty(this, 'purchase.amounts.total.amount');\n var purchaseAmountFloat = parseFloat(purchaseAmount);\n\n return purchaseAmountFloat || undefined;\n },\n\n isBilling: function isBilling() {\n return Boolean(this.billing);\n },\n\n isSubscriptionsV1: function isSubscriptionsV1() {\n return this.isBilling() && this.billing.type === 'SUBSCRIPTIONS_V1';\n },\n\n getBaToken: function getBaToken() {\n return this.isBilling() && this.billing.ba_token;\n },\n\n isBillingPurchase: function isBillingPurchase() {\n return this.isPurchase() && this.isBilling();\n },\n\n isBillingNoPurchase: function isBillingNoPurchase() {\n return this.isBilling() && !this.isPurchase();\n },\n\n getBillingDescription: function getBillingDescription() {\n return this.billing && this.billing.description;\n },\n\n isMultiSellerPurchase: function isMultiSellerPurchase() {\n return this.purchaseUnits && this.purchaseUnits.length > 1;\n },\n\n isShippingMethodStorePickUp: function isShippingMethodStorePickUp() {\n return this.isPurchase() && (this.purchase.shipping_method === '29' || this.purchase.shipping_method === '21');\n },\n\n isWalletTokenization: function isWalletTokenization() {\n return this.isBilling() && this.billing.intent === 'TOKENIZED_WALLET';\n },\n\n getExternalCallbackOptions: function getExternalCallbackOptions() {\n return this.purchaseUnits && this.purchaseUnits[0] && this.purchaseUnits[0].external_callback_options;\n }\n});\n\nvar $CheckoutAppDataModel = exports.$CheckoutAppDataModel = _squid.$Model.extend('$CheckoutAppDataModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/appData'\n }),\n\n useraction: function useraction() {\n // user_action from session takes precedence over CGI param.\n var incontext_integration = window.xchild && window.xchild.props.commit ? 'commit' : false;\n var rest_integration = this.flags && this.flags.user_action === 'PAY' ? 'commit' : false;\n\n return rest_integration || incontext_integration || _squid.$util.param('useraction');\n },\n\n is_wps_flow: function is_wps_flow() {\n return this.flags && this.flags.is_wps_flow;\n },\n\n is_snt_supported: function is_snt_supported() {\n return this.flags && this.flags.is_snt_supported;\n },\n\n doec_on_approve: function doec_on_approve() {\n return this.flags && this.flags.doec_on_approve;\n },\n\n is_wps_subscription_flow: function is_wps_subscription_flow() {\n return this.flags && this.flags.is_wps_subscription_flow;\n },\n\n /*\n * Returns a string or undefined value\n * nonEmptyReturnValue - if true, then always return non empty string\n * isSentenceBeginning - if true, and merchant brand_name and merchant_name is undefined\n * then returns 'The merchant'. If false, returns 'the merchant'\n * NOTE: We should not return merchant_email for any reason as it is a PII\n */\n getMerchantDisplayName: function getMerchantDisplayName() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n nonEmptyReturnValue = _ref.nonEmptyReturnValue,\n isSentenceBeginning = _ref.isSentenceBeginning,\n getContent = _ref.getContent;\n\n var merchantName = this.merchant.brand_name || this.merchant.merchant_name;\n\n if (nonEmptyReturnValue) {\n var contentKey = isSentenceBeginning ? 'common.Themerchant' : 'common.themerchant';\n var merchantAltName = getContent ? getContent(contentKey) : _squid.$locale.content.get(contentKey);\n\n return merchantName || merchantAltName;\n }\n\n return merchantName;\n },\n\n isInvoiceFlow: function isInvoiceFlow() {\n return Boolean(this.flags && this.flags.is_invoice_flow);\n },\n\n\n // Returns true if flow should be treated as a second button (PP Credit) transaction\n isSecondButton: function isSecondButton() {\n return this.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n }\n});\n\nvar $FundingSourceModel = exports.$FundingSourceModel = _squid.$Model.extend('$FundingSourceModel', {\n\n formatLast4: function formatLast4() {\n var last4;\n\n if (this.last4) {\n last4 = this.last4;\n\n if (!this.parent.isAuthRequired) {\n last4 = 'x-' + last4;\n }\n }\n\n return last4;\n }\n});\n\nvar $FundingOptionsModel = exports.$FundingOptionsModel = _squid.$Model.extend('$FundingOptionsModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/fundingOptions',\n postAttempts: 2\n }),\n\n eachPlan: function eachPlan(method, context) {\n angular.forEach(this.plans, method, this);\n },\n\n hasECheck: function hasECheck() {\n var _instruments = this.instruments,\n instruments = _instruments === undefined ? [] : _instruments;\n\n\n return instruments.some(function (instr) {\n return instr.type === 'ECHECK' || instr.subtype === 'ECHECK';\n });\n },\n\n hasCredit: function hasCredit() {\n var _instruments2 = this.instruments,\n instruments = _instruments2 === undefined ? [] : _instruments2;\n\n\n return instruments.some(function (instrument) {\n return instrument.type === 'CREDIT';\n });\n },\n\n getBankPlanIdByInstrumentId: function getBankPlanIdByInstrumentId(id, subType) {\n var fundingInstrument = _squid.$util.find(this.plans, function (plan) {\n return plan.primaryFs && plan.primaryFs.type === 'BANK' && plan.primaryFs.id === id && plan.primaryFs.subtype === subType;\n });\n\n return fundingInstrument && fundingInstrument.planId;\n },\n\n // get IACH and PAD banks combined by plan.primaryFs.id\n // order matters, so if IACH comes first then PAD is filtered and vise versa\n getPadAndIachCombinedPlans: function getPadAndIachCombinedPlans() {\n var _this = this;\n\n var plans = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.plans;\n\n if (!plans) {\n return [];\n }\n var planIds = {};\n\n plans.forEach(function (plan) {\n var planId = plan.planId,\n primaryFs = plan.primaryFs;\n\n\n if (_this.isIACH(plan) && !planIds[planId]) {\n planIds[primaryFs.padPlanId] = true;\n }\n if (_this.isPAD(plan) && !planIds[planId]) {\n planIds[primaryFs.iachPlanId] = true;\n }\n });\n\n return plans.filter(function (plan) {\n return !planIds[plan.planId];\n });\n },\n\n // get plan by planId\n getPlanByPlanId: function getPlanByPlanId(id) {\n var plan = _squid.$util.find(this.plans, function (p) {\n return p.primaryFs && p.planId === id;\n });\n\n return plan;\n },\n\n getPlanSubType: function getPlanSubType() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _plan$primaryFs = plan.primaryFs;\n _plan$primaryFs = _plan$primaryFs === undefined ? {} : _plan$primaryFs;\n var subtype = _plan$primaryFs.subtype;\n\n\n return subtype;\n },\n\n\n // is plan PAD bank (bank is charged after some delay)\n isPAD: function isPAD(plan) {\n return this.getPlanSubType(plan) === 'PAD';\n },\n\n\n // is plan IACH bank (instant transfer)\n isIACH: function isIACH(plan) {\n return this.getPlanSubType(plan) === 'IACH';\n },\n\n\n // is plan MEFT bank\n isMEFT: function isMEFT(plan) {\n return this.getPlanSubType(plan) === 'MEFT';\n },\n\n\n // is plan IACH bank (instant transfer)\n isIACHWithPad: function isIACHWithPad(plan) {\n return this.isIACH(plan) && plan.primaryFs.padPlanId;\n },\n\n // get PAD hop date (when bank will be charged) based on selected plan and PAD toggle state\n getPadPlanHopDate: function getPadPlanHopDate(plan) {\n if (this.isIACH(plan)) {\n var padPlan = this.getPlanByPlanId(plan.primaryFs.padPlanId);\n\n if (padPlan) {\n return padPlan.primaryFs.hop_date;\n }\n } else {\n return plan.primaryFs.hop_date;\n }\n },\n\n // get PAD or IACH plan id based on selected plan and PAD toggle state\n getPadOrIachPlanIdBySelectedPlan: function getPadOrIachPlanIdBySelectedPlan(_ref2) {\n var plan = _ref2.plan,\n isPadToggleSelected = _ref2.isPadToggleSelected;\n\n if (!plan || !plan.primaryFs) {\n return;\n }\n\n var _plan$primaryFs2 = plan.primaryFs,\n padPlanId = _plan$primaryFs2.padPlanId,\n iachPlanId = _plan$primaryFs2.iachPlanId,\n planId = plan.planId;\n\n\n if (isPadToggleSelected) {\n return this.isPAD(plan) ? planId : padPlanId;\n } else {\n return this.isIACH(plan) ? planId : iachPlanId;\n }\n },\n\n onPopulate: function onPopulate() {\n var self = this;\n\n angular.forEach(this.plans, function (plan) {\n if (plan.primaryFs && plan.primaryFs.type === 'BANK' && (plan.primaryFs.subtype === 'IACH' || plan.primaryFs.subtype === 'PAD')) {\n Object.defineProperty(plan.primaryFs, plan.primaryFs.subtype === 'IACH' ? 'padPlanId' : 'iachPlanId', {\n enumerable: true,\n configurable: false,\n writeable: false,\n value: self.getBankPlanIdByInstrumentId(plan.primaryFs.id, plan.primaryFs.subtype === 'IACH' ? 'PAD' : 'IACH')\n });\n }\n });\n },\n\n getBankPadPlanIdByInstrumentId: function getBankPadPlanIdByInstrumentId(fsId, fsSubtype) {\n var bankPadPlan = _squid.$util.find(this.plans, function () {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _plan$primaryFs3 = plan.primaryFs;\n _plan$primaryFs3 = _plan$primaryFs3 === undefined ? {} : _plan$primaryFs3;\n var id = _plan$primaryFs3.id,\n type = _plan$primaryFs3.type,\n subtype = _plan$primaryFs3.subtype;\n\n\n return id === fsId && type === 'BANK' && subtype === fsSubtype;\n });\n\n if (!bankPadPlan) {\n return;\n }\n\n var _bankPadPlan$primaryF = bankPadPlan.primaryFs;\n _bankPadPlan$primaryF = _bankPadPlan$primaryF === undefined ? {} : _bankPadPlan$primaryF;\n var subtype = _bankPadPlan$primaryF.subtype,\n padPlanId = _bankPadPlan$primaryF.padPlanId,\n iachPlanId = _bankPadPlan$primaryF.iachPlanId;\n\n\n return subtype === 'IACH' ? padPlanId : iachPlanId;\n },\n\n\n isPadToggleApplicable: function isPadToggleApplicable() {\n var padToggleApplicable = false;\n\n this.eachPlan(function (plan) {\n if (!padToggleApplicable && plan.primaryFs && plan.primaryFs.type === 'BANK') {\n if (plan.primaryFs.subtype === 'IACH' && plan.primaryFs.hasOwnProperty('padPlanId')) {\n padToggleApplicable = plan.primaryFs.padPlanId ? true : false;\n } else if (plan.primaryFs.subtype === 'PAD' && plan.primaryFs.hasOwnProperty('iachPlanId')) {\n padToggleApplicable = plan.primaryFs.iachPlanId ? true : false;\n }\n }\n }, this);\n\n return padToggleApplicable;\n },\n\n isPadToggleApplicableForFS: function isPadToggleApplicableForFS(planId) {\n var padToggleApplicable = false;\n var selectedPlan = _squid.$util.find(this.plans, function (plan) {\n return plan.planId === planId;\n });\n\n if (selectedPlan && selectedPlan.primaryFs && selectedPlan.primaryFs.type === 'BANK' && (selectedPlan.primaryFs.subtype === 'IACH' && selectedPlan.primaryFs.padPlanId || selectedPlan.primaryFs.subtype === 'PAD' && selectedPlan.primaryFs.iachPlanId)) {\n padToggleApplicable = true;\n }\n\n return padToggleApplicable;\n },\n\n getPreferred: function getPreferred() {\n var _this2 = this;\n\n return _squid.$util.find(this.plans, function (plan) {\n return _this2.isPreferred(plan);\n });\n },\n\n isPreferred: function isPreferred() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this.isPAD(plan)) {\n // if the current plan is PAD -> find corresponding IACH plan to see if it's preferred\n var iachPlan = this.getPlanByPlanId(plan.primaryFs.iachPlanId) || {};\n var _iachPlan$primaryFs = iachPlan.primaryFs;\n _iachPlan$primaryFs = _iachPlan$primaryFs === undefined ? {} : _iachPlan$primaryFs;\n\n var _iachPlan$primaryFs$i = _iachPlan$primaryFs.isPreferred,\n _isPreferred = _iachPlan$primaryFs$i === undefined ? false : _iachPlan$primaryFs$i;\n\n return _isPreferred;\n }\n\n var _plan$primaryFs4 = plan.primaryFs;\n _plan$primaryFs4 = _plan$primaryFs4 === undefined ? {} : _plan$primaryFs4;\n var _plan$primaryFs4$isPr = _plan$primaryFs4.isPreferred,\n isPreferred = _plan$primaryFs4$isPr === undefined ? false : _plan$primaryFs4$isPr;\n\n\n return isPreferred;\n },\n\n // get Merchant specific balance by plan id\n getMsbByPlanId: function getMsbByPlanId(planId) {\n var plan = this.getPlanByPlanId(planId);\n\n return plan && plan.incentive;\n },\n\n /**\n * Avoid plans that are not meant for display on the UI.\n * - Hide Rewards\n */\n getDisplayPlans: function getDisplayPlans() {\n // return type should be undefined in no plans\n // for billing agreement use case\n return this.plans ? this.plans.filter(function (plan) {\n return !plan.rewards;\n }) : this.plans;\n },\n /**\n * Avoid instruments that are not meant for display on the UI.\n * - Hide Rewards\n */\n getDisplayInstruments: function getDisplayInstruments() {\n var _instruments3 = this.instruments,\n instruments = _instruments3 === undefined ? [] : _instruments3;\n\n\n return instruments.filter(function (instrument) {\n return instrument.type !== 'REWARDS';\n });\n }\n});\n\n// Map the data needed for the installmentsOptions endpoint\nvar serializeInstallmentsOptionsData = exports.serializeInstallmentsOptionsData = function serializeInstallmentsOptionsData(_ref3) {\n var merchant_country = _ref3.checkoutAppData.merchant.merchant_country,\n checkoutCart = _ref3.checkoutCart,\n country = _ref3.country,\n id = _ref3.payee.merchant.id,\n isMemberCredit = _ref3.isMemberCredit,\n cc = _ref3.cc;\n\n var payload = {\n checkoutAppData: {\n merchant: {\n merchant_country: merchant_country\n }\n },\n checkoutCart: {},\n country: country,\n payee: {\n merchant: {\n id: id\n }\n },\n isMemberCredit: isMemberCredit,\n cc: cc\n };\n\n if (checkoutCart.purchase && checkoutCart.purchase.amounts) {\n var _checkoutCart$purchas = checkoutCart.purchase.amounts.total,\n amount = _checkoutCart$purchas.amount,\n currency_code = _checkoutCart$purchas.currency_code;\n\n\n payload.checkoutCart.purchase = {\n amounts: {\n total: {\n amount: amount,\n currency_code: currency_code\n }\n }\n };\n }\n\n return payload;\n};\n\nvar $InstallmentOptionsModel = exports.$InstallmentOptionsModel = _squid.$Model.extend('$InstallmentOptionsModel', {\n\n api: new _squid.$Api({\n uri: '/api/checkout/:id/installmentOptions/',\n postAttempts: 2\n }),\n\n save: function save(options) {\n options.data = serializeInstallmentsOptionsData(options.data);\n\n return this._super.save.call(this, options);\n }\n});\n\nvar $FlowEligibilityModel = exports.$FlowEligibilityModel = _squid.$Model.extend('$FlowEligibilityModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/flowEligibility'\n })\n});\n\nvar $CheckoutShippingAddressModel = exports.$CheckoutShippingAddressModel = _squid.$Model.extend('$CheckoutShippingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:parent.id/shipping/:id'\n })\n});\n\nvar $ShippingAddressModel = exports.$ShippingAddressModel = _squid.$Model.extend('$ShippingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/shipping/add'\n }),\n\n serialize: function serialize() {\n return {\n first_name: this.first_name,\n last_name: this.last_name,\n recipient_name: this.recipient_name,\n line1: this.line1,\n line2: this.line2,\n city: this.city,\n state: this.state,\n postal_code: this.postal_code,\n country: this.country\n };\n }\n});\n\nvar $CheckoutPayeeModel = exports.$CheckoutPayeeModel = _squid.$Model.extend('$CheckoutPayeeModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/payee'\n }),\n\n getId: function getId() {\n return this.merchant && this.merchant.id;\n },\n\n isGambling: function isGambling() {\n return this.merchant && this.merchant.isGambling;\n },\n\n isOnBaNoStickyList: function isOnBaNoStickyList() {\n var merchantId = this.getId();\n\n return merchantId && _squid.$config.disableMerchantForStickyBA && _squid.$config.disableMerchantForStickyBA.indexOf(merchantId) > -1;\n }\n});\n\nvar creditOptionsModel = {\n largeEligibleAmount: {\n US: 99,\n GB: 150\n }\n};\n\n// keeping sacEligibleAmount available for backwards compat, largeEligibleAmount preferred\ncreditOptionsModel.sacEligibleAmount = creditOptionsModel.largeEligibleAmount;\n\nvar $CreditOptionsModel = exports.$CreditOptionsModel = creditOptionsModel;\n\nvar $CheckoutShippingAddressesModel = exports.$CheckoutShippingAddressesModel = _squid.$Model.extend('$CheckoutShippingAddressesModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/shipping'\n }),\n\n onPopulate: function onPopulate() {\n this.addresses = this.children($CheckoutShippingAddressModel, this.addresses);\n },\n\n getPreferredShippingAddress: function getPreferredShippingAddress() {\n var preferredAddress = {};\n\n if (this.addresses) {\n var i = void 0;\n var address = void 0;\n\n for (i = 0; i < this.addresses.length; i++) {\n address = this.addresses[i];\n\n if (address && address.preferred_address) {\n preferredAddress = {\n 'line1': address.line1,\n 'line2': address.line2,\n 'city': address.city,\n 'state': address.state,\n 'postal_code': address.postal_code,\n 'country_code': address.country_code\n };\n\n break;\n }\n }\n }\n return preferredAddress;\n },\n\n getPrimaryShippingAddress: function getPrimaryShippingAddress() {\n var primaryAddress = {};\n\n if (this.addresses) {\n var i = void 0;\n var address = void 0;\n\n for (i = 0; i < this.addresses.length; i++) {\n address = this.addresses[i];\n\n if (address && address.primary_address) {\n primaryAddress = {\n 'line1': address.line1,\n 'line2': address.line2,\n 'city': address.city,\n 'state': address.state,\n 'postal_code': address.postal_code,\n 'country_code': address.country_code\n };\n\n break;\n }\n }\n }\n return primaryAddress;\n }\n});\n\nvar $CheckoutPlanModel = exports.$CheckoutPlanModel = _squid.$Model.extend('$CheckoutPlanModel', {\n\n onPopulate: function onPopulate() {\n this.sources = this.children($FundingSourceModel, this.sources);\n },\n\n eachSource: function eachSource(method, context) {\n angular.forEach(this.sources, method, this);\n },\n\n hasFundingMethodType: function hasFundingMethodType(name) {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.type === name) {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n hasFundingMethodSubType: function hasFundingMethodSubType(name) {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.sub_type === name) {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n isPAD: function isPAD() {\n return this.hasFundingMethodSubType('DELAYED_TRANSFER');\n },\n\n isIACH: function isIACH() {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.type === 'BANK_ACCOUNT' && source.sub_type === 'INSTANT_TRANSFER') {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n isSplitBalance: function isSplitBalance() {\n return this.sources && this.sources.length > 1 && this.hasFundingMethodType('BALANCE');\n },\n\n isSplitPaymentWithBalanceAndIach: function isSplitPaymentWithBalanceAndIach() {\n return this.isSplitBalance() && this.isIACH();\n },\n\n isMSB: function isMSB() {\n return this.sources && this.sources.length === 1 && this.sources[0].type === 'INCENTIVE';\n },\n\n isBalance: function isBalance() {\n return this.sources && this.sources.length === 1 && this.sources[0].type === 'BALANCE';\n },\n\n hasConversion: function hasConversion() {\n return this.conversion !== null && _typeof(this.conversion) === 'object';\n }\n});\n\nvar $CardBackupModel = exports.$CardBackupModel = _squid.$Model.extend('$CardBackupModel', {\n onPopulate: function onPopulate() {\n if (!this.get('parent.meta.populated')) {\n return;\n }\n\n // If plan IDs change, we need to reevaluate the correct backup plan id\n this.resetIfDoesNotApply();\n this.reevaluateEligibility();\n },\n\n\n /**\n * getCardBackupInstrument\n * Get the user's last selection for card backup, if still eligible\n * @returns {Object|undefined} the plan of the user's last selection, or undefined otherwise\n */\n getPlan: function getPlan() {\n if (!this.isAllowed()) {\n return;\n }\n\n return this.plan;\n },\n\n\n /**\n * setCardBackupInstrument\n * Save the user's selection for backup. Tied to the currently selected plan\n * @param {Object} plan - the plan to use as the backup\n * @param {Object} [forPlan] - if needed, the plan to compare against. prefer not to pass it in\n */\n setPlan: function setPlan(plan, forPlan) {\n this.plan = plan;\n this.forPlan = forPlan || this.getCheckoutSessionPlan();\n },\n isAllowed: function isAllowed() {\n var _forPlan = this.forPlan;\n _forPlan = _forPlan === undefined ? {} : _forPlan;\n var _forPlan$primaryFs = _forPlan.primaryFs;\n _forPlan$primaryFs = _forPlan$primaryFs === undefined ? {} : _forPlan$primaryFs;\n var type = _forPlan$primaryFs.type,\n secondaryFIs = _forPlan.secondaryFIs;\n\n\n if (type !== 'CARD' || secondaryFIs !== false) {\n return false;\n }\n return this.allowCardBackup;\n },\n getCheckoutSessionPlan: function getCheckoutSessionPlan() {\n return this.get('parent.fundingOptions.plans.0');\n },\n reevaluateEligibility: function reevaluateEligibility() {\n var _this3 = this;\n\n (0, _processorDecline.getProcessorDeclineRetryEligibility)(this.id, this.parent).then(function (eligibility) {\n _this3.allowCardBackup = eligibility;\n\n return eligibility;\n });\n },\n reset: function reset(forPlan) {\n this.setPlan(undefined, forPlan);\n },\n\n /**\n * resetIfDoesNotApply\n * resets the selected backup for card if no longer valid based on user's choice\n * matches the plan ID if still valid but plan IDs change\n * @param {String} [plan] - current checkout session funding options plan user has selected\n */\n resetIfDoesNotApply: function resetIfDoesNotApply(plan) {\n if (!plan) {\n plan = this.getCheckoutSessionPlan();\n }\n\n var getKey = function getKey(p) {\n return p && p.primaryFs && p.primaryFs.id;\n };\n var planKey = getKey(plan);\n var forKey = getKey(this.forPlan);\n\n if (!planKey || planKey !== forKey) {\n return this.reset(plan);\n }\n\n // Since planIds may change, if backup is still valid then find the new plan\n var plans = this.get('parent.fundingOptions.plans') || [];\n var currentPlanKey = getKey(this.plan);\n var newPlan = currentPlanKey && plans.find(function (p) {\n return getKey(p) === currentPlanKey;\n });\n\n // If, for whatever reason, the old instrument isn't in the new plans, we'll reset\n if (currentPlanKey && !newPlan) {\n return this.reset(plan);\n }\n\n this.forPlan = plan;\n this.plan = newPlan;\n }\n});\n\nvar $CheckoutSessionModel = exports.$CheckoutSessionModel = _squid.$Model.extend('$CheckoutSessionModel', {\n\n api: new _squid.$Api({\n uri: '/api/checkout/:id/session',\n postAttempts: 2\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n smartDollarAuthFailed: false, // initial value for smartDollar authorization check\n\n onPopulate: function onPopulate() {\n this.plan = new $CheckoutPlanModel(this.plan);\n this.shipping = this.child($CheckoutShippingAddressModel, this.shipping);\n this.fundingOptions = this.child($FundingOptionsModel, this.fundingOptions);\n\n // Reevaluate the eligibility for allowing backup with cards. This can\n // change when the checkout session is updated\n this.cardBackup = this.child($CardBackupModel, this.cardBackup || {});\n _squid.$event.emit('checkoutSessionChange'); // emit a session change event for apps to react accordingly\n },\n\n /**\n * Finds the plan in billing cases that the user is intending to use as the sticky FI.\n * @return {Object} the instrument representation from futurePaymentInstruments\n */\n getSelectedStickyInstrument: function getSelectedStickyInstrument() {\n // This method doesn't apply for non-billing cases\n if (!this.futurePaymentInstruments) {\n return;\n }\n\n // For BA no purchase cases (no plan), use either\n // 1. selectedFuturePaymentInstrument (we've made and persisted a selection)\n // 2. first of futurePaymentInstruments (we haven't made a selection and need to save it later)\n if (!(this.plan && this.plan.sources)) {\n return this.selectedFuturePaymentInstrument || this.futurePaymentInstruments[0];\n }\n\n // Otherwise, if we have a plan list (ie. this is a purchase case),\n // we'll always want to take the currently selected plan,\n // as selectedFuturePaymentInstrument may not be updated to the user's current plan\n var selectedInstrumentId = _squid.$util.some(this.plan.sources, function (fi) {\n return fi.instrument_id ? fi.instrument_id : undefined;\n });\n\n var stickyInstrument = _squid.$util.find(this.futurePaymentInstruments, function (fi) {\n return fi.instrument_id === selectedInstrumentId;\n });\n\n return stickyInstrument;\n },\n\n getPlanList: function getPlanList() {\n // Only show plans that need to be shown.\n return this.fundingOptions && this.fundingOptions.getDisplayPlans();\n },\n\n // returns true if more than one plan uses BALANCE as the primary FI\n isMultipleBalancePlan: function isMultipleBalancePlan() {\n var matchingBalancePlans = 0;\n\n return this.fundingOptions && this.fundingOptions.plans && this.fundingOptions.plans.some(function (plan) {\n // if BALANCE is the primary FI...\n if (plan.primaryFs.name === 'BALANCE') {\n // increment number of balance plans found\n matchingBalancePlans++;\n }\n // exit once we have more than one balance plan\n return matchingBalancePlans > 1;\n });\n },\n\n getDisallowedInstruments: function getDisallowedInstruments() {\n if (this.fundingOptions && this.fundingOptions.disallowedInstruments && angular.isArray(this.fundingOptions.disallowedInstruments)) {\n var filteredDisallowedInstruments = this.fundingOptions.disallowedInstruments.filter(function (instrument) {\n if (instrument.type === 'CARD' && instrument.declineReason === 'unsupportedDueToExpiration') {\n return (0, _utils.filterCardWithinLastNMonths)(instrument, (0, _squid.$feature)('expirePeriod'));\n }\n return true;\n });\n this.fundingOptions.disallowedInstruments = filteredDisallowedInstruments;\n }\n return this.fundingOptions && this.fundingOptions.disallowedInstruments;\n },\n\n getDisallowedPreferred: function getDisallowedPreferred() {\n var disallowedInstrument = this.getDisallowedInstruments();\n\n // find only the disallowed instrument that has been marked as preferred.\n disallowedInstrument = disallowedInstrument && _squid.$util.find(disallowedInstrument, function (fi) {\n return fi.isPreferred;\n });\n\n // if the disallowed instrument is in the plan list (in the case that the instrument has a BUF)\n // we do not show it in the disallowed section.\n var isDisallowedInstrumentInPlanList = disallowedInstrument && _squid.$util.some(this.getPlanList(), function (plan) {\n var instrumentID = plan.primaryFs && plan.primaryFs.id;\n\n if (instrumentID && disallowedInstrument.id) {\n return instrumentID === disallowedInstrument.id;\n } else {\n return false;\n }\n });\n\n return !isDisallowedInstrumentInPlanList && disallowedInstrument;\n },\n\n expiredInstruments: function expiredInstruments() {\n var expiredInstruments = [];\n var disallowedPreferred = this.getDisallowedPreferred();\n var disallowedInstruments = this.getDisallowedInstruments();\n\n if (disallowedPreferred) {\n expiredInstruments.push(disallowedPreferred);\n }\n\n _squid.$util.forEach(disallowedInstruments, function (instrument) {\n if (instrument.type === 'CARD' && !instrument.isPreferred && instrument.declineReason === 'unsupportedDueToExpiration') {\n expiredInstruments.push(instrument);\n }\n });\n\n return expiredInstruments;\n },\n\n preferredExpiredInstruments: function preferredExpiredInstruments() {\n var disallowedPreferred = this.getDisallowedPreferred();\n\n if (disallowedPreferred && disallowedPreferred.type === 'CARD' && disallowedPreferred.isPreferred && disallowedPreferred.declineReason === 'unsupportedDueToExpiration') {\n return true;\n }\n\n return false;\n },\n\n getShippingAddressMinimalDetails: function getShippingAddressMinimalDetails() {\n return {\n 'line1': this.shipping.line1,\n 'line2': this.shipping.line2,\n 'city': this.shipping.city,\n 'state': this.shipping.state,\n 'postal_code': this.shipping.postal_code,\n 'country_code': this.shipping.country\n };\n },\n\n getPPCconversionInfo: function getPPCconversionInfo() {\n var ppcFi = void 0;\n if (this.fundingOptions && this.fundingOptions.instruments) {\n ppcFi = this.fundingOptions.instruments.find(function (fi) {\n return fi.type === 'CREDIT' && fi.name === 'BILL_ME_LATER';\n });\n }\n if (ppcFi && ppcFi.currency_conversion) {\n return Object.assign({}, ppcFi.currency_conversion);\n }\n return null;\n }\n\n});\n\nangular.value(\"$CheckoutCartModel\", $CheckoutCartModel);\nangular.value(\"$CheckoutAppDataModel\", $CheckoutAppDataModel);\nangular.value(\"$FundingSourceModel\", $FundingSourceModel);\nangular.value(\"$FundingOptionsModel\", $FundingOptionsModel);\nangular.value(\"serializeInstallmentsOptionsData\", serializeInstallmentsOptionsData);\nangular.value(\"$InstallmentOptionsModel\", $InstallmentOptionsModel);\nangular.value(\"$FlowEligibilityModel\", $FlowEligibilityModel);\nangular.value(\"$CheckoutShippingAddressModel\", $CheckoutShippingAddressModel);\nangular.value(\"$ShippingAddressModel\", $ShippingAddressModel);\nangular.value(\"$CheckoutPayeeModel\", $CheckoutPayeeModel);\nangular.value(\"$CreditOptionsModel\", $CreditOptionsModel);\nangular.value(\"$CheckoutShippingAddressesModel\", $CheckoutShippingAddressesModel);\nangular.value(\"$CheckoutPlanModel\", $CheckoutPlanModel);\nangular.value(\"$CardBackupModel\", $CardBackupModel);\nangular.value(\"$CheckoutSessionModel\", $CheckoutSessionModel);\n_squid.$Class;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$event;\n\n_squid.$feature;\n\n_processorDecline.getProcessorDeclineRetryEligibility;\n\n_utils.filterCardWithinLastNMonths;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/checkout/lib/utils.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\n/**\n* @param {Date} d1\n* @param {Date} d2 \n* @returns {number}\n*/\nvar monthDiff = function monthDiff(d1, d2) {\n var months = void 0;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth() + 1;\n return months <= 0 ? 0 : months;\n};\n\n/**\n* @param {Object} fi - A funding instrument \n* @param {boolean} expiredPeriod - feature boolean flag from config.json\n* @returns {boolean}\n*/\nvar filterCardWithinLastNMonths = function filterCardWithinLastNMonths(fi, expirePeriod) {\n var expiryDate = new Date(fi.expire_year + '-' + fi.expire_month + '-01');\n\n var monthDifference = monthDiff(expiryDate, new Date());\n\n return monthDifference !== 0 && monthDifference <= expirePeriod;\n};\n\nexports.filterCardWithinLastNMonths = filterCardWithinLastNMonths;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/choice/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ChoiceEligibility = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _experiments = __webpack_require__(\"../node_modules/xo-models/src/experiments/index.js\");\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// Variants:\n// control\n// 5 - If any choice treatment, do 5 unless 5 is ineligible\n// 6 - If any choice treatment, do 6 if 5 is ineligible and 6 is eligible\n\nvar checkPPCInstallments = function checkPPCInstallments(token, _ref) {\n var checkoutSessionModel = _ref.checkoutSessionModel,\n checkoutPayeeModel = _ref.checkoutPayeeModel,\n checkoutCartModel = _ref.checkoutCartModel,\n checkoutAppDataModel = _ref.checkoutAppDataModel;\n\n // Check for installments - has credit in wallet, has credit offer in checkout session, and has installment options\n if (checkoutSessionModel.fundingOptions.hasCredit() && checkoutSessionModel.creditInstallmentOffer && (0, _squid.$feature)('creditInstallmentOffers')) {\n var installmentOptions = _checkout.$InstallmentOptionsModel.instance(token);\n\n return installmentOptions.save({\n cache: true, // Cache response for selectFi page or wherever needed\n data: {\n payee: checkoutPayeeModel,\n checkoutCart: checkoutCartModel,\n checkoutAppData: checkoutAppDataModel,\n isMemberCredit: true\n },\n success: function success(result) {\n var offers = result.installments && result.installments[0];\n var hasInstallments = offers && offers.installment_options && offers.installment_options.length;\n\n return hasInstallments;\n },\n contingencies: {\n DEFAULT: function DEFAULT(message) {\n // Assume is eligible if contingency\n _logger.$logger.info('installments_contingency', {\n message: message\n });\n return false;\n }\n },\n error: function error(err) {\n _logger.$logger.info('installments_error', err);\n return false;\n }\n });\n } else {\n return _squid.$promise.resolve(false);\n }\n};\n\n// Main logic to decide choice eligibility\nvar decideEligibility = function decideEligibility(token, _ref2) {\n var authModel = _ref2.authModel,\n checkoutCartModel = _ref2.checkoutCartModel,\n checkoutSessionModel = _ref2.checkoutSessionModel,\n checkoutAppDataModel = _ref2.checkoutAppDataModel,\n checkoutPayeeModel = _ref2.checkoutPayeeModel;\n var fundingOptions = checkoutSessionModel.fundingOptions;\n\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n\n // Reasons for a transaction to be ineligible:\n // - Doesn't meet pxp\n // - is billing\n // - is split balance\n // - balance covers full transaction but does not have preferred set\n // - has PAD\n // - is second button\n // - is not US\n // - has currency conversion\n // - is not a merchant account\n // - is a Third Party transaction (Venmo, Baidu, etc...)\n\n // Check to see if any plans include split balance\n var splitBalance = plans && plans.some(function (option) {\n return option.primaryFs && option.secondaryFIs;\n });\n var billing = checkoutCartModel.isBilling();\n var PAD = plans && plans.some(function (option) {\n return option.primaryFs && option.primaryFs.subtype === 'PAD';\n });\n var secondButton = checkoutAppDataModel.is_second_button_txn;\n var hasMerchantCountryChoice = (0, _squid.$feature)('choiceExperiment', false, checkoutAppDataModel.merchant.merchant_country);\n var fullBalance = plans && plans.some(function (option) {\n return option.primaryFs && option.primaryFs.type === 'BALANCE';\n });\n var hasPreferred = fundingOptions && fundingOptions.getPreferred();\n var isNotMerchantAccount = authModel.account_type !== 2;\n var isNotAndroidPay = !checkoutCartModel.isWalletTokenization();\n var isNotFbBaFlow = !_squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n var isThirdPartyWalletTransaction = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n var isNotGambling = !checkoutPayeeModel.isGambling();\n var isNotBaDisableStickyForMerchant = !(checkoutCartModel.isBillingNoPurchase() && checkoutPayeeModel.isOnBaNoStickyList());\n var involvedCurrencies = {};\n\n if (checkoutCartModel.get('purchase.amounts.total.currency_code') && plans) {\n involvedCurrencies[checkoutCartModel.purchase.amounts.total.currency_code] = 1;\n plans.forEach(function (option) {\n involvedCurrencies[option.primaryFs.amount.currency_code] = 1;\n });\n }\n\n var singleCurrency = Object.keys(involvedCurrencies).length <= 1;\n\n var choiceVariantsName = 'xo_hermes_choice_variant(?:_preferred_newusers)?_treatment_?(.*)';\n\n // checking if pad is to avoid calls to PXP\n var padToggleFeatureCheck = PAD ? Experiments.padToggleFeatureSupported() : _squid.$promise.resolve(false);\n\n // Check the global preferred experiment and the choice variant.\n // User must pass the global preferred experiment to be eligible to see a variant\n // Forced pxp call in case logged in user is different\n var _$config$choiceExperi = _squid.$config.choiceExperiment;\n _$config$choiceExperi = _$config$choiceExperi === undefined ? {} : _$config$choiceExperi;\n var _$config$choiceExperi2 = _$config$choiceExperi.stillInPxpRampCountries,\n stillInPxpRampCountries = _$config$choiceExperi2 === undefined ? [] : _$config$choiceExperi2,\n _$config$choiceExperi3 = _$config$choiceExperi.ignored;\n _$config$choiceExperi3 = _$config$choiceExperi3 === undefined ? {} : _$config$choiceExperi3;\n var _$config$choiceExperi4 = _$config$choiceExperi3.multipleFi,\n multipleFiIgnored = _$config$choiceExperi4 === undefined ? [] : _$config$choiceExperi4,\n _$config$choiceExperi5 = _$config$choiceExperi3.selectFi,\n selectFiIgnored = _$config$choiceExperi5 === undefined ? [] : _$config$choiceExperi5;\n\n\n var getPxp = function getPxp() {\n return stillInPxpRampCountries.indexOf(_squid.$locale.country) === -1 ? 'already_ramped' : (0, _squid.$pxp)('xo_hermes_choice_variant', {}, choiceVariantsName, true, true);\n };\n\n return _squid.$promise.all([getPxp(), padToggleFeatureCheck]).then(function (_ref3) {\n var choiceVariant = _ref3[0],\n isPadToggleFeatureSupported = _ref3[1];\n\n // Check transaction eligibility\n var eligibilityCriteria = {\n pxpVariant: choiceVariant,\n noBilling: !billing,\n noSplitBalance: !splitBalance,\n balanceWithPreferred: !(fullBalance && !hasPreferred),\n noPAD: !PAD || isPadToggleFeatureSupported,\n noSecondButton: !secondButton,\n hasMerchantCountryChoice: hasMerchantCountryChoice,\n singleCurrency: singleCurrency,\n noMerchant: isNotMerchantAccount,\n noAndroidPay: isNotAndroidPay,\n isNotFbBaFlow: isNotFbBaFlow,\n noThirdPartyWalletTransactions: !isThirdPartyWalletTransaction,\n isNotGambling: isNotGambling,\n isNotBaDisableStickyForMerchant: isNotBaDisableStickyForMerchant\n };\n // First check to see if transaction is eligible for choice at all.\n // Base eligibility check follows the selectFi eligibility\n var choiceIneligibleReasons = Object.keys(eligibilityCriteria).filter(function (key) {\n return selectFiIgnored.indexOf(key) === -1 && !eligibilityCriteria[key];\n });\n var transactionEligible = choiceIneligibleReasons.length === 0;\n\n if (!transactionEligible) {\n _logger.$logger.info('choice_experiment_ineligible', {\n failed: choiceIneligibleReasons.join()\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_control-' + choiceIneligibleReasons.join()\n });\n\n return 'control';\n }\n\n // If eligible for choice, check if transaction is eligible for multipleFi variant\n return checkPPCInstallments(token, {\n checkoutCartModel: checkoutCartModel,\n checkoutSessionModel: checkoutSessionModel,\n checkoutAppDataModel: checkoutAppDataModel,\n checkoutPayeeModel: checkoutPayeeModel\n }).then(function (hasPPCInstallments) {\n var validCountryForMultipleFi =\n // IN requires CVV collection, multipleFi variant does not have yet\n _squid.$locale.country !== 'IN';\n var hasInstallments = plans && plans.some(function (plan) {\n return plan.installments;\n });\n\n var multipleFiEligibility = (0, _angular.extend)({\n // Have not built method to select PPC installments for multipleFi\n creditInstallments: !hasPPCInstallments,\n validCountryForMultipleFi: validCountryForMultipleFi,\n noInstallments: !hasInstallments\n }, eligibilityCriteria);\n var multipleFiIneligibleReasons = Object.keys(multipleFiEligibility).filter(function (criteria) {\n return multipleFiIgnored.indexOf(criteria) === -1 && !multipleFiEligibility[criteria];\n }).join();\n var multipleFiEligible = multipleFiIneligibleReasons.length === 0;\n\n if (!multipleFiEligible) {\n _logger.$logger.info('choice_experiment_var5_ineligible', {\n failed: multipleFiIneligibleReasons\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_6-' + multipleFiIneligibleReasons\n });\n\n return '6';\n }\n\n _logger.$logger.info('choice_experiment_eligible', {\n variant: '5'\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_treatment'\n });\n\n return '5';\n });\n });\n};\n\nvar promiseControl = _squid.$promise.resolve('control');\n\nvar $ChoiceEligibility = exports.$ChoiceEligibility = _squid.$Model.extend('$ChoiceEligibility', {\n getVariant: function getVariant(token) {\n var _this = this;\n\n if (!(0, _squid.$feature)('choiceExperiment')) {\n return promiseControl;\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n authModel: _auth.$AuthModel.instance(),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n // If user logged in is the same, we don't need the pxp call so we can skip the decision making logic\n if (_this.variant && models.authModel.buyer_id === _this.buyerId) {\n return _this.variant;\n }\n\n _this.variant = decideEligibility(token, models);\n _this.buyerId = models.authModel.buyer_id;\n\n return _this.variant;\n });\n }\n});\n\nangular.value(\"$ChoiceEligibility\", $ChoiceEligibility);\n_angular.extend;\n\n_squid.$Model;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$integration;\n\n_squid.$locale;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$InstallmentOptionsModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/credit/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$CreditSharedInfoModel = exports.$CreditInstallmentOptionsModel = exports.$CreditInstallmentModel = exports.$CreditDataModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar $CreditDataModel = exports.$CreditDataModel = _squid.$Model.extend('$CreditDataModel', {\n init: function init() {\n this._super.init.apply(this);\n this.setProperties({\n flow_type: _squid.$util.param('flow'),\n cape_key: _squid.$util.param('key'),\n cape_success: _squid.$util.param('success'),\n credit_signup: _squid.$util.param('creditSignup'),\n userAction: _squid.$util.param('action'),\n merchantAction: _squid.$util.param('merchantAction'),\n credit_login_failure: false,\n is_cross_border: false,\n has_selected_cyco: false,\n cape_service_error: _squid.$util.param('isInternalServiceError'),\n cape_redirect_uri: '',\n change_installment: _squid.$util.param('changeStatus'),\n nextState: '',\n cart_amount: null,\n cart_currency: null,\n installment_count: 0\n });\n },\n\n api: new _squid.$Api({\n uri: '/api/credit/:id/creditData',\n postAttempts: 2\n }),\n\n isCreditSignup: function isCreditSignup() {\n return this.credit_signup && this.credit_signup === 'true';\n },\n\n setCapeRedirectUri: function setCapeRedirectUri(input) {\n this.cape_redirect_uri = input;\n },\n\n getCapeRedirectUri: function getCapeRedirectUri() {\n return this.cape_redirect_uri;\n },\n\n getMerchantAction: function getMerchantAction() {\n return this.merchantAction || '';\n },\n\n setCreditSignup: function setCreditSignup(input) {\n this.credit_signup = input;\n },\n\n getCapeKey: function getCapeKey() {\n return this.cape_key;\n },\n\n getFlow: function getFlow() {\n if (this.userAction === 'addCredit') {\n return 'credit';\n }\n return this.flow_type;\n },\n setFlow: function setFlow(flowType) {\n this.flow_type = flowType;\n },\n\n setNextState: function setNextState(nextState) {\n this.nextState = nextState;\n },\n\n isCapeSuccess: function isCapeSuccess() {\n return this.cape_success && this.cape_success === 'true';\n },\n\n isCreditTxn: function isCreditTxn() {\n return this.flow_type && this.flow_type === 'credit' || this.userAction && this.userAction === 'addCredit';\n },\n\n setCreditLoginFailure: function setCreditLoginFailure(input) {\n this.credit_login_failure = input;\n },\n\n getCreditLoginFailure: function getCreditLoginFailure() {\n return this.credit_login_failure;\n },\n\n isCapeReturn: function isCapeReturn() {\n return this.flow_type && this.flow_type === 'capeReturn';\n },\n\n isCapeInternalServiceError: function isCapeInternalServiceError() {\n return this.cape_service_error && this.cape_service_error === 'true';\n },\n\n getNextState: function getNextState() {\n return this.nextState;\n },\n\n isChangeStatus: function isChangeStatus() {\n return this.change_installment === 'changeInstallment';\n },\n\n isRedirectFromCape: function isRedirectFromCape() {\n return Boolean(this.cape_key && this.cape_success === 'true' || _squid.$util.param('applyCredit'));\n },\n\n // User has selected a financing offer on the CYCO page\n setSelectedCYCOOffer: function setSelectedCYCOOffer(hasOffer) {\n this.has_selected_cyco = hasOffer;\n },\n\n hasSelectedCYCOOffer: function hasSelectedCYCOOffer() {\n return this.has_selected_cyco;\n },\n\n // Cross border is when the merchant and buyer countries mismatch\n setCrossBorder: function setCrossBorder(value) {\n this.is_cross_border = value;\n },\n\n isCrossBorder: function isCrossBorder() {\n return this.is_cross_border;\n },\n\n // Cross currency: getCartAmountAndCurrency and setCartAmountAndCurrency\n getCartAmountAndCurrency: function getCartAmountAndCurrency() {\n if (this.cart_amount && this.cart_currency) {\n return {\n cart_amount: this.cart_amount,\n cart_currency: this.cart_currency\n };\n }\n },\n\n setCartAmountAndCurrency: function setCartAmountAndCurrency(cartData) {\n this.cart_amount = cartData && cartData.cart_amount;\n this.cart_currency = cartData && cartData.cart_currency;\n },\n\n getInstallmentCount: function getInstallmentCount() {\n return this.installment_count;\n },\n\n setInstallmentCount: function setInstallmentCount(count) {\n this.installment_count = count;\n }\n});\n\nvar $CreditInstallmentModel = exports.$CreditInstallmentModel = _squid.$Model.extend('$CreditInstallmentModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/creditOptions/'\n })\n});\n\nvar $CreditInstallmentOptionsModel = exports.$CreditInstallmentOptionsModel = _squid.$Model.extend('$CreditInstallmentOptionsModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/installmentOptions/',\n postAttempts: 2\n }),\n\n init: function init() {\n this.setProperties({\n installmentOffers: [],\n installmentCount: 0,\n installmentOptionsPresent: false,\n niOffer: [],\n niOfferPresent: false\n });\n this.meta = {\n populated: false\n };\n },\n\n onPopulate: function onPopulate() {\n if (this.installments && this.installments[0]) {\n this.storeInstallments();\n } else {\n _logger.$logger.log('No installments offer');\n }\n },\n\n storeInstallments: function storeInstallments() {\n\n this.installmentOffers = this.installments && this.installments[0];\n this.installmentCount = this.installmentOffers.installment_options && this.installmentOffers.installment_options.length;\n this.installmentOptionsPresent = this.installmentCount > 0;\n this.niOfferPresent = this.installmentOffers.sac_options && this.installmentOffers.sac_options.creditType;\n this.niOffer = this.niOfferPresent && this.installmentOffers.sac_options;\n },\n\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.cacheParam) {\n this.cacheParam.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n\n getInstallmentOptionsPresent: function getInstallmentOptionsPresent() {\n return this.installmentOptionsPresent;\n },\n\n getInstallmentOffers: function getInstallmentOffers(index) {\n if (typeof index === 'undefined') {\n return this.installmentOffers;\n } else {\n if (!this.installmentOffers || !this.installmentOffers.installment_options) {\n return;\n }\n return this.installmentOffers.installment_options[index];\n }\n },\n\n getInstallmentCount: function getInstallmentCount() {\n return this.installmentCount;\n },\n\n getNiOffer: function getNiOffer() {\n return this.niOffer;\n },\n\n getNiOfferPresent: function getNiOfferPresent() {\n return this.niOfferPresent;\n },\n\n serialize: function serialize() {\n var data = {\n payee: this.payee,\n checkoutCart: this.checkoutCart,\n checkoutAppData: this.checkoutAppData,\n isMemberCredit: true\n };\n\n return (0, _checkout.serializeInstallmentsOptionsData)(data);\n },\n save: function save(options) {\n options.data = this.serialize();\n\n return this._super.save.call(this, options);\n }\n});\n\nvar $CreditSharedInfoModel = exports.$CreditSharedInfoModel = _squid.$Model.extend('$CreditSharedInfoModel', {\n\n init: function init() {\n this.setProperties({\n installmentOfferPresent: false,\n showCreditExample: false,\n fiCount: 0,\n morsDiscoverMessageFPTIFired: false,\n cartAmountVisible: false\n });\n this._super.init.apply(this);\n },\n setInstallmentOfferPresent: function setInstallmentOfferPresent(installmentOfferPresent) {\n this.installmentOfferPresent = installmentOfferPresent;\n },\n hasInstallmentOffers: function hasInstallmentOffers() {\n return this.installmentOfferPresent;\n },\n setShowCreditExample: function setShowCreditExample(shouldShowCreditExample) {\n this.showCreditExample = shouldShowCreditExample;\n },\n shouldShowCreditExample: function shouldShowCreditExample() {\n return this.showCreditExample;\n },\n setFiCount: function setFiCount(count) {\n this.fiCount = parseInt(count, 10);\n },\n getFiCount: function getFiCount() {\n return this.fiCount;\n },\n getMorsFptiFiredFlag: function getMorsFptiFiredFlag() {\n return this.morsDiscoverMessageFPTIFired;\n },\n setMorsFptiFiredFlag: function setMorsFptiFiredFlag(alreadyFired) {\n this.morsDiscoverMessageFPTIFired = alreadyFired;\n },\n getCartAmountVisible: function getCartAmountVisible() {\n return this.cartAmountVisible;\n },\n setCartAmountVisible: function setCartAmountVisible(visible) {\n this.cartAmountVisible = visible;\n }\n\n});\n\nangular.value(\"$CreditDataModel\", $CreditDataModel);\nangular.value(\"$CreditInstallmentModel\", $CreditInstallmentModel);\nangular.value(\"$CreditInstallmentOptionsModel\", $CreditInstallmentOptionsModel);\nangular.value(\"$CreditSharedInfoModel\", $CreditSharedInfoModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_logger.$logger;\n\n_checkout.serializeInstallmentsOptionsData;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/donation/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$GiveAtCheckoutModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $GiveAtCheckoutModel = exports.$GiveAtCheckoutModel = _squid.$Model.extend('$GiveAtCheckoutModel', {\n api: new _squid.$Api({\n uri: '/api/donation',\n postAttempts: 2\n })\n});\n\nangular.value(\"$GiveAtCheckoutModel\", $GiveAtCheckoutModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/eligibility/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$stickyCTA = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _gdprCookieBanner = __webpack_require__(\"../node_modules/xo-models/src/gdprCookieBanner/index.js\");\n\nvar checkEligibility = function checkEligibility() {\n var token = _angular.$rootScope.token;\n var models = {};\n\n return _squid.$promise.all([(0, _squid.$populate)(models, {\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token)\n }), _gdprCookieBanner.$GDPRCookieBannerModel.instance().hasBanner()]).then(function () {\n // Device Checks\n var userAgent = _angular.$window.navigator.userAgent;\n var isIE = !!userAgent.match(/MSIE|trident|edge/i);\n var isMobile = _index.$DeviceInfo.isMobile();\n var miniBrowser = _angular.$rootScope.miniBrowser;\n var isValidTraffic = isMobile || miniBrowser;\n var isSmallScreen = _angular.$window.innerWidth <= 600;\n\n // Flow Checks\n var billing = models.checkoutCartModel.isBilling();\n var invoice = models.checkoutAppDataModel.get('flags.is_invoice_flow');\n var upop = models.checkoutSessionModel.unconfirmed_upop;\n var gpdr = _gdprCookieBanner.$GDPRCookieBannerModel.instance().shown();\n\n // Feature checks\n var eligibleCountry = (0, _squid.$feature)('stickyCTA');\n var ineligibilityConditions = {\n isIE: isIE,\n upop: upop,\n invoice: invoice,\n gpdr: gpdr,\n billing: billing,\n isNotSmallScreen: !isSmallScreen,\n isNotValidTraffic: !isValidTraffic,\n isNotEligibleCountry: !eligibleCountry\n };\n\n var decision = isValidTraffic && eligibleCountry && isSmallScreen && !billing && !invoice && !upop && !isIE && !gpdr;\n\n var ineligibilityReasons = Object.keys(ineligibilityConditions).filter(function (key) {\n return ineligibilityConditions[key];\n });\n var eligibility_reason = 'eligible';\n\n if (ineligibilityReasons.length > 0 || !decision) {\n eligibility_reason = 'ineligible-' + ineligibilityReasons.join(',');\n }\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_eligibility_check',\n eligibility_reason: eligibility_reason\n });\n\n return decision;\n });\n};\n\nvar checkPxp = function checkPxp() {\n var _$CheckoutAppDataMode = _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n merchant = _$CheckoutAppDataMode.merchant;\n\n var country = merchant && merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_sticky_cta_(.*)', false, true).then(function (treatment) {\n if (treatment) {\n var test = /xo_hermesnode_sticky_cta_(.*)/g;\n var name = treatment && treatment.treatment_name;\n var treatmentTest = test.exec(name);\n var treatmentName = treatmentTest.length > 1 && treatmentTest[1];\n\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_pxp_check',\n eligibility_reason: treatmentName\n });\n return treatmentName;\n }\n return '';\n });\n};\n\nvar mapper = function mapper(eligibility, treatment) {\n var variant = {\n 'treatmentA': 'bottom',\n 'treatmentB': 'top',\n 'control': '',\n 'DEFAULT': ''\n };\n var result = variant[treatment] || variant.DEFAULT;\n\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_variant_check',\n eligibility_reason: result || 'ineligible'\n });\n return result;\n};\n\n/**\n * To be replaced by $EligibilityClass.\n * Following new EligibilityClass pattern.\n*/\nvar $stickyCTA = exports.$stickyCTA = _squid.$Model.extend('$stickyCTA', {\n getEligibility: function getEligibility() {\n return checkEligibility().then(function (eligibility) {\n if (eligibility) {\n return checkPxp().then(function (treatment) {\n return mapper(eligibility, treatment);\n });\n } else {\n return '';\n }\n });\n }\n});\n\nangular.value(\"$stickyCTA\", $stickyCTA);\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_squid.$Model;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$feature;\n\n_squid.$promise;\n\n_index.$DeviceInfo;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_gdprCookieBanner.$GDPRCookieBannerModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/experiments/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.padToggleWalletSupported = exports.padToggleFeatureSupported = exports.PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = exports.PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = exports.PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = ['xo_hermesnode_pad_2_ui_rollout'];\nvar PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = exports.PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = ['AU'];\n\n/*\n * Returns the feature configuration\n *\n * If the country its part of the countries in the list of pxp enabled countries\n * we will check first if the treatment its enabled before calling the feature.\n *\n * if the treatment its not enabled we will return false for this feature.\n *\n * otherwise we will just return whatever is configured on the feature\n*/\nvar _getPad2Feature = function _getPad2Feature(feature) {\n var country = _squid.$locale.country;\n\n\n if (PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES.includes(country)) {\n // if the contry is AU we want to check that the experiment its enabled before returning the config values\n return (0, _squid.$pxp)('xo_hermesnode_pad_2_ui_' + country, PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS.join('|'), undefined, false, true).then(function (pxpResponse) {\n // If the pxp has a valid treatment then enable based on the configs\n // this will enable to enable/disable the new pad experience with an experiment and configs\n if (pxpResponse) {\n return (0, _squid.$feature)(feature, false, country);\n }\n return false;\n });\n }\n return _squid.$promise.resolve((0, _squid.$feature)(feature, false, country));\n};\n\nvar padToggleFeatureSupported = exports.padToggleFeatureSupported = function padToggleFeatureSupported() {\n return _getPad2Feature('padToggleFeatureSupported');\n};\n\nvar padToggleWalletSupported = exports.padToggleWalletSupported = function padToggleWalletSupported() {\n return _getPad2Feature('padToggleWalletSupported');\n};\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/fi/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$CardInfoModel = exports.$WalletInstrumentNameMapping = exports.$WalletPreferences = exports.$ResolveOTP = exports.$Resolve3DS = exports.$CardTypeFromBinModel = exports.$BillingAddressesModel = exports.$CurrencyConversionModel = exports.$BillingAddressModel = exports.$AddBillingAddressModel = exports.$DeleteCardModel = exports.$SepaModel = exports.$PreferredFi = exports.$AddBankModel = exports.$BankModel = exports.$CardTypesModel = exports.$UnavailableCardModel = exports.$AddCardModel = exports.$CardModel = undefined;\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar BILLING_ADDRESS_FORMAT = {\n DEFAULT: {\n ',': ', ',\n ' ': ' '\n },\n IL: {\n he: {\n ',': '‏, ‏',\n ' ': '‏ ‏'\n }\n }\n};\n\nvar $CardModel = exports.$CardModel = _squid.$Model.extend('$CardModel', {\n serialize: function serialize() {\n return {\n type: this.type,\n number: this.number.replace(/[^\\d]+/g, ''),\n security_code: this.security_code,\n expiry_month: this.expiry_month && _squid.$util.pad(this.expiry_month, 2),\n expiry_year: this.expiry_year,\n issue_number: this.issue_number ? this.issue_number : undefined,\n start_month: this.start_month ? _squid.$util.pad(this.start_month, 2) : undefined,\n start_year: this.start_year ? this.start_year : undefined\n };\n },\n\n last4: function last4() {\n var cardNumber = this.number;\n\n return cardNumber.substr(cardNumber.length - 4);\n },\n\n isExisting: function isExisting() {\n return this.number && Boolean(this.number.match(/^xxxx-xxxx-xxxx-[\\d]{4}$/));\n }\n});\n\nvar $AddCardModel = exports.$AddCardModel = _squid.$Model.extend('$AddCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id?'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.card = new $CardModel();\n },\n\n serialize: function serialize() {\n var id = this.address.id && this.address.id !== '0' ? this.address.id : undefined;\n\n return {\n cardType: this.cardType ? this.cardType : 'creditCard',\n sponsor_id: this.sponsor_id,\n preference: this.preference,\n user: this.user,\n card: this.card.serialize(),\n address: id ? {\n id: id\n } : this.address.serialize()\n };\n },\n\n clearId: function clearId() {\n delete this.id;\n }\n});\n\nvar $UnavailableCardModel = exports.$UnavailableCardModel = _squid.$Model.extend('$UnavailableCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/unavailable/card?addFIContingency'\n })\n});\n\nvar $CardTypesModel = exports.$CardTypesModel = _squid.$Model.extend('$CardTypesModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/types?country=:country&token=:token'\n }),\n\n retrieve: function retrieve() {\n return this._super.retrieve.apply(this, arguments).then(function (result) {\n this.disallowedCards = (0, _squid.$feature)('disallowedCards', undefined, this.country);\n // override disallowed cards with card types config list based on country\n if (this.disallowedCards) {\n result.disallowed = this.disallowedCards.cardTypes;\n }\n return result;\n });\n },\n\n supportedNames: function supportedNames() {\n if (typeof this.allowed === 'undefined') {\n return;\n }\n\n return this.allowed.map(function (type) {\n return _squid.$locale.content.cardTypes[type];\n });\n },\n\n unsupportedNames: function unsupportedNames() {\n if (typeof this.disallowed === 'undefined') {\n return;\n }\n\n return this.disallowed.map(function (type) {\n return _squid.$locale.content.cardTypes[type];\n });\n }\n});\n\nvar $BankModel = exports.$BankModel = _squid.$Model.extend('$BankModel', {\n init: function init() {\n this._super.init.apply(this);\n this.bank_account_number = '';\n this.bank_routing_number = '';\n this.iban_number = '';\n },\n\n serialize: function serialize() {\n var data = {};\n\n if (this.bank_account_number) {\n data.bank_account_number = this.bank_account_number;\n }\n if (this.bank_routing_number) {\n data.bank_routing_number = this.bank_routing_number;\n }\n if (this.iban_number) {\n data.iban_number = this.iban_number.replace(/\\s/g, '').toUpperCase();\n }\n return data;\n }\n});\n\nvar $AddBankModel = exports.$AddBankModel = _squid.$Model.extend('$AddBankModel', {\n api: new _squid.$Api({\n uri: '/api/fi/bank'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.user = this.user || {\n first_name: '',\n dob_day: '',\n dob_month: '',\n dob_year: '',\n currency_code: '',\n country: ''\n };\n this.bank = this.bank || new $BankModel();\n this.address = this.address || {};\n this.creditorDetails = this.creditorDetails || {};\n this.fiDetails = this.fiDetails || {};\n },\n\n getBankData: function getBankData() {\n var data = {};\n\n // Set user info\n data.user = this.user;\n\n // Set bank info\n var bank = {};\n\n this.bank = this.bank || {};\n\n if (this.candidate_id) {\n data.candidate_id = this.candidate_id;\n }\n\n if (this.bank.bank_account_number) {\n bank.bank_account_number = this.bank.bank_account_number;\n }\n\n if (this.bank.bank_routing_number) {\n bank.bank_routing_number = this.bank.bank_routing_number;\n }\n\n if (this.bank.iban_number) {\n bank.iban_number = this.bank.iban_number.replace(/\\s/g, '');\n }\n data.bank = bank;\n\n // Set address info\n if (this.address) {\n data.address = {\n line1: this.address.line1,\n line2: this.address.line2,\n city: this.address.city,\n country: this.address.country,\n postal_code: this.address.postal_code\n };\n }\n\n return data;\n }\n});\n\nvar $PreferredFi = exports.$PreferredFi = _squid.$Model.extend('$PreferredFi', {\n api: new _squid.$Api({\n uri: '/api/fi/preferred'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n\n // Get the type of device to send to FI for logging\n function getUiChannel() {\n var capabilities = _index.$DeviceInfo.getCapabilities();\n\n if (capabilities.isTablet) {\n return 'Tablet';\n } else if (capabilities.isMobile) {\n return 'Mobile';\n } else if (capabilities.isDesktop) {\n return 'Desktop';\n } else if (capabilities.isApp) {\n return 'App';\n } else {\n return null;\n }\n }\n\n this.uiChannel = getUiChannel();\n },\n\n serialize: function serialize() {\n return {\n preferred: this.preferred,\n uiChannel: this.uiChannel\n };\n }\n});\n\nvar $SepaModel = exports.$SepaModel = _squid.$Model.extend('$SepaModel', {\n api: new _squid.$Api({\n uri: '/api/fi/bank'\n })\n});\n\nvar $DeleteCardModel = exports.$DeleteCardModel = _squid.$Model.extend('$DeleteCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id/delete'\n })\n});\n\nvar $AddBillingAddressModel = exports.$AddBillingAddressModel = _squid.$Model.extend('$AddBillingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/fi/:instrumentid/addbillingaddress'\n })\n});\n\nvar $BillingAddressModel = exports.$BillingAddressModel = _squid.$Model.extend('$BillingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/fi/billingaddress/validate'\n }),\n\n format: function format() {\n\n var langConfig = (BILLING_ADDRESS_FORMAT[_squid.$locale.country] || {})[_squid.$locale.lang] || {};\n\n var comma = angular.isUndefined(langConfig[',']) ? BILLING_ADDRESS_FORMAT['DEFAULT'][','] : langConfig[','];\n var space = angular.isUndefined(langConfig[' ']) ? BILLING_ADDRESS_FORMAT['DEFAULT'][' '] : langConfig[' '];\n\n return _squid.$util.filter([this.line1, this.line2, this.city, this.state, this.country]).join(comma) + space + _squid.$util.filter([this.postal_code]);\n },\n\n serialize: function serialize() {\n return {\n line1: this.line1 && this.line1.trim(),\n line2: this.line2 && this.line2.trim(),\n city: this.city && this.city.trim(),\n state: this.state && this.state.trim(),\n postal_code: this.postal_code && this.postal_code.trim(),\n normalization_status: this.normalization_status,\n country: this.country\n };\n }\n});\n\nvar $CurrencyConversionModel = exports.$CurrencyConversionModel = _squid.$Model.extend('$CurrencyConversionModel', {\n api: new _squid.$Api({\n uri: '/api/fi/currencyConversion'\n })\n});\n\nvar $BillingAddressesModel = exports.$BillingAddressesModel = _squid.$Model.extend('$BillingAddressesModel', {\n api: new _squid.$Api({\n uri: '/api/fi/billingaddress'\n }),\n\n onPopulate: function onPopulate() {\n this.addresses = this.children($BillingAddressModel, this.addresses);\n }\n});\n\nvar $CardTypeFromBinModel = exports.$CardTypeFromBinModel = _squid.$Model.extend('$CardTypeFromBinModel', {\n api: new _squid.$Api({\n uri: '/api/fi/cardTypeFromBin'\n })\n});\n\nvar $Resolve3DS = exports.$Resolve3DS = _squid.$Model.extend('$Resolve3DS', {\n api: new _squid.$Api({\n uri: '/api/fi/3ds/:id'\n })\n});\n\nvar $ResolveOTP = exports.$ResolveOTP = _squid.$Model.extend('$ResolveOTP', {\n api: new _squid.$Api({\n uri: '/api/fi/otp/:id'\n })\n});\n\nvar $WalletPreferences = exports.$WalletPreferences = _squid.$Model.extend('$WalletPreferences', {\n api: new _squid.$Api({\n uri: '/api/fi/wallet/preferences'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n init: function init() {\n this._super.init.apply(this);\n this.topup = {};\n this.direct = {};\n },\n\n serialize: function serialize() {\n var data = {};\n\n if (this.topup.amount) {\n var _topup = this.topup,\n amount = _topup.amount,\n _topup$fundingSource = _topup.fundingSource;\n _topup$fundingSource = _topup$fundingSource === undefined ? {} : _topup$fundingSource;\n var instrument_id = _topup$fundingSource.instrument_id;\n\n // Set the Topup funding instrument in the wallet preference api, which will be used by future Topup transactions\n\n data.topup = {\n amount: amount,\n instrument_id: instrument_id,\n autoload_minimum_threshold: _squid.$config.topup.autoload_minimum_threshold\n };\n } else {\n var _direct$fundingSource = this.direct.fundingSource;\n _direct$fundingSource = _direct$fundingSource === undefined ? {} : _direct$fundingSource;\n var _instrument_id = _direct$fundingSource.instrument_id;\n\n // Set the Direct funding instrument in the wallet preference api, which will be used by future Direct funding transactions\n\n data.direct = {\n instrument_id: _instrument_id,\n currency_code: this.currency\n };\n }\n return data;\n },\n\n /**\n * Return the preferred topup/direct fundingsource.\n * Originally values of topup & direct are from the FI wallet preferences api, which gets assigned during the init() call.\n * Values can be changed in the Review and the Wallet pages.\n */\n getPreferred: function getPreferred() {\n if (this.topup.fundingSource && this.topup.fundingSource.instrument_id) {\n // xo-hermes-fi will always return topup.fundingSource even when there is no preferred topup instrument, hence making the additional check here.\n return this.topup.fundingSource;\n } else {\n return this.direct.fundingSource || {};\n }\n }\n});\n\nvar $WalletInstrumentNameMapping = exports.$WalletInstrumentNameMapping = _squid.$Model.extend('$WalletInstrumentNameMapping', {\n init: function init() {\n this._super.init.apply(this);\n this.INSTRUMENT_MAP = {\n AMSOUTH: /AMSOUTH,/,\n BOFA: /BANK OF AMERICA/,\n CAPITAL: /CAPITAL/,\n CHASE: /CHASE/,\n CITI: /CITIBANK/,\n FIFTHTHIRD: /FIFTH THIRD BANK/,\n HUNTINGTON: /HUNTINGTON/,\n INGDIRECT: /ING DIRECT/,\n NATIONALCITY: /NATIONAL CITY/,\n PNC: /PNC/,\n REGIONS: /REGIONS/,\n SUNTRUST: /SUNTRUST/,\n TDWATERHOUSE: /TD WATERHOUSE/,\n USAA: /USAA/,\n USBANK: /US BANK/,\n VISA: /VISA/,\n WAMUTUAL: /WASHINGTON MUTUAL/,\n WELLSFARGO: /WELLS FARGO/\n };\n this.INSTRUMENT_NAMES = Object.keys(this.INSTRUMENT_MAP);\n },\n\n getInstrumentNameNormalized: function getInstrumentNameNormalized(fsName) {\n var _this = this;\n\n if (!fsName) {\n return;\n }\n\n fsName = fsName.toUpperCase();\n\n return _squid.$util.find(this.INSTRUMENT_NAMES, function (instName) {\n if (_this.INSTRUMENT_MAP[instName].test(fsName)) {\n return true;\n }\n return false;\n });\n }\n});\n\nvar $CardInfoModel = exports.$CardInfoModel = _squid.$Model.extend('$CardInfoModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id'\n })\n});\n\nangular.value(\"$CardModel\", $CardModel);\nangular.value(\"$AddCardModel\", $AddCardModel);\nangular.value(\"$UnavailableCardModel\", $UnavailableCardModel);\nangular.value(\"$CardTypesModel\", $CardTypesModel);\nangular.value(\"$BankModel\", $BankModel);\nangular.value(\"$AddBankModel\", $AddBankModel);\nangular.value(\"$PreferredFi\", $PreferredFi);\nangular.value(\"$SepaModel\", $SepaModel);\nangular.value(\"$DeleteCardModel\", $DeleteCardModel);\nangular.value(\"$AddBillingAddressModel\", $AddBillingAddressModel);\nangular.value(\"$BillingAddressModel\", $BillingAddressModel);\nangular.value(\"$CurrencyConversionModel\", $CurrencyConversionModel);\nangular.value(\"$BillingAddressesModel\", $BillingAddressesModel);\nangular.value(\"$CardTypeFromBinModel\", $CardTypeFromBinModel);\nangular.value(\"$Resolve3DS\", $Resolve3DS);\nangular.value(\"$ResolveOTP\", $ResolveOTP);\nangular.value(\"$WalletPreferences\", $WalletPreferences);\nangular.value(\"$WalletInstrumentNameMapping\", $WalletInstrumentNameMapping);\nangular.value(\"$CardInfoModel\", $CardInfoModel);\n_index.$DeviceInfo;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/fi/lib/constants.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar issuerDeclineExperimentMap = exports.issuerDeclineExperimentMap = {\n Trmt_xo_hermesnodeweb_issuer_decline_1: {\n member: 'payment.processorDeclineIssuerMember',\n memberNoIssuer: 'payment.processorDeclineIssuerMemberNoIssuer',\n guest: 'payment.processorDeclineIssuerGuest',\n guestNoIssuer: 'payment.processorDeclineIssuerGuestNoIssuer',\n type: 'info'\n }\n};\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/fi/lib/fiApis.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$fiApis = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar $fiApis = exports.$fiApis = {\n patchCvv: function patchCvv(checkoutSession) {\n var cvvData = checkoutSession.get('cvvData');\n\n if (cvvData) {\n return checkoutSession.action('patchCvv', {\n data: {\n id: cvvData.id,\n cvv: cvvData.security_code,\n type: cvvData.type,\n number: cvvData.number\n }\n });\n }\n\n return _angular.$q.when();\n }\n};\n\nangular.value(\"$fiApis\", $fiApis);\n_angular.$q;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/fi/lib/fiMessages.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _constants = __webpack_require__(\"../node_modules/xo-models/src/fi/lib/constants.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fiMessages', function () {\n var xoonRedirectExperimentMap = {\n xo_hermes_addcard_msg_xoon_redirect_retry_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_bgr_orange: {\n msgKey: 'creditcard.noFIContingency',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_without_details: {\n msgKey: 'addFiError.declinedRetry',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_with_details: {\n msgKey: 'addFiError.declinedRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_with_avs_details: {\n msgKey: 'addFiError.declinedRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_bgr_orange: {\n msgKey: 'creditcard.noFIContingency',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_without_details: {\n msgKey: 'addFiError.declinedNoRetry',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_with_details: {\n msgKey: 'addFiError.declinedNoRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_with_avs_details: {\n msgKey: 'addFiError.declinedNoRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_dropdown: {\n msgKey: 'addFiError.declinedWithBilling',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_address_box: {\n msgKey: 'addFiError.declinedWithBilling',\n type: 'warning',\n showDetails: true\n }\n };\n\n function getContentKeys(hasFi) {\n if (hasFi) {\n return {\n member: 'payment.processorDeclineMember',\n generic: 'payment.processorDeclineMemberGeneric',\n buyerCredit: 'payment.processorDeclineMemberBuyerCredit'\n };\n } else {\n return {\n member: 'payment.processorDeclineMemberNoFI',\n generic: 'payment.processorDeclineMemberNoFIGeneric',\n buyerCredit: 'payment.processorDeclineMemberBuyerCreditNoFI'\n };\n }\n }\n\n // Temporary solution until PAPS returns CCID in the declined instrument\n var getIssuerName = function getIssuerName(_ref) {\n var _ref$instrument = _ref.instrument,\n instrument = _ref$instrument === undefined ? {} : _ref$instrument,\n _ref$disallowedInstru = _ref.disallowedInstruments,\n disallowedInstruments = _ref$disallowedInstru === undefined ? [] : _ref$disallowedInstru,\n _ref$cardAccounts = _ref.cardAccounts,\n cardAccounts = _ref$cardAccounts === undefined ? [] : _ref$cardAccounts;\n\n var last4 = instrument && instrument.last4 ? instrument.last4 : '';\n var search = disallowedInstruments.find(function (disallowedInstrument) {\n return disallowedInstrument.lastDigits === last4;\n });\n\n if (search) {\n var id = search.id;\n\n var cardAccount = cardAccounts.find(function (card) {\n return card.id.replace('-', '') === id;\n });\n\n if (cardAccount) {\n // Will need to eventually deprecate to the Wallet Model to manage this\n var issuerName = cardAccount.issuer && cardAccount.issuer.filtered_issuer_name ? cardAccount.issuer.filtered_issuer_name : '';\n\n return issuerName;\n }\n }\n return '';\n };\n\n function processorDeclinedMsg(checkoutSession, hasFi) {\n var experiment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var authSession = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var wallet = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var informalName = arguments[5];\n\n var declinedInstruments = checkoutSession.get('declinedInstruments', []);\n\n if (_angular2['default'].isArray(declinedInstruments) && declinedInstruments.length) {\n var msg = void 0;\n var type = 'warning';\n var instrument = declinedInstruments[0];\n var contentKeys = getContentKeys(hasFi);\n\n if (instrument.type === 'PAYMENT_CARD') {\n if (instrument.card_type && instrument.last4) {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'member' });\n var experimentMap = _constants.issuerDeclineExperimentMap[experiment];\n\n if (experimentMap && authSession && wallet) {\n var card_accounts = wallet.card_accounts;\n\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n var issuer = getIssuerName({\n instrument: instrument,\n disallowedInstruments: disallowedInstruments,\n cardAccounts: card_accounts\n });\n\n if (issuer) {\n type = experimentMap.type;\n msg = (0, _squid.$renderContent)(experimentMap.member, {\n name: informalName,\n type: instrument.card_type,\n issuer: issuer,\n number: instrument.last4\n });\n } else {\n type = experimentMap.type;\n msg = (0, _squid.$renderContent)(experimentMap.memberNoIssuer, {\n name: informalName,\n type: instrument.card_type,\n number: instrument.last4\n });\n }\n } else {\n msg = (0, _squid.$renderContent)(contentKeys.member, {\n type: instrument.card_type,\n number: instrument.last4\n });\n }\n } else {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'generic' });\n msg = (0, _squid.$renderContent)(contentKeys.generic);\n }\n } else {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'buyerCredit' });\n msg = (0, _squid.$renderContent)(contentKeys.buyerCredit);\n }\n\n checkoutSession.set('declinedInstruments', null);\n\n return {\n type: type,\n msg: msg\n };\n }\n }\n\n function getXoonRedirectAddCardMsg(unavailableCard, experiment) {\n var experimentMap = xoonRedirectExperimentMap[experiment];\n\n if (!unavailableCard) {\n _logger.$logger.info(experiment + '_card_empty');\n return {\n type: 'info',\n msg: (0, _squid.$renderContent)('creditcard.noFIContingency')\n };\n }\n\n var msg = (0, _squid.$renderContent)(experimentMap['msgKey']);\n var type = experimentMap['type'];\n var showDetails = experimentMap['showDetails'];\n\n if (showDetails) {\n var cardType = (0, _squid.$renderContent)('cardTypes.' + unavailableCard.cardType);\n var lastDigits = unavailableCard.lastDigits;\n\n if (cardType && cardType.toString() && lastDigits) {\n msg = (0, _squid.$renderContent)(experimentMap['msgKey'], {\n cardType: cardType,\n last4: lastDigits\n });\n } else {\n msg = (0, _squid.$renderContent)('creditcard.noFIContingency');\n type = 'info';\n _logger.$logger.info(experiment + '_detail_missing');\n }\n }\n\n _logger.$logger.info(experiment, { type: unavailableCard.cardType, msgType: type, msgRendered: msg ? true : false });\n return {\n type: type ? type : 'info',\n msg: msg ? msg : (0, _squid.$renderContent)('creditcard.noFIContingency')\n };\n }\n\n function getAddCardControlMsg(checkoutSession) {\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n\n if (disallowedInstruments && disallowedInstruments.length === 1) {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'single_disallowed_FI_addcard_control_msg'\n });\n } else if (disallowedInstruments && disallowedInstruments.length > 1) {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'multi_disallowed_FI_addcard_control_msg'\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'has_no_disallowed_FI_addcard_control_msg'\n });\n }\n\n return {\n msg: (0, _squid.$renderContent)('creditcard.noFIContingency'),\n type: 'info'\n };\n }\n\n function getAddCardMsg(unavailableCard, experiment, checkoutSession) {\n var xoonRedirectAddCardMsgExp = xoonRedirectExperimentMap[experiment];\n\n if (xoonRedirectAddCardMsgExp) {\n return getXoonRedirectAddCardMsg(unavailableCard, experiment);\n }\n return getAddCardControlMsg(checkoutSession);\n }\n\n function getAddCardTreatmentMsg(checkoutSession) {\n var msg = void 0;\n var type = void 0;\n var title = void 0;\n var cardList = void 0;\n var lastCard = void 0;\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n disallowedInstruments = disallowedInstruments.filter(function (instrument) {\n return instrument.type && instrument.type !== 'REWARDS' && instrument.type !== 'BALANCE';\n });\n\n if (disallowedInstruments && disallowedInstruments.length === 1) {\n cardList = disallowedInstruments[0].lastDigits ? disallowedInstruments[0].name + '-' + disallowedInstruments[0].lastDigits : disallowedInstruments[0].name;\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'single_disallowed_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasSingleDisallowedFi', { cardList: cardList });\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.hasDisallowedAddCardTitle');\n } else if (disallowedInstruments && disallowedInstruments.length > 1) {\n cardList = '';\n\n for (var i = 0; i < disallowedInstruments.length; i++) {\n if (i === disallowedInstruments.length - 1) {\n lastCard = disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits : disallowedInstruments[i].name;\n } else if (i === disallowedInstruments.length - 2) {\n cardList += disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits : disallowedInstruments[i].name;\n } else {\n cardList += disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits + ', ' : disallowedInstruments[i].name + ', ';\n }\n }\n\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'multi_disallowed_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasMultipleDisallowedFi', { cardList: cardList, lastCard: lastCard });\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.hasDisallowedAddCardTitle');\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'has_no_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasNoDisallowedFi');\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.noDisallowedAddCardTitle');\n }\n\n return {\n msg: msg,\n type: type,\n title: title\n };\n }\n\n // User with only banks in disallowed list with message indicating the same\n function getAddBankTreatmentMsg() {\n return {\n msg: (0, _squid.$renderContent)('bank.disallowedAddCard'),\n type: 'normal'\n };\n }\n\n // Add card contingency for the case where card fails preauth; Show message which indicates that card failed pre-auth\n function getPreAuthTreatmentMsg() {\n var preAuthDisallowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var disallowedInstrument = preAuthDisallowed[0];\n\n\n return {\n msg: (0, _squid.$renderContent)('creditCard.preAuthNoIssuer', {\n cardType: disallowedInstrument && disallowedInstrument.name || '',\n last4: disallowedInstrument && disallowedInstrument.lastDigits || 'xxxx'\n }),\n type: 'info'\n };\n }\n\n function getGamblingMsg() {\n return {\n type: 'error',\n msg: (0, _squid.$renderContent)('creditcard.noEligibleFI')\n };\n }\n\n return {\n processorDeclinedMsg: processorDeclinedMsg,\n getGamblingMsg: getGamblingMsg,\n getAddCardTreatmentMsg: getAddCardTreatmentMsg,\n getAddCardControlMsg: getAddCardControlMsg,\n getAddCardMsg: getAddCardMsg,\n getAddBankTreatmentMsg: getAddBankTreatmentMsg,\n getPreAuthTreatmentMsg: getPreAuthTreatmentMsg\n };\n});\n\n_squid.$renderContent;\n\n_logger.$logger;\n\n_constants.issuerDeclineExperimentMap;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-models/src/fi/lib\", \"../node_modules/xo-models/src/fi/lib/fiMessages.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/fiMeta/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _wallet = __webpack_require__(\"../node_modules/xo-models/src/wallet/index.js\");\n\nvar _dist = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar PADSUBTYPE = 'DELAYED_TRANSFER';\nvar MEFTSUBTYPE = 'MEFT';\nvar IACHSUBTYPE = 'IACH';\nvar ECHECKSUBTYPE = 'ECHECK';\n\n// any mappings to normalize fi name\nvar NAME_MAPPINGS = {\n 'MERCHANT_SPECIFIC_BALANCE': 'INCENTIVE'\n};\n\n// eslint-disable-next-line no-confusing-arrow\nvar allFis = function allFis(plan) {\n return plan.secondaryFIs ? [plan.primaryFs].concat(plan.secondaryFIs) : [plan.primaryFs];\n};\n\nvar isSubType = function isSubType(subtype) {\n return function (fi) {\n return fi.subtype === subtype || fi.sub_type === subtype;\n };\n};\n\nvar capFirst = function capFirst(product) {\n return product && product.charAt(0).toUpperCase() + product.slice(1).toLowerCase();\n};\n\nexports['default'] = _squid.$Model.extend('$FiMetaModel', {\n invalidateOnLogout: true,\n\n onInvalidate: function onInvalidate() {\n if (this.session) {\n delete this.session;\n }\n if (this.wallet) {\n delete this.wallet;\n }\n },\n fetch: function fetch() {\n var _this = this;\n\n if (_squid.$config.disableCardArt) {\n return _squid.$promise.resolve(this);\n } else {\n return _squid.$promise.all({\n session: _checkout.$CheckoutSessionModel.instance(this.id).retrieve(),\n wallet: _wallet.$WalletModel.instance(this.id).retrieve()\n }).then(function (r) {\n return _squid.$util.extend(_this, r);\n });\n }\n },\n\n\n // pxp apply for user\n cardArtEnabled: function cardArtEnabled() {\n return this.wallet && this.wallet.cardArtEnabled;\n },\n getCardArt: function getCardArt(fi) {\n return this.wallet && this.cardArtEnabled() && this.wallet.getCardArt(fi);\n },\n plans: function plans() {\n return this.session.fundingOptions.plans;\n },\n hasPadPlan: function hasPadPlan() {\n return this.plans().map(allFis).some(function (fis) {\n return fis.some(isSubType(PADSUBTYPE));\n });\n },\n type: function type(fi) {\n if (fi.type === 'CREDIT' || fi.type === 'BILL_ME_LATER') {\n return 'CREDIT';\n } else {\n return fi.type;\n }\n },\n getName: function getName(fi) {\n if (fi.isPinlessDebit || fi.is_pinless_debit) {\n return (0, _dist.$renderContent)('fsMappings.PINLESSDEBIT');\n }\n\n // Normalize fs name for content key lookup\n var name = NAME_MAPPINGS[fi.name] || fi.name;\n\n return this.wallet && this.wallet.getCustomName(fi) || (0, _dist.$renderContent)('fsMappings.' + name).toString() || name;\n },\n getAmount: function getAmount(fi) {\n return fi.amount;\n },\n getCurrencyCode: function getCurrencyCode(fi) {\n return fi.amount.currency_code;\n },\n getAllCurrencyCodes: function getAllCurrencyCodes(plan) {\n return allFis(plan).map(this.getCurrencyCode);\n },\n getCardMask: function getCardMask(fi) {\n var mask = this.wallet && this.wallet.getCardMask(fi);\n\n if (!mask.before) {\n mask.before = capFirst(fi.productClass);\n }\n if (!mask.after) {\n mask.after = fi.lastDigits || fi.last4;\n }\n return mask;\n },\n isPinlessDebit: function isPinlessDebit(fi) {\n return fi.is_pinless_debit || fi.isPinlessDebit;\n },\n isPad: function isPad(fi) {\n return isSubType(PADSUBTYPE)(fi) || isSubType('PAD')(fi);\n },\n isMeft: function isMeft(fi) {\n return isSubType(MEFTSUBTYPE)(fi);\n },\n isIach: function isIach(fi) {\n return isSubType(IACHSUBTYPE)(fi);\n },\n isEcheck: function isEcheck(fi) {\n return isSubType(ECHECKSUBTYPE)(fi);\n },\n getEditDisallowedContentKey: function getEditDisallowedContentKey(fi) {\n if (!fi) {\n return;\n }\n if (fi.editDisallowedMsg) {\n return 'wallet.' + fi.editDisallowedMsg;\n } else if (this.wallet.isLinkedCard(fi)) {\n return 'wallet.editDisallowedPayment';\n }\n }\n});\n\n\n_squid.$Model;\n\n_squid.$promise;\n\n_squid.$util;\n\n_squid.$config;\n\n_checkout.$CheckoutSessionModel;\n\n_wallet.$WalletModel;\n\n_dist.$renderContent;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/gdprCookieBanner/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$GDPRCookieBannerModel = exports.isGdprValid = exports.testGdprBannerCookie = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar testGdprBannerCookie = exports.testGdprBannerCookie = function testGdprBannerCookie(cookies) {\n return (/(^|;\\s*)cookie_prefs=/.test(cookies)\n );\n};\n\nvar isGdprValid = exports.isGdprValid = function isGdprValid() {\n if (_squid.$util.param('forceGDPR')) {\n return true;\n }\n\n var country = _squid.$locale.country;\n\n return _squid.$util.getProperty(_squid.$config, 'GDPR.cookieBanner', { 'default': false }) && _squid.$util.getProperty(_squid.$config, 'GDPR.countries', { 'default': [] }).indexOf(country) > -1;\n};\n\nvar $GDPRCookieBannerModel = exports.$GDPRCookieBannerModel = _squid.$Model.extend('$GDPRCookieBannerModel', {\n api: new _squid.$Api({\n uri: '/api/cookieBanner'\n }),\n\n /**\n * Handles the logic for when to fetch the banner and when to return\n * Don't repeat the call for same country\n * Don't return the banner if not PXP check\n * @returns {Promise} resolves an object\n */\n getBanner: function getBanner() {\n var _this = this;\n\n // API is cached on country. Return current result if already present\n if (this.lastResult && this.lastCountry === _squid.$locale.country && this.lastLang === _squid.$locale.lang) {\n return this.lastResult;\n }\n\n // Invalidate the model to make a fresh call\n this.invalidate();\n\n // Log if the user has cookie indicating a previous interaction with the cookie banner\n if (testGdprBannerCookie(document.cookie)) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GDPR_banner',\n to: 'GDPR_banner_has_cookie'\n });\n }\n\n // Cache the result promise and params\n this.lastCountry = _squid.$locale.country;\n this.lastLang = _squid.$locale.lang;\n this.lastResult = this.retrieve().then(function (res) {\n var html = res.html,\n css = res.css,\n js = res.js;\n\n\n if (!html || !js || !css) {\n _logger.$logger.info('gdpr_response_missing_props', {\n html: !!html,\n js: !!js,\n css: !!css\n });\n _this.reset();\n return;\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: 'GDPR_banner',\n to: 'GDPR_banner_shown'\n });\n\n return { html: html, css: css, js: js };\n });\n\n return this.lastResult;\n },\n reset: function reset() {\n this.html = '';\n this.css = '';\n this.js = '';\n },\n shown: function shown() {\n return !!this.html;\n },\n\n // Check if a banner was shown in the flow.\n // SOME EDGE CASES:\n // Will not update when the user clicks to accept the banner, and it closes\n // Will update if retrieve is called with a new country and blank data is returned\n hasBanner: function hasBanner() {\n var _this2 = this;\n\n // check config flag\n // check if already populated\n // make call again and let regular logic populate html\n // return boolean\n\n if (!isGdprValid()) {\n return _squid.$promise.resolve(false);\n }\n if (this.html) {\n return _squid.$promise.resolve(this.shown());\n }\n return this.getBanner().then(function () {\n return _this2.shown();\n });\n }\n});\n\nangular.value(\"testGdprBannerCookie\", testGdprBannerCookie);\nangular.value(\"isGdprValid\", isGdprValid);\nangular.value(\"$GDPRCookieBannerModel\", $GDPRCookieBannerModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$locale;\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$promise;\n\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/inventory/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$InventoryModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $InventoryModel = exports.$InventoryModel = _squid.$Model.extend('$InventoryModel', {\n api: new _squid.$Api({\n uri: '/api/catalog/:id/item/',\n postAttempts: 2,\n cache: true\n }),\n\n setInvetoryItems: function setInvetoryItems(inventoryItems) {\n this.inventoryItems = inventoryItems;\n },\n\n getInventoryItems: function getInventoryItems() {\n return this.inventoryItems;\n }\n});\n\nangular.value(\"$InventoryModel\", $InventoryModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/marketingoffer/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$CreditOfferModel = exports.$MemberSegmentModel = exports.$fireMORSBeacon = exports.$MessageDiscoverModel = exports.$MarketingOfferModel = undefined;\n\nvar _uuid = __webpack_require__(\"../node_modules/node-uuid/uuid.js\");\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $MarketingOfferModel = exports.$MarketingOfferModel = _squid.$Model.extend('$MarketingOfferModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/offer/search-ads',\n postAttempts: 1,\n cache: true\n }),\n init: function init() {\n this.setProperties({ ads: [] });\n this.meta = { populated: false };\n },\n onPopulate: function onPopulate() {\n var _this = this;\n\n if (this.targetPlacements && this.targetPlacements[0]) {\n var targetAd = this.ads.find(function (ad) {\n return ad.valid && ad.campaign.adunit_id === _this.targetPlacements[0].placement_code;\n });\n\n this.ad = undefined;\n if (targetAd) {\n var ad = {};\n var nvpContent = targetAd && targetAd.content && targetAd.content.nvp;\n\n nvpContent.forEach(function (obj) {\n ad[obj.name] = obj.value;\n });\n ad['impressionUrl'] = targetAd && targetAd.tracking && targetAd.tracking.impression_url;\n ad['clickUrl'] = targetAd && targetAd.tracking && targetAd.tracking.click_url;\n ad['campaignId'] = targetAd && targetAd.campaign && targetAd.campaign.campaign_id;\n ad['buyItemId'] = targetAd && targetAd.campaign && targetAd.campaign.buy_item_id;\n ad['placementCode'] = targetAd && targetAd.campaign && targetAd.campaign.adunit_id;\n this.ad = ad;\n }\n }\n },\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.cacheParam) {\n this.cacheParam.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n serialize: function serialize() {\n return {\n 'site': this.site,\n 'locale': this.locale,\n 'si': this.si,\n 'visit_id': _uuid2['default'].v4(),\n 'page': this.page,\n 'epu': this.payer,\n 'pu_type': this.puType || 'ANONYMOUS',\n 'country_code': this.countryCode,\n 'payment_context': {\n 'total_transaction_amount': this.totalTransactionAmount,\n 'total_shipping_amount': this.totalShippingAmount,\n 'business_case': 'NONE',\n 'business_case_variation': '',\n 'validate_existing_offer': 'false',\n 'payment_units': [{\n 'transaction_amount': this.totalTransactionAmount,\n 'transaction_id': '',\n 'encrypted_transaction_id': '',\n 'activity_id': '',\n 'payee': {\n 'pu_type': 'BUSINESS',\n 'country_code': this.countryCode,\n 'epu': this.payee,\n 'pu': ''\n }\n }]\n },\n 'target_placements': this.targetPlacements,\n 'wallet_instruments': this.walletInstruments,\n 'addl_property_installments_not_allowed': this.installmentsNotAllowed\n };\n },\n getTargetAd: function getTargetAd() {\n return this.ad;\n },\n isAdFound: function isAdFound() {\n if (this.ad) {\n for (var property in this.ad) {\n if (this.ad.hasOwnProperty(property)) {\n return true;\n }\n }\n }\n return false;\n }\n});\n\nvar $MessageDiscoverModel = exports.$MessageDiscoverModel = _squid.$Model.extend('$MessageDiscoverModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/offer/discover-messages',\n postAttempts: 1\n })\n});\n\nvar $fireMORSBeacon = exports.$fireMORSBeacon = {\n fireBeacon: function fireBeacon(uri) {\n var img = document.createElement('img');\n\n img.setAttribute('src', uri);\n document.body.appendChild(img);\n return;\n }\n};\n\nvar $MemberSegmentModel = exports.$MemberSegmentModel = _squid.$Model.extend('$MemberSegmentModel', {\n api: new _squid.$Api({\n uri: '/api/segment/memberSegment',\n postAttempts: 1\n }),\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n getMemberSegment: function getMemberSegment() {\n return this.memberSegment;\n },\n getCreditOffer: function getCreditOffer() {\n return this.creditOffer;\n },\n isNewMember: function isNewMember() {\n return this.memberSegment === 'NEW_MEMBER' || this.memberSegment === 'YOUNG_MEMBER';\n },\n isExistingMember: function isExistingMember() {\n return this.memberSegment === 'EXISTING_MEMBER';\n },\n // Member Segments that are eligble for the New Experience\n isEligibleForExperimentation: function isEligibleForExperimentation() {\n var eligibleMemberSegments = _squid.$config.memberSegments;\n\n return eligibleMemberSegments.indexOf(this.memberSegment) > -1;\n }\n});\n\nvar $CreditOfferModel = exports.$CreditOfferModel = $MessageDiscoverModel.extend('$CreditOfferModel', {\n init: function init() {\n this.setProperties({\n bannerMessages: [],\n interstitialMessages: []\n });\n },\n populate: function populate(result) {\n var _this2 = this;\n\n if (result && result.touchpoint_messages) {\n var touchpoint_messages = result.touchpoint_messages.find(function (element) {\n return element.touchpoint_code === _this2.touchpoint;\n });\n\n this.storeMessages(touchpoint_messages);\n }\n },\n storeMessages: function storeMessages(touchpoint_messages) {\n if (touchpoint_messages) {\n this.viewName = touchpoint_messages.view_name;\n\n if (touchpoint_messages.messages) {\n var messages = touchpoint_messages.messages;\n\n for (var i = 0; i < touchpoint_messages.messages.length; i++) {\n var presentmentType = messages[i].content.json.PresentmentType;\n\n if (presentmentType === 'Banner') {\n this.bannerMessages.push(messages[i]);\n } else if (presentmentType === 'Interstitial') {\n this.interstitialMessages.push(messages[i]);\n }\n }\n }\n }\n },\n getBannerCount: function getBannerCount() {\n return this.bannerMessages.length;\n },\n hasBannerMessage: function hasBannerMessage() {\n return this.getBannerCount() > 0;\n },\n getInterstitialCount: function getInterstitialCount() {\n return this.interstitialMessages.length;\n },\n hasInterstitialMessage: function hasInterstitialMessage() {\n return this.getInterstitialCount() > 0;\n },\n getTouchpointCode: function getTouchpointCode() {\n return this.touchpoint;\n },\n getBannerMessage: function getBannerMessage(i) {\n i = !i ? 0 : i;\n\n if (this.getBannerCount() > i) {\n return this.bannerMessages[i];\n }\n return null;\n },\n getInterstitialMessage: function getInterstitialMessage(i) {\n i = !i ? 0 : i;\n\n if (this.getInterstitialCount() > i) {\n return this.interstitialMessages[i];\n }\n return null;\n },\n getInterstitialContent: function getInterstitialContent() {\n var interstitialContent = {};\n\n if (this.hasInterstitialMessage()) {\n var interstitialMessage = this.getInterstitialMessage().content.json;\n\n _logger.$logger.info('interstitial content', interstitialMessage);\n interstitialContent.messageId = 'PS-' + interstitialMessage['MessageDescription'];\n interstitialContent.bodyText = interstitialMessage['HeadlineText'];\n interstitialContent.bodyText2 = interstitialMessage['TaglineText'];\n interstitialContent.termsText = interstitialMessage['TermsText'];\n interstitialContent.termsText2 = interstitialMessage['TermsText2'];\n interstitialContent.termsLink = interstitialMessage['TermsLink'];\n interstitialContent.termsLinkText = interstitialMessage['TermsLinkText'];\n interstitialContent.ctaText = interstitialMessage['CTAText'];\n }\n return interstitialContent;\n },\n fireInterstitialBeacon: function fireInterstitialBeacon() {\n if (this.hasInterstitialMessage()) {\n var impressionUrl = this.getInterstitialMessage().tracking_details.impression_url;\n\n _logger.$logger.info('interstitial impressionUrl', impressionUrl);\n $fireMORSBeacon.fireBeacon(impressionUrl);\n }\n },\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.application_context) {\n this.application_context.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n serialize: function serialize() {\n return {\n 'country_code': this.locale.country,\n 'language': this.locale.lang + '_' + this.locale.country,\n 'identity_context': [{\n 'type': 'PAYER_ID',\n 'value': this.payer\n }, {\n 'type': 'MERCHANT_PAYER_ID',\n 'value': this.payee\n }],\n 'recommendation_context': {\n 'view_names': this.view_names ? this.view_names : [],\n 'touchpoint_details': [{\n 'code': this.touchpoint,\n 'message_count': this.message_count ? this.message_count : 1\n }]\n },\n 'application_context': this.application_context\n };\n }\n});\n\nangular.value(\"$MarketingOfferModel\", $MarketingOfferModel);\nangular.value(\"$MessageDiscoverModel\", $MessageDiscoverModel);\nangular.value(\"$fireMORSBeacon\", $fireMORSBeacon);\nangular.value(\"$MemberSegmentModel\", $MemberSegmentModel);\nangular.value(\"$CreditOfferModel\", $CreditOfferModel);\n_logger.$logger;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$config;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoMORSCreditBannerUtils = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _ = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $xoMORSCreditBannerUtils = exports.$xoMORSCreditBannerUtils = {\n /**\n * Returns if eligible for MORS call\n * @param {Object} args\n * @param {CheckoutSessionModel} args.checkoutSession - Populated $CheckoutSessionModel\n * @returns {Boolean} flag showing whether to call MORS or not\n */\n eligible: function eligible(_ref) {\n var checkoutSession = _ref.checkoutSession;\n\n var hasCredit = checkoutSession.fundingOptions.hasCredit();\n\n return _squid.$locale.country === 'US' && (checkoutSession.creditOffer || hasCredit);\n },\n\n\n /**\n * Input parameters needed to generate payload to call MORS\n * @typedef {Object} MorsInput\n * @property {CheckoutCartModel} checkoutCart - Populated $CheckoutCartModel\n * @property {CheckoutSessionModel} checkoutSession - Populated $CheckoutSessionModel\n * @property {CheckoutPayeeModel} payee - Populated $CheckoutPayeeModel\n * @property {Object} locale - The buyer's locale. Most likely will want to pass in $locale\n * @property {Boolean} isBillingNoPurchase - Flag indicating if purchase is of type billing with no purchase\n * @property {String} placementCode - MORS parameter. (Probably) a code that indicates which part of the page the ad will be used in\n * @property {String} pu_type - MORS parameter. (Probably) a classification of the account type the ad is for\n * @property {Array} presentation_types - MORS parameter. (Probably) some codes targeting the types of ads to search for\n */\n\n /**\n * Make a call to MORS for credit banner info\n * Some caveats on usage:\n * - expects user to be logged in and checkout session to already be populated\n * @param {MorsInput} morsInput - data needed to call MORS\n * @param {Object} options - options on how to make the API call\n * @param {Boolean} options.silent - have the MORS call be silent (no spinner)\n *\n * @returns {Promise}\n */\n getMorsCreditBanner: function getMorsCreditBanner(morsInput) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$silent = _ref2.silent,\n silent = _ref2$silent === undefined ? true : _ref2$silent;\n\n var morsParams = $xoMORSCreditBannerUtils.getMorsParametersForCreditBanner(morsInput);\n var cacheId = morsParams.cacheId;\n var marketingOfferModel = new _.$MarketingOfferModel(morsParams);\n\n return marketingOfferModel.save({\n silent: silent,\n params: {\n cacheToken: cacheId,\n txnAmount: morsParams.totalTransactionAmount.value\n },\n transientError: true,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('MORS_response', result);\n return marketingOfferModel;\n },\n error: function error(err) {\n _logger.$logger.error('MORS_api_failure_credit', { error: err });\n throw err;\n }\n });\n },\n\n /**\n * getMorsParametersForCreditBanner\n * Returns an object with all the parameters needed for calling MORS\n * @param {MorsInput} morsInput - data needed to call MORS\n *\n * @returns {Object} Various MORS params, formatted for calling the API\n */\n getMorsParametersForCreditBanner: function getMorsParametersForCreditBanner(_ref3) {\n var checkoutCart = _ref3.checkoutCart,\n checkoutSession = _ref3.checkoutSession,\n payee = _ref3.payee,\n locale = _ref3.locale,\n isBillingNoPurchase = _ref3.isBillingNoPurchase,\n _ref3$placementCode = _ref3.placementCode,\n placementCode = _ref3$placementCode === undefined ? '210004' : _ref3$placementCode,\n _ref3$pu_type = _ref3.pu_type,\n pu_type = _ref3$pu_type === undefined ? 'PERSONAL' : _ref3$pu_type,\n _ref3$presentation_ty = _ref3.presentation_types,\n presentation_types = _ref3$presentation_ty === undefined ? ['PayPalCreditCheckout'] : _ref3$presentation_ty;\n\n _logger.$logger.debug('xoMORSCreditBannerUtils: Composing MORS parameters for credit banner');\n var isCreditInWallet = false;\n\n if (isBillingNoPurchase) {\n isCreditInWallet = checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = checkoutSession.get('fundingOptions.plans', []);\n\n if (plans) {\n isCreditInWallet = plans.find(function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n }\n\n var morsCacheId = checkoutSession.id + '-' + placementCode + '-' + !!isCreditInWallet;\n var walletInstruments = [];\n\n if (isCreditInWallet) {\n walletInstruments.push({\n financial_instrument_type: 'FI_PAYPAL_CREDIT',\n financial_instrument_product_type: 'PI_TYPE_CREDIT_TXN_CARD_BML',\n preferred: (typeof isCreditInWallet === 'undefined' ? 'undefined' : _typeof(isCreditInWallet)) === 'object' ? isCreditInWallet.isPreferred : undefined,\n out_of_wallet: false\n });\n }\n\n return {\n countryCode: locale.country,\n cache: true,\n cacheId: morsCacheId,\n cacheParam: [{ name: 'cacheToken', value: morsCacheId }, {\n name: 'txnAmount',\n value: (checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }],\n page: 'HERMES_RYI_PAGE',\n site: 'HERMES_RYI_PAGE',\n puType: pu_type,\n totalTransactionAmount: {\n currency_code: checkoutCart.get('purchase.amounts.total.currency_code', ''),\n value: (checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n totalShippingAmount: {\n currency_code: checkoutCart.get('purchase.amounts.total.currency_code', ''),\n value: (checkoutCart.get('purchase.amounts.shipping.amount', 0) * 100).toFixed(0)\n },\n payee: payee.merchant.id || '',\n payer: checkoutSession.payer.id || '',\n si: checkoutSession.id || '',\n targetPlacements: [{\n placement_code: placementCode || '',\n presentation_types: presentation_types || ''\n }],\n walletInstruments: walletInstruments,\n installmentsNotAllowed: !checkoutSession.creditInstallmentOffer\n };\n },\n mapResponseToCreditBanner: function mapResponseToCreditBanner(ad, shouldShowPassiveBanner) {\n var banner = {};\n\n banner.offerType = this.morsOfferTypeToCreditType(ad['offertype']);\n banner.logo = ad['Logo'];\n banner.termsText = this.formatBannerField(ad['TermsText']);\n banner.termsLink = ad['TermsLink'];\n banner.termsLinkText = ad['TermsLinkText'];\n if (!shouldShowPassiveBanner) {\n banner.bodyText = this.formatBannerField(ad['OfferText1']);\n banner.bodyText2 = this.formatBannerField(ad['OfferText2']);\n banner.ctaText = this.formatBannerField(ad['CTAText']);\n } else {\n banner.ctaText = this.formatBannerField(ad['OfferText1']);\n banner.bodyText = this.formatBannerField(ad['OfferText2']);\n }\n banner.messageId = ad['MessageDescription'] ? 'PS-' + ad['MessageDescription'] : 'CS-' + ad['MessageType'] + '-' + ad['offertype'];\n return banner;\n },\n formatBannerField: function formatBannerField(content) {\n if (angular.isString(content)) {\n // Ensure \"PayPal Credit\" does not wrap\n content = _angular.$sce.trustAsHtml(content.replace(/PayPal Credit/g, 'PayPal Credit'));\n }\n return content;\n },\n morsOfferTypeToCreditType: function morsOfferTypeToCreditType(morsOfferType) {\n var CREDIT_TYPE = {\n CORE: 'CORE',\n SAC: 'SAC',\n NI: 'NI',\n EZP: 'EZP',\n BA: 'BA'\n };\n\n switch (morsOfferType) {\n case 'CORE':\n return CREDIT_TYPE.CORE;\n case 'SAC':\n return CREDIT_TYPE.SAC;\n case 'NI':\n return CREDIT_TYPE.NI;\n case 'PALA':\n return CREDIT_TYPE.EZP;\n default:\n _logger.$logger.warn('unknown_credit_type');\n return;\n }\n }\n};\n\nangular.value(\"$xoMORSCreditBannerUtils\", $xoMORSCreditBannerUtils);\n_angular.$sce;\n\n_logger.$logger;\n\n_.$MarketingOfferModel;\n\n_squid.$locale;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/newMember/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$NewMemberEligibility = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _shippingMethod = __webpack_require__(\"../node_modules/xo-models/src/shippingMethod/index.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar control = 'control';\nvar ineligible = 'ineligible';\nvar one_page = 'one_page';\nvar design_2 = 'design_2';\nvar design_3 = 'design_3';\n\nvar TREATMENT_PATTERNS = {\n CONTROL: /xo_hermes_\\w*_member_control/,\n ONE_PAGE: /xo_hermes_\\w*_member_treatment_1/,\n DESIGN_2: /xo_hermes_\\w*_member_treatment_3/,\n DESIGN_3: /xo_hermes_\\w*_member_treatment_4/\n};\n\nvar mapTreatment = function mapTreatment(treatment) {\n if (!treatment) {\n return;\n }\n\n if (TREATMENT_PATTERNS.ONE_PAGE.test(treatment)) {\n return one_page;\n }\n\n if (TREATMENT_PATTERNS.DESIGN_2.test(treatment)) {\n return design_2;\n }\n\n if (TREATMENT_PATTERNS.DESIGN_3.test(treatment)) {\n return design_3;\n }\n};\n\nvar getSegmentParameters = function getSegmentParameters(token) {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token)\n }).then(function () {\n var data = {\n page: 'HERMES_RYI_PAGE',\n site: 'HERMES_RYI_PAGE',\n locale: _squid.$locale.lang + '_' + _squid.$locale.country,\n puType: 'PERSONAL',\n visit_id: token,\n si: token,\n payment_context: {\n business_case: 'NONE',\n business_case_variation: '',\n validate_existing_offer: 'false',\n total_transaction_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.total.amount', 0) * 100)\n },\n total_shipping_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.shipping.amount', 0) * 100)\n },\n payment_units: [{\n transaction_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.total.amount', 0) * 100)\n },\n transaction_id: '',\n encrypted_transaction_id: '',\n activity_id: '',\n payee: {\n pu_type: 'BUSINESS',\n country_code: models.checkoutAppDataModel.get('merchant.merchant_country') || '',\n epu: models.checkoutPayeeModel.merchant.id || '',\n pu: ''\n }\n }]\n },\n target_placements: [{\n placement_code: '210005',\n presentation_types: ['decision']\n }]\n };\n\n return data;\n });\n};\n\nvar isMemberSegmentEligible = function isMemberSegmentEligible(token) {\n var memberSegmentModel = _marketingoffer.$MemberSegmentModel.instance();\n var memberSegment = memberSegmentModel.getMemberSegment();\n\n if (memberSegment !== undefined) {\n return _squid.$promise.resolve(memberSegmentModel.isEligibleForExperimentation());\n }\n\n return getSegmentParameters(token).then(function (data) {\n memberSegmentModel.invalidate();\n return memberSegmentModel.save({\n silent: true,\n data: data,\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return;\n }\n }\n }).then(function () {\n return memberSegmentModel.isEligibleForExperimentation();\n })['catch'](function () {\n return false;\n });\n });\n};\n\nvar eligibility = function eligibility(token, _ref) {\n var authModel = _ref.authModel,\n checkoutSessionModel = _ref.checkoutSessionModel,\n checkoutAppDataModel = _ref.checkoutAppDataModel,\n checkoutCartModel = _ref.checkoutCartModel,\n checkoutPayeeModel = _ref.checkoutPayeeModel,\n shippingRuleSummaryModel = _ref.shippingRuleSummaryModel;\n var plan = checkoutSessionModel.plan,\n negBalances = checkoutSessionModel.negBalances;\n\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n\n // Ineligible reasons:\n // - multiple plans\n // - negative balance\n // - billing agreement\n // - third Party wallet (Baidu, Venmo, etc..)\n // - shipping and tax\n // - second button\n // - Android Pay\n // - Gambling\n // - Default funding source is not card\n var isMultiplePlans = plans && plans.length > 1;\n var isNegativeBalance = negBalances && negBalances.length !== 0;\n var isBilling = checkoutCartModel.isBilling();\n var isThirdParty = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n var isShippingRulesEnabled = shippingRuleSummaryModel.isSnTEnabled;\n var isSecondButton = checkoutAppDataModel.is_second_button_txn;\n var isAPay = checkoutCartModel.isWalletTokenization();\n var isGambling = checkoutPayeeModel.isGambling();\n var isHideShipping = checkoutAppDataModel.flags.hide_shipping_address || !checkoutAppDataModel.flags.shipping_address_required;\n\n // Default funding source needs to be card for now.\n var isSupportedDefaultFundingSource = plan && plan.sources && plan.sources.length === 1 && plan.sources[0].type === 'PAYMENT_CARD';\n\n var eligibilityCriteria = {\n noMultiplePlans: !isMultiplePlans,\n noNegativeBalance: !isNegativeBalance,\n noBilling: !isBilling,\n noThirdParty: !isThirdParty,\n noSnT: !isShippingRulesEnabled,\n noSecondButton: !isSecondButton,\n noAPay: !isAPay,\n noGambling: !isGambling,\n noSupportedDefaultFundingSource: isSupportedDefaultFundingSource,\n noHideShipping: !isHideShipping\n };\n\n var ineligibleReasons = Object.keys(eligibilityCriteria).filter(function (key) {\n return !eligibilityCriteria[key];\n });\n var transactionEligible = ineligibleReasons.length === 0;\n\n if (!transactionEligible) {\n var reasons = ineligibleReasons.join(':');\n\n _logger.$logger.info('checkout_ftpi', {\n from: 'new_member_eligibility',\n to: 'process_new_member_eligibility',\n eligibility_reason: reasons\n });\n for (var _iterator = ineligibleReasons, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref2 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref2 = _i.value;\n }\n\n var reason = _ref2;\n\n _logger.$logger.info('new_member_experience_ineligible_' + reason);\n }\n return _squid.$promise.resolve(ineligible);\n }\n\n // Check member segment\n return isMemberSegmentEligible(token).then(function (eligibleMember) {\n if (!eligibleMember) {\n _logger.$logger.info('new_member_experience_ineligible_member_segment');\n return ineligible;\n }\n\n // if merchant is on blacklist...\n if (_app.$PXPBlacklist.isMerchantBlacklisted(checkoutPayeeModel.get('merchant.id'))) {\n _logger.$logger.info('new_member_experience_ineligible_merchant_blacklisted');\n return control;\n }\n\n var memberSegmentModel = _marketingoffer.$MemberSegmentModel.instance();\n var memberSegment = memberSegmentModel.getMemberSegment();\n\n _logger.$logger.info('new_member_experience_eligible_' + memberSegment);\n\n return (0, _squid.$pxp)('xo_hermes_new_member_journey', {\n 'uid': authModel.buyer_id,\n 'ctx.COUNTRY': authModel.country,\n 'ctx.SEGMENT': memberSegment }, 'xo_hermes_(\\\\w*)_member_treatment_(\\\\d)|xo_hermes_(\\\\w*)_member_control', false, true).then(function (t) {\n if (t) {\n var r = mapTreatment(t.treatment_name);\n\n return r || control;\n } else {\n return control;\n }\n });\n });\n};\n\nvar snt = function snt(models, token) {\n if (_squid.$integration.getConfig('SHOW_SHIPPING_METHOD')) {\n return (0, _squid.$populate)(models, {\n shippingRuleSummaryModel: _shippingMethod.$ShippingRuleSummaryModel.instance(token).retrieve({\n params: {\n merchant_id: models.checkoutPayeeModel.get('merchant.id'),\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code')\n }\n })\n });\n } else {\n models.shippingRuleSummaryModel = {};\n return _squid.$promise.resolve();\n }\n};\n\nvar $NewMemberEligibility = exports.$NewMemberEligibility = _squid.$Model.extend('$NewMemberEligibility', {\n getVariant: function getVariant(token) {\n var _this = this;\n\n if (!(0, _squid.$feature)('newMemberExperience')) {\n return _squid.$promise.resolve(ineligible);\n }\n\n if (_squid.$meta.corp) {\n var nmexp = _squid.$util.param('nmj_exp');\n\n if (nmexp === '1') {\n return _squid.$promise.resolve(one_page);\n } else if (nmexp === '2') {\n return _squid.$promise.resolve(design_2);\n } else if (nmexp === '3') {\n return _squid.$promise.resolve(design_3);\n } else if (nmexp === '0') {\n return _squid.$promise.resolve(control);\n }\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n authModel: _auth.$AuthModel.instance(),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token)\n }).then(function () {\n return snt(models, token);\n }).then(function () {\n // Rerun eligibility if user has changed.\n if (_this.variant && models.authModel.buyer_id === _this.buyerId) {\n return _this.variant;\n }\n\n _this.buyerId = models.authModel.buyer_id;\n return eligibility(token, models).then(function (variant) {\n _this.variant = variant;\n return variant;\n });\n });\n },\n\n isNmj: function isNmj(token) {\n return this.getVariant(token).then(function (variant) {\n if (variant && (variant === 'one_page' || variant === 'design_2' || variant === 'design_3')) {\n return true;\n } else {\n return false;\n }\n });\n },\n\n nmjShowGreyHeader: function nmjShowGreyHeader(token) {\n return this.getVariant(token).then(function (variant) {\n if (variant && (variant === 'design_2' || variant === 'design_3')) {\n return true;\n } else {\n return false;\n }\n });\n },\n\n getMemberSegmentParameters: function getMemberSegmentParameters(token) {\n return getSegmentParameters(token);\n }\n});\n\nangular.value(\"$NewMemberEligibility\", $NewMemberEligibility);\n_squid.$Model;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$feature;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_squid.$integration;\n\n_logger.$logger;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_shippingMethod.$ShippingRuleSummaryModel;\n\n_app.$PXPBlacklist;\n\n_marketingoffer.$MemberSegmentModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_auth.$AuthModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/processorDecline/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.getProcessorDeclineRetryEligibility = getProcessorDeclineRetryEligibility;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar INELIGIBLE = _squid.$promise.resolve(false);\nvar lastBuyerId = null;\n\n// Check eligibility for processor decline retry feature\n// First checks if feature eligibility is met, then PXP eligibility is met\nfunction getProcessorDeclineRetryEligibility(token, checkoutSession) {\n if (!(0, _squid.$feature)('cardBackup')) {\n return INELIGIBLE;\n }\n\n // TODO: Refactor the eligibility rules to a set of common rules\n var models = {};\n\n return (0, _squid.$populate)(models, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _checkout.$CheckoutCartModel.instance(token),\n checkoutPayee: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n var checkoutCart = models.checkoutCart,\n checkoutPayee = models.checkoutPayee,\n checkoutAppData = models.checkoutAppData;\n\n var plans = checkoutSession.get('fundingOptions.plans', []);\n var moreThanOneCard = plans.filter(function (fi) {\n return fi.primaryFs.type === 'CARD';\n }).length < 2;\n\n // exclude rewards from the eligibility list\n var hasRewards = plans.filter(function (fi) {\n return fi && fi.rewards !== undefined;\n }).length > 0;\n\n // See https://engineering.paypalcorp.com/confluence/display/HellsKitchen/Hermes+Processor+Decline+Retry for eligibility reasons\n var isGambling = checkoutPayee.isGambling();\n var isBilling = checkoutCart.isBilling();\n // We're only sure that Sale transactions will go onto the new payments stack, for now\n var isNotSale = checkoutCart.get('payment_action') !== 'sale';\n var isThirdParty = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n // Exclude all WPS products\n var isWpsOrInvoice = checkoutAppData.get('flags.is_wps_flow') || checkoutAppData.get('flags.is_invoice_flow');\n // We will need to confirm functionality for this before we can enable for this feature\n var isMultiSellerPurchase = checkoutCart.isMultiSellerPurchase();\n var hasInstallments = checkoutSession.installments && checkoutSession.installments.length > 1;\n var involvedCurrencies = plans.reduce(function (currencies, plan) {\n currencies[plan.primaryFs.amount.currency_code] = 1;\n return currencies;\n }, {});\n // Buyer promo email routing through checkoutserv, downstream does not support\n var hasBuyerPromoEmail = checkoutAppData.get('flags.display_buyer_email_promotional_opt_in');\n\n if (checkoutCart.get('purchase.amounts.total.currency_code')) {\n involvedCurrencies[checkoutCart.purchase.amounts.total.currency_code] = 1;\n }\n\n var ineligibilityCriteria = {\n isGambling: isGambling,\n moreThanOneCard: moreThanOneCard,\n hasRewards: hasRewards,\n isBilling: isBilling,\n isNotSale: isNotSale,\n isThirdParty: isThirdParty,\n isWpsOrInvoice: isWpsOrInvoice,\n isMultiSellerPurchase: isMultiSellerPurchase,\n hasInstallments: hasInstallments,\n currencyConversion: Object.keys(involvedCurrencies).length > 1,\n hasBuyerPromoEmail: hasBuyerPromoEmail\n };\n var ineligibleReasons = Object.keys(ineligibilityCriteria).filter(function (key) {\n return ineligibilityCriteria[key];\n });\n var eligible = ineligibleReasons.length === 0;\n\n // Logging for FPTI\n _logger.$logger.info('checkout_fpti', {\n from: 'processor_decline_retry',\n // This logs whether user is eligible by Hermes criteria\n to: 'processor_decline_retry_' + (eligible ? 'eligible' : 'ineligible')\n });\n\n if (!eligible) {\n // This logs the overall result of the eligibility check\n _logger.$logger.info('processor_decline_retry_ineligible', {\n reasons: ineligibleReasons.join()\n });\n }\n\n return eligible;\n }).then(function (featureEligible) {\n // BuyerId is needed to make sure pxp is reloaded if a new user logs in.\n // Refactor: Make this a common pxp model that is invalidated on logout\n var buyerId = models.auth.buyerId;\n\n var sameBuyer = buyerId === lastBuyerId;\n\n lastBuyerId = buyerId;\n\n if (!featureEligible) {\n return false;\n }\n\n // Only run the PXP if the feature is eligible, as requested from analytics\n return (0, _squid.$pxp)('xo_hermes_processor_decline_retry', {}, 'xo_hermes_processor_decline_retry_treatment', sameBuyer ? false : true, true).then(function (pxpRes) {\n if (!pxpRes) {\n _logger.$logger.info('processor_decline_retry_ineligible', {\n pxpIneligible: true\n });\n }\n\n return !!pxpRes;\n });\n }).then(function (eligibleWithPxp) {\n if (eligibleWithPxp) {\n _logger.$logger.info('processor_decline_retry_eligible');\n }\n return eligibleWithPxp;\n });\n}\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_logger.$logger;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_auth.$AuthModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/profilemanagement/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$MerchantPreferenceModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $MerchantPreferenceModel = exports.$MerchantPreferenceModel = _squid.$Model.extend('$MerchantPreferenceModel', {\n init: function init() {\n this._super.init.apply(this);\n\n this.setProperties({\n rm: _squid.$util.param('rm'), // Return Method\n return_url: _squid.$util.param('return'),\n auto_return: {\n enabled: false\n },\n pdt: {\n enabled: false\n }\n });\n },\n\n\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: '/api/profilemanagement/:id/getMerchantPreferences'\n }),\n\n autoReturn: function autoReturn() {\n return this.auto_return.enabled;\n },\n pdtEnabled: function pdtEnabled() {\n return this.pdt && this.pdt.enabled;\n },\n returnUrl: function returnUrl() {\n return this.return_url || this.auto_return.url;\n },\n\n\n /**\n * 0 – redirect using GET method ( default behavior )\n * 1 – redirect using the GET method, but no payment variables are included\n * 2 – redirect using the POST method, and include all payment variables\n */\n returnMethod: function returnMethod() {\n if (this.rm === '2') {\n return this.pdtEnabled() ? 'GET' : 'POST';\n }\n\n return 'GET';\n },\n returnMethodSupported: function returnMethodSupported() {\n return this.returnMethod() === 'GET';\n },\n\n\n /**\n * Determines if payment details need to be sent back to the merchant.\n * @returns {boolean}\n */\n postPaymentData: function postPaymentData() {\n return this.rm === '2' && !this.pdtEnabled() && this.returnUrl();\n },\n\n\n // charset of merchant having in profile\n charSet: function charSet() {\n return this.charset;\n }\n});\n\nangular.value(\"$MerchantPreferenceModel\", $MerchantPreferenceModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$config;\n\n_squid.$util;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/shippingMethod/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ShippingRuleSummaryModel = exports.$ShippingMethodModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $ShippingMethodModel = exports.$ShippingMethodModel = _squid.$Model.extend('$ShippingMethodModel', {\n api: new _squid.$Api({\n uri: '/api/shippingtax/charges'\n }),\n\n getShippingMethodId: function getShippingMethodId(shippingMethodType) {\n var shippingMethodsMap = {\n DEFAULT: '0',\n AIR_SERVICE: '1',\n ECONOMY: '2',\n EXPEDITED_AIR_SERVICE: '3',\n EXPEDITED_FLAT_RATE_SHIPPING: '4',\n EXPRESS: '5',\n EXPRESS_DOMESTIC: '6',\n FREE_SHIPPING: '7',\n GROUND: '8',\n GLOBAL_PRIORITY: '9',\n INTERNATIONAL_ECONOMY: '10',\n INTERNATIONAL_EXPEDITED: '11',\n INTERNATIONAL_EXPRESS: '12',\n INTERNATIONAL_EXPRESS_AIR: '13',\n INTERNATIONAL_PRIORITY_AIR: '14',\n NEXT_DAY: '15',\n NEXT_DAY_AIR: '16',\n NEXT_DAY_AIR_ECONOMY: '17',\n ONE_DAY_SHIPPING: '18',\n OVERNIGHT: '19',\n OVERNIGHT_FLAT_RATE_SHIPPING: '20',\n PICKUP: '21',\n PRIORITY: '22',\n RUSH_DELIVERY: '23',\n STANDARD_DOMESTIC: '24',\n STANDARD_EXPEDITED: '25',\n STANDARD_FLAT_RATE_SHIPPING: '26',\n STANDARD_INTERNATIONAL: '27',\n STANDARD_SHIPPING: '28',\n STORE_PICKUP: '29',\n TWO_DAY_SHIPPING: '30',\n WORLDWIDE_SHIPPING: '31',\n TWO_DAY_AIR: '32'\n };\n\n return shippingMethodsMap[shippingMethodType];\n },\n\n isStorePickUp: function isStorePickUp(shipping_method_type) {\n return shipping_method_type === 'STORE_PICKUP' || shipping_method_type === 'PICKUP';\n }\n});\n\nvar $ShippingRuleSummaryModel = exports.$ShippingRuleSummaryModel = _squid.$Model.extend('$ShippingRuleSummaryModel', {\n api: new _squid.$Api({\n uri: '/api/shippingtax/:id/rulesSummary'\n })\n});\n\nangular.value(\"$ShippingMethodModel\", $ShippingMethodModel);\nangular.value(\"$ShippingRuleSummaryModel\", $ShippingRuleSummaryModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/subscription/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$SubscriptionModel = exports.$CreateBAModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $CreateBAModel = exports.$CreateBAModel = _squid.$Model.extend('$CreateBAModel', {\n api: new _squid.$Api({\n uri: '/api/billagmt',\n postAttempts: 3\n })\n});\n\nvar $SubscriptionModel = exports.$SubscriptionModel = _squid.$Model.extend('$SubscriptionModel', {\n api: new _squid.$Api({\n uri: '/api/billagmt/:id',\n postAttempts: 3,\n cache: true\n })\n});\n\nangular.value(\"$CreateBAModel\", $CreateBAModel);\nangular.value(\"$SubscriptionModel\", $SubscriptionModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/user/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$AuthConsentModel = exports.$UserPhotoModel = exports.$EConsentModel = exports.$WaxUserModel = exports.$PatchPhoneModel = exports.$AddKYCModel = exports.$ValidatePhoneModel = exports.$UserInfoModel = exports.$CheckoutInputDataModel = exports.$CheckoutClientDataModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $CheckoutClientDataModel = exports.$CheckoutClientDataModel = _squid.$Model.extend('$CheckoutClientDataModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/clientData'\n }),\n\n merchantIdentityData: function merchantIdentityData() {\n return {\n email: this.email,\n brand_name: this.display_name,\n logo_uri: this.logo_uri,\n identity_uri: this.identity_uri\n };\n },\n\n validateClient: function validateClient() {\n if (this.partner_id && this.identity_uri) {\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: 'invalid_client'\n };\n }\n },\n validateRedirectUri: function validateRedirectUri(redirectUrl) {\n if (this.identity_uri && this.identity_uri.indexOf(redirectUrl) > -1) {\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: 'invalid_redirect_url'\n };\n }\n }\n});\n\nvar ACTION = {\n login: 'login',\n resolve: 'resolve',\n addCard: 'addCard',\n addBank: 'addBank',\n changeCurrencyConv: 'changeCurrencyConv',\n signup: 'signup',\n mandate: 'mandate',\n addCredit: 'addCredit',\n ulReturn: 'ulReturn',\n creditReturn: 'creditReturn',\n guestCurrencyConversion: 'guestCurrencyConversion',\n guestAuthentication: 'guestAuthentication',\n compliance: 'compliance'\n};\n\nvar $CheckoutInputDataModel = exports.$CheckoutInputDataModel = _squid.$Model.extend('$CheckoutInputDataModel', {\n init: function init() {\n this._super.init.apply(this);\n this.setProperties({\n client_id: _squid.$util.param('client_id'),\n action: _squid.$util.param('action'),\n redirect_uri: _squid.$util.param('redirect_uri'),\n scope: _squid.$util.param('scope'),\n state: _squid.$util.param('state'),\n flow: _squid.$util.param('flow'),\n payer_id: _squid.$util.param('payer_id'),\n mandate_reference_number: _squid.$util.param('mandate_reference_number'),\n funding_option_id: _squid.$util.param('funding_option_id'),\n locale: _squid.$util.param('locale'),\n logout: _squid.$util.param('logout'),\n refresh_parent: _squid.$util.param('refresh_parent'),\n escape_hatch: _squid.$util.param('escape_hatch'),\n failedBecause: _squid.$util.param('failedBecause'),\n redirectReferrer: _squid.$util.param('redirectReferrer'),\n id_token: _squid.$util.param('prox_id'),\n nonce: _squid.$util.param('nonce'),\n hide_rm: _squid.$util.param('hideRM'),\n payloadEnc: _squid.$util.param('payloadEnc'),\n xcancel: _squid.$util.param('x-cancel'),\n xsuccess: _squid.$util.param('x-success')\n });\n },\n\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: '/api/user/:id/payerId'\n }),\n\n isEbayTxn: function isEbayTxn() {\n return Boolean(this.client_id);\n },\n\n validAction: function validAction() {\n var actions = {\n login: 'login',\n resolve: 'resolve',\n addCard: 'addCard',\n addBank: 'addBank',\n changeCurrencyConv: 'changeCurrencyConv',\n signup: 'signup',\n mandate: 'mandate',\n addCredit: 'addCredit',\n ulReturn: 'ulReturn',\n creditReturn: 'creditReturn',\n guestCurrencyConversion: 'guestCurrencyConversion',\n guestAuthentication: 'guestAuthentication',\n compliance: 'compliance'\n };\n\n return actions.hasOwnProperty(this.action);\n },\n\n showRYP: function showRYP() {\n return !this.isEbayTxn();\n },\n\n requiresOAuth: function requiresOAuth() {\n return this.action === ACTION.login || this.action === ACTION.signup;\n },\n\n requiresRedirectUri: function requiresRedirectUri() {\n return this.action === ACTION.mandate || !this.requiresOAuth();\n },\n\n validRedirectUri: function validRedirectUri() {\n if (this.requiresRedirectUri()) {\n return Boolean(this.redirect_uri);\n }\n return true;\n },\n\n validate: function validate() {\n var error;\n var success = true;\n\n if (this.isEbayTxn()) {\n if (!this.validAction()) {\n success = false;\n error = 'invalid_action';\n } else if (!this.validRedirectUri()) {\n success = false;\n error = 'invalid_redirect_uri';\n }\n }\n\n return {\n success: success,\n error: error\n };\n },\n\n errorUrl: function errorUrl(err, errorDesc) {\n var url = this.redirect_uri;\n\n url += url && url.indexOf('?') < 0 ? '?' : '&';\n url += 'state=' + encodeURIComponent(this.state);\n\n if (err) {\n url += '&error=' + err;\n }\n if (errorDesc) {\n url += '&error_description=' + errorDesc;\n }\n\n return url;\n },\n\n successUrl: function successUrl(code) {\n var url = this.redirect_uri;\n\n url += url && url.indexOf('?') < 0 ? '?' : '&';\n url += 'state=' + encodeURIComponent(this.state);\n\n url += '&code=' + code;\n\n return url;\n },\n\n rmEnabled: function rmEnabled(featureEnabled) {\n return featureEnabled && this.action === ACTION.login;\n },\n\n hideRM: function hideRM() {\n return angular.isDefined(this.hide_rm) ? this.hide_rm.toLowerCase() === 'true' : false;\n }\n});\n\nvar $UserInfoModel = exports.$UserInfoModel = _squid.$Model.extend('$UserInfoModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/session'\n })\n});\n\nvar $ValidatePhoneModel = exports.$ValidatePhoneModel = _squid.$Model.extend('$ValidatePhoneModel', {\n api: new _squid.$Api({\n uri: '/api/user/:token/session/validatePhone',\n cache: false\n })\n});\n\nvar $AddKYCModel = exports.$AddKYCModel = _squid.$Model.extend('$AddKYCModel', {\n api: new _squid.$Api({\n uri: '/api/user/:token/session/addKYC'\n })\n});\n\nvar $PatchPhoneModel = exports.$PatchPhoneModel = _squid.$Model.extend('$PatchPhoneModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:token/session/patch',\n cache: false\n })\n});\n\nvar $WaxUserModel = exports.$WaxUserModel = _squid.$Model.extend('$WaxUserModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/waxUser'\n })\n});\n\nvar $EConsentModel = exports.$EConsentModel = _squid.$Model.extend('$EConsentModel', {\n api: new _squid.$Api({\n uri: '/api/user/eConsent'\n }),\n\n invalidateOnLogout: true // invalidate this model when auth.logout() gets called\n});\n\nvar $UserPhotoModel = exports.$UserPhotoModel = _squid.$Model.extend('$UserPhotoModel', {\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: 'api/user/photo'\n }),\n\n invalidateOnLogout: true // invalidate this model when auth.logout() gets called\n});\n\nvar $AuthConsentModel = exports.$AuthConsentModel = _squid.$Model.extend('$AuthConsentModel', {\n api: new _squid.$Api({\n uri: '/api/user/authConsent'\n })\n});\n\nangular.value(\"$CheckoutClientDataModel\", $CheckoutClientDataModel);\nangular.value(\"$CheckoutInputDataModel\", $CheckoutInputDataModel);\nangular.value(\"$UserInfoModel\", $UserInfoModel);\nangular.value(\"$ValidatePhoneModel\", $ValidatePhoneModel);\nangular.value(\"$AddKYCModel\", $AddKYCModel);\nangular.value(\"$PatchPhoneModel\", $PatchPhoneModel);\nangular.value(\"$WaxUserModel\", $WaxUserModel);\nangular.value(\"$EConsentModel\", $EConsentModel);\nangular.value(\"$UserPhotoModel\", $UserPhotoModel);\nangular.value(\"$AuthConsentModel\", $AuthConsentModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/wallet/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$WalletModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _instrument = __webpack_require__(\"../node_modules/xo-models/src/wallet/instrument.js\");\n\n// ID https://engineering.paypalcorp.com/confluence/display/PayPalMediaService/Image+Request+Metadata+Data\nvar imageSizeId = '0';\n\nvar normalize = function normalize(instId) {\n return instId && instId.replace(/-/g, '');\n};\n\nvar imageTypes = ['png', 'jpg', 'gif', 'bmp'];\nvar imageType = function imageType(mimeType) {\n return _squid.$util.find(imageTypes, function (t) {\n return mimeType.indexOf(t) !== -1;\n }) || 'png';\n};\n\n// Network types to check for linked cards\nvar NETWORK_TYPES = {\n CHASE: 'CHASENET'\n};\n\nfunction capFirst(string) {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nfunction getLinkedCapability(cardData) {\n return cardData.fs.capabilities.find(function (cap) {\n return cap.name === 'TOKEN';\n });\n}\n\nvar $WalletModel = exports.$WalletModel = _squid.$Model.extend('$WalletModel', {\n invalidateOnLogout: true,\n api: new _squid.$Api({\n uri: '/api/fi/wallet/wallet'\n }),\n\n getId: function getId(fs) {\n return normalize(fs.instrument_id || fs.id);\n },\n\n getCardMask: function getCardMask(fs) {\n var rep = this.getWalletRepresentation(fs);\n\n if (!rep) {\n return { mask: true };\n }\n\n var selector = rep.type === 'card' ? 'product_class' : 'type';\n var renderedType = void 0;\n\n if (rep.fs[selector] === 'UNKNOWN' || !rep.fs[selector]) {\n renderedType = '';\n } else {\n renderedType = capFirst(rep.fs[selector]) + ' ';\n }\n\n return {\n before: renderedType,\n mask: true,\n after: rep.fs.last_nchars || rep.fs.last_nchars_card_number || ''\n };\n },\n\n /**\n * Returns the wallet API data for a FI given a funding source from the checkoutSession model\n * @returns {Instrument|BankInstrument|null}\n */\n getWalletRepresentation: function getWalletRepresentation(fs) {\n // Balance does not have an ID, so we search for this first\n if (fs.type === 'BALANCE') {\n var currency = fs.amount && fs.amount.currency_code;\n\n var bal = _squid.$util.find(this.balance_accounts, function (b) {\n return b.currency_code === currency;\n });\n\n return bal ? new _instrument.Instrument({\n type: 'balance',\n fs: bal\n }) : null;\n }\n\n // Otherwise, search other types that have IDs\n var id = this.getId(fs);\n\n return this.getById(id);\n },\n\n\n /**\n * Returns the wallet API data for a FI based on the id provided\n * @returns {Instrument|BankInstrument|null} - the model of the FI, if found\n */\n getById: function getById(id) {\n if (!id) {\n return null;\n }\n\n return this.getCardById(id) || this.getBankById(id) || null;\n },\n\n\n /**\n * Return the wallet API data for a FI of a card id provided\n * @returns {Instrument}\n */\n getCardById: function getCardById(id) {\n var card = _squid.$util.find(this.card_accounts, function (c) {\n return normalize(c.id) === id;\n });\n\n return card && new _instrument.Instrument({\n type: 'card',\n fs: card\n });\n },\n\n\n /**\n * Return the wallet API data for a FI of a bank id provided\n * @returns {BankInstrument}\n */\n getBankById: function getBankById(id) {\n var bank = _squid.$util.find(this.bank_accounts, function (b) {\n return normalize(b.id) === id;\n });\n\n return bank && new _instrument.BankInstrument({\n type: 'bank',\n fs: bank\n });\n },\n\n\n getCustomName: function getCustomName(fs) {\n var rep = this.getWalletRepresentation(fs);\n\n if (!rep) {\n return false;\n }\n\n return rep.type === 'card' && rep.fs.issuer && rep.fs.issuer.issuer_product_description;\n },\n\n getCardArt: function getCardArt(fs) {\n try {\n var cardId = this.getId(fs);\n var card = this.getCardById(cardId);\n var primary_content = card.fs.card_art_details.card_art.primary_content;\n\n var base = primary_content.base_cdn_link_path || primary_content.base_cdnlink_path;\n\n var path = base + imageSizeId + '.' + imageType(primary_content.original_mime_type);\n\n return path;\n } catch (e) {\n return null;\n }\n },\n\n /**\n * retrieve list of total balances (each currency is a separate balance account)\n * Notes:\n * 1. Skip balances with '0' amount\n * 2. Since wallet returns amount in \"cents\" - convert it to \"dollars\".\n * For us it's safe to divide by 100 as PayPal doesn't support currencies with more than 2 decimal points.\n * For those currencies with no decimal points - wallet adds two zeros, e.g\n * in case of JPY - 1 JPY will be sent as 100 to the response\n */\n getAmountsOfBalances: function getAmountsOfBalances() {\n var balances = [];\n\n this.get('balance_accounts', []).forEach(function (balanceAccount) {\n var _balanceAccount$sub_b = balanceAccount.sub_balances.find(function (subBalance) {\n return subBalance.type === 'TOTAL_BALANCE';\n }),\n amount = _balanceAccount$sub_b.amount;\n\n if (amount.value !== '0') {\n balances.push({\n value: Number(amount.value) / 100,\n currency: amount.currency\n });\n }\n });\n\n return balances;\n },\n\n isLinkedCard: function isLinkedCard(fi) {\n var id = this.getId(fi);\n var card = this.getCardById(id);\n var hasLinkedCapability = card && !!getLinkedCapability(card);\n\n return hasLinkedCapability;\n },\n\n\n /**\n * Check if the given CI passed is a ChasePay linked card, which means it was added by linking to their Chase account\n */\n isChaseLinkedCard: function isChaseLinkedCard(fi) {\n var id = this.getId(fi);\n var card = this.getCardById(id);\n var linkedCapability = card && getLinkedCapability(card);\n\n if (!linkedCapability) {\n return false;\n }\n\n return linkedCapability.network_contingencies.some(function (networkInfo) {\n return networkInfo.network === NETWORK_TYPES.CHASE;\n });\n }\n});\n\nangular.value(\"$WalletModel\", $WalletModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_instrument.Instrument;\n\n_instrument.BankInstrument;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-models/src/wallet/instrument.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.BankInstrument = exports.Instrument = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n/*\n * Base model for wallet instrument data, to be used as a fallback if more specific\n * model does not exist\n */\nvar Instrument = exports.Instrument = _squid.$Class.extend('Instrument', {\n getName: _squid.$util.noop,\n getLastChars: _squid.$util.noop\n});\n\nvar BankInstrument = exports.BankInstrument = Instrument.extend({\n getName: function getName() {\n return this.get('fs.issuer.name');\n },\n getLastChars: function getLastChars() {\n return this.get('fs.last_nchars');\n }\n});\n\n_squid.$util;\n\n_squid.$Class;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/cartWrapper/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/cart/cartWrapper/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('cartWrapper', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n showAmt: '=?',\n showArrow: '=?',\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n _squid.$util.assert($scope.token, 'Expected token');\n\n (0, _squid.$populate)($scope, {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n });\n }]\n };\n});\n\n_squid.$populate;\n\n_squid.$util;\n\n_index.$CheckoutCartModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/cartWrapper/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n \\n \\n \\n \\n \\n \\n \\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/cartWrapper/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/itemDetails/directive.js\");\n\nvar _showCartDecision = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/showCartDecision.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/ui.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/subscription/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/cart/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoCart', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n\n scope: {\n showCartTotal: '=?',\n renderCartContainer: '=?',\n token: '=?'\n },\n\n controller: ['$scope', function ($scope) {\n\n _squid.$util.assert($scope.token, 'Expected token');\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n payee: _index.$CheckoutPayeeModel.instance($scope.token)\n }).then(function loadCartData() {\n\n var emptyCart = $scope.checkoutCart.get('purchase.items.length', 0) <= 0;\n var cartDesc = $scope.checkoutCart.get('purchase.description');\n\n $scope.note = $scope.checkoutCart.get('note');\n\n // resolve string in descriptions array since the only element may be `null`\n // TODO: fix backend to return a string, to avoid this conditional\n if (cartDesc && angular.isString(cartDesc[0])) {\n cartDesc = cartDesc[0];\n } else {\n cartDesc = '';\n }\n\n $scope.desc = cartDesc;\n $scope.hasItems = !$scope.renderCartContainer && !emptyCart;\n var showCartDetails = !$scope.checkoutAppData.flags.hide_cart_details;\n var notMultiSellerPurchase = !$scope.checkoutCart.isMultiSellerPurchase();\n // Always Render minicart for wps subscription .\n var wpsSubscription = $scope.checkoutAppData.is_wps_subscription_flow();\n var isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n\n $scope.showArrow = (wpsSubscription || showCartDetails && (cartDesc || $scope.hasItems || $scope.note) && notMultiSellerPurchase) && !isSubscriptionsV1;\n\n // add details to render to the checkoutCart items\n $scope.checkoutCart.get('purchase.items', []).forEach(function addDetails(item) {\n item.details = {};\n\n if (item.quantity > 1) {\n item.details.price = item.price.amount;\n item.details.quantity = (0, _squid.formatQuantity)(item.quantity);\n }\n\n if (item.description) {\n if (!item.name) {\n item.name = item.description;\n } else {\n item.details.description = item.description;\n }\n }\n\n // move options to detail section\n if (item.item_option_selections) {\n item.details.hasSelections = true;\n item.details.item_option_selections = item.item_option_selections;\n }\n\n if (item.sku) {\n item.details.sku = item.sku;\n }\n\n item.hasDetails = Object.keys(item.details).length > 0;\n item.details.hasMore = item.hasDetails || item.details.hasSelections;\n });\n\n // Mapping of field name as recieved by API to corresponding property key\n $scope.amountHeaders = {\n 'total': 'header.total',\n 'subtotal': 'header.itemTotal',\n 'tax': 'header.tax',\n 'shipping': 'header.shipping',\n 'insurance': 'header.insurance',\n 'handling_fee': 'header.handling',\n 'shipping_discount': 'header.shippingDiscount',\n 'description': 'header.description',\n 'discount': 'header.discount'\n };\n\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var userAction = $scope.userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && emptyCart;\n\n var purchase = $scope.checkoutCart.purchase;\n var total = purchase && purchase.amounts && purchase.amounts.total;\n\n $scope.isCartTextTotalOrSubTotal = userAction === 'commit' || $scope.showCartTotal === true ? 'header.total' : 'header.subTotal';\n\n return (0, _showCartDecision.showCartDecision)($scope.checkoutAppData.is_wps_subscription_flow() || $scope.checkoutCart.isSubscriptionsV1(), total, $scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (result) {\n $scope.showAmt = result.showAmt;\n $scope.showCartSubTotal = result.showCartSubTotal;\n $scope.showAmountInCartIcon = result.showAmountInCartIcon;\n });\n }).then(function handleCartOpenClose() {\n // the cart is only automatically open under the following criteria:\n // 1. the cart has a 'note to buyer' ($scope.note is defined)\n // 2. the cart was not previously automatically opened before\n // 3. the state has transitioned to checkout.review or checkout.guest\n function decideShowCart(currentState) {\n var falsePositive = /^checkout\\.(selectFi)$/.test(currentState) && /^checkout\\.(review|guest)$/.test($scope.openedAlready);\n var notOpened = !$scope.openedAlready && /^checkout\\.(review|guest)$/.test(currentState);\n var canShow = notOpened || falsePositive;\n\n if ($scope.note && canShow) {\n $scope.openedAlready = currentState; // may have been undefined before\n return true;\n }\n\n return false;\n }\n\n $scope.showCartItem = function (breakdown) {\n return breakdown.field_name !== 'total' && Number(breakdown.amount) !== 0;\n };\n\n $scope.showCart = decideShowCart(_uiRouter.$state.current.name);\n\n // TODO: Must we really couple this so tightly with the state transition names?\n var openCartListener = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState) {\n $scope.showCart = decideShowCart(toState.name);\n });\n\n $scope.$on('$destroy', openCartListener); // see http://stackoverflow.com/a/27016855 on why $destroy\n\n $scope.toggleCart = function ($event) {\n $scope.showCart = !$scope.showCart;\n $event.preventDefault();\n };\n\n $scope.closeCart = function ($event) {\n $scope.showCart = false;\n // for accessible autofocus on cart toggle link button\n $scope.$broadcast('cart-closed');\n if ($event) {\n $event.preventDefault();\n }\n };\n\n $scope.$on('clickBody', function ($event, target) {\n if ($scope.showCart && $(target).parents('.cartContainer').length === 0) {\n $scope.closeCart($event);\n $scope.$apply();\n }\n });\n\n // this listener / broadcast allows accessibility components to scan and focus inside the cart\n // when the cart is displayed\n $scope.$watch('showCart', function (showCart) {\n if (showCart) {\n $scope.$broadcast('cart-updated');\n }\n });\n }).then(function handleEllipsisIssues() {\n // NOTE: the scattered broadcasts of \"cart-updated\" events are mostly\n // to allow the accessibility directives modal-box and focus-when to\n // know when to recalculate keyboard behavior / focus\n $scope.toolongTracker = {};\n\n // this function is invoked by the onEllipsis directive that tracks\n // if the item name won't fit within the restricted space.\n $scope.toolong = function (idx) {\n $scope.toolongTracker[idx] = true;\n $scope.$broadcast('cart-updated');\n };\n\n $scope.showMore = function (idx, type) {\n // there are 2 types of more, \"floating\" when the name is too long\n // and \"inline\" when the name can fit, but there are additional details.\n //\n // Show a more if the item\n // 1. has an expanded state\n // 2. is not already expanded\n // 3. if it is appropriate to show that type.\n var itemIsTooLong = $scope.toolongTracker[idx];\n var isAppropriateType = itemIsTooLong && type === 'floating' || !itemIsTooLong && type === 'inline';\n\n return $scope.hasExpandedState(idx) && !$scope.isExpanded(idx) && isAppropriateType;\n };\n\n $scope.expandedIndex = -1; // initially, none of the line items are expanded\n $scope.isExpanded = function isExpanded(idx) {\n return idx === $scope.expandedIndex;\n };\n $scope.hasExpandedState = function hasExpandedState(idx) {\n // A line item is exandable if\n // 1. the name cannot fit in one line ($scope.toolongTracker) and/or\n // 2. there are details (attached to purchase.items in the cart)\n // 3. there is item number (sku) in the item\n var item = $scope.checkoutCart.get('purchase.items', [])[idx] || {};\n var nameTooLong = $scope.toolongTracker[idx];\n\n return nameTooLong || item.hasDetails || item.sku;\n };\n $scope.expand = function expand(idx) {\n $scope.expandedIndex = idx;\n $scope.$broadcast('cart-updated');\n };\n $scope.collapse = function collapse() {\n $scope.expandedIndex = -1;\n $scope.$broadcast('cart-updated');\n };\n\n // Set default focus on cart first element \"more\" link\n $scope.focusElementCssSelector = 'a.more';\n\n // Change the focus element as user clicks on elements\n $scope.$watch('expandedIndex', function (expandedIndex) {\n if (expandedIndex === -1) {\n $scope.focusElementCssSelector = 'a.more';\n } else {\n // If any \"more\" link or item is clicked in cart, then\n // set focus to itemNameContainer\n $scope.focusElementCssSelector = '.itemNameContainer.expanded';\n }\n });\n\n $scope.$emit('dataLoaded');\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.formatQuantity;\n\n_uiRouter.$state;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_showCartDecision.showCartDecision;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/itemDetails/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/cart/itemDetails/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('itemDetails', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n details: '=?',\n sku: '=?',\n currencyCode: '=?',\n onClickLess: '&?'\n },\n controller: function controller() {/* dumb component */}\n };\n});\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/itemDetails/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n
      \\n
    • \\n \\n {{ content('header.itemNumber') }} {{ details.sku }}\\n \\n
    • \\n
    • {{ content('header.price') }}\\n \\n
    • \\n
    • {{ content('header.quantity') }} {{ details.quantity }}
    • \\n
    • \\n
      \\n \\n {{ selection.name }}:\\n {{ selection.select }}\\n \\n
      \\n\\n
      \\n {{ content('header.description') }} {{ details.description }}\\n
      \\n
    • \\n
    \\n{{ content('header.less') }}\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/lib/decode_entities.js\":\n/***/ (function(module, exports) {\n\n\n\n/**\n * Takes a string with HTML entities within and renders it as the unicode\n * characters they represent. This is done by leveraging the browser to\n * perform this transformation internally. InnerText is chosen as the output\n * so as to kill any HTML itself that was supplied.\n *\n * @param {Element} element any HTML element supporting innerText and\n * innerHTML. Preferably one not connected to the DOM or visible in any way.\n * @param {String} input a String containing HTML entities that need to be\n * decoded and HTML stripped.\n * @return {String} the same string with HTML tags removed and entities\n * decoded.\n */\n\nexports.__esModule = true;\nexports.decodeEntities = decodeEntities;\nexports['default'] = decodeEntitiesAngularFilter;\nfunction decodeEntities(element, input) {\n // Escape opening tags on vulnerable tags\n input = input.replace(/<(\\/?)(html|script|body|meta|style|img|iframe|svg|link)/ig, '<$1$2');\n element.innerHTML = input;\n return element.textContent || element.innerText;\n}\n\nfunction decodeEntitiesAngularFilter() {\n // A constant key that can be used to find the element\n var ENTITY_ELEM = '__xpc_entitydecoder__';\n\n // Create the element if this is the first time this is called\n if (!window[ENTITY_ELEM]) {\n window[ENTITY_ELEM] = document.createElement('p');\n }\n\n // Retrieve the converter element rather than create one every\n // time. Angular may call this filter many times repeatedly and\n // we should make a small effort to optimize the process\n var converter = window[ENTITY_ELEM];\n\n /**\n * Takes a string with HTML entities within and renders it as the unicode\n * characters they represent. This is done by leveraging the browser to\n * perform this transformation internally. InnerText is chosen as the output\n * so as to kill any HTML itself that was supplied.\n *\n * @param {String} input a String containing HTML entities that need to be\n * decoded and HTML stripped.\n * @return {String} the same string with HTML tags removed and entities\n * decoded.\n */\n return decodeEntities.bind(null, converter);\n}\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/lib/pxp.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$pxpCartAmt', function () {\n return function (merchantCountry, merchantId, noLineItemDetails, isPurchase) {\n if (merchantCountry !== 'AU' && noLineItemDetails && isPurchase) {\n var pageName = 'xo_hermes_no_line_item_details';\n var showAmtBlacklistTreatment = 'xo_hermes_no_line_items_show_amount_blacklist_test_group';\n var showAmtTreatment = 'xo_hermes_no_line_items_show_amount_test_group';\n\n return _angular.$q.all([(0, _squid.$pxp)(pageName, {\n 'ctx.merchantID': merchantId,\n uid: merchantId\n }, showAmtBlacklistTreatment, false, true), (0, _squid.$pxp)(pageName, {\n 'ctx.merchantID': merchantId,\n uid: merchantId\n }, showAmtTreatment, false, true)]).then(function (results) {\n var showAmtBlacklist = results[0];\n var showAmt = results[1];\n\n if (showAmtBlacklist && showAmtBlacklist.treatment_name === showAmtBlacklistTreatment) {\n return true;\n }\n\n if (showAmt && showAmt.treatment_name === showAmtTreatment) {\n return true;\n }\n\n return false; // default to hide\n });\n }\n\n return _angular.$q.when(!noLineItemDetails && isPurchase);\n };\n});\n\n_squid.$pxp;\n\n_angular.$q;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-page-components/src/cart/lib\", \"../node_modules/xo-page-components/src/cart/lib/pxp.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/lib/showCartDecision.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.showCartDecision = showCartDecision;\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nfunction showCartDecision(isSubscriptionFlow, total, merchantCountry, merchantId, noLineItemDetails, isPurchase) {\n return (0, _pxp.$pxpCartAmt)(merchantCountry, merchantId, noLineItemDetails, isPurchase).then(function (showAmount) {\n // Show cart subtotal if there is a total amount\n // Do not show subtotal for wps subscription flow.\n // Show amount in cart icon only if showAmount is truthy and total amount is not zero\n return {\n showAmt: showAmount,\n showCartSubTotal: showAmount && total && !isSubscriptionFlow,\n showAmountInCartIcon: showAmount && +total.amount !== 0\n };\n });\n}\n\n_pxp.$pxpCartAmt;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/lib/ui.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _decode_entities = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/decode_entities.js\");\n\nvar _decode_entities2 = _interopRequireDefault(_decode_entities);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Register entity decoding filter in Angular\n_angular.$filterProvider.register('decodeEntities', _decode_entities2['default']);\n\n// if an element has an ellipsis text-overflow in effect (it must already have\n// the appropriate css styling) then invoke the function that is passed to the directive\nfunction getVisibleWidth(elem) {\n var elemRect = elem.getBoundingClientRect();\n\n // cross browser, returns decimals for ultra-precision\n return elemRect.right - elemRect.left;\n}\n\nfunction getNaturalWidth(elem) {\n var old = {\n overflow: elem.style.overflow,\n width: elem.style.width,\n display: elem.style.display\n };\n var result = void 0;\n\n elem.style.overflow = 'visible';\n elem.style.width = 'auto';\n elem.style.display = 'inline-block';\n result = getVisibleWidth(elem);\n elem.style.overflow = old.overflow;\n elem.style.width = old.width;\n elem.style.display = old.display;\n\n return result;\n}\n\n// pre-determine approach to reading styles\nvar getStyle = _angular.$window.getComputedStyle ? function (elem, style) {\n return _angular.$window.getComputedStyle(elem)[style];\n} // modern browsers\n: function (elem, style) {\n return elem.currentStyle[style];\n}; // IE\n\nfunction hasEllipsis(elem) {\n var overflowHidden = getStyle(elem, 'overflow') === 'hidden';\n var textOverflowEllipsis = getStyle(elem, 'text-overflow') === 'ellipsis';\n var whiteSpaceNowrap = getStyle(elem, 'white-space') === 'nowrap';\n\n if (overflowHidden && textOverflowEllipsis && whiteSpaceNowrap) {\n return getVisibleWidth(elem) < getNaturalWidth(elem);\n }\n\n return false;\n}\n\n(0, _squid.$registerDirective)('onEllipsis', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function invokeSubscriber() {\n (0, _angular.$parse)(attrs.onEllipsis)(scope);\n scope.$apply();\n }\n\n (0, _angular.$timeout)(function () {\n if (hasEllipsis(element[0])) {\n invokeSubscriber();\n }\n });\n }\n };\n});\n\n// Makes an element examine the outerHeight of its siblings\n// and the max-height of its parent, then sets a max-height for itself\n// so that everything fits within the limits of the parent. Note that it assumes\n// no other sibling also has dynamic-maxheight.\n(0, _squid.$registerDirective)('dynamicMaxheight', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function resizeContainer() {\n var $element = (0, _jquery2['default'])(element);\n var parentHeight = parseFloat(getStyle($element.parent()[0], 'max-height'));\n var siblings = $element.siblings().filter(function () {\n var pos = getStyle((0, _jquery2['default'])(this)[0], 'position');\n\n return pos !== 'fixed' && pos !== 'absolute';\n }).map(function getOuterHeights() {\n return (0, _jquery2['default'])(this).outerHeight();\n });\n var siblingsHeight = 0;\n var i = void 0;\n\n for (i = 0; i < siblings.length; i += 1) {\n siblingsHeight += siblings[i];\n }\n\n var spaceAvailable = parentHeight - siblingsHeight;\n\n if (!isNaN(spaceAvailable)) {\n $element.css('max-height', spaceAvailable + 'px');\n }\n }\n\n // if an expression is provided, it is used as an event to listen for and recalculate the height\n if (attrs.dynamicMaxheight) {\n scope.$on((0, _angular.$parse)(attrs.dynamicMaxheight)(scope), resizeContainer);\n }\n\n (0, _angular.$timeout)(resizeContainer);\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$timeout;\n\n_angular.$filterProvider;\n\n_angular.$window;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/subscription/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/subscription/index.js\");\n\nvar _subscriptionTerms = __webpack_require__(\"../node_modules/xo-page-components/src/subscription-terms/index.js\");\n\nvar _subscriptionTerms2 = _interopRequireDefault(_subscriptionTerms);\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/cart/subscription/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/subscription/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$subscription', {\n tag: 'subscription',\n template: _template2['default'],\n props: {\n baToken: {\n type: 'var',\n optional: false\n },\n merchantId: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n subscriptionData: _index.$SubscriptionModel.instance(this.baToken).retrieve({\n params: {\n merchant_id: this.merchantId\n }\n })['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n this.itemName = _subscriptionTerms2['default'].getItemName(this.models.subscriptionData);\n this.itemOptions = _subscriptionTerms2['default'].getItemOptions(this.models.subscriptionData);\n\n this.getFirstAmount = function () {\n return _subscriptionTerms2['default'].getFormattedFirstAmount(_this.models.subscriptionData);\n };\n\n this.getTermsText = function () {\n return _subscriptionTerms2['default'].getTermsText(_this.models.subscriptionData);\n };\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_index.$SubscriptionModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/subscription/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/subscription/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n\\n

    {{content('wpsSubscription.message.subscriptionDetails')}}:

    \\n
    \\n\\n {{itemName}}\\n
    \\n
    {{option.name}}:\\n {{option.selection}}\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    {{content('wpsSubscription.message.terms')}}:\\n

    \\n
    \\n {{term}}\\n
    \\n
    \\n
    \\n

    {{content('wpsSubscription.message.firstAmount')}}

    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/cart/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n\\n \\n \\n \\n\\n \\n\\n
    \\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('header.noteFromMerchant', {merchant: checkoutAppData.merchant.brand_name}) }}\\n {{ checkoutAppData.merchant.brand_name }}\\n

    \\n

    \\n {{ note | decodeEntities }}\\n {{ desc | decodeEntities }}\\n

    \\n
    \\n\\n \\n\\n\\n
    \\n \\n\\n
      \\n
    • \\n
    • \\n {{ content(amountHeaders[breakdown.field_name]) }}\\n \\n \\n \\n
    • \\n \\n
    \\n
    \\n\\n
    \\n {{ content(isCartTextTotalOrSubTotal) }}\\n \\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/constants/fbMessenger.js\":\n/***/ (function(module, exports) {\n\n\n\n/* Constants for FB messenger related components */\nmodule.exports = {\n OVERRIDE_FBPP_REPEAT_FLAG: 'override_fbpp_repeat',\n OVERRIDE_FBPP_MOBILE_FLAG: 'override_fbpp_mobile',\n FB_BA_SHOWN_FLAG: 'is_xo_wps_fb_messenger_plugin_match_withba_shown',\n MOBILE_CHANNEL: 'MOBILE',\n WEB_CHANNEL: 'WEB',\n FB_USER_API_MOBILE_URL: 'https://m.facebook.com/paypal/user_identifier',\n FB_USER_API_URL: 'https://www.facebook.com/paypal/user_identifier',\n FB_PROD_APP_ID: '1084613224964631',\n FB_PROD_PAGE_ID: {\n US: '55982004572',\n AU: '171522459698178',\n CA: '164660263560926',\n GB: '167465479930420',\n HK: '575224445931086',\n JP: '252040838174046',\n NZ: '171522459698178',\n PH: '1895483750701842',\n SG: '1405303076421245',\n IL: '369238992488',\n CZ: '199396843578121',\n DE: '109838022384872',\n AT: '109838022384872',\n CH: '109838022384872',\n FR: '124143236317',\n IT: '198366693576785',\n BR: '170288122998781',\n ES: '244240615638886',\n MX: '42433532610',\n ZA: '388473619362',\n NL: '105370782861413',\n DK: '133211860117553',\n SE: '121404111292725',\n RU: '275216545856555',\n PL: '244706038980513',\n NO: '304581546592510',\n GR: '704200349634422',\n IN: '347199669139259',\n AE: '402374783229274',\n BH: '402374783229274',\n DZ: '402374783229274',\n EG: '402374783229274',\n JO: '402374783229274',\n KW: '402374783229274',\n MA: '402374783229274',\n OM: '402374783229274',\n QA: '402374783229274',\n SA: '402374783229274',\n TN: '402374783229274',\n YE: '402374783229274',\n AR: '474276366001351',\n CL: '474276366001351',\n CO: '474276366001351',\n CR: '474276366001351',\n DO: '474276366001351',\n EC: '474276366001351',\n PE: '474276366001351',\n UY: '474276366001351',\n VE: '474276366001351'\n },\n FB_TEST_PAGE_ID: '676472402496128',\n PRECHECKED_COUNTRIES: ['US', 'AU', 'HK', 'JP', 'NZ', 'PH', 'SG', 'ZA'],\n PXP_MESSENGER_EXPT: 'xo_wps_fb_messenger_plugin',\n PXP_SHOW_MESSENGER_PLUGIN_TREATMENT: 'xo_wps_fb_messenger_plugin_1_treatment',\n PXP_MESSENGER_IN: 'xo_wps_fb_messenger_plugin_IN',\n PXP_MESSENGER_PLUGIN_TREATMENT_IN: 'xo_wps_fb_messenger_plugin_IN_treatment'\n};\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/footer/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-form-components/src/language-options/directive.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index4 = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _index5 = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/modal/directive.js\");\n\nvar _footerMap = __webpack_require__(\"../node_modules/xo-page-components/src/footer/footerMap.js\");\n\nvar _footerMap2 = _interopRequireDefault(_footerMap);\n\nvar _opinionlab = __webpack_require__(\"../node_modules/xo-page-components/src/footer/opinionlab.js\");\n\nvar _opinionlab2 = _interopRequireDefault(_opinionlab);\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/footer/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoFooter', function () {\n return {\n template: _template2['default'],\n restrict: 'EA',\n scope: {\n token: '=?',\n escapeHatchIncontext: '=?',\n cancel: '@?',\n merchant: '@?',\n languageSwitch: '=?',\n showVenmoLegalLinks: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.isIFrame = _squid.$util.isIFrame();\n if ($scope.escapeHatchIncontext) {\n $scope.showEscapeHatch = $scope.isIFrame;\n }\n $scope.locale = _squid.$locale;\n $scope.proxSignUpFlow = _index4.$CheckoutInputDataModel.instance($scope.token).isEbayTxn();\n $scope.year = new Date().getFullYear();\n\n $scope.isApac = function () {\n return _squid.$config.apacCountries && _squid.$config.apacCountries.indexOf($scope.locale.country) > -1;\n };\n\n // Determine if country belongs to a region to serve correct footer links\n var getRegion = function getRegion(country) {\n var regions = _squid.$config.regions;\n for (var region in regions) {\n if (regions[region].indexOf(country) > -1) {\n return region;\n }\n }\n return false;\n };\n\n function isDESecondButtonFlow() {\n return $scope.locale.country === 'DE' && $scope.checkoutAppData && $scope.checkoutAppData.is_second_button_txn;\n }\n\n $scope.footerLinks = function () {\n if ($scope.isApac()) {\n return _footerMap2['default'].APAC;\n }\n\n // It is a product requirement that for the DE CYCO page, Hermes only show the footer links\n // that were available in Aries\n if (isDESecondButtonFlow()) {\n return _footerMap2['default']['DESecondButton'];\n }\n\n return _footerMap2['default'][$scope.locale.country] || _footerMap2['default'][getRegion($scope.locale.country)] || _footerMap2['default'].DEFAULT;\n };\n\n $scope.showPolicyInfo = function () {\n return $scope.isApac() || $scope.locale.country === 'AU';\n };\n\n $scope.cancelRedirect = function ($event) {\n $event.preventDefault();\n\n var cancelUri = $scope.cancel;\n var redirectUri = _squid.$util.param('redirect_uri');\n\n if (window.xprops && window.xprops.onCancel && !cancelUri) {\n return window.xprops.onCancel({\n orderID: $scope.token\n });\n }\n\n // \"redirect_uri\" as a query param overrides the cancel url in the checkout session\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM') && redirectUri) {\n\n cancelUri = _squid.$util.buildURL(redirectUri, {\n opType: 'cancel',\n return_uri: $scope.cancel,\n token: $scope.token\n });\n }\n\n _index5.$ReturnToMerchant.goTo(cancelUri);\n };\n\n $scope.isIndiaLegalEntity = function () {\n // for PayPal India domestic launch legal entity should be 84\n // update footer with indian policy for this case\n return $scope.auth && $scope.auth.logged_in && $scope.auth.legalEntity === 84 || $scope.locale.country === 'IN';\n };\n\n if ($scope.token) {\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance($scope.token),\n checkoutPayee: _index3.$CheckoutPayeeModel.instance($scope.token),\n auth: _index2.$AuthModel.instance()\n }).then(function () {\n var payee = $scope.checkoutPayee;\n\n if (payee && payee.merchant && payee.merchant.id) {\n var hcl = _squid.$config.hideCancelLinkForMerchant;\n\n var shouldHide = hcl && hcl.indexOf(payee.merchant.id) !== -1;\n if (shouldHide) {\n $scope.hideCancel = true;\n }\n }\n $scope.cancel = $scope.checkoutAppData.urls.cancel_url;\n $scope.merchant = $scope.checkoutAppData.getMerchantDisplayName();\n });\n }\n\n var cancelShowModal = _angular.$rootScope.$on('showModal', function (event, config) {\n $scope.popupUrl = config && config.popupUrl;\n $scope.show = true;\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n\n $scope.$on('$destroy', cancelShowModal);\n\n $scope.showOL = function showOL(event) {\n event.preventDefault();\n\n var placeholder = 'main:ec:hermes';\n var page = _uiRouter.$state.current.get('trackingData.buzname.fullpage.pagename2', 'unknown').replace('%', placeholder);\n var data = {\n opVars: {\n rlogId: _angular.$window.meta.rlogId || '',\n page: page || window.location.hash,\n csci: 'Unknown',\n calc: _angular.$window.meta.correlationId,\n custId: 'Unknown',\n merchantId: 'Unknown',\n token: $scope.token || 'Unknown'\n },\n locale: {\n country: _squid.$locale.country,\n languageCode: _squid.$locale.lang + '_' + _squid.$locale.country\n }\n };\n\n (0, _opinionlab2['default'])(data);\n };\n\n $scope.showFeedback = function () {\n return !_index.$DeviceInfo.isDevice() && !isDESecondButtonFlow();\n };\n\n $scope.hideReturnCancelUrl = function () {\n if (window.xprops && window.xprops.onCancel) {\n return false;\n }\n\n if (!$scope.cancel) {\n return true;\n }\n\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.done') {\n return true;\n }\n\n return false;\n };\n\n $scope.showVenmoLinks = function () {\n // if on payWithSelection State, always show it, else we choose whatever 'checkout' directive says.\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.payWithSelection') {\n return true;\n }\n return !!$scope.showVenmoLegalLinks;\n };\n\n $scope.showPaypalLinks = function () {\n // will force Paypal Links if on payWithSelection state. Hide paypal links if we explicitly request venmo Links\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.payWithSelection') {\n return true;\n }\n return !$scope.showVenmoLegalLinks;\n };\n }]\n };\n});\n\n_uiRouter.$state;\n\n_angular.$window;\n\n_angular.$rootScope;\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$integration;\n\n_index.$DeviceInfo;\n\n_index2.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutPayeeModel;\n\n_index4.$CheckoutInputDataModel;\n\n_index5.$ReturnToMerchant;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/footer/footerMap.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\n!(module.exports = {\n CA: [{\n id: 'policy',\n content: 'footer.policiesCA'\n }, {\n id: 'terms',\n content: 'footer.termsCA'\n }, {\n id: 'privacy',\n content: 'footer.privacyCA'\n }],\n\n BE: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n DE: [{\n id: 'imprint',\n content: 'footer.DEImprint'\n }, {\n id: 'legal',\n content: 'footer.DELegal'\n }, {\n id: 'privacy',\n content: 'footer.DEPrivacy'\n }, {\n id: 'paymentdesc',\n content: 'footer.DEKeyPaymentDesc'\n }],\n\n ES: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n FR: [{\n id: 'legal',\n content: 'footer.FRLegal'\n }, {\n id: 'useragreement',\n content: 'footer.FRUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.FRPrivacy'\n }],\n\n IT: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n NL: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n IE: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n APAC: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n EMEA: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n EM: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n LATAM: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n AU: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n AT: [{\n id: 'imprint',\n content: 'footer.ATImprint'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n CH: [{\n id: 'imprint',\n content: 'footer.CHImprint'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n DK: [{\n id: 'useragreement',\n content: 'footer.DKUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n SE: [{\n id: 'useragreement',\n content: 'footer.SEUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n PL: [{\n id: 'useragreement',\n content: 'footer.PLUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n NO: [{\n id: 'useragreement',\n content: 'footer.NOUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n TR: [{\n id: 'useragreement',\n content: 'footer.TRUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n BR: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n MX: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n RU: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n DESecondButton: [{\n id: 'imprint',\n content: 'footer.DEImprint'\n }, {\n id: 'privacy',\n content: 'footer.DEPrivacy'\n }],\n\n DEFAULT: [{\n id: 'policy',\n content: 'footer.policies',\n venmoContent: 'footer.venmo_policies'\n }, {\n id: 'terms',\n content: 'footer.terms',\n venmoContent: 'footer.venmo_terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy',\n venmoContent: 'footer.venmo_privacy'\n }]\n});\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/footer/opinionlab.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\n var _doc = document;\n var _w = window;\n var _tm = new Date().getTime();\n var _sH = screen.height;\n var _ht = escape(_w.location.href); // eslint-disable-line block-scoped-var,no-undef\n var _hr = escape(_doc.referrer); // eslint-disable-line block-scoped-var,no-undef\n var _sW = screen.width;\n\n function popUp(opinionlabURL) {\n _w.open(opinionlabURL, 'comments', 'width=535,height=192' + ',screenX=' + (_sW - 535) / 2 + ',screenY=' + (_sH - 192) / 2 + ',top=' + (_sH - 192) / 2 + ',left=' + (_sW - 535) / 2 + ',resizable=yes' + ',copyhistory=yes' + ',scrollbars=no');\n }\n\n function updateCustomVars(data) {\n\n var opVars = data.opVars;\n var locale = data.locale;\n\n _ht = 'https://' + locale.country + '.paypal.com/' + locale.languageCode + '/00/' + escape(opVars.page.replace(/\\s|\\//g, '_')) + '.page'; // eslint-disable-line block-scoped-var,no-undef\n\n var customVar = (opVars.rlogId || opVars.calc) + '|' + opVars.csci + '|' + opVars.page + '|' + locale.country + '|' + locale.languageCode + '|' + opVars.custId + '|' + opVars.merchantId + '|' + opVars.token + '|' + 'Unknown';\n return customVar;\n }\n\n function _fC(_u) {\n var _sp = '%3A\\\\/\\\\/';\n var _rp = '%3A//';\n var _aT = _sp + ',\\\\/,\\\\.,-,_,' + _rp + ',%2F,%2E,%2D,%5F';\n var _aA = _aT.split(',');\n\n for (var i = 0; i < 5; i++) {\n eval('_u=_u.replace(/' + _aA[i] + '/g,_aA[i+5])'); // eslint-disable-line no-eval\n }\n return _u;\n }\n\n return function (locale) {\n\n var custom_var = updateCustomVars(locale);\n\n var opinionlabURL = 'https://secure.opinionlab.com/ccc01/comment_card.asp?' + 'time1=' + _tm + '&time2=' + new Date().getTime() + '&prev=' + _fC(_hr) + '&referer=' + _fC(_ht) + '&height=' + _sH + '&width=' + _sW + '&custom_var=' + custom_var;\n popUp(opinionlabURL);\n };\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/footer/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n

    \\n \\n \\n \\n

    \\n\\n
    \\n \\n
      \\n
    • \\n
    • \\n
    \\n

    \\n {{ content('footer.copyright', {year: year}) }}\\n \\n {{ content('memberReview.propHead') }}\\n

    \\n\\n \\n
    \\n\\n
    \\n

    \\n

    \\n

    {{ content('footer.moreCopyright', {year: year}) }}

    \\n
    \\n\\n
    \\n \\n

    {{ content('footer.openLinks') }}

    \\n

    {{popupUrl}}

    \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/gdprCookieBanner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$gdprCookieBannerComponent = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _gdprCookieBanner = __webpack_require__(\"../node_modules/xo-models/src/gdprCookieBanner/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/gdprCookieBanner/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-page-components/src/gdprCookieBanner/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * General Data Protection Regulation (GDPR) defines standards on how personal data is collected, processed, transferred and disposed.\n * Affected Countries: All \"GDPR\" countries: Please check config.json for country list.\n * Wiki: https://github.paypal.com/Checkout-R/xoonboardingnodeweb/wiki/GDPR:-Feature,-Integration-documentation\n */\nvar $gdprCookieBannerComponent = exports.$gdprCookieBannerComponent = _squid.$Component.extend('$gdprCookieBanner', {\n tag: 'xo-gdpr-cookie-banner',\n template: _template2['default'],\n actions: {\n // Fetch the GDPR banner, append to DOM if available\n refreshGDPR: function refreshGDPR() {\n var _this = this;\n\n var gdprModel = _gdprCookieBanner.$GDPRCookieBannerModel.instance();\n\n return gdprModel.getBanner().then(function () {\n var banner = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Run cleanup once we know the result, to prevent screen flash\n _this.actions.cleanup();\n\n var html = banner.html,\n css = banner.css,\n js = banner.js;\n\n\n if (!html || !css || !js) {\n return;\n }\n\n var div = angular.element(html);\n var style = angular.element(css);\n var script = angular.element(js);\n\n var el = _this.$element.find('#gdpr-cookie-banner-outerwrap');\n\n el.append(style);\n el.append(div);\n el.append(script);\n\n if (!(0, _angular.isFunction)(window.bindGdprEvents)) {\n _logger.$logger.error('gdpr_banner_bindGdprEvents_not_defined');\n return;\n }\n\n // TODO: Remove this class add when cookie banner script is fixed to add this class properly\n angular.element(document.body).addClass('gdprCookieBanner-acceptedAll');\n\n window.bindGdprEvents();\n });\n },\n\n // Clear out the banner container to remove the old elements\n cleanup: function cleanup() {\n var el = this.$element.find('#gdpr-cookie-banner-outerwrap');\n\n el.empty();\n }\n },\n\n lifecycle: {\n populate: function populate() {\n var _this2 = this;\n\n this.actions.refreshGDPR();\n\n // On \"localeChange\" we are re-fetching data.\n this.$on('localeChange', function () {\n _this2.actions.refreshGDPR();\n });\n }\n }\n});\n\nangular.value(\"$gdprCookieBannerComponent\", $gdprCookieBannerComponent);\n_squid.$Component;\n\n_angular.isFunction;\n\n_gdprCookieBanner.$GDPRCookieBannerModel;\n\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/gdprCookieBanner/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/gdprCookieBanner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/header/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$SetHeaderText = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-form-components/src/language-options/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/header/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-page-components/src/header/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoHeader', function () {\n return {\n template: _template2['default'],\n scope: {\n showCartTotal: '=?',\n renderCartContainer: '=?',\n token: '=?',\n isUnbranded: '=?',\n unbrandedTitle: '=?',\n unbrandedSubTitle: '=?',\n languageSwitch: '=?',\n redirectiframe: '=?',\n redirectLightbox: '=?',\n isVenmoFlow: '=?'\n },\n controller: ['$scope', function ($scope) {\n var _ref = window.xprops || {},\n _ref$experience = _ref.experience,\n experience = _ref$experience === undefined ? { facebook: false } : _ref$experience;\n\n $scope.isFacebookBAIntegration = experience.facebook;\n $scope.isMessengerBAIntegration = _squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n $scope.isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n $scope.title = (0, _squid.$renderContent)($scope.unbrandedTitle);\n $scope.subTitle = (0, _squid.$renderContent)($scope.unbrandedSubTitle);\n $SetHeaderText.subscribe($scope, function (event, text) {\n $scope.unbrandedTitle = text;\n $scope.title = (0, _squid.$renderContent)($scope.unbrandedTitle);\n });\n }]\n };\n});\n\nvar headerText = '';\nvar $SetHeaderText = exports.$SetHeaderText = {\n setText: function setText(text) {\n headerText = text;\n _angular.$rootScope.$emit('update_header_text', text);\n },\n getText: function getText() {\n return headerText;\n },\n subscribe: function subscribe($scope, callback) {\n var handler = _angular.$rootScope.$on('update_header_text', callback);\n $scope.$on('$destroy', handler);\n }\n};\n\nangular.value(\"$SetHeaderText\", $SetHeaderText);\n_angular.$rootScope;\n\n_squid.$integration;\n\n_squid.$renderContent;\n\n_index.$DeviceInfo;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/header/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/header/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n \\n
    \\n {{title}}\\n
    {{ content('base.payPal') }}
    \\n
    Venmo Checkout
    \\n
    \\n \\\"PayPal\\\"\\n \\n \\\"Facebook\\\"\\n
    \\n
    \\n
    \\n \\\"PayPal\\n
    \\n
    \\n \\\"PayPal\\n
    \\n
    \\n \\n\\n \\n\\n
    {{subTitle}}
    \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/marketingOffers/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-title/dist/directive.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/marketingOffers/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoMarketingOffers', function () {\n return {\n template: _template2['default'],\n scope: {\n placementCode: '=?',\n titleTxtProperty: '=?',\n subtitleProperty: '=?',\n token: '=?',\n pageName: '=?',\n backgroundImage: '=?',\n xoTitleTag: '@?',\n xoTitleClass: '@?'\n },\n controller: ['$scope', '$element', '$sce', function ($scope, $element, $sce) {\n var morsOfferFlag = $scope.placementCode === '202003' && (0, _squid.$feature)('morsValuePropOffers');\n var populateObj = void 0;\n\n if (morsOfferFlag) {\n populateObj = {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance($scope.token),\n payee: _index.$CheckoutPayeeModel.instance($scope.token),\n auth: _auth.$AuthModel.instance()\n };\n } else {\n populateObj = {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n };\n }\n (0, _squid.$populate)($scope, populateObj).then(function () {\n $scope.locale = _squid.$locale;\n $scope.token = _angular.$rootScope.token;\n function setDefaultValues() {\n $scope.ad = {\n Title: (0, _squid.$renderContent)($scope.titleTxtProperty),\n Body: (0, _squid.$renderContent)($scope.subtitleProperty),\n backgroundImage: $scope.backgroundImage\n };\n }\n\n $scope.$watch('ad.backgroundImage', function (imageUrl) {\n if (imageUrl) {\n var url = imageUrl;\n var propImg = angular.element($element[0].querySelector('div.prop-img'));\n var isRetina = window && window.matchMedia && window.matchMedia('(-webkit-min-device-pixel-ratio: 2), ' + '(min--moz-device-pixel-ratio: 2), ' + '(-o-min-device-pixel-ratio: 2/1),' + '(min-device-pixel-ratio: 2),' + '(min-resolution: 192dpi), ' + '(min-resolution: 2dppx)').matches;\n\n if (isRetina && url) {\n var index = url.lastIndexOf('.'); // index at which file extension start\n url = url.substring(0, index) + '_2x' + url.substring(index, url.length);\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n } else {\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n }\n }\n });\n\n if ($scope.placementCode === '202002') {\n $scope.pu_type = 'ANONYMOUS';\n $scope.presentation_types = ['CompositeText'];\n $scope.pxpInfo = {\n name: 'xo_xoon_hermes_mors',\n pattern: '(xo_xoon_hermes_mors_)(.*)',\n treatment: 'xo_xoon_hermes_mors_treatment'\n };\n } else if ($scope.placementCode === '202003') {\n $scope.className = 'props';\n $scope.pu_type = 'PERSONAL';\n $scope.presentation_types = ['GenericComposite'];\n $scope.pxpInfo = {\n name: 'xo_mors_hermes_placements_ryi',\n pattern: '(xo_mors_hermes_placements_ryi_)(.*)',\n treatment: 'xo_mors_hermes_placements_ryi_treatment'\n };\n } else {\n setDefaultValues();\n }\n\n // serve ads only if pxp is true, country is US and lang is en\n if (_squid.$locale.country === 'US' && _squid.$locale.lang === 'en' && $scope.placementCode && (0, _squid.$feature)('morsValuePropOffers')) {\n $scope.marketingOfferData = new _marketingoffer.$MarketingOfferModel({\n countryCode: $scope.locale.country,\n page: $scope.pageName,\n puType: $scope.pu_type,\n locale: _squid.$locale.lang + '_' + _squid.$locale.country,\n totalTransactionAmount: {\n 'currency_code': $scope.checkoutCart.get('purchase.amounts.total.currency_code', ''),\n // Round the calculation to eliminate Floating point Rounding Error (69.99 * 100 === 6998.999999999999)\n // http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html\n 'value': Math.round($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100)\n },\n totalShippingAmount: {\n 'currency_code': $scope.checkoutCart.get('purchase.amounts.total.currency_code', ''),\n // Round the calculation to eliminate Floating point Rounding Error (69.99 * 100 === 6998.999999999999)\n // http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html\n 'value': Math.round($scope.checkoutCart.get('purchase.amounts.shipping.amount', 0) * 100)\n },\n payee: morsOfferFlag ? $scope.payee.merchant.id : '',\n payer: morsOfferFlag ? $scope.checkoutSession.payer.id : '',\n si: morsOfferFlag ? $scope.checkoutSession.id : '',\n visitor_id: morsOfferFlag ? $scope.auth.visitor_id : '',\n targetPlacements: [{\n 'placement_code': $scope.placementCode,\n 'presentation_types': $scope.presentation_types\n }]\n });\n (0, _squid.$pxp)($scope.pxpInfo.name, { 'ctx.COUNTRY': _squid.$locale.country }, $scope.pxpInfo.pattern, false, true).then(function (res) {\n\n _logger.$logger.info('MO treatment: ' + (res ? res.treatment_name : '[no pxp response!]'));\n if (res && res.treatment_name === $scope.pxpInfo.treatment) {\n\n return _marketingoffer.$MarketingOfferModel.instance($scope.token).save({\n silent: true,\n data: $scope.marketingOfferData.serialize(),\n // Ignore all errors from this api, by passing transientError as true\n transientError: true,\n success: function success(result) {\n var ads_arr = result && result.ads || [];\n var adFound = false;\n\n // MORS could serve multiple ads for a given page. Iterate to get the\n // correct one based on the ad placement_id\n ads_arr.forEach(function (ad) {\n var adunit_id = ad.campaign.adunit_id;\n\n if (adunit_id.toString() === $scope.placementCode.toString() && ad.valid) {\n adFound = true;\n $scope.ad = {};\n var content = ad.content.nvp;\n content.forEach(function (obj) {\n $scope.ad[obj.name] = obj.value;\n });\n $scope.ad['impressionUrl'] = ad.tracking.impression_url;\n $scope.ad['clickUrl'] = ad.tracking.click_url;\n }\n });\n\n if (adFound) {\n $scope.ad.Body = $sce.trustAsHtml($scope.ad.Body);\n // $scope.ad.Title does not need to be assigned. for 202001, 202002,\n // and 202003 placement_ids as this will already be assigned.\n\n // notify MORS of successful rendering by firing the impressionurl\n // beacon and by setting the click url to be fired for future\n // conversion.\n // setting the placement_id helps to differentiate between multiple ads\n // displayed on the same page\n\n _logger.$logger.info('MORS_ad_displayed');\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('MORS_ad_not_found');\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n },\n\n error: function error(err) {\n setDefaultValues();\n _logger.$logger.error('MORS_api_failure', { error: err });\n }\n });\n } else {\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n });\n } else {\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n $scope.$on('localeChange', function () {\n setDefaultValues();\n });\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$renderContent;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$CheckoutSessionModel;\n\n_marketingoffer.$MarketingOfferModel;\n\n_marketingoffer.$fireMORSBeacon;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/marketingOffers/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n \\n

    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/merchant-header/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/merchant-header/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoMerchantHeaderDirective', {\n tag: 'xo-merchant-header',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n merchant: {\n type: 'var',\n required: false\n },\n disableId: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n if (this.props.token) {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n }\n },\n lifecycle: {\n populate: function populate() {\n var _ref = this.models || {},\n checkoutAppData = _ref.checkoutAppData;\n\n if (checkoutAppData) {\n // get Merchant display name - can be undefined in which case we have an empty header\n this.merchantDisplayName = checkoutAppData.getMerchantDisplayName();\n\n if (this.props.token && !_index2.$CheckoutInputDataModel.instance(this.props.token).isEbayTxn()) {\n this.merchant = checkoutAppData.merchant;\n }\n }\n }\n }\n});\n\n\n(0, _squid.$registerDirective)('xoMerchantImageResize', function () {\n return {\n restrict: 'A',\n link: function link(scope, element) {\n element.bind('load', function () {\n var MAX_WIDTH = 780;\n var MAX_HEIGHT = 90;\n\n if (this.width > MAX_WIDTH) {\n var ratio = MAX_WIDTH / this.width;\n var height = this.height * ratio;\n\n this.width = MAX_WIDTH;\n this.height = height > MAX_HEIGHT ? MAX_HEIGHT : height;\n }\n });\n }\n };\n});\n\n_angular.noop;\n\n_squid.$Component;\n\n_squid.$registerDirective;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$CheckoutInputDataModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/merchant-header/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n \\n {{ merchantDisplayName || merchant.brand_name }}\\n \\t\\n \\\"{{\\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/messenger-plugin/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uuid = __webpack_require__(\"../node_modules/node-uuid/uuid.js\");\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/messenger-plugin/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _fbMessenger = __webpack_require__(\"../node_modules/xo-page-components/src/constants/fbMessenger.js\");\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoMessengerPluginDirective', {\n tag: 'xo-messenger-plugin',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n pluginType: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n messengerIntegration: _index3.$MessengerIntegrationDataModel.instance().retrieve()['catch'](_angular.noop)\n };\n }\n },\n\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n var lang = _squid.$locale.lang,\n country = _squid.$locale.country;\n var _props = this.props,\n pluginType = _props.pluginType,\n token = _props.token;\n var _models = this.models,\n _models$checkoutSessi = _models.checkoutSession,\n checkoutSession = _models$checkoutSessi === undefined ? {} : _models$checkoutSessi,\n _models$messengerInte = _models.messengerIntegration,\n messengerIntegration = _models$messengerInte === undefined ? {} : _models$messengerInte;\n\n // BA was offered to user or not\n\n var fbBAShownFlag = _squid.$util.localStorageEnabled() && window.localStorage.getItem(_fbMessenger2['default'].FB_BA_SHOWN_FLAG);\n\n // Added following flags to override usual behaviour to enable internal testing by FB and PYPL teams\n\n var _ref = window.xprops || {},\n _ref$experience = _ref.experience;\n\n _ref$experience = _ref$experience === undefined ? {} : _ref$experience;\n var override_fbpp_repeat = _ref$experience.override_fbpp_repeat;\n\n var overrideRepeatUserFlag = _squid.$util.param(_fbMessenger2['default'].OVERRIDE_FBPP_REPEAT_FLAG) || override_fbpp_repeat;\n\n var isChatEnabled = messengerIntegration.isChatEnabled,\n emailHash = messengerIntegration.emailHash,\n nameHash = messengerIntegration.nameHash,\n dataRefJWT = messengerIntegration.dataRefJWT;\n var _checkoutSession$paye = checkoutSession.payer;\n _checkoutSession$paye = _checkoutSession$paye === undefined ? {} : _checkoutSession$paye;\n var payerId = _checkoutSession$paye.id,\n _checkoutSession$tran = checkoutSession.transactionDetails,\n transactionDetails = _checkoutSession$tran === undefined ? {} : _checkoutSession$tran;\n\n var txnId = transactionDetails.receipt_id || transactionDetails.id || '';\n\n _logger.$logger.info('Messenger_plugin_props', { pluginType: pluginType, isMobile: isMobile });\n _logger.$logger.info('Messenger_plugin_data', messengerIntegration);\n\n // if 'isChatEnabled' variable is enabled, it means that user has already onboarded to\n // the messenger feature, so don't trigger messenger onboarding for that user again\n if (!overrideRepeatUserFlag && (isChatEnabled || fbBAShownFlag === 'true' && pluginType === 'STM')) {\n _logger.$logger.info('UNP_chat_prefernce_is_already_enabled');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'chat_pref_enabled'\n });\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n return;\n }\n\n // set all the needed props for the template to render (basically anything attached to `this`)\n // Messenger plugin – comparare this user ID hash with FB user\n this.identityMatchVal = JSON.stringify({\n email_hash: emailHash,\n name_hash: nameHash\n });\n this.dataRefVal = dataRefJWT + '_txnID_' + txnId + '_plugin_' + pluginType + '_token_' + token + '_locale_' + lang + '_' + country;\n this.originVal = window.location.origin;\n this.pageIdVal = _squid.$config.deploy.isLive() ? _fbMessenger2['default'].FB_PROD_PAGE_ID[country] : _fbMessenger2['default'].FB_TEST_PAGE_ID;\n\n if (pluginType === 'CHECKBOX') {\n this.uuidVal = payerId + '_' + _uuid2['default'].v1(); // the `user_ref`, which includes the user's payer ID\n this.isPrechecked = _fbMessenger2['default'].PRECHECKED_COUNTRIES.includes(country);\n if (_squid.$util.sessionStorageEnabled()) {\n window.sessionStorage.setItem('checkboxUUIDVal', this.uuidVal);\n }\n }\n\n // load the correct SDK based on the user's locale\n // it'll fallback to en_US if the locale isn't supported by facebook\n _squid.$dom.loadScript('facebook-jssdk', 'https://www.paypalobjects.com/fbjs/' + lang + '_' + country + '/sdk.js').then(function () {\n if (window.FB) {\n _this.fbAsyncInit();\n\n // NOTE: uncomment to test on stage and localhost\n // this.cbSTMPlugin({\n // event: 'identity_match',\n // ref: this.dataRefVal,\n // result: 'match'\n // });\n }\n })['catch'](function (err) {\n // just log that script is not loaded\n // messenger is an optional service which should not block payment done page rendering\n return _logger.$logger.info('fb_messenger_load_script_error', { error: err && err.message });\n });\n\n this.cbSTMPlugin = function (evt) {\n if (pluginType === 'STM') {\n if (evt.event === 'rendered') {\n _logger.$logger.info('STM_plugin_rendered');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_rendering_plugin',\n eligibility_reason: 'plugin_rendered'\n });\n }\n\n if (evt.event === 'identity_match' && evt.result === 'match') {\n _logger.$logger.info('FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_identity_matching',\n eligibility_reason: 'identity_matched'\n });\n\n _this.dataRefVal = evt.ref;\n\n _jquery2['default'].ajax({\n url: isMobile ? _fbMessenger2['default'].FB_USER_API_MOBILE_URL : _fbMessenger2['default'].FB_USER_API_URL,\n xhrFields: { withCredentials: true }\n }).always(function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$responseText = _ref2.responseText,\n responseText = _ref2$responseText === undefined ? '' : _ref2$responseText;\n\n var json = responseText.substring(responseText.indexOf('{'));\n var data = JSON.parse(json);\n\n _logger.$logger.info('callFBToGetBAToken_call', data);\n messengerIntegration.action('callFBToGetBAToken', {\n data: { userIdentifier: data.user_identifier },\n success: function success() {\n var getBAResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isSuccessful = getBAResponse.success,\n batoken = getBAResponse.batoken;\n\n if (isSuccessful) {\n _logger.$logger.info('BAToken_from_FB', {\n batoken: batoken\n });\n\n var fbBAToken = batoken;\n var xoJSData = void 0;\n\n if (_squid.$config.deploy.isLocal()) {\n xoJSData = {\n 'data-env': 'local',\n 'data-stage': 'msmaster',\n 'data-no-bridge': ''\n };\n\n // Generate new FB Channel BA and update while testing, BA gets invalidated in few hours\n fbBAToken = 'BA-5UD039368V581733E';\n } else if (_squid.$config.deploy.isStage() || _squid.$config.deploy.isSandbox()) {\n xoJSData = {\n 'data-env': 'sandbox',\n 'data-no-bridge': ''\n };\n } else {\n xoJSData = {\n 'data-env': 'production',\n 'data-no-bridge': ''\n };\n }\n\n var launchBAFlow = function launchBAFlow() {\n _logger.$logger.info('Launch_BA_flow_with_token', { fbBAToken: fbBAToken });\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'prepare_billing_agreement',\n eligibility_reason: 'identity_matched',\n click_source: 'pay_now',\n ba_token: fbBAToken\n });\n\n window.paypal.Checkout.contexts.iframe = true;\n if (_squid.$util.localStorageEnabled()) {\n window.localStorage.setItem(_fbMessenger2['default'].FB_BA_SHOWN_FLAG, 'true');\n }\n window.paypal.Checkout.render({\n experience: {\n messenger: true,\n override_fbpp_repeat: overrideRepeatUserFlag\n },\n payment: function payment() {\n return fbBAToken;\n },\n\n onAuthorize: function onAuthorize() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n baToken = _ref3.billingToken;\n\n _logger.$logger.info('User_accepted_FB_BA');\n\n var isUnchecked = _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxPluginState') === 'unchecked';\n var eligibility_reason = isUnchecked ? 'checkbox_plugin_unchecked' : 'checkbox_plugin_checked';\n if (isUnchecked) {\n _logger.$logger.info('user_not_accepted_messenger_notifications');\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n (0, _jquery2['default'])('#ba-integration-content').show();\n } else {\n _logger.$logger.info('user_accepted_checkbox_messenger_notifications');\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n (0, _jquery2['default'])('#messenger-ba-integration-content').show();\n }\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'process_billing_agreement',\n eligibility_reason: eligibility_reason,\n click_source: 'agree_continue',\n ba_token: fbBAToken\n });\n\n _this.confirmCheckboxPluginOptIn();\n messengerIntegration.action('notifyFBOntBAAuthorize', {\n data: { baToken: baToken },\n success: function success() {\n var authorizeResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (authorizeResponse.success) {\n _logger.$logger.info('notifyFBOntBAAuthorize_call_success!');\n } else {\n _logger.$logger.info('notifyFBOntBAAuthorize_call_failure!');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(authorizeResponse),\n error_type: 'failure',\n error_source: 'notifyFBOntBAAuthorize'\n });\n }\n }\n });\n\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'prepare_billing_agreement_success',\n eligibility_reason: eligibility_reason,\n click_source: 'return_to_merchant',\n ba_token: fbBAToken\n });\n }\n });\n };\n if (window.paypal) {\n _logger.$logger.info('xo_JS_is_already_present');\n launchBAFlow();\n } else {\n _squid.$dom.loadScript('xo-js', 'https://www.paypalobjects.com/api/checkout.js', 0, xoJSData).then(function () {\n _logger.$logger.info('xo_JS_got_loaded');\n launchBAFlow();\n });\n }\n } else {\n _logger.$logger.info('callFBToGetBAToken_call_failure!');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(getBAResponse),\n error_type: 'failure',\n error_source: 'callFBToGetBAToken'\n });\n }\n }\n });\n });\n } else if (evt.event === 'identity_match' && evt.result === 'no_match') {\n _logger.$logger.info('No_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'identity_not_matched',\n click_source: 'pay_now'\n });\n } else if (evt.event === 'identity_match' && evt.result === 'no_logged_in_user') {\n _logger.$logger.info('No_loggedin_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'logged_out',\n click_source: 'pay_now'\n });\n } else if (evt.event === 'identity_match' && evt.result === 'failure') {\n _logger.$logger.info('Fail_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(evt),\n error_type: 'failure',\n error_source: 'identity_match'\n });\n } else if (evt.event === 'clicked') {\n _logger.$logger.info('user_accepted_STM_messenger_notifications');\n }\n }\n };\n\n this.fbAsyncInit = function () {\n _logger.$logger.info('Initializing_FB_scripts');\n window.FB.init({\n appId: _fbMessenger2['default'].FB_PROD_APP_ID,\n xfbml: true,\n version: 'v2.11'\n });\n\n // Subscribe to STM\n window.FB.Event.subscribe('send_to_messenger', _this.cbSTMPlugin);\n\n // Subscribe to CHECKBOX\n window.FB.Event.subscribe('messenger_checkbox', function (evt) {\n _logger.$logger.info('messenger_checkbox_event', evt);\n if (evt.event === 'checkbox') {\n if (_squid.$util.sessionStorageEnabled()) {\n window.sessionStorage.setItem('checkboxPluginState', evt.state);\n }\n _logger.$logger.info('checkbox_plugin_state_' + evt.state);\n }\n });\n };\n\n this.confirmCheckboxPluginOptIn = function () {\n _logger.$logger.info('MessengerCheckboxPluginUserConfirmation_event_to_fb', {\n uuidVal: _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxUUIDVal') || '',\n pageIdVal: _this.pageIdVal,\n dataRefVal: _this.dataRefVal\n });\n window.FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {\n page_id: _this.pageIdVal,\n app_id: _fbMessenger2['default'].FB_PROD_APP_ID,\n ref: _this.dataRefVal,\n user_ref: _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxUUIDVal') || ''\n });\n };\n },\n exit: function exit() {\n _logger.$logger.info('Messenger_plugin_EXIT_event');\n }\n }\n});\n\n\n_angular.noop;\n\n_logger.$logger;\n\n_squid.$Component;\n\n_squid.$dom;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_index.$DeviceInfo;\n\n_index2.$CheckoutSessionModel;\n\n_index3.$MessengerIntegrationDataModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/messenger-plugin/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\\t
    \\n\\n\\t\\t
    \\n\\t\\t
    \\n\\n\\t\\t
    \\n\\t\\t
    \\n\\n\\t
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/notYou/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoNotYouComponent = undefined;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-page-components/src/notYou/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-page-components/src/notYou/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoNotYouComponent = exports.$xoNotYouComponent = _squid.$Component.extend('$xoNotYou', {\n tag: 'xo-not-you',\n template: _template2['default'],\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve(),\n appData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve(),\n cart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token).retrieve()\n };\n }\n },\n actions: {\n onClick: function onClick() {\n if (_thirdPartyInfo.thirdPartyInfo.isVenmoEligible()) {\n this.actions.preferToPayWithVenmo();\n return;\n }\n this.actions.logout();\n },\n preferToPayWithVenmo: function preferToPayWithVenmo() {\n _logger.$logger.info('click_prefer_to_pay_with_venmo');\n _uiRouter.$state.go('checkout.payWithSelection', {}, { location: false });\n },\n logout: function logout() {\n var _this = this;\n\n _logger.$logger.info('not_you_logout');\n if (window.xchild && _squid.$util.isIFrame() && window.paypal && !window.paypal.isWebView()) {\n window.xchild.hide();\n\n var url = window.location.href.split('#')[0];\n var xprops = _squid.$util.extend({}, window.xprops);\n\n xprops.url = url;\n xprops.payment = function () {\n return _this.models.auth.logout().then(function () {\n return _angular.$rootScope.token;\n });\n };\n\n return window.ppxo.Checkout.renderPopupTo(window.xchild.getParentRenderWindow(), xprops);\n }\n\n this.models.auth.logoutAndRedirect('NOT_YOU');\n }\n },\n lifecycle: {\n populate: function populate() {\n var getMessage = function getMessage() {\n if (_thirdPartyInfo.thirdPartyInfo.isVenmoEligible() && !_thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token)) {\n return _squid.$locale.content.get('memberReview.preferToPayWithVenmo');\n }\n\n return _squid.$locale.content.get('memberReview.notYou');\n };\n\n this.message = getMessage();\n this.token = _angular.$rootScope.token;\n }\n }\n});\n\nangular.value(\"$xoNotYouComponent\", $xoNotYouComponent);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_squid.$Component;\n\n_squid.$util;\n\n_squid.$locale;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_thirdPartyInfo.thirdPartyInfo;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/notYou/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/notYou/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"{{ this.message }}\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/returnParams/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar addValidParam = __webpack_require__(\"../node_modules/xo-page-components/src/utils/index.js\").addValidParam;\n\nfunction returnWPSParams(checkoutCart, checkoutSession, returnToMerchantMethod, is_cart_upload_flow) {\n var params = {};\n var customData = checkoutCart.get('purchase.custom');\n\n if (returnToMerchantMethod === 'POST') {\n // TODO: find out why we get postbackData as undefined\n // UPDATE: couldn't reproduce an issue on the stage for now\n if (checkoutSession.postbackData) {\n params = checkoutSession.postbackData;\n }\n } else {\n var transactionDetail = checkoutSession.transactionDetails;\n\n if (transactionDetail) {\n addValidParam(params, 'tx', transactionDetail.id);\n addValidParam(params, 'st', transactionDetail.state);\n\n if (transactionDetail.amount) {\n addValidParam(params, 'amt', transactionDetail.amount.total);\n addValidParam(params, 'cc', transactionDetail.amount.currency);\n }\n }\n\n // Cart uploads can have more than one item so we don't add any in return URL\n if (!is_cart_upload_flow) {\n var itemDetail = checkoutSession.get('itemsList.0');\n if (itemDetail) {\n addValidParam(params, 'item_name', itemDetail.name);\n addValidParam(params, 'item_number', itemDetail.sku);\n }\n }\n\n addValidParam(params, 'cm', customData);\n }\n return params;\n}\n\n/**\n * this API function is used by hermesnodeweb/public/pages/xo-end and xoonboardingnodeweb/public/pages/xo-end\n * Create params to return back to the merchant after clicking on \"Return to merchant\" on the Done page.\n * buy-now and cart-upload params are slightly different: given cart-upload might have multiple items,\n * please refer https://github.paypal.com/NodeXOShared/xo-hermes-checkout/blob/master/apis/session/postBackDataMapper.js\n * to know more details about post back data\n\n * @param {Object (angular model)} cart model\n * @param {Object (angular model)} session model\n * @param {String} http method, either \"POST\" or \"GET\"\n * @param {String} feature type (WPS only for now)\n * @param {Boolean} flag that indicates if it's a cart upload or not\n * @returns {object} params to pass back to the merchant\n*/\nmodule.exports = {\n $returnParams: function $returnParams(checkoutCart, checkoutSession, returnToMerchantMethod, feature, is_cart_upload_flow) {\n if (feature === 'WPS') {\n return returnWPSParams(checkoutCart, checkoutSession, returnToMerchantMethod, is_cart_upload_flow);\n }\n return {};\n }\n};\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/subscription-terms/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _subscriptionTerms = __webpack_require__(\"../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js\");\n\nvar _subscriptionTerms2 = _interopRequireDefault(_subscriptionTerms);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nmodule.exports = {\n getFirstAmount: _subscriptionTerms2['default'].getFirstAmount,\n getFormattedFirstAmount: _subscriptionTerms2['default'].getFormattedFirstAmount,\n getItemOptions: _subscriptionTerms2['default'].getItemOptions,\n getItemName: _subscriptionTerms2['default'].getItemName,\n getCurrencyCode: _subscriptionTerms2['default'].getCurrencyCode,\n getTermsText: _subscriptionTerms2['default'].getTermsText,\n getEffectiveDate: _subscriptionTerms2['default'].getEffectiveDate\n};\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar BILL_PERIOD_DAY = 'DAY';\nvar BILL_PERIOD_WEEK = 'WEEK';\nvar BILL_PERIOD_MONTH = 'MONTH';\nvar BILL_PERIOD_YEAR = 'YEAR';\nvar TRIAL_SUBSCRIPTION = 'TRIAL';\nvar REGULAR_SUBSCRIPTION = 'REGULAR';\nvar INFINITE_CYCLES = 'INFINITE';\n\n/**\n * Plural time unit\n * True: time unit will be one of: days, weeks, months, years\n * False: time unit will be one of: day, week, month, year\n * @type {boolean}\n */\nvar pluralTimeUnit = false;\n\n/**\n * If a statement has hasPriorTerm=true , then the statement will begin with \"Then\"\n * e.g. Then 2$ for next 4 months\n * otherwise statement will be\n * 2$ for next 4 months\n * @type {boolean}\n */\nvar hasPriorTerm = false;\n\n/**\n * Returns a localized text from given key and props\n * @param key\n * @param props\n */\nfunction localizedContent(key, props) {\n return _squid.Content.get(key, props) && _squid.Content.get(key, props).toString();\n}\n\n/**\n * Computes the singular or plural form for time unit\n * @param billPeriod\n * @returns {string}\n */\nfunction computeTimeUnit(billPeriod) {\n var timeUnit = void 0;\n\n switch (billPeriod) {\n case BILL_PERIOD_DAY:\n timeUnit = pluralTimeUnit ? 'days' : 'day';\n break;\n case BILL_PERIOD_WEEK:\n timeUnit = pluralTimeUnit ? 'weeks' : 'week';\n break;\n case BILL_PERIOD_MONTH:\n timeUnit = pluralTimeUnit ? 'months' : 'month';\n break;\n case BILL_PERIOD_YEAR:\n timeUnit = pluralTimeUnit ? 'years' : 'year';\n break;\n default:\n timeUnit = '';\n }\n\n return localizedContent('wpsSubscription.label.' + timeUnit);\n}\n\n/**\n * Format amount\n * @param amount\n * @param currencyCode\n * @returns {string} A formatted amount string with currency code or free if 0\n */\nfunction computeAmount(amount, currencyCode) {\n if (amount === 0) {\n return localizedContent('wpsSubscription.label.free');\n } else {\n return (0, _squid.formatCurrency)(amount, currencyCode, false);\n }\n}\n\n/**\n * This method computes first trial key\n * @returns {string} Content Key for 1st trial, which must be prepended by wpsSubscription.message\n */\nfunction computeFirstTrialKey() {\n if (pluralTimeUnit) {\n // {amount} for the first {timePeriod} {timeUnit}\n return 'firstTrialPeriod.plural';\n } else {\n // {amount} for the first {timeUnit}\n return 'firstTrialPeriod.singular';\n }\n}\n\n/**\n * This method computes content key for 2nd trial\n * @returns {string} Content Key for 2nd trial, which must be prepended by wpsSubscription.message\n */\nfunction computeSecondTrialKey() {\n if (pluralTimeUnit) {\n // Then {amount} for the next {timePeriod} {timeUnit}\n return 'secondTrialPeriod.plural';\n } else {\n // Then {amount} for the next {timeUnit}\n return 'secondTrialPeriod.singular';\n }\n}\n\n/**\n * Computes and returns content key for regular subscription\n * There can be 12 variations of regular subscription content\n * @param totalCycles\n * @returns {string} Content Key for 2nd trial, which must be prepended by wpsSubscription.message\n */\nfunction computeRegularSubscriptionKey(totalCycles) {\n var key = 'regularSubscriptionPeriod';\n\n if (hasPriorTerm) {\n // Content starts with Then {amount} for ......\n key += '.withPriorTerms';\n } else {\n // Content does NOT starts with Then\n key += '.noPriorTerms';\n }\n\n if (pluralTimeUnit) {\n // Content has: {amount} for each 2 days/weeks/months/years\n key += '.plural';\n } else {\n // Content has: {amount} for each day/week/month/year\n key += '.singular';\n }\n\n switch (+totalCycles) {\n case 0:\n case 1:\n // Text will look like $20.00 USD for the next 2 months\n // Content does NOT end with: for 3 installments\n key += '.nonRecurring';\n break;\n case Infinity:\n // Content ends with: for each 2 months OR for each month\n // Content will look like $30.00 USD for each week\n key += '.recurringInfinite';\n break;\n default:\n // Content ends with: for 3 installments\n // Content will look like $100.00 USD for each 2 months, for 3 installments\n key += '.recurring';\n }\n return key;\n}\n\n/**\n * Prepares and returns an individual term text string\n * @param subscriptionTerms\n * @param index\n * @param currencyCode\n * @returns {string}\n */\nfunction prepareIndividualTermText(subscriptionTerms, index, currencyCode) {\n var amount = +subscriptionTerms[index].amount,\n billPeriod = subscriptionTerms[index].billPeriod,\n periodType = subscriptionTerms[index].periodType,\n billFrequency = +subscriptionTerms[index].billFrequency,\n totalCycles = +subscriptionTerms[index].totalCycles;\n var contentKey = void 0;\n hasPriorTerm = index > 0;\n pluralTimeUnit = billFrequency > 1;\n\n if (periodType === TRIAL_SUBSCRIPTION) {\n if (index === 0) {\n // First Trial\n contentKey = computeFirstTrialKey();\n } else if (index === 1) {\n // Second Trial\n contentKey = computeSecondTrialKey();\n }\n } else if (periodType === REGULAR_SUBSCRIPTION) {\n contentKey = computeRegularSubscriptionKey(totalCycles);\n }\n contentKey = 'wpsSubscription.message.' + contentKey;\n var templatePlaceholderData = {\n amount: computeAmount(amount, currencyCode),\n timePeriod: billFrequency,\n timeUnit: computeTimeUnit(billPeriod),\n installmentCount: totalCycles\n };\n\n return localizedContent(contentKey, templatePlaceholderData);\n}\n\nfunction mapBaResponse(baResponseData) {\n var mappedSubscriptionDetails = {};\n var plan = baResponseData && baResponseData.plan;\n var allTerms = plan && plan.payment_definitions;\n var mappedTerms = [];\n var firstTrialAmount = null;\n var regularAmount = void 0;\n mappedSubscriptionDetails.currencyCode = plan && plan.currency_code;\n\n if (allTerms) {\n allTerms.forEach(function (eachTerm) {\n var totalCycles = eachTerm.duration === INFINITE_CYCLES ? Infinity : eachTerm.cycles;\n var eachMappedTerm = {\n amount: eachTerm.amount && eachTerm.amount.value / 100,\n billPeriod: eachTerm.frequency,\n periodType: eachTerm.type,\n billFrequency: eachTerm.frequency_interval,\n totalCycles: totalCycles\n };\n if (eachTerm.type === TRIAL_SUBSCRIPTION && eachTerm.index === '1') {\n firstTrialAmount = eachMappedTerm.amount;\n } else if (eachTerm.type === REGULAR_SUBSCRIPTION) {\n regularAmount = eachMappedTerm.amount;\n }\n mappedTerms.push(eachMappedTerm);\n });\n\n // firstTrialAmount can be zero for free trial, null for no trial\n // and valid value if there is trial amount\n mappedSubscriptionDetails.firstAmount = firstTrialAmount !== null ? firstTrialAmount : regularAmount;\n mappedSubscriptionDetails.subscriptionTerms = mappedTerms;\n }\n\n return mappedSubscriptionDetails;\n}\n\n/**\n * Prepare and return a subscription terms\n * @param baResponseData\n * @returns {Object} Containing Subscription Terms Text\n */\nfunction getTermsText(baResponseData) {\n var subscriptionDetails = mapBaResponse(baResponseData);\n var subscriptionTerms = subscriptionDetails.subscriptionTerms;\n var currencyCode = subscriptionDetails.currencyCode;\n var termTextList = [];\n\n for (var i = 0, len = subscriptionTerms.length; i < len; i++) {\n termTextList.push(prepareIndividualTermText(subscriptionTerms, i, currencyCode));\n }\n return termTextList;\n}\n\n/**\n * Returns a un formatted first amount from ba response\n */\nfunction getFirstAmount(baResponseData) {\n var subscriptionDetails = mapBaResponse(baResponseData);\n\n return subscriptionDetails.firstAmount;\n}\n\n/**\n * Returns the currency code\n */\nfunction getCurrencyCode(baResponseData) {\n var plan = baResponseData && baResponseData.plan;\n\n return plan && plan.currency_code;\n}\n\n/**\n * Returns a formatted first amount from ba response data\n */\nfunction getFormattedFirstAmount(baResponseData) {\n var amount = getFirstAmount(baResponseData);\n var currencyCode = getCurrencyCode(baResponseData);\n\n return (0, _squid.formatCurrency)(amount, currencyCode, false);\n}\n\n/**\n * Retrieve item details\n */\nfunction getItemOptions(baResponseData) {\n var itemDetails = baResponseData && baResponseData.items && baResponseData.items[0];\n\n return itemDetails.options;\n}\n\n/**\n * Retrieve item name\n */\nfunction getItemName(baResponseData) {\n if (!baResponseData) {\n return;\n }\n var _baResponseData$items = baResponseData.items;\n _baResponseData$items = _baResponseData$items === undefined ? [] : _baResponseData$items;\n var _baResponseData$items2 = _baResponseData$items[0];\n _baResponseData$items2 = _baResponseData$items2 === undefined ? {} : _baResponseData$items2;\n var name = _baResponseData$items2.name;\n\n return name;\n}\n\nfunction getEffectiveDate(baResponseData) {\n return baResponseData && baResponseData.effective_date;\n}\n\nmodule.exports = {\n getFirstAmount: getFirstAmount,\n getFormattedFirstAmount: getFormattedFirstAmount,\n getItemOptions: getItemOptions,\n getItemName: getItemName,\n getCurrencyCode: getCurrencyCode,\n getTermsText: getTermsText,\n getEffectiveDate: getEffectiveDate\n};\n\n_squid.formatCurrency;\n\n_squid.Content;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/utils/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _fbMessenger = __webpack_require__(\"../node_modules/xo-page-components/src/constants/fbMessenger.js\");\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nmodule.exports = {\n /**\n * add non empty key, value to the object\n * @param {Object} object where to add new key, value\n * @param {String} key\n * @param {Any type} value, can not be empty\n * @returns {void}\n */\n addValidParam: function addValidParam(obj, key, val) {\n if (!obj) {\n return;\n }\n if (typeof key === 'string' && key && val !== undefined && val !== null) {\n obj[key] = val;\n }\n },\n\n // Get PXP context for Messenger feature\n getMessengerPXPContext: function getMessengerPXPContext() {\n var isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n var overrideMobileUserFlag = _squid.$util.param(_fbMessenger2['default'].OVERRIDE_FBPP_MOBILE_FLAG);\n var channelVal = isMobile ? _fbMessenger2['default'].MOBILE_CHANNEL : _fbMessenger2['default'].WEB_CHANNEL;\n var pxpContext = {\n 'ctx.COUNTRY': _squid.$locale.country,\n 'ctx.CHANNEL': overrideMobileUserFlag ? _fbMessenger2['default'].WEB_CHANNEL : channelVal,\n 'ctx.LANGUAGE': _squid.$locale.lang + '_' + _squid.$locale.country\n };\n\n return pxpContext;\n },\n\n isDolphinEligibleOnWpsDone: function isDolphinEligibleOnWpsDone(stateName) {\n return (/checkout\\.done/.test(stateName) && !!_squid.$util.param('ulToastWpsDone')\n );\n }\n}; /* eslint-disable angular/typecheck-string */\n\n\n_squid.$util;\n\n_squid.$locale;\n\n_index.$DeviceInfo;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-page-components/src/value-props/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/squid/dist/index.js\"), __webpack_require__(\"../node_modules/noop-loader/index.js!../node_modules/xo-page-components/src/value-props/template.html\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (squid, template) {\n squid.module('xo-value-props.directive', ['squid']).directive('xoValueProps', function () {\n return {\n template: template,\n restrict: 'E',\n scope: {\n type: '@?',\n title: '@?',\n text: '@?',\n textContent: '@?',\n imageUrl: '@?'\n },\n link: function link(scope, element, attrs) {\n if (angular.isString(attrs.imageUrl)) {\n // Only do this when image-url is defined so that we do not affect default behavior. These image-url\n // are configured through pxp tool for factor based experiments, hence they should all should adhere\n // to standard size i.e. 150X150 pixels.\n attrs.$observe('imageUrl', function (imageUrl) {\n var url = imageUrl;\n var propImg = angular.element(element[0].querySelector('div.prop-img'));\n var isRetina = window && window.matchMedia && window.matchMedia('(-webkit-min-device-pixel-ratio: 2), ' + '(min--moz-device-pixel-ratio: 2), ' + '(-o-min-device-pixel-ratio: 2/1),' + '(min-device-pixel-ratio: 2),' + '(min-resolution: 192dpi), ' + '(min-resolution: 2dppx)').matches;\n\n if (isRetina) {\n var index = url.lastIndexOf('.'); // index at which file extension start\n url = url.substring(0, index) + '_2x' + url.substring(index, url.length);\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'background-size': '150px 150px',\n 'margin-top': '0px'\n });\n } else {\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n }\n });\n }\n }\n };\n });\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-return-to-merchant/dist/formatReturnContent.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nexports.formatReturnContent = formatReturnContent;\nvar MAX_MERCHANT_NAME_LENGTH = exports.MAX_MERCHANT_NAME_LENGTH = 15;\n\nfunction formatReturnContent($renderContent, merchantName) {\n if (merchantName && merchantName.length < MAX_MERCHANT_NAME_LENGTH) {\n return $renderContent('common.returnToMerchant', { merchantName: merchantName });\n }\n\n return $renderContent('common.returnToDefaultMerchant');\n}\n\n/***/ }),\n\n/***/ \"../node_modules/xo-return-to-merchant/dist/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _util = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/util.js\");\n\nObject.defineProperty(exports, '$ReturnToMerchant', {\n enumerable: true,\n get: function get() {\n return _util.$ReturnToMerchant;\n }\n});\n\nvar _formatReturnContent = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/formatReturnContent.js\");\n\nObject.defineProperty(exports, 'formatReturnContent', {\n enumerable: true,\n get: function get() {\n return _formatReturnContent.formatReturnContent;\n }\n});\nObject.defineProperty(exports, 'MAX_MERCHANT_NAME_LENGTH', {\n enumerable: true,\n get: function get() {\n return _formatReturnContent.MAX_MERCHANT_NAME_LENGTH;\n }\n});\n\n/***/ }),\n\n/***/ \"../node_modules/xo-return-to-merchant/dist/util.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ReturnToMerchant = undefined;\nexports.goTo = goTo;\nexports.postToMerchant = postToMerchant;\nexports.postTo = postTo;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction goTo(url, forceRedirect) {\n if (!url) {\n return;\n }\n\n _logger.$logger.info(url.indexOf('PayerID') > -1 ? 'return_to_merchant' : 'cancel_to_merchant', {\n url: url\n });\n\n // if V4 in-context integration, we'll terminate and call the close handler.\n if (window.xchild) {\n _logger.$logger.done();\n _angular.$rootScope.$emit('loading');\n\n var paymentToken = _angular.$rootScope.token;\n var cart = _index2.$CheckoutCartModel.instance(paymentToken);\n var appData = _index2.$CheckoutAppDataModel.instance(paymentToken);\n var orderID = paymentToken;\n var intent = cart.payment_action;\n var billingToken = cart.billing && cart.billing.ba_token;\n var paymentID = appData.payment_id;\n var cancelUrl = url;\n\n return window.xprops.onCancel({\n paymentToken: paymentToken,\n billingToken: billingToken,\n orderID: orderID,\n paymentID: paymentID,\n intent: intent,\n cancelUrl: cancelUrl\n });\n }\n\n var isHTTPUrl = Boolean(url.indexOf('http') === 0 || url.indexOf('www') === 0);\n var showPaymentSuccess = Boolean(_index.$DeviceInfo.isDevice() && !isHTTPUrl);\n\n if (showPaymentSuccess) {\n _logger.$logger.info('redirect', {\n url: url\n });\n _angular.$window.onunload = _angular.$window.onbeforeunload = function () {// eslint-disable no-empty-function\n };\n\n // wait until state change is done and then redirect\n // for some reason, in case of webview (invoice flow) and code split\n // when user is redirecting to the return url - dynamic chunk fails to load\n // which triggers reload of the previous page\n return _uiRouter.$state.go('checkout.genericMessage', {\n code: 'PAYMENT_SUCCESS',\n returnUrl: url\n })['catch'](function (err) {\n _logger.$logger.info('app_redirect_to_merchant_generic_message_error', {\n error: err && err.message\n });\n })['finally'](function () {\n _angular.$window.location = url;\n });\n }\n\n if (forceRedirect) {\n _squid.$util.redirect(url);\n } else {\n var isVZeroIframe = Boolean(_angular.$rootScope.partnerIntegration) && _squid.$util.isIFrame();\n\n if (isVZeroIframe) {\n _squid.$util.redirect(url, { redirectImmediateParent: true });\n }\n\n // If we are not in minibrowser, do a hard redirect\n else if (_angular.$rootScope.partnerIntegration || !_angular.$rootScope.miniBrowser && !_squid.$util.isIFrame()) {\n _squid.$util.redirect(url);\n } else {\n\n // Construct a message to send to the parent\n var result = this.postToMerchant({\n operation: 'return_to_merchant',\n returnUrl: url,\n updateParent: true\n });\n\n // Otherwise we have no choice but to return to the merchant\n if (!result) {\n _squid.$util.redirect(url);\n }\n }\n }\n\n var userStatus = function userStatus() {\n _logger.$logger.info('redirected_user_still_on_page_second_checkpoint');\n };\n\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('redirected_user_still_on_page_first_checkpoint');\n (0, _angular.$timeout)(userStatus, 10000);\n }, 10000);\n}\n\nfunction postToMerchant(msg) {\n\n try {\n msg = _angular2['default'].toJson(msg, 0);\n\n // If we are not in IE, attempt to send a postMessage\n if (_angular.$window.opener && (_angular.$window.navigator.userAgent.match(/edge/i) || _angular.$window.opener.postMessage && !_angular.$window.navigator.userAgent.match(/msie|trident/i))) {\n _angular.$window.opener.postMessage(msg, '*');\n _logger.$logger.info('minibrowser_postmessage');\n return true;\n }\n // Otherwise, attempt to send a message through the iframe bridge\n var bridge = _angular.$window.opener && _angular.$window.opener.frames && _angular.$window.opener.frames.length && _angular.$window.opener.frames.PayPalBridge;\n\n if (bridge && bridge.returnToParent) {\n bridge.returnToParent(msg);\n _logger.$logger.info('minibrowser_bridgemessage');\n return true;\n }\n\n _logger.$logger.warn('minibrowser_nopostback');\n } catch (err) {\n _logger.$logger.error('minibrowser_postback_error', {\n error: err.stack || err.toString()\n });\n }\n\n return false;\n}\n\nfunction postTo(url, msg) {\n var form = document.createElement('form');\n\n form.method = 'POST';\n form.action = url;\n form.className = 'hide';\n\n for (var key in msg) {\n var input = document.createElement('input');\n\n input.name = key;\n input.value = msg[key];\n form.appendChild(input);\n }\n\n _angular.$window.document.body.appendChild(form);\n form.submit();\n _logger.$logger.info('web_postmessage');\n return true;\n}\n\nvar $ReturnToMerchant = exports.$ReturnToMerchant = {\n goTo: goTo,\n postToMerchant: postToMerchant,\n postTo: postTo\n};\n\n_angular2['default'].value(\"goTo\", goTo);\n_angular2['default'].value(\"postToMerchant\", postToMerchant);\n_angular2['default'].value(\"postTo\", postTo);\n_angular2['default'].value(\"$ReturnToMerchant\", $ReturnToMerchant);\n_index.$DeviceInfo;\n\n_logger.$logger;\n\n_uiRouter.$state;\n\n_squid.$util;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutAppDataModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-shipping-change/src/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ShippingChangeFactory = $ShippingChangeFactory;\n\nvar _util = __webpack_require__(\"../node_modules/xo-shipping-change/src/util.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nfunction $ShippingChangeFactory(token, checkoutAppData, checkoutSession, checkoutCart) {\n return {\n getCartTotal: function getCartTotal() {\n return (0, _util.getCartTotal)(checkoutCart);\n },\n getPayload: function getPayload() {\n return checkoutSession.retrieve().then(function () {\n var shipping = checkoutSession.get('shipping');\n var paymentID = checkoutAppData.get('payment_id');\n var billingToken = checkoutCart.get('billing.ba_token', null);\n\n return (0, _util.getPayload)(token, paymentID, billingToken, shipping);\n });\n },\n updateCart: function updateCart() {\n return (0, _util.updateCart)(checkoutSession, checkoutCart);\n },\n callOnShippingChange: function callOnShippingChange(payload) {\n var allowChangeShipping = checkoutAppData.get('flags.allow_change_shipping', false);\n\n if (!allowChangeShipping) {\n return (0, _squid.$promise)({\n cartHasChanged: false,\n rejected: false\n });\n }\n\n return (0, _util.callOnShippingChange)(payload, checkoutCart, checkoutSession);\n }\n };\n}\n\nangular.value(\"$ShippingChangeFactory\", $ShippingChangeFactory);\n_util.getCartTotal;\n\n_util.getPayload;\n\n_util.updateCart;\n\n_util.callOnShippingChange;\n\n_squid.$promise;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-shipping-change/src/util.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.getCartTotal = getCartTotal;\nexports.getPayload = getPayload;\nexports.updateCart = updateCart;\nexports.callOnShippingChange = callOnShippingChange;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nfunction getCartTotal(cart) {\n return {\n currency: cart.get('purchase.amounts.total.currency_code'),\n value: cart.get('purchase.amounts.total.amount')\n };\n}\n\nfunction getPayload(paymentToken, paymentID, billingToken) {\n var shipping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var city = shipping.city,\n state = shipping.state,\n country = shipping.country,\n postal_code = shipping.postal_code;\n\n\n var shippingChangePayload = {\n paymentID: paymentID,\n paymentToken: paymentToken,\n orderID: paymentToken,\n billingToken: billingToken,\n shipping_address: {\n city: city,\n state: state,\n country_code: country,\n postal_code: postal_code\n },\n selected_shipping_method: null\n };\n\n var checkForIxoPaymentDetails = function checkForIxoPaymentDetails() {\n if (!window.xprops || !window.xprops.supplement || !window.xprops.supplement.getPaymentDetails) {\n return (0, _squid.$promise)();\n }\n\n return window.xprops.supplement.getPaymentDetails(shippingChangePayload.paymentID).then(function (payment) {\n if (payment && payment.selected_shipping_method) {\n return (0, _squid.$promise)(payment.selected_shipping_method);\n }\n });\n };\n\n return checkForIxoPaymentDetails().then(function (selectedShippingMethod) {\n shippingChangePayload.selected_shipping_method = selectedShippingMethod;\n }).then(function () {\n return shippingChangePayload;\n });\n}\n\nfunction updateCart(session, cart) {\n session.invalidate();\n\n cart.invalidate();\n cart.api.cache = false;\n\n return _squid.$promise.all([session.reload(), cart.reload()]).then(function () {\n return getCartTotal(cart);\n });\n}\n\nfunction callOnShippingChange(payload, cart, session) {\n\n var rejected = false;\n\n var shippingChangeActions = {\n reject: function reject() {\n rejected = true;\n }\n };\n\n var cartTotal = getCartTotal(cart);\n\n return window.xprops.onShippingChange(payload, shippingChangeActions).then(function () {\n return updateCart(session, cart);\n }).then(function (total) {\n var newCartTotal = getCartTotal(cart);\n var cartHasChanged = cartTotal.currency !== newCartTotal.currency || cartTotal.value !== newCartTotal.value;\n\n return { cartHasChanged: cartHasChanged, rejected: rejected };\n });\n}\n\n_squid.$promise;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-styles/dist/lib/toggle.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-baidu/styles.less\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoReviewPayWithBaiduComponent', {\n tag: 'xo-review-paywith-baidu',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var checkoutSession = this.models.checkoutSession;\n\n\n this.showAmt = true;\n this.defaultFs = checkoutSession.get('plan.sources');\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_checkout.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-baidu/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n\\n

    \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n

    \\n
    \\n
    \\n
    \\n \\n \\n \\n {{ content('paymentMethod.baiduWallet') }}\\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _venmoModels = __webpack_require__(\"../node_modules/xo-third-party-components/src/venmo-models/index.js\");\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n__webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-venmo/styles.less\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCheckoutComponent', {\n tag: 'xo-review-paywith-venmo',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n venmo: _venmoModels.$VenmoOnboardModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _checkout.$CheckoutCartModel.instance(this.token).retrieve()['catch'](_angular.noop),\n payee: _checkout.$CheckoutPayeeModel.instance(this.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var _models = this.models,\n payee = _models.payee,\n venmo = _models.venmo,\n checkoutCart = _models.checkoutCart,\n checkoutAppData = _models.checkoutAppData,\n checkoutSession = _models.checkoutSession;\n\n this.isBillingAgreementsEnabled = Boolean(checkoutCart.get('billing'));\n this.merchantName = checkoutAppData.get('merchant.brand_name') || checkoutAppData.get('merchant.merchant_name') || 'the merchant';\n this.intentNotSale = checkoutCart.get('payment_action') !== 'sale';\n var getAmount = function getAmount() {\n return checkoutSession.get('plan.sources.0.amount');\n };\n var mapperFS = {\n BALANCE: function BALANCE(fs) {\n return {\n type: fs.funding_mode,\n amount: getAmount()\n };\n },\n PAYMENT_CARD: function PAYMENT_CARD(fs) {\n return {\n type: fs.funding_mode,\n card_type: fs.payment_card.type,\n sub_type: 'INSTANT_TRANSFER',\n name: fs.payment_card.type,\n last4: fs.payment_card.number,\n amount: getAmount()\n };\n },\n BANK_ACCOUNT: function BANK_ACCOUNT(fs) {\n return {\n type: fs.funding_mode,\n sub_type: 'INSTANT_TRANSFER',\n name: fs.bank_account.bank_name,\n last4: fs.bank_account.account_number,\n amount: getAmount()\n };\n }\n };\n\n function determineShowAmt() {\n var userAction = checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && checkoutCart.get('purchase.items.length') === 0;\n\n return (0, _pxp.$pxpCartAmt)(checkoutAppData.get('merchant.merchant_country'), payee.get('merchant.id'), noLineItemDetails, checkoutCart.isPurchase()).then(function (showAmount) {\n return checkoutCart.get('payment_action') !== 'authorize' && showAmount;\n });\n }\n\n function getPlanList() {\n var defaultFS = venmo.get('funding_sources.default_option');\n\n if (defaultFS && defaultFS.funding_mode && mapperFS[defaultFS.funding_mode]) {\n return [mapperFS[defaultFS.funding_mode](defaultFS)];\n } else {\n return checkoutSession.get('plan.sources');\n }\n }\n\n function getBackup() {\n var backup = venmo.get('funding_sources.alternate_option');\n\n if (backup && backup.funding_mode && mapperFS[backup.funding_mode]) {\n return mapperFS[backup.funding_mode](backup);\n }\n }\n\n this.venmoUser = '@' + venmo.get('username');\n determineShowAmt().then(function (shouldShowAmt) {\n _this.showAmt = shouldShowAmt;\n });\n this.defaultFs = getPlanList();\n this.backupFs = getBackup();\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_venmoModels.$VenmoOnboardModel;\n\n_pxp.$pxpCartAmt;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-venmo/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n\\n

    \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n

    \\n
      \\n
    • \\n
      \\n \\n \\n \\n {{ content('paymentMethod.venmoBalance') }}\\n \\n \\n \\n {{fs.name}}\\n \\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n
      \\n \\n \\n \\n \\n {{venmoUser}}\\n \\n
    • \\n
    \\n\\n
    \\n
    \\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{content('paymentMethod.venmoMerchantDisclosure')}} {{content('paymentMethod.venmoBackupFS', {name: backupFs.name, last4: backupFs.last4}) }}

    \\n
    \\n\\n
    \\n

    {{content('paymentMethod.venmoMerchantDisclosure')}} {{content('paymentMethod.venmoBalanceInfo')}}

    \\n
    \\n
    \\n\\n
    \\n\\n
    \\n

    {{content('paymentMethod.venmoReceipt')}}

    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.thirdPartyExperience = exports.venmoExperience = exports.thirdPartyInfo = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _sessionStorage = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js\");\n\nvar _sessionStorage2 = _interopRequireDefault(_sessionStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// TODO: Check how the cookie should be read/set (through meta? if read on server side)\nvar PWV_COOKIE = 'pwv';\nvar BA = 'BILLING_AGREEMENT';\n\nvar readCookie = function readCookie(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n\n for (var i = 0, len = ca.length; i < len; i++) {\n var c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n return null;\n};\n\nvar thirdPartyInfo = exports.thirdPartyInfo = {\n /**\n * @name isThirdPartyEligible\n * @returns {Promise}\n */\n isThirdPartyEligible: function isThirdPartyEligible() {\n var _this = this;\n\n return this.isBaiduEligible().then(function (baiduEligibility) {\n return _this.isVenmoEligible() || baiduEligibility;\n });\n },\n\n\n /**\n * @name isBaiduEligible\n * @returns {Promise}\n */\n isBaiduEligible: function isBaiduEligible() {\n return _checkout.$FlowEligibilityModel.instance(_angular.$rootScope.token, {\n params: {\n geolocation: _squid.$meta.geolocation\n }\n }).retrieve().then(function (eligibility) {\n _logger.$logger.info('baidu_eligibility', eligibility);\n return eligibility.baiduWallet;\n });\n },\n\n\n /**\n * @name isVenmoEligible\n * @description Handler to call to determine if user can use Venmo\n * @returns {Boolean}\n */\n isVenmoEligible: function isVenmoEligible() {\n var appData = _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n var cart = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n var merchantCountry = appData.get('merchant.merchant_country');\n var isProcessorDeclined = appData.get('flags.processor_declined');\n var isInvoice = appData.get('flags.is_invoice_flow');\n var isBillingAgreement = cart.isBilling();\n var isMobile = _index.$DeviceInfo.isDevice();\n var isVenmoCookie = this.isVenmoCookiePresent();\n var isSFAuthenticationSession = _squid.$util.param('bt_int_type') === '2';\n var isMSPTransaction = cart.isMultiSellerPurchase();\n var eligibilityParams = {\n isMobile: isMobile,\n isVenmoCookie: isVenmoCookie,\n isNotInvoice: !isInvoice,\n isNotProcessorDeclined: !isProcessorDeclined,\n isNotBillingAgreement: !isBillingAgreement,\n isUSMerchant: merchantCountry === 'US',\n isNotSFAuthenticationSession: !isSFAuthenticationSession,\n isNotMSPTransaction: !isMSPTransaction\n };\n\n var venmoEligibility = Object.keys(eligibilityParams).filter(function (param) {\n return !eligibilityParams[param];\n });\n venmoEligibility = venmoEligibility && venmoEligibility.length > 0 ? 'ineligible:' + venmoEligibility.join() : 'eligible';\n\n _logger.$logger.info('venmo_eligibility', venmoEligibility);\n\n _logger.$logger.info('checkout_fpti', {\n 'is_venmo_cookie': isVenmoCookie ? '1' : '0',\n 'eligibility_reason': venmoEligibility\n });\n\n return Boolean(venmoEligibility === 'eligible');\n },\n\n\n /**\n * @name isVenmoCookiePresent\n * @returns {Boolean}\n */\n isVenmoCookiePresent: function isVenmoCookiePresent() {\n var cookieValue = readCookie(PWV_COOKIE);\n\n return Boolean(cookieValue);\n },\n\n\n /**\n * @name buildVenmoURL\n * @description Build the venmo URL scheme\n * @returns {String}\n */\n buildVenmoURL: function buildVenmoURL() {\n // SCHEME needs to change according to old or new experience\n // const linkType = venmoUrlSchemeType();\n var SCHEME = _squid.$config.urls && _squid.$config.urls.venmoAppSwitchURL['universal'];\n var VENMO_ROUTE = '#/checkout/venmo';\n var LOGIN_ROUTE = '#/checkout/login?venmoError=true';\n var cartModel = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n\n var token = void 0;\n var total = void 0;\n var currency = void 0;\n var intent = void 0;\n\n // Send BA token instead of EC token for a billing agreement purchase\n token = cartModel.get('billing.ba_token') ? cartModel.get('billing.ba_token') : _angular.$rootScope.token;\n // For BA: setting billing agreement as payment_action explicitly, not relying on payment action returned in cart\n intent = cartModel.billing ? BA : cartModel.payment_action;\n\n // total cannot be undefined, outdated venmo app clients will crash otherwise\n total = cartModel.get('purchase.amounts.total.amount', '0');\n currency = cartModel.get('purchase.amounts.total.currency_code', 'none');\n\n var params = (0, _angular.$httpParamSerializer)({\n 'x-success': _angular.$location.absUrl().replace(/#.*$/, VENMO_ROUTE),\n 'x-failure': _angular.$location.absUrl().replace(/#.*$/, LOGIN_ROUTE),\n 'ua': _angular.$window.navigator.userAgent,\n 'merchant_id': _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token).getId(),\n 'token': token,\n total: total,\n currency: currency, // can be undefined for BA w/o purchase\n intent: intent\n });\n\n return SCHEME + '?' + params;\n }\n};\n\nvar venmoExperienceKey = 'VENMO_EXPERIENCE';\n\n// Get whether a token is marked as Venmo experience.\nvar venmoExperience = exports.venmoExperience = {\n set: function set(token) {\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n sessionStorage.setItem(venmoExperienceKey, token);\n },\n get: function get(token) {\n var auth = _auth.$AuthModel.instance();\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n if (auth.logged_in && auth.guest && // Check if Venmo guest account logged in\n sessionStorage.getItem(venmoExperienceKey) === token) {\n return true;\n } else {\n this.set(null);\n return false;\n }\n }\n};\n\nvar allowedThirdPartyExperiences = {\n VENMO: 'VENMO_EXPERIENCE',\n BAIDU: 'BAIDU_EXPERIENCE'\n};\n\nvar THIRD_PARTY_NAMESPSACE = 'THIRD_PARTY_EXPERIENCE';\n\nvar thirdPartyExperience = exports.thirdPartyExperience = {\n setAsVenmoExperience: function setAsVenmoExperience(token) {\n var _JSON$stringify;\n\n var sessionStorage = (0, _sessionStorage2['default'])();\n var payload = JSON.stringify((_JSON$stringify = {}, _JSON$stringify[token] = allowedThirdPartyExperiences['VENMO'], _JSON$stringify));\n\n sessionStorage.setItem(THIRD_PARTY_NAMESPSACE, payload);\n },\n setAsBaiduExperience: function setAsBaiduExperience(token) {\n var _JSON$stringify2;\n\n var sessionStorage = (0, _sessionStorage2['default'])();\n var payload = JSON.stringify((_JSON$stringify2 = {}, _JSON$stringify2[token] = allowedThirdPartyExperiences['BAIDU'], _JSON$stringify2));\n\n sessionStorage.setItem(THIRD_PARTY_NAMESPSACE, payload);\n },\n isThirdPartyExperience: function isThirdPartyExperience(token) {\n var availableExperiences = [];\n\n for (var key in allowedThirdPartyExperiences) {\n availableExperiences.push(allowedThirdPartyExperiences[key]);\n }\n\n var currentExperience = this.getExperience(token);\n\n return Boolean(availableExperiences.indexOf(currentExperience) > -1);\n },\n getExperience: function getExperience(token) {\n var auth = _auth.$AuthModel.instance();\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n // if logged in, and guest, we return the experience if any\n if (auth.logged_in && auth.guest && sessionStorage.getItem(THIRD_PARTY_NAMESPSACE)) {\n var payload = JSON.parse(sessionStorage.getItem(THIRD_PARTY_NAMESPSACE) || '');\n\n return payload && payload[token] || 'MEMBER_EXPERIENCE';\n } else {\n // If not logged in, we reset the third party experience\n this.resetThirdPartyExperience();\n return 'MEMBER_EXPERIENCE';\n }\n },\n resetThirdPartyExperience: function resetThirdPartyExperience() {\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n sessionStorage.removeItem(THIRD_PARTY_NAMESPSACE);\n }\n};\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$meta;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$DeviceInfo;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_angular.$location;\n\n_angular.$httpParamSerializer;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$FlowEligibilityModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nexports['default'] = getSessionStorage;\nvar store = {};\n\n// Polyfill for sessionStorage if not available. Simple variable store\n\nfunction getSessionStorage() {\n try {\n\n window['sessionStorage'].setItem('__feature_test__', '0');\n window['sessionStorage'].removeItem('__feature_test__');\n return window.sessionStorage;\n } catch (err) {\n return {\n getItem: function getItem(key) {\n if (arguments < 1) {\n throw new Error('1 argument required');\n }\n return store[key];\n },\n setItem: function setItem(key, val) {\n if (arguments < 2) {\n throw new Error('2 arguments required');\n }\n store[key] = val;\n },\n removeItem: function removeItem(key) {\n\n delete store[key];\n }\n };\n }\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-third-party-components/src/venmo-models/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$VenmoOnboardModel = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar $VenmoOnboardModel = exports.$VenmoOnboardModel = _squid.$Model.extend('$VenmoOnboardModel', {\n api: new _squid.$Api({\n uri: '/api/venmo/onboard'\n })\n});\n\nangular.value(\"$VenmoOnboardModel\", $VenmoOnboardModel);\n_squid.$Model;\n\n_squid.$Api;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-title/dist/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _template = __webpack_require__(\"../node_modules/xo-title/dist/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().directive('xoTitle', [function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n titleTxt: '@?',\n className: '@?',\n tagName: '@?'\n },\n link: function link($scope, $element) {\n if ($scope.tagName) {\n var newEl = document.createElement($scope.tagName || 'h1');\n\n newEl.className = $scope.className || 'alpha';\n newEl.textContent = '{{ titleTxt }}';\n (0, _angular.$compile)(newEl)($scope);\n $element.empty().append(newEl);\n }\n }\n };\n}]);\n\n/***/ }),\n\n/***/ \"../node_modules/xo-title/dist/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"

    \\n {{ titleTxt }}\\n

    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/builder.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$FptiBuilder', function () {\n /**\n * Build the front-end FPTI event from three data sources\n * 1. the per-product configuration\n * 2. the buzname defined per-route\n * 3. the additional attributes that only available at a specific checkpoint\n *\n */\n\n return _squid.$Class.extend('FptiBuilder', {\n\n resolvePageQualifier: function resolvePageQualifier(trackingData) {\n // The pages can populated pageQualifier to override the default one\n this.pageQualifier = trackingData && trackingData.pageQualifier ? trackingData.pageQualifier\n // because 'fullpage' has been widely embedded into routes\n // we had better to keep it as a place holder\n : 'fullpage'; // update later if it's in-context\n },\n\n build: function build() {\n\n if (!this.trackingData && !this.error) {\n // do nothing if neither page nor error tracking\n return this;\n }\n\n this.resolvePageQualifier(this.trackingData);\n\n this._dataObj = new _model.$FptiDataModel().decorate('base', this.baseData).decorate('buzname', this.trackingData, this.pageQualifier, undefined, this.productOverride).decorate('templateName', this.trackingData, this.pageQualifier).decorate('pageGoal', this.trackingData.pageGoal).decorate('ecToken', this.trackingData.token).decorate('correlationId', (0, _squid.$getLatestCorrelationID)()).decorate('uuid', _model.$CalDataModel.getUUID()).decorate('fieldError', this.error).decorate('pageError', this.error).decorate('pageStartTime', new Date().getTime()).decorate('pxptrackingdata', this.trackingData.pxpData).decorate('transition_time', this.transition_time).decorate('cust', this.cust).decorate('dc', this.dc).decorate('az', this.az).decorate('comp', this.comp).getDataObject(this.isInContext);\n\n return this;\n },\n\n toString: function toString() {\n var dataAry = [];\n\n _angular2['default'].forEach(this._dataObj, function (v, k) {\n dataAry.push(k + '=' + v);\n });\n\n return dataAry.join('&');\n }\n });\n});\n\n_squid.$getLatestCorrelationID;\n\n_squid.$Class;\n\n_model.$FptiDataModel;\n\n_model.$CalDataModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-tracking/dist\", \"../node_modules/xo-tracking/dist/builder.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/button.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$ButtonTrackingService', function () {\n var _beaconUrl = 'https://www.paypalobjects.com/en_US/i/scr/btn_tracking_pixel.gif?teal=null&Id=null&ru=null';\n var _beaconParams = ['fltk', 'calc', 'page', 'xe', 'xt'];\n var _alreadyFired = false;\n\n function _strToElements(str) {\n var elements = {};\n\n if (str && str.length) {\n str.split('&').forEach(function (param) {\n var nvp = param.split('=');\n\n elements[nvp[0]] = nvp[1];\n });\n }\n return elements;\n }\n\n function _fireButtonTrackingBeacon(elements) {\n var url = _beaconUrl;\n var xoData = {};\n\n function buildParam(param, value) {\n var p = '&' + param + '=' + (value ? value : 'null');\n\n return p;\n }\n\n function getGUIID(ts) {\n return _strToElements(ts).vr;\n }\n\n function addToDocument(uri) {\n var img = document.createElement('img');\n\n img.setAttribute('src', uri);\n document.body.appendChild(img);\n }\n\n // Get some params from FPTI data.\n _beaconParams.forEach(function (param) {\n url += buildParam(param, elements[param]);\n });\n\n // Build the rest of the params.\n url += buildParam('fpti', getGUIID(_squid.$cookies && _squid.$cookies.ts));\n url += buildParam('WWW_AKA_MVT_BUTTONS', _squid.$cookies && _squid.$cookies.WWW_AKA_MVT_BUTTONS);\n url += buildParam('WWW_AKA_MVT_ID', _squid.$cookies && _squid.$cookies.WWW_AKA_MVT_ID);\n url += buildParam('ip', _squid.$meta && _squid.$meta.ipaddress);\n\n if (_angular.$rootScope.token) {\n (0, _squid.$populate)(xoData, {\n payee: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n appData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n url += buildParam('mrid', xoData.payee && xoData.payee.getId());\n url += buildParam('calf', xoData.appData && xoData.appData.flow_id);\n addToDocument(url);\n });\n } else {\n url += buildParam('mrid', null);\n url += buildParam('calf', null);\n addToDocument(url);\n }\n }\n\n return {\n fireBeacon: function fireBeacon(fptiData) {\n if (!_alreadyFired && fptiData) {\n var elements = _strToElements(fptiData);\n\n // Fire the beacon if this is a page render.\n if (elements.page) {\n _alreadyFired = true;\n return _fireButtonTrackingBeacon(elements);\n }\n }\n },\n resetAlreadyFired: function resetAlreadyFired() {\n _alreadyFired = false;\n }\n };\n});\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$cookies;\n\n_squid.$populate;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutPayeeModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-tracking/dist\", \"../node_modules/xo-tracking/dist/button.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module('tracking.directive', ['ui.router']).directive('trackSubmit', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('mousedown', function (event) {\n var transition = attr && attr.trackSubmit;\n var trackSubmit = {\n currentRoute: _uiRouter.$state.current,\n transition: transition,\n errors: []\n };\n\n _angular2['default'].forEach($('input.ng-invalid, select.ng-invalid'), function (el) {\n var elem = $(el);\n var elementId = elem.attr('id');\n var elementName = elem.attr('name');\n var errorKey = elem.attr('data-error-key');\n var errorText = elem.has('required') ? 'required' : 'no error key';\n var fieldName = elementId ? elementId : elementName;\n\n if (!fieldName) {\n var elementModel = elem.attr('ng-model');\n\n fieldName = elementModel ? elementModel : 'unnamed-field';\n }\n\n trackSubmit.errors.push({\n fieldName: fieldName,\n errorMessage: errorKey ? errorKey : errorText\n });\n });\n\n _angular.$rootScope.$broadcast('trackSubmit', trackSubmit);\n });\n }\n };\n}).directive('trackLink', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('mousedown', function (event) {\n var state = attr && attr.trackLink;\n\n if (state) {\n var trackLink = {\n currentRoute: _uiRouter.$state.current,\n transition: state\n };\n\n _angular.$rootScope.$broadcast('trackLink', trackLink);\n }\n });\n }\n };\n}).directive('trackClick', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('click', function (event) {\n var state = attr && attr.trackClick;\n\n if (state) {\n var trackClick = {\n currentRoute: _uiRouter.$state.current,\n transition: state\n };\n _angular.$rootScope.$broadcast('trackClick', trackClick);\n }\n });\n }\n };\n}).directive('trackInput', function () {\n /*\n * Track an input tag with track-input attribute\n * you can use the value of track-input attribute as\n * a tracking attr Eg.: track-input=\"xo_guest_yes\"\n */\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('click', function (event) {\n var state = void 0;\n\n if (event.target.type === 'checkbox') {\n if (event.target.checked) {\n state = attr && attr.trackInput + '_CHECKED';\n } else {\n state = attr && attr.trackInput + '_UNCHECKED';\n }\n } else {\n state = attr && attr.trackInput;\n }\n\n var trackInput = {\n currentRoute: _uiRouter.$state.current,\n page: 'main:ec:hermes::fullpage-billing:guest:aries:'\n };\n\n if (state) {\n trackInput.transition = state;\n }\n\n _angular.$rootScope.$broadcast('trackInput', trackInput);\n });\n }\n };\n});\n\n_uiRouter.$state;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/fpti.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _builder = __webpack_require__(\"../node_modules/xo-tracking/dist/builder.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fpti', function () {\n var _beaconUrl = void 0;\n\n // Logic to switch between production/staging urls. This way we don't pollute live logs,\n // and we are able to test on stage using the fpti log viewing tool.\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n _beaconUrl = 'https://tracking.qa.paypal.com/webapps/tracking/ts'; // stage url\n } else {\n _beaconUrl = _squid.$config.urls && _squid.$config.urls.fptiBeaconUrl;\n }\n\n return {\n // Get all the tracking data defined at the page level\n getPageTrackingData: function getPageTrackingData(route) {\n route = route || {};\n\n var trackingData = route.trackingData || {};\n var routeParent = route.parent;\n\n trackingData.token = _angular.$rootScope.token;\n\n while (routeParent) {\n trackingData = _angular2['default'].merge({}, routeParent.trackingData || {}, trackingData);\n routeParent = routeParent.parent;\n }\n return trackingData;\n },\n\n setupDataString: function setupDataString(route, err, data) {\n var trackingData = this.getPageTrackingData(route);\n var PAYPAL = window && window.PAYPAL;\n\n var fptiData = void 0;\n\n if (PAYPAL && typeof PAYPAL.analytics !== 'undefined') {\n PAYPAL.core = PAYPAL.core || {};\n\n var payload = {\n baseData: window.meta.fpti,\n trackingData: trackingData,\n error: err,\n isInContext: _angular.$rootScope.miniBrowser\n };\n\n _angular2['default'].extend(payload, data || {});\n fptiData = new _builder.$FptiBuilder(payload).build().toString();\n\n // FPTI client side tracking only if we have template\n if (route && route.template && _angular2['default'].isFunction(PAYPAL.analytics.setup)) {\n PAYPAL.core.pta = PAYPAL.analytics.setup({\n data: fptiData,\n url: _beaconUrl\n });\n }\n }\n return fptiData;\n }\n };\n}).factory('$fptiError', function () {\n function stringifyErrorMessage(msg) {\n return encodeURIComponent(_angular2['default'].isString(msg) ? msg.split('\\n').slice(0, 2).join('@') // Get the first two lines of stack\n : (_angular2['default'].toJson(msg) || 'undefined').substring(0, 128));\n }\n\n return _squid.$Error.extend({\n construct: function construct(err) {\n if (!err) {\n return;\n }\n this.type = err.type;\n this.field = err.field;\n this.msg = stringifyErrorMessage(err.message || err.error);\n this.code = err.code || err.cause;\n }\n });\n});\n\n_squid.$config;\n\n_squid.$Error;\n\n_builder.$FptiBuilder;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-tracking/dist\", \"../node_modules/xo-tracking/dist/fpti.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n/**\n * xo-tracking encapsulates all the details about instrumentation\n * and only register event listeners during bootstrap\n */\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/angular/angular.min.js\"), __webpack_require__(\"../node_modules/xo-tracking/dist/listener.js\"), __webpack_require__(\"../node_modules/xo-tracking/dist/directive.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (angular) {\n\n // Declare the dependency to register the listeners\n return angular.module('tracking', ['tracking.listener', 'tracking.directive']);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/listener.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($, console) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nvar _builder = __webpack_require__(\"../node_modules/xo-tracking/dist/builder.js\");\n\nvar _button = __webpack_require__(\"../node_modules/xo-tracking/dist/button.js\");\n\nvar _fpti = __webpack_require__(\"../node_modules/xo-tracking/dist/fpti.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n // eslint-disable-line max-statements\n var token = window.meta.token;\n // logAppName is the appname from meta.js. if the logAppName is not defined, default it to 'appNameNotDefined'.\n var appName = _squid.$meta.logAppName || 'appNameNotDefined';\n var addTrackingData = function addTrackingData(object) {\n return _squid.$util.extend(object, {\n dc: _squid.$meta.dc,\n az: _squid.$meta.az,\n cust: _index.$AuthModel.instance().buyer_id || '',\n comp: appName\n });\n };\n var cplSettings = _squid.$config.enableCPL;\n var passesCplThrottle = cplSettings && (typeof cplSettings.throttle === 'undefined' || (0, _squid.$experiment)('cpl_tracking', cplSettings.throttle, token));\n var cplEnabled = passesCplThrottle || _squid.$util.params().forceEnableCPL;\n\n function logTransition(state) {\n return !(state.trackingData && state.trackingData.suppressTransitionLog);\n }\n\n function logStateExit(state) {\n return state.trackingData && state.trackingData.trackStateExit;\n }\n\n function getBeaconUrl() {\n // Logic to switch between production/staging urls. This way we don't pollute live logs,\n // and we are able to test on stage using the fpti log viewing tool.\n return _squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage() ? 'https://tracking.qa.paypal.com/webapps/tracking/ts' // stage url\n : _squid.$config.urls && _squid.$config.urls.fptiBeaconUrl;\n }\n\n /*\n * Triggers pa.js recordClick with custom parameters\n */\n function fptiCustomRecordClick(route, customData) {\n var analyticsInstance, fptiData, fptiDataObj;\n var PAYPAL = window.PAYPAL;\n\n if (PAYPAL && typeof PAYPAL.analytics !== 'undefined') {\n PAYPAL.core = PAYPAL.core || {};\n\n analyticsInstance = new PAYPAL.analytics.Analytics();\n\n fptiData = new _builder.$FptiBuilder({\n trackingData: route.trackingData,\n isInContext: _angular.$rootScope.miniBrowser,\n comp: appName\n // ... Other flow data pass-in here to resolve page qualifier\n }).build();\n\n // Grab the fpti data object and extend with custom params\n // The fpti data obj should include pxp params as well\n fptiDataObj = fptiData._dataObj;\n $.extend(fptiDataObj, customData);\n\n analyticsInstance.setRequestData(fptiDataObj);\n analyticsInstance.recordClick({\n url: getBeaconUrl()\n });\n }\n }\n\n _angular.$rootScope.$on('trackInput', function (event, trackInput) {\n if (!trackInput) {\n return;\n }\n var customData = {\n link: trackInput && trackInput.transition,\n page: trackInput && trackInput.page\n };\n\n fptiCustomRecordClick(trackInput.currentRoute, customData);\n });\n\n _angular.$rootScope.$on('trackClick', function (event, trackClick) {\n if (!trackClick) {\n return;\n }\n var customData = {\n link: trackClick && trackClick.transition\n };\n\n fptiCustomRecordClick(trackClick.currentRoute, customData);\n });\n\n _angular.$rootScope.$on('trackSubmit', function (event, trackSubmit) {\n if (!trackSubmit) {\n return;\n }\n var currentRoute = trackSubmit && trackSubmit.currentRoute;\n var routeName = currentRoute ? currentRoute.name : 'noRoute';\n\n _logger.$logger.info('track_submit', {\n route_name: routeName\n // ID stuff here later\n });\n\n if (logTransition(currentRoute)) {\n routeName = routeName.replace(/\\./g, '_');\n var state = currentRoute.trackingData && currentRoute.trackingData.fptiState || routeName;\n var transition = trackSubmit.transition || state;\n\n _logger.$logger.info(routeName + '_exit', {\n fptiState: state,\n fptiTransition: transition\n });\n }\n\n if (trackSubmit.errors && trackSubmit.errors.length) {\n var fptiFieldErrors = JSON.stringify(trackSubmit.errors);\n\n _logger.$logger.info('checkout_fpti', {\n form_field_errors: fptiFieldErrors\n });\n }\n\n var errors = trackSubmit.errors;\n\n if (_angular2['default'].isArray(errors)) {\n errors.forEach(function (err) {\n _logger.$logger.debug('track_submit_error', err);\n if (_fpti.$fpti) {\n _fpti.$fpti.setupDataString(currentRoute, new _fpti.$fptiError({\n type: 'fieldError',\n field: err.fieldName,\n code: err.errorMessage\n }));\n }\n });\n\n if (errors.length) {\n _logger.$logger.flush(true);\n }\n }\n });\n\n _angular.$rootScope.$on('unhandled_error', function (event, exception) {\n if (_fpti.$fpti) {\n _fpti.$fpti.setupDataString(exception.currentRoute, new _fpti.$fptiError({\n type: 'pageError',\n message: exception.message,\n code: exception.cause\n }));\n }\n });\n\n _angular.$rootScope.$on('trackLink', function (event, trackLink) {\n if (!trackLink) {\n return;\n }\n\n var currentRoute = trackLink.currentRoute;\n var routeName = (currentRoute ? currentRoute.name : 'noRoute').replace(/\\./g, '_');\n var state = currentRoute.trackingData && currentRoute.trackingData.fptiState || routeName;\n\n _logger.$logger.info(routeName + '_exit', {\n fptiState: state,\n fptiTransition: trackLink.transition\n });\n });\n\n _angular.$rootScope.$on('$transition', function (event, data) {\n (0, _angular.$timeout)(function () {\n if (_fpti.$fpti) {\n var fptiData = _fpti.$fpti.setupDataString(data.toState, null, addTrackingData({\n transition_time: data.duration\n }));\n\n // This seems to conflict with CPL data, so don't fire if CPL\n if (!cplEnabled) {\n // Fire and forget button tracking beacon.\n _button.$ButtonTrackingService.fireBeacon(fptiData);\n }\n }\n });\n });\n\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {\n var from = fromState && fromState.name.replace(/\\./g, '_');\n var to = toState && toState.name.replace(/\\./g, '_');\n\n if (from && logTransition(fromState) && logStateExit(fromState)) {\n var trackingData = fromState.trackingData && fromState.trackingData || {};\n\n _logger.$logger.info(from + '_exit', { fptiState: trackingData.fptiState || from, fptiTransition: trackingData.fptiState || from });\n }\n\n _logger.$logger.info('state_change', {\n from: from || 'start',\n to: to || 'end'\n });\n\n // Generate a new CAL correlation_id to be shared until next flow transition (only for view states)\n if (toState.template) {\n _model.$CalDataModel.generateMetaIds();\n }\n\n _angular.$rootScope.currentState = to;\n\n if (to && logTransition(toState)) {\n _logger.$logger.info(to + '_enter', { fptiState: toState.trackingData && toState.trackingData.fptiState || to });\n }\n });\n\n _angular.$rootScope.$on('page_loaded', function (event, from, to) {\n if (from !== 'checkout_init') {\n return;\n }\n var key = _model.$FptiConstants.stateName[to] || 'review';\n var landing_page = _model.$FptiConstants.landing_page[key];\n\n _logger.$logger.info('landing_page', {\n 'from': landing_page,\n 'to': 'process_page_loaded',\n fpti_landing_page: landing_page\n });\n });\n\n _angular.$rootScope.$on('page_reloaded', function () {\n _logger.$logger.flush(true);\n _model.$CalDataModel.generateMetaIds();\n });\n\n _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState) {\n var to = toState.name.replace(/\\./g, '_');\n\n if (toState.hasResolver && to) {\n _logger.$logger.info(to + '_load');\n } else if (to) {\n _logger.$logger.info(to + '_rendering');\n }\n });\n\n _angular.$rootScope.$on('addrDiff', function (event, addrDiff) {\n if (!addrDiff) {\n return;\n }\n _logger.$logger.info('checkout_fpti' + addrDiff);\n });\n\n function getHash(url) {\n if (!url || !~url.indexOf('#')) {\n // eslint-disable-line no-bitwise\n return;\n }\n\n url = url.split('#');\n return url[url.length - 1];\n }\n\n var oldHash = window.location.hash;\n\n window.addEventListener('hashchange', function (event) {\n _logger.$logger.info('hashchange', {\n from: getHash(event.oldURL || oldHash),\n to: getHash(event.newURL || window.location.hash)\n });\n oldHash = window.location.hash;\n });\n\n $(document).on('click', function (event) {\n if (event && event.target && event.target.tagName) {\n var name = event.target.tagName.toLowerCase();\n\n if (event.target.id) {\n name += '#' + event.target.id;\n } else if (event.target.attributes && event.target.attributes['ng-model']) {\n name += ':' + event.target.attributes['ng-model'].value;\n } else if (event.target.className) {\n name += '.' + event.target.className.split(' ').join('.');\n }\n\n _logger.$logger.info('click', { el: name });\n }\n });\n\n if (cplEnabled) {\n window.fptiserverurl = getBeaconUrl();\n\n var firstInvocation = true;\n var trackPageStart = function trackPageStart() {\n if (firstInvocation) {\n firstInvocation = false;\n return;\n }\n try {\n window.PAYPAL.analytics.startCPLTracking();\n } catch (e) {\n console.log('error starting cpl tracking ' + e);\n }\n };\n\n var firstDone = true;\n var trackDone = function trackDone(beaconData) {\n window.PAYPAL.analytics.endCPLTracking({\n pageData: addTrackingData(beaconData),\n inferStart: firstDone\n });\n firstDone = false;\n };\n\n var currentRoute = null;\n\n _angular.$rootScope.$on('startLoad', function () {\n return trackPageStart();\n });\n _angular.$rootScope.$on('$stateChangeSuccess', function (e, route) {\n currentRoute = route;\n });\n\n _angular.$rootScope.$on('allLoaded', function () {\n try {\n var buildParams = {\n productOverride: window.fptiProductOverride,\n trackingData: _fpti.$fpti.getPageTrackingData(currentRoute)\n };\n var legacyFptiData = new _builder.$FptiBuilder(buildParams).build()._dataObj;\n var product = window.fptiProductOverride || 'ec';\n\n legacyFptiData.pgrp = 'main:' + product + ':hermes';\n legacyFptiData.flid = token;\n trackDone(legacyFptiData);\n } catch (e) {\n console.log('error tracking CPL data ' + e);\n }\n });\n }\n});\n\n_index.$AuthModel;\n\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$config;\n\n_squid.$experiment;\n\n_logger.$logger;\n\n_model.$CalDataModel;\n\n_model.$FptiConstants;\n\n_builder.$FptiBuilder;\n\n_button.$ButtonTrackingService;\n\n_fpti.$fpti;\n\n_fpti.$fptiError;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\"), __webpack_require__(\"../node_modules/console-browserify/index.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-tracking/dist/model.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uuid = __webpack_require__(\"../node_modules/node-uuid/uuid.js\");\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular); /* eslint-disable angular/di */\n\n\n_angular2['default'].module().constant('$FptiConstants', {\n // The prototype of buzname data object\n buznameMap: {\n flowgatename: {\n placeHolder: '',\n fptiKey: 'fltp'\n },\n 'flowname': {\n placeHolder: 'ec:hermes:',\n fptiKey: 'flnm'\n },\n 'hier1': {\n placeHolder: 'main_ec_hermes_',\n fptiKey: 'shir'\n },\n 'inout': {\n placeHolder: 'inout',\n fptiKey: 'lgin'\n },\n 'pagename': {\n placeHolder: 'main:ec:hermes',\n fptiKey: 'pgrp'\n },\n 'pagename2': {\n placeHolder: 'main:ec:hermes',\n fptiKey: 'page'\n },\n 'version': {\n placeHolder: 'hermes',\n fptiKey: 'vers'\n }\n },\n // Full list of FPTI keys indexed by readable names\n // This mapping can also be served as default decorator\n fptiKeys: {\n 'businessType': 'bztp',\n 'correlationId': 'calc', // CalDataModel\n 'cust': 'cust',\n 'errorCode': 'eccd',\n 'fieldError': 'erfd',\n 'flowgatename': 'fltp', // buzname\n 'flowname': 'flnm', // buzname\n 'loggedIn': 'lgin', // buzname\n 'merchantId': 'mrid',\n 'merchantType': 'mbtp',\n 'pageError': 'erpg',\n 'pageGoal': 'goal', // route\n 'pageGroup': 'pgrp', // buzname\n 'pageName': 'page', // buzname\n 'pageQualifer': 'qual', // buzname\n 'pageStartTime': 'pgst', // FptiBuilder\n 'pageTechnologyFlag': 'pgtf', // productConfig\n 'paymentFlowId': 'pfid',\n 'rLogId': 'teal',\n 'sessionId': 'fpti',\n 'siteHierarchy': 'shir', // buzname\n 'sourceCi': 's', // productConfig\n 'tealeaf': 'teal',\n 'templateName': 'tmpl', // route\n 'transition_time': 'transition_time',\n 'uuid': 'csci', // CalDataModel\n 'version': 'vers', // buzname\n 'visitorId': 'vid',\n 'ecToken': 'fltk', // metadata\n 'pxpExpSelected': 'xe',\n 'pxpTreatementSelected': 'xt',\n 'pxpQualifiedTreatment': 'qt',\n 'pxpContextId': 'qc',\n 'dc': 'dc',\n 'az': 'az',\n 'comp': 'comp'\n },\n landing_page: {\n login: 'LOGIN',\n econsent: 'eConsent',\n review: 'Review',\n error_page: 'error_page',\n add_card: 'add_card',\n add_bank: 'add_bank',\n billing: 'billing',\n done_page: 'done_page',\n shoppingCart: 'shoppingCart',\n emptyCart: 'emptyCart',\n soldout: 'soldout',\n openButton: 'openButton'\n },\n stateName: {\n checkout_login: 'login',\n checkout_genericError: 'error_page',\n checkout_fastlogin: 'login',\n checkout_econsent: 'econsent',\n checkout_review: 'review',\n checkout_pageAddCard_addCardFlow_addCard: 'add_card',\n checkout_updateCard_addCardFlow_addCard: 'add_card',\n checkout_pageAddFi_bank_add: 'add_bank',\n guest: 'billing',\n checkout_done: 'done_page',\n checkout_guest: 'billing',\n checkout_signup: 'billing',\n guestupgrade_genericError: 'error_page',\n checkout_multistepsignup_multistepsignupaddcard: 'billing',\n checkout_shoppingCart: 'shoppingCart',\n checkout_emptyCart: 'emptyCart',\n checkout_soldout: 'soldout',\n checkout_openButton: 'openButton'\n }\n}).factory('$FptiDataModel', ['$FptiConstants', function ($FptiConstants) {\n var productConfig = {};\n\n // TODO to read from config.json\n productConfig[$FptiConstants.fptiKeys.sourceCi] = 'ci';\n productConfig[$FptiConstants.fptiKeys.pageTechnologyFlag] = 'NodeJS';\n\n /**\n * Utilizing Decorator pattern to allow defining additional logic for specific keys\n */\n return _squid.$Class.extend('FptiDataModel', {\n init: function init() {\n this._dataObj = _angular2['default'].extend({}, productConfig);\n this._decoratorList = [];\n },\n decorators: {\n buzname: function buzname(trackingData, pageQualifier, isInContext, productOverride) {\n if (!trackingData) {\n return;\n }\n\n var buzname = trackingData.buzname;\n\n if (!buzname) {\n return;\n }\n\n var buznameDiff = buzname[pageQualifier];\n\n if (!buznameDiff) {\n return;\n }\n\n var dataObj = this._dataObj;\n var buznameMap = $FptiConstants.buznameMap;\n // read app specific place holder from config\n var placeHolderConfig = _squid.$config && _squid.$config.fpti && _squid.$config.fpti.buznameEntryPlaceHolder;\n\n Object.keys(buznameMap).forEach(function (key) {\n var buznameEntry = buznameMap[key];\n var fptiKey = buznameEntry.fptiKey;\n var placeHolder = buznameEntry.placeHolder;\n\n if (buznameDiff[key]) {\n if (placeHolderConfig && placeHolderConfig[key]) {\n placeHolder = placeHolderConfig[key];\n }\n\n if (productOverride) {\n var _placeHolder$split = placeHolder.split(':'),\n main = _placeHolder$split[0],\n hermes = _placeHolder$split[2];\n\n placeHolder = main + ':' + productOverride + ':' + hermes;\n }\n\n dataObj[fptiKey] = buznameDiff[key].replace('%', placeHolder);\n } else {\n dataObj[fptiKey] = placeHolder;\n }\n });\n dataObj[$FptiConstants.fptiKeys.pageQualifer] = pageQualifier;\n },\n\n base: function base(_base) {\n if (_base) {\n for (var key in _base) {\n if (!this._dataObj[key]) {\n this._dataObj[key] = _base[key];\n }\n }\n }\n },\n\n locale: function locale(_locale) {\n if (_locale && _locale.country) {\n this._dataObj[$FptiConstants.fptiKeys.locale] = _locale.country;\n }\n },\n\n pxptrackingdata: function pxptrackingdata(pxpData) {\n var qt = [];\n var qc = [];\n var xe = [];\n var xt = [];\n\n _squid.$util.some(pxpData, function (trackInfo) {\n var match = trackInfo && trackInfo.tracking_tags && trackInfo.tracking_tags.match('\\\\bqt=([^;]+);');\n\n if (match) {\n qt.push(match[1]);\n }\n\n match = trackInfo && trackInfo.tracking_tags && trackInfo.tracking_tags.match('\\\\bqc=([^;]+);');\n if (match) {\n qc.push(match[1]);\n }\n\n _squid.$util.some(trackInfo.treatments, function (treatment) {\n xe.push(treatment.experiment_id);\n xt.push(treatment.treatment_id);\n });\n });\n\n this._dataObj[$FptiConstants.fptiKeys.pxpQualifiedTreatment] = qt.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpContextId] = qc.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpExpSelected] = xe.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpTreatementSelected] = xt.join(',');\n },\n\n templateName: function templateName(trackingData, pageQualifier, isInContext) {\n if (trackingData && trackingData.templateName) {\n var templateName = (trackingData.templateName || '') + (pageQualifier ? ':' + pageQualifier : '');\n\n this._dataObj[$FptiConstants.fptiKeys.templateName] = templateName;\n }\n },\n\n fieldError: function fieldError(err) {\n if (err && err.type === 'fieldError') {\n this._dataObj[$FptiConstants.fptiKeys.fieldError] = err.field;\n this._dataObj[$FptiConstants.fptiKeys.errorCode] = err.code;\n }\n },\n\n pageError: function pageError(err) {\n if (err && err.type === 'pageError') {\n\n this._dataObj[$FptiConstants.fptiKeys.pageError] = err.msg;\n this._dataObj[$FptiConstants.fptiKeys.errorCode] = err.code;\n }\n }\n\n },\n decorate: function decorate(name) {\n this._decoratorList.push({\n name: name,\n params: Array.prototype.slice.call(arguments, 1)\n });\n return this;\n },\n getDataObject: function getDataObject(isInContext) {\n var i;\n var decorator;\n\n for (i = 0; i < this._decoratorList.length; i++) {\n decorator = this._decoratorList[i];\n if (!decorator) {\n continue;\n }\n var name = decorator.name;\n var params = decorator.params;\n\n if (_angular2['default'].isFunction(this.decorators[name])) {\n // Invoke the decorator and pass in the parameter list\n this.decorators[name].apply(this, params);\n } else {\n var fptiKey = $FptiConstants.fptiKeys[name];\n\n // If the fptiKey is defined and value is present, add the k-v pair\n if (fptiKey && params && params.length > 0) {\n this._dataObj[fptiKey] = params[0];\n }\n }\n }\n\n // 'fullpage' was widely used as default key in page routs definition\n // finally replace it here if it's incontext\n var dataObj = this._dataObj;\n\n if (isInContext) {\n Object.keys(dataObj).forEach(function (k) {\n if (_angular2['default'].isString(dataObj[k])) {\n // some values can be number\n dataObj[k] = dataObj[k].replace('fullpage', 'incontext');\n }\n });\n }\n\n return this._dataObj;\n }\n });\n}]).factory('$CalDataModel', function () {\n var uuid_v4_mask = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n var uuid_v1_mask = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';\n\n function _generateCorrelationId() {\n var uidRandomArr = (_uuid2['default'].v4() || uuid_v4_mask).split('-');\n var uidTime = (_uuid2['default'].v1() || uuid_v1_mask).split('-');\n\n return uidTime[0] + uidRandomArr[0].substr(0, 5);\n }\n\n function _generateUUID() {\n return (_uuid2['default'].v4() || uuid_v4_mask).replace(/-/g, '');\n }\n\n var CalModel = _squid.$Model.extend({\n _calCorrId: _generateCorrelationId(),\n _uuid: _generateUUID(),\n\n generateCalCorrId: function generateCalCorrId() {\n this._calCorrId = _generateCorrelationId();\n },\n generateUUID: function generateUUID() {\n this._uuid = _generateUUID();\n },\n generateMetaIds: function generateMetaIds() {\n this.generateCalCorrId();\n this.generateUUID();\n },\n\n getCalCorrId: function getCalCorrId() {\n return this._calCorrId;\n },\n\n getUUID: function getUUID() {\n return this._uuid;\n }\n });\n\n return new CalModel();\n});\n\n_squid.$Model;\n\n_squid.$Class;\n\n_squid.$util;\n\n_squid.$config;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-tracking/dist\", \"../node_modules/xo-tracking/dist/model.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/accessibility/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _ui = __webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/ui.js\");\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Adds role='button' and tabindex='0' to anchor elements\n// so that it is keyboard navigable and recognized by screen\n// readers as a button.\n//\n// As anchors without href do not fire their click event\n// automatically on a Space or ENTER key, this directive forces\n// that functionality.\n//\n// If something is assigned to the link-button attribute, then\n// it is used as an aria-label.\n(0, _squid.$registerDirective)('link-button', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var ariaLabel = (0, _angular.$parse)(attrs.linkButton)(scope);\n var $element = (0, _jquery2['default'])(element);\n\n $element.attr('role', 'button');\n $element.attr('tabindex', '0');\n if (ariaLabel) {\n $element.attr('aria-label', ariaLabel);\n }\n $element.on('keydown', function (event) {\n // do nothing if there is an alt or ctrl key as well\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n element[0].click();\n return false;\n default:\n break;\n }\n }\n return true;\n });\n }\n };\n});\n\n// this directive gives an element characteristics of a native\n// select element in terms of keyboard navigation. It becomes reachable\n// via the tab key, reflects screenreader characteristics and\n// can be activated by any of the DOWN, SPACE or ENTER KEYS.\n(0, _squid.$registerDirective)('select-button', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var $element = (0, _jquery2['default'])(element);\n if (!attrs.hasOwnProperty('disableRole')) {\n $element.attr('role', 'button');\n }\n\n $element.attr('aria-haspopup', 'true').attr('tabindex', '0').on('keydown', function (event) {\n // do nothing if there is an alt or ctrl key as well\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.DOWN:\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n element[0].click();\n return false;\n default:\n break;\n }\n }\n return true;\n });\n }\n };\n});\n\n// this directive makes a container with links act as if it were a select dropdown\n// in terms of keyboard accessibility. The following characteristics are implemented:\n//\n// * UP/RIGHT and DOWN/lEFT KEYS navigate through the options.\n// * ESC cancels and closes the dropdown\n// * SPACE or ENTER select an option\n// * You cannot TAB out of a dropdown until you select or cancel\n//\n// in addition, the following extra characteristics are implemented\n//\n// * The TAB (and SHIFT-TAB) key will also function to move between options\n// * Upon reaching the end of the list, the focus will shift back to the first item, and vice versa\n//\n// How to use:\n// 1. The select-cancel attribute is an agnostic expression to implement the cancel / back mechanic.\n// The expression is run whenever the ESC key is pressed.\n// 2. The select-allow-tab-escape attribute can be added alongside the select-box attribute to allow\n// tabs to escape the select-box element.\n(0, _squid.$registerDirective)('select-box', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var allowTabEscape = (0, _angular.isDefined)(attrs.selectAllowTabEscape);\n\n function escapeToggle() {\n if (attrs.selectCancel) {\n (0, _angular.$parse)(attrs.selectCancel)(scope);\n scope.$apply();\n }\n }\n\n element.attr('role', 'menu');\n\n element.on('keydown.selectBox', function (event) {\n var $allTabbable = (0, _ui.findAll)(element, _ui.tabbable);\n var $origin = (0, _jquery2['default'])(event.target);\n\n if (!(event.altKey || event.ctrlKey)) {\n var index = $allTabbable.index($origin);\n\n switch (event.keyCode) {\n case _ui.KEYS.TAB:\n if (allowTabEscape && (index === 0 && event.shiftKey || index === $allTabbable.length && !event.shiftKey)) {\n // Enable default behavior to escape select-box\n escapeToggle();\n break;\n } else if (event.shiftKey) {\n index = (index - 1 + $allTabbable.length) % $allTabbable.length;\n } else {\n index = (index + 1) % $allTabbable.length;\n }\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.DOWN:\n case _ui.KEYS.RIGHT:\n index = (index + 1) % $allTabbable.length;\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.UP:\n case _ui.KEYS.LEFT:\n index = (index - 1 + $allTabbable.length) % $allTabbable.length;\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n $origin.click();\n event.preventDefault();\n break;\n case _ui.KEYS.ESC:\n escapeToggle();\n break;\n default:\n break;\n }\n }\n });\n }\n };\n});\n\n// similar to select-box, this directive restrains tabbing within a container\n// to the container itself.\n//\n// 1. modal-cancel is the equivalent of select-cancel from select-box, and\n// should define a cancellation / ESC function.\n(0, _squid.$registerDirective)('modal-box', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function escapeToggle() {\n (0, _angular.$parse)(attrs.modalCancel)(scope);\n scope.$apply();\n }\n\n // Gets the index of the element that should be focused after pressing Tab\n function getNextIndex($element, $elements, shift) {\n if (shift) {\n return ($elements.index($element) - 1 + $elements.length) % $elements.length;\n } else {\n return ($elements.index($element) + 1) % $elements.length;\n }\n }\n\n if ((0, _angular.$parse)(attrs.modalBox)(scope) !== false) {\n element.on('keydown.modalBox', function (event) {\n var $allTabbable = (0, _ui.findAll)(element, _ui.tabbable);\n var $origin = (0, _jquery2['default'])(event.target);\n\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.TAB:\n var index = getNextIndex($origin, $allTabbable, event.shiftKey);\n $allTabbable.eq(index).focus();\n event.preventDefault();\n event.stopPropagation();\n break;\n case _ui.KEYS.ESC:\n escapeToggle();\n event.preventDefault();\n event.stopPropagation();\n break;\n default:\n break;\n }\n }\n });\n }\n }\n };\n});\n\n// A simple version of modal that doesn't rely on controlling keyboard behavior\n// as strictly. Should be used in cases where tab items are not as easily accessible\n// via JS (ie. iframes)\n// Redirects focus to container when focusin event fired on element not in container\n(0, _squid.$registerDirective)('simple-modal', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n element.attr('tabindex', '-1');\n\n var cancelFn;\n if (attrs.modalCancel) {\n cancelFn = function cancelFn() {\n (0, _angular.$parse)(attrs.modalCancel)(scope);\n scope.$apply();\n };\n }\n\n function registerModal() {\n (0, _jquery2['default'])(document).on('focusin.simple-modal', function (event) {\n if (!element[0].contains(event.target)) {\n event.stopPropagation();\n element.focus();\n }\n });\n if (cancelFn) {\n (0, _jquery2['default'])(document).on('click.simple-modal', function (event) {\n if (!element[0].contains(event.target)) {\n deregisterModal();\n cancelFn();\n }\n });\n }\n }\n\n function deregisterModal() {\n (0, _jquery2['default'])(document).off('focusin.simple-modal');\n (0, _jquery2['default'])(document).off('click.simple-modal');\n }\n\n // Watch the expression provided to simpleModal and add modal behavior when\n // expression result changes to truthy\n if ((0, _angular.isDefined)(element.attr('simpleModal'))) {\n scope.$watch(attrs['simpleModal'], function (newVal) {\n if (newVal) {\n registerModal();\n } else {\n deregisterModal();\n }\n });\n } else {\n registerModal();\n }\n\n scope.$on('$destroy', deregisterModal);\n }\n };\n});\n\n// this directive gives an element characteristics of a native\n// option element in terms of aria attributes. It must be used\n// as a child of a selectBox for proper keyboard behavior as it\n// disables default tabbing behavior.\n//\n// The expression provided to the directive is used to set the\n// aria-selected attribute when the expression evaluates to true.\n(0, _squid.$registerDirective)('select-option', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n (0, _jquery2['default'])(element).attr('role', 'menuitem');\n if ((0, _angular.$parse)(attrs.selectOption)(scope)) {\n (0, _jquery2['default'])(element).attr('aria-selected', 'true');\n }\n }\n };\n});\n\n// adapted from http://stackoverflow.com/a/24416690\n// This directive makes the element focused when the expression\n// provided _changes_ to true.\n//\n// In order to avoid conflicts with autofocus when a page first loads,\n// adding the focused-once-before attribute will enable the expression\n// only if it has been focused on before.\n//\n// * if the element itself is not focusable, then it will locate the first focusable\n// element within it.\n// * if the additional attribute focus-element is provided, it is wrapped\n// as a jQuery element (could be selector string or actual element) and focused on\n// it will be parsed when the focus-when attribute is true\n// * if the attribute focus-on is provided, then the focus-when attribute is ignored and\n// the directive listens to the event specified by focus-on\n(0, _squid.$registerDirective)('focus-when', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n\n function locateAndFocus(active) {\n (0, _angular.$timeout)(function () {\n if (active) {\n // deal with figuring out which element to focus on\n var $elementToFocus = (0, _jquery2['default'])(); // start with \"monad\" to make life easier\n var directiveElementFocusable = (0, _ui.focusable)(element[0]);\n\n // this works by fallthrough. it will try each one\n // in succession until an element is found\n if (attrs.focusElement) {\n // scenario 1 - specific element provided\n $elementToFocus = (0, _ui.filterAll)((0, _angular.$parse)(attrs.focusElement)(scope), _ui.focusable);\n }\n\n if ($elementToFocus.length === 0 && !directiveElementFocusable) {\n // scenario 2 - element with directive is not focusable\n $elementToFocus = (0, _ui.findAll)(element, _ui.focusable);\n }\n\n // default / scenario 3 - no valid targets specified or found\n if ($elementToFocus.length === 0) {\n $elementToFocus = (0, _jquery2['default'])(element);\n }\n\n $elementToFocus.first().focus();\n }\n });\n }\n\n var active = true;\n\n if ('focusedOnceBefore' in attrs) {\n active = false;\n (0, _jquery2['default'])(element).on('focus', function () {\n active = true;\n });\n }\n\n if (attrs.focusRefreshOn) {\n scope.$on((0, _angular.$parse)(attrs.focusRefreshOn)(scope), function () {\n locateAndFocus(active);\n });\n } else {\n scope.$watch(attrs.focusWhen, function (val) {\n locateAndFocus(active && val);\n });\n }\n }\n };\n});\n\n// angularUI router specific - listens to a specific transition\n// defined in two attributes, focusWhenState (this directive) and TransitionsTo\nvar FOCUS_EVENT_NAME = 'accessible-focus';\n(0, _squid.$registerDirective)('focus-when-state', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var startState = attrs.focusWhenState;\n var endState = attrs.transitionsTo;\n var transitionMessage = startState + ' > ' + endState;\n var unregisterEventFn = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n if (fromState.name === startState && toState.name === endState) {\n scope.$broadcast(FOCUS_EVENT_NAME, transitionMessage);\n }\n });\n\n scope.$on(FOCUS_EVENT_NAME, function (event, message) {\n if (message === transitionMessage) {\n (0, _angular.$timeout)(function () {\n return element[0].focus();\n });\n }\n });\n\n // see http://stackoverflow.com/a/27016855\n scope.$on('$destroy', unregisterEventFn);\n }\n };\n});\n\n// Listens for the next state transition and focuses an element provided by selector\n// Use with links where focus is needed to return to a specific element after the transition\n(0, _squid.$registerDirective)('focus-after-transition', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n element.on('click', function () {\n var focusSelector = attrs['focusAfterTransition'];\n var cancel = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n cancel();\n (0, _angular.$timeout)(function () {\n (0, _jquery2['default'])(focusSelector).focus();\n });\n });\n });\n }\n };\n});\n\n// focuses on the first focusable element on a container containing form elements\n(0, _squid.$registerDirective)('form-autofocus', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n // wait for the entire DOM to settle down first\n (0, _angular.$timeout)(function () {\n var $allFocusable = (0, _ui.findAll)(element, _ui.focusable);\n if ($allFocusable.length > 0) {\n $allFocusable.first().focus();\n }\n });\n }\n };\n});\n\n// Change element to be focusable and tabbable or unfocusable if it is\n// not typically a focusable element by removing the tabindex attribute.\n(0, _squid.$registerDirective)('focusable', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function setFocusable(value) {\n if (value) {\n element.attr('tabindex', 0);\n } else {\n element.removeAttr('tabindex');\n }\n }\n\n if (attrs.focusable) {\n scope.$watch(attrs.focusable, function (newVal) {\n if (newVal) {\n setFocusable(true);\n } else {\n setFocusable(false);\n }\n });\n } else {\n setFocusable(true);\n }\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$timeout;\n\n_angular.$rootScope;\n\n_angular.isDefined;\n\n_ui.KEYS;\n\n_ui.focusable;\n\n_ui.tabbable;\n\n_ui.findAll;\n\n_ui.filterAll;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/accessibility/ui.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.filterAll = exports.findAll = exports.tabbable = exports.focusable = exports.visible = exports.KEYS = undefined;\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar KEYS = {\n TAB: 0x09,\n ENTER: 0x0D,\n ESC: 0x1B,\n SPACE: 0x20,\n LEFT: 0x25,\n UP: 0x26,\n RIGHT: 0x27,\n DOWN: 0x28\n};\n\nfunction visible(element) {\n return _jquery2['default'].expr.filters.visible(element) && !(0, _jquery2['default'])(element).parents().addBack().filter(function () {\n return _jquery2['default'].css(this, 'visibility') === 'hidden';\n }).length;\n}\n\n// ripped from http://stackoverflow.com/a/7668761\n/* istanbul ignore next */\nfunction focusable(element) {\n var nodeName = element.nodeName.toLowerCase();\n var isTabIndexNotNaN = !isNaN(_jquery2['default'].attr(element, 'tabindex'));\n var map;\n var mapName;\n var img;\n\n if (nodeName === 'area') {\n map = element.parentNode;\n mapName = map.name;\n if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n return false;\n }\n img = (0, _jquery2['default'])('img[usemap=#' + mapName + ']')[0];\n return !!img && visible(img);\n }\n return (/^(input|select|textarea|button|object)$/.test(nodeName) ? // eslint-disable-line no-nested-ternary\n !element.disabled : nodeName === 'a' ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) &&\n // the element and all of its ancestors must be visible\n visible(element);\n}\n\n/* istanbul ignore next */\nfunction tabbable(element) {\n var tabIndex = _jquery2['default'].attr(element, 'tabindex');\n var isTabIndexNaN = isNaN(tabIndex);\n\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element);\n}\n\nfunction filterAll(elements, filterFn) {\n return (0, _jquery2['default'])(elements).filter(function () {\n return filterFn(this);\n });\n}\n\nfunction findAll(container, filterFn) {\n return filterAll((0, _jquery2['default'])(container).find('*'), filterFn);\n}\n\nexports.KEYS = KEYS;\nexports.visible = visible;\nexports.focusable = focusable;\nexports.tabbable = tabbable;\nexports.findAll = findAll;\nexports.filterAll = filterAll;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/banner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/banner/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/banner/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoBanner', {\n tag: 'xo-banner',\n template: _template2['default'],\n transclude: true,\n props: {\n isNmj: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n // Need buyer_id from $AuthModel first to get the URL for the user profile photo\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve()\n };\n },\n userPhoto: function userPhoto(resolvers) {\n return resolvers.models.then(function (models) {\n return {\n photoData: _index.$UserPhotoModel.instance(models.auth.buyer_id).retrieve({\n params: {\n 'min_size': 45\n }\n })['catch'](function (error) {\n _logger.$logger.info('error_retrieve_user_photo');\n return {};\n })\n };\n });\n }\n },\n lifecycle: {\n populate: function populate() {\n var avatarElement = this.$element.find('#banner-picture');\n var auth = this.models.auth;\n var photoData = this.userPhoto.photoData;\n\n // Currently only showing initials for New Member Journey\n var showInitials = auth.first_name && auth.last_name && this.props.isNmj;\n\n if (avatarElement && auth.buyer_id) {\n // The \"phantom\" avatar image is displayed by default via CSS\n // background-image property. If the request for a user's\n // profile photo returns a URL, the background-image property\n // is replaced with that URL.\n\n // Show user photo for avatar\n if (photoData && photoData.photo_url) {\n avatarElement.css('background-image', 'url(\"' + photoData.photo_url + '\")');\n _logger.$logger.info('xoBanner_user');\n }\n\n // No user photo: show user initials instead of phantom image\n if (!photoData.photo_url && showInitials) {\n avatarElement.addClass('initials');\n this.initials = '' + auth.first_name[0] + auth.last_name[0];\n _logger.$logger.info('xoBanner_initials');\n }\n } else {\n // Leave the phantom avatar as the background image\n _logger.$logger.info('xoBanner_default');\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_auth.$AuthModel;\n\n_index.$UserPhotoModel;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/banner/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/banner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    {{ initials }}
    \\n
    \\n
    \"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/card-loader/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCardLoader = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/card-loader/styles.less\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/card-loader/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCardLoader = exports.$xoCardLoader = _squid.$Component.extend('xoCardLoader', {\n tag: 'xo-card-loader',\n template: _template2['default'],\n props: {\n message: {\n type: 'str',\n required: false\n },\n state: {\n type: 'var',\n required: false\n },\n auth: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n this.ellipsis = function () {\n var email = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n var MAX_EMAIL_LEN = 30;\n var MAX_DOMAIN_LEN = 20;\n var MAX_USERNAME_LEN = MAX_EMAIL_LEN - MAX_DOMAIN_LEN;\n\n if (email.length <= MAX_EMAIL_LEN) {\n return email;\n }\n\n var userNameLength = email.indexOf('@');\n var domainLength = email.length - userNameLength;\n\n if (userNameLength > MAX_USERNAME_LEN && domainLength > MAX_DOMAIN_LEN) {\n return email.replace(new RegExp('(.{' + (MAX_USERNAME_LEN - 3) + '}).*(@.{' + (MAX_DOMAIN_LEN - 4) + '}).*'), '$1...$2...');\n } else if (userNameLength > MAX_USERNAME_LEN) {\n return email.replace(new RegExp('(.{' + (MAX_EMAIL_LEN - domainLength - 3) + '}).*(@.*)'), '$1...$2');\n } else {\n return email.replace(new RegExp('(.{' + (MAX_EMAIL_LEN - 3) + '}).*'), '$1...');\n }\n };\n }\n }\n});\n\nangular.value(\"$xoCardLoader\", $xoCardLoader);\n_squid.$Component;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/card-loader/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/card-loader/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    {{ellipsis(auth.email)}}
    \\n
    \\n
    \\n
    \\n
    {{message}}
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/cardicon/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoFiIcon = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/cardicon/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoFiIcon = exports.$xoFiIcon = _squid.$Component.extend('xoFiIcon', {\n tag: 'xo-fi-icon',\n wrapperType: 'span',\n template: _template2['default'],\n transclude: true,\n props: {\n fi: {\n type: 'var',\n required: false\n },\n className: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n fiMeta: _index2['default'].instance(_angular.$rootScope.token).fetch()\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var updateCardArt = function updateCardArt() {\n _this.retrievedCardArt = _this.models.fiMeta.getCardArt(_this.props.fi);\n\n if (_this.retrievedCardArt) {\n _this.cardStyle = {\n 'background-image': 'url(' + _this.retrievedCardArt + ')',\n 'background-size': 'contain',\n 'background-position': 'initial'\n };\n }\n };\n\n this.$watch('props.fi', updateCardArt);\n }\n }\n});\n\nangular.value(\"$xoFiIcon\", $xoFiIcon);\n_squid.$Component;\n\n_angular.$rootScope;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/cardicon/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n \\n\\n\\n
    \\n
    \\n
    \\n
    \\n\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/directionality/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/directionality/styles.less\");\n\n/**\n * This directive watches the model and listens to user input to look for arabic/hebrew/right-to-left language\n * unicode chars, then adds dir=\"rtl\" or dir=\"ltr\" attribute to input field\n *\n * Add directionality to the container html div element of a input field.\n *
    \n */\n(0, _squid.$registerDirective)('directionality', function () {\n return {\n restrict: 'A',\n link: function link(scope, element) {\n var currentWatchDeregister = void 0;\n var input = element.find('input');\n\n if (!input.length) {\n listenForInputRendered();\n return;\n }\n\n // If the input has not yet been rendered inside the container, listen for dom node inserted\n // then, if the node inserted is an input, we will use that element and init the directionality\n // listeners. The first input rendered is the one that will be captured by this directive.\n function listenForInputRendered() {\n element.bind('DOMNodeInserted', checkDOMNodeInserted);\n\n function checkDOMNodeInserted(event) {\n if (event && event.target && event.target.tagName === 'INPUT') {\n element.unbind('DOMNodeInserted', checkDOMNodeInserted);\n input = angular.element(event.target);\n init();\n }\n }\n }\n\n function setDirectionality(value) {\n if (value) {\n // set directionality to 'rtl' if the value has hebrew/arabic unicode chars.\n element.toggleClass('ltrOverride', !_squid.$util.hasRTL(value));\n } else {\n element.toggleClass('ltrOverride', _angular.$document.prop('documentElement').getAttribute('dir') !== 'rtl');\n }\n }\n\n function jqueryOnKeyupHandler(event) {\n setDirectionality(event.target.value);\n }\n\n // Reset directionality listeners when we transition from ltr -> rtl locale or vice versa\n function resetDirectionalityListener() {\n // remove directionality listeners that were set on prior locale\n input.unbind('keyup', jqueryOnKeyupHandler);\n if (currentWatchDeregister) {\n currentWatchDeregister();\n }\n\n // set new directionality listeners for the current locale if 'rtl'\n if (document.documentElement.getAttribute('dir') === 'rtl') {\n (0, _angular.$timeout)(function () {\n // Watch ng-model on input to set directionality if it contains RTL char\n currentWatchDeregister = scope.$watch(input.attr('ng-model'), function (value) {\n setDirectionality(value);\n });\n // jQuery listener for cases where ng-model is not populated until post validation\n input.on('keyup', jqueryOnKeyupHandler);\n });\n }\n }\n\n function init() {\n resetDirectionalityListener();\n scope.$on('localeChange', function () {\n resetDirectionalityListener();\n });\n }\n\n init();\n }\n };\n});\n\n/**\n * This directive watches the model for arabic/hebrew/right-to-left language unicode chars, then adds dir=\"rtl\"\n * or dir=\"ltr\" attribute to the html element.\n *\n * Add directionality-text=\"<>\" to the div or span or any element containing text.\n * <{{user.name}}\n */\n(0, _squid.$registerDirective)('directionality-text', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n if (document.documentElement.getAttribute('dir') === 'rtl') {\n var $element = $(element);\n\n (0, _angular.$timeout)(function () {\n if (attrs.directionalityText) {\n scope.$watch(attrs.directionalityText, function () {\n $element.toggleClass('ltrOverride', !_squid.$util.hasRTL((0, _angular.$parse)(attrs.directionalityText)(scope)));\n });\n } else {\n $element.toggleClass('ltrOverride', !_squid.$util.hasRTL(element.text()));\n }\n });\n }\n }\n };\n});\n\n_squid.$util;\n\n_squid.$registerDirective;\n\n_angular.$document;\n\n_angular.$parse;\n\n_angular.$timeout;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/directionality/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/error-tooltip/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angularAria = __webpack_require__(\"../node_modules/angular-aria/angular-aria.min.js\");\n\n// Configure angular aria.\n// Note that aria configuration applies globally\n_angularAria.$ariaProvider.config({ // eslint-disable-line angular/di\n // Remove bindRoleForClick since we use ngClick for several items that shouldn't be treated as buttons.\n bindRoleForClick: false,\n\n // Remove ariaInvalid and ariaRequired as we want to handle them ourselves.\n // These attributes should only be set once the form is submitted, to match what\n // visually what we display\n ariaInvalid: false,\n ariaRequired: false,\n // Removing aria-hidden attribute for hidden elements\n ariaHidden: false\n});\n\n(0, _squid.$registerDirective)('xo-error-tooltip', function () {\n return {\n restrict: 'A',\n require: ['?^form', '?ngModel'],\n link: function link(scope, element, attrs, ctrls) {\n var formCtrl = ctrls[0],\n modelCtrl = ctrls[1];\n\n\n function shouldBeRequired() {\n if (formCtrl) {\n // If input is a checkbox and has error-text or error-key, show the error text instead of the required text.\n // error-text is a legacy thing for backward compatibility, we can get rid of this once all teams\n // adopt error-key in all input tags\n var showCheckboxRequired = !(element.attr('type') === 'checkbox' && (attrs.errorText || attrs.errorKey));\n\n return formCtrl.$submitted && modelCtrl.$error.required && showCheckboxRequired;\n } else {\n return modelCtrl.$error.required;\n }\n }\n\n function shouldBeInvalid() {\n if (formCtrl) {\n return formCtrl.$submitted && modelCtrl.$invalid;\n } else {\n return modelCtrl.$invalid;\n }\n }\n\n // Add or remove a string into a space split string (eg. aria-describedby ids, class names)\n function formatSpaceSplitString(str, id, add) {\n var strArray = void 0;\n\n if (str) {\n strArray = str.split(' ');\n } else {\n strArray = [];\n }\n\n var idIndex = strArray.indexOf(id);\n\n if (~idIndex && !add) {\n strArray.splice(idIndex, 1);\n } else if (!~idIndex && add) {\n strArray.push(id);\n }\n\n return strArray.join(' ');\n }\n\n // Add tooltip behavior after DOM settles\n (0, _angular.$timeout)(function () {\n var generateId = function generateId() {\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);\n };\n var requiredId = generateId();\n var invalidId = generateId();\n var requiredError = void 0;\n var invalidError = void 0;\n\n if (attrs.errorKey) {\n element.addClass('hasErrorTooltipRuleSpecific');\n invalidError = (0, _angular.$compile)('
    {{content(\"' + attrs.errorKey + '\")}}
    ')(scope);\n element.after(invalidError);\n } else if (attrs.errorText) {\n // errorText if case is for backward compatibility, we can get rid of this once\n // all teams adopt error-key in all input tags for tooltip message display\n element.addClass('hasErrorTooltipRuleSpecific');\n invalidError = $('
    ' + attrs.errorText + '
    ');\n element.after(invalidError);\n }\n\n if (attrs.required || (0, _angular.$parse)(attrs.ngRequired)(scope)) {\n element.addClass('hasErrorTooltipRequired');\n requiredError = (0, _angular.$compile)('
    {{content(\"validation.required\")}}
    ')(scope);\n element.after(requiredError);\n element.removeAttr('aria-required');\n }\n\n function setAriaAttributes() {\n var addTooltips = {\n required: false,\n invalid: false\n };\n\n // Do not associate \"Required\" error with aria-describedby\n // because this should already be read out either by \"required\"\n // attribute or \"aria-required\"=true, and only associate \"Invalid\"\n // error if \"Required\" is not showing to match visuals\n if (shouldBeRequired()) {\n addTooltips.required = true;\n } else if (shouldBeInvalid()) {\n addTooltips.invalid = true;\n }\n\n var describedby = element.attr('aria-describedby');\n\n describedby = formatSpaceSplitString(describedby, requiredId, addTooltips.required);\n describedby = formatSpaceSplitString(describedby, invalidId, addTooltips.invalid);\n element.attr('aria-describedby', describedby);\n }\n\n scope.$watch(shouldBeRequired, function (newVal) {\n setAriaAttributes();\n });\n scope.$watch(shouldBeInvalid, function (newVal) {\n element.attr('aria-invalid', newVal);\n setAriaAttributes();\n });\n\n // Set scroll so that the error message is in view when element receives focus\n element.on('focus', function (event) {\n var windowBot = $(window).scrollTop() + $(window).height();\n var requiredBot = requiredError ? requiredError.offset().top + requiredError.outerHeight() : 0;\n var invalidBot = invalidError ? invalidError.offset().top + invalidError.outerHeight() : 0;\n\n if (windowBot < Math.max(requiredBot, invalidBot)) {\n $(window).scrollTop(Math.max(requiredBot, invalidBot) - $(window).height());\n }\n });\n });\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$compile;\n\n_angular.$timeout;\n\n_angularAria.$ariaProvider;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _index = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/index.js\");\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/squid/dist/index.js\"), __webpack_require__(\"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html\"), __webpack_require__(\"../node_modules/xo-models/src/user/index.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (squid, template) {\n\n squid.module('xo-escape-hatch.closeFrame.directive', ['squid', 'xomodel.user']).directive('xoCloseFrame', [function () {\n return {\n template: template,\n\n restrict: 'E',\n\n scope: {\n redirectiframe: '=?',\n redirectLightbox: '=?'\n },\n\n controller: ['$scope', '$rootScope', '$populate', '$CheckoutInputDataModel', '$window', '$CheckoutAppDataModel', '$util', '$injector', '$logger', function ($scope, $rootScope, $populate, $CheckoutInputDataModel, $window, $CheckoutAppDataModel, $util, $injector, $logger) {\n\n $populate($scope, {\n checkoutAppData: $CheckoutAppDataModel.instance($rootScope.token)\n }).then(function () {\n var cancel_url = $scope.checkoutAppData.urls.cancel_url;\n\n $scope.checkoutInputData = $CheckoutInputDataModel.instance($scope.token);\n $scope.isIFrame = $util.isIFrame();\n\n $scope.closeFrame = function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (window.xchild) {\n if (window.xprops.onCancel) {\n return window.xprops.onCancel({\n token: $scope.token,\n cancelUrl: cancel_url\n });\n } else {\n return window.xchild.close();\n }\n }\n\n if ($scope.redirectLightbox) {\n var result = _index.$ReturnToMerchant.postToMerchant({\n operation: 'return_to_merchant',\n returnUrl: cancel_url,\n updateParent: true\n });\n\n // Otherwise we have no choice but to return to the merchant\n if (!result) {\n $util.redirect(cancel_url);\n }\n\n // TODO - Move out helios specific logic. Apps should provide a callback instead.\n } else if ($scope.redirectiframe) {\n $window.location.replace(cancel_url);\n\n // TODO - Move out helios specific logic. Apps should provide a callback instead.\n } else {\n\n var iFrameFlow = $injector.get('$IFrameFlow');\n\n $logger.info('HELIOS_FLOW_FALLBACK'); // overall fallbacks\n $logger.info('HELIOS_FALLBACK_TO_MERCHANT');\n $logger.info('HELIOS_FALLBACK_MERCHANT_USER_CANCELLED');\n\n var url = $scope.checkoutInputData.errorUrl('user_cancelled');\n\n if ($scope.auth && $scope.auth.code) {\n url += '&code=' + $scope.auth.code;\n }\n\n iFrameFlow.findWindowAndRedirect($scope.checkoutInputData, url);\n }\n $scope.$emit('exitFrame');\n };\n });\n }]\n };\n }]);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n_index.$ReturnToMerchant;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/squid/dist/index.js\"), __webpack_require__(\"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (squid, template) {\n\n squid.module('xo-escape-hatch.escapeHatch.directive', ['squid']).directive('xoEscapeHatch', [function () {\n return {\n template: template,\n\n restrict: 'E',\n\n controller: ['$scope', '$rootScope', '$window', '$util', '$logger', function ($scope, $rootScope, $window, $util, $logger) {\n $scope.isIFrame = $util.isIFrame();\n $scope.closeFrame = function (event) {\n var url = $window.location.href && $window.location.href.split('#')[0] || '';\n\n if (url.indexOf('proxflow') > -1) {\n url = url.replace('proxflow', 'webapps/helios');\n }\n\n url += url.slice(-1) === '&' ? 'escape_hatch=1' : '&escape_hatch=1';\n\n if (url.indexOf('hermes') > -1 || url.indexOf('checkoutnow')) {\n $logger.info('HERMES_ESCAPE_HATCH_CLICKED');\n } else {\n $logger.info('HELIOS_ESCAPE_HATCH_CLICKED');\n }\n\n $window.top.location = url;\n $scope.$emit('exitFrame');\n };\n }]\n };\n }]);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/experience/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ExperienceComponent = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/experience/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _fiMeta = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $ExperienceComponent = exports.$ExperienceComponent = _squid.$Component.extend('ExperienceComponent', {\n tag: 'experience',\n template: _template2['default'],\n transclude: true,\n props: {\n flag: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n // temporary until experience layer develops, which should do all of this logic via flag config (something like `experienceConfig.get('flag')`)\n fiMeta: _fiMeta2['default'].instance(_angular.$rootScope.token).fetch()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var negate = this.props.flag[0] === '!';\n var fiMeta = this.models.fiMeta;\n\n // lies\n\n this.renderExperience = fiMeta && fiMeta.cardArtEnabled();\n\n if (negate) {\n this.renderExperience = !this.renderExperience;\n }\n }\n }\n});\n\nangular.value(\"$ExperienceComponent\", $ExperienceComponent);\n_squid.$Component;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/experience/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/expired-message/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/expired-message/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/expired-message/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoExpiredMessage', {\n tag: 'xo-expired-message',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()\n };\n }\n // TODO: currently `xo_hermes_preferred_expired_msg_review_page` pxp has been turned off\n // however, AuthRate team plans to turn back this experiment after moratorium\n // Also, please see uncomment similar logic from Hermesnodeweb (public/pages/xo-review)\n // experiments() {\n // return {\n // showPreferredExpiredMsg: $ExpiredMsgFactory.getPreferredExpiredPxpResult()\n // };\n // }\n\n },\n actions: {\n goToManageWallet: function goToManageWallet(fiID) {\n if (fiID) {\n _logger.$logger.info('update_expired_preferred');\n _uiRouter.$state.go('checkout.review.sidebar.sidebarUpdateCard.addCardFlow.addCard', {\n planId: fiID,\n doneUri: 'checkout.review'\n });\n } else {\n _logger.$logger.info('manage_expired_cards');\n _uiRouter.$state.go('checkout.review.sidebar.sidebarManageWallet');\n }\n }\n },\n\n lifecycle: {\n populate: function populate() {\n // if (this.experiments.showPreferredExpiredMsg === 'xo_hermes_preferred_expired_msg_review_page_treatment') {\n // this.preferredExpired = this.models.checkoutSession.getDisallowedPreferred();\n // }\n }\n }\n});\n\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_logger.$logger;\n\n_index.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/expired-message/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/expired-message/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/fi-panel/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fiMeta = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/fi-panel/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/fi-panel/styles.less\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/cardicon/directive.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Pulling out props to iterate over keys\nvar PROPS = {\n fi: {\n required: false,\n type: 'var'\n },\n plan: {\n required: false,\n type: 'var'\n },\n // Specifically override name\n nameOverride: {\n required: false,\n type: 'var'\n },\n // Ignore different rendering for PAD\n ignorePad: {\n required: false,\n type: 'var'\n },\n // Dont render extra details\n sparse: {\n required: false,\n type: 'var'\n },\n // Requires fi to be passed in\n showAmount: {\n required: false,\n type: 'var'\n },\n // Requires fi to be passed in\n showCurrencyCode: {\n required: false,\n type: 'var'\n },\n // Requires plan to be passed in\n showAllCurrencyCodes: {\n required: false,\n type: 'var'\n }\n};\n\nexports['default'] = _squid.$Component.extend('xoFiPanel', {\n tag: 'xo-fi-panel',\n template: _template2['default'],\n transclude: true,\n props: PROPS,\n resolve: {\n models: function models() {\n return {\n fiMeta: _fiMeta2['default'].instance(_angular.$rootScope.token).fetch()\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n render.call(this);\n // Props on scope is not iterable, so creating a group to watch from the definition\n this.$watchGroup(Object.keys(PROPS).map(function (p) {\n return 'props.' + p;\n }), function () {\n return render.call(_this);\n });\n }\n }\n});\n\n// TODO: figure out pad rendering\n\nfunction render() {\n var _props = this.props,\n fi = _props.fi,\n plan = _props.plan,\n sparse = _props.sparse,\n showAmount = _props.showAmount,\n showCurrencyCode = _props.showCurrencyCode,\n showAllCurrencyCodes = _props.showAllCurrencyCodes,\n nameOverride = _props.nameOverride,\n ignorePad = _props.ignorePad;\n var fiMeta = this.models.fiMeta;\n\n\n this.name = nameOverride || fiMeta.getName(fi);\n\n var amount = void 0;\n var currencyCodes = void 0;\n var sld = {};\n var secondLineType = void 0;\n\n if (showAmount) {\n amount = fiMeta.getAmount(fi);\n } else if (showAllCurrencyCodes) {\n currencyCodes = fiMeta.getAllCurrencyCodes(plan).join(', ');\n } else if (showCurrencyCode) {\n currencyCodes = fiMeta.getCurrencyCode(fi);\n }\n\n if (!nameOverride && fiMeta.isPad(fi) && !ignorePad) {\n secondLineType = 'pad';\n\n var mask = fiMeta.getCardMask(fi);\n\n _squid.$util.extend(sld, mask);\n } else if (fi) {\n // Try to render a card mask\n var _mask = fiMeta.getCardMask(fi);\n\n if (_mask.before || _mask.after) {\n secondLineType = 'mask';\n _squid.$util.extend(sld, _mask);\n\n if (!sparse) {\n // MEFT/IACH info is only relevant in DE\n if (_squid.$locale.country === 'DE' && fiMeta.isMeft(fi)) {\n sld.meft = true;\n } else if (_squid.$locale.country === 'DE' && (\n // HACK: when ignorePad name, pretend this is Iach\n fiMeta.isIach(fi) || ignorePad)) {\n sld.iach = true;\n } else if (fiMeta.isEcheck(fi)) {\n sld.echeck = true;\n } else if (fiMeta.wallet.isChaseLinkedCard(fi)) {\n sld.chasePay = true;\n }\n }\n }\n }\n\n _squid.$util.extend(this, {\n amount: amount,\n currencyCodes: currencyCodes,\n secondLineData: sld,\n secondLineType: secondLineType\n });\n}\n\n_angular.$rootScope;\n\n_squid.$Component;\n\n_squid.$util;\n\n_squid.$locale;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/fi-panel/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/fi-panel/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n \\n
    \\n
    \\n
    \\n {{content('fundingInstruments.pad')}}\\n ({{currencyCodes}})\\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n {{name}}\\n \\n {{secondLineData.after}}\\n
    \\n
    \\n \\n Chase Pay | \\n \\n {{secondLineData.before}}\\n {{secondLineData.after}}\\n\\n \\n {{content('fundingInstruments.meft')}}\\n \\n \\n {{content('fundingInstruments.iach')}}\\n \\n \\n {{content('fundingInstruments.eCheck')}}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/link/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/link/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/link/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoLink', {\n tag: 'xo-link',\n template: _template2['default'],\n props: {\n onClick: {\n type: 'var',\n required: false\n },\n leftIcon: {\n type: 'str',\n required: false\n },\n rightIcon: {\n type: 'str',\n required: false\n },\n goTo: {\n type: 'str',\n required: false\n },\n label: {\n type: 'str',\n required: false\n }\n },\n\n actions: {\n onClick: function onClick(event) {\n var _props = this.props,\n onClick = _props.onClick,\n goTo = _props.goTo;\n\n\n if (onClick) {\n onClick(event);\n }\n\n if (goTo) {\n _uiRouter.$state.go(goTo);\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_uiRouter.$state;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/link/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/link/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n {{props.label}}\\n\\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/message/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/squid/dist/index.js\"), __webpack_require__(\"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/message/template.html\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (squid, template) {\n squid.module('xo-message.directive', ['squid']).directive('xoMessage', ['$timeout', '$loader', '$rootScope', function ($timeout, $loader, $rootScope) {\n return {\n scope: {\n message: '=?', // Expected type - {msgs: [], type: \"info|error|success|warning\"}\n isgreyheader: '=?'\n },\n template: template,\n link: function link(scope, element, attrs) {\n\n // Hide and show the alerts so that messages can be registered by\n // screen reader even if they are repeats. Uses $timeout to\n // wait for DOM before showing alerts again.\n var toggleAlert = function toggleAlert() {\n var $alert = element.find('ul');\n $alert.detach();\n $timeout(function () {\n element.find('#pageLevelErrors').append($alert);\n });\n };\n\n // Toggle the alert whenever message changes by removing it and reappending it\n // to the DOM. Should fire even if message\n // is changed to the same, as assumes that the message should be reapplied.\n var cancel;\n scope.$watchCollection('message', function () {\n if ($loader.isLoading() && !cancel) {\n // If loading, toggle the alert after all loading calls have been made.\n // This is so that the alert can be read by screen reader after focus\n cancel = $rootScope.$on('allLoaded', function () {\n cancel();\n toggleAlert();\n\n cancel = null;\n });\n } else {\n toggleAlert();\n }\n });\n\n scope.$on('$destroy', function () {\n if (cancel) {\n cancel();\n }\n });\n }\n };\n }]);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/modal/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/accessibility/directive.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/modal/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Directives used in the template\n(0, _squid.$registerDirective)('xoModal', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n replace: true,\n transclude: true,\n scope: {\n show: '=?',\n showCloseButton: '=?',\n enableCloseOnEscape: '=?',\n onClose: '=?',\n enableMobileInterstitial: '@?',\n overrideDefaultContainer: '@?' // Boolean to determine if default styling should be applied to container\n },\n controller: ['$scope', function ($scope) {\n $scope.animate = false; // Don't animate until triggered\n $scope.showOverlay = $scope.show;\n\n var escapeKeyHandler = function escapeKeyHandler($event) {\n if ($event.keyCode === 27) {\n // Escape key maps to keycode 27\n $scope.hideModal();\n }\n };\n\n if ($scope.enableCloseOnEscape) {\n // Handle escape button as close button click\n $(document).bind('keyup', escapeKeyHandler);\n }\n\n $scope.hideModal = function ($event) {\n if ($event) {\n $event.preventDefault();\n }\n\n $scope.show = false;\n $(document).unbind('keyup', escapeKeyHandler);\n if ($scope.onClose) {\n $scope.onClose();\n }\n };\n }],\n\n link: function link($scope, elem, attrs) {\n // HACK: without this check, the modal slides down/fades out upon it being rendered\n $scope.$watch('show', function (newVal, oldVal) {\n if (oldVal !== newVal) {\n // When the show prop changes\n $scope.animate = true; // Ensure the modal is animated\n }\n });\n }\n };\n});\n\n_squid.$registerDirective;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/modal/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n\\t
    \\n\\t
    \\n\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t\\t{{ content('common.back') }}\\n\\t\\t
    \\n\\t
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/popup/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\"), __webpack_require__(\"../node_modules/squid/dist/index.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function ($, squid) {\n\n squid.module('xo-popup.directive', ['squid']).directive('xoPopup', ['$window', '$util', function ($window, $util) {\n return {\n restrict: 'A',\n\n link: function link(scope, element, attr) {\n\n element.on('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n var config = {\n popupUrl: attr.href,\n popupWindowName: 'popup',\n width: 835,\n height: 500,\n\n popupWindowFeatures: {\n location: 1,\n status: 1,\n scrollbars: 1,\n resizable: 1,\n toolbar: 0,\n menubar: 0\n }\n };\n\n scope.trackExternalLink(attr.id || 'external_link');\n\n var isOneTouch = $util.param('isOneTouch');\n\n if (/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)|PLAYSTATION|iPadApp/i.test($window.navigator.userAgent) && isOneTouch !== '1') {\n scope.$emit('showModal', config);\n return false;\n }\n\n if ($(element).hasClass('smallPopup')) {\n config.width = 385;\n }\n\n var left = 0;\n var top = 0;\n\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - config.width) / 2) + window.screenX;\n top = Math.round((window.outerHeight - config.height) / 2) + window.screenY;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - config.width) / 2);\n top = Math.round((window.screen.height - config.height) / 2);\n }\n\n var features = Object.keys(config.popupWindowFeatures).map(function (k) {\n return k + '=' + config.popupWindowFeatures[k];\n }).join(',');\n\n // put together WindowFeatures, since, window.open needs it as a string\n features += ',width=' + config.width + ',height=' + config.height + ',left=' + left + ',top=' + top;\n\n var popup = $window.open(config.popupUrl, config.popupWindowName, features);\n\n if (popup.focus) {\n popup.focus();\n }\n });\n },\n\n controller: ['$scope', '$logger', function ($scope, $logger) {\n $scope.trackExternalLink = function (linkName) {\n $logger.info(linkName);\n };\n }]\n };\n }]);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/spinner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\"), __webpack_require__(\"../node_modules/squid/dist/index.js\"), __webpack_require__(\"../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/spinner/template.html\"), __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function ($, squid, template) {\n\n squid.module('xo-spinner.directive', ['squid', 'beaver']).directive('xoSpinner', [function () {\n\n return {\n scope: {},\n template: template,\n controller: ['$scope', '$element', '$rootScope', '$locale', '$logger', '$loader', '$timeout', function ($scope, $element, $rootScope, $locale, $logger, $loader, $timeout) {\n var $body = angular.element(document.getElementsByTagName('body'));\n var $priorActiveElement = $();\n var $capturedElement = $();\n var $header = $('header');\n var $slidingArea = $('#main');\n var $footer = $('footer');\n\n /**\n * This hides page content from any screen readers.\n * When the spinner's active, the only thing that should be read out is the \"Loading...\" text.\n *\n * The only crappy thing here is the spinner's nested deep in the content, so please excuse this jQuery crap.\n * At the very least, let's cache these selectors :|\n */\n function hidePageContentFromScreenReader(toggle) {\n $header.attr('aria-disabled', toggle);\n $slidingArea.attr('aria-disabled', toggle);\n $footer.attr('aria-disabled', toggle);\n }\n\n function preventDefault(event) {\n var _event$target = event.target;\n _event$target = _event$target === undefined ? {} : _event$target;\n var targetId = _event$target.id;\n\n // Only call preventDefault if the target is not a captcha input.\n // If the target is a captcha input we don't want to prevent the\n // user from entering the captcha code.\n\n if (targetId !== 'captchaCode') {\n event.preventDefault();\n }\n }\n\n function captureFocus(event) {\n if (!$element.has(event.target).length) {\n $capturedElement = $(event.target);\n }\n }\n\n function setLoadingMessage(message) {\n if (angular.isObject(message)) {\n $scope.message = message.heading;\n $('#spinnerMessage').css('font-size', '17.5px');\n $('#spinnerMessage').html(message.heading);\n $('#spinnerSubHeading').html(message.subHeading);\n } else {\n $scope.message = message;\n $('#spinnerMessage').html(message);\n }\n }\n\n function showSpinner() {\n $scope.loading = true;\n $logger.info('show_loading_spinner');\n $body.addClass('loading');\n\n // remember what was previously focused\n $priorActiveElement = $(':focus');\n\n $(':input, a').blur();\n\n hidePageContentFromScreenReader(true);\n\n if ($loader.firstLoad()) {\n setLoadingMessage($locale.content.get('base.processing'));\n }\n\n // focus on the message so that screen readers will let the user know the page is loading\n $(document).on('keydown', preventDefault);\n $(document).on('focusin', captureFocus);\n $timeout(function () {\n $('#spinner-message').focus();\n });\n }\n\n function hideSpinner() {\n $scope.loading = false;\n $logger.info('hide_loading_spinner');\n $('#preloaderSpinner').hide();\n $body.removeClass('loading');\n $(document).off('keydown', preventDefault);\n $(document).off('focusin', captureFocus);\n\n hidePageContentFromScreenReader(false);\n\n // Focus captured element if focus was given to an element while spinner was active.\n if ($capturedElement.length && $(document.body).has($capturedElement).length) {\n $capturedElement.focus();\n // Focus element that had focus before if it is still within the document\n } else if ($priorActiveElement.length && $(document.body).has($priorActiveElement).length) {\n $priorActiveElement.focus();\n } else {\n // If focus is not managed, default to focusing sliding area. Fixes FF and IE bug where tab focus starts from\n // the element last clicked, rather than top of page.\n $slidingArea.focus();\n }\n $priorActiveElement = $();\n $capturedElement = $();\n }\n\n var cancelStartLoad = $rootScope.$on('startLoad', showSpinner);\n var cancelAllLoaded = $rootScope.$on('allLoaded', hideSpinner);\n\n var cancelSetLoadingMessage = $rootScope.$on('loadingMessage', function (event, text) {\n setLoadingMessage(text);\n });\n\n $scope.$on('$destroy', function () {\n hideSpinner();\n cancelStartLoad();\n cancelAllLoaded();\n cancelSetLoadingMessage();\n });\n\n if ($loader.isLoading()) {\n showSpinner();\n }\n }]\n };\n }]);\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/sticky-cta/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/sticky-cta/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/sticky-cta/styles.less\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-ui-components/src/sticky-cta/utils.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoStickyCta', {\n tag: 'xo-sticky-cta',\n template: _template2['default'],\n transclude: true,\n props: {\n eligibility: {\n type: 'var',\n required: false\n }\n },\n resolve: {},\n lifecycle: {\n populate: function populate() {\n _logger.$logger.info('xoStickyCta_populate_' + this.eligibility);\n if (!this.eligibility) {\n return;\n }\n var position = this.eligibility;\n var stickyContent = document.getElementById('sticky-content');\n var stickyPlaceholder = document.getElementById('sticky-placeholder-' + position);\n var foundContentDom = Boolean(stickyContent);\n var placeholderIsVisible = (0, _utils.isInViewport)(stickyPlaceholder);\n\n angular.element(stickyContent).addClass('sticky-' + position + '-off');\n\n _logger.$logger.info('xoStickyCta_init', {\n foundContentDom: foundContentDom,\n placeholderIsVisible: placeholderIsVisible,\n position: position\n });\n\n /**\n * TODO: Replace sticky logic with 'position:sticky' only when\n * there is greater browser compatibility. It is more seamless.\n * When using 'position:sticky' revert 'overflow:hidden' else sticky is not possible.\n * angular.element(document.getElementById('sliding-area')).css('overflow', 'inherit');\n */\n\n /**\n * Current Logic: if the stickyContent DOM is found in html then\n * - if placeholder is visible on screen -> fix the DOM position to its regular position\n * - if placeholder is not visible on screen -> we make the DOM float\n */\n\n var isFloating = false;\n\n var bindHandler = function bindHandler(event) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n isFloating: isFloating,\n position: position,\n currentState: _angular.$rootScope.currentState\n });\n };\n\n var stateHandler = function stateHandler(event, toState, toParams, fromState) {\n /**\n * TODO:\n * try to use something like .trayOpen -> great grand child .sticky via css\n * this is required for cases when overlay or sidebar is opened.\n */\n var review = 'checkout.review';\n var to = toState && toState.name;\n var from = fromState && fromState.name;\n\n var conflict = from === to;\n var leaving = !conflict && from === review;\n var entering = !conflict && to === review;\n\n if (leaving) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n force: 'off',\n position: position\n });\n }\n if (entering) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n isFloating: isFloating,\n position: position,\n currentState: _angular.$rootScope.currentState\n });\n }\n\n _logger.$logger.info('xoStickyCta_stateChangeSuccess', { to: to, from: from, isFloating: isFloating });\n };\n\n angular.element(_angular.$window).bind('scroll', bindHandler).bind('resize', bindHandler);\n // .bind('orientationchange', bindHandler); // TODO\n\n var stateChangeListener = _angular.$rootScope.$on('$stateChangeSuccess', stateHandler);\n\n this.$on('$destroy', function () {\n _logger.$logger.info('xoStickyCta_destroy');\n angular.element(_angular.$window).unbind('scroll', bindHandler) // remove only the handlers used in this element\n // .bind('orientationchange', bindHandler) // TODO\n .unbind('resize', bindHandler); // remove only the handlers used in this element\n stateChangeListener();\n });\n }\n }\n});\n\n\n_squid.$Component;\n\n_logger.$logger;\n\n_angular.$window;\n\n_angular.$rootScope;\n\n_utils.isInViewport;\n\n_utils.stickyHandler;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/sticky-cta/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/sticky-cta/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n
    \\n
    \"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/sticky-cta/utils.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\n/**\n * Checks if provided element is currently visible.\n * \n * @param {any} element: Reference to DOM object\n * @returns {Boolean}\n */\nvar isInViewport = exports.isInViewport = function isInViewport(element) {\n var bounding = element.getBoundingClientRect();\n\n return (\n // check if element is bellow top most pixel\n // check if element is on the right of left most pixel\n // check if element is above the lowest pixel on screen\n // check if element is on the left of the right most pixel\n bounding.top >= 0 && bounding.left >= 0 && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n};\n\n/**\n * Make the element provided sticky\n * \n * @param {any} placeholder: Reference to placeholder DOM object\n * @param {any} element: Reference to DOM object\n * @param {string} position: where the element is located ('top', 'bottom').\n */\nvar makeSticky = exports.makeSticky = function makeSticky(placeholder, element, position) {\n var elementHeight = element.offsetHeight;\n\n angular.element(element).addClass('sticky').addClass('sticky-' + position).removeClass('sticky-' + position + '-off');\n angular.element(placeholder).css('height', elementHeight);\n return true;\n};\n\n/**\n * Make the element provided fixed to regular location\n * \n * @param {any} placeholder: Reference to placeholder DOM object\n * @param {any} element: Reference to DOM object\n * @param {string} position: where the element is located ('top', 'bottom').\n */\nvar removeSticky = exports.removeSticky = function removeSticky(placeholder, element, position) {\n angular.element(element).removeClass('sticky').removeClass('sticky-' + position).addClass('sticky-' + position + '-off');\n angular.element(placeholder).css('height', '');\n return false;\n};\n\n/**\n * Decides when to enable or disable sticky effect on DOM\n * \n * @param {any} stickyPlaceholder: Reference to DOM object\n * @param {any} stickyContent: Reference to DOM object \n * @param {any} context: context related to current state of DOM\n * @returns {Boolean}: Updated state of DOM\n */\nvar stickyHandler = exports.stickyHandler = function stickyHandler(stickyPlaceholder, stickyContent, context) {\n var position = context.position,\n force = context.force,\n currentState = context.currentState,\n isFloating = context.isFloating;\n\n\n if (force === 'off') {\n return removeSticky(stickyPlaceholder, stickyContent, position);\n }\n\n var alreadyFloating = isInViewport(stickyPlaceholder) && isFloating;\n var canEnable = !isInViewport(stickyPlaceholder) && !isFloating && currentState === 'checkout_review';\n\n if (alreadyFloating) {\n return removeSticky(stickyPlaceholder, stickyContent, position);\n } else if (canEnable) {\n return makeSticky(stickyPlaceholder, stickyContent, position);\n } else {\n return isFloating;\n }\n};\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/tooltip/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nexports.__esModule = true;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/tooltip/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction getDefaultShowEvent($el) {\n return $el.is('a') || $el.is('button') ? 'click' : 'focus';\n}\n\n// Modify the aria-describedby property to include the id when showing the element so contents are properly read\nfunction addDescribedById($el, id) {\n var describedByIds = $el.attr('aria-describedby') ? $el.attr('aria-describedby').split(' ') : [];\n\n if (!~describedByIds.indexOf(id)) {\n describedByIds.push(id);\n }\n\n $el.attr('aria-describedby', describedByIds.join(' '));\n}\n\n// Modify the aria-describedby attribute to remove the id when hiding the element so contents are no longer read\nfunction removeDescribedById($el, id) {\n var describedByIds = $el.attr('aria-describedby') || '';\n\n $el.attr('aria-describedby', describedByIds.split(' ').filter(function (existingId) {\n return existingId !== id;\n }).join(' '));\n}\n\nvar isMouseTypeEvent = function isMouseTypeEvent(type) {\n return (/mouse/.test(type)\n );\n};\n\nfunction debounceOnMouseTrigger(type, fn) {\n var isMouseType = isMouseTypeEvent(type);\n\n return function () {\n var _arguments = arguments;\n\n if (isMouseType) {\n (0, _angular.$timeout)(function () {\n return fn.apply(null, _arguments);\n }, 250);\n } else {\n fn.apply(null, arguments);\n }\n };\n}\n\nexports['default'] = _squid.$Component.extend('xoTooltip', {\n tag: 'xo-tooltip',\n template: _template2['default'],\n transclude: true,\n props: {\n trigger: {\n type: 'str',\n required: false\n },\n showEvent: {\n type: 'str',\n required: false\n },\n hideEvent: {\n type: 'str',\n required: false\n },\n displayInline: {\n type: 'var',\n required: false\n },\n align: {\n type: 'str',\n required: false\n }\n },\n lifecycle: {\n populate: function populate() {\n var $element = this.$element,\n trigger = this.trigger;\n\n var $trigger = $(trigger);\n var toolTip = $element.find('.toolTip');\n var toolTipID = this.toolTipID = 'toolTip_' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);\n var isMouseOver = false;\n\n /**\n * Toggle the show/hide state of the tooltip\n */\n var toggle = function toggle(event) {\n if (toolTip.length && toolTip.is(':visible')) {\n close(event);\n } else {\n show(event);\n }\n };\n\n /**\n * Show the tooltip, if not already shown.\n */\n var show = function show(event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n addDescribedById($trigger, toolTipID);\n\n // Show the tooltip and position the page scroll to include the element on page\n $element.show();\n toolTip.slideDown({\n progress: function progress() {\n var windowBot = $(window).scrollTop() + $(window).height();\n var toolTipBot = toolTip.offset().top + toolTip.outerHeight();\n if (toolTipBot > windowBot) {\n $(window).scrollTop(toolTipBot - $(window).height());\n }\n }\n });\n };\n\n /**\n * Hide the tooltip\n */\n var close = function close(event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n if (!isMouseOver) {\n if (toolTip.length && toolTip.is(':visible')) {\n toolTip.slideUp(100, function () {\n $element.hide();\n });\n } else {\n $element.hide();\n }\n\n removeDescribedById($trigger, toolTipID);\n }\n };\n\n /**\n * Setting up the DOM behavior for this component\n */\n // Set defaults for showEvent and hideEvent if not provided\n this.showEvent = this.showEvent || getDefaultShowEvent($element);\n this.hideEvent = this.hideEvent || 'blur';\n\n var SHOW_EVENT = this.showEvent + '.toolTip';\n var HIDE_EVENT = this.hideEvent + '.toolTip';\n\n // Initially hide the tooltip\n $element.hide();\n\n // If tooltip is clicked, don't bubble up and trigger parent handlers\n $element.on('click', function (event) {\n return event.stopPropagation();\n });\n\n // If the tooltip contains an element with a \"close\" class, treat it as a close button\n $element.on('click', '.close', close);\n\n // Track whether the mouse is on the tooltip or not\n $element.on('mouseover', function () {\n isMouseOver = true;\n });\n $element.on('mouseleave', function () {\n isMouseOver = false;\n });\n\n // Clicking anywhere on the document not on the tooltip will close the tooltip.\n // Event is not passed so that other actions are not prevented\n $(document).on('click.toolTip', function (e) {\n // Needed because when the trigger is clicked, this click handler will also be fired.\n // So without this check the tooltip will open due to the trigger click and then this\n // document event handler would immediately close it\n if (!$trigger.is(e.target)) {\n close();\n } else {\n show();\n }\n });\n\n // Register the handlers to show and hide the tooltip\n if (this.showEvent === this.hideEvent) {\n $trigger.on(SHOW_EVENT, toggle);\n $element.on(SHOW_EVENT, toggle);\n } else {\n $trigger.on(SHOW_EVENT, show);\n $trigger.on(HIDE_EVENT, debounceOnMouseTrigger(this.hideEvent, close));\n // Also allow close event to happen on the tooltip itself, for mouse type events\n $element.on(HIDE_EVENT, debounceOnMouseTrigger(this.hideEvent, close));\n }\n\n // Clean up external listeners on exit\n this.$on('$destroy', function () {\n $(document).off('click.toolTip');\n $trigger.off(SHOW_EVENT);\n $trigger.off(HIDE_EVENT);\n close();\n });\n }\n }\n});\n\n\n_angular.$timeout;\n\n_squid.$Component;\nmodule.exports = exports['default'];\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/tooltip/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/user-assist-banner/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCardLoader = undefined;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _popupHandler = __webpack_require__(\"../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js\");\n\nvar _popupHandler2 = _interopRequireDefault(_popupHandler);\n\nvar _template = __webpack_require__(\"../node_modules/xo-ui-components/src/user-assist-banner/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/user-assist-banner/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCardLoader = exports.$xoCardLoader = _squid.$Component.extend('xoAssistBanner', {\n tag: 'xo-assist-banner',\n template: _template2['default'],\n props: {\n header: {\n type: 'var',\n required: false\n },\n body: {\n type: 'var',\n required: false\n },\n hideHighlight: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('xo-assist-banner_enter');\n }\n },\n controller: ['$scope', function ($scope) {\n _logger.$logger.info('xo-assist-banner:controller');\n $scope.token = _angular.$rootScope.token;\n $scope.showFeedback = function () {\n return !_index.$DeviceInfo.isDevice();\n };\n $scope.showOL = function (event) {\n event.preventDefault();\n var placeholder = 'main:ec:hermes';\n var page = _uiRouter.$state.current.get('trackingData.buzname.fullpage.pagename2', 'unknown').replace('%', placeholder);\n var data = {\n opVars: {\n rlogId: _angular.$window.meta.rlogId || '',\n page: page || window.location.hash,\n csci: 'Unknown',\n calc: _angular.$window.meta.correlationId,\n custId: 'Unknown',\n merchantId: 'Unknown',\n token: $scope.token || 'Unknown'\n },\n locale: {\n country: _squid.$locale.country,\n languageCode: _squid.$locale.lang + '_' + _squid.$locale.country\n }\n };\n\n (0, _popupHandler2['default'])(data);\n };\n }]\n});\n\nangular.value(\"$xoCardLoader\", $xoCardLoader);\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\n var _doc = document;\n var _w = window;\n var _tm = new Date().getTime();\n var _sH = screen.height;\n var _ht = escape(_w.location.href); // eslint-disable-line block-scoped-var,no-undef\n var _hr = escape(_doc.referrer); // eslint-disable-line block-scoped-var,no-undef\n var _sW = screen.width;\n\n function popUp(opinionlabURL) {\n _w.open(opinionlabURL, 'comments', 'width=535,height=192' + ',screenX=' + (_sW - 535) / 2 + ',screenY=' + (_sH - 192) / 2 + ',top=' + (_sH - 192) / 2 + ',left=' + (_sW - 535) / 2 + ',resizable=yes' + ',copyhistory=yes' + ',scrollbars=no');\n }\n\n function updateCustomVars(data) {\n\n var opVars = data.opVars;\n var locale = data.locale;\n\n _ht = 'https://' + locale.country + '.paypal.com/' + locale.languageCode + '/00/' + escape(opVars.page.replace(/\\s|\\//g, '_')) + '.page'; // eslint-disable-line block-scoped-var,no-undef\n\n var customVar = (opVars.rlogId || opVars.calc) + '|' + opVars.csci + '|' + opVars.page + '|' + locale.country + '|' + locale.languageCode + '|' + opVars.custId + '|' + opVars.merchantId + '|' + opVars.token + '|' + 'Unknown';\n return customVar;\n }\n\n function _fC(_u) {\n var _sp = '%3A\\\\/\\\\/';\n var _rp = '%3A//';\n var _aT = _sp + ',\\\\/,\\\\.,-,_,' + _rp + ',%2F,%2E,%2D,%5F';\n var _aA = _aT.split(',');\n\n for (var i = 0; i < 5; i++) {\n eval('_u=_u.replace(/' + _aA[i] + '/g,_aA[i+5])'); // eslint-disable-line no-eval\n }\n return _u;\n }\n\n return function (locale) {\n\n var custom_var = updateCustomVars(locale);\n\n var opinionlabURL = 'https://secure.opinionlab.com/ccc01/comment_card.asp?' + 'time1=' + _tm + '&time2=' + new Date().getTime() + '&prev=' + _fC(_hr) + '&referer=' + _fC(_ht) + '&height=' + _sH + '&width=' + _sW + '&custom_var=' + custom_var;\n popUp(opinionlabURL);\n };\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/user-assist-banner/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-ui-components/src/user-assist-banner/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n

    {{header}}

    \\n
    \\n
    \\n

    \\n
    \\n
    \\n {{ content('common.haveFeedback') }}\\n {{ content('common.letUsKnow') }}\\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-validation/dist/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().directive('xoValidation', function () {\n return {\n template: '',\n restrict: 'A',\n require: 'ngModel',\n link: function link(scope, elem, attr, ngModel) {\n var validationUtil = {\n // because IE8 doesnt have String.prototype.trim()\n trim: function trim(value) {\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n return value.replace(rtrim, '');\n },\n\n\n /**\n * Generic function that runs a given input against\n * a given regular expression\n *\n * @param {String} value input to test\n * @param {String/RegExp} regex Regular expression to test against\n * @returns {Boolean} matches or does not match given pattern\n */\n valid: function valid(value, regex) {\n if (this.empty(value)) {\n return false;\n }\n\n if (_angular2['default'].isString(regex)) {\n regex = new RegExp(regex);\n }\n\n return regex ? regex.test(value) : true;\n },\n\n\n // returns whether empty or not\n empty: function empty(value) {\n if (!value) {\n return true;\n }\n\n // IE8 and below doesn't have native .trim()\n return !this.trim(value);\n },\n\n\n // returns whether alphabetic or not\n alphabetic: function alphabetic(value) {\n return this.valid(value, /[A-Za-z]+$/);\n },\n\n\n // returns whether numeric or not\n numeric: function numeric(value) {\n var NUMERIC_REGEX = new RegExp('^[0-9]+$');\n\n return this.valid(value, NUMERIC_REGEX);\n },\n validBankAccount: function validBankAccount(value) {\n if (!scope.showIBAN) {\n return this.numeric(value);\n }\n\n return true;\n },\n validRouting: function validRouting(value) {\n if (!scope.showIBAN) {\n return this.valid(value, /^\\d{8}$/);\n }\n return true;\n },\n validIBANCode: function validIBANCode(value) {\n if (scope.showIBAN) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^([A-Z]){2}\\d{2}[A-Z0-9]{1,30}$/);\n }\n return true;\n },\n validIBAN: function validIBAN(value) {\n if (scope.showIBAN) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^DE\\d{20}$/);\n }\n\n return true;\n },\n validIBANCountry: function validIBANCountry(value) {\n value = value && value.replace(/ +/g, '');\n return !this.valid(value, /^([^D0-9][E]|[D][^E0-9]|[^D0-9][^E0-9])\\d{2}[A-Z0-9]{1,30}$/i);\n },\n\n\n // @Deprecated: This function is deprecated.\n // first two letters are the country code the rest are the bank account numbers max length 32\n validIBANWithValidCountryCode: function validIBANWithValidCountryCode(value) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^(AT|BE|CY|EE|FI|FR|DE|EL|IE|IT|LV|LT|LU|MT|MC|NL|PT|SK|SI|ES)\\d{3,32}$/i);\n },\n validLast4: function validLast4(value) {\n // @TODO - Unsafe regular expression, need to fix.\n var LAST_4 = /^([0-9]{4})?$/; // eslint-disable-line fasec/no-unsafe-regex\n\n return this.valid(value, LAST_4);\n },\n validStreet: function validStreet(value) {\n return this.valid(value, /^([A-Za-z0-9-. ]*)$/);\n },\n\n\n // Validating phone format with metadata from griffin\n validPhone: function validPhone(value) {\n var regex = scope.pattern;\n\n /*\n * User can enter phone format in various manner according to griffin mask\n * (00) 0000-0000\n * 00 000 0000\n * Since the griffin pattern only validates against numbers, need to trim the input\n * to only validate the numbers\n */\n value = value && value.replace(/[^0-9]/gi, '');\n return this.valid(value, regex);\n },\n validDobYear: function validDobYear(value) {\n return value !== 'YYYY';\n },\n validDobDay: function validDobDay(value) {\n return value !== 'DD';\n },\n validDobMonth: function validDobMonth(value) {\n return value !== 'MM';\n },\n validPoBox: function validPoBox(value) {\n // @TODO - Unsafe regular expression, need to fix.\n var boxRE = /\\b(((general\\s+)?post\\s+(office|mail)?)|((g\\.?)?p[-\\.]?\\s?[om][\\.-]?))\\s?(b(ox|\\.)?)?(\\s+\\d+)\\b/i; // eslint-disable-line fasec/no-unsafe-regex\n\n if (boxRE.test(value)) {\n return true;\n }\n\n return false;\n },\n validAddressSansPoBox: function validAddressSansPoBox(value) {\n var boxRE = /(p[-.]? ?[om]?[-.]? ?|post ?(office|mail)?)? ?b(.|ox)[^,]*\\d+/i;\n var cassRE = /(drawer|locker|bin|firm caller)\\s?#?[0-9]+/i;\n\n if (boxRE.test(value) || cassRE.test(value)) {\n return false;\n }\n return true;\n },\n validEmailOrPhone: function validEmailOrPhone(value) {\n if (!value) {\n return false;\n }\n\n return this.validEmail(value) || this.validPhone(value);\n },\n validEmail: function validEmail(value) {\n if (!value) {\n return false;\n }\n var trimmedValue = this.trim(value); // Trim leading and trailing whitespace\n // @TODO - Unsafe regular expression, need to fix.\n var EMAIL_REGEX = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i; // eslint-disable-line\n\n return this.valid(trimmedValue, EMAIL_REGEX) && !this.highAscii(trimmedValue);\n },\n highAscii: function highAscii(value) {\n var trimmedValue = this.trim(value);\n // @TODO - Unsafe regular expression, need to fix.\n var HIGH_ASCII_REGEX = /[^\\x00-\\x7F]/; // eslint-disable-line no-control-regex\n\n return this.valid(trimmedValue, HIGH_ASCII_REGEX);\n },\n\n\n // expected format: MM/DD/YYYY\n validDate: function validDate(value) {\n var re = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/;\n var dArr = value.split('/');\n var d = new Date(value);\n var isValid = false;\n\n if (re.test(value)) {\n isValid = d.getMonth() + 1 === dArr[0] && d.getDate() === dArr[1] && d.getFullYear() === dArr[2];\n }\n\n return isValid;\n },\n\n\n /* Expects value and state. state can be \"past\" or \"future\".\n NOTE: This function validates only month and year, not day!\n Please use validDate() if you need to validate the whole date. */\n validDateWithoutDay: function validDateWithoutDay(value, options) {\n // eslint-disable-line max-statements\n var state = options.state;\n\n value = value.replace(/\\s/g, '');\n\n if (value === '') {\n return true;\n }\n\n var split = value.split('/');\n var month = split[0];\n var year = split[1];\n var currentYear = parseInt(new Date().getFullYear().toString().substr(2, 2), 10);\n var currentMonth = parseInt(new Date().getMonth(), 10) + 1;\n var validYear = true;\n var validMonth = true;\n\n if (value.length < 5) {\n return false;\n }\n\n if (!this.validDobMonth(month)) {\n return false;\n }\n\n month = parseInt(month, 10);\n year = parseInt(year, 10);\n\n if (state === 'past') {\n validYear = year <= currentYear;\n if (!validYear) {\n return false;\n }\n if (year === currentYear) {\n validMonth = month <= currentMonth;\n }\n } else if (state === 'future') {\n validYear = year >= currentYear;\n if (!validYear) {\n return false;\n }\n if (year === currentYear) {\n validMonth = month >= currentMonth;\n }\n }\n\n if (!validYear || !validMonth) {\n return false;\n }\n\n return true;\n },\n\n\n // formats to MM/DD/YYYY\n mmddyyyy: function mmddyyyy(day, month, year) {\n if (year.length < 4) {\n year = '20' + year;\n }\n\n return this.twoDigits(month) + '/' + this.twoDigits(day) + '/' + this.twoDigits(year);\n },\n\n\n // formats to YY-MMM-DDDD\n yyyymmdd: function yyyymmdd(day, month, year) {\n if (year.length < 4) {\n year = '20' + year;\n }\n\n return year + '-' + this.twoDigits(month) + '-' + this.twoDigits(day);\n },\n\n\n // pads a number to two digits\n twoDigits: function twoDigits(value) {\n return value < 10 ? '0' + value : '' + value;\n },\n\n\n // expects YYYY-MM-DD\n legalAge: function legalAge(value) {\n if (this.empty(value)) {\n return false;\n }\n\n var dateParts = value.split('-'); // expecting YYYY-MM-DD\n var birthDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n var yr = 365.25 * 24 * 60 * 60 * 1000; // milliseconds in a year\n var validBD = new Date(new Date() - 18 * yr);\n\n return validBD >= birthDate;\n },\n validZip: function validZip(value, options) {\n\n var postalCodeRegex = {\n // TODO: Once this is removed from the xo-add-address template, we can remove it...\n GB: /[A-Z]{1,2}[0-9][0-9A-Z]?\\s?[0-9][A-Z]{2}/,\n /**\n * Note: These are \"nice to have\".\n * Once we add support for these countries, we can remove these.\n */\n BA: /^\\d{5}$/,\n CY: /^\\d{4}$/,\n EE: /^\\d{5}$/,\n HR: /^\\d{5}$/,\n LU: /^\\d{4}$/,\n LV: /^\\d{4}$/,\n MT: /^\\d{3,4}$/,\n SI: /^\\d{4}$/,\n SK: /^[0-9]{3}[\\s][0-9]{2}$/,\n NZ: /^\\d{4}$/,\n LT: /^\\d{5}$/,\n BG: /^\\d{4}$/,\n CZ: /^\\d{5}$/,\n GR: /^\\d{3}[\\s]\\d{2}$/,\n HU: /^\\d{4}$/,\n MX: /^\\d{5}$/\n };\n\n var country = options && options.country;\n var regex = scope.zipEntry && scope.zipEntry.validationPattern || postalCodeRegex[country];\n var isRequired = scope.zipEntry && scope.zipEntry.required;\n\n if (!isRequired && this.empty(value)) {\n return true;\n }\n\n // If there is no regex, or it's not populated yet...\n if (!regex || _angular2['default'].isString(regex) && regex.indexOf('validationPattern') > -1) {\n return !this.empty(value);\n }\n\n value = value && value.toUpperCase();\n\n if (_angular2['default'].isString(regex)) {\n if (regex.charAt(0) !== '^') {\n regex = '^' + regex;\n }\n if (regex.charAt(regex.length - 1) !== '$') {\n regex += '$';\n }\n }\n\n return this.valid(value, regex);\n },\n validExpiry: function validExpiry(value, options) {\n var $monthEl = (0, _jquery2['default'])('[ng-model=\"card.expiry_month\"]');\n var $yearEl = (0, _jquery2['default'])('[ng-model=\"card.expiry_year\"]');\n var month = $monthEl.val();\n var year = $yearEl.val();\n var isValid = false;\n var monthElName = 'card.expiry_month';\n var yearElName = 'card.expiry_year';\n var cardType = options.cardType;\n\n if (month) {\n month = $monthEl.find('option')[$monthEl.val() * 1 + 1].label;\n }\n\n if (year) {\n year = $yearEl.find('option')[$yearEl.val() * 1 + 1].label;\n }\n\n if (month && year) {\n isValid = this.validExpires(month, year);\n }\n\n var formName = $monthEl.closest('form').attr('id');\n var form = scope[formName] || scope.$parent[formName];\n var monthFieldName = monthElName;\n var yearFieldName = yearElName;\n\n if (monthFieldName.indexOf('.') !== -1) {\n monthFieldName = monthFieldName.split('.')[1];\n }\n\n if (yearFieldName.indexOf('.') !== -1) {\n yearFieldName = yearFieldName.split('.')[1];\n }\n\n var cardsDontNeedExpiry = ['COFIDIS', 'COFINOGA', 'CETELEM'];\n\n if (cardType && cardsDontNeedExpiry.indexOf(cardType) !== -1) {\n isValid = true;\n }\n\n if (form) {\n form[monthFieldName].$setValidity('validExpiry', isValid);\n form[yearFieldName].$setValidity('validExpiry', isValid);\n }\n\n return isValid;\n },\n validExpires: function validExpires(month, year) {\n var date = new Date();\n var currentYear = parseInt(date.getFullYear().toString().substr(2, 2), 10);\n var currentMonth;\n\n if (year < currentYear) {\n return false;\n } else if (year > currentYear) {\n return this.validDobMonth(month);\n }\n\n // account for display date vs. system date\n currentMonth = date.getMonth() + 1;\n return this.validDobMonth(month) && month >= currentMonth;\n },\n startDate: function startDate(value, options) {\n var valueOptions = {\n cardType: scope.card.type\n };\n\n valueOptions[elem.attr('id')] = value;\n\n return this.setStartDateValidity(valueOptions);\n },\n\n\n setExpiryValidity: function setExpiryValidity(options) {\n if (!options) {\n return true;\n }\n\n var cardType = options.cardType || '';\n var expiryValidity = this.validExpiry(null, {\n cardType: cardType\n });\n\n return expiryValidity;\n },\n\n // start date validation for Maestro card\n setStartDateValidity: function setStartDateValidity(options) {\n if (!options) {\n return true;\n }\n\n var cardType = options.cardType || '';\n var startDateValidity = true;\n var $monthEl = (0, _jquery2['default'])('#startmonth');\n var $yearEl = (0, _jquery2['default'])('#startyear');\n var month = $monthEl.val();\n var year = $yearEl.val();\n\n if (cardType === 'MAESTRO') {\n if (!month || !year) {\n startDateValidity = false;\n }\n }\n\n var formName = $monthEl.closest('form').attr('id'),\n form = scope[formName] || scope.$parent[formName];\n\n if (form) {\n form.startmonth.$setValidity('startDate', startDateValidity);\n form.startyear.$setValidity('startDate', startDateValidity);\n }\n\n return startDateValidity;\n },\n dobField: function dobField(value, options) {\n var valueOptions = {};\n var fieldMap = {\n dobDayCC: 'day',\n dobMonthCC: 'month',\n dobYearCC: 'year'\n };\n\n valueOptions.cardType = scope.card.type;\n valueOptions[fieldMap[elem.attr('id')]] = value;\n\n return this.setDOBValidity(valueOptions);\n },\n setDOBValidity: function setDOBValidity(options) {\n if (!options) {\n return true;\n }\n\n var dobEnabledCards = ['COFIDIS', 'COFINOGA', 'CETELEM'];\n var dobValidity = true;\n\n var $monthEl = (0, _jquery2['default'])('#dobMonthCC');\n var $dayEl = (0, _jquery2['default'])('#dobDayCC');\n var $yearEl = (0, _jquery2['default'])('#dobYearCC');\n\n var month = options.month || $monthEl.val();\n var year = options.year || $yearEl.val();\n var day = options.day || $dayEl.val();\n\n if (month) {\n month = $monthEl.find('option')[$monthEl.val() * 1 + 1].label;\n }\n\n if (day) {\n day = $dayEl.find('option')[$dayEl.val() * 1 + 1].label;\n }\n\n if (year) {\n year = $yearEl.find('option')[$yearEl.val() * 1 + 1].label;\n }\n\n var cardType = options.cardType;\n\n if (cardType && dobEnabledCards.indexOf(cardType) !== -1) {\n if (!month || !year || !day) {\n dobValidity = false;\n // invalidate if < 18 y/o.\n } else if (!this.legalAge(this.yyyymmdd(day, month, year))) {\n dobValidity = false;\n } else if (!this.validDate(this.mmddyyyy(day, month, year))) {\n dobValidity = false;\n }\n }\n\n var formName = $monthEl.closest('form').attr('id');\n var form = scope[formName] || scope.$parent[formName];\n\n if (form) {\n form.dobMonthCC.$setValidity('dobField', dobValidity);\n form.dobDayCC.$setValidity('dobField', dobValidity);\n form.dobYearCC.$setValidity('dobField', dobValidity);\n }\n\n return dobValidity;\n },\n validName: function validName(value) {\n return this.valid(value, /^([a-zA-Z,\\xC0-\\xFF,\\u00C0-\\u017F\\,\\-\\s\\,\\'])*$/);\n },\n isChecked: function isChecked(value, options) {\n // $.is does not exist in $\n // eslint-disable-line angular/ng_angularelement\n var $el = (0, _jquery2['default'])(options.el);\n\n return $el.is(':checked');\n },\n validRUPassport: function validRUPassport(value, options) {\n if (scope.user.countryOfResidence === 'RU') {\n return this.valid(value, /^\\d{10}$/);\n }\n return true;\n }\n };\n\n var customValidator = function customValidator(value) {\n var ruleJson = _angular2['default'].fromJson(elem.attr('xo-validation'));\n var validator = ruleJson.validator;\n var options = ruleJson.options;\n\n ngModel.$setValidity(validator, validationUtil[validator](value, options));\n\n return value;\n };\n\n ngModel.$parsers.unshift(customValidator);\n ngModel.$formatters.unshift(customValidator);\n }\n };\n});\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/3ds/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _dist = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-wallet-components/src/3ds/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xo3ds', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n data: '=?',\n onComplete3dsHandler: '=?'\n },\n controller: ['$scope', function ($scope) {\n var resolve3DS = _index2.$Resolve3DS.instance($scope.token);\n var checkoutAppData = _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n var _$locale$country = _squid.$locale.country,\n country = _$locale$country === undefined ? 'DEFAULT' : _$locale$country;\n\n var isIos = _dist.$DeviceInfo.getiOSVersion();\n var timeout3DSConfig = _squid.$config.timeout3DS || { 'DEFAULT': 30000 };\n var lightBoxTimeout = isIos && country === 'IN' ? 0 : timeout3DSConfig[country] || timeout3DSConfig['DEFAULT'];\n\n $scope.termUrl = '' + window.location.origin + _squid.$config.urls.baseUrl + '/process3DS';\n $scope.data = $scope.data || {};\n\n function show3DSLightBox() {\n if ($scope.show3DS) {\n var lightbox = angular.element(document.getElementById('light-box'));\n lightbox.addClass('open');\n $scope.show3DS = false;\n _angular.$rootScope.$emit('loaded');\n }\n }\n\n function shouldUpdatePaymentExperience() {\n var merchantCountry = checkoutAppData.get('merchant.merchant_country', 'US');\n return !(_squid.$config.features[country] && _squid.$config.features[country].mandatory3dsWithMerchantCountries && _squid.$config.features[country].mandatory3dsWithMerchantCountries.includes(merchantCountry));\n }\n\n function handleInitFailure(message) {\n // Since init3DS call failed. We disable the feature and proceed to checkout.\n var updateAction = shouldUpdatePaymentExperience() ? checkoutAppData.action('updatePaymentExperience', {\n data: {\n payment_experience: 'HERMESNODE',\n '3d_secure_authentication_supported': false\n },\n silent: true,\n transientError: true\n }) : _squid.$promise.resolve();\n updateAction.then(function () {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': message,\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n $scope.onComplete3dsHandler('success');\n });\n }\n\n function init3DSApi() {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('threeDS.processing'));\n\n return resolve3DS.action('init3DS', {\n data: {\n cc_id: $scope.data.cc_id,\n flow_id: $scope.data.flow_id,\n merchant_id: $scope.data.merchant_id,\n merchant_country: $scope.data.merchant_country_code,\n currency: $scope.data.transaction_amount_currency,\n transaction_amount: $scope.data.transaction_amount_value\n },\n success: function success(response) {\n if (response.status === 'SUCCESS' && response.acsUrl) {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'prepare_3ds_challenge'\n });\n $scope.acsUrl = response.acsUrl;\n $scope.acsMethod = response.acsMethod || 'POST';\n $scope.acsPaReq = response.acsPaReq;\n\n var form = $('
    ', {\n action: $scope.acsUrl,\n method: $scope.acsMethod,\n id: 'iFrameForm',\n target: 'threeDSFrame'\n });\n form.append($('', {\n type: 'hidden',\n name: 'TermUrl',\n value: $scope.termUrl\n }));\n form.append($('', {\n type: 'hidden',\n name: 'PaReq',\n value: $scope.acsPaReq\n }));\n $('#lightBoxAcsWrapper').append(form);\n $('#iFrameForm').submit();\n\n // wait for 3DS page to load with a timeout\n\n // The $scope.show3DS in the line below is set true when the 3DS modal is eligible to be shown to user when the\n // bank page loads in its iframe, i.e., after init3DS success\n $scope.show3DS = true;\n _angular.$rootScope.$emit('loading');\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('threeDS.processing'));\n (0, _angular.$timeout)(function () {\n if ($scope.show3DS) {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: '3DS_CHALLENGE',\n 'int_error_description': 'load_3ds_issuer_page_content_timeout',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n }\n show3DSLightBox();\n }, lightBoxTimeout);\n } else {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': 'acsUrl_not_presented_on_init',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n\n // When there is no 3DS challenge page to be shown, we return success to the caller\n $scope.onComplete3dsHandler('success');\n }\n },\n error: function error() {\n handleInitFailure('unknown_error_on_init3DS');\n },\n validation: function validation() {\n handleInitFailure('validation_error_on_init3DS');\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n handleInitFailure('contingency_presented_on_init3DS');\n }\n }\n });\n }\n\n function complete3DSApi(paRes) {\n return resolve3DS.action('complete3DS', {\n data: {\n third_party_response: paRes,\n cc_id: $scope.data.cc_id,\n flow_id: $scope.data.flow_id\n },\n success: function success(response) {\n var status = void 0;\n\n if (response.status === 'SUCCESS') {\n status = 'success';\n\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge'\n });\n } else {\n status = 'decline';\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': 'complete3DS_decline',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n }\n $scope.onComplete3dsHandler(status);\n }\n });\n }\n\n $scope.close3DSFrame = function () {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_user_close'\n });\n _logger.$logger.flush();\n\n var lightbox = angular.element(document.getElementById('light-box'));\n lightbox.removeClass('open');\n\n (0, _angular.$timeout)(function () {\n var lightboxMask = angular.element(document.getElementById('mask'));\n\n lightboxMask.remove();\n $scope.onComplete3dsHandler('close');\n }, 200);\n };\n\n init3DSApi();\n\n $scope.complete3DS = function (paRes) {\n complete3DSApi(paRes);\n };\n\n _angular.$window.complete3DSFrame = function (paRes) {\n $scope.complete3DS(paRes);\n };\n\n $scope.on3DSPageLoad = show3DSLightBox;\n _angular.$window.on3DSPageLoad = $scope.on3DSPageLoad;\n\n // when the esc key is pressed\n $('html').on('keyup', function (ev) {\n if (ev.which === 27) {\n $scope.close3DSFrame();\n }\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_angular.$window;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$promise;\n\n_logger.$logger;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$Resolve3DS;\n\n_dist.$DeviceInfo;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/3ds/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n  \\n

    \\n {{ content('threeDS.iFrameTitle') }}\\n

    \\n \\n
    \\n\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/add-card/addcard/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$AddCardFactory', function () {\n var shouldDisplayAddressBox = function shouldDisplayAddressBox(isNmjDesign1, cardModel, invalidfield) {\n var avsRetry = _squid.$util.param('avsRetry') || invalidfield;\n var redirectFromXoon = _squid.$util.param('redirectToHermes') ? '1' : '0';\n if (!cardModel || !cardModel.address) {\n return _squid.$promise.resolve(false);\n }\n if (isNmjDesign1) {\n return _squid.$promise.resolve(true);\n }\n if (avsRetry) {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.AVS': avsRetry }, 'xo_hermes_addcard_msg_xoon_redirect_avs_address_box', false, true).then(function (result) {\n return result && result.treatment_name;\n });\n }\n return _squid.$promise.resolve(false);\n };\n\n var getAddCardPxpResult = function getAddCardPxpResult() {\n var redirectFromXoon = _squid.$util.param('redirectToHermes') ? '1' : '0';\n var retry = _squid.$util.param('addFIContingency') === 'retry' ? '1' : '0';\n var avsRetry = _squid.$util.param('avsRetry') ? '1' : '0';\n if (_squid.$util.param('avsRetry')) {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.AVS': avsRetry }, '(xo_hermes_addcard_msg_)(.*)', false, true).then(function (result) {\n return result;\n });\n } else {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.RETRY': retry, 'ctx.AVS': avsRetry }, '(xo_hermes_addcard_msg_)(.*)', false, true).then(function (result) {\n return result;\n });\n }\n };\n\n var getCheckoutIncentivePxpResult = function getCheckoutIncentivePxpResult() {\n return (0, _squid.$pxp)('xo_hermes_checkout_incentive', {}, '(xo_hermes_checkout_incentive_)(.*)', false, true).then(function (result) {\n return result && result.treatment_name;\n });\n };\n\n var getIssuerDeclineElmoResult = function getIssuerDeclineElmoResult() {\n return (0, _squid.$elmo)('xo_hermesnodeweb_issuer_decline', { 'ctx.country': _squid.$locale.country }, 'Trmt_xo_hermesnodeweb_issuer_decline_1').then(function (result) {\n return result && result.treatment_name;\n });\n };\n\n return {\n shouldDisplayAddressBox: shouldDisplayAddressBox,\n getAddCardPxpResult: getAddCardPxpResult,\n getCheckoutIncentivePxpResult: getCheckoutIncentivePxpResult,\n getIssuerDeclineElmoResult: getIssuerDeclineElmoResult\n };\n});\n\n_squid.$locale;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_squid.$elmo;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-wallet-components/src/add-card/addcard\", \"../node_modules/xo-wallet-components/src/add-card/addcard/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nexports.__esModule = true;\nexports.$CardMetaData = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar CARD_META_DATA = {\n DEFAULT: {\n fields: {\n address: true,\n cvv: true,\n dob: false,\n expiry: true,\n issue: false,\n phone: false\n },\n length: {\n cvv: 3,\n min: 16,\n max: 16\n },\n luhn: true,\n phoneType: 'Mobile',\n spaces: '4,8,12'\n },\n\n PLCC: {\n fields: {\n expiry: false,\n cvv: false,\n address: false\n },\n length: {\n min: 10,\n max: 16\n }\n },\n\n MAESTRO: {\n pattern: /^(5018|5020|5038|4903|4911|4936|564182|545250|504834|503615|6333|6304|6759|676[1-3]|0604)/,\n length: {\n min: 12,\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n SWITCH: {\n pattern: /^(5018|5020|5038|4903|4911|4936|564182|545250|504834|503615|6333|6304|6759|676[1-3]|0604)/,\n fields: {\n issue: true\n },\n length: {\n min: 12,\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n DINERSCLUB: {\n pattern: /^(36|38|30[0-5])/,\n length: {\n min: 14,\n max: 14\n }\n },\n\n DISCOVER: {\n pattern: /^(6011|65|64[4-9]|622|36|38|30[0-5])/,\n length: {\n min: 14\n }\n },\n\n MASTERCARD: {\n pattern: /^(5[1-5]|2(2(2[1-9]|[3-9]\\d)|[3-6]\\d\\d|7[0-1]\\d|720))/\n },\n\n AMEX: {\n pattern: /^3[47]/,\n length: {\n cvv: 4,\n min: 15,\n max: 15\n },\n spaces: '4,10'\n },\n\n VISA: {\n pattern: /^4/,\n length: {\n min: 13\n },\n subTypes: {\n QIWI: {\n pattern: /^(428122|489049|469395|446942|462012)/\n }\n }\n },\n\n JCB: {\n pattern: /^(?:2131|1800|35[0-9]{2})/,\n length: {\n min: 15\n }\n },\n\n CBNATIONALE: {},\n\n CETELEM: {\n fields: {\n dob: true\n },\n length: {\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n COFIDIS: {\n fields: {\n dob: true,\n expiry: false,\n cvv: false\n },\n length: {\n min: 8,\n max: 9\n },\n spaces: '4,8',\n luhn: false\n },\n\n COFINOGA: {\n fields: {\n dob: true,\n cvv: false\n },\n length: {\n min: 17,\n max: 17\n },\n spaces: '4,8,12,16'\n },\n\n ELO: {\n pattern: /^9/,\n length: {\n min: 13\n }\n },\n\n HIPER: {\n pattern: /^6/,\n length: {\n min: 13\n }\n },\n\n HIPERCARD: {\n pattern: /^7/,\n length: {\n min: 13\n }\n },\n\n CUPCREDIT: {\n fields: {\n address: false,\n phone: true\n },\n length: {\n max: 19\n }\n },\n\n CUPAMEXCREDIT: {\n fields: {\n address: false,\n phone: true\n },\n length: {\n cvv: 4,\n min: 15,\n max: 15\n }\n },\n\n CUPDEBIT: {\n fields: {\n address: false,\n cvv: false,\n expiry: false,\n phone: true\n },\n length: {\n max: 19\n }\n },\n\n CUPAMEXDEBIT: {\n fields: {\n address: false,\n cvv: false,\n expiry: false,\n phone: true\n },\n length: {\n min: 15,\n max: 15\n }\n }\n};\n\nObject.keys(CARD_META_DATA).forEach(function (key) {\n CARD_META_DATA[key] = $.extend(true, {}, CARD_META_DATA.DEFAULT, CARD_META_DATA[key]);\n});\n\nObject.keys(CARD_META_DATA).forEach(function (key) {\n CARD_META_DATA[key].spaces = CARD_META_DATA[key].spaces.split(',').map(Number);\n});\n\nfunction getTypeByPattern(cardMetaData, types, number) {\n var result = void 0;\n types.some(function (type) {\n var metaData = cardMetaData[type];\n if (metaData && metaData.pattern && metaData.pattern.test(number)) {\n result = type;\n return true;\n }\n });\n return result;\n}\n\nvar $CardMetaData = exports.$CardMetaData = {\n getMetaData: function getMetaData(card, field) {\n var cardType = card && card.type || 'DEFAULT';\n if (cardType === 'CUP') {\n cardType = cardType + (card.dualType ? card.dualType : '');\n cardType = cardType + (['DEBIT', 'DEBITCARD'].indexOf(card.productType) > -1 ? 'DEBIT' : 'CREDIT');\n }\n return _squid.$Class.get(CARD_META_DATA[cardType], field);\n },\n getCardType: function getCardType(types, number) {\n var cardType = {};\n if (_angular2['default'].isArray(types) && number) {\n cardType.type = getTypeByPattern(CARD_META_DATA, types, number);\n var metaData = CARD_META_DATA[cardType.type];\n if (metaData && metaData.subTypes) {\n cardType.subType = getTypeByPattern(metaData.subTypes, types, number);\n }\n }\n return cardType;\n }\n};\n\n_angular2['default'].value(\"$CardMetaData\", $CardMetaData);\n_squid.$Class;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/add-card/cvv/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoCvvDirective = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _cardMetaData = __webpack_require__(\"../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-wallet-components/src/add-card/cvv/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCvvDirective = exports.$xoCvvDirective = _squid.$Component.extend('$xoCvvDirective', {\n tag: 'xo-cvv',\n template: _template2['default'],\n\n props: {\n card: {\n type: 'var',\n required: false\n },\n showLabel: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n // A boolean message to update the masking property of cvv when the pre-filling happens\n this.$on('maskCVV', function ($event, isMasked) {\n _this.maskCVV = isMasked;\n });\n this.maskCVV = (0, _squid.$feature)('maskCVV', false, _squid.$locale.country);\n this.cvvLength = function () {\n return _cardMetaData.$CardMetaData.getMetaData(_this.props.card, 'length.cvv');\n };\n this.cvvRequired = function () {\n return _this.props.card.type !== 'MAESTRO' || (0, _squid.$feature)('maestroCvvRequired', false, _squid.$locale.country);\n };\n }\n }\n});\n\nangular.value(\"$xoCvvDirective\", $xoCvvDirective);\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$feature;\n\n_cardMetaData.$CardMetaData;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/add-card/cvv/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n \\n\\n
    \\n \\n\\n \\n \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/modal/directive.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion/factory.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"../node_modules/xo-wallet-components/src/currency-conversion-overlay/styles.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCurrencyConversionOverlayDirective', {\n tag: 'xo-currency-conversion-overlay',\n template: _template2['default'],\n props: {\n token: {\n type: 'var'\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n cart: _index.$CheckoutCartModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutInputDataModel: _index2.$CheckoutInputDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n actions: {\n onSubmit: function onSubmit() {\n var _this = this;\n\n var _models = this.models,\n checkoutSession = _models.checkoutSession,\n checkoutInputData = _models.checkoutInputData,\n ppconversion = _models.ppconversion;\n\n var fundingOptionId = checkoutInputData && checkoutInputData.funding_option_id;\n var plan = checkoutSession.plan;\n\n\n this.showOverlay = false;\n var _conversion = this.conversion,\n from_code = _conversion.from_code,\n to_code = _conversion.to_code,\n paypal = _conversion.paypal;\n\n var selectedConversionType = (0, _utils.mapConversionType)(ppconversion);\n var planConversionType = (0, _utils.mapConversionType)(paypal);\n\n if (selectedConversionType === planConversionType) {\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'cancel_currency_conversion',\n currency_conversion_from_curr: from_code,\n currency_conversion_to_curr: to_code\n } });\n // stop\n return;\n }\n\n var data = {\n conversionType: selectedConversionType,\n planId: fundingOptionId || plan.id\n };\n\n if (data.planId) {\n checkoutSession.fundingOptions.action('updateConversion', {\n data: data,\n success: function success(result) {\n if (data.planId !== plan.id) {\n // don't need to reload checkoutSession after updating the conversion of the backup funding option\n return null;\n }\n\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'process_currency_conversion',\n currency_conversion_type: selectedConversionType,\n is_conversion_shown: 1,\n currency_conversion_from_curr: _this.conversion.from_code,\n currency_conversion_to_curr: _this.conversion.to_code\n } });\n\n checkoutSession.reload({\n success: function success() {\n // Conversion object needs to be mapped again as checkoutSession is reloaded\n var plan = checkoutSession.plan; // eslint-disable-line no-shadow\n // Using let here since the conversion object may get reassigned at line 86 due to certain conditions\n\n var _plan$conversion = plan.conversion,\n conversion = _plan$conversion === undefined ? {} : _plan$conversion;\n\n _this.conversion = conversion;\n\n if (!ppconversion) {\n if (conversion.paypal) {\n _logger.$logger.info('currency_conversion_not_honored');\n } else {\n // To avoid a situation if the conversion object is not returned in the response\n conversion = plan.conversion || {\n changeable: true,\n paypal: false\n };\n }\n\n if (!conversion.from || !conversion.to) {\n _logger.$logger.info('currency_conversion_rate_missing');\n }\n }\n }\n })['catch'](function () {\n _logger.$logger.error('checkout_session_reload_failed');\n });\n }\n })['catch'](function () {\n _logger.$logger.error('update_conversion_failed');\n });\n }\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this2 = this;\n\n this.showOverlay = false;\n\n // Close overlay function\n this.closeOverlay = function () {\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'cancel_currency_conversion',\n currency_conversion_from_curr: _this2.conversion.from_code,\n currency_conversion_to_curr: _this2.conversion.to_code\n } });\n _this2.showOverlay = false;\n };\n\n // Event listener to open the overlay\n var showConversionOverlay = _angular.$rootScope.$on('$showConversionOverlay', function () {\n _this2.isConversionOverlayRateContent = _factory.$CurrencyConversionFactory.isConversionOverlayRateContent();\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'prepare_currency_conversion',\n currency_conversion_type: _this2.conversion.paypal ? 'PAYPAL' : 'VENDOR',\n is_conversion_shown: 1,\n currency_conversion_from_curr: _this2.conversion.from_code,\n currency_conversion_to_curr: _this2.conversion.to_code\n } });\n _this2.showOverlay = true;\n });\n\n this.$on('$destroy', showConversionOverlay);\n },\n populate: function populate() {\n var _models2 = this.models,\n checkoutSession = _models2.checkoutSession,\n cart = _models2.cart;\n\n this.conversion = checkoutSession.plan.conversion;\n // If there is conversion, populate scope with properties that will be rendered in UI\n if (this.conversion) {\n var conversion = this.conversion;\n this.isConversionOverlayRateContent = false;\n this.models.ppconversion = !!conversion.paypal;\n this.cartAmount = cart.purchase && cart.purchase.amounts.total.amount_formatted_currency;\n this.payPalAmount = conversion.total_converted_amount;\n this.toTargetCurrency = conversion.to_amount_forex + ' ' + conversion.to_code;\n this.fromUnitCurrency = '1 ' + checkoutSession.plan.conversion.from_code;\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutCartModel;\n\n_index2.$CheckoutInputDataModel;\n\n_factory.$CurrencyConversionFactory;\n\n_logger.$logger;\n\n_utils.mapConversionType;\n\n_utils.logCurrencyConversion;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/currency-conversion-overlay/styles.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n
    \\n \\n
    \\n

    {{content('currencyOptions.bfxConversionHeaderRateInterstitial')}}

    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n {{content('currencyOptions.bfxConversionPayPalTotal')}}\\n
    \\n {{payPalAmount}}\\n
    \\n
    \\n {{content('currencyOptions.bfxConversionIssuerTotal')}}\\n
    \\n {{cartAmount}}\\n
    \\n
    \\n

    \\n \\n {{content('currencyOptions.bfxConversionPayPalRate') + ' '}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n \\n

    \\n

    {{content('currencyOptions.bfxConversionPayPalSpreadDisclosureMember')}}

    \\n
    \\n
    \\n

    {{content('currencyOptions.bfxConversionIssuerDisclosure')}}

    \\n
    \\n \\n
    \\n\\n \\n
    \\n

    {{content('currencyOptions.bfxConversionHeaderCurrency')}}

    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n {{content('currencyOptions.bfxConversionPayPalTotal')}}\\n
    \\n {{payPalAmount}}\\n
    \\n
    \\n {{content('currencyOptions.bfxConversionIssuerTotal')}}\\n
    \\n {{cartAmount}}\\n
    \\n
    \\n

    \\n \\n {{content('currencyOptions.bfxConversionPayPalRate') + ' '}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n \\n

    \\n

    {{content('currencyOptions.bfxConversionPayPalSpreadDisclosureMember')}}

    \\n
    \\n
    \\n

    {{content('currencyOptions.bfxConversionIssuerDisclosure')}}

    \\n
    \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.logCurrencyConversion = exports.mapConversionType = undefined;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar DEFAULT_LOGGING_OPTIONS = {\n from: 'CURRENCY_CONVERSION'\n};\n\nvar mapConversionType = exports.mapConversionType = function mapConversionType(type) {\n return type ? 'PAYPAL' : 'VENDOR';\n};\n\nvar logCurrencyConversion = exports.logCurrencyConversion = function logCurrencyConversion(_ref) {\n var _ref$name = _ref.name,\n name = _ref$name === undefined ? 'currency_conversion' : _ref$name,\n _ref$options = _ref.options,\n options = _ref$options === undefined ? {} : _ref$options;\n\n // ES lint does not support the spread operator syntax which throws parsing error on its encounter\n var logOptions = Object.assign({}, DEFAULT_LOGGING_OPTIONS, options);\n _logger.$logger.info(name, logOptions);\n};\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/currency-conversion/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$CurrencyConversionFactory', function () {\n var showConversionOverlay = false; // Phase 2 flag that determines to show overlay or sidebar for currency conversion selection\n var showConversionOverlayRateContent = false; // Phase 2 flag that determines rate or currency variant for currency conversion overlay content\n\n // Call to get PXP treatents\n var fetchPXPTreatments = function fetchPXPTreatments() {\n return (0, _squid.$pxp)('xo_hermes_currency_conversion', 'xo_hermes_curr_conv_.*', undefined, false, true).then(function (result) {\n var treatmentName = result && result.treatment_name;\n\n showConversionOverlay = treatmentName && treatmentName.indexOf('test\\_') > -1;\n showConversionOverlayRateContent = treatmentName && treatmentName.indexOf('test\\_rate') > -1;\n });\n };\n\n /**\n * get content data for card issuer radio box container\n *\n * @param {Object} checkoutSession - $CheckoutSessionModel model\n * @param {Object} conversion - $CheckoutSessionModel conversion obj\n * @param {Object} cartModel - $CheckoutCartModel model\n */\n var getCardIssuerData = function getCardIssuerData(checkoutSession, conversion, cart) {\n var plan = checkoutSession.plan;\n var isSplitBalance = plan.isSplitBalance();\n var showConvertIssuerSplitBalContent = false;\n var disclaimer = void 0;\n var label = void 0;\n\n if (isSplitBalance) {\n // if there is BALANCE source with the same \"currency_code\" as \"cart total amount\"\n // then we should NOT show Split balance content because Planning will not exclude this Balance from the plan after replan\n showConvertIssuerSplitBalContent = !plan.sources.some(function (source) {\n return source.get('type') === 'BALANCE' && source.get('amount.currency_code') === cart.get('purchase.amounts.total.currency_code');\n });\n }\n\n if (showConvertIssuerSplitBalContent) {\n label = (0, _squid.$renderContent)('currencyOptions.convertIssuerSplitBal');\n disclaimer = (0, _squid.$renderContent)('currencyOptions.issuerFinalAmountSplitBal', {\n amt: cart.get('purchase.amounts.total.amount_formatted_currency')\n });\n } else {\n label = (0, _squid.$renderContent)('currencyOptions.convertIssuer');\n disclaimer = '' + (0, _squid.$renderContent)('currencyOptions.amount') + ' ' + (0, _squid.$renderContent)('currencyOptions.issuerFinalAmount');\n }\n\n return {\n label: label,\n disclaimer: disclaimer\n };\n };\n\n /**\n * Calculate conversion total only when:\n * 1. for PayPal rate\n * 2. there is only one plan source available (for multi source use cases, e.g Card + Balance we don't want to calc total for now)\n *\n * @param {Object} checkoutSession - $CheckoutSessionModel model\n * @param {Object} conversion - $CheckoutSessionModel conversion obj\n * @returns {String} Returns total formatted amount\n */\n var getPayPalConversionTotal = function getPayPalConversionTotal(checkoutSession, conversion) {\n var sources = checkoutSession.get('plan.sources');\n\n if (!conversion.paypal || sources && sources.length > 1) {\n return;\n }\n\n return checkoutSession.get('plan.sources.0.amount.amount_formatted_currency');\n };\n\n /**\n * Get the currency conversion PXP flag\n * @returns {Boolean} - Flag that confirms PXP treatment to show currency conversion overlay\n */\n var getConversionOverlayFlag = function getConversionOverlayFlag() {\n return showConversionOverlay;\n };\n\n /**\n * Get the currency conversion overlay content flag to determinte to render right content\n * @returns {Boolean} - Flag that confirms PXP treatment to show currency conversion overlay\n */\n var isConversionOverlayRateContent = function isConversionOverlayRateContent() {\n return showConversionOverlayRateContent;\n };\n\n return {\n getCardIssuerData: getCardIssuerData,\n getPayPalConversionTotal: getPayPalConversionTotal,\n fetchPXPTreatments: fetchPXPTreatments,\n getConversionOverlayFlag: getConversionOverlayFlag,\n isConversionOverlayRateContent: isConversionOverlayRateContent\n };\n});\n\n_squid.$renderContent;\n\n_squid.$pxp;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"../node_modules/xo-wallet-components/src/currency-conversion\", \"../node_modules/xo-wallet-components/src/currency-conversion/factory.js\"))\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/fi-logos/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fi = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _template = __webpack_require__(\"../node_modules/xo-wallet-components/src/fi-logos/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoFiLogos', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n (0, _squid.$populate)($scope, {\n cardTypes: _fi.$CardTypesModel.instance($scope.token + ':' + _squid.$locale.country, {\n token: $scope.token,\n country: _squid.$locale.country\n })\n });\n }]\n };\n});\n\n_squid.$locale;\n\n_squid.$populate;\n\n_fi.$CardTypesModel;\n\n/***/ }),\n\n/***/ \"../node_modules/xo-wallet-components/src/fi-logos/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"../node_modules/xo-webpack-config/polyfills.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n// It will use the native implementation if it's present and isn't buggy.\nObject.assign = __webpack_require__(\"../node_modules/object-assign/index.js\");\n\n// array\n__webpack_require__(\"../node_modules/core-js/fn/array/find.js\");\n__webpack_require__(\"../node_modules/core-js/fn/array/includes.js\");\n\n// string\n__webpack_require__(\"../node_modules/core-js/fn/string/includes.js\");\n\n\n// object\n__webpack_require__(\"../node_modules/core-js/fn/object/entries.js\");\n__webpack_require__(\"../node_modules/core-js/fn/object/values.js\");\n\n\n\n/***/ }),\n\n/***/ \"./css/app.less\":\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n\n/***/ \"./js/app.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _middleware = __webpack_require__(\"./js/lib/middleware.js\");\n\nvar _route = __webpack_require__(\"./pages/xo-checkout/route.js\");\n\nvar _route2 = _interopRequireDefault(_route);\n\n__webpack_require__(\"./css/app.less\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_logger.$logger.info('app_bootstrap', {\n hash: window.location.hash\n});\n\nvar xoCheckoutRoute = new _route2['default']();\n\nxoCheckoutRoute.bootstrap('checkout.landing', _middleware.$Middleware);\n\nwindow.bootstrap = true;\n\n_logger.$logger;\n\n_middleware.$Middleware;\n\n/***/ }),\n\n/***/ \"./js/bootstrap.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _constants = __webpack_require__(\"./js/lib/constants.js\");\n\n// set public path for chunks on the fly\n// more details - https://webpack.js.org/guides/public-path/#on-the-fly\n// without it - webpack doesn't know how to resolve path for assets stored in webpack -> output (.build/js)\n// in development: staticUrl will be /webapps/hermes/static in case of Hermes\n// in production: staticUrl will be pointing to CDN, e.g https://www.paypalobjects.com/web/res/6e6/9af00bdfc93477f08ba3fe44e9589\n__webpack_require__.p = window.meta.staticUrl + '/'; // eslint-disable-line no-undef\n\n\nwindow.main = true;\n\n// Angular 1.6.9 adds a `!` as a hash prefix to the url by default.\n// This is different behavior than Angular 1.4.7 which didn't add\n// a hash prefix. The code snippet below will prevent the hash prefix\n// from being added so that after the Angular 1.6.9 upgrade the url\n// hash will remain the same.\n// Angular 1.4.7: http://.../xoonboarding?token=EC-9CC38595EA0236714#/checkout/signup\n// Angular 1.6.9 with out setting the `hashPrefix` to an empty string:\n// http://.../xoonboarding?token=EC-9CC38595EA0236714#!/checkout/signup\nangular.module('app').config(['$locationProvider', '$compileProvider', function ($locationProvider, $compileProvider) {\n $locationProvider.hashPrefix('');\n\n // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1767\n // If you want to debug an application with angular related information in\n // production environemnt, simply open up your console, and type `angular.reloadWithDebugInfo()`\n // and waits for your current page to reload\n if (true) {\n $compileProvider.debugInfoEnabled(false);\n }\n $compileProvider.aHrefSanitizationWhitelist(_constants.constants.regex.protocolsWithDeeplink);\n $compileProvider.cssClassDirectivesEnabled(false); // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1892\n $compileProvider.commentDirectivesEnabled(false); // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1863\n}]);\n\nif (!window.prefetch) {\n window.beacon('info', ['angular_bootstrap_start']);\n angular.bootstrap(document.body, ['app']);\n window.beacon('info', ['angular_bootstrap_end']);\n __webpack_require__(\"./js/app.js\");\n}\n\n_constants.constants;\n\n/***/ }),\n\n/***/ \"./js/lib/constants.js\":\n/***/ (function(module, exports) {\n\n\n\nexports.__esModule = true;\nvar constants = exports.constants = {\n regex: {\n safeProtocols: '^\\s*(https?|s?ftp|mailto|tel|file):',\n protocolsWithDeeplink: '^\\s*(https?|s?ftp|mailto|tel|file|com\\.[a-z]+(\\.[a-z]+)*):'\n }\n};\n\n/***/ }),\n\n/***/ \"./js/lib/contingency.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _miniBrowser = __webpack_require__(\"./js/lib/miniBrowser.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$contingencyHandler', function () {\n function showGenericError(code) {\n return function () {\n var encoded = code ? window.btoa(code) : code;\n\n _uiRouter.$state.go('checkout.genericError', {\n code: encoded\n });\n };\n }\n\n function route(path) {\n return function () {\n _uiRouter.$state.go(path, { message: arguments[0] });\n };\n }\n\n function forbidden(err) {\n throw new _squid.$Forbidden(err);\n }\n\n function fallback(product) {\n return function (err) {\n throw new _squid.$FallbackError({\n reason: err,\n product: product\n });\n };\n }\n\n function addMissingTokens(urlQuery) {\n var payload = {\n 'token': _angular.$rootScope.token || _squid.$meta.token\n };\n\n if (_squid.$meta.baToken) {\n payload.ba_token = _squid.$meta.baToken;\n }\n return _squid.$util.queryStringSplice(urlQuery, payload);\n }\n\n function handleStepupAuth(code, authModel, step_up_context) {\n authModel.stepupAuthRequired = true;\n\n var reasons = {\n VERIFY_USER_IDENTITY: 'step_up_auth_needed',\n PAYER_AUTHENTICATION_REQUIRED: 'login_required'\n };\n\n if (authModel.remembered) {\n _logger.$logger.debug('PLANNING_STEP_UP_REMEBERED_USER');\n authModel.logout().then(function () {\n _uiRouter.$state.go('checkout.login', {\n targetPage: 'ONETOUCH_GENERIC_ERROR',\n source: 'FRESH_START'\n });\n });\n } else if (step_up_context && !_angular2['default'].isObject(step_up_context)) {\n _logger.$logger.debug('PLANNING_STEP_UP_LOGIN_USER_TEST_TRAFFIC');\n var authChallengeNodeUrl = _squid.$config.urls.authChallengeNodeUrl;\n\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n var hostname = _squid.$meta.stage ? _squid.$meta.stage : _angular.$location.host();\n\n authChallengeNodeUrl = authChallengeNodeUrl.replace('www.paypal.com', hostname);\n }\n\n authChallengeNodeUrl = _squid.$util.buildURL(authChallengeNodeUrl, {\n stepupContext: step_up_context,\n stsReturnUrl: _squid.$config.ulMeta.stsReturnUrl,\n returnUri: _squid.$config.ulMeta.authChallengeReturnUri + addMissingTokens(_angular.$window.location.search) + '&atoSuccess',\n locale: _squid.$locale.lang,\n flowId: 'xo',\n flowContext: 'funding'\n });\n\n if (authChallengeNodeUrl) {\n _squid.$util.redirect(authChallengeNodeUrl);\n }\n } else {\n _logger.$logger.debug('PLANNING_STEP_UP_LOGIN_USER_CONTROL_TRAFFIC');\n throw new _squid.$FallbackError({\n reason: reasons[code],\n product: 'ux'\n });\n }\n }\n\n return function (contingency) {\n // Leave a footprint here. The subsequent state where log how it goes..\n _logger.$logger.warn('contingency_handler', contingency);\n\n return contingency.handle({\n // Route\n ECONSENT_REQUIRED: route('checkout.econsent'),\n TRAVEL_RULE_ID_REQUIRED: route('checkout.travelRule'),\n INSTANT_FUNDING_SOURCE_UPSELL_NEEDED: route('checkout.pageAddCardMeft.addCardFlow.addCard'),\n ELV_DECLINE: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_CREDIT_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_CONFIRMED_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_AUTHENTICATED_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n NEED_CREDIT_CARD_OR_BANK_ACCOUNT: route('checkout.pageAddFi.bank.add'),\n EXPIRED_CREDIT_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n NEGATIVE_BALANCE_RECOVERY: route('checkout.negativeBalanceRecovery'),\n PHONE_NUMBER_REQUIRED: route('checkout.addPhone'),\n SEPA_MANDATE_ACCEPTANCE_NEEDED: route('checkout.review'),\n TAX_ID_REQUIRED: route('checkout.addTaxId'),\n NEED_SHIPPING_ADDRESS: route('checkout.pageAddShipping.addShipping'),\n\n NEED_DEBIT_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n EXPIRED_DEBIT_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n\n PAYER_AUTHENTICATION_REQUIRED: function PAYER_AUTHENTICATION_REQUIRED() {\n _uiRouter.$state.go('checkout.login', {\n targetPage: 'PAYER_AUTHENTICATION_REQUIRED'\n });\n },\n\n // Generic Error Pages\n RESTRICTED_USER: showGenericError('RESTRICTED_USER'),\n PAYER_ACCOUNT_RESTRICTED: showGenericError('RESTRICTED_USER'),\n PAYEE_BLOCKED_TRANSACTION: showGenericError('PAYMENT_DENIED'),\n PAYMENT_ALREADY_DONE: showGenericError('PAYMENT_ALREADY_DONE'),\n DUPLICATE_INVOICE_ID: showGenericError('DUPLICATE_INVOICE_ID'),\n PAYMENT_DENIED: showGenericError('PAYMENT_DENIED'),\n PAYEE_ACCOUNT_RESTRICTED: showGenericError('PAYEE_ACCOUNT_LOCKED_OR_CLOSED'),\n INVALID_RESOURCE_ID: showGenericError('INVALID_RESOURCE_ID'),\n EXPIRED_SESSION: showGenericError('EXPIRED_SESSION'),\n PAYER_CANNOT_PAY: showGenericError('PAYER_CANNOT_PAY'),\n TRANSACTION_RECEIVING_LIMIT_EXCEEDED: showGenericError('PAYER_CANNOT_PAY'),\n PAYER_COUNTRY_NOT_ALLOWED: showGenericError('PAYER_COUNTRY_NOT_ALLOWED'),\n PAYER_COUNTRY_NOT_ALLOWED_DCF: showGenericError('HERMES_PAYER_COUNTRY_NOT_ALLOWED_DCF'),\n PAYER_COUNTRY_NOT_ENABLED: showGenericError('PAYER_COUNTRY_NOT_ENABLED'),\n PAYER_LOGIN_COUNTRY_NOT_ALLOWED: showGenericError('PAYER_LOGIN_COUNTRY_NOT_ALLOWED'),\n GAMING_FUNDING_SOURCE_VALIDATION_FAILED: showGenericError('GAMING_FUNDING_SOURCE_VALIDATION_FAILED'),\n COMPLIANCE_VIOLATION: showGenericError('COMPLIANCE_VIOLATION'),\n DOMESTIC_TRANSACTION_REQUIRED: showGenericError('DOMESTIC_TRANSACTION_REQUIRED'),\n INTERNAL_SERVICE_ERROR: showGenericError('TRANSACTION_REFUSED'),\n NEGATIVE_BALANCE_TRANSACTION_REFUSED: showGenericError('NEGATIVE_BALANCE_TRANSACTION_REFUSED'),\n ACCOUNT_CANNOT_BE_FETCHED: showGenericError('ACCOUNT_CANNOT_BE_FETCHED'),\n BAD_RESPONSE: showGenericError('DEFAULT'),\n TRANSACTION_REFUSED_LEGACY_FALLBACK: showGenericError('TRANSACTION_REFUSED'),\n RISK_DENIED: showGenericError('TRANSACTION_REFUSED'),\n UNSUPPORTED_COUNTRY: showGenericError('UNSUPPORTED_COUNTRY'),\n AGREEMENT_ALREADY_CREATED: showGenericError('AGREEMENT_ALREADY_CREATED'),\n PAYMENT_NOT_APPROVED_FOR_EXECUTION: showGenericError('DEFAULT'),\n PAYER_ACCOUNT_LOCKED_OR_CLOSED: showGenericError('DEFAULT'),\n WALLET_PREFERENCE_SET_ERROR: showGenericError('DEFAULT'),\n ISSUANCE_PIN_SERVICE_ERROR: showGenericError('DEFAULT'),\n SENDING_LIMIT_EXCEEDED: showGenericError('SENDING_LIMIT_EXCEEDED'),\n PAYEE_ACCOUNT_LOCKED_OR_CLOSED: showGenericError('PAYEE_ACCOUNT_LOCKED_OR_CLOSED'),\n UNSUPPORTED_PAYEE_CURRENCY: showGenericError('UNSUPPORTED_PAYEE_CURRENCY'),\n PAYMENT_CANNOT_BE_INITIATED: showGenericError('DEFAULT'),\n PERMISSION_DENIED: showGenericError('DEFAULT'),\n INVALID_TOKEN: showGenericError('DEFAULT'),\n INVALID_FUNDING_OPTION: showGenericError('DEFAULT'),\n VALIDATION_ERROR: showGenericError('DEFAULT'),\n SHIPPING_ADDRESS_INVALID: showGenericError('DEFAULT'),\n INVALID_ARGUMENT: showGenericError('DEFAULT'),\n CREDIT_PAYMENT_NOT_ALLOWED: showGenericError('DEFAULT'),\n MALFORMED_REQUEST: showGenericError('DEFAULT'),\n TWOFA_INACTIVE: showGenericError('DEFAULT'),\n ERROR: showGenericError('DEFAULT'),\n ISSUER_DECLINE: showGenericError('DEFAULT'),\n UNSUPPORTED_CUP_SECURECARD: showGenericError('DEFAULT'),\n STUDENT_ACCOUNT: showGenericError('STUDENT_ACCOUNT'),\n UAL_ISSUANCE_UPDATE_SCOPE_ERROR: showGenericError('DEFAULT'),\n // Forbidden\n BUYER_NOT_SET: forbidden,\n\n // Other\n TRANSACTION_REFUSED: function TRANSACTION_REFUSED(message, data) {\n var clearedRT = data.clearedRT;\n\n if (clearedRT) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CONTINGENCY',\n to: 'process_fallback',\n routing_reason: 'TRANSACTION_REFUSED'\n });\n }\n\n // always go to generic error page, even if logout fails\n _index.$AuthModel.instance().logout()['finally'](showGenericError('TRANSACTION_REFUSED'));\n },\n\n PAYER_INVALID_FOR_PAYMENT: function PAYER_INVALID_FOR_PAYMENT() {\n // Payer is not same payer checkout session was created for.\n return _index.$AuthModel.instance().logout()['finally'](function () {\n return _uiRouter.$state.go('checkout.login', {}, {\n reload: true\n });\n });\n },\n\n CANNOT_PAY_SELF: function CANNOT_PAY_SELF() {\n _index.$AuthModel.instance().meta.selfPay = true;\n _angular.$rootScope.contingency = {};\n _angular.$rootScope.contingency.message = 'CANNOT_PAY_SELF';\n\n return _index.$AuthModel.instance().logout()['finally'](function () {\n return _uiRouter.$state.go(_uiRouter.$state.current, {}, {\n reload: true\n });\n });\n },\n\n VERIFY_USER_IDENTITY: function VERIFY_USER_IDENTITY(message, data) {\n var clearedRT = data.clearedRT;\n\n if (clearedRT) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CONTINGENCY',\n to: 'process_fallback',\n routing_reason: 'VERIFY_USER_IDENTITY'\n });\n }\n\n return handleStepupAuth('VERIFY_USER_IDENTITY', _index.$AuthModel.instance(), data.step_up_context);\n },\n\n LOGIN_CONTINGENCY: function LOGIN_CONTINGENCY() {\n if (_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return _miniBrowser.$miniBrowser.frameBust(_angular.$rootScope.token);\n }\n\n return fallback('ux');\n },\n\n DEFAULT: function logUnhandledContingency() {\n _logger.$logger.warn('ui_unhandled_contingency_' + this.message);\n throw new _squid.$FallbackError({\n reason: 'unhandled_contingency',\n product: 'ux'\n });\n }\n });\n };\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$Forbidden;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_index.$AuthModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"js/lib\", \"js/lib/contingency.js\"))\n\n/***/ }),\n\n/***/ \"./js/lib/cplIntegration.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(console) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\ntry {\n var token = window.meta.token;\n\n _angular.$q.all([_checkout.$CheckoutAppDataModel.instance(token).retrieve(), _checkout.$CheckoutCartModel.instance(token).retrieve()]).then(function (_ref) {\n var appData = _ref[0],\n cart = _ref[1];\n\n if (appData.is_wps_flow()) {\n window.fptiProductOverride = 'wps';\n } else if (cart.isBilling()) {\n window.fptiProductOverride = 'billing';\n }\n })['catch'](function (e) {\n console.error(e);\n });\n} catch (e) {\n console.error(e);\n}\n\n_angular.$q;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/console-browserify/index.js\")))\n\n/***/ }),\n\n/***/ \"./js/lib/error.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$forbiddenHandler = $forbiddenHandler;\nexports.$exceptionHandler = $exceptionHandler;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fallback = __webpack_require__(\"./js/lib/fallback.js\");\n\nvar _contingency = __webpack_require__(\"./js/lib/contingency.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\n// ui-router rejects $state.go promises if the navigation is cancelled.\nvar uiRouterTransitionErrors = ['transition prevented', 'transition aborted', 'transition superseded'];\n\nfunction canBeSafelyIgnored(err) {\n return err instanceof _squid.$ShortCircuit || uiRouterTransitionErrors.includes(err.message);\n}\n\nfunction constructEventName(toState, fromState) {\n var from = fromState.name.replace(/\\./g, '_') || 'start';\n var to = toState.name.replace(/\\./g, '_') || 'end';\n\n return 'state_change_' + from + '_to_' + to;\n}\n\nfunction constructErrorPayload(_ref) {\n var err = _ref.err,\n message = _ref.message,\n cause = _ref.cause;\n\n var payload = {\n error: err.stack || err.toString(),\n message: message || err.message,\n cause: cause && cause.toString(),\n state: _uiRouter.$state.current.name,\n url: window.location.toString()\n };\n\n angular.extend(payload, err.payload || {});\n\n return payload;\n}\n\nfunction $forbiddenHandler(err) {\n _logger.$logger.warn('forbidden_handler');\n if (!err.transient) {\n _index.$AuthModel.instance().invalidate();\n\n if (_angular.$rootScope.paymentComplete) {\n throw new _squid.$Contingency('PAYMENT_ALREADY_DONE');\n }\n\n _uiRouter.$state.go('checkout.login');\n }\n}\n\nfunction handleThirdPartyErrors(err, cause) {\n var errType = (err && err.constructor && err.constructor.name || 'error').toLowerCase();\n var experience = _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n var errName = 'ui_' + experience.toLowerCase() + '_' + errType;\n var payload = constructErrorPayload({ err: err, cause: cause });\n\n _logger.$logger.error(errName, payload);\n _index.$AuthModel.instance().logout();\n _thirdPartyInfo.thirdPartyExperience.resetThirdPartyExperience();\n\n if (experience === 'VENMO_EXPERIENCE') {\n _uiRouter.$state.go('checkout.login', { venmoError: true });\n }\n\n if (experience === 'BAIDU_EXPERIENCE') {\n _uiRouter.$state.go('checkout.login', { baiduError: true });\n }\n}\n\nfunction isThirdPartyFlow() {\n return _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token);\n}\n\nvar ERROR_HANDLERS = [{\n type: _squid.$FallbackError,\n handler: _fallback.$fallbackErrorHandler\n}, {\n type: _squid.$Contingency,\n handler: _contingency.$contingencyHandler\n}, {\n type: _squid.$Forbidden,\n handler: $forbiddenHandler\n}];\n\nfunction $exceptionHandler(err, cause) {\n if (canBeSafelyIgnored(err)) {\n if (err.message) {\n _logger.$logger.info(err.message);\n }\n return true;\n }\n\n if (_angular.$rootScope.ERROR_STATE) {\n if (_angular.$rootScope.ERROR_PREVENTED) {\n throw err;\n }\n\n return;\n }\n\n if (isThirdPartyFlow()) {\n if (err instanceof _squid.$Forbidden) {\n // forbidden errors should take you to login page\n return $forbiddenHandler(err);\n } else {\n return handleThirdPartyErrors(err, cause);\n }\n }\n\n var handled = _squid.$util.some(ERROR_HANDLERS, function (errorHandler) {\n if (err instanceof errorHandler.type) {\n errorHandler.handler(err);\n\n return true;\n }\n });\n\n if (handled) {\n return;\n } else if (!err.transient) {\n _angular.$rootScope.ERROR_STATE = err;\n }\n\n var errType = (err.constructor.name || 'error').toLowerCase();\n var errName = 'ui_unhandled_' + errType;\n var errMsg = err.message || '';\n\n if (errMsg.indexOf('infdig') > -1) {\n errName = 'infinite_digest';\n } else if (errMsg.indexOf('inprog') > -1) {\n errName = 'digest_inprog';\n } else if (errMsg.indexOf('badparse') > -1) {\n errName = 'sanitize_badparse';\n } else if (errMsg.match(/^[\\w_]+$/)) {\n errName = 'ui_unhandled_' + errMsg;\n }\n\n if (['ui_unhandled_error', 'ui_unhandled_typeerror'].indexOf(errName) > -1) {\n if (err.stack && err.stack.indexOf('framework') > -1 && err.stack.indexOf('main.js') === -1) {\n errName = 'ui_unhandled_framework_error';\n }\n }\n\n if (err.transient) {\n errName += '_transient';\n }\n\n var payload = constructErrorPayload({ err: err, message: errMsg, cause: cause });\n\n _logger.$logger.error(errName, payload);\n _logger.$logger.error('build_' + _squid.$meta.buildId + '_' + errName, payload); // release vs live traffic separation\n\n // emit the error object for subscribers like xo-tracking\n var event = _angular.$rootScope.$emit('unhandled_error', {\n err: err,\n route: (_uiRouter.$state || {}).current,\n message: payload.error,\n code: payload.cause\n });\n\n if (event.defaultPrevented) {\n _angular.$rootScope.ERROR_PREVENTED = true;\n throw err;\n } else if (!err.transient) {\n return (0, _fallback.$fallbackErrorHandler)(new _squid.$FallbackError({\n reason: errName\n }));\n }\n}\n\n_angular.$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, err) {\n // Set prevent default to avoid angular UI router to keep looping back to same state\n event.preventDefault();\n $exceptionHandler(err, constructEventName(toState, fromState));\n});\n\n_angular.$rootScope.$on('$windowError', function (event, details) {\n _logger.$logger.error('window_error', details, {\n unique: true\n });\n});\n\nangular.value(\"$forbiddenHandler\", $forbiddenHandler);\nangular.value(\"$exceptionHandlerLazy\", $exceptionHandler);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_index.$AuthModel;\n\n_squid.$util;\n\n_squid.$FallbackError;\n\n_squid.$Forbidden;\n\n_squid.$ShortCircuit;\n\n_squid.$Contingency;\n\n_squid.$meta;\n\n_fallback.$fallbackErrorHandler;\n\n_contingency.$contingencyHandler;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n/***/ }),\n\n/***/ \"./js/lib/fallback.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _util = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/util.js\");\n\nvar _icFallback = __webpack_require__(\"./js/lib/icFallback.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fallbackErrorHandler', function () {\n return function (err) {\n var reason = err && err.reason;\n var entry_point = err && err.entryPoint;\n var params = err && err.params;\n var model = {};\n var product = err && err.product;\n var isWpsSubscription = void 0;\n\n function getFallbackUrl(urlParams, waType) {\n if (_angular.$rootScope.wps || _angular.$rootScope.invoice) {\n return (0, _squid.$populate)(model, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_squid.$meta.token)\n }).then(function () {\n // defaulting for now to ensure backward compatibility\n var base = _squid.$config.urls.fallbackUrl['buyNow'];\n\n if (model.checkoutAppData.flags.is_cart_upload_flow || waType === 'CartUpload' || waType === 'AddToCart' || model.checkoutAppData.flags.is_shopping_cart_flow || waType === 'ShoppingCart') {\n base = _squid.$config.urls.fallbackUrl['cartUpload'];\n }\n\n if (model.checkoutAppData.flags.is_invoice_flow) {\n urlParams.id = model.checkoutAppData.invoice_id;\n base = _squid.$config.urls.fallbackUrl['invoice'];\n }\n\n if (isWpsSubscription) {\n base = _squid.$config.urls.fallbackUrl['wpsSubscription'];\n }\n\n return _squid.$util.paypalURL(base, urlParams);\n });\n } else {\n return _angular.$q.when().then(function () {\n var base = _squid.$config.urls.fallbackUrl[product];\n\n return _squid.$util.paypalURL(base, urlParams);\n });\n }\n }\n\n function showGenericErrorPage(errorReason) {\n if (_angular.$rootScope.partnerIntegration) {\n _logger.$logger.info('partner_integration_fallback_to_genericErrorPage');\n }\n\n var code = errorReason || reason;\n\n code = code ? window.btoa(code) : code;\n\n _uiRouter.$state.go('checkout.genericError', {\n code: code\n });\n }\n\n function handleFallbackRedirect(url, wpsParams) {\n if (!_squid.$config.fallbackEnabled && !entry_point) {\n return _logger.$log.warn('Fallback inhibited by config', url);\n }\n\n if (_squid.$config.deploy.isLocal() && !entry_point) {\n return _logger.$log.warn('Fallback inhibited in local mode.', url);\n }\n\n _logger.$logger.log(product ? 'info' : 'error', 'fallback', {\n reason: reason,\n product: product,\n entry_point: entry_point,\n error_desc: reason,\n from: _angular.$rootScope.currentState || 'fallback',\n to: product ? 'process_fallback_' + product : 'process_fallback'\n });\n\n _logger.$logger.info('fallback_reason_' + reason, {\n reason: reason\n });\n _logger.$logger.info('build_' + _squid.$meta.buildId + '_fallback_reason_' + reason); // release vs live traffic separation\n\n if (window.xchild) {\n if (window.opener) {\n return (0, _icFallback.$incontextFallback)(window, url);\n }\n\n return _uiRouter.$state.go('checkout.framebust', { action: 'fallback', url: url });\n }\n\n _angular.$rootScope.$emit('loading');\n\n if (product === 'ux') {\n // Otherwise we can make a decision based on whether we're in the minibrowser or not\n return _angular.$rootScope.wps && !_angular.$rootScope.invoice ? _util.$ReturnToMerchant.postTo(url, wpsParams) : _util.$ReturnToMerchant.goTo(url);\n }\n\n // Safe to always return to Aries\n return _squid.$util.redirect(url);\n }\n\n function doFallback() {\n _squid.$util.assert(reason, 'expected fallback reason');\n\n product = product || 'ux';\n\n var urlParams = params || {};\n\n _angular2['default'].extend(urlParams, {\n token: _squid.$meta.token,\n fallback: 1,\n reason: reason,\n landing: entry_point,\n useraction: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token).useraction()\n });\n\n if (_angular.$rootScope.partnerIntegration) {\n urlParams.incontext = '1';\n urlParams.nolegacy = '1';\n } else if (_angular.$rootScope.miniBrowser) {\n urlParams.incontext = '1';\n }\n\n var wpsParams = void 0;\n\n if (_angular.$rootScope.wps) {\n wpsParams = _squid.$util.decodeAndParse(_squid.$meta.xclickParams);\n _logger.$logger.info('wps_fallback', {\n token: _squid.$meta.token,\n reason: reason\n });\n _logger.$logger.info('wps_fallback_reason_' + reason, {\n reason: reason\n });\n _logger.$logger.info('build_' + _squid.$meta.buildId + '_wps_fallback_reason_' + reason); // release vs live traffic separation\n }\n\n var waType = wpsParams && wpsParams.wa_type;\n\n return getFallbackUrl(urlParams, waType).then(function (url) {\n // Fallback whitelist error reason in config to determine if we should fallback or instead redirect to generic error page.\n var fallbackWhitelist = _squid.$config.fallbackWhitelist;\n var whitelist = fallbackWhitelist && fallbackWhitelist.whitelisted || [];\n\n // if error reason not in fallback whitelist, try auto-retry\n if (whitelist && whitelist.indexOf(reason) === -1) {\n var AUTORELOAD_LIMIT = 1; // can be increased later\n // get auto reload count from params - if present\n var autoReloadCount = parseInt(_squid.$util.param('arc'), 10);\n\n // if falsy (NaN or 0)...\n if (!autoReloadCount) {\n // start at zero\n autoReloadCount = 0;\n }\n // if we haven't reloaded _enough_ yet...\n if (autoReloadCount < AUTORELOAD_LIMIT) {\n // bump count\n autoReloadCount++;\n _logger.$logger.info('checkout_fpti', {\n 'from': 'error_auto_reload',\n 'to': 'restart_hermes_app',\n 'int_error_code': reason\n });\n\n // pass params, so url is augmented\n _squid.$util.replace({ arc: autoReloadCount });\n } else {\n // If auto reload didn't fix the error - redirect to error page with retry option\n var RETRY_KEY = 'retry_page_shown';\n var RETRY_PAGE_LIMIT = 3; // Only show the retry page at most 3 times\n var timesSeen = Number(sessionStorage.getItem(RETRY_KEY));\n var destination = 'RETRY';\n var transition_name = 'show_retry_page';\n\n // Reset if there's an invalid value for timesSeen for some reason\n if (!timesSeen || timesSeen < 0) {\n timesSeen = 0;\n }\n\n // Only try to go to retry page if we're within retry attempts\n if (timesSeen < RETRY_PAGE_LIMIT) {\n timesSeen++;\n sessionStorage.setItem(RETRY_KEY, timesSeen);\n } else {\n destination = 'DEFAULT';\n transition_name = 'show_error_page';\n }\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'error_auto_reload',\n 'to': transition_name,\n 'enable_refresh_prompt': reason,\n 'int_error_code': reason\n });\n return showGenericErrorPage(destination);\n }\n } else {\n _logger.$logger.info('fallback_reason_whitelisted', {\n reason: reason,\n product: product\n });\n handleFallbackRedirect(url, wpsParams);\n }\n });\n }\n\n if (product === 'error') {\n _logger.$logger.error(reason, {\n url: window.location.href\n });\n\n var _$config$urls = _squid.$config.urls,\n baseUrl = _$config$urls.baseUrl,\n errorUrl = _$config$urls.errorUrl;\n\n\n return _squid.$util.redirect(baseUrl + errorUrl);\n }\n\n if (_integration.$integration.getConfig('ERROR_AFTER_PAYMENT') && _angular.$rootScope.paymentComplete) {\n // Do not fallback. UX has no context of hermes token and will result in duplicate payment\n _logger.$logger.info('wps_error_after_payment', {\n reason: reason\n });\n\n return showGenericErrorPage('PAYMENT_ALREADY_DONE');\n }\n\n var beamPattern = /^BA-[0-9A-Z]{17}$/;\n var isBeamIntegration = _squid.$meta.baToken && beamPattern.test(_squid.$meta.baToken);\n var cartExchangeFailed = isBeamIntegration && beamPattern.test(_squid.$meta.token);\n\n if (cartExchangeFailed) {\n product = 'ux';\n }\n\n // For Beam Integration - always show generic Error when cart exchange fails.\n // On successful Cart Exchange - disable fallback until MPWEB supports BA token support.\n if (product === 'ux' && isBeamIntegration && cartExchangeFailed) {\n return showGenericErrorPage();\n }\n\n return (0, _squid.$populate)(model, {\n checkoutCart: _index.$CheckoutCartModel.instance(_squid.$meta.token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_squid.$meta.token)\n }).then(function () {\n isWpsSubscription = model.checkoutAppData.is_wps_subscription_flow();\n var merchantCountry = model.checkoutAppData.merchant.merchant_country;\n var isSecondButtonTxn = model.checkoutAppData.is_second_button_txn;\n\n // No fallback for Tokenized_Wallet usecases\n if (model.checkoutCart.isWalletTokenization()) {\n return showGenericErrorPage();\n }\n\n // No fallback for DE second button transactions\n if (merchantCountry === 'DE' && isSecondButtonTxn) {\n return showGenericErrorPage();\n }\n\n // Do not fallback if appdata flag dictates no fallback\n if (model.checkoutAppData.flags.disable_legacy_fallback) {\n _logger.$logger.error('fallback_inhibited_for_xo_order_tokens');\n return showGenericErrorPage();\n }\n\n // V.zero - fallback resize before do actual fallback\n if (product === 'ux' && _angular.$rootScope.partnerIntegration) {\n _logger.$logger.info('partner_integration_fallback_to_UX');\n _angular.$window.resizeTo(screen.availWidth, screen.availHeight);\n }\n\n // default do fallback (not actually fallback) - check doFallback() to understand it better\n return doFallback();\n })['catch'](showGenericErrorPage);\n };\n});\n\n_uiRouter.$state;\n\n_logger.$log;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$util;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_util.$ReturnToMerchant;\n\n_icFallback.$incontextFallback;\n\n_integration.$integration;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"js/lib\", \"js/lib/fallback.js\"))\n\n/***/ }),\n\n/***/ \"./js/lib/icFallback.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$incontextFallback = $incontextFallback;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nfunction $incontextFallback(win, url) {\n _angular.$rootScope.$emit('loading');\n window.onbeforeunload = function () {};\n window.onunload = function () {};\n\n var parent = window.opener || window.parent;\n\n if (!window.xprops || !window.xprops.fallback) {\n parent.location = url;\n win.close();\n return;\n }\n\n try {\n var frame = void 0;\n\n try {\n if (typeof parent.onLegacyFallback === 'function') {\n frame = parent;\n }\n } catch (err) {\n // pass\n }\n\n if (!frame) {\n for (var i = 0, ii = parent.frames.length; i < ii; i++) {\n try {\n if (typeof parent.frames[i].onLegacyFallback === 'function') {\n frame = parent.frames[i];\n break;\n }\n } catch (err) {\n // pass\n }\n }\n }\n\n if (!frame) {\n parent.location = url;\n win.close();\n return;\n }\n\n frame.onLegacyFallback(win);\n\n window.addEventListener('unload', function () {\n var width = 970;\n var height = 900;\n var left = void 0;\n var top = void 0;\n\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n top = Math.round((window.screen.height - height) / 2);\n }\n\n window.resizeTo(width, height);\n window.moveTo(left, top);\n });\n\n win.location = url;\n } catch (err) {\n parent.location = url;\n win.close();\n }\n\n window.xprops.fallback(url);\n}\n\nangular.value(\"$incontextFallback\", $incontextFallback);\n_angular.$rootScope;\n\n/***/ }),\n\n/***/ \"./js/lib/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _error = __webpack_require__(\"./js/lib/error.js\");\n\nObject.keys(_error).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _error[key];\n }\n });\n});\n\nvar _fallback = __webpack_require__(\"./js/lib/fallback.js\");\n\nObject.keys(_fallback).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _fallback[key];\n }\n });\n});\n\nvar _contingency = __webpack_require__(\"./js/lib/contingency.js\");\n\nObject.keys(_contingency).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _contingency[key];\n }\n });\n});\n\nvar _metaBuilder = __webpack_require__(\"./js/lib/metaBuilder.js\");\n\nObject.keys(_metaBuilder).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _metaBuilder[key];\n }\n });\n});\n\nvar _middleware = __webpack_require__(\"./js/lib/middleware.js\");\n\nObject.keys(_middleware).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _middleware[key];\n }\n });\n});\n\nvar _miniBrowser = __webpack_require__(\"./js/lib/miniBrowser.js\");\n\nObject.keys(_miniBrowser).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _miniBrowser[key];\n }\n });\n});\n\nvar _security = __webpack_require__(\"./js/lib/security.js\");\n\nObject.keys(_security).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _security[key];\n }\n });\n});\n\nvar _stateChangeListener = __webpack_require__(\"./js/lib/stateChangeListener.js\");\n\nObject.keys(_stateChangeListener).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _stateChangeListener[key];\n }\n });\n});\n\nvar _cplIntegration = __webpack_require__(\"./js/lib/cplIntegration.js\");\n\nObject.keys(_cplIntegration).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _cplIntegration[key];\n }\n });\n});\n\n/***/ }),\n\n/***/ \"./js/lib/integration.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$CONTEXT = exports.$integration = exports.$FLOWS = undefined;\n\nvar _$DEFAULT, _$CONTEXT$FULLPAGE, _$CONTEXT$LIGHTBOX, _$integration$init;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nObject.defineProperty(exports, '$integration', {\n enumerable: true,\n get: function get() {\n return _squid.$integration;\n }\n});\nObject.defineProperty(exports, '$CONTEXT', {\n enumerable: true,\n get: function get() {\n return _squid.$CONTEXT;\n }\n});\nvar $FLOWS = exports.$FLOWS = {\n\n // Regular end-to-end checkout flow with one entry and one exit point\n CHECKOUT: 'CHECKOUT',\n\n // Partner flow [ TODO: FACTOR THIS OUT ]\n PARTNER: 'PARTNER',\n\n // Incontext lightbox flow\n INCONTEXT_LIGHTBOX: 'INCONTEXT_LIGHTBOX',\n\n // Incontext popup flow\n INCONTEXT_POPUP: 'INCONTEXT_POPUP',\n\n // Native checkout flow\n NATIVE_CHECKOUT: 'NATIVE_CHECKOUT',\n\n // Messenger Integration flow\n MESSENGER_BA_INTEGRATION: 'MESSENGER_BA_INTEGRATION',\n\n // WPS flow\n WPS: 'WPS',\n\n // WPS Subscription flow\n WPS_SUBSCRIPTION: 'WPS_SUBSCRIPTION'\n};\n\n_squid.$integration.init($FLOWS.CHECKOUT, (_$integration$init = {}, _$integration$init[_squid.$DEFAULT] = (_$DEFAULT = {\n\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n ALLOW_ONETOUCH_TOKEN_EXCHANGE: false,\n ALLOW_PAYER_ID_RETURN_PARAM: true,\n DONE_PAGE: false,\n FALLBACK: true,\n REDIRECT_TOP: true,\n REDIRECT_QUERY_PARAM: false,\n POST_MESSAGE_PARENT: false\n}, _$DEFAULT[$FLOWS.PARTNER] = {\n\n FALLBACK: false,\n REDIRECT_TOP: false,\n POST_MESSAGE_PARENT: false\n}, _$DEFAULT[$FLOWS.INCONTEXT_LIGHTBOX] = {\n\n ALLOW_ONETOUCH_TOKEN_EXCHANGE: true,\n POST_MESSAGE_PARENT: true\n}, _$DEFAULT[$FLOWS.INCONTEXT_POPUP] = {\n\n POST_MESSAGE_PARENT: true\n}, _$DEFAULT[$FLOWS.WPS] = {\n ALLOW_PAYER_ID_RETURN_PARAM: false,\n DONE_PAGE: true,\n ERROR_AFTER_PAYMENT: true,\n POPULATE_MERCHANT_PREFERENCES: true,\n RETURN_METHOD_BASED_ON_MERCHANT_PREFS: true,\n RETURN_URL_FROM_MERCHANT_PREFS: true,\n SHOW_PAY_NOW_LABEL_ON_REVIEW: true,\n SHOW_SHIPPING_METHOD: true\n}, _$DEFAULT[$FLOWS.WPS_SUBSCRIPTION] = {\n ALLOW_PAYER_ID_RETURN_PARAM: false,\n DONE_PAGE: false,\n ERROR_AFTER_PAYMENT: true,\n POPULATE_MERCHANT_PREFERENCES: true,\n RETURN_METHOD_BASED_ON_MERCHANT_PREFS: true,\n RETURN_URL_FROM_MERCHANT_PREFS: true,\n SHOW_PAY_NOW_LABEL_ON_REVIEW: true,\n SHOW_SHIPPING_METHOD: false\n}, _$DEFAULT), _$integration$init[_squid.$CONTEXT.FULLPAGE] = (_$CONTEXT$FULLPAGE = {\n\n CAN_FRAMEBUST: false,\n CAN_FALLBACK_TO_POPUP: false,\n CAN_CLOSE_SELF: false\n\n}, _$CONTEXT$FULLPAGE[$FLOWS.NATIVE_CHECKOUT] = {\n REDIRECT_QUERY_PARAM: true\n}, _$CONTEXT$FULLPAGE[$FLOWS.PARTNER] = {\n REDIRECT_QUERY_PARAM: true\n}, _$CONTEXT$FULLPAGE), _$integration$init[_squid.$CONTEXT.LIGHTBOX] = (_$CONTEXT$LIGHTBOX = {\n\n ALLOW_AUTH: false,\n ALLOW_COLLECT_DATA: false,\n\n CAN_FRAMEBUST: true,\n CAN_FALLBACK_TO_POPUP: true,\n CAN_CLOSE_SELF: false,\n\n RETURN_FROM_DATA_COLLECTION_POPUP: false,\n\n REDIRECT_TOP: false\n\n}, _$CONTEXT$LIGHTBOX[$FLOWS.MESSENGER_BA_INTEGRATION] = {\n\n IS_MESSENGER_BA_INTEGRATION: true\n\n}, _$CONTEXT$LIGHTBOX[$FLOWS.PARTNER] = {\n\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n CAN_FALLBACK_TO_POPUP: false,\n POST_MESSAGE_PARENT: false\n}, _$CONTEXT$LIGHTBOX), _$integration$init[_squid.$CONTEXT.POPUP] = {\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n\n CAN_FRAMEBUST: true,\n CAN_FALLBACK_TO_POPUP: true,\n CAN_CLOSE_SELF: false\n}, _$integration$init));\n\nangular.value(\"$FLOWS\", $FLOWS);\n_squid.$integration;\n\n_squid.$DEFAULT;\n\n_squid.$CONTEXT;\n\n/***/ }),\n\n/***/ \"./js/lib/metaBuilder.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$metaBuilder = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _model = __webpack_require__(\"../node_modules/xo-tracking/dist/model.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nfunction buildMeta() {\n return {\n token: _angular.$rootScope.token || _squid.$config.token || _squid.$meta.token || _squid.$util.param('token'),\n calc: _model.$CalDataModel.getCalCorrId(),\n csci: _model.$CalDataModel.getUUID(),\n locale: {\n country: _squid.$locale && _squid.$locale.country,\n language: _squid.$locale && _squid.$locale.lang\n },\n state: 'ui_' + (_angular.$rootScope.currentState || 'checkout_init'),\n app_name: 'hermesnodeweb',\n baToken: _squid.$meta.baToken\n };\n}\n\nfunction buildContext() {\n return {\n locale: {\n country: _squid.$locale && _squid.$locale.country,\n language: _squid.$locale && _squid.$locale.lang\n }\n };\n}\n\n_squid.$Api.registerMetaBuilder(buildMeta);\n\nvar $metaBuilder = exports.$metaBuilder = {\n build: buildMeta,\n buildContext: buildContext\n};\n\nangular.value(\"$metaBuilder\", $metaBuilder);\n_angular.$rootScope;\n\n_model.$CalDataModel;\n\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$Api;\n\n_squid.$locale;\n\n_squid.$config;\n\n/***/ }),\n\n/***/ \"./js/lib/middleware.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _miniBrowser = __webpack_require__(\"./js/lib/miniBrowser.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _constants = __webpack_require__(\"./js/lib/constants.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _fn = __webpack_require__(\"../node_modules/xo-login-components/src/login/fn.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\n__webpack_require__(\"./js/lib/stateChangeListener.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar getDeviceAndNetworkInfo = function getDeviceAndNetworkInfo() {\n var netInfo = navigator && navigator.connection || {};\n var memory = navigator && navigator.deviceMemory;\n return {\n type: netInfo.type, // Network type that browser uses\n effectiveType: netInfo.effectiveType, // 2g, 3g, wifi , etc\n downlink: netInfo.downlink, // Effective bandwidth estimate\n downlinkMax: netInfo.downlinkMax, // Upper bound on the downlink speed of the first network hop\n roundTripTime: netInfo.rtt, // Effective round-trip time estimate\n saveData: netInfo.saveData, // user has requested a reduced data usage mode,\n memory: memory // .5= 512Mib, 1=1024Mib, ...\n };\n};\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$Middleware', function () {\n return [function angularDebug() {\n window.root = _angular.$rootScope;\n window.injector = _angular2['default'].element(document.body).injector();\n\n /**\n * Config experiment to overwrite the $apply method and use $eval instead of $apply if it would throw a digest inprog error.\n * This is mainly to address a Firefox bug with angular digest and timeouts, where timeouts can interrupt normal execution flow under certain circumstances\n * Bug described here: https://github.com/angular/angular.js/issues/10083\n *\n * Can remove as a config option if this is a stable change\n */\n if (_squid.$config.safeApply) {\n _logger.$logger.info('overwriting_angular_apply');\n var proto = Object.getPrototypeOf && Object.getPrototypeOf(_angular.$rootScope);\n\n if (!proto) {\n _logger.$logger.warn('overwriting_angular_apply_failed', {\n reason: 'failed_to_get_prototype'\n });\n } else {\n var originalApply = proto.$apply;\n // If this gets used so many times, something is probably wrong so use original apply instead\n var skipAttempts = 10;\n\n proto.$apply = function (fn) {\n if (skipAttempts && (_angular.$rootScope.$$phase === '$digest' || _angular.$rootScope.$$phase === '$apply')) {\n skipAttempts--;\n\n _logger.$logger.warn('inprog_error_skipped', {\n stack: new Error().stack\n });\n\n this.$eval(fn);\n } else {\n originalApply.call(this, fn);\n }\n };\n }\n }\n }, function waitForToken() {\n if (_squid.$util.isIFrame() && !_squid.$util.param('token') && !_squid.$meta.token) {\n return (0, _angular.$q)(function (resolve, reject) {\n _logger.$logger.info('await_token');\n\n window.addEventListener('message', function (event) {\n var message = JSON.parse(event.data);\n\n if (message.operation !== 'pass_token') {\n return;\n }\n\n var token = message.token;\n\n _logger.$logger.info('passed_token', { token: token });\n _squid.$meta.token = token;\n\n var $preloadApi = new _squid.$Api({ uri: 'preload' });\n\n $preloadApi.retrieve({\n params: { token: token }\n }).then(function (response) {\n $preloadApi.setTransientCache(response.data);\n resolve();\n })['catch'](reject);\n }, false);\n });\n }\n }, function checkToken() {\n var pattern = /^EC-[0-9A-Z]{17}$/;\n var beamPattern = /^BA-[0-9A-Z]{17}$/;\n // wps token are not preceeded with 'EC-'\n var wpsPattern = /^[0-9A-Z]{17}$/;\n var urlToken = (_squid.$util.param('token') || '').trim().slice(0, 20);\n var bodyToken = (_squid.$meta.token || '').trim().slice(0, 20);\n\n if (pattern.test(urlToken)) {\n _angular.$rootScope.token = urlToken;\n } else if (pattern.test(bodyToken)) {\n _angular.$rootScope.token = bodyToken;\n } else if (wpsPattern.test(urlToken)) {\n _logger.$logger.info('isWpsPattern');\n _angular.$rootScope.token = urlToken;\n } else if (wpsPattern.test(bodyToken)) {\n _logger.$logger.info('isWpsPattern');\n _angular.$rootScope.token = bodyToken;\n } else if (beamPattern.test(urlToken)) {\n _angular.$rootScope.token = urlToken;\n _logger.$logger.info('cart_exchange_failed', {\n token: _angular.$rootScope.token\n });\n } else if (beamPattern.test(bodyToken)) {\n _angular.$rootScope.token = bodyToken;\n _logger.$logger.info('cart_exchange_failed', {\n token: _angular.$rootScope.token\n });\n } else {\n return _angular.$q.reject(new _squid.$FallbackError({\n reason: 'no_token',\n product: 'error'\n }));\n }\n }, function resolveLocale() {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n appData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n cart: _index3.$CheckoutCartModel.instance(_angular.$rootScope.token)\n })['finally'](function () {\n return _squid.$locale.retrieve({\n params: {\n ipCountry: _squid.$meta.ipcountry,\n localeTestUrlParam: _squid.$util.param('locale.test'),\n checkoutShippingCountry: models.cart.get('purchase.shipping_address.country_code'),\n merchantCountry: models.appData.get('merchant.merchant_country'),\n checkoutSessionLocale: models.appData.get('merchant.merchant_locale'),\n countryParam: _squid.$util.param('country.x'),\n localeParam: _squid.$util.param('locale.x')\n }\n });\n });\n }, function fraudentInit() {\n return _fn.$fn.init();\n }, function setupIntegration() {\n return _miniBrowser.$miniBrowser.init(_angular.$rootScope.token);\n }, function frameBust() {\n\n if (!_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return;\n }\n\n if (_integration.$integration.getConfig('ALLOW_COLLECT_DATA')) {\n return;\n }\n\n return _miniBrowser.$miniBrowser.frameBust(_angular.$rootScope.token);\n }, function tokenExchange() {\n if (!_integration.$integration.getConfig('ALLOW_ONETOUCH_TOKEN_EXCHANGE')) {\n return;\n }\n\n if (_angular.$rootScope.isPartnerIntegration || !_squid.$util.isIFrame()) {\n return;\n }\n\n var auth = _index2.$AuthModel.instance();\n\n return auth.retrieve().then(function () {\n if (auth.logged_in || auth.remembered || !auth.refresh_token) {\n return;\n }\n\n return auth.action('onetouch');\n });\n }, function xcomponent() {\n if (window.xchild) {\n window.paypalCheckout = window.xchild;\n }\n\n if (window.xprops && window.xprops.init) {\n return _angular.$q.all([_index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve(), _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token).retrieve()]).then(function (_ref) {\n var checkoutAppData = _ref[0],\n checkoutPayee = _ref[1];\n\n return window.xprops.init({\n paymentToken: _angular.$rootScope.token,\n merchantID: checkoutPayee.merchant.id,\n cancelUrl: checkoutAppData.urls.cancel_url\n });\n });\n }\n }, function xcomponentAuth() {\n if (window.xprops && window.xprops.onAuth) {\n var auth = _index2.$AuthModel.instance();\n\n return auth.retrieve().then(function () {\n if (auth.access_token && (auth.logged_in || auth.remembered)) {\n return window.xprops.onAuth({\n accessToken: auth.access_token\n });\n }\n });\n }\n }, function logPage() {\n _logger.$logger.info('href', {\n href: window.location.href,\n windowName: _angular.$window.name && _angular.$window.name.slice(0, 100)\n });\n\n var match = document.cookie.toString().match(/ectoken=([^;]+)/);\n\n if (match && match[1] === _angular.$rootScope.token) {\n _logger.$logger.info('returning_user_same_token');\n } else if (match && match[1] !== _angular.$rootScope.token) {\n _logger.$logger.info('returning_user_diff_token');\n } else {\n _logger.$logger.info('non_returning_user');\n }\n\n document.cookie = 'ectoken=' + _angular.$rootScope.token + '; expires=Fri, 31 Dec 9999 23:59:59 GMT;';\n\n if (window.performance && window.performance.navigation && _angular2['default'].isDefined(window.performance.navigation.type)) {\n var navigationType = {\n 0: 'regular',\n 1: 'reload',\n 2: 'back_forward'\n }[window.performance.navigation.type];\n\n if (navigationType) {\n _logger.$logger.info('navigation_' + navigationType);\n }\n }\n }, function handleTagManager() {\n // ****** Tag Manager Code Start Here ***********\n window.dataLayer = {\n // Two letter country code of the current page's content\n contentCountry: _squid.$locale.country.toLowerCase(),\n // Two letter locale\n contentLanguage: _squid.$locale.lang.toLowerCase()\n };\n\n var tagManagerUrl = _squid.$config.urls.tagProdUrl;\n\n // Based on the environment, Tag Manager end point can be changed.\n // For now the local and stage end points are same.\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n tagManagerUrl = _squid.$config.urls.tagStageUrl;\n }\n\n // Load bootstrap.js asynchronously\n (function (i, s, o, g, r, a, m) {\n i['tagManagerObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', tagManagerUrl, 'tagManager');\n }, function logoutGuest() {\n var appData = _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n\n return _index2.$AuthModel.instance().retrieve().then(function (auth) {\n // For DE 2nd button transactions, guest accounts are allowed on return flow\n if (appData.get('merchant.merchant_country') === 'DE' && (appData.get('is_second_button_txn') || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit')) {\n if (_credit.$CreditDataModel.instance(_angular.$rootScope.token).getCapeKey()) {\n return;\n } else {\n return auth.action('logout');\n }\n }\n\n // if venmo transaction, we'll log the buyer back in by sending them back to the venmo app\n if (_thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token)) {\n _thirdPartyInfo.thirdPartyExperience.resetThirdPartyExperience(); // removing token from experience flag\n _logger.$logger.info('venmo_login_retry');\n }\n\n if (auth.guest) {\n _logger.$logger.info('guest_logout');\n return auth.logoutAndRedirect('guest_logout');\n }\n });\n }, function checkProcessorDecline() {\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n if (appData.flags.processor_declined) {\n _logger.$logger.info('processor_decline_transaction');\n var authModel = _index2.$AuthModel.instance();\n\n if (authModel.auth_state === 'IDENTIFIED' && !_squid.$util.param('redirectToHermes')) {\n // guest\n return (0, _squid.$dispatch)('xoon', {\n token: _angular.$rootScope.token,\n hermesXoonRedirect: true\n }, {\n fromState: 'checkout_init',\n toState: 'guest',\n 'locale.x': _squid.$locale.lang + '_' + _squid.$locale.country,\n 'country.x': _squid.$locale.country\n });\n }\n\n return;\n }\n });\n }, function logStart() {\n var networkAndDeviceData = getDeviceAndNetworkInfo();\n\n return _squid.$promise.hash({\n isMiniBrowser: _miniBrowser.$miniBrowser.isMiniBrowser(),\n isDirectIntegration: _miniBrowser.$miniBrowser.getDirectIntegration(_angular.$rootScope.token),\n isIframe: _miniBrowser.$miniBrowser.isFramed()\n }).then(function (flags) {\n var app_int_type = _index.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('app_start_design', {\n 'from': 'client_middleware',\n 'to': 'process_app_start_design',\n is_directintegration: flags.isDirectIntegration ? 1 : 0,\n is_incontext: flags.isMiniBrowser || flags.isIframe ? 1 : 0,\n app_int_type: app_int_type,\n 'screen_width': _angular.$window.innerWidth,\n 'screen_height': _angular.$window.innerHeight,\n 'device_memory': networkAndDeviceData.memory,\n 'network_type': networkAndDeviceData.type,\n 'network_effectiveType': networkAndDeviceData.effectiveType,\n 'network_downlink': networkAndDeviceData.downlink,\n 'network_downlinkMax': networkAndDeviceData.downlinkMax,\n 'network_roundTripTime': networkAndDeviceData.roundTripTime,\n 'network_saveData': networkAndDeviceData.saveData\n });\n });\n }, function logPerformance() {\n if (window.enablePerformance) {\n var keys = ['connectEnd', 'connectStart', 'domComplete', 'domContentLoadedEventEnd', 'domContentLoadedEventStart', 'domInteractive', 'domLoading', 'domainLookupEnd', 'domainLookupStart', 'fetchStart', 'loadEventEnd', 'loadEventStart', 'navigationStart', 'redirectEnd', 'redirectStart', 'requestStart', 'responseEnd', 'responseStart', 'secureConnectionStart', 'unloadEventEnd', 'unloadEventStart'];\n var timing = {};\n\n _angular2['default'].forEach(keys, function (key) {\n timing[key] = parseInt(window.performance.timing[key], 10) || 0;\n });\n\n var offset = timing.connectEnd - timing.navigationStart;\n\n if (timing.connectEnd && window.clientStartTime) {\n _angular2['default'].forEach(timing, function (time, name) {\n if (time && _angular2['default'].isNumber(time)) {\n _logger.$logger.info('timing_' + name, {\n client_elapsed: time - timing.connectEnd - (window.clientStartTime - offset),\n req_elapsed: time - timing.connectEnd\n });\n }\n });\n }\n\n _logger.$logger.info('timing', timing);\n\n if (window.performance.memory) {\n _logger.$logger.info('memory', window.performance.memory);\n }\n\n if (window.performance.navigation) {\n _logger.$logger.info('navigation', window.performance.navigation);\n }\n\n if (window.performance.getEntries) {\n var logged = [];\n var logResources = function logResources() {\n _angular2['default'].forEach(window.performance.getEntries(), function (resource) {\n if (!resource || !resource.name) {\n return;\n }\n\n if (logged.indexOf(resource.name) === -1) {\n logged.push(resource.name);\n } else {\n return;\n }\n\n if (resource.initiatorType) {\n _logger.$logger.info(resource.initiatorType, resource);\n }\n });\n };\n\n logResources();\n setInterval(logResources, 500);\n }\n\n if (timing.connectEnd && timing.navigationStart && window.clientStartTime) {\n _logger.$logger.info('js_init', {\n client_elapsed: 0,\n req_elapsed: window.clientStartTime - offset\n });\n }\n } else {\n _logger.$logger.info('no_performance_data');\n }\n }, function logAuthState() {\n return _index2.$AuthModel.instance().retrieve().then(function (auth) {\n if (auth.logged_in) {\n _logger.$logger.info('user_logged_in');\n } else if (auth.remembered) {\n _logger.$logger.info('user_remembered');\n } else {\n _logger.$logger.info('user_not_logged_in');\n }\n });\n },\n\n // check for access token in the hash.\n function checkAccessToken() {\n if (window.xprops && window.xprops.accessToken) {\n return window.xprops.accessToken().then(function (accessToken) {\n _squid.$Api.addHeader('x-paypal-internal-euat', accessToken);\n return _index2.$AuthModel.instance().reload();\n });\n }\n\n var euat = _squid.$util.param('euat');\n\n if (euat) {\n var accessToken = euat === '1' ? window.location.hash.substr(2) : euat;\n\n if (accessToken) {\n _logger.$logger.info(euat === '1' ? 'access_token_from_hash' : 'access_token_from_param', {\n access_token: accessToken\n });\n\n /* if (euat === '1') {\n window.location.hash = '';\n } */\n\n var authModel = _index2.$AuthModel.instance();\n\n authModel.access_token = accessToken;\n\n if (window.xprops && window.xprops.onAuth) {\n window.xprops.onAuth({ accessToken: accessToken });\n }\n }\n }\n },\n\n // check for FraudNet for Mobile View\n function enableFraudNetForMobileWebView() {\n if (_index.$DeviceInfo.isApp()) {\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n return (0, _squid.$pxp)(_squid.$config.ulMeta.hermesnodePxpConfig, {\n 'ctx.COUNTRY': appData.merchant.merchant_country\n }, 'xo_hermesnode_fraudnet_webview_treatment', false, true).then(function (result) {\n if (result && result.treatment_name) {\n _angular.$window.enableFraudNetForMobileWebView = true;\n }\n });\n });\n }\n },\n\n // Logs if service workers are enabled\n function isServiceWorkerSupported() {\n if ('serviceWorker' in navigator) {\n _logger.$logger.info('service_worker_supported');\n } else {\n _logger.$logger.info('service_worker_not_supported');\n }\n }, function forceCookiesDisabled() {\n if (_index.$DeviceInfo.isApp()) {\n return _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token).retrieve().then(function (payee) {\n if (~_squid.$config.forceCookiesDisabled.indexOf(payee.merchant.id)) {\n _logger.$logger.info('force_cookies_disabled');\n _squid.$Api.forceCookiesDisabled = true;\n }\n });\n }\n }, function checkFramed() {\n if (_squid.$util.isIFrame()) {\n // Set this as \"framed\" mode (X icon, escape hatch, etc.)\n document.documentElement.className += ' framed';\n }\n }, function loginViaEuat() {\n // log in user via euat prior to rendering login screen.\n if (_squid.$util.param('euat') === '1') {\n var auth = _index2.$AuthModel.instance();\n\n if (auth.accessToken() && !auth.loggedIn()) {\n return auth.reload({\n headers: {\n 'x-paypal-internal-euat': auth.accessToken()\n },\n resultModel: auth,\n success: function success() {\n return delete auth.access_token;\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n }\n });\n }\n }\n }, function checkForSDK() {\n var isSDKintegration = window.name && window.name.indexOf('xcomponent__ppcheckout') === 0 || window.name.indexOf('zoid__ppcheckout') === 0 || _squid.$util.param('xcomponent') || _squid.$util.param('zoid');\n\n var sdkLoaded = window.paypal && window.xprops && window.paypal.Checkout && window.paypal.Checkout.isChild();\n\n if (isSDKintegration && !sdkLoaded) {\n throw new Error('Checkout loaded in an SDK integration, but no xprops found. Maybe the sdk script failed to load in the child window.');\n }\n }, function urlFormatCheck() {\n // To verify the kind of urls being used for cancel and return.\n // Deeplink and universal urls have potential to affect integration\n // we need to log the use cases to keep track.\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n var urls = appData.urls || {};\n // 'regular' being false implies we have a non-standard format.\n var regular = new RegExp(_constants.constants.regex.safeProtocols, 'g');\n // 'modifed' is to check whether our new regex can catch all use cases.\n var modifed = new RegExp(_constants.constants.regex.protocolsWithDeeplink, 'g');\n _logger.$logger.info('url_pattern_test', {\n cancel_url: {\n regular: regular.test(urls.cancel_url),\n modifed: modifed.test(urls.cancel_url)\n },\n return_url: {\n regular: regular.test(urls.return_url),\n modifed: modifed.test(urls.return_url)\n }\n });\n });\n }];\n});\n\n_logger.$logger;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_constants.constants;\n\n_squid.$Api;\n\n_squid.$Class;\n\n_squid.$config;\n\n_squid.$dispatch;\n\n_squid.$FallbackError;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$DeviceInfo;\n\n_fn.$fn;\n\n_index2.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutCartModel;\n\n_index3.$CheckoutPayeeModel;\n\n_credit.$CreditDataModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"js/lib\", \"js/lib/middleware.js\"))\n\n/***/ }),\n\n/***/ \"./js/lib/miniBrowser.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$miniBrowser = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _util = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/util.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _error = __webpack_require__(\"./js/lib/error.js\");\n\nvar _$stateGo = _uiRouter.$state.go;\n\nvar logStateNotFoundAndThrow = function logStateNotFoundAndThrow(_ref) {\n var name = _ref.name,\n _ref$logName = _ref.logName,\n logName = _ref$logName === undefined ? '' : _ref$logName;\n\n _logger.$logger.error('state_not_found' + logName, {\n name: name,\n hash: window.location.hash\n });\n throw new Error('state_not_found' + logName + ': ' + name);\n};\n\n_uiRouter.$state.go = function (name, params) {\n var _this = this,\n _arguments = arguments;\n\n var stateObj = _uiRouter.$state.get(name);\n\n var stateGo = function stateGo(state) {\n if (!window.xchild) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n if (!state.loginRequired) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n // If we're allowed to collect data in this integration, we don't need this functionality\n if (_integration.$integration.getConfig('ALLOW_COLLECT_DATA')) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n var forceIframe = window.paypal && window.paypal.forceIframe && window.paypal.forceIframe();\n\n if (forceIframe) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n // First check our integration supports falling back to a popup\n if (!_integration.$integration.getConfig('CAN_FALLBACK_TO_POPUP')) {\n throw _integration.$integration.error('Can not fallback to popup for data collection');\n }\n\n window.xchild.hide();\n\n var url = window.location.href.split('#')[0] + '#/' + state.name.replace(/\\./g, '/');\n var xprops = _extends({}, window.xprops);\n\n xprops.url = url;\n\n window.ppxo.Checkout.renderPopupTo(window.xchild.getParentRenderWindow(), xprops)['catch'](function (err) {\n\n if (window.ppxo.PopupOpenError && err instanceof window.ppxo.PopupOpenError) {\n window.xchild.show();\n\n _logger.$logger.warn('framebust_from_' + name.replace(/[^a-zA-Z0-9]+/g, '_'));\n\n return _$stateGo.call(_this, 'checkout.framebust', { action: 'open', url: url });\n }\n\n (0, _error.$exceptionHandler)(err);\n });\n };\n\n if (stateObj) {\n return stateGo(stateObj);\n } else if (_squid.$meta.codeSplitting) {\n // in case of code split - attempt to load route and then change the state\n return (0, _squid.lazyLoadRoute)(name, params, false)['catch'](function () {\n logStateNotFoundAndThrow({ name: name, logName: '_lazy_loading' });\n }).then(function () {\n stateObj = _uiRouter.$state.get(name);\n return stateGo(stateObj);\n });\n } else {\n logStateNotFoundAndThrow({ name: name });\n }\n};\n\nvar $miniBrowser = exports.$miniBrowser = {\n flags: {},\n config: {},\n isMiniBrowser: function isMiniBrowser() {\n return window.name && window.name.indexOf('PPFrame') === 0 && _squid.$util.isPopup() || _squid.$util.param('incontext') === '1' || window.xchild && _squid.$util.isPopup();\n },\n isFramed: function isFramed() {\n return _squid.$util.isIFrame();\n },\n getPartnerIntegration: function getPartnerIntegration(token) {\n return _squid.$promise.call(function () {\n if (window.name === 'PPFrameRedirect' || _squid.$util.param('nolegacy') === '1') {\n return true;\n }\n return _checkout.$CheckoutCartModel.instance(token).retrieve().then(function (cart) {\n return Boolean(cart.partnerIntegration);\n });\n });\n },\n getNativeCheckoutIntegration: function getNativeCheckoutIntegration(token) {\n return _squid.$promise.call(function () {\n if (_squid.$util.param('native_xo') === '1') {\n return true;\n }\n return false;\n });\n },\n getMessengerBAIntegration: function getMessengerBAIntegration(token) {\n return _squid.$promise.call(function () {\n if (window.xprops && window.xprops.experience && window.xprops.experience.messenger) {\n _logger.$logger.info('getMessengerBAIntegration == true');\n return true;\n }\n return false;\n });\n },\n getDirectIntegration: function getDirectIntegration(token) {\n return _squid.$promise.call(function () {\n if (_squid.$util.param('incontext')) {\n return true;\n }\n\n if (this.isMiniBrowser() || this.isFramed()) {\n return true;\n }\n\n if (window.location.pathname.indexOf('/checkoutnow') > -1 || window.location.pathname.indexOf('/webapps/hermes') > -1) {\n return true;\n }\n\n return this.getPartnerIntegration(token);\n }.bind(this));\n },\n getWPSIntegration: function getWPSIntegration(token) {\n return _checkout.$CheckoutAppDataModel.instance(token).retrieve().then(function (appData) {\n var isWPS = appData.is_wps_flow();\n\n // TODO: remove these, we should not use $rootScope\n _angular.$rootScope.invoice = appData.flags.is_invoice_flow;\n _angular.$rootScope.wps = isWPS;\n\n if (isWPS) {\n _logger.$logger.info('hermes_wps_flow', {\n token: _angular.$rootScope.token\n });\n } else {\n _logger.$logger.info('hermes_xo_order_flow', {\n token: _angular.$rootScope.token\n });\n }\n return isWPS;\n });\n },\n\n getWpsSubscriptionIntegration: function getWpsSubscriptionIntegration(token) {\n return _checkout.$CheckoutAppDataModel.instance(token).retrieve().then(function (appData) {\n return appData.is_wps_subscription_flow();\n });\n },\n\n getFlags: function getFlags(token) {\n _logger.$logger.info('miniBrowser_getFlags');\n return _squid.$promise.hash({\n isMiniBrowser: this.isMiniBrowser(),\n isFramed: this.isFramed(),\n isPartnerIntegration: this.getPartnerIntegration(token),\n isDirectIntegration: this.getDirectIntegration(token),\n isNativeCheckout: this.getNativeCheckoutIntegration(token),\n isMessengerBAIntegration: this.getMessengerBAIntegration(token),\n isWPSIntegration: this.getWPSIntegration(token),\n isWpsSubscription: this.getWpsSubscriptionIntegration(token)\n }).then(function (flags) {\n\n // TODO: Remove these, we should not use $rootScope\n _angular.$rootScope.miniBrowser = flags.isMiniBrowser;\n _angular.$rootScope.partnerIntegration = flags.isPartnerIntegration;\n\n if (flags.isPartnerIntegration && !window.xchild) {\n _integration.$integration.setFlow(_integration.$FLOWS.PARTNER);\n } else if (flags.isFramed) {\n _integration.$integration.setFlow(_integration.$FLOWS.INCONTEXT_LIGHTBOX);\n if (flags.isMessengerBAIntegration) {\n _integration.$integration.setFlow(_integration.$FLOWS.MESSENGER_BA_INTEGRATION);\n _logger.$logger.info('$integration.setFlow($FLOWS.MESSENGER_BA_INTEGRATION)');\n }\n } else if (flags.isMiniBrowser) {\n _integration.$integration.setFlow(_integration.$FLOWS.INCONTEXT_POPUP);\n } else if (flags.isNativeCheckout) {\n _integration.$integration.setFlow(_integration.$FLOWS.NATIVE_CHECKOUT);\n } else if (flags.isWpsSubscription) {\n _integration.$integration.setFlow(_integration.$FLOWS.WPS_SUBSCRIPTION);\n } else if (flags.isWPSIntegration) {\n _integration.$integration.setFlow(_integration.$FLOWS.WPS);\n } else {\n _integration.$integration.setFlow(_integration.$FLOWS.CHECKOUT);\n }\n\n return flags;\n });\n },\n init: function init(token) {\n var _this2 = this;\n\n _logger.$logger.info('miniBrowser_init');\n return _squid.$promise.sequential([function () {\n return _this2.enableAutoResize();\n }, function () {\n return _this2.getFlags(token);\n }, function () {\n return _this2.logIntegration(token);\n }, function () {\n return _this2.sendPostMessage(token);\n }, function () {\n return _this2.handleWindowOpenerClose();\n }]);\n },\n enableAutoResize: function enableAutoResize() {\n _angular.$rootScope.$on('allLoaded', function () {\n if (window.xchild && window.xchild.enableAutoResize) {\n window.xchild.enableAutoResize();\n }\n });\n },\n logIntegration: function logIntegration(token) {\n _logger.$logger.info('miniBrowser_logIntegration');\n return this.getFlags(token).then(function (flags) {\n var match = window.name.match(/PPFrame(\\w+)/);\n var guid = match && match[1];\n\n if (guid) {\n _logger.$logger.info('integration_guid', {\n guid: guid\n });\n }\n\n if (window.xchild || guid) {\n var beacon = new Image();\n\n beacon.src = '/webapps/hermes/api/logger?event=ppxo_uid_token&uid=' + (window.xprops ? window.xprops.uid : guid) + '&token=' + token;\n }\n\n _logger.$logger.info(flags.isMiniBrowser ? 'minibrowser_flow' : 'non_minibrowser_flow');\n _logger.$logger.info(flags.isFramed ? 'framed_flow' : 'non_framed_flow');\n _logger.$logger.info(flags.isDirectIntegration ? 'direct_integration_flow' : 'non_direct_integration_flow');\n _logger.$logger.info(flags.isPartnerIntegration ? 'partner_integration_flow' : 'non_partner_integration_flow');\n });\n },\n\n handleWindowOpenerClose: function handleWindowOpenerClose() {\n _logger.$logger.info('miniBrowser_handleWindowOpenerClose');\n if (_integration.$integration.isContext(_integration.$CONTEXT.POPUP)) {\n var interval = setInterval(function () {\n try {\n if (!window.opener || window.opener.closed) {\n clearInterval(interval);\n _logger.$logger.info('window_opener_closed');\n // TODO: close this window if opener closed?\n }\n } catch (err) {\n // pass\n }\n }, 50);\n }\n },\n\n sendPostMessage: function sendPostMessage(token) {\n if (window.xchild) {\n return;\n }\n\n return _squid.$promise.hash({\n isPartnerIntegration: this.getPartnerIntegration(token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(token).retrieve()\n }).then(function (data) {\n if (!_integration.$integration.getConfig('POST_MESSAGE_PARENT')) {\n return;\n }\n\n var msg = void 0;\n\n try {\n msg = {\n operation: 'init',\n cancelUrl: data.checkoutAppData.urls.cancel_url,\n landingUrl: window.location.href,\n secureWindowmsg: _squid.$locale.content.scripts.secureWindowmsg\n };\n } catch (err) {\n return _logger.$logger.error('minibrowser_msg_construction_failed', {\n error: err\n });\n }\n\n if (!_util.$ReturnToMerchant.postToMerchant(msg)) {\n _logger.$logger.error('minibrowser_post_failed');\n }\n });\n },\n frameBust: function frameBust(token) {\n return _squid.$promise.hash({\n isFramed: this.isFramed()\n }).then(function (flags) {\n if (!flags.isFramed) {\n return;\n }\n\n var forceIframe = window.paypal && window.paypal.forceIframe && window.paypal.forceIframe();\n\n if (forceIframe) {\n return;\n }\n\n if (window.xchild) {\n _logger.$logger.info('frame_bust_xchild');\n _uiRouter.$state.go('checkout.framebust', { action: 'open', url: window.location.href.split('#')[0] });\n } else {\n _logger.$logger.info('frame_bust');\n _squid.$util.redirect(window.location.href, { frameBust: true });\n }\n });\n }\n};\n\nangular.value(\"$miniBrowser\", $miniBrowser);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$promise;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.lazyLoadRoute;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_util.$ReturnToMerchant;\n\n_integration.$integration;\n\n_integration.$FLOWS;\n\n_integration.$CONTEXT;\n\n_error.$exceptionHandler;\n\n/***/ }),\n\n/***/ \"./js/lib/security.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n var errorCount = 0;\n\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\n var auth = _index.$AuthModel.instance();\n\n if (toState.auth !== false && !auth.logged_in) {\n errorCount += 1;\n if (errorCount === 10) {\n _logger.$logger.error('max_state_requires_auth');\n }\n if (errorCount >= 10) {\n return;\n }\n _logger.$logger.warn('state_requires_auth', {\n stateName: toState.name\n });\n event.preventDefault();\n throw new _squid.$Forbidden('state_transition_forbidden', { fromState: fromState, toState: toState });\n }\n });\n\n (0, _angular.$interval)(function () {\n var auth = _index.$AuthModel.instance();\n\n if (auth.logged_in) {\n // disallow_login_switch is used for Google Pay - acount linking to hide \"not you\" button (see xo-hercules/auth/outputMapper) and prevent user to be logged out\n // instead we should show error page\n if (auth.disallow_login_switch) {\n _uiRouter.$state.go('checkout.genericError', {\n code: 'DEFAULT_TOKENIZED_WALLET_ERROR'\n });\n return;\n }\n\n auth.reload({ silent: true }).then(function () {\n if (_uiRouter.$state.current.auth !== false && !auth.logged_in) {\n errorCount += 1;\n if (errorCount === 10) {\n _logger.$logger.error('max_state_requires_auth');\n }\n if (errorCount >= 10) {\n return;\n }\n _logger.$logger.info('idle_timeout');\n _logger.$logger.warn('state_requires_auth', {\n stateName: _uiRouter.$state.current.name\n });\n errorCount += 1;\n throw new _squid.$Forbidden();\n }\n });\n }\n }, 30 * 60 * 1000);\n\n _squid.$util.idleTimeout(10 * 60 * 60 * 1000);\n});\n\n_uiRouter.$state;\n\n_squid.$Forbidden;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$AuthModel;\n\n/***/ }),\n\n/***/ \"./js/lib/stateChangeListener.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n // Decorate the current state with the transition params\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\n _uiRouter.$state.toState = toState;\n _uiRouter.$state.toParams = toParams;\n _uiRouter.$state.fromState = fromState;\n _uiRouter.$state.fromParams = fromParams;\n });\n});\n\n_uiRouter.$state;\n\n/***/ }),\n\n/***/ \"./pages/services/cardart-instrument/index.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _wallet = __webpack_require__(\"../node_modules/xo-models/src/wallet/index.js\");\n\n/**\n * $CardartInstrument is a resuable Angular factory service.\n * It intends to abstract away common functionalities that are\n * being used in multiple pages or components.\n *\n * Currently, $CardardInstrument is being used at:\n * - xo-review\n * - xo-select-fi\n * - xo-sidebar-manage-wallet\n * - xo-wallet\n */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$CardArtInstrument', function () {\n var CARD = 'CARD';\n var BALANCE = 'BALANCE';\n var wallet = _wallet.$WalletModel.instance(_squid.$meta.token);\n\n var isCardArtEnable = function isCardArtEnable(fiMeta) {\n return fiMeta && fiMeta.cardArtEnabled();\n };\n\n /**\n * @param {Ojbect} instrument A future payment instrument\n * @returns {Object}\n */\n var normalizeFutureInstrument = function normalizeFutureInstrument(instrument) {\n return {\n id: instrument.instrument_id,\n type: instrument.type,\n cardArtUrl: wallet.getCardArt(instrument)\n };\n };\n\n /**\n * @param {Object} options\n * @param {Object} otpions.primaryFs A primaryFs funding options\n * @returns {Object}\n */\n var normalizeFundingOptions = function normalizeFundingOptions(_ref) {\n var primaryFs = _ref.primaryFs;\n\n if (!primaryFs) {\n return {};\n }\n\n return {\n id: primaryFs.id,\n type: primaryFs.type,\n cardArtUrl: wallet.getCardArt(primaryFs)\n };\n };\n\n /**\n * @typedef {Object} FI\n * @property {String} fi_id\n * @property {String} fi_type\n * @property {String} is_cardart_shown\n * @property {String} eligible\n *\n * @typedef {Object} CardartInstrumentation\n * @property {Array} fi\n *\n * @param {Object} options\n * @param {Array} options.plans An array of fundingOptions plans or future payment instruments\n * @returns {Object}\n */\n var normalizePayload = function normalizePayload(_ref2) {\n var _ref2$plans = _ref2.plans,\n plans = _ref2$plans === undefined ? [] : _ref2$plans;\n return {\n fi: plans.filter(function (plan, index, arr) {\n var id = arr.map(function (item) {\n return item.id;\n });\n\n return index === id.indexOf(plan.id) && plan.type !== BALANCE;\n }).map(function (_ref3) {\n var id = _ref3.id,\n type = _ref3.type,\n cardArtUrl = _ref3.cardArtUrl;\n return {\n fi_id: id,\n fi_type: 'fi_' + (type && type.toLowerCase()),\n is_cardart_shown: type === CARD && cardArtUrl ? '1' : '0',\n eligible: type === CARD && cardArtUrl ? 'cardart' : null\n };\n })\n };\n };\n\n /**\n * @param {Object} options\n * @param {Object} options.checkoutSession $CheckoutSessionModel\n * @returns {Array}\n */\n var getSelectedInstrument = function getSelectedInstrument(_ref4) {\n var checkoutSession = _ref4.checkoutSession;\n\n return checkoutSession.getSelectedStickyInstrument() ? [checkoutSession.getSelectedStickyInstrument()].map(normalizeFutureInstrument) : [];\n };\n\n /**\n * CreatePayload creates cardart instrumentation based on the following criteria:\n *\n * - showMultipleFiVariants pxp\n * - showMultipleFiVariants + 3FI pxp\n * - singleFI pxp\n *\n * @param {Object} options\n * @param {Object} options.checkoutSession $CheckoutSessionModel\n * @param {Boolean} options.isBillingNoPurchase $CheckoutCartModel.isBillingNoPurchase()\n * @param {Boolean} options.stickyEligible Default to be false\n * @param {Boolean} options.renderMultipleFi Determines whether to render multiple FIs or not\n * @param {Boolean} options.renderSingleFi Determines whether to render single FI or not\n * @param {Object} options.showMoreFiState ShowMoreFiState to determine whether we renders `Show More` expereience or not.\n * See $ShowMoreFiFactory.get() for details implementation\n * @returns {Object}\n */\n var createPayload = function createPayload(_ref5) {\n var checkoutSession = _ref5.checkoutSession,\n isBillingNoPurchase = _ref5.isBillingNoPurchase,\n _ref5$stickyEligible = _ref5.stickyEligible,\n stickyEligible = _ref5$stickyEligible === undefined ? false : _ref5$stickyEligible,\n _ref5$renderMultipleF = _ref5.renderMultipleFi,\n renderMultipleFi = _ref5$renderMultipleF === undefined ? false : _ref5$renderMultipleF,\n _ref5$renderSingleFi = _ref5.renderSingleFi,\n renderSingleFi = _ref5$renderSingleFi === undefined ? false : _ref5$renderSingleFi,\n _ref5$showMoreFiState = _ref5.showMoreFiState,\n showMoreFiState = _ref5$showMoreFiState === undefined ? {\n eligible: false,\n isTooManyFi: false,\n isShowMoreBtnClicked: false\n } : _ref5$showMoreFiState;\n var eligible = showMoreFiState.eligible,\n isTooManyFi = showMoreFiState.isTooManyFi,\n isShowMoreBtnClicked = showMoreFiState.isShowMoreBtnClicked;\n\n var plans = isBillingNoPurchase ? checkoutSession.get('futurePaymentInstruments', []).map(normalizeFutureInstrument) : (checkoutSession.getPlanList() || []).map(normalizeFundingOptions);\n\n // when we do decide to render multiple FIs experience\n if (renderMultipleFi) {\n plans = eligible && isTooManyFi // eslint-disable-line no-nested-ternary\n ? isShowMoreBtnClicked ? plans.slice(0) // If `addMore` action has been triggered, we log all FIs\n : plans.slice(0, 3) // otherwise, we only log the first 3FIs\n : plans;\n } else if (renderSingleFi) {\n // Or, render a single FI experience\n // ensure we check if we have a sticky plan\n if (stickyEligible) {\n plans = getSelectedInstrument({ checkoutSession: checkoutSession });\n } else {\n plans = plans.slice(0, 1);\n }\n }\n\n return normalizePayload({ plans: plans });\n };\n\n return {\n createPayload: createPayload,\n isCardArtEnable: isCardArtEnable\n };\n});\n\n_squid.$meta;\n\n_wallet.$WalletModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/services/cardart-instrument\", \"pages/services/cardart-instrument/index.js\"))\n\n/***/ }),\n\n/***/ \"./pages/xo-checkout/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _gdprCookieBanner = __webpack_require__(\"../node_modules/xo-models/src/gdprCookieBanner/index.js\");\n\nvar _dist = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _fn = __webpack_require__(\"../node_modules/xo-login-components/src/login/fn.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-login-components/src/dolphin/utils.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/spinner/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/merchant-header/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/header/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/footer/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/cart/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/gdprCookieBanner/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/directionality/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/error-tooltip/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-validation/dist/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/login-overlay/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/dolphin/directive.js\");\n\nvar _template = __webpack_require__(\"./pages/xo-checkout/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCheckoutComponent', {\n tag: 'xo-checkout',\n template: _template2['default'],\n resolve: {\n pxp: function pxp() {\n var pxp = _squid.$config.purchaseProtectionProp && _squid.$config.purchaseProtectionProp.pxp;\n\n return {\n purchaseProtectionAlt: (0, _squid.$pxp)(pxp.pgName, pxp.patterns, undefined, false, true)\n };\n }\n },\n controller: function controller() {\n if (_angular.$location.path() === '/checkout') {\n _uiRouter.$state.go('checkout.review');\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.isMessengerBAIntegration = _integration.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n this.token = _angular.$rootScope.token;\n this.locale = _squid.$locale;\n this.redirectiframe = _angular.$rootScope.partnerIntegration;\n this.redirectLightbox = true;\n this.escapeHatchInContext = !_angular.$rootScope.partnerIntegration;\n this.displayHeader = true;\n\n this.reviewUrl = 'checkout.review';\n this.isApp = _dist.$DeviceInfo.isApp();\n\n this.isDolphinEligible = false;\n\n _angular.$document.bind('click', function (event) {\n _this.$broadcast('clickBody', event.target);\n });\n\n function rtl() {\n if ((0, _squid.$feature)('rtl')) {\n _angular.$document.prop('documentElement').setAttribute('dir', _squid.$locale.metadata.directionality);\n }\n }\n\n this.$on('metadataChange', rtl);\n rtl();\n\n _fn.$fn.trigger();\n\n this.isGdprValid = _gdprCookieBanner.isGdprValid;\n },\n populate: function populate() {\n var _this2 = this;\n\n if (this.pxp.purchaseProtectionAlt) {\n _squid.$config.features.DEFAULT.propValue = false;\n }\n\n function requiresRiskyLogin(state) {\n var auth = _auth.$AuthModel.instance();\n\n return state.loginRequired && auth.remembered;\n }\n\n function displayRiskyLogin(oldState, newState, newParams) {\n if (!_integration.$integration.getConfig('ALLOW_AUTH')) {\n _logger.$logger.info('login_overlay_suppressed');\n return;\n }\n\n var isUserinitiated = oldState.template && !oldState.name.match(/checkout\\.login/);\n\n if (isUserinitiated) {\n var stateName = newState && newState.name;\n var subFlowName = stateName && stateName.replace(/^.*\\./, '');\n\n if (subFlowName === 'sepaAgreement') {\n _uiRouter.$state.go('checkout.review');\n }\n\n _angular.$rootScope.$broadcast('$insufficientPermission', {\n oldState: oldState.name,\n newState: newState.name,\n pageOnOverlay: newState.pageOnOverlay\n });\n } else {\n var auth = _auth.$AuthModel.instance();\n var cause = newParams && newParams.message ? newParams.message : newState.name.replace(/^.*\\./, '');\n\n _logger.$logger.info('RISKY_LOGIN_TRANSITION_' + cause);\n\n var showPasswordRecovery = (0, _squid.$feature)('pomaPasswordRecovery') && auth.password_less;\n var transition = showPasswordRecovery ? 'checkout.createPassword' : 'checkout.login';\n\n _uiRouter.$state.go(transition, {\n targetPage: cause,\n showNotYou: true\n });\n }\n return false;\n }\n\n function displayHeader(stateName) {\n // We'll be hiding the header during the third party wallet flow, since the third Party will brand the flow from their end\n return !(stateName === 'checkout.thirdPartyWalletFlow');\n }\n\n var checkDolphinEligibility = function checkDolphinEligibility(stateName) {\n return (0, _utils.getDolphinEligibility)(stateName).then(function (eligibility) {\n _this2.isDolphinEligible = eligibility;\n });\n };\n\n // Check dolphin eligibility for explicit page reload\n checkDolphinEligibility(_uiRouter.$state.current && _uiRouter.$state.current.name);\n\n var cancelStateChangeEventListener = _angular.$rootScope.$on('$stateChangeStart', function (event, newState, newParams, oldState) {\n // venmo flag\n _this2.showVenmoExperience = _thirdPartyInfo.thirdPartyExperience.getExperience(_this2.token) === 'VENMO_EXPERIENCE';\n\n if (_this2.showVenmoExperience) {\n _logger.$logger.info('checkout_fpti', {\n 'is_venmo_branding': '1'\n });\n }\n\n _this2.displayHeader = displayHeader(newState && newState.name);\n\n if (requiresRiskyLogin(newState)) {\n event.preventDefault();\n displayRiskyLogin(oldState, newState, newParams);\n }\n checkDolphinEligibility(newState && newState.name);\n });\n\n this.$on('$destroy', cancelStateChangeEventListener);\n\n if (requiresRiskyLogin(_uiRouter.$state.current)) {\n displayRiskyLogin(_uiRouter.$state.current, _uiRouter.$state.current);\n }\n }\n }\n});\n\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_integration.$integration;\n\n_angular.$rootScope;\n\n_angular.$document;\n\n_angular.$location;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_auth.$AuthModel;\n\n_gdprCookieBanner.isGdprValid;\n\n_dist.$DeviceInfo;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_fn.$fn;\n\n_utils.getDolphinEligibility;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"./pages/xo-checkout/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\n\n__webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\n__webpack_require__(\"../node_modules/xo-angular-shims-placeholder/dist/angular-shims-placeholder.min.js\");\n\n__webpack_require__(\"./js/lib/index.js\");\n\n__webpack_require__(\"../node_modules/xo-tracking/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _middleware = __webpack_require__(\"./js/lib/middleware.js\");\n\n__webpack_require__(\"./pages/xo-landing/route.js\");\n\n__webpack_require__(\"./pages/xo-login/route.js\");\n\n__webpack_require__(\"./pages/xo-review/route.js\");\n\n__webpack_require__(\"./pages/xo-end/route.js\");\n\n__webpack_require__(\"./pages/xo-checkout/directive.js\");\n\nexports['default'] = _index.$Route.extend('$xoCheckoutRoute', {\n path: 'checkout',\n directive: 'xo-checkout',\n titleContent: 'base.payPal',\n defaultState: 'checkout.landing',\n middleware: _middleware.$Middleware,\n children: [{\n name: '$LandingRoute'\n }, {\n name: '$LoginRoute',\n attributes: {\n token: 'token'\n }\n }, {\n name: '$PayWithSelectionRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(27).then(__webpack_require__.bind(null, \"./pages/xo-pay-with-selection/route.js\"));\n },\n slug: 'payWithSelection'\n }, {\n name: '$VenmoRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(13).then(__webpack_require__.bind(null, \"./pages/xo-venmo/route.js\"));\n },\n slug: 'venmo'\n }, {\n\n name: '$BannerInterstitialRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(31).then(__webpack_require__.bind(null, \"../node_modules/xo-credit-components/src/banner-interstitial/route.js\"));\n },\n slug: 'bannerInterstitial'\n }, {\n name: '$ThirdPartyWalletFlowRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(25).then(__webpack_require__.bind(null, \"./pages/xo-third-party-wallet/route.js\"));\n },\n slug: 'thirdPartyWalletFlow'\n }, {\n name: '$ThirdPartyInfoCollectFlowRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(14).then(__webpack_require__.bind(null, \"./pages/xo-third-party-info/route.js\"));\n },\n slug: 'thirdPartyInfoCollectFlow'\n }, {\n name: '$GenericErrorRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(23).then(__webpack_require__.bind(null, \"./pages/xo-generic-error/route.js\"));\n },\n slug: 'genericError'\n }, {\n name: '$ChooseCreditOfferRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(24).then(__webpack_require__.bind(null, \"../node_modules/xo-credit-components/src/choose-credit-offer/route.js\"));\n },\n slug: 'chooseCreditOffer'\n }, {\n name: '$RedirectToCapeRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(35).then(__webpack_require__.bind(null, \"../node_modules/xo-credit-components/src/redirect-to-cape/route.js\"));\n },\n slug: 'redirectToCape'\n }, {\n name: '$GenericMessageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(2/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-generic-message/route.js\"));\n },\n slug: 'genericMessage'\n }, {\n name: '$FullpageOnetouchUpsellRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(34).then(__webpack_require__.bind(null, \"../node_modules/xo-login-components/src/fullpage-onetouch-upsell/route.js\"));\n },\n slug: 'FullpageOnetouchUpsell'\n }, {\n name: '$OneTouchUpsellRoute',\n attributes: {\n 'token': 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(6/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-login-components/src/onetouch-interstitial/route.js\"));\n },\n slug: 'oneTouchUpsell'\n }, {\n name: '$SelectFiRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(3/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-select-fi/route.js\"));\n },\n slug: 'selectFi'\n }, {\n name: '$ReviewRoute'\n }, {\n name: '$AuthorizationMessageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(33).then(__webpack_require__.bind(null, \"./pages/xo-authorization-message/route.js\"));\n },\n slug: 'authorizationmessage'\n }, {\n name: '$AddPhoneRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(16).then(__webpack_require__.bind(null, \"../node_modules/xo-form-components/src/phone/route.js\"));\n },\n slug: 'addPhone'\n }, {\n name: '$AddCardPageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(0/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-add-card/route.js\"));\n },\n slug: 'pageAddCard'\n }, {\n name: '$AddFiPageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(9).then(__webpack_require__.bind(null, \"./pages/xo-add-fi/route.js\"));\n },\n slug: 'pageAddFi'\n }, {\n name: '$xoTokenizationInfoPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(19).then(__webpack_require__.bind(null, \"./pages/xo-tokenization-info/route.js\"));\n },\n slug: 'tokenizationInfo'\n }, {\n name: '$xoPinSetupPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(20).then(__webpack_require__.bind(null, \"./pages/xo-pin-setup/route.js\"));\n },\n slug: 'pinSetup'\n }, {\n name: '$AddCardMeftRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(11).then(__webpack_require__.bind(null, \"./pages/xo-add-card-meft/route.js\"));\n },\n slug: 'pageAddCardMeft'\n }, {\n name: '$AddTaxIdRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(26).then(__webpack_require__.bind(null, \"./pages/xo-add-tax-id/route.js\"));\n },\n slug: 'addTaxId'\n }, {\n name: '$TravelRuleRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(18).then(__webpack_require__.bind(null, \"./pages/xo-travel-rule/route.js\"));\n },\n slug: 'travelRule'\n }, {\n name: '$AddNationalIdRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(22).then(__webpack_require__.bind(null, \"./pages/xo-add-national-id/route.js\"));\n },\n slug: 'addNationalId'\n }, {\n name: '$UpdateCardPageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(10).then(__webpack_require__.bind(null, \"./pages/xo-update-card/route.js\"));\n },\n slug: 'updateCard'\n }, {\n name: '$AddShippingPageRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(15).then(__webpack_require__.bind(null, \"./pages/xo-add-shipping/route.js\"));\n },\n slug: 'pageAddShipping'\n }, {\n name: '$xoSoldOutPageRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(32).then(__webpack_require__.bind(null, \"./pages/xo-inventory-soldout/route.js\"));\n },\n slug: 'soldout'\n }, {\n name: '$xoEConsentPageRoute',\n props: function props() {\n var _this = this;\n\n return {\n token: this.token,\n success: function success() {\n return _this.goto('this.review');\n }\n };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(30).then(__webpack_require__.bind(null, \"./pages/xo-eConsent/route.js\"));\n },\n slug: 'econsent'\n\n }, {\n name: '$xoNbrDEPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(28).then(__webpack_require__.bind(null, \"./pages/xo-nbr/route.js\"));\n },\n slug: 'negativeBalanceRecovery'\n\n }, {\n name: '$xoFrameBustRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(29).then(__webpack_require__.bind(null, \"./pages/xo-framebust/route.js\"));\n },\n slug: 'framebust'\n }, {\n name: '$SepaPageRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(17).then(__webpack_require__.bind(null, \"./pages/xo-sepa/route.js\"));\n },\n slug: 'sepapage'\n }, {\n name: '$PayRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(7/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-pay/route.js\"));\n },\n slug: 'pay'\n }, {\n name: '$EndRoute',\n slug: 'end'\n }, {\n name: '$xoDeGuest',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(36).then(__webpack_require__.bind(null, \"./pages/xo-de-guest/route.js\"));\n },\n slug: 'xoDeGuest'\n }, {\n name: '$BMLDisplay',\n attributes: {\n 'review-url': 'reviewUrl'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(12).then(__webpack_require__.bind(null, \"../node_modules/xo-credit-components/src/bml-display/route.js\"));\n },\n slug: 'bmldisplay'\n }, {\n name: '$DoneRoute',\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(5/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-page-components/src/done/route.js\"));\n },\n slug: 'done'\n }, {\n name: '$xoPageCreatePasswordRoute',\n props: function props() {\n return {\n token: this.token\n };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(21).then(__webpack_require__.bind(null, \"./pages/xo-create-password/route.js\"));\n },\n slug: 'createPassword'\n }]\n});\n\n\n_index.$Route;\n\n_middleware.$Middleware;\nmodule.exports = exports['default'];\n\n/***/ }),\n\n/***/ \"./pages/xo-checkout/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n\\n\"\n\n/***/ }),\n\n/***/ \"./pages/xo-end/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$EndRoute = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _util = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/util.js\");\n\nvar _returnParams = __webpack_require__(\"../node_modules/xo-page-components/src/returnParams/index.js\");\n\nvar _profilemanagement = __webpack_require__(\"../node_modules/xo-models/src/profilemanagement/index.js\");\n\nvar $EndRoute = exports.$EndRoute = _squid.$ComponentRoute.extend('EndRoute', {\n path: 'end',\n trackingData: {\n fptiState: 'back_to_merchant',\n trackStateExit: true\n },\n resolve: {\n action: function action() {\n function returnMethod(merchantPreferences) {\n if (_squid.$integration.getConfig('RETURN_METHOD_BASED_ON_MERCHANT_PREFS') && merchantPreferences) {\n return merchantPreferences.returnMethod();\n } else {\n return 'GET';\n }\n }\n\n function returnUrl(checkoutAppData, merchantPreferences, checkoutCart) {\n var return_uri = checkoutAppData.urls && checkoutAppData.urls.return_url;\n\n if (checkoutAppData.is_wps_subscription_flow()) {\n return _squid.$config.urls.wpsSubscriptionReturnUrl;\n }\n\n if (checkoutCart.isSubscriptionsV1()) {\n return _squid.$config.urls.subscriptionsV1ReturnUrl;\n }\n\n // When \"redirect_uri\" is passed as a query param\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM')) {\n return _squid.$util.param('redirect_uri') || return_uri;\n }\n\n if (_squid.$integration.getConfig('RETURN_URL_FROM_MERCHANT_PREFS') && merchantPreferences) {\n return return_uri || merchantPreferences.returnUrl();\n }\n\n // By default, use return_uri from checkout session\n return return_uri;\n }\n\n function returnParams(checkoutCart, checkoutSession, checkoutAppData, returnToMerchantMethod) {\n var paramsForSubscription = {\n token: _squid.$meta.token,\n mfid: _squid.$meta.mfid,\n mode: 'member',\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.lang + '_' + _squid.$locale.country\n };\n\n if (checkoutAppData.is_wps_subscription_flow()) {\n return paramsForSubscription;\n }\n\n var params = {};\n\n if (checkoutCart.isSubscriptionsV1()) {\n params = _extends({}, paramsForSubscription);\n }\n\n // Don't post PayerID for RT without purchase\n if (_squid.$integration.getConfig('ALLOW_PAYER_ID_RETURN_PARAM') && !checkoutCart.isBillingNoPurchase()) {\n params.PayerID = checkoutSession.payer.id;\n }\n\n var billingData = checkoutCart.billing;\n\n if (billingData && billingData.ba_token && !checkoutAppData.legacy_billing_integration) {\n params.ba_token = billingData.ba_token;\n }\n\n if (_squid.$integration.isFlow('WPS')) {\n var isCartUpload = checkoutAppData.flags.is_cart_upload_flow || checkoutAppData.flags.is_shopping_cart_flow;\n\n params = (0, _returnParams.$returnParams)(checkoutCart, checkoutSession, returnToMerchantMethod, 'WPS', isCartUpload);\n }\n\n // When \"redirect_uri\" is passed as a query param\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM') && _squid.$util.param('redirect_uri')) {\n params.intent = checkoutCart.payment_action;\n params.opType = 'payment';\n params.return_uri = _squid.$util.buildURL(checkoutAppData.urls.return_url, params);\n params.paymentId = checkoutAppData.payment_id;\n\n // token needs to be appended here after buildURL, to ensure it's not added twice to return_url\n params.token = _angular.$rootScope.token;\n }\n\n return params;\n }\n\n function getMerchantPreferences(dataModel) {\n if (_squid.$integration.getConfig('POPULATE_MERCHANT_PREFERENCES')) {\n return (0, _squid.$populate)(dataModel, {\n merchantPreferences: _profilemanagement.$MerchantPreferenceModel.instance(dataModel.payee.merchant.id)\n });\n } else {\n return _angular.$q.when();\n }\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token)\n }).then(function () {\n return getMerchantPreferences(models);\n }).then(function () {\n var url = returnUrl(models.checkoutAppData, models.merchantPreferences, models.checkoutCart);\n var returnToMerchantMethod = returnMethod(models.merchantPreferences);\n var params = returnParams(models.checkoutCart, models.checkoutSession, models.checkoutAppData, returnToMerchantMethod);\n\n if (models.checkoutAppData.is_wps_subscription_flow() || models.checkoutCart.isSubscriptionsV1()) {\n _squid.$util.redirect(_squid.$util.paypalURL(url, params));\n }\n\n // if V4 in-context integration, we'll call the onAuthorize handler.\n if (window.xchild) {\n _logger.$logger.done();\n _angular.$rootScope.$emit('loading');\n\n var xparams = {\n paymentToken: _angular.$rootScope.token,\n orderID: _angular.$rootScope.token,\n billingToken: params['ba_token'],\n payerID: params['PayerID'],\n paymentID: params['paymentId'] || models.checkoutAppData.payment_id,\n intent: models.checkoutCart.payment_action\n };\n\n if (url) {\n xparams.returnUrl = _squid.$util.buildURL(url, params);\n }\n return window.xprops.onAuthorize(xparams);\n }\n\n if (returnToMerchantMethod === 'POST') {\n _util.$ReturnToMerchant.postTo(url, params);\n } else {\n // if PDT is disabled don't send params in the url\n if (models.merchantPreferences && !models.merchantPreferences.pdtEnabled()) {\n return _util.$ReturnToMerchant.goTo(url);\n }\n _util.$ReturnToMerchant.goTo(_squid.$util.buildURL(url, params));\n }\n\n return _squid.$unresolved;\n });\n }\n }\n});\n\nangular.value(\"$EndRoute\", $EndRoute);\n_angular.$q;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$meta;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$unresolved;\n\n_squid.$integration;\n\n_squid.$ComponentRoute;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutAppDataModel;\n\n_util.$ReturnToMerchant;\n\n_returnParams.$returnParams;\n\n_profilemanagement.$MerchantPreferenceModel;\n\n/***/ }),\n\n/***/ \"./pages/xo-landing/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$LandingRoute = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _inventory = __webpack_require__(\"../node_modules/xo-models/src/inventory/index.js\");\n\nvar $LandingRoute = exports.$LandingRoute = _squid.$ComponentRoute.extend('$LandingRoute', {\n path: 'landing',\n trackingData: {\n fptiState: 'landing',\n trackStateExit: true\n },\n auth: false,\n resolve: {\n\n action: function action() {\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index.$CheckoutCartModel.instance(_angular.$rootScope.token),\n auth: _auth.$AuthModel.instance(),\n checkoutPayeeModel: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n flowEligibility: _index.$FlowEligibilityModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n localeCountry: _squid.$locale.country, // We need this till we completely migrate to server side locale resolution\n braintreeInegration: _squid.$util.param('bt_int_type') === '2' ? 'SFAuthSession' : '',\n fundingSource: _squid.$util.param('fundingSource')\n }\n })\n }).then(function () {\n var forced_signup_offered = models.flowEligibility.guest ? 0 : 1;\n\n _logger.$logger.info('checkout_fpti', { 'from': 'LANDING_PAGE_PARAM', 'forced_signup_offered': forced_signup_offered });\n\n var landingFlow = function landingFlow() {\n var merchantCountry = models.checkoutAppData.get('merchant.merchant_country', 'US');\n var supportBlockNonDomesticShipping = (0, _squid.$feature)('supportBlockNonDomesticShipping', false, merchantCountry);\n var prefillShippingAddress = models.checkoutCart.get('purchase.shipping_address');\n var blockNonDomesticShipping = models.checkoutAppData.get('flags.block_non_domestic_shipping');\n var allowChangeShipping = models.checkoutAppData.get('flags.allow_change_shipping');\n\n if (supportBlockNonDomesticShipping && blockNonDomesticShipping) {\n _logger.$logger.info('block_non_domestic_shipping', {\n block_non_domestic_shipping: blockNonDomesticShipping,\n allow_change_shipping: allowChangeShipping,\n setec_shipping_country_code: prefillShippingAddress\n });\n }\n\n var shouldBlockBuyer = supportBlockNonDomesticShipping && blockNonDomesticShipping && !allowChangeShipping && prefillShippingAddress && prefillShippingAddress.country_code !== merchantCountry && prefillShippingAddress.country_code !== '';\n\n if (shouldBlockBuyer) {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_NON_DOMESTIC_SHIPPING'\n }\n };\n }\n\n var isPayPalCredit = models.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n if (isPayPalCredit) {\n return (0, _squid.$pxp)('xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_treatment', false, true).then(function (res) {\n var bypassCYCO2ndButtonTreatment = res && res.treatment_name;\n _logger.$logger.info('checkout_fpti', {\n 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn': bypassCYCO2ndButtonTreatment ? 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_treatment' : 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_control'\n });\n\n var creditDataModel = _credit.$CreditDataModel.instance(_angular.$rootScope.token);\n var isCapeReturnKey = creditDataModel.getCapeKey();\n var offers = new _index2.$CreditInstallmentOptionsModel({\n id: _angular.$rootScope.token,\n payee: models.checkoutPayeeModel,\n checkoutCart: models.checkoutCart,\n checkoutAppData: models.checkoutAppData,\n isMemberCredit: true\n });\n var isInstallmentEligible = models.flowEligibility && models.flowEligibility.installment;\n var country = models.checkoutAppData.get('merchant.merchant_country');\n var installmentOptions = void 0;\n\n return offers.save({\n cache: true,\n success: function success(result) {\n installmentOptions = offers.getInstallmentOptionsPresent();\n\n if (result && result.conversion_info && result.conversion_info.converted_transaction_amount) {\n _logger.$logger.info('xo_landing_ppc_conversion_info_present');\n creditDataModel.setCartAmountAndCurrency({\n cart_amount: result.conversion_info.converted_transaction_amount.value,\n cart_currency: result.conversion_info.converted_transaction_amount.currency_code\n });\n }\n\n if (isCapeReturnKey) {\n _logger.$logger.info('ppc_return_flow');\n if (country === 'DE') {\n return 'checkout.xoDeGuest';\n }\n return 'checkout.login';\n } else if (bypassCYCO2ndButtonTreatment) {\n // Treatment behavior - bypass CYCO if no installments\n if (installmentOptions && (country === 'US' && isInstallmentEligible || country !== 'US')) {\n _logger.$logger.info('ppc_second_btn_cyco');\n return 'checkout.chooseCreditOffer';\n } else if (country === 'DE') {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_PPC_INELIGIBLE_USER'\n }\n };\n } else {\n _logger.$logger.info('ppc_second_btn_no_installments');\n return 'checkout.login';\n }\n } else if (!bypassCYCO2ndButtonTreatment) {\n // Control behavior\n if (country === 'GB' || isInstallmentEligible && installmentOptions) {\n _logger.$logger.info('ppc_second_btn_acquisition');\n return 'checkout.chooseCreditOffer';\n } else if (country === 'DE') {\n if (installmentOptions) {\n return 'checkout.chooseCreditOffer';\n } else {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_PPC_INELIGIBLE_USER'\n }\n };\n }\n } else {\n _logger.$logger.info('ppc_second_btn_resuse');\n return 'checkout.login';\n }\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n // Check error message === currencyNotCompatible\n return 'checkout.login';\n }\n }\n });\n });\n }\n\n return 'checkout.login';\n };\n\n var cartHasInventory = models.checkoutCart.get('cartHasInventory');\n\n if (_squid.$config.enableInventoryWPS && cartHasInventory) {\n var inventoryModel = _inventory.$InventoryModel.instance(_angular.$rootScope.token);\n var inventoryInput = {\n items: models.checkoutCart.get('purchase.items'),\n merchantId: models.checkoutPayeeModel.getId()\n };\n\n return inventoryModel.action('getInventory', {\n data: inventoryInput,\n success: function success(inventoryResponse) {\n if (inventoryResponse.showSoldoutPage) {\n return {\n to: 'checkout.soldout',\n params: {\n items: encodeURIComponent(inventoryResponse.soldoutItems),\n soldOutUrl: encodeURIComponent(inventoryResponse.soldoutUrl)\n }\n };\n } else {\n inventoryModel.setInvetoryItems(inventoryResponse);\n return landingFlow();\n }\n }\n });\n } else {\n return landingFlow();\n }\n });\n }\n }\n});\n\nangular.value(\"$LandingRoute\", $LandingRoute);\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_squid.$Class;\n\n_squid.$ComponentRoute;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$FlowEligibilityModel;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$CreditInstallmentOptionsModel;\n\n_credit.$CreditDataModel;\n\n_inventory.$InventoryModel;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {\n\nexports.__esModule = true;\nexports.$xoLoginPageComponent = undefined;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _miniBrowser = __webpack_require__(\"./js/lib/miniBrowser.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _kmliUpsell = __webpack_require__(\"../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index4 = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _newMember = __webpack_require__(\"../node_modules/xo-models/src/newMember/index.js\");\n\nvar _user = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _index5 = __webpack_require__(\"../node_modules/xo-return-to-merchant/dist/index.js\");\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\n__webpack_require__(\"../node_modules/xo-title/dist/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-form-components/src/language-options/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/login/handler/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/card-loader/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/message/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/value-props/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-login-components/src/unified-login/directive.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-member-components/src/vaulting/utils.js\");\n\nvar _loginEligibility = __webpack_require__(\"./pages/xo-login/loginEligibility.js\");\n\n__webpack_require__(\"./pages/xo-login/onboarding/directive.js\");\n\nvar _template = __webpack_require__(\"./pages/xo-login/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\n__webpack_require__(\"./pages/xo-login/tokenized-wallet-loader/directive.js\");\n\nvar _factory = __webpack_require__(\"./pages/xo-login/tokenized-wallet-loader/factory.js\");\n\nvar _util = __webpack_require__(\"./pages/xo-login/util.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoLoginPageComponent = exports.$xoLoginPageComponent = _squid.$Component.extend('$xoLoginPageComponent', {\n tag: 'xo-login-page',\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n link: function link() {\n _logger.$logger.info('login_link');\n },\n lifecycle: {\n populate: function populate() {\n var $scope = this;\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = $scope.checkoutAppData.merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_hide_cart_logo_treatment', false, true).then(function (result) {\n var treatmentName = result && result.treatment_name || '';\n\n if (treatmentName) {\n _logger.$logger.info('xo_hermesnode_hide_cart_logo_treatment');\n $('.cartContainer').hide();\n $('.merchantHeader > .headerWrapper').hide();\n }\n });\n });\n },\n exit: function exit() {\n var $scope = this;\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = $scope.checkoutAppData.merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_hide_cart_logo_treatment', false, true).then(function (result) {\n var treatmentName = result && result.treatment_name || '';\n\n if (treatmentName) {\n $('.cartContainer').show();\n $('.merchantHeader > .headerWrapper').show();\n }\n });\n });\n }\n },\n rootEvents: {\n allLoaded: function allLoaded() {\n if (!_integration.$integration.getConfig('ALLOW_AUTH')) {\n if (_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return _miniBrowser.$miniBrowser.frameBust(this.props.token);\n } else {\n throw _integration.$integration.error('Can not framebust');\n }\n }\n }\n },\n controller: ['$scope', function ($scope) {\n _logger.$logger.info('login_controller');\n\n var fptiHardErrors = ['RESTRICTED_USER', 'PAYEE_BLOCKED_TRANSACTION', 'PAYMENT_ALREADY_DONE', 'PAYMENT_DENIED', 'PAYEE_ACCOUNT_RESTRICTED', 'INVALID_RESOURCE_ID', 'EXPIRED_SESSION', 'PAYER_COUNTRY_NOT_ALLOWED', 'PAYER_LOGIN_COUNTRY_NOT_ALLOWED', 'GAMING_FUNDING_SOURCE_VALIDATION_FAILED'];\n\n var memberSegmentMapper = {\n NEW_MEMBER: 'NEW_XO_MEMBER',\n YOUNG_MEMBER: 'YOUNG_XO_MEMBER',\n EXISTING_MEMBER: 'EXISTING_XO_MEMBER'\n };\n\n var ROUTE_MAPPING = {\n ECONSENT_REQUIRED: 'checkout.econsent'\n };\n\n $scope.ulEligibility = false;\n $scope.isWalletTokenization = false;\n\n /* If we detect a back/forward button click to land on the app, do not auto-login. In this case, the buyer\n is attempting to navigate to a specific page, so we should not auto-redirect them.\n This also fixes an issue with users:\n - Authorizing the checkout session\n - Redirecting to the merchant\n - Hitting back and landing on login page\n - Calling create on checkout and overwriting the authorization\n - Hitting forward and landing again on merchant page\n */\n\n if (window.performance && window.performance.navigation && window.performance.navigation.type === 2) {\n _angular.$rootScope.forceLogin = true;\n }\n\n if (!_angular.$rootScope.forceLogin) {\n $scope.autoLogin = true;\n }\n\n _angular.$rootScope.forceLogin = true;\n $scope.hideGuest = _uiRouter.$stateParams.targetPage === 'PAYER_AUTHENTICATION_REQUIRED' || _uiRouter.$stateParams.showNotYou;\n $scope.promptlogin = $scope.hideGuest && !(0, _squid.$feature)('riskyLoginContingency');\n\n // log statement for mobile webview\n if (_index.$DeviceInfo.isApp()) {\n _logger.$logger.debug('HERMES_IN_MOBILE_WEBVIEW');\n }\n\n if (!_miniBrowser.$miniBrowser.isMiniBrowser() && _squid.$locale.country === 'BR') {\n var brPxp = _squid.$config.pxpExperiments.BR.xo_br_hermesnode_login_design;\n\n (0, _squid.$pxpFactors)(brPxp.pgName, brPxp.params, brPxp.pattern).then(function (result) {\n $scope.loginDesignExp = result;\n });\n }\n\n $scope.onContingency = function (name, contingency) {\n if (!ROUTE_MAPPING[name]) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n\n _uiRouter.$state.go(ROUTE_MAPPING[name]);\n };\n\n $scope.checkoutSession = _index3.$CheckoutSessionModel.instance(_angular.$rootScope.token);\n $scope.eConsent = _user.$EConsentModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletEligibility = _index2.$TokenizedWalletEligibilityModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletPin = _index2.$TokenizedWalletPinModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletMsbOffer = _index2.$TokenizedWalletMsbOfferModel.instance(_angular.$rootScope.token);\n $scope.walletPreferences = _index4.$WalletPreferences.instance(_angular.$rootScope.token);\n $scope.memberSegment = _marketingoffer.$MemberSegmentModel.instance();\n $scope.dependencyEligibility = true;\n\n var isValidGamingContingencies = function isValidGamingContingencies(err) {\n // Map usRMG specific error cause to EOL message.\n var endOfLineErrorList = ['GAMER_INELIGIBLE', 'GAMER_FI_INELIGIBLE', 'GAMER_FI_UNCONFIRMED', 'GAMER_ACCOUNT_UNVERIFIED', 'GAMER_INVALID_ACCOUNT_TYPE', 'GAMER_LOGIN_OUT_OF_COUNTRY', 'GAMING_INVALID_PAYMENT_FLOW', 'GAMER_RESIDENCE_OUT_OF_COUNTRY', 'GAMER_NO_VALID_FUNDING_INSTRUMENT'];\n\n return err && err.cause && endOfLineErrorList.indexOf(err.cause) > -1;\n };\n\n var isUSGambling = function isUSGambling(_ref) {\n var err = _ref.err;\n\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = $scope.checkoutAppData && $scope.checkoutAppData.get('merchant.merchant_country') === 'US';\n\n return isUSBuyer && isUSmerchant && $scope.checkoutPayeeModel.isGambling() && isValidGamingContingencies(err);\n };\n\n // preloading most popular routes where after setbuyer\n // we should keep the balance here to prevent over loading non needed javascript\n // basically the most popular routes should be added here\n var preloadCodeSplitRoutes = function preloadCodeSplitRoutes() {\n if (_squid.$meta.codeSplitting) {\n Promise.all([__webpack_require__.e/* import() */(3/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-select-fi/route.js\")), __webpack_require__.e/* import() */(0/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-add-card/route.js\"))])['catch'](function (err) {\n _logger.$logger.info('code_split_setbuyer_routes_preload_failed', {\n error: err && err.message\n });\n });\n }\n };\n\n $scope.setBuyer = function () {\n var fptiData = {\n from: 'CREATE_XO_SESSION',\n to: 'process_create_xo_session'\n };\n\n function handleContingency(name, err) {\n _logger.$logger.info('[xo login handleContingency]', {\n name: name,\n err: err\n });\n\n // Check if negative case has been previously handled.\n if (!$scope.dependencyEligibility) {\n return;\n }\n\n var errorCode = err.cause || name;\n\n fptiData.int_error_code = errorCode;\n fptiData.error_source = 'paymentapiplatformserv';\n fptiData.error_type = fptiHardErrors.indexOf(errorCode) > -1 ? 'hard_decline' : 'soft_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n // NOTE: curently `GAMER_INELIGIBLE` is only designed for DE gambling\n // however, this new Contingency is expected to expand to all gambling\n // countries moving forward.\n if (isUSGambling({ err: err }) || errorCode === 'GAMER_INELIGIBLE') {\n // US gambling buyer & merchant should get EOL\n // for certain compliance Contingencies\n return _uiRouter.$state.go('checkout.genericError', {\n code: errorCode\n });\n }\n\n if (name !== 'NEED_AUTHENTICATED_CARD') {\n throw err;\n }\n\n // come from guest or have alternate FI options, go to review\n if (_squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon' || err && err.resolution && err.resolution.data && err.resolution.data.alternate_options) {\n _uiRouter.$state.go('checkout.review');\n } else {\n // else go to addCard\n _uiRouter.$state.go('checkout.updateCard.addCardFlow.addCard');\n }\n }\n\n function handleNoValidTopupFiContingency(name, err) {\n // Check if negative case has been previously handled.\n if (!$scope.dependencyEligibility) {\n return;\n }\n if ($scope.isWalletTokenization) {\n fptiData.int_error_code = err.cause;\n fptiData.error_source = 'paymentapiplatformserv';\n fptiData.error_type = fptiHardErrors.indexOf(err.cause) > -1 ? 'hard_decline' : 'soft_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n $scope.checkoutSession.contingency = name;\n\n _factory.$TokenizedWalledLoaderFactory.goToTokenizationInfoPage();\n } else {\n handleContingency(name, err);\n }\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CREATE_XO_SESSION',\n to: 'prepare_create_xo_session'\n });\n\n $scope.isWalletTokenization = $scope.checkoutCart.isWalletTokenization();\n\n if ($scope.isWalletTokenization) {\n _angular.$rootScope.$emit('allLoaded');\n }\n\n $scope.eConsent.retrieve({\n batch: {\n name: 'setbuyer',\n silent: $scope.isWalletTokenization,\n id: 'eConsent',\n dependencies: []\n },\n contingencies: {\n ECONSENT_REQUIRED: function ECONSENT_REQUIRED(name, err) {\n if ($scope.dependencyEligibility) {\n $scope.dependencyEligibility = false;\n _logger.$logger.debug('ULLOGIN_ECONSENT_REQUIRED');\n _uiRouter.$state.go('checkout.econsent');\n }\n }\n }\n });\n\n if ($scope.isWalletTokenization) {\n // these params are coming from Mayfly (see xo-hermes-app/apis/tokenizedWalletInfo)\n var _$scope$tokenizedWall = $scope.tokenizedWalletInfoModel,\n wallet_id = _$scope$tokenizedWall.wallet_id,\n external_device_id = _$scope$tokenizedWall.external_device_id,\n tr_client_id = _$scope$tokenizedWall.tr_client_id,\n product_name = _$scope$tokenizedWall.product_name;\n\n var subject = $scope.tokenizedWalletInfoModel.getSubject();\n\n // TODO: move to TokenizedWalletInfoModel\n var WALLET_BRANDS = {\n 'google': 'APAY',\n 'Samsung': 'SAMSUNGPAY'\n };\n\n var params = {\n wallet_brand: WALLET_BRANDS[subject],\n tenant_id: 'Hermes',\n wallet_id: wallet_id,\n external_device_id: external_device_id,\n subject: subject,\n tr_client_id: tr_client_id,\n product_name: product_name\n };\n\n if (_squid.$meta.query && _squid.$meta.query.wallet_id) {\n params.wallet_id = _squid.$meta.query.wallet_id;\n }\n if (_squid.$meta.query && _squid.$meta.query.jwt) {\n params.jwt = _squid.$meta.query.jwt;\n }\n\n $scope.tokenizedWalletEligibility.retrieve({\n params: params,\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletLightEligibility',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n if (!result.eligible) {\n var msg = 'tokenized_wallet_ineligible_for_provisioning';\n\n _logger.$logger.info(msg);\n\n if ($scope.dependencyEligibility) {\n $scope.dependencyEligibility = false;\n var code = void 0;\n\n fptiData.int_error_code = result.reason;\n fptiData.error_source = 'paymenttokenserv';\n fptiData.error_type = 'hard_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n switch (result.reason) {\n case 'WALLET_ID_ALREADY_PROVISIONED':\n code = 'ANDROID_PAY_ALREADY_PROVISIONED';\n break;\n\n case 'COUNTRY_NOT_SUPPORTED':\n code = 'ANDROID_PAY_COUNTRY_NOT_SUPPORTED';\n break;\n\n default:\n code = 'ANDROID_PAY_ELIGIBILITY_ERROR';\n break;\n }\n code = window.btoa(code);\n\n _uiRouter.$state.go('checkout.genericError', { code: code });\n }\n }\n }\n });\n\n $scope.tokenizedWalletPin.retrieve({\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletPin',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n if (result.pinId) {\n _logger.$logger.info('tokenized_wallet_get_pin_set', {\n pinOrigin: result.pinOrigin,\n pinId: result.pinId\n });\n } else {\n _logger.$logger.info('tokenized_wallet_get_pin_not_set', {\n pinKey: result.suggestedKey ? result.suggestedKey : 'unavailable'\n });\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('tokenized_wallet_get_pin_error');\n return _uiRouter.$state.go('checkout.genericError', { code: 'DEFAULT' });\n }\n }\n });\n\n $scope.tokenizedWalletMsbOffer.retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken\n },\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletMsbOffer',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n var msg = 'tokenized_wallet_msb_offer';\n\n if (result && result.enabled) {\n _logger.$logger.info(msg + '_enabled', result);\n } else {\n _logger.$logger.info(msg + '_disabled');\n }\n }\n });\n }\n\n if (_squid.$config.enableNewMemberDecisioning) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'prepare_cep_descisioning'\n });\n\n $scope.memberSegment.save({\n data: $scope.memberSegmentData,\n batch: {\n name: 'setbuyer',\n id: 'memberSegment',\n silent: true,\n dependencies: $scope.ulEligibility ? ['securityCtx'] : []\n },\n success: function success(result) {\n var memberSegment = memberSegmentMapper[result.memberSegment] || result.memberSegment;\n\n _logger.$logger.info('cep_member_decisioning_success', {\n segment: memberSegment,\n creditOffer: result.creditOffer\n });\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'process_cep_descisioning',\n cep_response: memberSegment + ':' + result.creditOffer\n });\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('cep_member_decisioning_failed');\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'process_cep_descisioning',\n int_error_code: 'SERVICE_ERROR',\n error_source: 'marketingofferreadserv',\n error_type: 'soft_decline'\n });\n }\n }\n });\n }\n\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n $scope.checkoutSession.action('create', {\n data: {\n preselected_fi_type: isPayPalCredit ? 'credit' : undefined,\n // user_selected_funding_source is referenced by xo-hermes-checkout, where it retrieves the product_name in it and passes it to the CreateXO api.\n user_selected_funding_source: $scope.userSelectedFundingSource,\n clear_installments: true\n },\n batch: {\n name: 'setbuyer',\n id: 'createCheckoutSession',\n silent: $scope.isWalletTokenization,\n dependencies: !$scope.isWalletTokenization ? ['eConsent'] : ['eConsent', 'tokenizedWalletLightEligibility', 'tokenizedWalletPin', 'tokenizedWalletMsbOffer']\n },\n success: function success(result) {\n fptiData.available_plan_count = $scope.checkoutSession.getPlanList() ? $scope.checkoutSession.getPlanList().length : '0';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n if (!$scope.dependencyEligibility) {\n return;\n }\n\n if ($scope.auth.password_less && $scope.checkoutCart.isBilling()) {\n if ((0, _squid.$feature)('pomaPasswordRecovery')) {\n _uiRouter.$state.go('checkout.createPassword', { targetPage: 'BILLING_AGREEMENTS' });\n }\n return;\n }\n\n if (isPayPalCredit) {\n return _util.$capeRedirectUtil.handleCapeRouting(result, $scope.checkoutCart, _angular.$rootScope.token);\n }\n\n if ($scope.isWalletTokenization) {\n // no need to check upsell for wallet tokenization flows\n // just set planDone prop for \"\" component\n $scope.planDone = true;\n return;\n }\n\n return _kmliUpsell.$KmliUpsell.eligible(_angular.$rootScope.token).then(function (eligibility) {\n var isEligible = eligibility && eligibility.interstitial ? eligibility.interstitial : {};\n\n if (isEligible.eligible) {\n var stateName = isEligible.type === 'member' ? 'KMLI_UPSELL' : 'KMLI_reactivation';\n\n _logger.$logger.info('checkout_fpti', {\n from: stateName,\n to: 'prepare_kmli_upsell'\n });\n\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_inter_optin'\n });\n return _uiRouter.$state.go('checkout.oneTouchUpsell', { oneTouchFlowName: 'checkout' });\n }\n\n if ($scope.auth.rtExchanged && (0, _squid.$feature)('rmSpinnerText')) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['login.loggedInWithOneTouch']\n };\n }\n\n if ($scope.checkoutSession.negBals) {\n return _uiRouter.$state.go('checkout.negativeBalanceRecovery');\n } else {\n (0, _utils.checkVaultingEligibility)().then(function (eligible) {\n if (eligible) {\n (0, _utils.authorize)($scope.checkoutSession, $scope.checkoutAppData).then(function (authorizePage) {\n return _uiRouter.$state.go(authorizePage);\n })['catch'](function (err) {\n // eslint-disable-line handle-callback-err\n _uiRouter.$state.go('checkout.review');\n });\n } else {\n _uiRouter.$state.go('checkout.review');\n }\n });\n }\n });\n },\n contingencies: {\n // override contingency.js handler with custom logic to support both xoon/hermes flows\n NEED_DEBIT_CARD: handleNoValidTopupFiContingency,\n EXPIRED_DEBIT_CARD: handleNoValidTopupFiContingency,\n DEFAULT: handleContingency\n }\n })['finally'](function () {\n // selectedInstallmentsData does not come from checkoutSession response from PAPS, so we need to keep track of this state ourselves.\n // We pass clear_installments when calling the checkout session API, so we need to reflect that this is being cleared.\n // See https://engineering.paypalcorp.com/jira/browse/PPPLMER-58580\n delete $scope.checkoutSession.selectedInstallmentData;\n });\n\n preloadCodeSplitRoutes();\n };\n\n /**\n * This call is made after the buyer is logged in, and before the CreateXO api call.\n * So that we can retrieve the tokenized funding capabilities for the buyer country.\n */\n $scope.getTokenizedFundingCapabilities = function () {\n return _index2.$TokenizedFundingCapabilitiesModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken,\n country: $scope.auth.country\n }\n }).then(function (result) {\n if (result.isDirectFundingEnabled()) {\n $scope.userSelectedFundingSource = {\n product_name: result.getProductName()\n };\n }\n });\n };\n\n $scope.preSetBuyerCalls = function () {\n var apiCalls = [];\n\n if ($scope.checkoutCart.isWalletTokenization()) {\n apiCalls.push($scope.getTokenizedFundingCapabilities());\n }\n return _angular.$q.all(apiCalls);\n };\n\n // Sorry for the indirection here. There's postAuth, so \"preAuth\" compliments it well (easier on the brain)\n $scope.preAuth = function () {\n if ($scope.ulEligibility) {\n // For UL, batch up eConsent, xoSession\n $scope.preSetBuyerCalls().then(function () {\n return $scope.setBuyer();\n });\n }\n };\n\n $scope.onSuccess = function () {\n if ($scope.ulEligibility) {\n // If the experiment is enabled, we already have what we need, so /quit.\n return;\n }\n $scope.preSetBuyerCalls().then(function () {\n return $scope.setBuyer();\n });\n };\n\n (0, _squid.$populate)($scope, {\n flowEligibility: _index3.$FlowEligibilityModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n geolocation: _squid.$meta.geolocation,\n localeCountry: _squid.$locale.country, // We need this till we completely migrate to server side locale resolution\n braintreeInegration: _squid.$util.param('bt_int_type') === '2' ? 'SFAuthSession' : '',\n fundingSource: _squid.$util.param('fundingSource')\n }\n }),\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index3.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutPayeeModel: _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n tokenizedWalletInfoModel: _index2.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve()\n }).then(function () {\n return _newMember.$NewMemberEligibility.instance().getMemberSegmentParameters(_angular.$rootScope.token).then(function (data) {\n $scope.memberSegmentData = data;\n // Set flag to indicate all data is loaded\n $scope.populateComplete = true;\n return;\n });\n }).then(function () {\n // If the refresh token is present, the one touch experience must be preserved and the user must not\n // be presented with the venmo experience\n if (!$scope.auth.refresh_token) {\n var merchant_name = $scope.checkoutAppData.merchant.brand_name || $scope.checkoutAppData.merchant.merchant_name || $scope.checkoutAppData.merchant.merchant_email;\n\n $scope.infoVenmo = {\n msgs: [(0, _squid.$renderContent)('landing.venmoAvailableSoon', { 'merchant': merchant_name })],\n type: 'info'\n };\n\n if (!_uiRouter.$stateParams.venmoError && $scope.flowEligibility.venmo) {\n return _uiRouter.$state.go('checkout.payWithSelection');\n } else if (!_uiRouter.$stateParams.venmoError && _thirdPartyInfo.thirdPartyInfo.isVenmoCookiePresent()) {\n $scope.showVenmoAvailableSoonMsg = true;\n }\n\n if (_uiRouter.$stateParams.venmoError && _squid.$util.param('marketplaces_venmo_client') === '1') {\n var cancel_url = $scope.checkoutAppData.urls.cancel_url;\n\n _index5.$ReturnToMerchant.goTo(cancel_url);\n }\n\n // Baidu eligibility checks. Pending pxp throttle\n return _thirdPartyInfo.thirdPartyInfo.isBaiduEligible().then(function (baiduEligible) {\n if (!_uiRouter.$stateParams.baiduError && baiduEligible) {\n return (0, _squid.$pxp)('xo_hermesnode_baidu', {\n 'ctx.COUNTRY': $scope.checkoutAppData.get('merchant.merchant_country'),\n 'uid': $scope.checkoutPayeeModel.getId()\n }, '(xo_hermesnodeweb_baidu)(.*)').then(function (result) {\n if (result && result.treatment_name === 'xo_hermesnodeweb_baidu_treatment_4660') {\n return _uiRouter.$state.go('checkout.payWithSelection');\n }\n });\n }\n });\n }\n if ($scope.flowEligibility.guest) {\n return;\n }\n\n $('.paypalHeaderWrapper').removeClass('paypalCredit');\n $('.paypalHeaderWrapper').removeClass('paypalCreditTnc');\n }).then(function () {\n var initKmliAndDeleteAT = function initKmliAndDeleteAT() {\n delete $scope.auth.access_token;\n _kmliUpsell.$KmliUpsell.init({});\n };\n\n // reload auth model for use cases where user is not logged in and access_token is in the hash\n // happens already in the middleware\n // basically if there is a param \"euat\" - there will be access token in the hash\n // otherwise I don't think we need to reload Auth model if user is logged in already\n if ($scope.auth.accessToken() && !$scope.auth.loggedIn()) {\n return $scope.auth.reload({\n headers: {\n 'x-paypal-internal-euat': $scope.auth.accessToken()\n },\n resultModel: $scope.auth,\n success: function success() {\n initKmliAndDeleteAT();\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n }\n });\n } else if ($scope.auth.loggedIn()) {\n initKmliAndDeleteAT();\n }\n }).then(function () {\n return (0, _loginEligibility.$loginEligibility)(_angular.$rootScope.token, !$scope.autoLogin).then(function (result) {\n if (result === 'unifiedLogin') {\n $scope.ulEligibility = true;\n } else if (result === 'apsIntegration') {\n $scope.apsIntegration = 'apsIntegration';\n } else if (result === 'apsIntegrationRM') {\n $scope.apsIntegration = 'apsIntegrationRM';\n }\n }).then(function () {\n var reinitDisplay = function reinitDisplay() {\n $scope.promptlogin = false;\n $scope.hideGuest = false;\n $scope.autoLogin = true;\n delete _uiRouter.$stateParams.targetPage;\n delete _uiRouter.$stateParams.showNotYou;\n };\n\n $scope.logout = $scope.promptlogin ? function () {\n _logger.$logger.info('not_you_logout');\n _logger.$logger.info('checkout_fpti', {\n from: 'LOGIN_UL',\n to: 'login_with_diff_user'\n });\n $scope.auth.logoutAndRedirect('NOT_YOU');\n } : function () {\n _logger.$logger.info('logout_switch_display');\n reinitDisplay();\n };\n });\n });\n }]\n});\n\nangular.value(\"$xoLoginPageComponent\", $xoLoginPageComponent);\n_angular.$q;\n\n_angular.$rootScope;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$pxpFactors;\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_kmliUpsell.$KmliUpsell;\n\n_index2.$TokenizedFundingCapabilitiesModel;\n\n_index2.$TokenizedWalletEligibilityModel;\n\n_index2.$TokenizedWalletInfoModel;\n\n_index2.$TokenizedWalletMsbOfferModel;\n\n_index2.$TokenizedWalletPinModel;\n\n_auth.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutCartModel;\n\n_index3.$CheckoutPayeeModel;\n\n_index3.$CheckoutSessionModel;\n\n_index3.$FlowEligibilityModel;\n\n_index4.$WalletPreferences;\n\n_marketingoffer.$MemberSegmentModel;\n\n_newMember.$NewMemberEligibility;\n\n_user.$EConsentModel;\n\n_index5.$ReturnToMerchant;\n\n_thirdPartyInfo.thirdPartyInfo;\n\n_utils.checkVaultingEligibility;\n\n_utils.authorize;\n\n_loginEligibility.$loginEligibility;\n\n_factory.$TokenizedWalledLoaderFactory;\n\n_util.$capeRedirectUtil;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"./pages/xo-login/guestThrottle.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$guestThrottle = $guestThrottle;\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nfunction $guestThrottle(flowName, token, lang, country, mfid) {\n var models = {};\n\n function redirectToXoon() {\n return (0, _squid.$dispatch)('xoon', {\n exp: flowName,\n token: token,\n 'locale.x': lang + '_' + country,\n 'country.x': country,\n mfid: mfid\n });\n }\n\n function fallback(product, reason, params) {\n throw new _squid.$FallbackError({\n product: product || 'ux',\n reason: reason,\n entryPoint: flowName,\n params: params\n });\n }\n\n function checkWpsSubscriptionGuestEnabled() {\n return (0, _squid.$pxp)('xo_subscription_hermes_xoon', 'xo_subscription_treatment_xoon', undefined, false, true).then(function (result) {\n var treatmentName = result && result.treatment_name;\n\n return treatmentName === 'xo_subscription_treatment_xoon';\n });\n }\n\n function isGuestFlowEnabled() {\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(token).retrieve()\n }).then(function () {\n var appData = models.checkoutAppData;\n\n // For WPS subscription flows , enable guest flows if treatment name is returned else fallback\n if (appData && appData.is_wps_subscription_flow()) {\n return checkWpsSubscriptionGuestEnabled();\n } else {\n return _angular.$q.resolve(true);\n }\n });\n }\n\n return isGuestFlowEnabled().then(function (res) {\n if (!res) {\n _logger.$logger.info(flowName + '_to_ux_wps');\n return fallback('ux', flowName + '_to_ux_wps');\n }\n return redirectToXoon();\n });\n}\n\nangular.value(\"$guestThrottle\", $guestThrottle);\n_angular.$q;\n\n_logger.$logger;\n\n_squid.$dispatch;\n\n_squid.$populate;\n\n_squid.$FallbackError;\n\n_squid.$pxp;\n\n_index.$CheckoutAppDataModel;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/loginEligibility.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$forceLoginExperience = $forceLoginExperience;\nexports.$loginEligibility = $loginEligibility;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nfunction $forceLoginExperience(auth, merchant_country, forcedLogin) {\n var ULParam = _squid.$util.param('ul');\n\n if (auth.loggedIn() && !auth.stepupAuthRequired && !forcedLogin) {\n var ulReturn = _squid.$util.param('ulReturn');\n\n return {\n experience: 'apsIntegration',\n reason: ulReturn ? 'ulReturn' : 'sessionActive'\n };\n } else if (ULParam === '0' && !_squid.$config.deploy.isLive()) {\n return {\n experience: 'apsIntegration',\n reason: 'ulParamDisabled'\n };\n } else if (ULParam && ULParam.match(/[12]/)) {\n return {\n experience: 'unifiedLogin',\n reason: 'ulParam'\n };\n } else if (ULParam === '3') {\n return {\n experience: 'apsIntegrationRM',\n reason: 'ulParamApsRM'\n };\n } else if (auth.refreshToken()) {\n return {\n experience: 'unifiedLogin',\n reason: 'rememberedUser'\n };\n } else if (_squid.$meta.corp && _squid.$config.ulMeta.allowKMLIForInternalIP && (0, _squid.$feature)('enableOneTouchInternalIP', false, merchant_country)) {\n return {\n experience: 'unifiedLogin',\n reason: 'internalIP'\n };\n }\n}\n\nfunction $loginEligibility(token, forcedLogin) {\n var $scope = {};\n\n $scope.token = token;\n\n var routingReason = void 0;\n\n return (0, _squid.$populate)($scope, {\n auth: _index2.$AuthModel.instance(),\n checkoutAppData: _index.$CheckoutAppDataModel.instance($scope.token)\n }).then(function () {\n var forceLoginExperience = $forceLoginExperience($scope.auth, $scope.checkoutAppData.merchant.merchant_country, forcedLogin);\n var isIneligible = angular.isDefined(forceLoginExperience);\n\n // Check login param for hercules, otherwise, always using UL\n if (isIneligible) {\n routingReason = forceLoginExperience.reason;\n return forceLoginExperience.experience;\n } else {\n return 'unifiedLogin';\n }\n }).then(function (finalLoginExperience) {\n _logger.$logger.debug(finalLoginExperience === 'unifiedLogin' ? 'ULLOGIN_ELIGIBLE' : 'ULLOGIN_NOT_ELIGIBLE', {\n userGroup: [routingReason],\n routing_reason: routingReason\n });\n\n var app_int_type = _index3.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_ELG_CHK',\n 'to': 'process_ul_elg_chk',\n 'routing_reason': routingReason,\n 'app_int_type': app_int_type\n });\n\n return finalLoginExperience;\n });\n}\n\nangular.value(\"$forceLoginExperience\", $forceLoginExperience);\nangular.value(\"$loginEligibility\", $loginEligibility);\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_logger.$logger;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$AuthModel;\n\n_index3.$DeviceInfo;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/onboarding/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoOnboardingSectionComponent = undefined;\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _guestThrottle = __webpack_require__(\"./pages/xo-login/guestThrottle.js\");\n\nvar _paypalplus = __webpack_require__(\"./pages/xo-login/paypalplus.js\");\n\n__webpack_require__(\"../node_modules/xo-wallet-components/src/fi-logos/directive.js\");\n\nvar _template = __webpack_require__(\"./pages/xo-login/onboarding/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoOnboardingSectionComponent = exports.$xoOnboardingSectionComponent = _squid.$Component.extend('$xoOnboardingSectionComponent', {\n tag: 'xo-onboarding-section',\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n function throttleOnboardingFlow(flow) {\n return (0, _guestThrottle.$guestThrottle)(flow, $scope.token, _squid.$locale.lang, _squid.$locale.country, _squid.$meta.mfid);\n }\n\n $scope.signupThrottle = function () {\n if ($scope.forceCAPESignup) {\n _uiRouter.$state.go('checkout.redirectToCape');\n } else {\n throttleOnboardingFlow('signup');\n }\n };\n\n $scope.guestThrottle = function () {\n throttleOnboardingFlow('guest');\n };\n\n function getFlowEligibility() {\n return _checkout.$FlowEligibilityModel.instance($scope.token).retrieve({\n params: {\n 'localeCountry': _squid.$locale.country\n }\n }).then(function (flowEligibility) {\n $scope.flowEligibility = flowEligibility;\n });\n }\n\n function getButtonLabelTreatment() {\n $scope.newUserVariant = false;\n $scope.newUserVariantWithText = false;\n\n return (0, _squid.$pxp)('xo_hermes_new_user', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermes_new_user_treatment_(a|b)', false, true).then(function (t) {\n if (t) {\n $scope.newUserVariant = true;\n if (t.treatment_name === 'xo_hermes_new_user_treatment_b') {\n $scope.newUserVariantWithText = true;\n }\n }\n });\n }\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance($scope.token)\n }).then(function () {\n return getFlowEligibility();\n }).then(function () {\n return getButtonLabelTreatment();\n }).then(function () {\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n $scope.creditDataModel = _credit.$CreditDataModel.instance($scope.token);\n $scope.forceCAPESignup = isPayPalCredit && !$scope.creditDataModel.payInFull;\n\n var useForcedSignupFlow = (0, _paypalplus.$isPayPalPlus)($scope.token) || $scope.forceCAPESignup;\n var guest = $scope.flowEligibility.guest;\n var signup = $scope.flowEligibility.signup;\n\n $scope.showGuestBtn = !useForcedSignupFlow && guest;\n $scope.showSignupBtn = useForcedSignupFlow || !guest && signup;\n $scope.hideOrSeparator = !$scope.showGuestBtn && !$scope.showSignupBtn;\n });\n }]\n});\n\nangular.value(\"$xoOnboardingSectionComponent\", $xoOnboardingSectionComponent);\n_uiRouter.$state;\n\n_credit.$CreditDataModel;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$FlowEligibilityModel;\n\n_guestThrottle.$guestThrottle;\n\n_paypalplus.$isPayPalPlus;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/onboarding/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"\\n\"\n\n/***/ }),\n\n/***/ \"./pages/xo-login/paypalplus.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$isPayPalPlus = $isPayPalPlus;\n\nvar _index = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nfunction $isPayPalPlus(token) {\n var checkoutAppDataModel = _index.$CheckoutAppDataModel.instance(token);\n var experienceInitiator = checkoutAppDataModel.get('flags.payment_experience_initiator');\n return experienceInitiator === 'PAYPAL_PLUS';\n}\n\nangular.value(\"$isPayPalPlus\", $isPayPalPlus);\n_index.$CheckoutAppDataModel;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$LoginRoute = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n__webpack_require__(\"./pages/xo-login/directive.js\");\n\nvar $LoginRoute = exports.$LoginRoute = _squid.$ComponentRoute.extend('$LoginRoute', {\n path: 'login',\n directive: 'xo-login-page',\n query: ['venmoError'],\n params: {\n targetPage: null,\n source: null,\n showNotYou: null\n },\n auth: false,\n titleContent: 'base.logIn',\n trackingData: {\n fptiState: 'login',\n suppressTransitionLog: true, // We will be suppressing the Server Side Tracking for this page\n templateName: 'login.dust',\n pageGoal: 'Payment Start',\n buzname: {\n 'fullpage': {\n 'pagename': '%::fullpage-login',\n 'pagename2': '%::fullpage-login:member:hermes:',\n 'version': 'member:%:'\n },\n 'ulLogin': {\n 'pagename': '%::fullpage-ullogin',\n 'pagename2': '%::fullpage-ullogin:member:hermes:',\n 'version': 'member:%:'\n // More page qualifiers come here...\n } }\n },\n children: []\n});\n\nangular.value(\"$LoginRoute\", $LoginRoute);\n_squid.$ComponentRoute;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n
    \\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n \\n \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"./pages/xo-login/tokenized-wallet-loader/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoTokenizedWalletLoader = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _factory = __webpack_require__(\"./pages/xo-login/tokenized-wallet-loader/factory.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/card-loader/directive.js\");\n\nvar _template = __webpack_require__(\"./pages/xo-login/tokenized-wallet-loader/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar ANIMATION_STATUSES = {\n NOT_STARTED: 'notStarted',\n PENDING: 'pending',\n COMPLETED: 'completed'\n};\n\n// card loader component - used only in tokenized wallet flows.\nvar $xoTokenizedWalletLoader = exports.$xoTokenizedWalletLoader = _squid.$Component.extend('$xoTokenizedWalletLoader', {\n tag: 'xo-tokenized-wallet-loader',\n template: _template2['default'],\n props: {\n planDone: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n tokenizedWalletInfoModel: _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.auth = _auth.$AuthModel.instance();\n // start animation of the card\n this.setbuyerProgress = ANIMATION_STATUSES.NOT_STARTED;\n _logger.$logger.info('tokenized_wallet', {\n from: 'adding_pp_ap_animation',\n to: 'prepare_adding_pp_ap_animation',\n context_id: _angular.$rootScope.token,\n context_type: 'EC-Token',\n billing_token: _squid.$meta.baToken\n });\n\n // sets animation state to 80%\n (0, _angular.$timeout)(function () {\n _this.setbuyerProgress = ANIMATION_STATUSES.PENDING;\n _logger.$logger.info('tokenized_wallet', {\n from: 'adding_pp_ap_animation',\n to: 'process_adding_pp_ap_animation',\n context_id: _angular.$rootScope.token,\n context_type: 'EC-Token',\n billing_token: _squid.$meta.baToken\n });\n }, 300);\n\n // watch when planning is completed in xo-login/directive\n // to redirect to \"checkout.tokenizationInfo\" page\n this.$watch('planDone', function (planDone) {\n if (planDone) {\n _factory.$TokenizedWalledLoaderFactory.goToTokenizationInfoPage();\n }\n });\n },\n populate: function populate() {\n this.cardLoaderMessage = _factory.$TokenizedWalledLoaderFactory.getCardLoaderMessage(this.models.tokenizedWalletInfoModel);\n this.logoClass = this.models.tokenizedWalletInfoModel.getSubject();\n }\n }\n});\n\nangular.value(\"$xoTokenizedWalletLoader\", $xoTokenizedWalletLoader);\n_squid.$Component;\n\n_squid.$meta;\n\n_logger.$logger;\n\n_angular.$timeout;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_auth.$AuthModel;\n\n_app.$TokenizedWalletInfoModel;\n\n_factory.$TokenizedWalledLoaderFactory;\n\n/***/ }),\n\n/***/ \"./pages/xo-login/tokenized-wallet-loader/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename, $) {\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$TokenizedWalledLoaderFactory', function () {\n var goToTokenizationInfoPage = function goToTokenizationInfoPage() {\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'PP_AndroidPay_Info',\n 'to': 'prepare_PP_AndroidPay_Info',\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'EC-Token',\n 'billing_token': _squid.$meta.baToken\n });\n $('#outerWrapper').addClass('tokenization');\n _uiRouter.$state.go('checkout.tokenizationInfo');\n };\n\n var getCardLoaderMessage = function getCardLoaderMessage(tokenizedWalletInfoModel) {\n return (0, _squid.$renderContent)('topup.commonAdding', {\n type: tokenizedWalletInfoModel.brandName()\n }).toString();\n };\n\n return {\n goToTokenizationInfoPage: goToTokenizationInfoPage,\n getCardLoaderMessage: getCardLoaderMessage\n };\n});\n\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$renderContent;\n\n_logger.$logger;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/xo-login/tokenized-wallet-loader\", \"pages/xo-login/tokenized-wallet-loader/factory.js\", __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\")))\n\n/***/ }),\n\n/***/ \"./pages/xo-login/tokenized-wallet-loader/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"./pages/xo-login/util.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$capeRedirectUtil', function () {\n return {\n handleCapeRouting: function handleCapeRouting(checkoutSession, checkoutCart, token) {\n var fundingInstruments = void 0;\n var isCreditInWallet = void 0;\n\n if (checkoutCart.isBillingNoPurchase()) {\n fundingInstruments = checkoutSession.futurePaymentInstruments;\n isCreditInWallet = checkoutSession.futurePayment && checkoutSession.futurePayment.isCreditInWallet;\n } else {\n fundingInstruments = checkoutSession.fundingOptions && checkoutSession.fundingOptions.instruments;\n isCreditInWallet = fundingInstruments && _squid.$util.find(fundingInstruments, function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n }\n\n var checkoutAppData = _checkout.$CheckoutAppDataModel.instance(token);\n var creditDataModel = _credit.$CreditDataModel.instance(token);\n var installmentModel = _credit.$CreditInstallmentModel.instance(token);\n\n var isCapeReturnKey = creditDataModel.getCapeKey();\n var isCapeReturn = isCapeReturnKey && _squid.$util.param('success');\n var isPPCEligible = checkoutSession.creditOffer;\n\n if (_squid.$locale.country !== checkoutAppData.get('merchant.merchant_country')) {\n creditDataModel.setCrossBorder(true);\n }\n\n function handleRedirect() {\n // User does not have any FI in wallet but they choose to pay in full.\n // Show add card contingency page instead of redirecting to CAPE.\n if (checkoutSession.isCreditPromoted && !fundingInstruments && creditDataModel.payInFull || !fundingInstruments && !isPPCEligible) {\n return _uiRouter.$state.go('checkout.pageAddCard.addCardFlow.addCard');\n }\n\n // Handle case where it was timeout and status is to go back to cape\n else if (isCreditInWallet || isCapeReturn || creditDataModel.payInFull) {\n return _uiRouter.$state.go('checkout.review');\n }\n\n // Handle acquisition customer send to CAPE\n else if (!isCreditInWallet && isPPCEligible) {\n return _uiRouter.$state.go('checkout.redirectToCape');\n } else {\n // show error message\n return _uiRouter.$state.go('checkout.review');\n }\n }\n\n // 2nd button, cross border, installment offer selected in API -- we cannot honor any offer the user chose, so must clear offer\n if (checkoutAppData.is_second_button_txn && creditDataModel.isCrossBorder() && installmentModel.get('meta.populated')) {\n installmentModel.action('delete', {\n success: function success(result) {\n _logger.$logger.info('patch_cart_installment_success');\n _credit.$CreditInstallmentModel.create(token); // Clear cache for this token\n handleRedirect();\n },\n error: function error(err) {\n _logger.$logger.error('patch_cart_installment_fail', err);\n _uiRouter.$state.go('checkout.genericError', {\n code: 'DELETE_CREDIT_OPTION_ERROR'\n });\n }\n });\n } else {\n handleRedirect();\n }\n }\n };\n});\n\n_squid.$util;\n\n_squid.$locale;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_credit.$CreditDataModel;\n\n_credit.$CreditInstallmentModel;\n\n_checkout.$CheckoutAppDataModel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/xo-login\", \"pages/xo-login/util.js\"))\n\n/***/ }),\n\n/***/ \"./pages/xo-review/directive.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$xoReviewPageComponent = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _jquery = __webpack_require__(\"../node_modules/jquery/dist/jquery.min.js\");\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _index = __webpack_require__(\"./js/lib/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _integration = __webpack_require__(\"./js/lib/integration.js\");\n\nvar _index2 = __webpack_require__(\"../node_modules/xo-device-info/dist/index.js\");\n\nvar _ul = __webpack_require__(\"../node_modules/xo-login-components/src/unified-login/ul.js\");\n\nvar _pxp = __webpack_require__(\"../node_modules/xo-page-components/src/cart/lib/pxp.js\");\n\nvar _marketingoffer = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _kmliUpsell = __webpack_require__(\"../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\");\n\nvar _utils = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/utils.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fbMessenger = __webpack_require__(\"../node_modules/xo-page-components/src/constants/fbMessenger.js\");\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nvar _thirdPartyInfo = __webpack_require__(\"../node_modules/xo-third-party-components/src/thirdParty-info/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _fiApis = __webpack_require__(\"../node_modules/xo-models/src/fi/lib/fiApis.js\");\n\nvar _eligibility = __webpack_require__(\"../node_modules/xo-models/src/eligibility/index.js\");\n\nvar _index3 = __webpack_require__(\"../node_modules/xo-models/src/fiMeta/index.js\");\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _choice = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\nvar _fiMessages = __webpack_require__(\"../node_modules/xo-models/src/fi/lib/fiMessages.js\");\n\nvar _donation = __webpack_require__(\"../node_modules/xo-models/src/donation/index.js\");\n\nvar _bml = __webpack_require__(\"../node_modules/xo-models/src/bml/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar _fi = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _app = __webpack_require__(\"../node_modules/xo-models/src/app/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _experiments = __webpack_require__(\"../node_modules/xo-models/src/experiments/index.js\");\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nvar _marketingoffer2 = __webpack_require__(\"../node_modules/xo-models/src/marketingoffer/index.js\");\n\nvar _newMember = __webpack_require__(\"../node_modules/xo-models/src/newMember/index.js\");\n\nvar _shippingMethod = __webpack_require__(\"../node_modules/xo-models/src/shippingMethod/index.js\");\n\nvar _user = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-member-components/src/give-at-checkout/factory.js\");\n\nvar _factory2 = __webpack_require__(\"../node_modules/xo-member-components/src/no-balance/factory.js\");\n\nvar _factory3 = __webpack_require__(\"../node_modules/xo-member-components/src/rewards-checkbox/factory.js\");\n\nvar _factory4 = __webpack_require__(\"../node_modules/xo-member-components/src/show-more-fi/factory.js\");\n\nvar _factory5 = __webpack_require__(\"../node_modules/xo-wallet-components/src/add-card/addcard/factory.js\");\n\n__webpack_require__(\"../node_modules/xo-title/dist/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-styles/dist/lib/toggle.less\");\n\n__webpack_require__(\"../node_modules/xo-return-to-merchant/dist/util.js\");\n\n__webpack_require__(\"../node_modules/xo-wallet-components/src/3ds/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-address-components/src/address-display/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-form-components/src/select-shipping-method/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/offer/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/no-balance/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-topup/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-address/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-paywith/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/give-at-checkout/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-member-components/src/review-shipping-options/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/notYou/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/value-props/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/marketingOffers/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-page-components/src/messenger-plugin/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/banner/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/message/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/sticky-cta/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/expired-message/directive.js\");\n\n__webpack_require__(\"../node_modules/xo-ui-components/src/user-assist-banner/directive.js\");\n\nvar _cardartInstrument = __webpack_require__(\"./pages/services/cardart-instrument/index.js\");\n\nvar _factory6 = __webpack_require__(\"./pages/xo-select-fi/factory.js\");\n\nvar _factory7 = __webpack_require__(\"./pages/xo-review/factory.js\");\n\nvar _tokenizedFactory = __webpack_require__(\"./pages/xo-review/tokenizedFactory.js\");\n\nvar _shippingChangeFeature = __webpack_require__(\"./pages/xo-review/lib/shippingChangeFeature.js\");\n\nvar _template = __webpack_require__(\"./pages/xo-review/template.html\");\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Create payload that contains relevant data about the checkout state at review page\nfunction createReviewFptiPayload(_ref) {\n var checkoutSession = _ref.checkoutSession,\n _ref$isProcessTransit = _ref.isProcessTransition,\n isProcessTransition = _ref$isProcessTransit === undefined ? false : _ref$isProcessTransit;\n\n var payload = {\n shipping_address_id: checkoutSession.get('shipping.id')\n };\n\n if (checkoutSession.get('plan.conversion') && !isProcessTransition) {\n payload.currency_conversion_type = checkoutSession.get('plan.conversion.paypal') ? 'PAYPAL' : 'VENDOR';\n payload.is_conversion_shown = checkoutSession.get('plan.conversion.changeable') ? 1 : 0;\n payload.currency_conversion_from_curr = checkoutSession.get('plan.conversion.from_code');\n payload.currency_conversion_to_curr = checkoutSession.get('plan.conversion.to_code');\n } else if (checkoutSession.get('plan.conversion') && isProcessTransition) {\n payload.currency_conversion_selected = checkoutSession.get('plan.conversion.paypal') ? 'PAYPAL' : 'VENDOR';\n payload.currency_conversion_from_curr = checkoutSession.get('plan.conversion.from_code');\n payload.currency_conversion_to_curr = checkoutSession.get('plan.conversion.to_code');\n }\n if (_factory3.$RewardsCheckboxFactory.rewardsFound()) {\n var contentKeys = _factory3.$RewardsCheckboxFactory.getContentKeys(checkoutSession.plan);\n\n payload.fi_id = (0, _utils.getInstrumentID)(checkoutSession.plan);\n payload.rewards_type = contentKeys.issuerName;\n payload.rewards_amt = contentKeys.value.rewardAmount; // monetary amount\n if (!isProcessTransition) {\n payload.rewards_fi = _factory3.$RewardsCheckboxFactory.toString();\n }\n }\n return payload;\n}\n\nvar $xoReviewPageComponent = exports.$xoReviewPageComponent = _squid.$Component.extend('$xoReviewPageComponent', {\n tag: 'xo-review-page',\n template: _template2['default'],\n scope: {\n redirectiframe: '=?',\n redirectLightbox: '=?'\n },\n actions: {\n updatePreferredFi: function updatePreferredFi(logger) {\n if (this.makeFiPreferred && this.makeFiPreferred.selected) {\n var PreferredFi = new _fi.$PreferredFi({\n preferred: [this.makeFiPreferred.fiId]\n });\n\n logger.info('checkout_fpti', { 'pref_fi_set': '1' });\n return PreferredFi.save({\n transientError: true,\n contingencies: {\n DEFAULT: function DEFAULT() {}\n }\n });\n }\n\n logger.info('checkout_fpti', { 'pref_fi_set': '0' });\n\n return _angular.$q.when();\n }\n },\n lifecycle: {\n reenter: function reenter() {\n var msgKeys = this.checkoutSession.get('message.msgKeys', []);\n\n if (msgKeys.indexOf('confirmUpop.confirmUpopOrChooseAltMethod') === -1) {\n this.showUnconfirmedUpopMsg = !!this.checkoutSession.unconfirmed_upop;\n }\n\n // Reset the selectedmethod indicator and state change listener\n if (this.setupMultipleFi) {\n this.setupMultipleFi();\n }\n\n var instrumentId = this.checkoutSession.get('fundingOptions.plans.0.primaryFs.id');\n\n // If FS has changed due to an update, reset the preferred FI checkbox\n if (this.makeFiPreferred && this.makeFiPreferred.fiId !== instrumentId) {\n _logger.$logger.info('checkout_fpti', { 'pref_fi_option_shown': '1' });\n this.makeFiPreferred.selected = false;\n }\n\n this.topupError = false; // set default value to false (hide error when enter)\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'prepare_review'\n }, createReviewFptiPayload({ checkoutSession: this.checkoutSession })));\n\n // TODO: turn off `xo_hermes_preferred_expired_msg_review_page` since currently\n // it's not running. However, AuthRate team will be running this experiement again\n // this.showExpiredMsg = $ExpiredMsgFactory.showExpiredMsg(\n // this.isNmj,\n // this.checkoutSession\n // );\n\n // if (this.showExpiredMsg) {\n // $ExpiredMsgFactory.getPreferredExpiredPxpResult().then(result => {\n // this.isNmjexpired = result === 'xo_hermes_preferred_expired_msg_review_page_nmj_treatment' ? true : false;\n // this.preferredExpired = this.checkoutSession.getDisallowedPreferred();\n // });\n // }\n\n this.checkForIxoShippingMethods();\n },\n populate: function populate() {\n if (this.checkoutCart.isWalletTokenization()) {\n (0, _jquery2['default'])('#outerWrapper').addClass('tokenization topup');\n var windowHeight = window.innerHeight || document.documentElement && document.documentElement.clientHeight;\n var footerHeaderHeight = document.querySelector('xo-header .paypalHeader').clientHeight + document.querySelector('xo-footer .footer').clientHeight;\n\n document.querySelector('.review .reviewTopup').style.minHeight = windowHeight - footerHeaderHeight - 5 + 'px'; // 5px for header/footer alignment\n }\n },\n exit: function exit() {\n if (this.checkoutCart.isWalletTokenization()) {\n (0, _jquery2['default'])('.tokenization').removeClass('topup');\n }\n _factory3.$RewardsCheckboxFactory.destroy();\n }\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.choiceBalanceCheckboxState = _factory6.$BalanceFactory.get();\n $scope.tokenizedFactoryState = _tokenizedFactory.$TokenizedFactory.get();\n $scope.noBalanceFactoryState = _factory2.$NoBalanceFactory.get();\n\n $scope.creditSharedInfo = _credit.$CreditSharedInfoModel.instance();\n\n $scope.isThirdPartyWalletExperience = function () {\n var experience = _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n\n return experience === 'BAIDU_EXPERIENCE' || experience === 'VENMO_EXPERIENCE';\n };\n\n $scope.determineThirdPartyWalletExperience = function () {\n return _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n };\n\n $scope.creditParentContext = {\n populated: false,\n newMember: {},\n showCreditOffer: true // Flag for experimenting with display of the Credit Offer based on CEP\n };\n\n $scope.memberSegment = _marketingoffer2.$MemberSegmentModel.instance();\n\n $scope.showCreditPlacement = function () {\n // for xo-offer handling\n $scope.creditParentContext.newMember.creditOffer = $scope.memberSegment && $scope.memberSegment.creditOffer;\n\n var show = !$scope.isThirdPartyWalletExperience() && $scope.creditParentContext.populated && $scope.creditParentContext.showCreditOffer && !_angular.$rootScope.showFiSelectPage && ($scope.checkoutSession.creditOffer || $scope.isPPCReuseAndNotSelected());\n\n return show;\n };\n $scope.isProcessorDeclineExperiment = false;\n\n var applyNewMemberVariant = function applyNewMemberVariant() {\n return _newMember.$NewMemberEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n // feature flag for one page nmj experience\n var isNmjDesign1 = $scope.isNmjDesign1 = variant === 'one_page';\n // feature flag for one page nmj design 2 experience\n var isNmjDesign2 = $scope.isNmjDesign2 = variant === 'design_2';\n // feature flag for one page nmj design 3 experience\n var isNmjDesign3 = $scope.isNmjDesign3 = variant === 'design_3';\n // umbrella flag for nmj experience\n var isNmj = $scope.isNmj = isNmjDesign1 || isNmjDesign2 || isNmjDesign3;\n\n $scope.showViewYourPaymentRights = (isNmjDesign2 || isNmjDesign3) && _squid.$locale.country === 'US';\n $scope.showGreyHeader = $scope.isNmjDesign2 || $scope.isNmjDesign3;\n $scope.nmjExperience = {\n one_page: $scope.isNmjDesign1,\n design_2: $scope.isNmjDesign2,\n design_3: $scope.isNmjDesign3\n };\n\n // set assist-banner content based on type of nmj flow - if any\n var isPayNow = $scope.useraction === 'commit';\n var userName = $scope.auth.first_name ? $scope.auth.first_name : $scope.auth.email;\n\n if (isNmjDesign1) {\n $scope.assistBannerHeader = _squid.$locale.content.get('memberReview.assistHeader_1page');\n $scope.assistBannerBody = _squid.$locale.content.get(isPayNow ? 'memberReview.assistBody_paynow_1page' : 'memberReview.assistBody_continue_1page');\n } else if ($scope.showGreyHeader) {\n if (isPayNow) {\n $scope.headerMsg = (0, _squid.$renderContent)('memberReview.nmjDesign2HeaderMsgPayNow', { userName: userName });\n } else {\n $scope.headerMsg = (0, _squid.$renderContent)('memberReview.nmjDesign2HeaderMsgContinue', { userName: userName });\n }\n }\n $scope.creditParentContext.newMember.variant = variant;\n $scope.creditParentContext.newMember.useCEPDecision = isNmj;\n $scope.creditParentContext.populated = true;\n $scope.showPaypalPolicy = !$scope.isThirdPartyWalletExperience() && $scope.showPaypalPolicies && !$scope.showViewYourPaymentRights;\n $scope.showPaymentRights = !$scope.isThirdPartyWalletExperience() && $scope.showPaypalPolicies && $scope.showViewYourPaymentRights;\n _logger.$logger.info('member_ryi_variant_' + (variant || 'unknown'), {\n isNmj: isNmj,\n variant: variant\n });\n triggerPersonalizedBanner();\n });\n };\n\n var triggerPersonalizedBanner = function triggerPersonalizedBanner() {\n $scope.personalizedBanner.trigger();\n };\n\n if ($scope.isThirdPartyWalletExperience()) {\n // log buyer type for third Party usecases\n _logger.$logger.info('buyer_info', {\n fpti_buyer_type: $scope.determineThirdPartyWalletExperience() === 'VENMO_EXPERIENCE' ? 'Guestuser_venmo' : 'nonloginmember_benteley'\n });\n } else {\n // log existing buyer\n _logger.$logger.info('buyer_info', { fpti_buyer_type: 'Existinguser' });\n }\n\n // ----------------- OUTRO PXP VARS - START -------------------- //\n // NOTES: `xo_hermes_exit_msg` pxp has ramped to 100% and will always\n // return `xo_hermes_exit_msg_option5` treatment.\n // See: https://engineering.paypalcorp.com/pxptool/configuration?exptId=2609&version=9\n var pxpMerchNameLimit = 20; // max length of the merchant name\n var pxpMerchName = void 0; // the brand or merchant name - resolved after retrieving appdata\n\n // ----------------- OUTRO PXP VARS - END -------------------- //\n $scope.token = _angular.$rootScope.token;\n $scope.backUri = 'checkout.review';\n $scope.installmentNotSelected = false;\n $scope.installment = {\n showBanner: false,\n showCYCO: false,\n showCreditExample: false\n };\n\n /* Flag to determine whether merchant supports callback shipping options for given address\n 1. Default : true\n 2. shippingRegionSupported : false -> Show shipping region not supported error in review page and do not allow Pay\n */\n $scope.instantUpdateFeature = {\n shippingRegionSupported: true\n };\n $scope.shippingChangeFeature = {};\n\n var initAndCallOnShippingChange = function initAndCallOnShippingChange() {\n $scope.shippingChangeFeature = (0, _shippingChangeFeature.createShippingChangeFeature)($scope.token, $scope.checkoutCart, $scope.checkoutSession, $scope.checkoutAppData, function () {\n return $scope.checkForIxoShippingMethods();\n });\n $scope.shippingChangeFeature.callOnShippingChange();\n };\n\n // PAD Toggle feature\n $scope.padToggleFeature = {\n applicable: false,\n checkboxEnabled: false,\n showCheckbox: false,\n defaultPlan: false,\n pxpControlEnabled: false,\n fptiLogged: false,\n multiFiCheckboxStates: {}\n };\n\n // 'continue' or 'pay now' button text\n $scope.payButtonText = function () {\n return '';\n };\n $scope.isGCcountry = (_squid.$config.giftCardSupportedCountries || '').indexOf(_squid.$locale.country) > -1;\n $scope.showPaypalPolicies = (0, _squid.$featureCountries)('showPaypalPolicies').indexOf(_squid.$locale.country) > -1;\n $scope.makeAddrPreferred = {\n shown: false,\n selected: false\n };\n $scope.showPolicyAgreement = (0, _squid.$feature)('showPolicyAgreement');\n\n var _ref2 = window.xprops || {},\n _ref2$experience = _ref2.experience,\n experience = _ref2$experience === undefined ? { facebook: false, autoBA: false } : _ref2$experience;\n\n $scope.isFacebookBAIntegration = experience.facebook;\n $scope.isMessengerBAIntegration = _integration.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n $scope.isPrechecked = _fbMessenger2['default'].PRECHECKED_COUNTRIES.indexOf(_squid.$locale.country) >= 0;\n\n $scope.personalizedBanner = {\n show: false,\n trigger: function trigger() {\n var isOneTouchBanner = $scope.auth.rememberedOT() && (0, _squid.$feature)('oneTouchPersonalization');\n var newMemberDesign1 = $scope.isNmjDesign1;\n\n $scope.personalizedBanner.show = newMemberDesign1 || isOneTouchBanner;\n }\n };\n\n $scope.optin_toggle = {\n isEnabled: false,\n value: false,\n showExpandedTerms: true,\n setValue: function setValue(val) {\n this.value = val;\n // this.showExpandedTerms = false; // hide terms upon user interaction\n _logger.$logger.debug('ryi_optin_toggle_setValue', {\n value: this.value,\n showExpandedTerms: this.showExpandedTerms\n });\n }\n };\n _logger.$logger.debug('kmliUpsell review: init');\n _kmliUpsell.$KmliUpsell.init(_angular.$rootScope.token, false, true);\n var creditBannerRegister = _angular.$rootScope.$on('allLoaded', function () {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T1' });\n creditBannerRegister();\n });\n _angular.$rootScope.$on('$destroy', creditBannerRegister);\n\n function optInUser() {\n // eslint-disable-line no-unused-vars\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_optin'\n });\n $scope.optin_toggle.setValue(true);\n var optinSource = 'checkoutToggle';\n var silentSpinner = true;\n\n return _ul.$ul.optInToOneTouch(_angular.$rootScope.token, _squid.$locale.country, _squid.$locale.lang, silentSpinner, {\n 'stateName': 'OT_Toggle',\n 'transInfix': 'process_optin'\n }, optinSource).then(function (res) {\n _logger.$logger.debug('ryi_optin_toggle_process_optin');\n })['catch'](function (err) {\n // eslint-disable-line handle-callback-err\n _logger.$logger.debug('ryi_optin_toggle_process_optin_Error', {\n 'int_error_description': err && err.message\n });\n });\n }\n\n function optOutUser() {\n // eslint-disable-line no-unused-vars\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_optout'\n });\n return $scope.auth.action('optout', { silent: true }).then(function (res) {\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'process_optout'\n });\n $scope.$applyAsync(function () {\n var bannerElement = $element.find('.oneTouchBanner');\n\n bannerElement.addClass('leave_animation');\n _logger.$logger.debug('ryi_optin bannerElement animate');\n (0, _angular.$timeout)(function () {\n $scope.optin_toggle.setValue(false);\n $scope.optin_toggle.isEnabled = false;\n }, 1400);\n });\n })['catch'](function (err) {\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'process_optout',\n 'error_source': 'identityauthorizationserv',\n 'int_error_code': 'optout_failure',\n 'int_error_description': err && err.message\n });\n });\n }\n\n $scope.onTouchToggle = function (value) {\n _logger.$logger.debug('optin_toggle_change_attempt', {\n 'ryi_optin': $scope.optin_toggle,\n 'remembered': $scope.auth.remembered,\n 'value': value\n });\n if ($scope.optin_toggle.isEnabled) {\n if (value) {\n optInUser();\n } else {\n optOutUser();\n }\n }\n };\n\n $scope.tagFamilyComputer = function () {\n // creates a log to tag device as family computer.\n // if we can distinguish between single user, family computer and shared computer\n // we may be able to offer a way to switch accounts\n var buyer_id = $scope.auth.buyer_id;\n var logPayload = {\n localStorageEnabled: false,\n isMobile: _index2.$DeviceInfo.isMobile()\n };\n\n if (_squid.$util.localStorageEnabled()) {\n var family_device_key = 'family_device_test';\n var public_device_key = 'public_device_test';\n\n logPayload.localStorageEnabled = true;\n\n var objStr = localStorage.getItem(family_device_key);\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest === 'true') {\n // dont overuse localStorage there is a size limit\n localStorage.removeItem(family_device_key);\n logPayload.isPublicDevice = true;\n } else {\n var buyerList = objStr ? JSON.parse(objStr) : [];\n\n if (buyerList.indexOf(buyer_id) === -1) {\n buyerList.push(buyer_id);\n }\n // assuming 5 or less users on a device as family computer\n logPayload.isFamilyDevice = Boolean(buyerList.length > 1 && buyerList.length < 6);\n logPayload.isPublicDevice = Boolean(buyerList.length > 20);\n logPayload.userCount = buyerList.length;\n objStr = JSON.stringify(buyerList);\n localStorage.setItem(family_device_key, objStr);\n localStorage.setItem(public_device_key, logPayload.isPublicDevice.toString());\n }\n }\n var eligibility_reason = 'localStorage:' + logPayload.localStorageEnabled + '_isPublicDevice:' + logPayload.isPublicDevice + '_isFamilyDevice:' + logPayload.isFamilyDevice + '_userCount:' + logPayload.userCount;\n\n _logger.$logger.debug('family_device_test', logPayload);\n _logger.$logger.info('checkout_fpti', {\n 'from': 'family_device_test',\n 'to': 'process_elg_chk',\n 'eligibility_reason': eligibility_reason\n });\n };\n\n function stickyCTA() {\n return _eligibility.$stickyCTA.instance().getEligibility().then(function (eligibility) {\n $scope.stickyEligibility = eligibility;\n });\n }\n\n // Format the informal name if populated\n function setInformalName() {\n if ($scope.auth) {\n $scope.formattedNameInformal = (0, _squid.formatNameInformal)({\n first_name: $scope.auth.first_name,\n last_name: $scope.auth.last_name\n }) || $scope.auth.email;\n }\n }\n\n function donationAuthorize() {\n var _$GiveAtCheckoutFacto = _factory.$GiveAtCheckoutFactory.get(),\n donateCheckboxSelected = _$GiveAtCheckoutFacto.donateCheckboxSelected,\n charity = _$GiveAtCheckoutFacto.charity,\n tracking = _$GiveAtCheckoutFacto.tracking;\n\n if (donateCheckboxSelected) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GIVE_AT_CHECKOUT',\n to: 'process_give_at_checkout',\n gac_model: charity.model_id,\n gac_npid: charity.nonprofit_id\n });\n\n if (tracking && tracking.click_url) {\n _marketingoffer.$fireMORSBeacon.fireBeacon(tracking.click_url);\n }\n\n return _donation.$GiveAtCheckoutModel.instance().action('donationAuthorize', {\n data: {\n 'ec_token': _angular.$rootScope.token,\n 'nonprofit_id': charity.nonprofit_id,\n 'charity_name': charity.name,\n 'money': {\n 'value': charity.amount,\n 'currency_code': charity.currency\n }\n },\n success: function success() {\n return _logger.$logger.info('donation_authorize_success', {});\n },\n error: function error() {\n return _logger.$logger.error('donation_authorize_failure');\n }\n });\n }\n }\n\n function updateAddressAsPreferred() {\n if ($scope.makeAddrPreferred.shown) {\n _logger.$logger.info('makeAddrPreferred.shown', {});\n }\n\n if ($scope.makeAddrPreferred.selected) {\n _logger.$logger.info('makeAddrPreferred.selected', {});\n // Ignore all errors from setPreferred api, by passing transientError as true\n return $scope.checkoutSession.shipping.action('setPreferred', {\n transientError: true\n });\n }\n return _angular.$q.when();\n }\n\n function setStickyInstrument() {\n if (!_squid.$config.features.DEFAULT.enableStickyFunding) {\n return _angular.$q.when();\n }\n\n // If the currently selected plan is not saved in the checkoutSession, make the call to save it.\n // For BA no purchase cases, the only way we track it is in the checkout session, so it should already be saved (selected id will equal sticky id).\n // For all other purchase cases, we need to look at the first in fundingOptions and match it to futurePaymentInstruments\n var savedSticky = $scope.checkoutSession.selectedFuturePaymentInstrument;\n var selectedSticky = $scope.checkoutSession.getSelectedStickyInstrument();\n\n // selectedSticky will not be populated if this isn't a billing case.\n if (!selectedSticky) {\n return _angular.$q.when();\n }\n\n // If we haven't saved the selected sticky instrument yet,\n // make the API call to save it\n if (!savedSticky || savedSticky.instrument_id !== selectedSticky.instrument_id) {\n return $scope.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: selectedSticky.instrument_id\n }\n });\n }\n return _angular.$q.when();\n }\n\n function linkAuthConsent() {\n /* Check if its BA flow and we have merchant consent code */\n if ($scope.checkoutCart.isBilling() && $scope.checkoutCart.billing) {\n // Getting merchant account's billing consent code i.e. legal_text_code\n var billingConsentCode = $scope.checkoutCart.billing.consent_code;\n var FB_CONSENT_CODE = 'facebookp2p';\n var authConsentModel = _user.$AuthConsentModel.instance();\n\n if (billingConsentCode === FB_CONSENT_CODE) {\n return authConsentModel.action('link', {\n data: {\n 'ba_token': _squid.$meta.baToken\n },\n success: function success() {\n return _logger.$logger.info('link_authconsent_success', {});\n }\n });\n }\n }\n }\n\n function setWalletTopupPreferences() {\n if ($scope.checkoutCart.isWalletTokenization()) {\n $scope.walletPreferences = _fi.$WalletPreferences.instance(_angular.$rootScope.token);\n return $scope.walletPreferences.save();\n }\n }\n\n function isValidPinSetup() {\n if ($scope.walletPinModel && $scope.walletPinModel.isSetupEligible()) {\n if (!$scope.walletPinModel.userPin) {\n return false;\n }\n }\n return true;\n }\n\n function prepareTokenizedWallet() {\n if ($scope.checkoutCart.isWalletTokenization()) {\n return (0, _squid.$populate)($scope, {\n walletPreferences: _fi.$WalletPreferences.instance(_angular.$rootScope.token),\n walletPinModel: _app.$TokenizedWalletPinModel.instance(_angular.$rootScope.token),\n tokenizedFundingCapabilitiesModel: _app.$TokenizedFundingCapabilitiesModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken,\n country: $scope.auth.country\n }\n })\n }).then(function (result) {\n var fundingInstrument = $scope.walletPreferences.getPreferred();\n var instrument_id = fundingInstrument.instrument_id;\n var defaultTopupFI = _squid.$util.find($scope.checkoutSession.topupFundingSources, function (fs) {\n return fs.instrument_id === instrument_id;\n }) || {};\n var defaultDirectFI = _squid.$util.find($scope.checkoutSession.futurePaymentInstruments, function (fs) {\n return fs.instrument_id === instrument_id;\n }) || {};\n var pinStatus = 'default_pin_unavailable';\n\n if ($scope.walletPinModel.isPinIdPresent()) {\n pinStatus = 'already_exist';\n } else if ($scope.walletPinModel.getPinOrigin() !== 'UNSET') {\n pinStatus = 'pin_error';\n } else if ($scope.walletPinModel.getSuggestedPin()) {\n pinStatus = 'default_pin_available';\n }\n\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'prepare_review',\n 'context_id': $scope.token,\n 'context_type': 'EC-Token',\n 'billing_token': _squid.$meta.baToken,\n 'default_topup_fi': defaultTopupFI.type,\n 'default_direct_fi': defaultDirectFI.type,\n 'pin': pinStatus,\n 'flag': $scope.checkoutSession.get('sepa_mandate.bankId') ? 'sepa' : undefined\n });\n });\n }\n return _angular.$q.when();\n }\n\n function checkJSV4PaymentDetails() {\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.getPaymentDetails && ($scope.ixoShippingMethods || this.ixoShippingMethods)) {\n return window.xprops.supplement.getPaymentDetails($scope.checkoutAppData.get('payment_id')).then(function (details) {\n if (!(details && details.selected_shipping_method)) {\n $scope.checkoutSession.message = {\n type: 'error',\n msgKeys: ['shipping.bopisErrorMessage']\n };\n throw new Error('IXO_CANNOT_CHECKOUT_WITHOUT_SHIPPING_SELECTION');\n } else {\n delete $scope.checkoutSession.message;\n }\n });\n }\n return _angular.$q.when();\n }\n\n function show3DSLightbox() {\n var cc_id = $scope.checkoutSession.get('resolve_3ds.ccId');\n var plans = $scope.checkoutSession.get('plan.sources', null);\n var plan = plans && plans.filter(function (e) {\n return e.instrument_id === cc_id;\n })[0].amount || null;\n\n $scope.resolve_3ds_data = {\n cc_id: cc_id,\n flow_id: 'HERMES',\n merchant_id: $scope.payee.get('merchant.id'),\n merchant_country_code: $scope.checkoutAppData.get('merchant.merchant_country'),\n transaction_amount_currency: plan && plan.currency_code || null,\n transaction_amount_value: plan && plan.amount || null\n };\n $scope.launch3DSResolver = true;\n }\n\n function setProcessorDeclineMessage(checkoutSession) {\n var declinedInstruments = checkoutSession.declinedInstruments;\n if (declinedInstruments && declinedInstruments.length > 0) {\n _factory5.$AddCardFactory.getIssuerDeclineElmoResult().then(function (treatment) {\n $scope.isProcessorDeclineExperiment = treatment === 'Trmt_xo_hermesnodeweb_issuer_decline_1';\n var processorDeclinedMsg = _fiMessages.$fiMessages.processorDeclinedMsg($scope.checkoutSession, true, treatment, $scope.auth, $scope.fiMeta.wallet, $scope.formattedNameInformal);\n\n if (processorDeclinedMsg) {\n $scope.checkoutSession.message = {\n type: processorDeclinedMsg.type,\n msgs: [processorDeclinedMsg.msg]\n };\n }\n });\n }\n }\n\n function getPadToggleStatus() {\n var toggleStatus = 'NA'; // NOT APPLICABLE status\n\n if (_factory7.$PADFactory.isPadToggleFeatureApplicable($scope.padToggleFeature, $scope.isPadToggleEnabled)) {\n if ($scope.padToggleFeature.checkboxEnabled) {\n toggleStatus = 'ON';\n } else {\n toggleStatus = 'OFF';\n }\n }\n return toggleStatus;\n }\n\n /**\n * `Exit message` feature is currently only applied to:\n * 1) Only in US\n * 2) user action **not** \"commit\"\n * 3) not a billing agreement\n * 4) `DONE_PAGE` integration is false\n * @returns {boolean}\n */\n var applyExitMessage = function applyExitMessage() {\n return _squid.$locale.country === 'US' && $scope.useraction !== 'commit' && !$scope.checkoutCart.isBilling() && !_integration.$integration.getConfig('DONE_PAGE');\n };\n\n function authorize() {\n if ($scope.checkoutSession.resolve_3ds) {\n return show3DSLightbox();\n }\n\n function isXoonUpopRedirect() {\n if (!($scope.checkoutSession && $scope.checkoutSession.get('errorData.resolution.data.fi.type'))) {\n return false;\n }\n\n return _squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon' && $scope.checkoutSession.errorData.resolution.name === 'PAYER_TO_AUTHENTICATE_CARD' && !$scope.checkoutSession.errorData.resolution.data.alternate_options && $scope.checkoutSession.errorData.resolution.data.fi.type.toUpperCase() === 'CUP';\n }\n\n if ($scope.checkoutSession.unconfirmed_upop || isXoonUpopRedirect()) {\n var card = void 0;\n\n if ($scope.checkoutSession.unconfirmed_upop) {\n card = $scope.checkoutSession.unconfirmed_upop;\n } else {\n card = $scope.checkoutSession.errorData.resolution.data;\n }\n\n $scope.cardModel = new _fi.$AddCardModel({});\n $scope.cardModel.id = card.fundingId;\n $scope.cardModel.card = new _fi.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n _uiRouter.$state.go('.confirmUpop');\n return;\n }\n\n // Currently, exit message will only be applicable to US. If we'd like\n // to expand exit message feature to other countries, we will need\n // translation from other countries.\n if (applyExitMessage()) {\n // HACK - REMOVE and REFACTOR ONCE DONE\n // overload base.processing in strings\n // since quid is hardcoded to use string each time\n // required only for testing - remove and refactor,\n // to properly allow for dynamic spinner messages\n\n // resolve merchant name\n var merchantName = pxpMerchName;\n // flag when name is missing or longer than 20 chars\n var badMerchantName = !merchantName || merchantName.length > pxpMerchNameLimit;\n var outroMsg = badMerchantName ? 'We’re sending you back to the merchant to complete this purchase.' : 'We\\u2019re sending you back to ' + merchantName + ' to complete this purchase.';\n\n // capture current route\n var reviewRoute = _uiRouter.$state.current;\n\n // listen to !startLoad\n // this is the only way we can then manipulate the spinner\n var cancelOutroOverride = _angular.$rootScope.$on('startLoad', function () {\n // if this is the review route...\n // this is needed, in case the session has ended\n // at this point, we need this listener to do nothing\n if (_uiRouter.$state.current === reviewRoute) {\n // force spinner styling and content\n // this is delayed, because (for some reason)\n // the spinner isn't in the DOM _yet_,\n // even though #showSpinner() fired... UGH!\n (0, _angular.$timeout)(function () {\n var spinnerMessageEl = (0, _jquery2['default'])('#spinner-message');\n\n if (spinnerMessageEl) {\n spinnerMessageEl = spinnerMessageEl.css({\n width: '130%',\n marginLeft: '-15%'\n });\n if (spinnerMessageEl) {\n // setting here, since `ng-bind-html` didn't work in spinner directive\n spinnerMessageEl.html(outroMsg);\n }\n }\n }, 1);\n } else {\n // (otherwise) when no longer the review route...\n // this means something happened before redirect\n // likely an expired session\n // In that case we'll remove this listener\n // It will just be re-added, in the next redirect attempt\n cancelOutroOverride();\n }\n });\n }\n\n var cardBackup = $scope.checkoutSession.cardBackup.getPlan();\n\n _logger.$logger.info('checkout_fpti', {\n from: 'processor_decline_retry',\n to: 'processor_decline_retry_eligibility',\n 'is_bkp_funding_chosen': cardBackup && cardBackup.planId ? 1 : 0\n });\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'process_review'\n }, createReviewFptiPayload({ checkoutSession: $scope.checkoutSession, isProcessTransition: true })));\n\n var isGoogleAccountLinking = _tokenizedFactory.$TokenizedFactory.isGoogleAccountLinking();\n\n // for Google account linking - make a batch call which includes \"authorize\" call first call\n // and updateIssuaceScope as second\n if (isGoogleAccountLinking) {\n _tokenizedFactory.$TokenizedFactory.updateIssuanceScope();\n }\n\n return $scope.checkoutSession.action('authorize', {\n batch: isGoogleAccountLinking && _tokenizedFactory.$TokenizedFactory.getAuthorizeBatch(),\n data: {\n alternateFundingOptionId: cardBackup && cardBackup.planId\n },\n success: function success() {\n if ($scope.checkoutSession.get('plan.paypal_credit')) {\n _logger.$logger.info('checkout_fpti', { 'ppc_reuse_status': 'success' });\n }\n\n var padToggleStatus = getPadToggleStatus();\n\n if (padToggleStatus === 'ON') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOnSuccess'\n });\n } else if (padToggleStatus === 'OFF') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOffSuccess'\n });\n }\n\n // for all tokenized flows except google account linking - log FPTI in authorize sucess callback\n if (!isGoogleAccountLinking && $scope.checkoutCart.isWalletTokenization()) {\n _tokenizedFactory.$TokenizedFactory.logProcessReviewToFPTI();\n }\n\n // Just in case, cancel the state change listener checking if updateFs needs to be called\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n if ($scope.checkoutSession.get('sepa_mandate.bankId')) {\n return _uiRouter.$state.go('checkout.sepapage');\n }\n\n // xchild = V4 Incontext Integration. Do not initiate Payment.\n if (!window.xchild && $scope.checkoutAppData.doec_on_approve()) {\n return _uiRouter.$state.go('checkout.pay');\n }\n\n // for all flows except google account linking - go to end of checkout\n // for google account linking - redirect happens in \"updateIssuanceScope\" call (see tokenizedFactory)\n if (!isGoogleAccountLinking) {\n return _uiRouter.$state.go('checkout.end');\n }\n },\n contingencies: {\n // Smart $x authorization check on the card fails\n CREDIT_CARD_AUTH_FAILED: function CREDIT_CARD_AUTH_FAILED() {\n $scope.checkoutSession.invalidate();\n $scope.checkoutSession.smartDollarAuthFailed = true;\n if ($scope.checkoutSession.selectedFuturePaymentInstrument) {\n // Invalidate the saved FI selection to avoid display of stale selection on review page.\n delete $scope.checkoutSession.selectedFuturePaymentInstrument;\n }\n return $scope.checkoutSession.action('create', {\n success: function success() {\n $scope.checkoutSession.smartDollarAuthFailed = false;\n $scope.errorHandlerHelper.addPageError('payment.authFailureMultipleFIs');\n return _uiRouter.$state.go('checkout.review', { message: 'CREDIT_CARD_AUTH_FAILED' });\n }\n });\n }\n }\n });\n }\n\n function setShowShippingMethodProperty() {\n return (0, _squid.$populate)($scope, {\n shippingRulesSummary: _shippingMethod.$ShippingRuleSummaryModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n merchant_id: $scope.payee.get('merchant.id'),\n currency_code: $scope.checkoutCart.get('purchase.amounts.total.currency_code')\n }\n })\n }).then(function () {\n if ($scope.shippingRulesSummary.isSnTEnabled) {\n _logger.$logger.info('shipping_rules_summary_snt_enabled');\n } else {\n _logger.$logger.info('shipping_rules_summary_snt_disabled');\n }\n $scope.showShippingMethod = $scope.shippingRulesSummary.isSnTEnabled || $scope.isInstantUpdateAPIFlow;\n return;\n });\n }\n\n function show3DSDeclineMsg(declineAfter3DSAccept) {\n // Instrument number of available plans for 3DS decline case.\n var numberOfPlans = $scope.checkoutSession.getPlanList() ? $scope.checkoutSession.getPlanList().length : 0;\n\n _logger.$logger.info('3DS_decline_plan_count', { 'plans': numberOfPlans });\n\n var key = 'threeDS.memberDecline';\n\n if (declineAfter3DSAccept) {\n key = 'threeDS.memberDeclineAfter3DSAccept';\n }\n\n var card = $scope.checkoutSession && $scope.checkoutSession.resolve_3ds;\n\n if (card) {\n var msg = (0, _squid.$renderContent)(key, {\n cardType: card.type,\n last4: card.number\n });\n\n $scope.checkoutSession.message = {\n msgs: [msg],\n type: 'warning'\n };\n }\n }\n\n /**\n * call patchXO API to clear the 3DS contingency and then call authorize API.\n */\n function clear3DSContingency() {\n var resolve_3ds = $scope.checkoutSession.resolve_3ds || {};\n\n return $scope.checkoutSession.action('clear3DSContingency', {\n data: {\n ccId: resolve_3ds.ccId\n },\n success: function success() {\n // Clear3DSContingency can change the plan ids, so reset the multipleFi indicator after this is called\n if ($scope.setupMultipleFi) {\n $scope.setupMultipleFi();\n }\n\n if (!$scope.checkoutSession.resolve_3ds) {\n return authorize();\n } else {\n // Symphony is not able to clear the 3DS contingency\n show3DSDeclineMsg(true);\n }\n }\n });\n }\n\n $scope.onComplete3DSHandler = function (status) {\n $scope.launch3DSResolver = false;\n if (status === 'success') {\n return clear3DSContingency();\n } else if (status === 'decline') {\n // 3DS got declined\n show3DSDeclineMsg();\n }\n };\n\n $scope.upopCallbacks = {\n onConfirmUpopSuccess: function onConfirmUpopSuccess() {\n _uiRouter.$state.go('checkout.review');\n return $scope.checkoutSession.action('clearContingency', {\n data: {\n contingency: 'UNCONFIRMED_UPOP',\n ccId: $scope.checkoutSession.get('unconfirmed_upop.fundingId') || $scope.checkoutSession.get('errorData.resolution.data.fundingId')\n },\n success: function success() {\n if (!$scope.checkoutSession.unconfirmed_upop) {\n return authorize();\n } else {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['confirmUpop.confirmUpopOrChooseAltMethod']\n };\n }\n }\n });\n },\n onConfirmUpopCancel: function onConfirmUpopCancel() {\n _uiRouter.$state.go('checkout.review');\n $scope.showUnconfirmedUpopMsg = false;\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['confirmUpop.confirmUpopOrChooseAltMethod']\n };\n }\n };\n\n $scope.errorHandlerHelper = {};\n $scope.errorHandlerHelper.addPageError = function (contentKey, dynamicValuesInContent) {\n var messages = [];\n var msg = void 0;\n\n if (dynamicValuesInContent) {\n msg = (0, _squid.$renderContent)(contentKey, dynamicValuesInContent);\n } else {\n msg = _squid.$locale.content.get(contentKey);\n }\n\n messages.push(msg);\n $scope.checkoutSession.message = {\n msgs: messages,\n type: 'error'\n };\n };\n\n $scope.errorHandlerHelper.clearPageErrors = function () {\n $scope.checkoutSession.message = '';\n };\n\n $scope.returnFromCape = function (isCapeReturnKey) {\n return $scope.creditDataModel.action('readCreditKey', {\n data: {\n capeKey: isCapeReturnKey\n },\n success: function success(res) {\n // if CAPE includes this field inside the mayfly payload, we will show-up a warning message\n // on the top of the page ('offers.bmlInWalletDeniedMsg') regarding the declined credit application\n if (res.show_cape_declined_msg) {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['offers.bmlInWalletDeniedMsg']\n };\n }\n\n if (res.financial_instrument_id) {\n var financial_instrument_id = res.financial_instrument_id.indexOf('BC') !== 0 ? 'BC' + res.financial_instrument_id : res.financial_instrument_id;\n\n return $scope.checkoutSession.fundingOptions.action('update', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: financial_instrument_id\n },\n success: function success(result) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['offers.bmlInWalletSuccessMsg']\n };\n\n if ($scope.setupMultipleFi) {\n $scope.setupMultipleFi();\n }\n }\n });\n }\n\n // User does not have any FI in wallet and they choose to pay in full.\n else if (!$scope.checkoutSession.get('plan.sources') && $scope.checkoutSession.isCreditPromoted) {\n _uiRouter.$state.go('checkout.pageAddCard.addCardFlow.addCard');\n } else if ($scope.creditDataModel.isCapeInternalServiceError()) {\n // Todo Show error message from CAPE\n return _angular.$q.when();\n } else {\n return _angular.$q.when();\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('read_cape_key_failure');\n return _angular.$q.when();\n }\n }\n });\n };\n\n var ifPadThenUpdatePlan = function ifPadThenUpdatePlan(selectedMethodPlanId) {\n // For pad toggle feature with Choice Multi FI experience, we look up the plan ID here\n var padOrIachPlanId = _factory7.$PADFactory.isPadToggleFeatureApplicable($scope.padToggleFeature, $scope.isPadToggleEnabled) && _factory7.$PADFactory.getPadOrIachBankPlanId({\n selectedMethodPlanId: selectedMethodPlanId,\n fundingOptions: $scope.checkoutSession.fundingOptions,\n multiFiCheckboxStates: $scope.padToggleFeature.multiFiCheckboxStates\n });\n\n return padOrIachPlanId ? padOrIachPlanId : selectedMethodPlanId;\n };\n\n /**\n * Decides the plan to use based on\n * Pad, Credit, Rewards and any other\n * bussiness logic\n *\n * @returns planID\n */\n var decidePlanSelection = function decidePlanSelection() {\n // TODO: Consider moving this to a generic wallet/plan factory\n // this will avoid repetition in RYI, SelectFI and PayWith\n var defaultPlan = $scope.checkoutSession.get('plan.sources') && $scope.checkoutSession.get('plan.sources')[0];\n var hasRewards = _factory3.$RewardsCheckboxFactory.isRewardsPlan($scope.checkoutSession.plan);\n var selectedMethodPlanId = (0, _utils.getSelectedPlan)($scope.selectedmethod, $scope.checkoutSession);\n\n if (!$scope.selectedmethod && !hasRewards) {\n return '';\n }\n\n selectedMethodPlanId = ifPadThenUpdatePlan(selectedMethodPlanId);\n selectedMethodPlanId = _factory3.$RewardsCheckboxFactory.ifRewardsThenUpdatePlan(selectedMethodPlanId, $scope.selectedmethod, $scope.checkoutSession);\n\n // If the plan is already selected, we don't need to duplicate the call\n if (selectedMethodPlanId === (defaultPlan && defaultPlan.id)) {\n return '';\n }\n\n // This is handled in onPay\n if (selectedMethodPlanId === 'applyForPPCRadio') {\n return '';\n }\n return selectedMethodPlanId;\n };\n\n /**\n * Given a plan id perform a selection\n * and handle any errors/contingencies\n *\n * @returns planID\n */\n var doPlanSelection = function doPlanSelection(selectedMethodPlanId) {\n return $scope.checkoutSession.fundingOptions.action('select', {\n data: {\n planId: selectedMethodPlanId\n },\n success: function success(result) {\n $scope.checkoutSession.populate(result);\n\n // for multi fi use case after replan we need to reset index to 0\n // since selected instrument will always be first\n if ($scope.selectedmethod) {\n $scope.selectedmethod.index = 0;\n }\n },\n contingencies: {\n NEED_AUTHENTICATED_CARD: function NEED_AUTHENTICATED_CARD(name, result) {\n // Route to the Confirm Upop page\n if (result && result.resolution) {\n var card = result.resolution.data;\n\n if (card.fundingId && card.fi && card.fi.type) {\n $scope.cardModel = new _fi.$AddCardModel();\n $scope.cardModel.id = card.fundingId;\n $scope.cardModel.card = new _fi.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n }\n }\n\n // Before routing to confirm Upop route, we cancel the state change listener so that we don't call updateFS. At this point, the user has already made their selection, so this is unneeded.\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n // Route to the Confirm Upop page. We'll hold on to this deferred promise until the confirmation flow is finished, so we can then continue the chain or cancel out\n var upopResult = _angular.$q.defer();\n\n // Create the handlers for Upop, specifically for this flow. They will act on the deferred promise when the flow is completed\n $scope.upopCallbacks.isOnUpdate = true;\n $scope.upopCallbacks.onUpdateSuccess = function () {\n // On confirmed, update the checkout session then continue\n return $scope.checkoutSession.fundingOptions.action('update', {\n resultModel: $scope.checkoutSession,\n silent: true,\n data: {\n planId: $scope.cardModel.id\n },\n success: function success() {\n if ($scope.checkoutSession.cvvData) {\n $scope.checkoutSession.set('cvvData.security_code', $scope.cardModel.get('card.security_code'));\n }\n\n // Reset the callback flag\n $scope.upopCallbacks.isOnUpdate = false;\n $scope.setupMultipleFi();\n // Return to this route, resolve the promise\n _uiRouter.$state.go('checkout.review');\n upopResult.resolve();\n }\n });\n };\n $scope.upopCallbacks.onUpdateCancel = function () {\n // Break the promise chain and return to the review page\n $scope.upopCallbacks.isOnUpdate = false;\n $scope.setupMultipleFi();\n upopResult.reject();\n $scope.upopCallbacks.onConfirmUpopCancel();\n };\n\n _uiRouter.$state.go('.confirmUpop');\n return upopResult.promise;\n }\n }\n });\n };\n\n // For the multiple FI variant of the choice experiment:\n // Update the funding option in the plan based on the user's stored selection\n var updateFS = function updateFS() {\n // Decide plan to select based on priority and bussness logic\n var selectedMethodPlanId = decidePlanSelection();\n\n // Perform a selection only if required\n return selectedMethodPlanId ? doPlanSelection(selectedMethodPlanId) : _angular.$q.when();\n };\n\n // The following functions are all used in the `$q.all` promise chain below\n var populateScope = function populateScope() {\n return (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n tokenizedWalletInfoModel: _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve(),\n fiMeta: _index4['default'].instance(_angular.$rootScope.token).fetch()['catch'](_angular.noop)\n });\n };\n\n var initializePadToggleSupport = function initializePadToggleSupport() {\n if ($scope.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n return Experiments.padToggleFeatureSupported().then(function (result) {\n $scope.isPadToggleEnabled = result;\n });\n } else {\n return _angular.$q.when($scope.isPadToggleEnabled = false);\n }\n };\n\n var applyChoiceExperimentVariant = function applyChoiceExperimentVariant() {\n $scope.tagFamilyComputer();\n // Get the choice experiment variant to determine what needs to be shown in the UI\n return _choice.$ChoiceEligibility.instance().getVariant($scope.token).then(function (variant) {\n $scope.choiceVariant = variant;\n var checkboxVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n var multipleFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.multipleFi || [];\n var selectFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.selectFi || [];\n\n if (checkboxVariants.indexOf(variant) !== -1 && !$scope.checkoutCart.isBilling()) {\n // Do setup for preferred checkbox\n $scope.makeFiPreferred = {\n selected: false\n };\n }\n\n $scope.showMultipleFiVariants = multipleFiVariants.indexOf(variant) !== -1;\n\n if ($scope.showMultipleFiVariants) {\n var planList = $scope.checkoutSession.get('plan.sources');\n var defaultPlanId = planList && planList[0] && planList[0].id;\n\n // Do the setup for the multipleFiVariant\n $scope.setupMultipleFi = function () {\n $scope.selectedmethod = {\n index: 0,\n planId: defaultPlanId\n };\n\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n // Before changing state, persist the change that the user selected\n var stateChangeListener = _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {\n $scope.cancelUpdateListener();\n\n // ensure we only listen to state changes initiated from the review page\n if (_uiRouter.$state.fromState.name !== 'checkout.review') {\n return;\n }\n\n // ignore if the FI selection hasn't been updated\n if (defaultPlanId === $scope.selectedmethod && $scope.selectedmethod.planId) {\n return;\n }\n\n event.preventDefault();\n updateFS().then(function () {\n return _uiRouter.$state.go(toState, toParams);\n });\n });\n\n // If the checkout session changes, also change the planId according to the selected index in case plan ids were changed. Save the listener to destroy the handler when changing routes or re-calling setupMultipleFi\n var fundingOptionsListener = $scope.$watch('checkoutSession.fundingOptions', function (newVal, oldVal) {\n if (!newVal) {\n return;\n }\n\n $scope.selectedmethod.planId = newVal.get('plans.' + $scope.selectedmethod.index + '.planId');\n });\n\n $scope.cancelUpdateListener = function () {\n stateChangeListener();\n fundingOptionsListener();\n };\n\n $scope.$on('$destroy', $scope.cancelUpdateListener);\n };\n\n $scope.setupMultipleFi();\n }\n\n if (selectFiVariants.indexOf(variant) !== -1) {\n $scope.selectFiVariant = true;\n }\n })['catch'](function (err) {\n // TODO: Check what happens to PXP errors\n _logger.$logger.error('choice_eligibility_error', err);\n });\n };\n\n var applyMerchantName = function applyMerchantName() {\n // resolve merchant name now, just in case we're in a matching treatment\n pxpMerchName = $scope.checkoutAppData.merchant.brand_name || $scope.checkoutAppData.merchant.merchant_name;\n };\n\n // if IXO is providing shipping methods, we'll send them to xo-review-shipping-options component\n $scope.checkForIxoShippingMethods = function () {\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.getPaymentOptions) {\n return window.xprops.supplement.getPaymentOptions($scope.checkoutAppData.get('payment_id')).then(function (payment) {\n var paymentTransaction = payment && payment.transactions && payment.transactions[0];\n\n $scope.ixoShippingMethods = paymentTransaction && paymentTransaction.item_list && paymentTransaction.item_list.shipping_options;\n if ($scope.ixoShippingMethods) {\n _logger.$logger.info('incontext_shipping_options_exist');\n }\n });\n }\n };\n\n /**\n * Set up $watch for if `showMore` button has been clicked.\n * When `showMore` button has been clicked, we also need to\n * log all FIs that has a cardart FI\n */\n $scope.$watch(function () {\n return _factory4.$ShowMoreFiFactory.get().isShowMoreBtnClicked;\n }, function (clickedMore) {\n // ensure `showMore` button has been clicked for 3FIs pxp\n if (clickedMore) {\n logSessionDetails();\n }\n });\n\n var showGAC = function showGAC() {\n _factory.$GiveAtCheckoutFactory.decideEligibility().then(function (result) {\n $scope.isDonation = _factory.$GiveAtCheckoutFactory.get().eligible;\n var charity = _factory.$GiveAtCheckoutFactory.get().charity;\n\n if (_factory.$GiveAtCheckoutFactory.get().eligible) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GIVE_AT_CHECKOUT',\n to: 'prepare_give_at_checkout',\n gac_model: charity.model_id,\n gac_npid: charity.nonprofit_id\n });\n }\n });\n };\n\n /**\n * Cardart instrumentation for review page comes in a few variations, and\n * it all depends on the pxp result. Following logSessionDetails()\n * logs cardart instrumentation based on:\n *\n * - showMultipleFiVariants pxp\n * - showMultipleFiVariants + 3FI pxp\n * - singleFI pxp\n *\n * See $CardArtInstrument.createPayload() for detailed implementation & explanation\n */\n var logSessionDetails = function logSessionDetails() {\n var isCardArtExp = _cardartInstrument.$CardArtInstrument.isCardArtEnable($scope.fiMeta) && !$scope.isThirdPartyWalletExperience();\n var renderMultipleFi = $scope.showMultipleFiVariants;\n var isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n var isBilling = $scope.checkoutCart.isBilling();\n var disableStickyForMerchant = _squid.$config.disableMerchantForStickyBA.indexOf($scope.payee.get('merchant.id')) > -1;\n var stickyEligible = isBilling && !disableStickyForMerchant;\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'prepare_review'\n }, createReviewFptiPayload({ checkoutSession: $scope.checkoutSession }), isCardArtExp ? _cardartInstrument.$CardArtInstrument.createPayload({\n stickyEligible: stickyEligible,\n isBillingNoPurchase: isBillingNoPurchase,\n renderMultipleFi: renderMultipleFi,\n checkoutSession: $scope.checkoutSession,\n renderSingleFi: !$scope.showMultipleFiVariants,\n showMoreFiState: _factory4.$ShowMoreFiFactory.get()\n }) : null));\n // Log details about checkout session\n };\n\n // Reg E - Regulation E compliance guide mandates invoicing payers see a disclaimer message during payment review when RTR is present.\n // The Remittance Transfer Rule (RTR) is a rule published by the Consumer Financial Protection Bureau.\n // It applies to companies processing remittance transfers of more than $15 USD from a US-based consumer (Sender) to a foreign-based receiver (Recipient).\n var applyInvoicingRegEDetails = function applyInvoicingRegEDetails() {\n // Show invoicing RegE compliance message if its invoicing flow only and if RTR is present\n $scope.showInvoicingRegEMsg = $scope.checkoutAppData.flags.is_invoice_flow && $scope.checkoutSession.showRemittanceDisclosure ? true : false;\n _logger.$logger.info('show_invoicing_regE_msg', $scope.showInvoicingRegEMsg);\n\n if ($scope.showInvoicingRegEMsg) {\n var totalAmount = $scope.checkoutCart.purchase.amounts.total.amount_formatted_currency;\n var merchantName = $scope.checkoutAppData.merchant.brand_name;\n\n // The RegE message differs for cases with and without currency conversion\n if ($scope.checkoutSession.plan.hasConversion()) {\n var total = 0;\n var planSources = $scope.checkoutSession.get('plan.sources');\n var currencyCode = planSources[0].amount.currency_code;\n\n planSources.forEach(function (source) {\n if (currencyCode !== source.amount.currency_code) {\n $scope.showInvoicingRegEMsg = false;\n return;\n }\n\n total = total + Number(source.amount.amount);\n });\n\n var totalInvoicePaymentAmount = (0, _squid.formatCurrency)(total, currencyCode);\n\n $scope.invoicingRegEMsg = (0, _squid.$renderContent)('memberReview.invRegEMsgWithCurrConv', {\n merchantName: merchantName,\n amountInPayerCurrency: totalInvoicePaymentAmount,\n amountInInvCurrency: totalAmount\n });\n } else {\n $scope.invoicingRegEMsg = (0, _squid.$renderContent)('memberReview.invRegEMsg', {\n merchantName: merchantName,\n amount: totalAmount\n });\n }\n }\n };\n\n var applyKmliUpsellEligibility = function applyKmliUpsellEligibility() {\n if (_squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon') {\n var fiModel = $scope.checkoutSession.get('plan.sources');\n\n if (fiModel && fiModel.length && fiModel[0].card_type === 'CHINA_UNION_PAY') {\n $scope.checkoutSession.message = {\n msgKeys: ['confirmUpop.confirmUpopToPay'],\n type: 'warning'\n };\n }\n }\n\n _kmliUpsell.$KmliUpsell.eligible().then(function (eligibility) {\n eligibility.interstitial = eligibility.interstitial ? eligibility.interstitial : {};\n $scope.optin_toggle.isEnabled = eligibility.banner;\n $scope.optin_toggle.value = $scope.auth.rememberedOT() // came in as OneTouch user\n || $scope.auth.isKmliSet // used to set toggle value via interstial\n || $scope.auth.loggedIn() && $scope.auth.refreshToken(); // FirstTime OT (check this for webview case)\n delete $scope.auth.isKmliSet;\n\n $scope.optin_toggle.showExpandedTerms = false; // collapse by default;\n var cookiePayload = {};\n\n if (eligibility.interstitial.eligible) {\n // show optin interstitial only once per user per version\n cookiePayload.ot_inter_shown = eligibility.interstitial.pxpVersion; // cookieList.push({ name: 'ot_inter_shown', value: eligibility.interstitial.pxpVersion });\n }\n if (Object.keys(cookiePayload).length > 0) {\n $scope.auth.action('updateAuthExperience', {\n silent: true,\n data: cookiePayload\n }).then(function (res) {\n _logger.$logger.debug('optin_toggle_cookie_drop_success', res);\n })['catch'](function (err) {\n _logger.$logger.debug('optin_toggle_cookie_drop_err', err);\n });\n }\n _logger.$logger.info('optin_toggle_init', $scope.optin_toggle);\n });\n\n $scope.personalizedBanner.trigger();\n $scope.showRemittanceDisclosure = _index2.$DeviceInfo.isMobile() && $scope.checkoutSession.showRemittanceDisclosure ? true : false;\n };\n\n // applyCreditOptions could potentially redirect out of the RYI.\n var applyCreditOptions = function applyCreditOptions() {\n $scope.creditDataModel = _credit.$CreditDataModel.instance($scope.token);\n var isChangeInstallments = $scope.creditDataModel.isChangeStatus();\n var isCapeReturnKey = $scope.creditDataModel.getCapeKey();\n var isCapeReturn = isCapeReturnKey && _squid.$util.param('success');\n\n if (isChangeInstallments && $scope.creditDataModel && !$scope.creditDataModel.payInFull) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n }\n if (isCapeReturn) {\n $scope.returnFromCape(isCapeReturnKey);\n }\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && ($scope.checkoutSession.get('plan.paypal_credit') || isCapeReturnKey)) {\n $scope.creditOptions = _credit.$CreditInstallmentModel.instance($scope.token);\n $scope.creditOptions.retrieve().then(function () {\n $scope.creditOptions.apr = String($scope.creditOptions.apr);\n });\n }\n\n $scope.cartCurrency = $scope.checkoutCart.get('purchase.amounts.total.currency_code');\n\n // this function returns true if plan sources contains exactly PPCredit & Incentive\n $scope.isCreditIncentiveOption = function () {\n var plans = $scope.checkoutSession.get('plan.sources', null);\n\n if (plans && plans.length === 2 && plans.filter(function (fi) {\n return fi.type === 'BILL_ME_LATER';\n }).length === 1 && plans.filter(function (fi) {\n return fi.type === 'INCENTIVE';\n }).length === 1) {\n return true;\n } else {\n return false;\n }\n };\n\n $scope.isPPCReuseAndNotSelected = function () {\n var plans = $scope.checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.filter(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.selected;\n }).length === 1) {\n return true;\n } else {\n return false;\n }\n };\n\n // if PPCredit & Incentive are showing in the page together with installments we will hide installment details\n $scope.showInstallmentOptionWithoutIncentives = function () {\n if ($scope.creditOptions.creditType === 'INST') {\n if (!$scope.isCreditIncentiveOption()) {\n return true;\n }\n }\n return false;\n };\n\n $scope.showInstallmentOption = function () {\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutSession.get('plan.paypal_credit') && $scope.creditOptions && $scope.creditOptions.creditType) {\n if ($scope.creditOptions.creditType === 'INST') {\n $scope.installmentInfo = {\n monthlyPaymentAmt: (0, _squid.formatCurrency)($scope.creditOptions.monthlyPayment, $scope.cartCurrency),\n totalInterestAmt: (0, _squid.formatCurrency)($scope.creditOptions.totalInterest, $scope.cartCurrency),\n totalPaymentAmt: (0, _squid.formatCurrency)($scope.creditOptions.totalPayment, $scope.cartCurrency)\n };\n }\n return true;\n } else {\n return false;\n }\n };\n\n // if PPCredit & Incentive are showing in the page together with installments, we will:\n // 1. add a warning message in the top of the page as the installment option selected in cyco page\n // is not available with PayPal incentives balance.\n // 2. hide installment options (see above method showInstallmentOptionWithoutIncentives())\n if ($scope.showInstallmentOption() && $scope.creditOptions.creditType === 'INST' && $scope.isCreditIncentiveOption()) {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['offers.bmlInWalletInvalidInstallmentsMsg']\n };\n } else if ($scope.checkoutSession.message && $scope.checkoutSession.message.msgKeys && $scope.checkoutSession.message.msgKeys[0] === 'offers.bmlInWalletInvalidInstallmentsMsg') {\n // Remove error message in review page if was showing before changing payment method\n $scope.checkoutSession.message = null;\n }\n\n $scope.showCYCO = function () {\n $scope.checkoutSession.message = null;\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n };\n\n if (_angular.$window.location.search.search('atoSuccess') !== -1) {\n _logger.$logger.debug('PLANNING_ATO_SUCCESS');\n var atoMsg = _squid.$locale.content.get('memberReview.stepupAuthSuccess');\n\n if (atoMsg) {\n $scope.checkoutSession.message = {\n msgs: [atoMsg],\n type: 'success'\n };\n }\n }\n\n $scope.$on('localeChange', setInformalName);\n setInformalName();\n\n $scope.showNotYou = $scope.auth && $scope.auth.showNotYou();\n\n if (_squid.$util.param('redirectToHermesOn3DSDecline')) {\n // check and show the 3DS decline message when the app is redirected from Xoon app\n show3DSDeclineMsg();\n }\n\n $scope.showAuthMsg = ['authorize', 'order'].indexOf($scope.checkoutCart.get('payment_action')) > -1 && !$scope.checkoutSession.get('plan.paypal_credit');\n\n if ($scope.showAuthMsg) {\n /*\n new compliance message for AS1 / AS2 is not for US which displays LearnMore Link\n have this scope variable set based on country\n */\n $scope.showAuthMsgLearnMore = _squid.$locale.country !== 'US' ? true : false;\n }\n\n $scope.showUnconfirmedUpopMsg = !!$scope.checkoutSession.unconfirmed_upop;\n\n $scope.useraction = $scope.checkoutAppData.useraction() && $scope.checkoutAppData.useraction().toLowerCase();\n\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var noLineItemDetails = $scope.useraction !== 'commit' && $scope.checkoutCart.get('purchase.items.length', 0) === 0;\n\n var fundingInstruments = $scope.checkoutSession.get('fundingOptions.instruments', []);\n var isCreditInWallet = false;\n\n if ($scope.checkoutCart.isBillingNoPurchase()) {\n isCreditInWallet = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n isCreditInWallet = fundingInstruments.find(function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n }\n\n var isPPCEligible = $scope.checkoutSession && $scope.checkoutSession.creditOffer;\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n _logger.$logger.debug('creditInstallmentOffer ' + $scope.checkoutSession.creditInstallmentOffer + ', ' + 'creditOffer ' + $scope.checkoutSession.creditOffer + ', ' + isCreditInWallet + ', ' + isPayPalCredit);\n\n if ($scope.checkoutSession.creditOffer) {\n if (!_angular.$rootScope.bml) {\n _angular.$rootScope.bml = new _bml.$BMLModel();\n }\n _angular.$rootScope.bmlApply = new _bml.$ApplyForBMLModel();\n }\n // the second button user is ineligible for PPC and has not selected to \"pay with paypal\"\n else if (isPayPalCredit && !isPPCEligible && !$scope.creditDataModel.payInFull && !isCapeReturn) {\n\n // no credit in wallet\n if (!isCreditInWallet) {\n $scope.checkoutSession.message = {\n type: 'info',\n msgKeys: ['offers.bmlIneligibleHeader', 'offers.bmlIneligibleContent']\n };\n\n _logger.$logger.info('checkout_fpti', {\n from: 'Login',\n to: 'Review',\n error_type: 'second_btn_ineligible'\n });\n }\n // 2nd button, cross border, user saw CYCO page -- we cannot honor any offer the user chose\n else if ($scope.creditDataModel.isCrossBorder() && $scope.creditDataModel.hasSelectedCYCOOffer()) {\n var msg = (0, _squid.$renderContent)('offers.bmlCrossBorderIneligibleContent', {\n merchantCountry: $scope.checkoutAppData.get('merchant.merchant_country')\n });\n $scope.checkoutSession.message = {\n msgs: [msg],\n type: 'warning'\n };\n }\n }\n\n $scope.showSoftDescriptor = !$scope.checkoutAppData.flags.hide_soft_descriptor && $scope.checkoutCart.get('purchaseUnits.length', 0) <= 1;\n\n return (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n $scope.showAmt = showAmount;\n });\n };\n\n var applyNegativeBalanceStatus = function applyNegativeBalanceStatus() {\n var checkoutSession = $scope.checkoutSession;\n var negBals = checkoutSession.negBals;\n var nbrMsgContentKey = void 0;\n var tokenHash = void 0;\n\n if (negBals) {\n nbrMsgContentKey = 'memberReview.nbrMsg';\n tokenHash = {\n neg_bal: (0, _squid.formatCurrency)(negBals[0].amount, negBals[0].currency_code, false),\n merchantName: $scope.checkoutAppData.get('merchant.brand_name')\n };\n\n if (negBals.length > 1) {\n nbrMsgContentKey += 'Plural';\n tokenHash.neg_bal2 = (0, _squid.formatCurrency)(negBals[1].amount, negBals[1].currency_code, false);\n }\n\n checkoutSession.message = {\n type: 'warning',\n msgs: [(0, _squid.$renderContent)(nbrMsgContentKey, tokenHash)]\n };\n }\n };\n\n var applyBrPxp = function applyBrPxp() {\n if (!_index.$miniBrowser.isMiniBrowser() && _squid.$locale.country === 'BR') {\n var brPxp = _squid.$config.pxpExperiments.BR.xo_br_hermesnode_ryi_design;\n\n return (0, _squid.$pxpFactors)(brPxp.pgName, brPxp.params, brPxp.pattern, false, true).then(function (result) {\n $scope.ryiDesignExp = result;\n });\n }\n };\n\n var applyShowShippingMethod = function applyShowShippingMethod() {\n $scope.isInstantUpdateAPIFlow = $scope.checkoutCart && $scope.checkoutCart.get('instantUpdateIntegration');\n $scope.showShippingMethod = $scope.isInstantUpdateAPIFlow ? true : false;\n if (_integration.$integration.getConfig('SHOW_SHIPPING_METHOD')) {\n return setShowShippingMethodProperty();\n }\n };\n\n var applyPayButtonOption = function applyPayButtonOption() {\n $scope.cancel = $scope.checkoutAppData.urls.cancel_url;\n $scope.merchantMsg = $scope.checkoutCart.getBillingDescription();\n\n var isBilling = $scope.checkoutCart.isBilling();\n var merchant = $scope.checkoutAppData.merchant;\n var isWPSSubscriptionFlow = $scope.checkoutAppData.is_wps_subscription_flow();\n var isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n\n $scope.merchantName = merchant.brand_name || merchant.merchant_name;\n\n // Determine whether the button type is a Pay button or Continue button\n $scope.buttonLabelIsPay = $scope.useraction === 'commit' || _integration.$integration.getConfig('SHOW_PAY_NOW_LABEL_ON_REVIEW');\n\n // log paybuttonText as paynow or continue\n // irrespective of PAD, credit, etc\n _logger.$logger.info('checkout_fpti', {\n 'ryp_button_text': $scope.buttonLabelIsPay ? 'paynnow_y' : 'paynnow_n'\n });\n\n // show shipping address based on merchant passed in parameter\n $scope.showShippingAddress = Boolean(!$scope.checkoutAppData.flags.hide_shipping_address && $scope.checkoutAppData.flags.shipping_address_required && $scope.checkoutSession.shipping);\n\n // review page 'continue' or 'pay now' button logic to return the button text\n $scope.payButtonText = function () {\n if ($scope.selectedmethod && $scope.selectedmethod.planId === 'applyForPPCRadio') {\n return _squid.$locale.content.get('applyForBml.bmlApplyHeadline');\n }\n\n if (isWPSSubscriptionFlow || isSubscriptionsV1) {\n return _squid.$locale.content.get('memberReview.agreeAndSubscribeLabel');\n }\n\n if (isBilling) {\n if ($scope.buttonLabelIsPay) {\n return _squid.$locale.content.get('memberReview.agreeAndPayLabel');\n } else {\n return _squid.$locale.content.get('memberReview.agreeAndContinueLabel');\n }\n } else if (getPadToggleStatus() === 'ON') {\n return _squid.$locale.content.get('memberReview.padLabel');\n } else if ($scope.buttonLabelIsPay) {\n if ($scope.checkoutSession.unconfirmed_upop) {\n return _squid.$locale.content.get('memberReview.pay');\n } else {\n $scope.payButton = 'paynnow_y';\n return _squid.$locale.content.get('memberReview.payLabel');\n }\n } else {\n $scope.payButton = 'paynnow_n';\n return _squid.$locale.content.get('memberReview.continueLabel');\n }\n };\n\n $scope.onRedeemGC = function () {\n throw new _squid.$FallbackError({\n reason: 'redeem_coupon_feature_not_supported',\n product: 'ux'\n });\n };\n\n // Check if processor decline message needs to be set\n setProcessorDeclineMessage($scope.checkoutSession);\n\n $scope.promotion = {\n type: null,\n name: ''\n };\n\n var plccOffer = $scope.checkoutSession && $scope.checkoutSession.plccOffer;\n\n if (plccOffer) {\n $scope.promotion.logoUrl = plccOffer.product_logo;\n $scope.promotion.name = plccOffer.product_name;\n }\n\n $scope.onFBBANotNow = function () {\n var _$scope$checkoutSessi = $scope.checkoutSession.payer;\n _$scope$checkoutSessi = _$scope$checkoutSessi === undefined ? {} : _$scope$checkoutSessi;\n var payerId = _$scope$checkoutSessi.id;\n\n var isUnchecked = _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxPluginState') === 'unchecked';\n\n _logger.$logger.info('checkout_fpti', {\n buyer_country: _squid.$locale.country,\n buyer_id: payerId,\n context_id: $scope.token,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'process_billing_agreement',\n eligibility_reason: isUnchecked ? 'checkbox_plugin_unchecked' : 'checkbox_plugin_checked',\n click_source: 'not_now'\n });\n\n window.xchild.close();\n\n if (experience.autoBA) {\n window.top.location.replace('fbiab://paypal/abort');\n }\n };\n\n $scope.onPay = function (result) {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T4' });\n // Track NMJ variations.\n var payEventName = void 0;\n\n if ($scope.isNmjDesign1) {\n payEventName = 'member_ryi_onPayVariant_nmj_design1_page';\n } else if ($scope.isNmjDesign2) {\n payEventName = 'member_ryi_onPayVariant_nmj_design2_page';\n } else if ($scope.isNmjDesign3) {\n payEventName = 'member_ryi_onPayVariant_nmj_design3_page';\n } else {\n payEventName = 'member_ryi_onPayVariant_control';\n }\n\n _logger.$logger.info(payEventName);\n\n if (!isValidPinSetup()) {\n $scope.topupError = true;\n _logger.$logger.debug('pin_missing');\n _uiRouter.$state.go('checkout.pinSetup');\n return;\n }\n\n if ($scope.checkoutSession.installments && $scope.checkoutSession.installments.length > 1 && !$scope.checkoutSession.selectedInstallmentData) {\n $scope.installmentNotSelected = true;\n return;\n }\n\n if ($scope.isInstantUpdateAPIFlow && !$scope.instantUpdateFeature.shippingRegionSupported) {\n return;\n }\n\n // Determine whether or not to prevent going forward based on the status of the onShippingChange callback\n if ($scope.shippingChangeFeature && $scope.shippingChangeFeature.status) {\n switch ($scope.shippingChangeFeature.status) {\n case $scope.shippingChangeFeature.enums.LOADING:\n case $scope.shippingChangeFeature.enums.REJECTED:\n case $scope.shippingChangeFeature.enums.FAILED:\n return;\n default:\n }\n }\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutSession.get('plan.paypal_credit') && $scope.installment.showCYCO && $scope.creditOptions && !$scope.creditOptions.creditType) {\n return _uiRouter.$state.go('checkout.chooseCreditOffer');\n }\n // \"Paying\" by applying for PPC\n if ($scope.selectedmethod && $scope.selectedmethod.planId === 'applyForPPCRadio') {\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.installment && $scope.installment.installmentOptionsPresent) {\n return _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n return _uiRouter.$state.go('checkout.redirectToCape');\n }\n }\n // Address Normalization Checks\n if ($scope.checkoutAppData.get('flags.allow_change_shipping', false) && (0, _squid.$feature)('shippingAddressNormalization') && $scope.checkoutSession.get('shipping.normalization_status') === 'UNKNOWN') {\n\n return _uiRouter.$state.go('checkout.review.sidebar.updateShipping');\n }\n\n var padToggleStatus = getPadToggleStatus();\n\n if (padToggleStatus === 'ON') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOnSubmit'\n });\n } else if (padToggleStatus === 'OFF') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOffSubmit'\n });\n }\n\n /**\n * Call updateFS so that if user has made a change in the multiple FI on RYI variant, we select their instrument before doing other logic\n * Call patchCvv first, if error, need buyers to input again\n * Call to set Sticky Funding Instrument for Billing Agreement.\n * We have to ensure the sticky call happens before authorize due to symphony spec.\n * We need to wait for the response from updateAddressAsPreferred before calling authorize */\n\n var preAuthorizeError = void 0;\n\n return updateFS()\n // Make PAPS patch calls sequentially. Concurrent patch calls are currently not supported\n .then(function () {\n return checkJSV4PaymentDetails();\n }).then(function () {\n return _tokenizedFactory.$TokenizedFactory.tokenizedOnPayCalls($scope.checkoutCart, $scope.checkoutSession, $scope.tokenizedWalletInfoModel, $scope.walletPinModel);\n }).then(function () {\n return _fiApis.$fiApis.patchCvv($scope.checkoutSession);\n }).then(function () {\n return setStickyInstrument();\n })\n // Other calls that won't affect the checkout session. Multiple patch calls to PAPS should not be made here\n .then(function () {\n return _angular.$q.all([updateAddressAsPreferred(), // This is a patch call to PAPS\n setWalletTopupPreferences(), linkAuthConsent(), $scope.actions.updatePreferredFi(_logger.$logger), donationAuthorize()])['catch'](function (err) {\n // should we have more elaborate error handling here?\n if ($scope.checkoutCart.isWalletTokenization()) {\n if (err && err.message === 'WALLET_PREFERENCE_SET_ERROR') {\n preAuthorizeError = err;\n }\n }\n _logger.$logger.error('onPay() error', err);\n })['finally'](function () {\n if (preAuthorizeError) {\n var code = 'ANDROID_PAY_SET_WALLET_PREFERENCE_ERROR';\n code = window.btoa(code);\n _uiRouter.$state.go('checkout.genericError', { code: code });\n } else {\n return authorize();\n }\n });\n }, function (err) {\n if ($scope.ixoShippingMethods && err.message === 'IXO_CANNOT_CHECKOUT_WITHOUT_SHIPPING_SELECTION') {\n return;\n }\n\n if ($scope.checkoutCart.isWalletTokenization()) {\n if (err && err.message === 'ISSUANCE_PIN_SERVICE_ERROR') {\n var code = 'ANDROID_PAY_SET_PIN_ERROR';\n code = window.btoa(code);\n _uiRouter.$state.go('checkout.genericError', { code: code });\n return;\n }\n }\n _logger.$logger.error('onPay() patchCvv error', err);\n });\n };\n\n /* This is used for a BML 'popup' that opens covering the whole review page,\n hiding the rest of the review page when its open. */\n $scope.bmlPopupOpen = false;\n $scope.showBmlPopup = function () {\n $scope.bmlPopupOpen = true;\n };\n $scope.hideBmlPopup = function () {\n $scope.bmlPopupOpen = false;\n };\n };\n\n var checkForReviewLaterTextTreatment = function checkForReviewLaterTextTreatment() {\n $scope.showReviewLaterText = true;\n // only get pxp if buttonlabel is not pay and for billingWithOutPurchase\n if ($scope.useraction !== 'commit' && !_integration.$integration.getConfig('SHOW_PAY_NOW_LABEL_ON_REVIEW') && $scope.checkoutCart.isBillingNoPurchase()) {\n _logger.$logger.info('billing_no_purchase_review_later_text_removal_ramp');\n return (0, _squid.$pxp)('review_later_text', 'showreviewlater_treatment', undefined, false, true).then(function (result) {\n if (result && result.treatment_name) {\n _logger.$logger.info('billing_no_purchase_review_later_text_removal_treatment');\n $scope.showReviewLaterText = false;\n }\n });\n }\n };\n\n var initBillingNoPurchasePlans = function initBillingNoPurchasePlans() {\n var isBillingNoPurchase = $scope.checkoutCart && $scope.checkoutCart.isBillingNoPurchase();\n\n $scope.plans = isBillingNoPurchase ? $scope.checkoutSession.get('futurePaymentInstruments') : $scope.checkoutSession.getPlanList();\n };\n\n var showBillingMessage = function showBillingMessage() {\n var isIndiaDomesticBilling = $scope.checkoutCart.isBilling() && _squid.$locale.country === 'IN' && $scope.checkoutAppData.get('merchant.merchant_country', 'US') === 'IN';\n var merchant = $scope.checkoutAppData.get('merchant');\n var merchantName = merchant.brand_name || merchant.merchant_name || 'Merchant';\n\n if (isIndiaDomesticBilling) {\n $scope.checkoutSession.message = {\n type: 'info',\n msgs: [(0, _squid.$renderContent)('memberReview.billingMerchant', { merchantName: merchantName })]\n };\n }\n };\n\n var showMoreFiInit = function showMoreFiInit() {\n var showMoreFiEligibility = _factory4.$ShowMoreFiFactory.decideEligibility({ plans: $scope.plans });\n\n if (showMoreFiEligibility) {\n showMoreFiEligibility.then(function () {\n _factory4.$ShowMoreFiFactory.init($scope.plans);\n });\n }\n };\n\n // TODO: please talk with AuthRate team on `xo_hermes_preferred_expired_msg_review_page` pxp when\n // they decide to turn the experiement on next year!\n // https://engineering.paypalcorp.com/pxptool/history?exptId=3935\n // const showExpiredMsgInit = () => {\n // $scope.showExpiredMsg = $ExpiredMsgFactory.showExpiredMsg($scope.isNmj, $scope.checkoutSession);\n // if ($scope.showExpiredMsg) {\n // $ExpiredMsgFactory.getPreferredExpiredPxpResult().then(result => {\n // $scope.isNmjexpired = result === 'xo_hermes_preferred_expired_msg_review_page_nmj_treatment' ? true : false;\n // $scope.preferredExpired = $scope.checkoutSession.getDisallowedPreferred();\n // });\n // }\n // };\n\n // lazy load some of the most popular routes to increase loading time\n var preloadCodeSplitRoutes = function preloadCodeSplitRoutes() {\n if (_squid.$meta.codeSplitting) {\n var routes = [];\n\n if (_integration.$integration.isFlow('WPS')) {\n routes.push.apply(routes, [__webpack_require__.e/* import() */(7/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-pay/route.js\")), // eslint-disable-line\n __webpack_require__.e/* import() */(5/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-page-components/src/done/route.js\")) // eslint-disable-line\n ]);\n }\n\n routes.push.apply(routes, [__webpack_require__.e/* import() */(4/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-sidebar/route.js\"))]);\n\n // preload checkout.genericMessage route which is shown when transaction is completed\n // on devices. So basically user will see `Thanks for using PayPal!` and `You can close this tab at any time.`\n // and at the same time there will be client side redirect\n // https://github.paypal.com/Checkout/xo-return-to-merchant/blob/master/dist/util.js#L44\n // May help reduce noise in case of code split when it's trying to first download the js chunk and then make redirect\n // which may take longer than usual\n if (_index2.$DeviceInfo.isDevice()) {\n routes.push(__webpack_require__.e/* import() */(2/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-generic-message/route.js\")));\n }\n\n Promise.all(routes)['catch'](function (err) {\n _logger.$logger.info('code_split_review_routes_preload_failed', {\n error: err && err.message\n });\n });\n }\n };\n\n var applyCreditBannerPlaceholder = function applyCreditBannerPlaceholder() {\n var placeholderExperimentName = 'xo_hermes_ppc_banner_placeholder';\n var placeholderTreatmentName = 'xo_hermes_ppc_banner_placeholder_treatment';\n\n $scope.isPlaceholderTreatment = false;\n (0, _squid.$pxp)(placeholderExperimentName, {}, placeholderTreatmentName, false, true).then(function (result) {\n var _$logger$info;\n\n $scope.isPlaceholderTreatment = result && result.treatment_name === placeholderTreatmentName || false;\n _logger.$logger.info('checkout_fpti', (_$logger$info = {}, _$logger$info[placeholderExperimentName] = result && result.treatment_name, _$logger$info));\n });\n };\n\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T0' });\n\n /**\n * This promise chain renders critical content in the page. Avoid\n * the temptation to tack on another `.then` to this promise chain.\n *\n * If you are making a critical network request, consider putting\n * function inside the `$q.all` array so it can be run in parallel\n * and not slow down page rendering.\n *\n * If your function requires values available on `$scope` after\n * the critical functions in `$q.all` are complete, put your\n * function in the following `.then` block.\n *\n * Otherwise, your function can likely go somewhere else.\n */\n populateScope().then(function () {\n stickyCTA();\n _factory3.$RewardsCheckboxFactory.buildCache();\n // applyCreditOptions could potentially redirect out of the RYI.\n // Seperate it out from the rest of the pack to avoid unnecessary code execution\n applyCreditOptions();\n triggerPersonalizedBanner();\n applyMerchantName();\n applyPayButtonOption();\n applyChoiceExperimentVariant();\n applyNegativeBalanceStatus();\n applyKmliUpsellEligibility();\n applyShowShippingMethod();\n applyInvoicingRegEDetails();\n $scope.checkForIxoShippingMethods();\n checkForReviewLaterTextTreatment();\n initAndCallOnShippingChange();\n initBillingNoPurchasePlans();\n showBillingMessage();\n applyBrPxp();\n initializePadToggleSupport();\n showGAC();\n _factory2.$NoBalanceFactory.decideEligibility();\n prepareTokenizedWallet();\n applyNewMemberVariant().then(function () {\n // TODO: see comment from above in regards to run this pxp again\n // showExpiredMsgInit();\n });\n showMoreFiInit();\n logSessionDetails();\n preloadCodeSplitRoutes();\n applyCreditBannerPlaceholder();\n });\n (0, _jquery2['default'])('.paypalHeaderWrapper').removeClass('paypalCredit');\n (0, _jquery2['default'])('.paypalHeaderWrapper').removeClass('paypalCreditTnc');\n\n $scope.onComplete = function (params) {\n if (params) {\n _logger.$logger.debug('ryi_optin_isKmliSet_' + params.isKmliSet);\n if (params.isKmliSet) {\n $scope.optin_toggle.setValue(true);\n }\n }\n _uiRouter.$state.go('checkout.review');\n };\n\n $scope.propValueObj = {};\n if ((0, _squid.$feature)('propValue')) {\n $scope.propValueObj.propHeader = 'memberReview.propHead';\n $scope.propValueObj.propVal = 'memberReview.propVal';\n $scope.propValueObj.propImage = 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_shield_bags.png';\n } else {\n $scope.propValueObj.propHeader = 'login.propHeadAlt';\n $scope.propValueObj.propVal = 'login.propValAlt';\n $scope.propValueObj.propImage = 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_wallet_card_v3.png';\n }\n }]\n});\n\nangular.value(\"$xoReviewPageComponent\", $xoReviewPageComponent);\n_uiRouter.$state;\n\n_index.$miniBrowser;\n\n_logger.$logger;\n\n_integration.$integration;\n\n_index2.$DeviceInfo;\n\n_ul.$ul;\n\n_pxp.$pxpCartAmt;\n\n_marketingoffer.$fireMORSBeacon;\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_angular.$window;\n\n_angular.noop;\n\n_kmliUpsell.$KmliUpsell;\n\n_utils.getSelectedPlan;\n\n_utils.getInstrumentID;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$featureCountries;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$pxpFactors;\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_squid.formatCurrency;\n\n_squid.formatNameInformal;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_auth.$AuthModel;\n\n_fiApis.$fiApis;\n\n_eligibility.$stickyCTA;\n\n_choice.$ChoiceEligibility;\n\n_fiMessages.$fiMessages;\n\n_donation.$GiveAtCheckoutModel;\n\n_bml.$ApplyForBMLModel;\n\n_bml.$BMLModel;\n\n_credit.$CreditDataModel;\n\n_credit.$CreditInstallmentModel;\n\n_credit.$CreditSharedInfoModel;\n\n_fi.$AddCardModel;\n\n_fi.$CardModel;\n\n_fi.$PreferredFi;\n\n_fi.$WalletPreferences;\n\n_app.$TokenizedFundingCapabilitiesModel;\n\n_app.$TokenizedWalletInfoModel;\n\n_app.$TokenizedWalletPinModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutSessionModel;\n\n_marketingoffer2.$MemberSegmentModel;\n\n_newMember.$NewMemberEligibility;\n\n_shippingMethod.$ShippingRuleSummaryModel;\n\n_user.$AuthConsentModel;\n\n_factory.$GiveAtCheckoutFactory;\n\n_factory2.$NoBalanceFactory;\n\n_factory3.$RewardsCheckboxFactory;\n\n_factory4.$ShowMoreFiFactory;\n\n_factory5.$AddCardFactory;\n\n_cardartInstrument.$CardArtInstrument;\n\n_factory6.$BalanceFactory;\n\n_factory7.$PADFactory;\n\n_tokenizedFactory.$TokenizedFactory;\n\n_shippingChangeFeature.createShippingChangeFeature;\n\n/***/ }),\n\n/***/ \"./pages/xo-review/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$PADFactory', function () {\n\n /**\n *\n * get PAD or IACH plan id based on selected plan id and PAD toggle status\n * if selected plan is IACH and toggle is on -> use associated PAD plan id\n * if selected plan is IACH and toggle is off -> use it's ID\n * if selected plan is PAD and toggle is on -> use it's ID\n * if selected plan is PAD and toggle is off -> use associated IACH plan id\n */\n var getPadOrIachBankPlanId = function getPadOrIachBankPlanId(_ref) {\n var selectedMethodPlanId = _ref.selectedMethodPlanId,\n fundingOptions = _ref.fundingOptions,\n multiFiCheckboxStates = _ref.multiFiCheckboxStates;\n\n var plan = fundingOptions.getPlanByPlanId(selectedMethodPlanId);\n var padOrIachPlanId = void 0;\n\n if (fundingOptions.isPAD(plan) || fundingOptions.isIACH(plan)) {\n if (multiFiCheckboxStates[plan.primaryFs.id]) {\n padOrIachPlanId = fundingOptions.getPadOrIachPlanIdBySelectedPlan({ plan: plan, isPadToggleSelected: true });\n } else {\n padOrIachPlanId = fundingOptions.getPadOrIachPlanIdBySelectedPlan({ plan: plan, isPadToggleSelected: false });\n }\n }\n return padOrIachPlanId;\n };\n\n // check if PAD feature is applicable\n var isPadToggleFeatureApplicable = function isPadToggleFeatureApplicable(padToggleFeature, isPadToggleEnabled) {\n return padToggleFeature.applicable && isPadToggleEnabled;\n };\n\n return {\n getPadOrIachBankPlanId: getPadOrIachBankPlanId,\n isPadToggleFeatureApplicable: isPadToggleFeatureApplicable\n };\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/xo-review\", \"pages/xo-review/factory.js\"))\n\n/***/ }),\n\n/***/ \"./pages/xo-review/lib/shippingChangeFeature.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.createShippingChangeFeature = undefined;\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _factory = __webpack_require__(\"../node_modules/xo-shipping-change/src/factory.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar createShippingChangeFeature = exports.createShippingChangeFeature = function createShippingChangeFeature(token, checkoutCart, checkoutSession, checkoutAppData) {\n var callbackFn = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _squid.$util.noop;\n\n var feature = {\n enums: {\n LOADING: 'loading',\n REJECTED: 'rejected',\n UPDATED: 'updated',\n FAILED: 'failed'\n },\n status: null,\n shippingChangeFactory: (0, _factory.$ShippingChangeFactory)(token, checkoutAppData, checkoutSession, checkoutCart),\n callOnShippingChange: _squid.$util.noop\n };\n\n feature.callOnShippingChange = function () {\n var doneFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _squid.$util.noop;\n\n if (!window.xprops || !window.xprops.onShippingChange) {\n return doneFn();\n }\n\n var successFn = function successFn() {\n var updatedMsg = (0, _squid.$renderContent)('shippingCallback.updated', {\n amount: checkoutCart.get('purchase.amounts.total.amount_formatted_currency')\n });\n\n feature.status = feature.enums.UPDATED;\n checkoutSession.message = {\n msgs: [updatedMsg],\n type: 'info'\n };\n };\n\n var rejectFn = function rejectFn() {\n var rejectedMsg = (0, _squid.$renderContent)('shippingMethod.shippingRegionUnsupported', {\n merchant: checkoutAppData.getMerchantDisplayName()\n });\n\n feature.status = feature.enums.REJECTED;\n checkoutSession.message = {\n msgs: [rejectedMsg],\n type: 'warning'\n };\n };\n\n var loadingMsg = _squid.$locale.content.get('shippingCallback.loading');\n\n _squid.$event.emit('loading');\n _squid.$event.emit('loadingMessage', loadingMsg);\n\n return feature.shippingChangeFactory.getPayload().then(function (payload) {\n _logger.$logger.info('shipping_change_payload_recieved', payload);\n\n return feature.shippingChangeFactory.callOnShippingChange(payload);\n }).then(function (_ref) {\n var cartHasChanged = _ref.cartHasChanged,\n rejected = _ref.rejected;\n\n\n _logger.$logger.info('shipping_change_called', { cartHasChanged: cartHasChanged, rejected: rejected });\n\n callbackFn();\n\n if (rejected) {\n return rejectFn();\n } else if (cartHasChanged) {\n return successFn();\n } else {\n // If the callback was not rejected, and the cart\n // was not changed we can remove any statuses\n // that prevent finishing checkout.\n feature.status = null;\n }\n }).then(doneFn)['catch'](function (err) {\n _logger.$logger.error('shipping_change_error', err);\n\n feature.status = feature.enums.FAILED;\n _uiRouter.$state.go('checkout.genericError');\n })['finally'](function () {\n _squid.$event.emit('loaded');\n });\n };\n\n return feature;\n};\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$event;\n\n_factory.$ShippingChangeFactory;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n/***/ }),\n\n/***/ \"./pages/xo-review/route.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n\n\nexports.__esModule = true;\nexports.$ReviewRoute = undefined;\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\nvar _directive = __webpack_require__(\"./pages/xo-review/directive.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _choice = __webpack_require__(\"../node_modules/xo-models/src/choice/index.js\");\n\nvar _credit = __webpack_require__(\"../node_modules/xo-models/src/credit/index.js\");\n\nvar $ReviewRoute = exports.$ReviewRoute = _squid.$ComponentRoute.extend('$ReviewRoute', {\n\n path: 'review',\n directive: _directive.$xoReviewPageComponent,\n titleContent: 'memberReview.memberReviewTitle',\n params: { message: null },\n trackingData: {\n fptiState: 'review',\n templateName: 'memberReview.dust',\n pageGoal: 'Payment Review',\n buzname: {\n 'fullpage': {\n 'pagename': '%::fullpage-review',\n 'pagename2': '%::fullpage-review:member:hermes:',\n 'version': 'member:%:'\n // More page qualifiers come here...\n } }\n },\n\n resolve: {\n action: function action() {\n\n // Determine if we should instead route to the selectFi choice experiment page\n if (!(0, _squid.$feature)('choiceExperiment')) {\n return;\n }\n\n var _$config$choiceExperi = _squid.$config.choiceExperiment;\n _$config$choiceExperi = _$config$choiceExperi === undefined ? {} : _$config$choiceExperi;\n var _$config$choiceExperi2 = _$config$choiceExperi.selectFi,\n fiPageVariants = _$config$choiceExperi2 === undefined ? [] : _$config$choiceExperi2,\n _$config$choiceExperi3 = _$config$choiceExperi.skipSelectFi,\n skipFiPageVariants = _$config$choiceExperi3 === undefined ? [] : _$config$choiceExperi3;\n var fromState = _uiRouter.$state.fromState;\n\n var skipStates = ['checkout.review', 'checkout.selectFi', 'checkout.authorizationmessage', 'checkout.pageAddCard.addCardFlow.addCard', 'checkout.chooseCreditOffer'];\n\n // Is review route hit a result of CREDIT_CARD_AUTH_FAILED, i.e. smart $x auth check failure?\n var isFromCcAuthFailure = _uiRouter.$stateParams.message && _uiRouter.$stateParams.message === 'CREDIT_CARD_AUTH_FAILED';\n if (!isFromCcAuthFailure && (!fromState.name ||\n // Current state contains one of the skip states (can be nested)\n skipStates.some(function (state) {\n return fromState.name.indexOf(state) !== -1;\n }))) {\n return;\n }\n\n // If returning from credit application, skip the selectFi page\n var isCapeReturnKey = _credit.$CreditDataModel.instance(_angular.$rootScope.token).getCapeKey();\n\n if (isCapeReturnKey) {\n return;\n }\n\n return _choice.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n // Check if variant is selectFi variant\n if (fiPageVariants.indexOf(variant) === -1) {\n return;\n }\n\n var models = {};\n\n // Check that there is more than one plan to choose from, or that plan is not preferred\n return (0, _squid.$populate)(models, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var plans = models.checkoutSession.get('fundingOptions.plans');\n var isPreferredDefault = skipFiPageVariants.indexOf(variant) > -1 && plans && plans[0].primaryFs.isPreferred;\n var stickyPlans = models.checkoutSession.futurePaymentInstruments;\n\n if (!isPreferredDefault && (plans && plans.length > 1 || stickyPlans && stickyPlans.length > 1)) {\n return {\n to: 'checkout.selectFi',\n newState: true\n };\n } else {\n _logger.$logger.info('skip_selectFi', {\n reason: isPreferredDefault ? 'default_is_preferred' : 'not_enough_plans'\n });\n return;\n }\n });\n });\n }\n },\n\n children: [{\n name: '$SidebarRoute',\n attributes: {\n 'back-uri': 'backUri',\n 'shipping-change-feature': 'shippingChangeFeature',\n 'promotion': 'promotion',\n 'update': 'update',\n 'token': 'token',\n 'installment': 'installment'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(4/* duplicate */).then(__webpack_require__.bind(null, \"./pages/xo-sidebar/route.js\"));\n },\n slug: 'sidebar'\n }, {\n name: '$OneTouchUpsellRoute',\n attributes: {\n 'token': 'token',\n 'on-complete': 'onComplete'\n },\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(6/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-login-components/src/onetouch-interstitial/route.js\"));\n },\n slug: 'oneTouchUpsell'\n }, {\n name: '$xoConfirmUpopRoute',\n props: function props() {\n var props = {\n token: this.token,\n cardmodel: this.cardModel\n };\n\n if (this.upopCallbacks.isOnUpdate) {\n props.onSuccess = this.upopCallbacks.onUpdateSuccess;\n props.onCancel = this.upopCallbacks.onUpdateCancel;\n } else {\n props.onSuccess = this.upopCallbacks.onConfirmUpopSuccess;\n props.onCancel = this.upopCallbacks.onConfirmUpopCancel;\n }\n\n return props;\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(1/* duplicate */).then(__webpack_require__.bind(null, \"../node_modules/xo-wallet-components/src/confirm-upop/route.js\"));\n },\n slug: 'confirmUpop'\n }, {\n name: '$SidepageRoute',\n props: function props() {\n return {\n token: this.token\n };\n },\n\n lazyRoute: function lazyRoute() {\n return __webpack_require__.e/* import() */(8).then(__webpack_require__.bind(null, \"./pages/xo-sidepage/route.js\"));\n },\n slug: 'sidepage'\n }]\n});\n\nangular.value(\"$ReviewRoute\", $ReviewRoute);\n_logger.$logger;\n\n_squid.$ComponentRoute;\n\n_squid.$feature;\n\n_squid.$config;\n\n_squid.$populate;\n\n_angular.$rootScope;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_directive.$xoReviewPageComponent;\n\n_checkout.$CheckoutSessionModel;\n\n_choice.$ChoiceEligibility;\n\n_credit.$CreditDataModel;\n\n/***/ }),\n\n/***/ \"./pages/xo-review/template.html\":\n/***/ (function(module, exports) {\n\nmodule.exports = \"
    \\n \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n \\n

    \\n {{ content('common.reviewLater')}}\\n

    \\n\\n
    \\n\\n
    {{ content('memberReview.bankChargeDisclaimer')}}
    \\n\\n
    \\n

    {{ content('memberReview.billingRequired') }}\\n

    \\n

    \\n\\n
    \\n {{ content('memberReview.authUser') }}\\n \\n {{ content('memberReview.learnMore') }}\\n {{content('authUserLearnMore.authUserTitle')}}\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n \\n

    \\n {{ content('memberReview.hiUser_welcome', {userName: formattedNameInformal}) }}\\n {{ content('memberReview.loggedInWithOneTouch', {userName: formattedNameInformal, lastName: auth.last_name, firstName: auth.first_name}) }}\\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

    \\n
    \\n \\n \\n
    \\n
    \\n

    \\n
    \\n
    \\n \\n

    \\n {{ headerMsg }}\\n \\n \\n \\n

    \\n
    \\n
    \\n \\n \\n
    \\n

    \\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n

    {{ content('memberReview.autoLoginOn') }}

    \\n\\n
    \\n

    \\n

    \\n {{ content('memberReview.securityInfoOT') }} {{ content('common.hide') }}\\n

    \\n
    \\n
    \\n

    \\n {{ content('memberReview.sharedDevicesOT') }}\\n Details\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n \\n
    \\n \\n \\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('memberReview.merchantMsgHeader', { merchantName: merchantName }) }}\\n

    \\n \\n

    \\n {{ content('messenger.fbHeader') }}\\n

    \\n

    \\n {{ content('messenger.baHeader') }}\\n

    \\n
    \\n \\n {{ merchantMsg }}\\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n\\n
    \\n
    \\n

    \\n {{content('chooseCreditOption.reviewPaymentPlan')}}\\n

    \\n
    \\n

    \\n

    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n

    \\n
    \\n \\n {{ content('common.change') }}\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n\\n \\n\\n
    \\n \\n \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n \\n
    \\n\\n

    {{ content('messenger.disclaimer') }}

    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n {{ content('memberReview.rtrMsg', { merchantName: checkoutAppData.merchant.brand_name }) }}\\n
    \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n \\n \\n\\n \\n \\n \\n

    \\n {{ content('common.reviewLater')}}\\n

    \\n\\n
    \\n\\n
    {{ content('memberReview.bankChargeDisclaimer')}}
    \\n\\n
    \\n

    {{ content('memberReview.billingRequired') }}\\n

    \\n

    \\n\\n
    \\n {{ content('memberReview.authUser') }}\\n \\n {{ content('memberReview.learnMore') }}\\n {{content('authUserLearnMore.authUserTitle')}}\\n \\n
    \\n
    \\n \\n\\n \\n \\n\\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('fundingInstruments.bmlLearnMoreDesc') }}\\n

    \\n\\n \\n
    \\n\\n
    \\n\\n \\n \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n {{content('review.pinError')}}\\n
    \\n \\n
    \\n {{content('review.tokenizationInfo', {type: tokenizedWalletInfoModel.brandName()})}}\\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n\"\n\n/***/ }),\n\n/***/ \"./pages/xo-review/tokenizedFactory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _angular = __webpack_require__(\"../node_modules/angular/angular.min.js\");\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\nvar _fi = __webpack_require__(\"../node_modules/xo-models/src/fi/index.js\");\n\nvar _logger = __webpack_require__(\"../node_modules/xo-beaver/dist/logger.js\");\n\nvar _user = __webpack_require__(\"../node_modules/xo-models/src/user/index.js\");\n\nvar _auth = __webpack_require__(\"../node_modules/xo-models/src/auth/index.js\");\n\nvar _checkout = __webpack_require__(\"../node_modules/xo-models/src/checkout/index.js\");\n\nvar _uiRouter = __webpack_require__(\"../node_modules/angular-ui-router/release/angular-ui-router.min.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$TokenizedFactory', function () {\n\n var state = {\n reviewTopupErrorMessage: {},\n tokenizationFlags: {\n sepaAgree: false\n }\n };\n\n var get = function get() {\n return state;\n };\n\n var AUTHORIZE_AND_UPDATE_SCOPE_BATCH = 'authorizeAndUpdateScope';\n var AUTHORIZE_CALL = 'authorize';\n\n /**\n * PatchXO api call for tokenization flows\n */\n var tokenizationPatchXO = function tokenizationPatchXO(checkoutSession, instrumentId) {\n return checkoutSession.action('setTopupFI', {\n data: {\n instrument_id: instrumentId\n }\n });\n };\n\n /**\n * Agree Sepa Mandate:\n * When user has clicked on the checkbox, call SepaAccept api, then calls PatchXO\n * When user has not clicked on the checkbox, show page level error message\n */\n var agreeSepaMandate = function agreeSepaMandate(checkoutCart, checkoutSession, tokenizedWalletInfoModel) {\n if (checkoutCart.isWalletTokenization()) {\n var bankId = checkoutSession.get('sepa_mandate.bankId');\n if (bankId && state.tokenizationFlags.sepaAgree) {\n // User agreed to the Sepa mandate by clicking on the checkbox\n return _fi.$SepaModel.instance().action('sepaAccept', {\n data: {\n bank: {\n id: bankId\n }\n },\n success: function success() {\n // Patch XO after Sepa agreed by user, so as to update PAPS\n return tokenizationPatchXO(checkoutSession, bankId);\n }\n });\n } else if (bankId) {\n // User did not agree to the Sepa mandate\n var msg = (0, _squid.$renderContent)('tokenization.agreeToSepaMsg', {\n type: tokenizedWalletInfoModel.brandName()\n });\n\n state.reviewTopupErrorMessage = {\n msgs: [msg],\n type: 'warning'\n };\n return _angular.$q.reject();\n }\n }\n return _angular.$q.when();\n };\n\n /**\n * Save the pin when its available\n */\n var setTokenizedWalletPin = function setTokenizedWalletPin(walletPinModel) {\n if (walletPinModel) {\n var pinModel = {\n data: {\n pin: walletPinModel.userPin\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'process_review',\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'BA-Token',\n 'billing_token': _squid.$meta.baToken,\n 'int_error_code': 'pin_setup_contingencies',\n 'int_error_description': err,\n 'error_source': 'issuancemanagementserv'\n });\n\n throw err;\n }\n }\n };\n\n if (walletPinModel.isSetupEligible()) {\n if (walletPinModel.isPinIdPresent()) {\n pinModel.data.pinId = walletPinModel.getPinId();\n }\n return walletPinModel.save(pinModel);\n }\n }\n return _angular.$q.when();\n };\n\n var tokenizedOnPayCalls = function tokenizedOnPayCalls(checkoutCart, checkoutSession, tokenizedWalletInfoModel, walletPinModel) {\n return agreeSepaMandate(checkoutCart, checkoutSession, tokenizedWalletInfoModel).then(function () {\n return setTokenizedWalletPin(walletPinModel);\n });\n };\n\n /**\n * log FPTI event after authorize or authorizeAndUpdateScope call\n */\n var logProcessReviewToFPTI = function logProcessReviewToFPTI() {\n var _$WalletPreferences$i = _fi.$WalletPreferences.instance(_angular.$rootScope.token),\n _$WalletPreferences$i2 = _$WalletPreferences$i.topup,\n topup = _$WalletPreferences$i2 === undefined ? {} : _$WalletPreferences$i2,\n _$WalletPreferences$i3 = _$WalletPreferences$i.direct,\n direct = _$WalletPreferences$i3 === undefined ? {} : _$WalletPreferences$i3,\n currency = _$WalletPreferences$i.currency;\n\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'process_review',\n 'topup_amt': topup.amount,\n 'chosen_topup_fi': topup.fundingSource && topup.fundingSource.type,\n 'chosen_direct_fi': direct.fundingSource && direct.fundingSource.type,\n 'currency_code': currency || topup.currency,\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'BA-Token',\n 'billing_token': _squid.$meta.baToken\n });\n };\n\n /**\n * Update user's scope with \"issuance\" scope for Google account linking flow\n * Call must be triggered only after successfull \"authorize\" call\n *\n * If successfull - redirect back to success url\n *\n * If there is a contingency (UAL_ISSUANCE_UPDATE_SCOPE_ERROR) - go to default tokenized wallet error page (see public/js/lib/contingency.js)\n *\n * To improve latency - batch it with \"authorize\" call\n */\n var updateIssuanceScope = function updateIssuanceScope() {\n var authConsentModel = _user.$AuthConsentModel.instance();\n\n return authConsentModel.action('updateIssuanceScope', {\n batch: {\n name: AUTHORIZE_AND_UPDATE_SCOPE_BATCH,\n id: 'updateIssuanceScope',\n dependencies: [AUTHORIZE_CALL]\n },\n data: {\n 'ba_token': _squid.$meta.baToken\n },\n success: function success() {\n _logger.$logger.info('ual_update_issuance_scope_success');\n logProcessReviewToFPTI();\n\n return _uiRouter.$state.go('checkout.end');\n }\n });\n };\n\n /**\n * Check if flow is Google account linking\n */\n var isGoogleAccountLinking = function isGoogleAccountLinking() {\n var checkoutCart = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n var auth = _auth.$AuthModel.instance();\n\n return checkoutCart.isWalletTokenization() && auth.logged_in && auth.disallow_login_switch;\n };\n\n /**\n * Construct batch object for \"authorize\" call\n */\n var getAuthorizeBatch = function getAuthorizeBatch() {\n return {\n name: AUTHORIZE_AND_UPDATE_SCOPE_BATCH,\n id: AUTHORIZE_CALL,\n dependencies: []\n };\n };\n\n return {\n get: get,\n agreeSepaMandate: agreeSepaMandate,\n setTokenizedWalletPin: setTokenizedWalletPin,\n tokenizedOnPayCalls: tokenizedOnPayCalls,\n updateIssuanceScope: updateIssuanceScope,\n isGoogleAccountLinking: isGoogleAccountLinking,\n logProcessReviewToFPTI: logProcessReviewToFPTI,\n getAuthorizeBatch: getAuthorizeBatch\n };\n});\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$renderContent;\n\n_fi.$SepaModel;\n\n_logger.$logger;\n\n_user.$AuthConsentModel;\n\n_auth.$AuthModel;\n\n_fi.$WalletPreferences;\n\n_checkout.$CheckoutCartModel;\n\n_uiRouter.$state;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/xo-review\", \"pages/xo-review/tokenizedFactory.js\"))\n\n/***/ }),\n\n/***/ \"./pages/xo-select-fi/factory.js\":\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(module, __dirname, __filename) {\n\nvar _squid = __webpack_require__(\"../node_modules/squid/dist/index.js\");\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$BalanceFactory', function () {\n // initial choiceBalanceState checkbox is unselected\n var state = {\n checkbox: undefined\n };\n\n var get = function get() {\n return state;\n };\n\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n var getPadAndCheckboxStatus = function getPadAndCheckboxStatus() {\n var balanceList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var planList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var isChecked = balanceList.some(function (balance) {\n return balance.checked;\n });\n var hasPad = planList.some(function (plan) {\n return plan.primaryFs.subtype === 'PAD';\n });\n\n return {\n isChecked: isChecked,\n hasPad: hasPad\n };\n };\n\n return {\n get: get,\n set: set,\n getPadAndCheckboxStatus: getPadAndCheckboxStatus\n };\n});\n\n_squid.$util;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(\"../node_modules/webpack/buildin/module.js\")(module), \"pages/xo-select-fi\", \"pages/xo-select-fi/factory.js\"))\n\n/***/ }),\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(\"../node_modules/xo-webpack-config/polyfills.js\");\nmodule.exports = __webpack_require__(\"./js/bootstrap.js\");\n\n\n/***/ })\n\n},[0]);\n\n\n// WEBPACK FOOTER //\n// js/main-code-split.js","\n\nrequire('../../modules/es6.array.find');\nmodule.exports = require('../../modules/_core').Array.find;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/fn/array/find.js\n// module id = ../node_modules/core-js/fn/array/find.js\n// module chunks = main-code-split","\n\nrequire('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/fn/array/includes.js\n// module id = ../node_modules/core-js/fn/array/includes.js\n// module chunks = main-code-split","\n\nrequire('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/fn/object/entries.js\n// module id = ../node_modules/core-js/fn/object/entries.js\n// module chunks = main-code-split","\n\nrequire('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/fn/object/values.js\n// module id = ../node_modules/core-js/fn/object/values.js\n// module chunks = main-code-split","\n\nrequire('../../modules/es6.string.includes');\nmodule.exports = require('../../modules/_core').String.includes;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/fn/string/includes.js\n// module id = ../node_modules/core-js/fn/string/includes.js\n// module chunks = main-code-split","\n\nmodule.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_a-function.js\n// module id = ../node_modules/core-js/modules/_a-function.js\n// module chunks = main-code-split","\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_add-to-unscopables.js\n// module id = ../node_modules/core-js/modules/_add-to-unscopables.js\n// module chunks = main-code-split","\n\nvar isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_an-object.js\n// module id = ../node_modules/core-js/modules/_an-object.js\n// module chunks = main-code-split","\n\n// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (; length > index; index++) {\n if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n }\n }return !IS_INCLUDES && -1;\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_array-includes.js\n// module id = ../node_modules/core-js/modules/_array-includes.js\n// module chunks = main-code-split","\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (; length > index; index++) {\n if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3:\n return true; // some\n case 5:\n return val; // find\n case 6:\n return index; // findIndex\n case 2:\n result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n }return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_array-methods.js\n// module id = ../node_modules/core-js/modules/_array-methods.js\n// module chunks = main-code-split","\n\nvar isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n }return C === undefined ? Array : C;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_array-species-constructor.js\n// module id = ../node_modules/core-js/modules/_array-species-constructor.js\n// module chunks = main-code-split","\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_array-species-create.js\n// module id = ../node_modules/core-js/modules/_array-species-create.js\n// module chunks = main-code-split","\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_cof.js\n// module id = ../node_modules/core-js/modules/_cof.js\n// module chunks = main-code-split","\n\nvar core = module.exports = { version: '2.6.4' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_core.js\n// module id = ../node_modules/core-js/modules/_core.js\n// module chunks = main-code-split","\n\n// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1:\n return function (a) {\n return fn.call(that, a);\n };\n case 2:\n return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3:\n return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function () /* ...args */{\n return fn.apply(that, arguments);\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_ctx.js\n// module id = ../node_modules/core-js/modules/_ctx.js\n// module chunks = main-code-split","\n\n// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_defined.js\n// module id = ../node_modules/core-js/modules/_defined.js\n// module chunks = main-code-split","\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function get() {\n return 7;\n } }).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_descriptors.js\n// module id = ../node_modules/core-js/modules/_descriptors.js\n// module chunks = main-code-split","\n\nvar isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_dom-create.js\n// module id = ../node_modules/core-js/modules/_dom-create.js\n// module chunks = main-code-split","\n\n// IE 8- don't enum bug keys\nmodule.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_enum-bug-keys.js\n// module id = ../node_modules/core-js/modules/_enum-bug-keys.js\n// module chunks = main-code-split","\n\nvar global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function $export(type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_export.js\n// module id = ../node_modules/core-js/modules/_export.js\n// module chunks = main-code-split","\n\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) {/* empty */}\n }return true;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_fails-is-regexp.js\n// module id = ../node_modules/core-js/modules/_fails-is-regexp.js\n// module chunks = main-code-split","\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_fails.js\n// module id = ../node_modules/core-js/modules/_fails.js\n// module chunks = main-code-split","\n\nmodule.exports = require('./_shared')('native-function-to-string', Function.toString);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_function-to-string.js\n// module id = ../node_modules/core-js/modules/_function-to-string.js\n// module chunks = main-code-split","\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self\n// eslint-disable-next-line no-new-func\n: Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_global.js\n// module id = ../node_modules/core-js/modules/_global.js\n// module chunks = main-code-split","\n\nvar hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_has.js\n// module id = ../node_modules/core-js/modules/_has.js\n// module chunks = main-code-split","\n\nvar dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_hide.js\n// module id = ../node_modules/core-js/modules/_hide.js\n// module chunks = main-code-split","\n\nmodule.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function get() {\n return 7;\n } }).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_ie8-dom-define.js\n// module id = ../node_modules/core-js/modules/_ie8-dom-define.js\n// module chunks = main-code-split","\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_iobject.js\n// module id = ../node_modules/core-js/modules/_iobject.js\n// module chunks = main-code-split","\n\n// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_is-array.js\n// module id = ../node_modules/core-js/modules/_is-array.js\n// module chunks = main-code-split","\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nmodule.exports = function (it) {\n return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_is-object.js\n// module id = ../node_modules/core-js/modules/_is-object.js\n// module chunks = main-code-split","\n\n// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_is-regexp.js\n// module id = ../node_modules/core-js/modules/_is-regexp.js\n// module chunks = main-code-split","\n\nmodule.exports = false;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_library.js\n// module id = ../node_modules/core-js/modules/_library.js\n// module chunks = main-code-split","\n\nvar anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) {/* empty */}\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_object-dp.js\n// module id = ../node_modules/core-js/modules/_object-dp.js\n// module chunks = main-code-split","\n\nvar has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) {\n if (key != IE_PROTO) has(O, key) && result.push(key);\n } // Don't enum bug & hidden keys\n while (names.length > i) {\n if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n }return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_object-keys-internal.js\n// module id = ../node_modules/core-js/modules/_object-keys-internal.js\n// module chunks = main-code-split","\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_object-keys.js\n// module id = ../node_modules/core-js/modules/_object-keys.js\n// module chunks = main-code-split","\n\nexports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_object-pie.js\n// module id = ../node_modules/core-js/modules/_object-pie.js\n// module chunks = main-code-split","\n\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }return result;\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_object-to-array.js\n// module id = ../node_modules/core-js/modules/_object-to-array.js\n// module chunks = main-code-split","\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_property-desc.js\n// module id = ../node_modules/core-js/modules/_property-desc.js\n// module chunks = main-code-split","\n\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_redefine.js\n// module id = ../node_modules/core-js/modules/_redefine.js\n// module chunks = main-code-split","\n\nvar shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_shared-key.js\n// module id = ../node_modules/core-js/modules/_shared-key.js\n// module chunks = main-code-split","\n\nvar core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_shared.js\n// module id = ../node_modules/core-js/modules/_shared.js\n// module chunks = main-code-split","\n\n// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_string-context.js\n// module id = ../node_modules/core-js/modules/_string-context.js\n// module chunks = main-code-split","\n\nvar toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-absolute-index.js\n// module id = ../node_modules/core-js/modules/_to-absolute-index.js\n// module chunks = main-code-split","\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-integer.js\n// module id = ../node_modules/core-js/modules/_to-integer.js\n// module chunks = main-code-split","\n\n// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-iobject.js\n// module id = ../node_modules/core-js/modules/_to-iobject.js\n// module chunks = main-code-split","\n\n// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-length.js\n// module id = ../node_modules/core-js/modules/_to-length.js\n// module chunks = main-code-split","\n\n// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-object.js\n// module id = ../node_modules/core-js/modules/_to-object.js\n// module chunks = main-code-split","\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_to-primitive.js\n// module id = ../node_modules/core-js/modules/_to-primitive.js\n// module chunks = main-code-split","\n\nvar id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_uid.js\n// module id = ../node_modules/core-js/modules/_uid.js\n// module chunks = main-code-split","\n\nvar store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar _Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof _Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/_wks.js\n// module id = ../node_modules/core-js/modules/_wks.js\n// module chunks = main-code-split","\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () {\n forced = false;\n});\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/es6.array.find.js\n// module id = ../node_modules/core-js/modules/es6.array.find.js\n// module chunks = main-code-split","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n\n\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/es6.string.includes.js\n// module id = ../node_modules/core-js/modules/es6.string.includes.js\n// module chunks = main-code-split","\n// https://github.com/tc39/Array.prototype.includes\n\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/es7.array.includes.js\n// module id = ../node_modules/core-js/modules/es7.array.includes.js\n// module chunks = main-code-split","\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/es7.object.entries.js\n// module id = ../node_modules/core-js/modules/es7.object.entries.js\n// module chunks = main-code-split","\n\n// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/core-js/modules/es7.object.values.js\n// module id = ../node_modules/core-js/modules/es7.object.values.js\n// module chunks = main-code-split","// uuid.js\n//\n// Copyright (c) 2010-2012 Robert Kieffer\n// MIT License - http://opensource.org/licenses/mit-license.php\n\n/*global window, require, define */\n(function(_window) {\n \n\n // Unique ID creation requires a high quality random # generator. We feature\n // detect to determine the best RNG source, normalizing to a function that\n // returns 128-bits of randomness, since that's what's usually required\n var _rng, _mathRNG, _nodeRNG, _whatwgRNG, _previousRoot;\n\n function setupBrowser() {\n // Allow for MSIE11 msCrypto\n var _crypto = _window.crypto || _window.msCrypto;\n\n if (!_rng && _crypto && _crypto.getRandomValues) {\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\n //\n // Moderately fast, high quality\n try {\n var _rnds8 = new Uint8Array(16);\n _whatwgRNG = _rng = function whatwgRNG() {\n _crypto.getRandomValues(_rnds8);\n return _rnds8;\n };\n _rng();\n } catch(e) {}\n }\n\n if (!_rng) {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var _rnds = new Array(16);\n _mathRNG = _rng = function() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) { r = Math.random() * 0x100000000; }\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return _rnds;\n };\n if ('undefined' !== typeof console && console.warn) {\n console.warn(\"[SECURITY] node-uuid: crypto not usable, falling back to insecure Math.random()\");\n }\n }\n }\n\n function setupNode() {\n // Node.js crypto-based RNG - http://nodejs.org/docs/v0.6.2/api/crypto.html\n //\n // Moderately fast, high quality\n if ('function' === typeof require) {\n try {\n var _rb = require('crypto').randomBytes;\n _nodeRNG = _rng = _rb && function() {return _rb(16);};\n _rng();\n } catch(e) {}\n }\n }\n\n if (_window) {\n setupBrowser();\n } else {\n setupNode();\n }\n\n // Buffer class to use\n var BufferClass = ('function' === typeof Buffer) ? Buffer : Array;\n\n // Maps for number <-> hex string conversion\n var _byteToHex = [];\n var _hexToByte = {};\n for (var i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n\n // **`parse()` - Parse a UUID into it's component bytes**\n function parse(s, buf, offset) {\n var i = (buf && offset) || 0, ii = 0;\n\n buf = buf || [];\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\n if (ii < 16) { // Don't overflow!\n buf[i + ii++] = _hexToByte[oct];\n }\n });\n\n // Zero out remaining bytes if string was short\n while (ii < 16) {\n buf[i + ii++] = 0;\n }\n\n return buf;\n }\n\n // **`unparse()` - Convert UUID byte array (ala parse()) into a string**\n function unparse(buf, offset) {\n var i = offset || 0, bth = _byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n }\n\n // **`v1()` - Generate time-based UUID**\n //\n // Inspired by https://github.com/LiosK/UUID.js\n // and http://docs.python.org/library/uuid.html\n\n // random #'s we need to init node and clockseq\n var _seedBytes = _rng();\n\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n var _nodeId = [\n _seedBytes[0] | 0x01,\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\n ];\n\n // Per 4.2.2, randomize (14 bit) clockseq\n var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\n\n // Previous uuid creation time\n var _lastMSecs = 0, _lastNSecs = 0;\n\n // See https://github.com/broofa/node-uuid for API details\n function v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n\n var clockseq = (options.clockseq != null) ? options.clockseq : _clockseq;\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = (options.msecs != null) ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = (options.nsecs != null) ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq == null) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs == null) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n var node = options.node || _nodeId;\n for (var n = 0; n < 6; n++) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : unparse(b);\n }\n\n // **`v4()` - Generate random UUID**\n\n // See https://github.com/broofa/node-uuid for API details\n function v4(options, buf, offset) {\n // Deprecated - 'format' argument, as supported in v1.2\n var i = buf && offset || 0;\n\n if (typeof(options) === 'string') {\n buf = (options === 'binary') ? new BufferClass(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || _rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ii++) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || unparse(rnds);\n }\n\n // Export public API\n var uuid = v4;\n uuid.v1 = v1;\n uuid.v4 = v4;\n uuid.parse = parse;\n uuid.unparse = unparse;\n uuid.BufferClass = BufferClass;\n uuid._rng = _rng;\n uuid._mathRNG = _mathRNG;\n uuid._nodeRNG = _nodeRNG;\n uuid._whatwgRNG = _whatwgRNG;\n\n if (('undefined' !== typeof module) && module.exports) {\n // Publish as node.js module\n module.exports = uuid;\n } else if (typeof define === 'function' && define.amd) {\n // Publish as AMD module\n define(function() {return uuid;});\n\n\n } else {\n // Publish as global (in browsers)\n _previousRoot = _window.uuid;\n\n // **`noConflict()` - (browser only) to reset global 'uuid' var**\n uuid.noConflict = function() {\n _window.uuid = _previousRoot;\n return uuid;\n };\n\n _window.uuid = uuid;\n }\n})('undefined' !== typeof window ? window : null);\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/node-uuid/uuid.js\n// module id = ../node_modules/node-uuid/uuid.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n

    {{ title }}

    \\n

    \\n

    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/noop-loader!../node_modules/xo-page-components/src/value-props/template.html\n// module id = ../node_modules/noop-loader/index.js!../node_modules/xo-page-components/src/value-props/template.html\n// module chunks = main-code-split","module.exports = \"{{ content('base.closePayPalCheckoutLabel') }}\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/noop-loader!../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html\n// module id = ../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/closeFrame/template.html\n// module chunks = main-code-split","module.exports = \"\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/noop-loader!../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html\n// module id = ../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/template.html\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n \\n
      \\n
    • \\n \\n
    • \\n
    • \\n
      \\n
    • \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/noop-loader!../node_modules/xo-ui-components/src/message/template.html\n// module id = ../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/message/template.html\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n

    \\n

    \\n

    {{message}}

    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/noop-loader!../node_modules/xo-ui-components/src/spinner/template.html\n// module id = ../node_modules/noop-loader/index.js!../node_modules/xo-ui-components/src/spinner/template.html\n// module chunks = main-code-split","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/object-assign/index.js\n// module id = ../node_modules/object-assign/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$Api = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.$getLatestCorrelationID = $getLatestCorrelationID;\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _event = require('./event');\n\nvar _class = require('./class');\n\nvar _util = require('./util');\n\nvar _promise = require('./promise');\n\nvar _config = require('./config');\n\nvar _error = require('./error');\n\nvar _loader = require('./loader');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/*\n API\n ---\n\n This layer is responsible for handling api requests. It has a number of responsibilities:\n\n - Caching responses\n - Transparently returning data that has been preloaded into the initial page response\n - Instrumentation\n - Batching multiple api calls into a single http request\n - Handling multiple types of responses and dispatching to the correct handlers\n - Emitting loading events for all http calls\n */\n\n_config.$meta.headers = _config.$meta.headers || {};\n_config.$meta.headers['x-cookies'] = _typeof(_config.$meta.headers['x-cookies']) !== 'object' ? JSON.parse(_config.$meta.headers['x-cookies'] || '{}') : _config.$meta.headers['x-cookies'];\n\n// Are we in 'cookies disabled' mode? (Do we need to keep a local store of cookies)\nfunction cookiesEnabled() {\n return _util.$util.cookiesEnabled() && window.location.hostname.indexOf('.paypal.com') > -1;\n}\n\n// Cache for api responses, when cache: true\nvar cache = {};\nvar standardHeaders = {};\n\nvar latestCorrelationID = _config.$meta.correlationId;\n\n// Window load promise\nvar windowLoad = _util.$util.memoize(function () {\n return _promise.$promise.resolver(function (resolve) {\n if (document.readyState === 'complete') {\n resolve();\n } else {\n window.addEventListener('load', resolve);\n }\n });\n});\n\n// Buffer for batch requests made within the same frame\nvar batchQueue = {};\n\n// Backwards compat\nwindow.pre = {};\n\n// Transient cache resolvers\nvar transientCache = {};\n\n// Transient cache resolvers\nvar transientCacheResolvers = {};\n\n// Metabuilder\nvar metaBuilder = void 0;\n\n// Add to transientCache\nwindow.preload = function (method, url, data, name) {\n\n if (name) {\n window.pre[name] = {\n method: method,\n uri: url,\n res: data\n };\n }\n\n var key = method + ':' + url;\n var resolvers = transientCacheResolvers[key] || [];\n\n transientCache[key] = data;\n\n while (resolvers.length) {\n resolvers.pop().call();\n }\n};\n\n// Preload complete\nvar preloadComplete = false;\n\nwindow.preloadComplete = function () {\n preloadComplete = true;\n Object.keys(transientCacheResolvers).forEach(function (key) {\n var resolvers = transientCacheResolvers[key] || [];\n\n while (resolvers.length) {\n resolvers.pop().call();\n }\n });\n};\n\n_logger.$logger.info(cookiesEnabled() ? 'cookies_enabled' : 'cookies_disabled');\n\nvar $Api = exports.$Api = _class.$Class.extend('$Api', {\n\n // Cache any GET responses indefinitely\n cache: false,\n\n // Http timeout for all requests\n timeout: 45000,\n\n // Default number of attempts on aborted requests and 500 server errors\n getAttempts: 3,\n postAttempts: 1,\n\n // POST on a resource with an action name myapi.action('foo') -> POST /my/api/foo\n action: function action(_action, options) {\n options.action = _action;\n return this.post(options);\n },\n\n // GET on a resource myapi.retrieve() -> GET /my/api\n retrieve: function retrieve(options) {\n options.method = 'get';\n return this.call(options);\n },\n\n // POST on a resource myapi.retrieve() -> POST /my/api\n post: function post(options) {\n options.method = 'post';\n return this.call(options);\n },\n\n // Generic handler for calling an api and dispatching requests to the right place\n call: function call(options) {\n var self = this;\n\n // Set up request options and params. `options` is an object which should contain everything\n // the request needs to run and handle the response\n\n options.api = this;\n options.uri = this.getURI(options.model, options.action);\n options.params = options.params || {};\n options.cache = options.cache || self.cache && options.method === 'get';\n options.name = this.buildAPIName(options);\n options.meta = this.buildMeta();\n options.transientError = options.transientError || false;\n options.cacheKey = _util.$util.buildURL(options.uri, options.params);\n\n _logger.$logger.info(options.name + '_call', {\n name: options.name,\n method: options.method,\n uri: options.uri\n });\n\n if (!options.silent) {\n _event.$event.emit('loading');\n }\n\n // Decide where to get the response\n return _promise.$promise.first([\n\n // If caching is enabled and we have the data in local cache, use the cache\n function () {\n if (options.cache && cache[options.cacheKey]) {\n return cache[options.cacheKey];\n }\n },\n\n // Otherwise if we have transient cache data for this api, we can use that\n function () {\n return _promise.$promise.providing(self.hasTransientCacheData(options), function () {\n\n // The reason we use self.attemptRequest here is so any errors in the cached response\n // can trigger the retry code path, as if it were a regular request\n return self.attemptRequest(options);\n });\n },\n\n // If we're in batch mode, queue up a batch request\n function () {\n if (options.batch) {\n return self.batchRequest(options);\n }\n },\n\n // Otherwise attempt a regular http request (at this point an http call is guaranteed)\n function () {\n return self.attemptRequest(options);\n }])['finally'](function () {\n\n if (!options.silent) {\n _event.$event.emit('loaded');\n }\n }).then(function (res) {\n\n // Cache the response if we need to\n if (options.cache) {\n cache[options.cacheKey] = res;\n }\n\n // Handle the response\n return self.handleResponse(res.data, options);\n }, function (err) {\n\n // $BatchShortCircuit will be thrown if:\n //\n // 1. batch api call B depends on api call A, but-\n // 2. api call A fails\n //\n // In which case we end up in a situation where had it been a regular chain of events,\n // api B would never have been called in the first place.\n //\n // One possibility here is to return $unresolved, which prevents the promise from ever\n // resolving, but this has the potential to cause a lot of difficulty debugging and strange\n // corner cases.\n //\n // Instead we opt to simply reject the promise, and not call any of the response handlers\n\n if (err instanceof _error.$BatchShortCircuit) {\n return _promise.$promise.reject(err);\n }\n\n // Otherwise, handle the error normally\n return self.handleErrorResponse(err, options);\n });\n },\n\n // Set up a batch request for processing in the next frame\n batchRequest: function batchRequest(options) {\n\n // Batch Requests are an optimization layer on top of regular api calls. The purpose of this\n // layer is to combine multiple atomic api calls into a single http request, without forcing\n // developers to create large orchestration layers on the client/server with cross-cutting concerns.\n //\n // This layer will queue up multiple requests made in the same frame whenever batch-mode is enabled,\n // attach them all to an http call to /api/batch/:name, then on the response it will dispatch each\n // individual api call to the correct handler.\n //\n // The way this is implemented is to place each response in the transient api cache, then to yield\n // control to the regular api request handler, which will handle instrumentation and retries\n\n // For quick dev-time feedback...\n _util.$util.assert(options.batch.name, 'Must define a \"name\" for batch request: ' + options.batch);\n _util.$util.assert(options.batch.id, 'Must define a \"id\" for batch request: ' + options.batch);\n\n var name = options.batch.name;\n var id = options.batch.id;\n\n // Add the batch request options to the batchQueue for processing on the next frame\n var batch = batchQueue[name] = batchQueue[name] || {};\n\n batch[id] = options;\n\n // Fire off a batch request. This will be debounced: calls in the same frame will be combined to one\n return this.buildBatchRequest(name).then(function (results) {\n\n // We get back a mapping of id->response, so we now extract the response for our api\n // call. If we have no response, we can assume the call was never made, and short circuit.\n return results[id].then(function (result) {\n return result || _promise.$promise.reject(new _error.$BatchShortCircuit());\n });\n });\n },\n\n // Process all of the accumulated batch api requests\n buildBatchRequest: _promise.$promise.debounce(function (name) {\n\n var self = this;\n var batch = batchQueue[name];\n var batchIds = _class.$Class.keys(batch);\n var batchData = {};\n var headers = {};\n\n delete batchQueue[name];\n\n // If we have just a single request, we can short-circuit and just hit that api\n\n if (batchIds.length === 1) {\n\n var batchId = batchIds[0];\n var opts = batch[batchId];\n\n var results = {};\n\n results[batchId] = opts.api.attemptRequest(opts);\n return results;\n }\n\n // Build the request to send to the server side. This is an mapping of id->request, each containing\n // the method, uri, data, and dependencies for each api.\n //\n // Specifying a dependency for an api essentially means the back-end will only\n // call api-B if api-A returns ack=success. Otherwise there will be no response for api B.\n\n _util.$util.forEach(batch, function (options, id) {\n\n batchData[id] = {\n method: options.method,\n uri: options.api.getURI(options.model, options.action, true),\n data: options.data,\n params: options.params,\n dependencies: options.batch.dependencies\n };\n\n _util.$util.extend(headers, options.headers);\n });\n\n // Unfortunate circular dependency... $Api depends on another api.\n //\n // $batchApi is subject to all of the same rules regarding retries, so if for some reason the server\n // does not respond the first time, our batch request can still get through.\n\n return $batchApi.action(name, { // eslint-disable-line no-use-before-define\n data: batchData,\n headers: headers\n }).then(function (res) {\n\n // The final response will be a mapping of id->response-promise.\n //\n // However, we do not treat this data as our final response. Instead, we simply use it to\n // prime our transient cache, then proceed to jump to our regular request handler. This will\n // take care of retries and instrumentation as if this were a regular request.\n //\n // Note that a retry for $batchApi is different to a retry for an individual api. If\n // an *individual* api call fails, we do not want to re-do the entire batch call; instead we\n // can just retry the individual api call.\n\n return self.handleBatchResponse(batch, res.data);\n });\n }),\n\n // Process the responses for all of the batch requests we sent to the server\n handleBatchResponse: function handleBatchResponse(batch, data) {\n\n var self = this;\n\n var promises = {};\n\n // Loop over each individual api response contained in the batch response, and process the result\n\n _util.$util.forEach(batch, function (options, id) {\n\n // Store each response promise so we can check and wait for api dependencies\n\n promises[id] = _promise.$promise.run(function () {\n\n // Check if all of the dependencies are present for our individual api call. To do this\n // we must wait until the dependent api call is entirely complete, including any retries.\n\n var depsPresent = _promise.$promise.every(options.batch.dependencies || [], function (depName) {\n\n if (!batch[depName]) {\n _logger.$logger.info('missing_batch_dependency', {\n dependency: depName,\n available: Object.keys(batch).join('|')\n });\n }\n\n return !batch[depName] || promises[depName].then(function (dependency) {\n return dependency && dependency.data && dependency.data.ack === 'success';\n });\n });\n\n // If our dependencies are present, we can continue, otherwise we are not interested in\n // the result of the individual api call - if its dependency is not present, it will not be.\n\n return _promise.$promise.providing(depsPresent, function () {\n\n // If there is data returned for the individual call, add it to the transient cache\n\n return _promise.$promise.providing(data[id], function (result) {\n var uri = options.api.getURI(options.model, options.action);\n\n uri = _util.$util.buildURL(uri, options.params);\n\n self.addTransientCacheData(options.method, uri, result);\n }).then(function () {\n\n // Regardless of whether or not there is data, we can now attempt the request.\n // This will either get the data from the transient cache, or make an http call,\n // and handle any retries that need to be made.\n\n return options.api.attemptRequest(options);\n });\n });\n });\n });\n\n return promises;\n },\n\n // Handle the request and any retries, using either the transient cache or http calls\n attemptRequest: function attemptRequest(options) {\n var self = this;\n\n var attempts = options.method === 'get' ? this.getAttempts : this.postAttempts;\n\n // We allow a certain number of attempts/retries for each api call\n return _promise.$promise.attempt(attempts, function (remaining) {\n\n // Query the transient cache\n return self.getTransientCacheResponse(options).then(function (res) {\n\n // If we can get a response from the transient cache, then use it\n if (res) {\n return res;\n }\n\n // Otherwise resort to making an http call\n return self.getHttpResponse(options);\n })['catch'](function (res) {\n\n // If our request was aborted without even a status code, force a single retry\n if ((!res || !res.status) && attempts === 1) {\n\n _logger.$logger.warn('api_retry_aborted', {\n method: options.method,\n uri: options.uri\n });\n\n return self.getHttpResponse(options);\n }\n\n return _promise.$promise.reject(res);\n })['catch'](function (res) {\n\n // If our request was 401 denied (probably due to a CSRF error), force a single retry\n if (res.status === 401) {\n\n _logger.$logger.warn('api_retry_401', {\n method: options.method,\n uri: options.uri\n });\n\n return self.getHttpResponse(options);\n }\n\n return _promise.$promise.reject(res);\n })['catch'](function (res) {\n\n // Set the correct response and ack for 401\n if (res.status === 401) {\n return {\n data: {\n ack: 'permission_denied'\n }\n };\n }\n\n // Setup to throw a TOO_MANY_REQUESTS contingency for 429 response from ratelimiter (velocityserv)\n if (res.status === 429) {\n return {\n data: {\n ack: 'contingency',\n contingency: 'TOO_MANY_REQUESTS'\n }\n };\n }\n\n // If we have any remaining retries, log and reject\n if (remaining) {\n\n _logger.$logger.warn('api_retry', {\n method: options.method,\n uri: options.uri\n });\n\n return _promise.$promise.reject(res);\n }\n\n // Otherwise reject the request with the appropriate error\n\n // We got ack=error in the response\n if (res && res.data && res.data.ack === 'error') {\n return _promise.$promise.reject(new _error.$ApiError('api_error', { // eslint-disable-line no-reserved-keys\n name: options.name,\n method: options.method,\n uri: options.uri,\n stack: res.data.stack,\n transient: options.transientError\n }));\n }\n\n // We got a response error status\n else if (res && res.status) {\n return _promise.$promise.reject(new _error.$ApiError('response_status_' + res.status, { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n } else if (res && res.error) {\n return _promise.$promise.reject(new _error.$ApiError('request_' + res.error, { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n }\n\n // The request was aborted\n else {\n return _promise.$promise.reject(new _error.$ApiError('request_aborted', { // eslint-disable-line no-reserved-keys\n uri: options.uri,\n transient: options.transientError\n }));\n }\n });\n });\n },\n\n // Get an api response via http\n getHttpResponse: function getHttpResponse(options) {\n var self = this;\n\n var startTime = _util.$util.now();\n\n var request = this.http(options);\n\n return request['finally'](function () {\n\n // Calculate the end-to-end duration of the request from the client's perspective\n options.duration = _util.$util.now() - startTime;\n })['catch'](function (res) {\n\n // Turn responses with an ack into a 'success' so it makes it to the standard handlers\n if (res && res.status && res.data && res.data.ack && res.data.ack !== 'error') {\n return res;\n }\n\n return _promise.$promise.reject(res);\n }).then(function (res) {\n self.saveResponseState(res);\n\n var loggerPayload = {\n name: options.name,\n method: options.method,\n uri: options.uri,\n server: res.data.server,\n time: options.duration,\n duration: options.duration,\n corrid: res && res.headers('Paypal-Debug-Id')\n };\n\n // In certain browsers we can match up this api call to the performance data from the browser\n if (window.performance && window.performance.getEntries) {\n _util.$util.forEach(window.performance.getEntries(), function (resource) {\n if (resource.name && resource.name.indexOf(options.uri) > -1) {\n _util.$util.extend(loggerPayload, resource);\n }\n });\n }\n\n _logger.$logger.info('api_response', loggerPayload);\n\n if (res && res.status) {\n _logger.$logger.info('http_response_' + res.status);\n }\n\n return res;\n }, function (res) {\n self.saveResponseState(res);\n\n if (res && res.status) {\n _logger.$logger.info('http_response_' + res.status, {\n corrid: res.headers('Paypal-Debug-Id'),\n referenceId: res.headers('X-Reference-Header') || undefined // To not serialize this data if not present\n });\n }\n\n return _promise.$promise.reject(res);\n });\n },\n\n setTransientCache: function setTransientCache(data) {\n throw new Error('NotImplemented');\n },\n\n // Get an individual api response from the transient cache, as an object\n getTransientCacheData: function getTransientCacheData(options, pop) {\n\n if (!_config.$config.enablePreload) {\n return _promise.$promise.resolve();\n }\n\n var preMethod = options.method.toLowerCase();\n var preUri = _util.$util.buildURL(options.uri, options.params);\n\n var key = preMethod + ':' + preUri;\n\n return _promise.$promise.resolver(function (resolve) {\n\n function res() {\n var data = transientCache[key];\n\n if (pop) {\n delete transientCache[key];\n }\n resolve(data);\n }\n\n if (transientCache[key] || document.readyState === 'complete' || preloadComplete) {\n return res();\n }\n\n transientCacheResolvers[key] = transientCacheResolvers[key] || [];\n transientCacheResolvers[key].push(res);\n\n windowLoad().then(res);\n });\n },\n\n // Check if the transient cache has the data for a particular api\n hasTransientCacheData: function hasTransientCacheData(options) {\n return this.getTransientCacheData(options, false).then(function (data) {\n return Boolean(data);\n });\n },\n\n // Add data to the transient cache\n addTransientCacheData: function addTransientCacheData(method, uri, data) {\n var key = method + ':' + uri;\n\n transientCache[key] = data;\n },\n\n // Get an individual api response from transient cache, as a res promise with the correct status code\n getTransientCacheResponse: function getTransientCacheResponse(options) {\n\n return this.getTransientCacheData(options, true).then(function (data) {\n\n // Preload data does not come with a response code, so massage it into a response promise\n if (data) {\n if (data.ack === 'error') {\n return _promise.$promise.reject({\n status: 500,\n data: data\n });\n } else if (data.ack === 'permission_denied') {\n return _promise.$promise.reject({\n status: 401,\n data: data\n });\n } else if (data.ack === 'contingency' || data.ack === 'validation_error') {\n return {\n status: 400,\n data: data\n };\n } else {\n return {\n status: 200,\n data: data\n };\n }\n }\n\n // Log a cache miss if we are currently in the first-page load\n else if (options.method === 'get' && !_loader.$loader.firstLoad() && !options.silent) {\n _logger.$logger.info('preload_cache_miss', {\n uri: options.uri\n });\n }\n });\n },\n\n getHeaders: function getHeaders(options) {\n\n if (!_config.$meta.headers['x-csrf-jwt'] && !_config.$meta.csrfJwt) {\n _logger.$logger.warn('missing_csrf_jwt');\n }\n\n var headers = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'x-csrf-jwt': _config.$meta.headers['x-csrf-jwt'] || _config.$meta.csrfJwt\n };\n\n _util.$util.extend(headers, standardHeaders);\n\n if (!cookiesEnabled()) {\n headers['x-cookies'] = JSON.stringify(_config.$meta.headers['x-cookies']);\n }\n\n if (options.headers) {\n _util.$util.extend(headers, options.headers);\n }\n\n return headers;\n },\n http: function http(options) {\n return this.httpJQuery(options);\n },\n\n\n /*\n // Raw http call\n httpAngular: function(options) {\n let request = {\n method: options.method,\n url: options.uri,\n data: {\n data: options.data,\n meta: options.meta\n },\n headers: this.getHeaders(options),\n params: options.params,\n requestType: 'json',\n responseType: 'json',\n timeout: this.timeout\n };\n if (options.method === 'get' && options.meta && Object.keys(options.meta).length) {\n request.params.meta = JSON.stringify(options.meta);\n }\n return $http(request);\n },\n */\n\n httpJQuery: function httpJQuery(options) {\n\n var request = {\n method: options.method,\n data: options.method === 'get' ? options.params : JSON.stringify({\n data: options.data,\n meta: options.meta || {}\n }),\n headers: this.getHeaders(options),\n timeout: this.timeout\n };\n\n if (options.method === 'post') {\n request.headers['Content-Type'] = 'application/json;charset=UTF-8';\n } else if (options.method === 'get') {\n request.data.meta = JSON.stringify(options.meta);\n }\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n function getRes(res, data) {\n return {\n status: res.status,\n data: data,\n headers: function headers(name) {\n return res.getResponseHeader(name);\n }\n };\n }\n\n request.success = function (data, status, res) {\n return resolve(getRes(res, data));\n };\n\n request.error = function (res) {\n if (res && res.status) {\n if (res.status >= 400) {\n return reject(getRes(res, res.responseJSON));\n } else {\n return resolve(getRes(res, res.responseJSON));\n }\n }\n\n return reject({\n status: 0,\n headers: _util.$util.noop,\n error: res && res.statusText\n });\n };\n\n _jquery2['default'].ajax(options.uri, request);\n });\n },\n\n // Save cookies and jwt-csrf token from the response\n saveResponseState: function saveResponseState(res) {\n\n if (res.headers('x-csrf-jwt')) {\n _config.$meta.headers['x-csrf-jwt'] = res.headers('x-csrf-jwt');\n _config.$meta.csrfJwt = res.headers('x-csrf-jwt');\n _config.$meta.headers['x-csrf-jwt-hash'] = res.headers('x-csrf-jwt-hash');\n }\n\n if (res.headers('X-cookies')) {\n\n _config.$meta.headers['x-cookies-hash'] = res.headers('x-cookies-hash');\n\n // Extend local cookie jar of encrypted-cookie-name->encrypted-cookie-value with any new cookies\n _util.$util.extend(_config.$meta.headers['x-cookies'], JSON.parse(res.headers('X-cookies') || '{}'));\n }\n\n latestCorrelationID = res.headers('Paypal-Debug-Id') || latestCorrelationID;\n },\n\n // Dispatch the response to the correct handlers\n handleResponse: function handleResponse(res, options) {\n var loggerName = 'ui_' + options.name;\n\n var loggerPayload = {\n name: options.name,\n method: options.method,\n uri: options.uri,\n time: options.duration,\n duration: options.duration\n };\n\n // Here we dispatch the response to the correct handler based on the ack.\n //\n // ack=success -> options.success()\n // ack=error -> options.error()\n // ack=validation -> options.validation()\n // ack=contingency -> options.contingencies[contingency]()\n //\n // Why do this rather than just rejecting the promise with a custom error?\n //\n // a) Angular promises have no `.catchType()`, so this saves us a lot of `instanceof` checks\n // b) Angular promises have no `.done()`, so callers can not assert that they have handled\n // every error they want to. This is exacerbated by the fact that there is no single thread\n // of execution on the front-end a la node, so we can't just call `.done()` at the very end :(\n //\n // This way, if somebody passes a handler, it will be called. Otherwise, an error will be thrown\n // and the global error handler will be invoked. The api responses are also given as promises.\n\n var resultModel = options.resultModel || options.model;\n\n /* jshint maxcomplexity: 17 */\n return _promise.$promise.call(function () {\n\n // If we are given a `resultModel`, we always extend it with `res.data`, no matter the ack\n\n if (res.data && resultModel) {\n\n if (resultModel.populate) {\n resultModel.populate(res.data);\n } else {\n _util.$util.extend(resultModel, res.data);\n }\n }\n\n if (res && res.ack === 'success' && resultModel && resultModel.fetchChildren) {\n return _promise.$promise.resolve(resultModel.fetchChildren()).then(function (children) {\n return _util.$util.extend(resultModel, children);\n });\n }\n }).then(function () {\n // eslint-disable-line max-statements\n\n // Handle each ack type, throw errors accordingly\n\n if (res.ack === 'success') {\n _logger.$logger.info(loggerName + '_success', loggerPayload);\n\n if (options.success) {\n if (options.success instanceof Function) {\n return options.success(res.data);\n }\n return options.success;\n }\n\n return res;\n }\n\n if (options.failSilently) {\n return;\n }\n\n if (res.ack === 'contingency') {\n _logger.$logger.info(loggerName + '_contingency', _util.$util.extend(loggerPayload, {\n contingency: res.contingency\n }));\n\n if (!res.contingency) {\n throw new _error.$ApiError('expected_contingency_name', {\n api: options.name\n });\n }\n\n var contingency = new _error.$Contingency(res.contingency, { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n\n if (resultModel) {\n resultModel.errorData = res.errorData || {};\n }\n\n var handler = options.contingencies && (options.contingencies[contingency.message] || options.contingencies['DEFAULT']);\n\n _util.$util.extend(contingency, res.errorData);\n\n if (handler) {\n if (handler instanceof Function) {\n return handler(contingency.message, contingency);\n }\n return handler;\n }\n\n throw contingency;\n } else if (res.ack === 'validation') {\n _logger.$logger.info(loggerName + '_validation', _util.$util.extend(loggerPayload, {\n validation: res.validation\n }));\n\n if (options.validation) {\n return options.validation(res.validation);\n }\n\n throw new _error.$ApiError('validation', { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n } else if (res.ack === 'permission_denied') {\n _logger.$logger.info(loggerName + '_denied', loggerPayload);\n\n var properties = {\n transient: options.transientError\n };\n\n if (res.reason) {\n properties.reason = res.reason;\n }\n\n throw new _error.$Forbidden(options.uri + ': forbidden', properties);\n } else {\n _logger.$logger.info(loggerName + '_noack', loggerPayload);\n\n throw new _error.$ApiError('noack', { // eslint-disable-line no-reserved-keys\n transient: options.transientError\n });\n }\n });\n },\n\n // Handle http error responses (ack=error or unhandled errors)\n handleErrorResponse: function handleErrorResponse(err, options) {\n\n return _promise.$promise.run(function () {\n\n // If the caller provides an error handler, let them handle it\n if (options.error) {\n return options.error(err);\n }\n\n // Otherwise we throw the error. Please not that this is NOT just rejecting the promise,\n // this will always end up in the global error handler due to how angular promises work.\n throw err;\n });\n },\n\n // Build the uri for the api call\n getURI: function getURI(model, action, relative) {\n var self = this;\n\n // build the uri as a seriest of segments\n var uri = [];\n\n uri.push(this.uri.replace(/\\/:[\\w\\.]+\\?/g, function (key) {\n\n // Add any *optional* dynamic keys from the model (/foo/:bar? -> /foo/{{model.bar}})\n\n key = key.slice(2);\n key = key.substring(0, key.length - 1);\n\n var component = model.get ? model.get(key) : model[key];\n\n if (!component) {\n return '';\n }\n\n return '/' + component;\n }).replace(/:[\\w\\.]+/g, function (key) {\n\n // Add any dynamic keys from the model (/foo/:bar -> /foo/{{model.bar}})\n\n key = key.slice(1);\n\n var component = model.get ? model.get(key) : model[key];\n\n if (!component) {\n throw new Error('Property \"' + key + '\" not found in model for: ' + self.uri);\n }\n\n return component;\n }));\n\n // Add the action, if provided (`foo.action('bar', {...})` -> /api/foo/bar\n if (action) {\n uri.push(action);\n }\n\n // Add the extension (e.g. for doing a GET on a .json resource)\n if (this.ext) {\n uri[uri.length - 1] += '.' + this.ext;\n }\n\n // Join the uri segments and strip any extra slashes\n uri = '/' + uri.join('/').replace(/\\/{2,}/g, '/').replace(/^\\//, '');\n\n // Add on the base uri, e.g. /webapps/hermes\n if (!relative) {\n uri = (this.baseURI || _config.$config.urls.baseUrl) + uri;\n }\n\n return uri;\n },\n\n // Attach meta data provided by the parent app\n buildMeta: function buildMeta() {\n if (metaBuilder) {\n return metaBuilder();\n }\n },\n\n // Build the name of the api for logging. /api/foo/bar -> api_foo_bar\n buildAPIName: function buildAPIName(options) {\n var self = this;\n var apiName = self.uri.replace(/^\\/+/, ''). // Remove leading '/'\n replace(/\\//g, '_'). // Replace remaining '/' with '_'\n replace(/\\?(.*)/, ''). // Remove everything after '?'\n replace(/[^a-zA-Z0-9_]/g, '');\n\n apiName = options.action ? apiName + '_' + options.action : apiName;\n apiName = apiName.charAt(0) === '_' ? apiName.slice(1) : apiName;\n return apiName;\n }\n});\n\n$Api.reopenClass({\n clearCache: function clearCache() {\n cache = {};\n }\n});\n\n$Api.registerMetaBuilder = function (builder) {\n metaBuilder = builder;\n};\n\n$Api.addHeader = function (name, value) {\n standardHeaders[name] = value;\n};\n\nvar $batchApi = new $Api({\n uri: '/api/batch',\n postAttempts: 3\n});\n\nfunction $getLatestCorrelationID() {\n return latestCorrelationID;\n}\n\nangular.value(\"$Api\", $Api);\nangular.value(\"$getLatestCorrelationID\", $getLatestCorrelationID);\n_logger.$logger;\n\n_event.$event;\n\n_class.$Class;\n\n_util.$util;\n\n_promise.$promise;\n\n_config.$config;\n\n_config.$meta;\n\n_error.$Contingency;\n\n_error.$Forbidden;\n\n_error.$ApiError;\n\n_error.$BatchShortCircuit;\n\n_loader.$loader;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/api.js\n// module id = ../node_modules/squid/dist/core/api.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*\n Class\n -----\n\n A class pattern, adding sugar on top of javascript prototypes\n\n ### Basic Usage\n\n let MyClass = Class.extend({\n foo: 'bar';\n });\n\n myInstance = new MyClass({\n hello: 'world'\n });\n\n console.log(myInstance.foo, myInstance.hello)\n\n In this example, `foo` becomes a property on `MyClass`'s prototype,\n and `hello` becomes a property on `myInstance`.\n\n ### Default Object Methods\n\n - `init()`: Called after the object is first instantiated, with all properties available\n\n - `get(, )`: Get an object an arbitrary number of levels deep, or return a default\n\n e.g. `myInstance.get('foo.bar.baz', 'some_default');`\n\n Default return value is undefined\n\n - `set(, )`: Set an object an arbitrary number of levels deep\n\n e.g. `myInstance.set('foo.bar.baz', 'some_value');`\n\n Error is thrown if no object is found to set the value on\n\n - `setProperties()`: Set all the properties from an object onto your object\n\n e.g. `myInstance.setProperties({foo: 'bar', hello: 'world'})`\n\n Can not be used with nested properties\n\n - `forEach()`: Loop through the object and call callback(, ) for each key/val pair\n\n */\n\n// Object Create\n// -------------\n//\n// Shim for Object.create, if it is not supported by our browser\n//\n// let myPrototype = {foo: 'bar'}\n// let myObject = create(myPrototype)\n\n// Create an empty anonymous constructor with no side effects, for re-use later\nvar EmptyConstructor = function EmptyConstructor() {}; // eslint-disable-line no-empty-function\n\nvar create = Object.create || function create(obj) {\n\n // Set a temporary prototype\n EmptyConstructor.prototype = obj;\n\n // Create an object using our temporary constructor/prototype\n var instance = new EmptyConstructor();\n\n // Reset the prototype for next time\n EmptyConstructor.prototype = null;\n\n // Return our new object, created without side effects\n return instance;\n};\n\nfunction _extend(obj, source) {\n\n if (!source) {\n return obj;\n }\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n}\n\n// Is Object\n// ---------\n//\n// Check of a let is an object or not\n//\n// isobject({}) -> true\n// isobject('foo') -> false\n\nfunction isobject(obj) {\n return obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && obj instanceof Object;\n}\n\n// Transpose properties\n// -------------------------------------------------------------------\n//\n// Transpose properties from a list of objects onto a recipient object\n//\n// let recipient = {};\n// transpose(recipient, [{a: 1, b: 2}, {c: 3}])\n// recipient -> {a: 1, b: 2, c:3}\n\nfunction transpose(recipient, args) {\n\n // Loop through all args\n for (var i = 0; i < args.length; i++) {\n var ob = args[i];\n\n // Ignore anything that is not an object\n if (!isobject(ob)) {\n continue;\n }\n\n // Loop through all keys in our object\n for (var key in ob) {\n\n // Ignore any prototypal properties\n if (!ob.hasOwnProperty(key)) {\n continue;\n }\n\n var item = ob[key];\n\n // Give the function a name\n if (item instanceof Function) {\n item.__name__ = key;\n }\n\n recipient[key] = item;\n }\n }\n}\n\n// Construct a Class\n// -----------------\n//\n// This is the primary constructor for all $Class objects\n\nfunction construct() {\n // eslint-disable-line no-unused-vars\n\n // Call any custom constructor;\n if (this.construct) {\n var ob = this.construct.apply(this, arguments);\n\n // If we get a new object back, return that to the user\n if (isobject(ob)) {\n return ob;\n }\n }\n\n // Load any provided properties directly onto the object\n transpose(this, arguments);\n\n // Initialize the object\n if (this.init) {\n this.init();\n }\n}\n\n// Reopen an object\n// ----------------\n//\n// Add properties to the constructor's prototype\n//\n// let Animal = $Class.extend();\n//\n// Animal.reopen({\n// type: 'animal',\n// });\n//\n// let cat = new Animal;\n// console.log(cat.type);\nfunction reopen() {\n\n // Add some more properies to our prototype\n transpose(this.prototype, arguments);\n\n return this;\n}\n\n// Reopen a class\n// --------------\n//\n// Add properties to the constructor. These will propogate through future extends\n//\n// let Animal = $Class.extend();\n//\n// Animal.reopenClass({\n// fromCache: function(id) {\n// return cache[id] || new this({id: id});\n// }\n// }\n//\n// let cat = Animal.fromCache('cat_54');\n\nfunction reopenClass() {\n\n // Add some more properies to our class\n transpose(this, arguments);\n\n // Add to __classmethods__\n transpose(this.__classmethods__, arguments);\n\n return this;\n}\n\nfunction isChild(Cls) {\n return Cls && Cls.prototype instanceof this;\n}\n\n// Generate a new class\n// --------------------\n//\n// Generate a new constructor, with the specified name, and attach all static and prototypal methods\n\nvar id = 0;\n\nfunction extend(name) {\n // eslint-disable-line max-statements\n var Cls = void 0;\n var className = void 0;\n var args = void 0;\n var argsLength = void 0;\n var startIndex = void 0;\n\n // Accept an optional class name\n if (typeof name === 'string') {\n\n // Guard against javascript injection\n if (!name.match(/^[\\w$][\\w\\d]*$/)) {\n throw new Error('Class name can not include special characters: ' + name);\n }\n\n // Use the provided name and slice out the first argument\n className = name;\n argsLength = arguments.length && arguments.length - 1;\n startIndex = 1;\n } else {\n\n // Otherwise default to the parent name, or 'Object' if generating our first class\n className = this.name || 'Object';\n argsLength = arguments.length;\n startIndex = 0;\n }\n\n args = new Array(argsLength);\n for (var i = startIndex; i < arguments.length; i++) {\n args[i - startIndex] = arguments[i];\n }\n\n // Dynamically create our constructor with a custom name\n eval('Cls = function ' + className + '() { return construct.apply(this, arguments) }'); // eslint-disable-line no-eval\n\n // Store the class name for future reference\n Cls.__name__ = className;\n\n // Set up a classmethods object. These will be inherited through subsequent extend() calls\n Cls.__classmethods__ = {\n extend: extend,\n reopen: reopen,\n reopenClass: reopenClass,\n isChild: isChild\n };\n\n id += 1;\n Cls.id = id;\n\n // If we're being called on an existing class, e.g. Class.extend(), we should inherit from that class\n if (this && this !== window) {\n\n // Inherit everything from superclass prototype\n Cls.prototype = create(this.prototype);\n\n // Re-set the constructor, which is overwritten by create\n Cls.prototype.constructor = Cls;\n\n // Add a reference to the superclass prototype for super method calls\n Cls.prototype._super = this.prototype;\n\n // Inherit any class methods from the superclass\n _extend(Cls.__classmethods__, this.__classmethods__);\n }\n\n // Add the class methods to our existing class\n _extend(Cls, Cls.__classmethods__);\n\n // Load any provided properties onto the constructor's prototype\n transpose(Cls.prototype, args);\n\n // Temporary: allow access from console/debugger\n if (className.indexOf('$') === 0) {\n window[className] = Cls;\n } else {\n window['$' + className] = Cls;\n }\n\n return Cls;\n}\n\n// Multi-layer get\n// ---------------\n//\n// Recursively gets a deep path from an object, returning a default value if any level is not found\n//\n// let obj = {bar: {baz: 1}}\n// get(obj, 'bar.baz', 'default') -> 1\n// get(obj, 'aaa.bbb', 'default') -> default\n\nfunction _get(item, path, def) {\n\n if (!path) {\n return def;\n }\n\n path = path.split('.');\n\n // Loop through each section of our key path\n for (var i = 0; i < path.length; i++) {\n\n // If we have an object, we can get the key\n if (isobject(item)) {\n item = item[path[i]];\n // Otherwise, we should return the default (undefined if not provided)\n } else {\n return def;\n }\n }\n\n // If our final result is undefined, we should return the default\n return item === undefined ? def : item;\n}\n\n// Multi-layer set\n// ---------------\n//\n// Recursively sets a deep path from an object\n//\n// let obj = {bar: {baz: 1}}\n// set(obj, 'bar.baz', 2)\n// obj.bar.baz -> 1\n\nfunction _set(item, path, value) {\n path = path.split('.');\n\n // Loop through each section of our key path except the last\n for (var i = 0; i < path.length - 1; i++) {\n\n // Get the next item down\n item = item[path[i]];\n\n // If we have an object, we're good\n if (isobject(item)) {\n continue;\n // Otherwise, there's nothing to set our key on\n } else {\n throw new Error(path[i - 1] + '.' + path[i] + ' is not an object');\n }\n }\n\n // Do the set on the retrieved object with our value\n item[path[path.length - 1]] = value;\n}\n\n// Loop through object\n// -------------------\n//\n// Loop an object and apply a function for each key/value\n//\n// let ob = {a: 1, b: 2, c: 3}\n// each(ob, console.log) -> a 1 b 2 c 3\n\nfunction each(ob, callback) {\n for (var key in ob) {\n if (ob.hasOwnProperty(key)) {\n callback.call(ob, key, ob[key]);\n }\n }\n}\n\n// Gey keys of object\n// ------------------\n//\n// Shim for Object.keys if it does not already exist\n//\n// let ob = {a: 1, b: 2, c: 3}\n// keys(ob) -> ['a', 'b', 'c']\n\nfunction _keys(ob) {\n\n if (Object.keys) {\n return Object.keys(ob);\n }\n\n var result = [];\n\n for (var key in ob) {\n if (ob.hasOwnProperty(key)) {\n result.push(key);\n }\n }\n\n return result;\n}\n\n// Create a base class that can be inherited from\n// ----------------------------------------------\n//\n// This is the public interface to the Class module.\n// All classes with extend from Class and be provided with a set of base convenience methods.\n\nvar $Class = exports.$Class = extend('Class', {\n\n init: function init() {\n // Empty init class, so calls to _super can be safely made\n },\n\n get: function get(path, def) {\n return _get(this, path, def);\n },\n\n set: function set(path, value) {\n _set(this, path, value);\n },\n\n setProperties: function setProperties() {\n transpose(this, arguments);\n },\n\n forEach: function forEach(callback) {\n each(this, callback);\n },\n\n keys: function keys() {\n return _keys(this);\n }\n});\n\n$Class.get = _get;\n$Class.set = _set;\n$Class.keys = _keys;\n\nangular.value(\"$Class\", $Class);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/class.js\n// module id = ../node_modules/squid/dist/core/class.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar $meta = exports.$meta = window.meta || {};\nvar $cookies = exports.$cookies = window.cookies || {};\nvar $config = exports.$config = window.config || {};\nangular.value(\"$meta\", $meta);\nangular.value(\"$cookies\", $cookies);\nangular.value(\"$config\", $config);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/config.js\n// module id = ../node_modules/squid/dist/core/config.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$dom = undefined;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _promise = require('./promise');\n\nvar _util = require('./util');\n\nvar $dom = exports.$dom = {\n\n elementReady: function elementReady(id) {\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n if (document.getElementById(id)) {\n return resolve();\n }\n\n var interval = setInterval(function () {\n if (document.getElementById(id)) {\n clearInterval(interval);\n return resolve();\n }\n }, 10);\n\n setTimeout(60000, reject);\n });\n },\n\n loadScript: function loadScript(name, src, timeout) {\n var attributes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n return _promise.$promise.resolver(function (resolve, reject) {\n var script = document.createElement('script');\n var loadTimeout = void 0;\n\n function clearScriptLoadTimeout() {\n if (loadTimeout) {\n clearTimeout(loadTimeout);\n loadTimeout = undefined;\n }\n }\n\n script.onload = function () {\n clearScriptLoadTimeout();\n setTimeout(resolve, 10);\n };\n\n // For Internet explorer 8 support\n script.onreadystatechange = function () {\n if (this.readyState === 'complete' || this.readyState === 'loaded') {\n clearScriptLoadTimeout();\n setTimeout(resolve, 10);\n }\n };\n\n script.onerror = function (event) {\n _logger.$logger.info('script_error', {\n script: src\n });\n return reject(new Error(name + '_loading_error'));\n };\n\n if (timeout) {\n loadTimeout = setTimeout(function () {\n _logger.$logger.info('script_load_timedout', {\n script: src\n });\n return reject(new Error(name + '_loading_timed_out'));\n }, timeout);\n }\n\n script.setAttribute('src', src);\n\n for (var _iterator = Object.keys(attributes), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var attribute = _ref;\n\n script.setAttribute(attribute, attributes[attribute]);\n }\n\n document.body.appendChild(script);\n });\n },\n\n cssReady: function cssReady(id) {\n\n var el = document.getElementById(id);\n\n return _promise.$promise.resolver(function (resolve, reject) {\n\n var timeout = void 0;\n var interval = void 0;\n\n function check() {\n _util.$util.forEach(document.styleSheets, function (stylesheet) {\n if (stylesheet.href === el.href) {\n clearInterval(interval);\n clearTimeout(timeout);\n resolve();\n }\n });\n }\n\n timeout = setTimeout(function () {\n clearInterval(interval);\n reject();\n throw new Error('css_loading_timed_out');\n }, 30000);\n\n interval = setInterval(check, 20);\n check();\n });\n }\n};\n\nangular.value(\"$dom\", $dom);\n_logger.$logger;\n\n_promise.$promise;\n\n_util.$util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/dom.js\n// module id = ../node_modules/squid/dist/core/dom.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$BatchShortCircuit = exports.$ShortCircuit = exports.$FallbackError = exports.$ApiError = exports.$Forbidden = exports.$Contingency = exports.$Error = undefined;\n\nvar _event = require('./event');\n\nvar _class = require('./class');\n\nvar _util = require('./util');\n\n_util.$util.monkeyPatch(window, 'onerror', function (_ref, original) {\n var message = _ref[0],\n file = _ref[1],\n line = _ref[2],\n col = _ref[3],\n err = _ref[4];\n\n\n original();\n\n _event.$event.emit('$windowError', {\n message: message && (message.stack || message).toString(),\n file: file && file.toString(),\n line: line && line.toString(),\n col: col && col.toString(),\n stack: err && (err.stack || err).toString()\n });\n});\n\nvar $Error = exports.$Error = _class.$Class.extend.call(Error, '$Error', {\n\n construct: function construct(err, properties) {\n\n if (err instanceof Error) {\n err = err.message;\n }\n\n if (properties) {\n _util.$util.extend(this, properties);\n }\n\n this.payload = properties;\n\n this.message = err;\n }\n});\n\nvar $Contingency = exports.$Contingency = $Error.extend('$Contingency', {\n handle: function handle(handlers) {\n var handler = handlers[this.message] || handlers['DEFAULT'];\n\n if (handler) {\n var result = handler.call(this, this.message, this);\n\n if (typeof result !== 'undefined') {\n return result;\n }\n return true;\n }\n }\n});\n\nvar $Forbidden = exports.$Forbidden = $Error.extend('$Forbidden');\n\nvar $ApiError = exports.$ApiError = $Error.extend('$ApiError');\n\nvar $FallbackError = exports.$FallbackError = $Error.extend('$FallbackError', {\n init: function init() {\n this.reason = this.reason || '';\n this.product = this.product || '';\n this.entryPoint = this.entryPoint || '';\n }\n});\n\n/**\n * $ShortCircuit should be thrown if you want to bypass the remainder of a promise chain, and you've already\n * done error handling for the rejection. It should be handled with a no-op in app's $exceptionHandler\n */\nvar $ShortCircuit = exports.$ShortCircuit = $Error.extend('$ShortCircuit');\n\n// TO-BE-DEPRECATED: Use $ShortCircuit instead\nvar $BatchShortCircuit = exports.$BatchShortCircuit = $ShortCircuit;\n\nangular.value(\"$Error\", $Error);\nangular.value(\"$Contingency\", $Contingency);\nangular.value(\"$Forbidden\", $Forbidden);\nangular.value(\"$ApiError\", $ApiError);\nangular.value(\"$FallbackError\", $FallbackError);\nangular.value(\"$ShortCircuit\", $ShortCircuit);\nangular.value(\"$BatchShortCircuit\", $BatchShortCircuit);\n_event.$event;\n\n_class.$Class;\n\n_util.$util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/error.js\n// module id = ../node_modules/squid/dist/core/error.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$event = undefined;\n\nvar _promise = require(\"./promise\");\n\nvar handlers = {};\n\nvar customEventEmitter = void 0;\n\nvar $event = exports.$event = {\n use: function use(eventEmitter) {\n customEventEmitter = eventEmitter;\n\n for (var _iterator = Object.keys(handlers), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var eventName = _ref;\n\n if (handlers[eventName]) {\n for (var _iterator2 = handlers[eventName], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray2) {\n if (_i2 >= _iterator2.length) break;\n _ref2 = _iterator2[_i2++];\n } else {\n _i2 = _iterator2.next();\n if (_i2.done) break;\n _ref2 = _i2.value;\n }\n\n var handler = _ref2;\n\n customEventEmitter.on(eventName, handler);\n }\n }\n }\n },\n on: function on(eventName, method) {\n\n if (customEventEmitter) {\n return customEventEmitter.on(eventName, method);\n }\n\n handlers[eventName] = handlers[eventName] || [];\n handlers[eventName].push(method);\n\n var cancelled = false;\n\n function cancel() {\n if (!cancelled) {\n handlers[eventName].splice(handlers[eventName].indexOf(method), 1);\n cancelled = true;\n }\n }\n\n cancel.cancel = cancel;\n return cancel;\n },\n once: function once(eventName, method) {\n\n if (customEventEmitter) {\n return customEventEmitter.once(eventName, method);\n }\n\n var listener = $event.on(eventName, function () {\n listener.cancel();\n return method.apply(this, arguments);\n });\n\n return listener;\n },\n emit: function emit(eventName) {\n if (customEventEmitter) {\n var _customEventEmitter;\n\n return (_customEventEmitter = customEventEmitter).emit.apply(_customEventEmitter, arguments);\n }\n\n var event = {\n preventDefault: function preventDefault() {\n event.defaultPrevented = true;\n }\n };\n\n if (handlers[eventName]) {\n for (var _iterator3 = Array.prototype.slice.apply(handlers[eventName]), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n var _ref3;\n\n if (_isArray3) {\n if (_i3 >= _iterator3.length) break;\n _ref3 = _iterator3[_i3++];\n } else {\n _i3 = _iterator3.next();\n if (_i3.done) break;\n _ref3 = _i3.value;\n }\n\n var handler = _ref3;\n\n handler.apply(this, [event].concat(Array.prototype.slice.call(arguments)));\n }\n }\n\n return event;\n },\n broadcast: function broadcast(eventName) {\n\n if (customEventEmitter) {\n var _customEventEmitter2;\n\n return (_customEventEmitter2 = customEventEmitter).broadcast.apply(_customEventEmitter2, arguments);\n }\n\n return $event.emit.apply($event, arguments);\n },\n\n\n refCount: function refCount($scope, start, stop) {\n return _promise.$promise.resolver(function (resolve) {\n\n var count = 0;\n\n var cancelStartListener = $scope.$on(start, function (event, data) {\n count += 1;\n });\n\n var cancelStopListener = $scope.$on(stop, function (event, data) {\n setTimeout(function () {\n count -= 1;\n res(); // eslint-disable-line no-use-before-define\n }, 50);\n });\n\n function res() {\n if (!count) {\n\n if (cancelStartListener && cancelStopListener) {\n cancelStartListener();\n cancelStopListener();\n }\n\n return resolve();\n }\n }\n\n setTimeout(res, 50);\n });\n },\n\n compose: function compose(start, end, startAll, endAll) {\n var debounce = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n\n var count = 0;\n var active = false;\n\n $event.on(start, function () {\n if (!count) {\n setTimeout(function () {\n if (count && !active) {\n active = true;\n $event.emit(startAll);\n }\n }, debounce);\n }\n\n count += 1;\n });\n\n $event.on(end, function () {\n\n setTimeout(function () {\n count -= 1;\n\n if (!count && active) {\n active = false;\n $event.emit(endAll);\n }\n }, 0);\n });\n\n return {\n getCount: function getCount() {\n return count;\n },\n isActive: function isActive() {\n return Boolean(count);\n },\n reset: function reset() {\n count = 0;\n }\n };\n }\n};\n\nangular.value(\"$event\", $event);\n_promise.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/event.js\n// module id = ../node_modules/squid/dist/core/event.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _api = require('./api');\n\nObject.keys(_api).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _api[key];\n }\n });\n});\n\nvar _class = require('./class');\n\nObject.keys(_class).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _class[key];\n }\n });\n});\n\nvar _config = require('./config');\n\nObject.keys(_config).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _config[key];\n }\n });\n});\n\nvar _error = require('./error');\n\nObject.keys(_error).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _error[key];\n }\n });\n});\n\nvar _event = require('./event');\n\nObject.keys(_event).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _event[key];\n }\n });\n});\n\nvar _integration = require('./integration');\n\nObject.keys(_integration).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _integration[key];\n }\n });\n});\n\nvar _model = require('./model');\n\nObject.keys(_model).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _model[key];\n }\n });\n});\n\nvar _promise = require('./promise');\n\nObject.keys(_promise).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _promise[key];\n }\n });\n});\n\nvar _util = require('./util');\n\nObject.keys(_util).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _util[key];\n }\n });\n});\n\nvar _loader = require('./loader');\n\nObject.keys(_loader).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _loader[key];\n }\n });\n});\n\nvar _dom = require('./dom');\n\nObject.keys(_dom).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _dom[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/index.js\n// module id = ../node_modules/squid/dist/core/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$integration = exports.$CONTEXT = exports.$DEFAULT = undefined;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar $DEFAULT = exports.$DEFAULT = 'DEFAULT';\n\nvar $CONTEXT = exports.$CONTEXT = {\n\n // Full page checkout\n FULLPAGE: 'FULLPAGE',\n\n // Checkout in popup\n POPUP: 'POPUP',\n\n // Checkout in lightbox (iframe)\n LIGHTBOX: 'LIGHTBOX',\n\n // Web view\n WEBVIEW: 'WEBVIEW',\n\n // Native checkout\n NATIVE_CHECKOUT: 'NATIVE_CHECKOUT'\n};\n\nvar $integration = exports.$integration = {\n\n flow: $DEFAULT,\n\n init: function init(flow, config) {\n this.config = config || {};\n\n if (flow) {\n this.setFlow(flow);\n }\n\n this.setContext(this.getContext());\n },\n getContext: function getContext() {\n\n if (this.isIFrame()) {\n return $CONTEXT.LIGHTBOX;\n } else if (this.isPopup()) {\n return $CONTEXT.POPUP;\n } else {\n return $CONTEXT.FULLPAGE;\n }\n },\n isPopup: function isPopup() {\n return Boolean(window.opener);\n },\n isIFrame: function isIFrame() {\n return window.top !== window.self;\n },\n setContext: function setContext(context) {\n _logger.$logger.info('integration_context_' + context);\n this.context = context;\n },\n setFlow: function setFlow(flow) {\n _logger.$logger.info('integration_flow_' + flow);\n this.flow = flow;\n },\n is: function is(context, flow) {\n return this.isContext(context) && this.isFlow(flow);\n },\n isContext: function isContext(context) {\n return this.context === context;\n },\n isFlow: function isFlow(flow) {\n return this.flow === flow;\n },\n getConfig: function getConfig(key) {\n\n this.context = this.getContext();\n\n if (!this.config) {\n return;\n }\n\n if (this.config.hasOwnProperty(this.context) && this.config[this.context].hasOwnProperty(this.flow) && this.config[this.context][this.flow].hasOwnProperty(key)) {\n\n return this.config[this.context][this.flow][key];\n }\n\n if (this.config.hasOwnProperty(this.context) && this.config[this.context].hasOwnProperty(key)) {\n\n return this.config[this.context][key];\n }\n\n if (this.config.hasOwnProperty($DEFAULT) && this.config[$DEFAULT].hasOwnProperty(this.flow) && this.config[$DEFAULT][this.flow].hasOwnProperty(key)) {\n\n return this.config[$DEFAULT][this.flow][key];\n }\n\n if (this.config.hasOwnProperty($DEFAULT) && this.config[$DEFAULT].hasOwnProperty(key)) {\n\n return this.config[$DEFAULT][key];\n }\n },\n error: function error(message) {\n return new Error('Integration error: ' + this.context + ' / ' + this.flow + ' :: ' + message);\n }\n};\n\nangular.value(\"$DEFAULT\", $DEFAULT);\nangular.value(\"$CONTEXT\", $CONTEXT);\nangular.value(\"$integration\", $integration);\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/integration.js\n// module id = ../node_modules/squid/dist/core/integration.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$loader = undefined;\n\nvar _event = require('./event');\n\nvar _firstLoad = false;\n\nvar loader = _event.$event.compose('loading', 'loaded', 'startLoad', 'allLoaded', 100);\n\nvar $loader = exports.$loader = {\n\n isLoading: function isLoading() {\n return Boolean(loader.getCount());\n },\n firstLoad: function firstLoad() {\n return _firstLoad;\n },\n reset: function reset() {\n loader.reset();\n }\n};\n\n_event.$event.on('allLoaded', function () {\n _firstLoad = true;\n});\n\nangular.value(\"$loader\", $loader);\n_event.$event;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/loader.js\n// module id = ../node_modules/squid/dist/core/loader.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$Model = undefined;\n\nvar _class = require('./class');\n\nvar _util = require('./util');\n\nvar _promise = require('./promise');\n\nvar $Model = exports.$Model = _class.$Class.extend('$Model', {\n\n init: function init() {\n\n if (this.keys().length) {\n this.onPopulate();\n }\n\n if (this.id) {\n var _cache = this.constructor._modelCache = this.constructor._modelCache || {};\n\n _cache[this.id] = this;\n }\n\n this.meta = {\n populated: false\n };\n },\n\n /**\n * Add the passed in properties to this Model.\n * Sets the meta.populated to true. This flag\n * can be used later to determine if the model is populated.\n * Calls onPopulate() in the end.\n */\n populate: function populate() {\n\n this.meta.populated = true;\n this.setProperties.apply(this, arguments);\n delete this.meta.invalidated;\n this.onPopulate();\n return this;\n },\n\n fetchChildren: function fetchChildren() {\n return _promise.$promise.resolve();\n },\n\n /**\n * Override this method, to execute any logic after model is populated.\n */\n onPopulate: function onPopulate() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Override this method, to execute any logic after model is invalidated.\n */\n onInvalidate: function onInvalidate() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Override this method to return a Mock instance. Must return a promise which resolves to model.\n */\n fetchMock: function fetchMock() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Retrieves the model.\n *\n * If model is already populated just returns a promise which resolves to `this`\n * If there is a retriever for this model, then return the retreiver.\n * Else calls the api to retrieve the model.\n *\n * @param options\n * @returns {*}\n */\n retrieve: function retrieve(options) {\n var self = this;\n\n options = options || {};\n\n if (self.meta.populated) {\n\n if (options.success) {\n return _promise.$promise.resolve(options.success(self));\n }\n\n return _promise.$promise.resolve(this);\n }\n\n if (this.retriever) {\n return this.retriever;\n }\n\n if (!this.api) {\n throw new Error('Tried to populate a model with no api');\n }\n\n options.model = this;\n\n this.retriever = this.api.retrieve(options).then(function (res) {\n return self;\n })['finally'](function () {\n delete self.retriever;\n });\n\n return this.retriever;\n },\n\n /**\n * Calls a post on the api to save this model. Takes options as parameters.\n * options will passed down to api.post.\n *\n * @param options\n * @returns {*|HttpPromise}\n */\n save: function save(options) {\n options = options || {};\n options.model = this;\n\n options.data = options.data || this.serialize();\n\n return this.api.post(options);\n },\n\n /**\n * Calls Api.action to perform any action on the model.\n *\n * Takes action name and optional 'options' object as parameters.\n *\n * Ex: $CheckoutSession.actions('create', [options])\n *\n * @param action\n * @param options\n * @returns {*}\n */\n action: function action(_action, options) {\n options = options || {};\n options.model = this;\n\n return this.api.action(_action, options);\n },\n\n /**\n * Use this method to force a api call to get the data.\n *\n * @param options\n * @returns {*}\n */\n reload: function reload(options) {\n this.meta.populated = false;\n return this.retrieve(options);\n },\n\n stringify: function stringify() {\n return JSON.stringify(this, 2);\n },\n\n log: function log() {\n console.log(this.stringify());\n },\n\n serialize: function serialize() {// eslint-disable-line no-empty-function\n\n },\n\n /**\n * Invalidate the current model. Sets the meta.populated to false and sets meta.invalidated to true.\n */\n invalidate: function invalidate() {\n this.meta.populated = false;\n this.meta.invalidated = true;\n this.onInvalidate();\n },\n\n /**\n * Creates a new Class with properties from `child`. Then assigns `this` as parent to the new Class.\n *\n * @param Cls\n * @param child\n * @returns {*}\n */\n child: function child(Cls, _child) {\n\n if (!_child) {\n return;\n }\n\n return Cls.create(_child.id || this.id, { parent: this }).populate(_child);\n },\n\n /**\n *\n * @param Cls\n * @param children\n * @returns {*}\n */\n children: function children(Cls, _children) {\n var self = this;\n\n if (!_children) {\n return _children;\n }\n\n return _util.$util.map(_children, function (child) {\n return self.child(Cls, child);\n });\n }\n});\n\nvar cache = {};\n\n$Model.reopenClass({\n\n instance: function instance(id) {\n\n var modelCache = cache[this.id] = cache[this.id] || {};\n var instance = modelCache[id || 0] || this.create.apply(this, arguments);\n\n return instance;\n },\n\n retrieveInstance: function retrieveInstance() {\n return this.instance.apply(this, arguments).retrieve();\n },\n\n create: function create(id) {\n\n var modelCache = cache[this.id] = cache[this.id] || {};\n var instance = modelCache[id || 0] = new this({ // eslint-disable-line new-cap\n id: id || 0\n });\n\n instance.setProperties.apply(instance, Array.prototype.slice.call(arguments, 1));\n\n return instance;\n },\n\n fetch: function fetch() {\n console.warn('Model.fetch is deprecated, please use Model.instance');\n return this.instance.apply(this, arguments);\n },\n\n clearCache: function clearCache() {\n cache = {};\n },\n\n /**\n * should invalidate all models where the invalidationKey is found truthy\n *\n * invalidationKey: key of type string to look for in a model\n * example: $Model.bulkInvalidate('invalidateOnLogout');\n */\n bulkInvalidate: function bulkInvalidate(invalidationKey) {\n if (!invalidationKey) {\n return;\n }\n _util.$util.forEach(cache, function (modelCache, key) {\n _util.$util.forEach(modelCache, function (modelInstance, instanceId) {\n if (modelInstance[invalidationKey]) {\n modelInstance.invalidate();\n }\n });\n });\n }\n});\n\nangular.value(\"$Model\", $Model);\n_class.$Class;\n\n_util.$util;\n\n_promise.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/model.js\n// module id = ../node_modules/squid/dist/core/model.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$promise = $promise;\n\nvar _util = require('./util');\n\nvar _error = require('./error');\n\nvar Promise = window.Promise;\n\nfunction $promise(obj) {\n return Promise.resolve(obj);\n}\n\n_util.$util.extend($promise, {\n use: function use(CustomPromise) {\n Promise = CustomPromise;\n if (!window.Promise) {\n window.Promise = CustomPromise;\n }\n },\n resolver: function resolver(method) {\n return new Promise(method);\n },\n resolve: function resolve(value) {\n return Promise.resolve(value);\n },\n reject: function reject(value) {\n return Promise.reject(value);\n },\n\n\n run: function run(method) {\n return Promise.resolve().then(method);\n },\n\n call: function call(method) {\n return Promise.resolve().then(method);\n },\n\n sequential: function sequential(methods) {\n\n var prom = Promise.resolve();\n\n _util.$util.forEach(methods, function (method) {\n prom = prom.then(method);\n });\n\n return prom;\n },\n\n sleep: function sleep(time) {\n return new Promise(function (resolve) {\n setTimeout(resolve, time);\n });\n },\n\n map: function map(items, method) {\n\n var promises = void 0;\n\n if (items instanceof Array) {\n promises = [];\n } else if (items instanceof Object) {\n promises = {};\n } else {\n return Promise.resolve();\n }\n\n return this.all(_util.$util.map(items, function (item, key) {\n\n promises[key] = Promise.resolve(item).then(function (result) {\n return method(result, key, promises);\n });\n\n return promises[key];\n }));\n },\n\n all: function all(items) {\n\n if (items instanceof Array) {\n return Promise.all(items);\n } else if (items instanceof Object) {\n return this.hash(items);\n }\n\n return Promise.resolve([]);\n },\n\n hash: function hash(obj) {\n var results = {};\n\n return Promise.all(_util.$util.map(obj, function (item, key) {\n return Promise.resolve(item).then(function (result) {\n results[key] = result;\n });\n })).then(function () {\n return results;\n });\n },\n\n extend: function extend(obj, hash) {\n return this.hash(hash || {}).then(function (data) {\n _util.$util.extend(obj, data);\n });\n },\n\n attempt: function attempt(attempts, method) {\n\n attempts -= 1;\n\n return Promise.resolve().then(function () {\n return method(attempts);\n })['catch'](function (err) {\n\n if (attempts) {\n return $promise.attempt(attempts, method);\n }\n\n return Promise.reject(err);\n });\n },\n\n debounce: function debounce(method, time) {\n\n var timeout = void 0;\n var resolvers = {};\n\n return function () {\n\n var self = this;\n var args = arguments;\n var key = JSON.stringify(args);\n\n resolvers[key] = resolvers[key] || [];\n\n return new Promise(function (resolve) {\n resolvers[key].push(resolve);\n clearTimeout(timeout);\n\n timeout = setTimeout(function () {\n\n var result = method.apply(self, args);\n\n _util.$util.forEach(resolvers[key], function (resolver) {\n resolver(result);\n });\n\n delete resolvers[key];\n }, time);\n });\n };\n },\n\n every: function every(collection, handler) {\n return this.map(collection, function (item) {\n return handler(item);\n }).then(function (results) {\n return _util.$util.every(results);\n });\n },\n\n providing: function providing(condition, handler) {\n return Promise.resolve(condition).then(function (result) {\n if (result) {\n return handler(result);\n }\n });\n },\n\n until: function until(condition, pollTime, timeout, alwaysResolve) {\n\n return new Promise(function (resolve, reject) {\n if (condition()) {\n return resolve();\n }\n\n var interval = setInterval(function () {\n if (condition()) {\n clearInterval(interval);\n return resolve();\n }\n }, pollTime);\n\n if (timeout) {\n setTimeout(function () {\n clearInterval(interval);\n return alwaysResolve ? resolve() : reject();\n }, timeout);\n }\n });\n },\n\n first: function first(handlers) {\n\n var prom = $promise.resolve();\n var result = void 0;\n\n _util.$util.forEach(handlers, function (handler) {\n prom = prom.then(function () {\n return result || handler();\n }).then(function (handlerResult) {\n result = handlerResult;\n return result;\n });\n });\n\n return prom;\n },\n\n shortCircuit: function shortCircuit() {\n return $promise.reject(new _error.$ShortCircuit());\n }\n});\n\nangular.value(\"$promise\", $promise);\n_util.$util;\n\n_error.$ShortCircuit;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/promise.js\n// module id = ../node_modules/squid/dist/core/promise.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$unresolved = exports.$util = exports.isUnsafeRedirect = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.$getRedirectUrl = $getRedirectUrl;\nexports.$dispatch = $dispatch;\nexports.$experiment = $experiment;\n\nvar _event = require('./event');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _config = require('./config');\n\nvar _integration = require('./integration');\n\nvar _angular = require('angular');\n\nvar redirected = false;\nvar paramCache = {};\n\nvar blacklist = ['password', 'pr_password'];\nvar blacklistRegex = new RegExp('(' + blacklist.join('|') + ')=([^&]*)', 'g');\nvar sanitizeUrlForLogging = function sanitizeUrlForLogging(inputUrl) {\n return inputUrl.replace(blacklistRegex, function (match, key, value) {\n return key + '=**';\n });\n};\n\nvar isUnsafeRedirect = exports.isUnsafeRedirect = function isUnsafeRedirect(url) {\n return url.toLowerCase().replace(/\\s/g, '').indexOf('javascript:') !== -1;\n}; // eslint-disable-line no-script-url\n\nvar $util = exports.$util = {\n\n forEach: function forEach(collection, method) {\n if (collection instanceof Array) {\n for (var i = 0; i < collection.length; i++) {\n method(collection[i], i);\n }\n } else if (collection instanceof Object) {\n for (var key in collection) {\n if (collection.hasOwnProperty(key)) {\n method(collection[key], key);\n }\n }\n }\n },\n\n idleTimeout: function idleTimeout(time) {\n setTimeout(function () {\n _logger.$logger.info('page_idle');\n $util.reload();\n }, time);\n },\n\n\n reload: function reload() {\n _logger.$logger.info('reload');\n _event.$event.emit('loading');\n location.reload();\n },\n\n /**\n * replace:\n * Insert URL params provided and reload the window\n * This does not find the param if it already exists in the URL. It will add it again\n * @param params {Object} param - Params to add as URL params\n */\n replace: function replace(params) {\n if (params) {\n // Note: This won't replace the\n var url = $util.buildURL(location.href.split('#')[0], params);\n\n url = '' + url + window.location.hash;\n\n _logger.$logger.info('replace', { url: url });\n _event.$event.emit('loading');\n location.replace(url);\n } else {\n $util.reload();\n }\n },\n\n /**\n * redirect:\n * Redirects user to the given Url with options for different redirect behaviours\n * @param params {String} url - redirect url\n * @param params {Object} options - Optional param can have flags effecting behaviour of redirect\n */\n redirect: function redirect(url, options) {\n\n // optional flag to allow an iframe to Bust out of iframe mode by setting window.top.location = window.location.href\n var frameBust = options && options.frameBust;\n\n // Optional flag for url to not show up in browsing history. Handles back button scenario from CAPE to HERMES\n var replace = options && options.replace;\n\n if (isUnsafeRedirect(url)) {\n // eslint-disable-line\n _logger.$logger.error('unsafe_redirect_url', {\n url: url\n });\n throw new Error('Unsafe redirect url: ' + url);\n }\n\n _logger.$logger.info('redirect', {\n url: sanitizeUrlForLogging(url)\n });\n\n _event.$event.on('$stateChangeStart', function (event) {\n _logger.$logger.info('state_change_after_redirect');\n event.preventDefault();\n });\n\n function redir() {\n\n if (redirected) {\n return;\n }\n\n _logger.$logger.info('redirect', {\n url: sanitizeUrlForLogging(url)\n });\n\n window.onunload = window.onbeforeunload = function () {}; // eslint-disable-line no-empty-function\n\n if (_integration.$integration.getConfig('REDIRECT_TOP') !== false || frameBust) {\n if (replace) {\n window.top.location.replace(url);\n } else {\n window.top.location = url;\n }\n } else if (replace) {\n window.location.replace(url);\n } else {\n window.location = url;\n }\n\n redirected = true;\n }\n\n _event.$event.emit('loading');\n\n _logger.$logger.flush().then(redir);\n setTimeout(redir, 500);\n\n _logger.$logger.done();\n },\n\n cookiesEnabled: function cookiesEnabled() {\n var cookiesEnabled = void 0;\n\n document.cookie = '_cookiecheck=1';\n cookiesEnabled = Boolean(document.cookie.indexOf('_cookiecheck') > -1);\n document.cookie = '_cookiecheck=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n document.cookie = '_cookiecheck; expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n\n return cookiesEnabled;\n },\n\n storageEnabled: function storageEnabled(api) {\n try {\n window[api].setItem('__feature_test__', '0');\n window[api].removeItem('__feature_test__');\n return true;\n } catch (e) {\n return false;\n }\n },\n\n sessionStorageEnabled: function sessionStorageEnabled() {\n return this.storageEnabled('sessionStorage');\n },\n\n localStorageEnabled: function localStorageEnabled() {\n return this.storageEnabled('localStorage');\n },\n\n params: function params(string) {\n\n if (typeof string !== 'string') {\n string = this.queryString().slice(1);\n }\n\n var params = {};\n\n if (!string) {\n return params;\n }\n\n if (paramCache[string]) {\n return $util.extend({}, paramCache[string]);\n }\n\n $util.forEach(string.split('&'), function (pair) {\n pair = pair.split('=');\n\n if (pair[0]) {\n params[decodeURIComponent(pair[0])] = pair[1] && decodeURIComponent(pair[1]);\n }\n });\n\n paramCache[string] = params;\n\n return params;\n },\n\n queryString: function queryString() {\n if (window.location.search) {\n return window.location.search;\n } else {\n var string = window.location.href;\n var idx = string.indexOf('&');\n var rIdx = string.lastIndexOf('#');\n\n if (idx) {\n return '?' + string.substring(idx, rIdx >= 0 ? rIdx : string.length);\n }\n }\n return '';\n },\n\n queryStringSplice: function queryStringSplice(qs, insert, remove) {\n if (qs.indexOf('?') === 0) {\n qs = qs.slice(1);\n }\n\n var params = $util.extend(this.params(qs), insert);\n\n $util.forEach(remove, function (key) {\n delete params[key];\n });\n\n return '?' + this.paramToQueryString(params);\n },\n\n extend: function extend(obj, source) {\n\n if (!source) {\n return obj;\n }\n\n for (var key in source) {\n if (source.hasOwnProperty(key)) {\n obj[key] = source[key];\n }\n }\n\n return obj;\n },\n\n\n paramToQueryString: function paramToQueryString(params) {\n return this.filter(this.map(Object.keys(params).sort(), function (key) {\n if (!params[key]) {\n return;\n }\n\n return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]);\n })).join('&');\n },\n\n param: function $param(name) {\n return this.params()[name];\n },\n\n hashParam: function hashParam(name) {\n return this.params(window.location.hash.slice(1))[name];\n },\n\n base64Decode: function base64Decode(encodedString) {\n return encodedString && window.atob(encodedString); // eslint-disable-line block-scoped-var,no-undef\n },\n\n base64Encode: function base64Encode(decodedString) {\n return decodedString && window.btoa(decodedString); // eslint-disable-line block-scoped-var,no-undef\n },\n\n /*\n * decodeAndParse :\n * 1 - Base64Decode\n * 2 - URI Decode\n * 3 - Split string into a nvp object\n * return obj\n */\n decodeAndParse: function decodeAndParse(encodedString) {\n if (encodedString) {\n return this.params(decodeURIComponent(this.base64Decode(encodedString)));\n }\n },\n\n assert: function $assert(value, message, payload) {\n if (!value) {\n throw new Error(message, payload || {});\n }\n },\n\n map: function $map(array, method) {\n\n array = array || [];\n\n var results = void 0;\n\n if (array instanceof Array) {\n results = [];\n\n $util.forEach(array, function () {\n results.push(method.apply(this, arguments));\n });\n\n return results;\n } else if (array instanceof Object) {\n\n results = {};\n\n $util.forEach(array, function (val, key) {\n results[key] = method.apply(this, arguments);\n });\n\n return results;\n } else {\n throw new Error('$util.map expects array or object');\n }\n },\n\n filter: function $filter(array, method) {\n method = method || Boolean;\n var results = [];\n\n $util.forEach(array, function (item) {\n if (method.apply(this, arguments)) {\n results.push(item);\n }\n });\n\n return results;\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#find()\n * If you have an object, use the lodash or underscore .find() method\n *\n * @deprecated\n */\n find: function $find(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.find() is deprecated, use Array#find, which we have polyfilled, or _.find() for Objects instead.');\n }\n\n if (!array) {\n return;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (method(array[i])) {\n return array[i];\n }\n }\n },\n\n findIndex: function $find(array, method) {\n\n if (!array) {\n return;\n }\n\n for (var i = 0; i < array.length; i++) {\n if (method(array[i])) {\n return i;\n }\n }\n },\n\n range: function range(start, end) {\n if (!end) {\n end = start;\n start = 0;\n }\n\n var result = [];\n\n for (var i = start; i < end; i++) {\n result.push(i);\n }\n\n return result;\n },\n\n pad: function $pad(string, n, char) {\n\n n = n || 0;\n char = char || '0';\n\n var padding = Array(n + 1).join(char.toString());\n\n return (padding + string).slice(-n);\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#some() -- NOTE: Unlike Array#some(),\n * the return value of $util.some() isn't always a Boolean. It's return value\n * is whatever the passed callback returns. If you are using $util.some to\n * find an object in an array then you need to use $util.find instead of Array#some().\n * Ex:\n * 1. const preferredCard = $util.some(cardsArray, cards => card.isPreferred && card);\n * preferredCard will be the preferred card object or undefined if there isn't a\n * preferred card.\n * 2. const hasPreferred = cardsArray.some(cards => card.isPreferred && card);\n * Taking the code from #1 and simply swapping out $util.some for Array#some()\n * will result in a different return value, in this case the Boolean true if\n * there is a preferred card, otherwise false. In this case, instead of using\n * Array#some() you should use $util.find() (Array#find() isn't supported in IE9)\n * as seen below:\n * const preferredCard = $util.find(cardsArray, card => card.isPreferred);\n *\n * If you have an object, use the lodash or underscore .some() method\n *\n * @deprecated\n */\n some: function $some(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.some() is deprecated, use Array#some (use $util.find() if you are using\\n $util.some() to return someting other than a boolean) or lodash/underscore.some() instead.');\n }\n\n var result = void 0;\n\n $util.forEach(array, function (item, key) {\n if (!result) {\n result = method(item, key);\n }\n });\n\n return result;\n },\n\n /**\n * Deprecated.\n *\n * If you have an array, use Array#every()\n * If you have an object, use the lodash or underscore .every() method\n *\n * @deprecated\n */\n every: function $every(array, method) {\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n _angular.$log.warn('deprecated_method: squid.$util.every() is deprecated, use Array#every, which we have polyfilled, or _.every() for Objects instead.');\n }\n\n method = method || Boolean;\n\n var result = true;\n\n $util.forEach(array, function (item) {\n if (!method(item)) {\n result = false;\n }\n });\n\n return result;\n },\n\n reduce: function $reduce(array, method, intial) {\n $util.forEach(array, function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n intial = method.apply(undefined, [intial].concat(args));\n });\n\n return intial;\n },\n\n isPopup: function isPopup() {\n return _integration.$integration.isPopup();\n },\n\n isIFrame: function isIFrame() {\n return _integration.$integration.isIFrame();\n },\n\n buildURL: function buildURL(url, params) {\n /*\n * Do NOT add a check for anchor cause this function is also used for building XO success / cancel urls.\n * These urls are defined by the merchants and can also contain urls like \"abc.com#merchantanchor\" and merchants\n * expect (!) the following outcome: abc.com#merchantanchor?paypalparam=2\n */\n this.assert(url, 'buildURL :: expected url');\n\n var paramKeys = Object.keys(params || {});\n\n if (JSON.stringify(params) === '{}') {\n return url;\n }\n\n if (!paramKeys.length) {\n return url;\n }\n\n if (url.indexOf('?') === -1) {\n url += '?';\n } else {\n url += '&';\n }\n\n url += this.paramToQueryString(params);\n\n return url;\n },\n\n paypalURL: function paypalURL(url, params) {\n url = 'https://' + (_config.$meta.stage ? _config.$meta.stage : window.location.host) + url;\n\n return this.buildURL(url, params);\n },\n\n override: function override(obj, methodName, handler) {\n var existing = obj[methodName];\n\n obj[methodName] = function () {\n if (existing) {\n try {\n existing.apply(obj, arguments);\n } catch (err) {\n _logger.$logger.error(methodName + 'event_error', {\n error: err.toString\n });\n }\n }\n\n return handler.apply(obj, arguments);\n };\n },\n\n result: function result(method) {\n return method();\n },\n\n memoize: function memoize(method) {\n\n function memoized() {\n var key = JSON.stringify(arguments, function (_, value) {\n switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) {\n case 'function':\n throw new Error('Cannot memoize functional arguments');\n case 'undefined':\n return 'undefined';\n default:\n return value;\n }\n });\n\n if (!memoized.cache.hasOwnProperty(key)) {\n memoized.cache[key] = method.apply(this, arguments);\n }\n\n return memoized.cache[key];\n }\n\n memoized.cache = {};\n\n memoized.flush = function () {\n memoized.cache = {};\n };\n\n return memoized;\n },\n\n now: function now() {\n return window.enablePerformance ? parseInt(window.performance.now(), 10) : Date.now();\n },\n\n bindObject: function bindObject(obj, self) {\n return $util.map(obj, function (method) {\n return method.bind(self);\n });\n },\n\n hashStr: function hashStr(str) {\n var hash = 0;\n var i = void 0;\n var chr = void 0;\n var len = void 0;\n\n if (str.length === 0) {\n return hash;\n }\n for (i = 0, len = str.length; i < len; i++) {\n chr = str.charCodeAt(i);\n hash = (hash << 5) - hash + chr; // eslint-disable-line no-bitwise, no-extra-parens\n // Convert to 32bit integer\n hash |= 0; // eslint-disable-line no-bitwise\n }\n return Math.abs(hash);\n },\n\n hash: function hash() {\n return this.hashStr(Math.random());\n },\n\n popup: function popup(name, url, options, callback) {\n\n callback = $util.once(callback);\n\n var win = window.open(url, name, $util.map(Object.keys(options), function (key) {\n return key + '=' + options[key];\n }).join(', '));\n\n var interval = void 0;\n\n function checkWindowClosed() {\n if (win.closed) {\n clearInterval(interval);\n callback();\n }\n }\n\n interval = setInterval(checkWindowClosed, 50);\n setTimeout(checkWindowClosed);\n\n try {\n var close = win.close;\n\n win.close = function () {\n close.apply(this, arguments);\n checkWindowClosed();\n };\n } catch (err) {\n // pass\n }\n\n return win;\n },\n\n unique: function unique(collection) {\n return collection.filter(function (value, index, self) {\n return self.indexOf(value) === index;\n });\n },\n\n monkeyPatch: function monkeyPatch(mod, prop, method) {\n var original = mod[prop];\n\n mod[prop] = function () {\n var _this = this,\n _arguments = arguments;\n\n return method.call(this, arguments, function (self, args) {\n if (original) {\n return original.apply(self || _this, args || _arguments);\n }\n });\n };\n },\n once: function once(method) {\n var called = false;\n\n return function () {\n if (!called) {\n called = true;\n return method.apply(this, arguments);\n }\n };\n },\n camelToDasherize: function camelToDasherize(string) {\n return string.replace(/([A-Z])/g, function (g) {\n return '-' + g.toLowerCase();\n });\n },\n camelToCapsUnderscore: function camelToCapsUnderscore(string) {\n return string.replace(/([a-z][A-Z])/g, function (g) {\n return g[0] + '_' + g[1];\n }).toUpperCase();\n },\n dasherizeToCamel: function dasherizeToCamel(string) {\n return string.replace(/-([a-z])/g, function (g) {\n return g[1].toUpperCase();\n });\n },\n\n\n parentWindow: function parentWindow() {\n if (window.opener) {\n return window.opener;\n } else if (window.parent !== window) {\n return window.parent;\n }\n },\n\n hasRTL: function hasRTL(str) {\n return new RegExp('[\\u0590-\\u07BF]').test(str);\n },\n noop: function noop() {// eslint-disable-line no-empty-function\n\n },\n\n\n /**\n * @function isObject - tests to see if a passed argument is an Object. Returns `false`\n * for anything that is 'object-like' but not an actual Object (Array, Set, Map, ect)\n * as well as for `null` and `Object.create(null)`\n * @param {*} o\n * @returns {boolean}\n */\n isObject: function isObject(o) {\n var oAsString = Object.prototype.toString.call(o);\n\n return o instanceof Object && oAsString === '[object Object]';\n },\n\n\n /**\n * @function debounce\n * @param {function} callback\n * @param {number} time\n * @returns {function}\n */\n debounce: function debounce(callback, time) {\n var timeout = void 0;\n\n return function () {\n var _this2 = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var functionCall = function functionCall() {\n return callback.apply(_this2, args);\n };\n\n clearTimeout(timeout);\n timeout = setTimeout(functionCall, time);\n };\n },\n\n\n /**\n * @function getProperty\n * @param {object} obj\n * @param {string} propString\n * @param {string} splitOn\n * @returns {*}\n *\n * Ex:\n * const obj = {\n * a: {\n * b: {\n * c: 'property c'\n * },\n * 'key.with.periods': 10\n * }\n * };\n * const c = $util.getProperty(obj, 'a.b.c'); // c === 'property c'\n * const f = $util.getProperty(obj, 'a.b.c.d.e.f'); // f === undefined\n * const fDefault = $util.getProperty(\n * obj,\n * 'a.b.c.d.e.f',\n * { default: 'default value for f' }\n * ); // f === 'default value for f'\n * const n = $util.getProperty(obj, 'a,b,key.with.periods', { splitOn: ',' }); // n === 10\n */\n getProperty: function getProperty(obj) {\n var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _options$splitOn = options.splitOn,\n splitOn = _options$splitOn === undefined ? '.' : _options$splitOn,\n defaultValue = options['default'];\n\n\n if (!this.isObject(obj) || typeof path !== 'string' || typeof splitOn !== 'string') {\n return;\n }\n\n var pathArray = path.split(splitOn);\n var prop = obj[pathArray.shift()];\n\n while (prop && pathArray.length && this.isObject(prop)) {\n prop = prop[pathArray.shift()];\n }\n\n return pathArray.length || prop === undefined ? defaultValue : prop;\n }\n};\n\nvar $unresolved = exports.$unresolved = { then: $util.noop, 'catch': $util.noop };\n\nfunction $getRedirectUrl(product, params) {\n var url = '';\n var urlParams = $util.params();\n\n if (_config.$config.deploy.isLocal() || _config.$config.deploy.isStage()) {\n url = _config.$config.urls.dispatch && _config.$config.urls.dispatch[product] || '';\n }\n\n url += _config.$config.urls.fallbackUrl[product];\n\n $util.extend(urlParams, params || {});\n\n // cmd is a reserved slingshot param\n if (urlParams.cmd) {\n delete urlParams.cmd;\n }\n\n return $util.buildURL(url, urlParams);\n}\n\nfunction $dispatch(product, params, stateChange) {\n $util.assert(product, 'expected product');\n\n _logger.$logger.log('info', 'dispatch', {\n product: product\n });\n\n _event.$event.emit('loading');\n\n var url = '';\n\n url = $getRedirectUrl(product, params);\n\n // fire an event for xo-tracking to listen to and do fpti logging\n if (stateChange) {\n _event.$event.emit('page_loaded', stateChange.fromState, stateChange.toState);\n }\n\n return $util.redirect(url);\n}\n\nfunction $experiment(name, sample, id, loggerPayload) {\n\n var throttle = $util.hashStr(name + '_' + id) % 100;\n\n var group = void 0;\n\n if ($util.param(name) === 'true') {\n group = 'test_forced';\n } else if ($util.param(name) === 'false') {\n group = 'control_forced';\n } else if (throttle < sample) {\n group = 'test';\n } else if (sample >= 50 || sample <= throttle && throttle < sample * 2) {\n // eslint-disable-line no-extra-parens\n group = 'control';\n } else {\n group = 'throttle';\n }\n\n _logger.$logger.info('fpti_pxp_check', {\n from: 'PXP_CHECK',\n to: 'process_pxp_check',\n pxp_exp_id: name,\n pxp_trtmnt_id: group\n });\n\n _logger.$logger.info(name + '_' + group, loggerPayload || {});\n\n if (group === 'test' || group === 'test_forced') {\n return true;\n } else if (group === 'control') {\n return false;\n }\n}\n\nangular.value(\"isUnsafeRedirect\", isUnsafeRedirect);\nangular.value(\"$util\", $util);\nangular.value(\"$unresolved\", $unresolved);\nangular.value(\"$getRedirectUrl\", $getRedirectUrl);\nangular.value(\"$dispatch\", $dispatch);\nangular.value(\"$experiment\", $experiment);\n_event.$event;\n\n_logger.$logger;\n\n_config.$config;\n\n_config.$meta;\n\n_integration.$integration;\n\n_angular.$log;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/core/util.js\n// module id = ../node_modules/squid/dist/core/util.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _ng = require('./ng');\n\nObject.keys(_ng).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ng[key];\n }\n });\n});\n\nvar _core = require('./core');\n\nObject.keys(_core).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _core[key];\n }\n });\n});\n\nvar _locale = require('./locale');\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _paypal = require('./paypal');\n\nObject.keys(_paypal).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _paypal[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/index.js\n// module id = ../node_modules/squid/dist/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.getCurrencySymbol = exports.truncateCurrencyConversionString = undefined;\nexports.roundingAndSeparators = roundingAndSeparators;\nexports.formatCurrency = formatCurrency;\n\nvar _locale = require('./locale');\n\nvar ALL_NON_BREAKING_SPACE = new RegExp('\\xa0+', 'g'); // everything to do with currency formatting\n\n// quick Griffin reference on currency format:\n// ¤ : Currency Symbol = $\n// # : Amount = 186432.431\n// C : Currency Code = USD\n\nvar CODE_IN_FRONT = new RegExp('^([^¤#]*)(C[\\\\s]*)(.*)$'); // matching groups: (any negative symbol)(code)(the rest)\nvar ENDS_IN_WHITESPACE = new RegExp('\\s$');\nvar THOUSANDS_SPLITTER = /\\B(?=(\\d{3})+(?!\\d))/g; // eslint-disable-line fasec/no-unsafe-regex\nvar HUNDREDS_SPLITTER = /(\\d)(?=(\\d\\d)+\\d$)/g; // eslint-disable-line fasec/no-unsafe-regex\n\n// This seems to be the only currency / locale specific exception in Griffin\nvar STYLE_EXCEPTION = {\n 'tr TR TRY': '# ¤;-# ¤'\n};\n\nvar AmountOnlyStyle = '#;-#'; // A currency style for number only. $9USD -> 9.00\n\n// Griffin exceptions for separators at hundreds- xx,xx,xxx format\nvar HUNDREDS_SEPARATOR_EXCEPTION = ['IN', 'BT', 'MV', 'NP'];\n\nvar isObject = function isObject(param) {\n return Object.prototype.toString.call(param) === '[object Object]';\n};\n\n// Griffin \"fuzzy logic\"\n// apparently if the symbol is at least \"66% similar\" to the code, ignore it\nfunction maybeIgnoreSymbol(style, symbol, code) {\n\n // THIS IS NOT COMMUTATIVE\n function fuzzyMatch(code, symbol) {\n // eslint-disable-line no-shadow\n if (code === symbol) {\n return 100;\n } else {\n var codeParts = code.split('');\n var symbolParts = symbol.split('');\n var equivalency = codeParts.reduce(function (equiv, codePart) {\n var symbolPos = symbolParts.indexOf(codePart);\n\n if (symbolPos !== -1) {\n symbolParts.splice(symbolPos, 1);\n return equiv + 1;\n }\n return equiv;\n }, 0);\n var weight = equivalency / codeParts.length;\n\n return weight * 100;\n }\n }\n\n var ignoreSymbol = symbol.length > 1 && fuzzyMatch(code, symbol) >= 66;\n\n return ignoreSymbol ? style.replace(/¤\\s*/g, '') : style;\n}\n\n// deal with rounding due to truncation (Griffin rounds up) as well as dot/comma symbols\n// and thousand separators\nfunction roundingAndSeparators(amountString, _ref, _ref2) {\n var lang = _ref.lang,\n country = _ref.country;\n var decimalPlaces = _ref2.decimalPlaces,\n dot = _ref2.dot,\n comma = _ref2.comma;\n\n var value = parseFloat(amountString);\n var truncate = decimalPlaces === 0;\n var amountParts = truncate && !isNaN(value) ? Math.round(value).toString().split('.') : amountString.split('.');\n var exception = HUNDREDS_SEPARATOR_EXCEPTION.indexOf(country) > -1; // special exceptions\n var wholeString = exception ? amountParts[0].replace(HUNDREDS_SPLITTER, '$1,') : amountParts[0].replace(THOUSANDS_SPLITTER, comma);\n var decimalString = amountParts[1] || '00';\n\n return truncate ? wholeString : '' + wholeString + dot + decimalString;\n}\n\n// this is an agreement with UED for visual consistency - the currency code, if displayed, is always on the right\nfunction forceCodeToRight(style) {\n var parts = CODE_IN_FRONT.exec(style) || [];\n var endsWithWhitespace = ENDS_IN_WHITESPACE.test(style);\n var newStyle = style;\n\n // if CODE_IN_FRONT regex matches, array indexes -\n // [1] negative symbol plus whitespace, if any,\n // [2] the \"C\" plus any whitespace,\n // [3] whatever is after \"C\"\n if (parts.length === 4) {\n newStyle = parts[1] + parts[3] + (endsWithWhitespace ? 'C' : ' C');\n }\n\n return newStyle;\n}\n\n// deal with\n// 1. exceptions for specific locales\n// 2. positive and negative styles\n// 3. griffin fuzzy logic\n// 4. UED consistency logic\nfunction getFinalStyle() {\n var styleString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ';';\n var _ref3 = arguments[1];\n var lang = _ref3.lang,\n country = _ref3.country;\n var _ref4 = arguments[2];\n var value = _ref4.value,\n _ref4$symbol = _ref4.symbol,\n symbol = _ref4$symbol === undefined ? '' : _ref4$symbol,\n code = _ref4.code;\n\n var exception = STYLE_EXCEPTION[[lang, country, code].join(' ')]; // special exceptions\n var currencyStyle = exception || styleString;\n\n var _currencyStyle$split = currencyStyle.split(';'),\n positiveStyle = _currencyStyle$split[0],\n negativeStyle = _currencyStyle$split[1]; // the style is separated by postive and negative notation via a ;\n\n\n var baseStyle = value < 0 ? negativeStyle || '-¤# C' : positiveStyle || '¤# C';\n var griffinStyle = exception ? baseStyle : maybeIgnoreSymbol(baseStyle, symbol, code); // don't apply fuzzy logic on exceptions\n\n return forceCodeToRight(griffinStyle);\n}\n\n// take the style and the formatted amount (rounded / truncated / thousands separator / decimal separator)\n// and produce the final result.\n//\n// wrapCodeInSpan - wraps the currency code in a span.currencyCode for styling purposes\nfunction applyCurrencyStyle(finalStyle, amountFormatted, _ref5) {\n var symbol = _ref5.symbol,\n code = _ref5.code,\n _ref5$wrapCodeInSpan = _ref5.wrapCodeInSpan,\n wrapCodeInSpan = _ref5$wrapCodeInSpan === undefined ? false : _ref5$wrapCodeInSpan;\n\n // the style will take care of negative symbol (see getFinalStyle function above)\n var absoluteAmountFormatted = amountFormatted.replace('-', '');\n\n // parallel operation is safer than serial replace\n return finalStyle.split('').map(function (char) {\n switch (char) {\n case 'C':\n return wrapCodeInSpan ? '' + code + '' : code;\n case '¤':\n return symbol;\n case '#':\n return absoluteAmountFormatted;\n default:\n return char;\n }\n }).join('').replace(ALL_NON_BREAKING_SPACE, ' ');\n}\n\n/**\n * @function formatCurrency\n * @param {string|number} amount Amount can be a string or a number\n * @param {string} code\n * @param {boolean} wrapCodeInSpan\n * @param {string} [style=SymbolISOCurrency]\n * @returns {string} formatted currency string\n */\nfunction formatCurrency(amount, code, wrapCodeInSpan) {\n var style = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'SymbolISOCurrency';\n\n if (isObject(amount) || typeof amount === 'undefined' || amount === null) {\n return;\n }\n\n var _ref6 = _locale.$locale.metadata || {},\n _ref6$number = _ref6.number,\n numberConfig = _ref6$number === undefined ? {} : _ref6$number,\n _ref6$currency = _ref6.currency,\n currencyConfig = _ref6$currency === undefined ? {} : _ref6$currency;\n\n var _currencyConfig$digit = currencyConfig.digits,\n digits = _currencyConfig$digit === undefined ? {} : _currencyConfig$digit,\n _currencyConfig$style = currencyConfig.styles,\n styles = _currencyConfig$style === undefined ? {} : _currencyConfig$style,\n _currencyConfig$suppo = currencyConfig.supportedSymbols,\n currencySymbols = _currencyConfig$suppo === undefined ? {} : _currencyConfig$suppo;\n\n var value = parseFloat(amount);\n\n styles.AmountOnlyStyle = AmountOnlyStyle;\n var dot = numberConfig.DECIMAL_SEP === undefined ? '.' : numberConfig.DECIMAL_SEP;\n var comma = numberConfig.GROUP_SEP === undefined ? ',' : numberConfig.GROUP_SEP;\n\n var amountFormatted = roundingAndSeparators(amount.toString(), _locale.$locale, { decimalPlaces: digits[code], dot: dot, comma: comma });\n\n if (code) {\n var symbol = currencySymbols[code];\n var finalStyle = getFinalStyle(styles[style], _locale.$locale, { value: value, symbol: symbol, code: code });\n\n return applyCurrencyStyle(finalStyle, amountFormatted, { symbol: symbol, code: code, wrapCodeInSpan: wrapCodeInSpan });\n }\n\n return amountFormatted; // HTML?\n}\n\n/**\n * @function truncateCurrencyConversionString\n * @description Takes a fullString, amount, and amountForex and truncates\n * the number in the full string to number of digits in amountForex.\n * This function is used to format the PayPal currency conversion\n * rate that is displayed to the user (e.g. '1 CAD = $0.7459 USD')\n * e.g. inputs of:\n * fullString = '$0.745994235 USD'\n * amount = '0.745994235'\n * amountForex = '0.7459'\n * results in an output of '$0.7459 USD'\n * @param {object} Contains keys 'fullString', 'amount', and 'amountForex'\n * @returns {string}\n */\nvar truncateCurrencyConversionString = exports.truncateCurrencyConversionString = function truncateCurrencyConversionString() {\n var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n fullString = _ref7.fullString,\n amount = _ref7.amount,\n amountForex = _ref7.amountForex;\n\n var allArgsAreStrings = [fullString, amount, amountForex].every(function (s) {\n return typeof s === 'string';\n });\n\n if (!allArgsAreStrings) {\n return fullString || '';\n }\n\n // Some countries, e.g. France, use commas instead of decimals\n var target = amountForex.includes(',') ? amount.replace('.', ',') : amount;\n\n return fullString.replace(target, amountForex);\n};\n\n/**\n * @description takes a currency code and\n * returns either a code or a symbol based\n * on our currency mapping.\n * eg: USD -> $ , RUB -> RUB\n *\n * @param {*} code\n * @returns {string}\n */\nvar getCurrencySymbol = exports.getCurrencySymbol = function getCurrencySymbol(code) {\n var _ref8 = _locale.$locale.metadata || {},\n _ref8$currency = _ref8.currency,\n currency = _ref8$currency === undefined ? {\n supportedSymbols: {}\n } : _ref8$currency;\n\n return currency.supportedSymbols[code];\n};\n\n_locale.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/currency.js\n// module id = ../node_modules/squid/dist/locale/currency.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$feature = $feature;\nexports.$featureCountries = $featureCountries;\n\nvar _core = require('../core');\n\nvar _locale = require('./locale');\n\nfunction $feature(prop, def, country) {\n\n var features = _core.$config.features || {};\n\n country = country || _locale.$locale.country;\n // 1. Check the feature is present in country\n var result = _core.$Class.get(features[country], prop);\n\n if (result !== undefined) {\n return result;\n }\n // 2. Check the feature is present in feature group\n\n Object.keys(_core.$config.regions).some(function (region) {\n if (_core.$config.regions[region].indexOf(country) !== -1) {\n result = _core.$Class.get(features[region], prop);\n return result !== undefined;\n }\n\n return false;\n });\n\n if (result !== undefined) {\n return result;\n }\n // 3. Check the feature is present in default group\n result = _core.$Class.get(features.DEFAULT, prop);\n\n if (result !== undefined) {\n return result;\n }\n return def;\n}\n\n// Build a list of all countries in our feature list and regions\n// populate countries with out REGION names in the list\nvar allCountries = _core.$Class.keys(_core.$config.features || {}).filter(function (country) {\n return country !== 'DEFAULT' && !(_core.$config.regions && _core.$config.regions.hasOwnProperty(country));\n});\n\n// populate all the region countries in to allcountries\n_core.$util.forEach(_core.$config.regions, function (countries, region) {\n _core.$util.forEach(countries, function (country) {\n if (allCountries.indexOf(country) === -1) {\n allCountries.push(country);\n }\n });\n});\n\nfunction $featureCountries(prop) {\n // Find the countries with a certain feature enabled\n return allCountries.filter(function (country) {\n return $feature(prop, false, country);\n });\n}\n\nangular.value(\"$feature\", $feature);\nangular.value(\"$featureCountries\", $featureCountries);\n_core.$config;\n\n_core.$Class;\n\n_core.$util;\n\n_locale.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/feature.js\n// module id = ../node_modules/squid/dist/locale/feature.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _locale = require('./locale');\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _currency = require('./currency');\n\nObject.keys(_currency).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _currency[key];\n }\n });\n});\n\nvar _feature = require('./feature');\n\nObject.keys(_feature).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _feature[key];\n }\n });\n});\n\nvar _name = require('./name');\n\nObject.keys(_name).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _name[key];\n }\n });\n});\n\nvar _quantity = require('./quantity');\n\nObject.keys(_quantity).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _quantity[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/index.js\n// module id = ../node_modules/squid/dist/locale/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$localeHelper = exports.$locale = exports.$LocaleModel = exports.$MetadataModel = exports.$ContentModel = undefined;\nexports.sanitize = sanitize;\nexports.Content = Content;\nexports.$contentVersion = $contentVersion;\nexports.$renderContent = $renderContent;\nexports.$flushContent = $flushContent;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _core = require('../core');\n\nvar _paypal = require('../paypal');\n\nfunction sanitize(html) {\n return html && html.toString().replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n} /* eslint-disable no-use-before-define */\n\n\nvar JSONStringify = JSON.stringify;\n\nJSON.stringify = function (item) {\n if (item instanceof Content) {\n return item.toString();\n }\n return JSONStringify.apply(this, arguments);\n};\n\nfunction Content(key, props) {\n this.key = key;\n this.props = props;\n}\n\nContent.cache = {};\n\nContent.get = function (key, props) {\n\n if (!key) {\n return '';\n }\n\n props = props || {};\n\n var cacheKey = $locale.country + '_' + $locale.lang + '_' + key + '_' + JSONStringify.call(JSON, props);\n var cacheVal = Content.cache[cacheKey];\n\n if (cacheVal !== undefined) {\n return cacheVal;\n }\n\n cacheVal = Content.cache[cacheKey] = new Content(key, props);\n\n return cacheVal;\n};\n\nContent.prototype.toString = Content.prototype.valueOf = function () {\n if (this.string) {\n return this.string;\n }\n\n this.string = this.render(false);\n\n return this.string;\n};\n\nContent.prototype.toSafeString = function () {\n if (this.safeString) {\n return this.safeString;\n }\n\n this.safeString = this.render(true);\n\n return this.safeString;\n};\n\nContent.prototype.render = function (safe) {\n var _this = this;\n\n if (!this.key) {\n return '';\n }\n\n var value = contentCache[$locale.country] && contentCache[$locale.country][$locale.lang];\n var keys = this.key.split('.');\n\n for (var i = 0; i < keys.length; i++) {\n if (value) {\n value = value[keys[i]];\n } else {\n break;\n }\n }\n\n if (!value) {\n return '';\n }\n\n return value.replace(/\\{\\w+\\}/g, function (prop) {\n prop = prop.slice(1, prop.length - 1);\n\n if (prop === 'country') {\n return $locale.country;\n }\n\n if (prop === 'lang') {\n return $locale.lang;\n }\n\n if (!_this.props[prop]) {\n if (!_core.$loader.isLoading()) {\n _logger.$logger.warn('missing_content_prop', {\n key: _this.key,\n prop: prop\n }, { unique: true });\n }\n\n return '';\n }\n\n var propStr = _this.props[prop].toString();\n\n if (safe) {\n return sanitize(propStr);\n }\n\n return propStr;\n });\n};\n\nvar contentCache = {};\nvar currentVersion = void 0;\n\nwindow.addContent = function (country, lang, content, version) {\n var countryCache = contentCache[country] = contentCache[country] || {};\n\n countryCache[lang] = content;\n currentVersion = version;\n};\n\nvar metadataCache = {};\n\nwindow.addMetadata = function (country, lang, metadata) {\n var metadataVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'default';\n\n var countryCache = metadataCache[country] = metadataCache[country] || {};\n\n countryCache[lang] = countryCache[lang] || {};\n countryCache[lang][metadataVersion] = metadata;\n};\n\nfunction $contentVersion() {\n return currentVersion || '';\n}\n\nvar PP_SPECIAL_COUNTRIES_ISO_CODES = {\n C2: 'CN'\n};\n\nvar $ContentModel = exports.$ContentModel = _core.$Model.extend('$ContentModel', {\n api: new _core.$Api({\n\n baseURI: _core.$meta.staticUrl,\n uri: '/locales/:countryCode/:lang',\n ext: 'js',\n\n retrieve: function retrieve(options) {\n var self = this;\n var model = options.model;\n\n var uri = self.getURI(model);\n\n return _core.$promise.resolve().then(function () {\n\n if (contentCache[model.countryCode] && contentCache[model.countryCode][model.lang]) {\n _logger.$logger.info('cached_content');\n return contentCache[model.countryCode][model.lang];\n }\n\n _logger.$logger.info('retrieve_content', {\n uri: uri\n });\n\n _core.$event.emit('loading');\n\n return _core.$promise.attempt(3, function () {\n return _core.$dom.loadScript('content', uri, 10000).then(function () {\n if (contentCache[model.countryCode] && contentCache[model.countryCode][model.lang]) {\n _logger.$logger.info('content_retrieved');\n return contentCache[model.countryCode][model.lang];\n }\n\n throw new Error('content_not_available');\n });\n })['catch'](function (err) {\n throw err;\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n }).then(function (content) {\n model.setProperties(content);\n return content;\n });\n }\n }),\n\n change: function change(country, lang) {\n\n if (country === this.countryCode && lang === this.lang) {\n return _core.$promise.resolve(this);\n }\n\n this.countryCode = country;\n this.lang = lang;\n\n return this.reload().then(function () {\n _core.$event.broadcast('contentChange');\n });\n }\n});\n\nvar $MetadataModel = exports.$MetadataModel = _core.$Model.extend('$MetadataModel', {\n\n api: new _core.$Api({\n\n baseURI: _core.$meta.staticUrl,\n uri: '/metadata/:country/:lang/:version?/metadata',\n ext: 'js',\n\n retrieve: function retrieve(options) {\n var self = this;\n var model = options.model;\n\n var uri = self.getURI(model);\n\n return _core.$promise.resolve().then(function () {\n\n var metadataVersion = model.version || 'default';\n\n if (metadataCache[model.country] && metadataCache[model.country][model.lang] && metadataCache[model.country][model.lang][metadataVersion]) {\n _logger.$logger.info('cached_metadata');\n return metadataCache[model.country][model.lang][metadataVersion];\n }\n\n _logger.$logger.info('retrieve_metadata', {\n uri: uri\n });\n\n _core.$event.emit('loading');\n\n return _core.$promise.attempt(3, function () {\n return _core.$dom.loadScript('metadata', uri, 10000).then(function () {\n if (metadataCache[model.country] && metadataCache[model.country][model.lang] && metadataCache[model.country][model.lang][metadataVersion]) {\n _logger.$logger.info('metadata_retrieved', {\n uri: uri\n });\n return metadataCache[model.country][model.lang][metadataVersion];\n }\n\n // Retry if not found in cache\n _logger.$logger.info('metadata_not_available', {\n uri: uri\n });\n return _core.$promise.reject(new Error('metadata_not_available'));\n });\n })['catch'](function (err) {\n throw err;\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n }).then(function (metadata) {\n model.setProperties(metadata);\n return metadata;\n });\n }\n }),\n\n setVersion: function setVersion(country, lang) {\n var _this2 = this;\n\n var versionPxpName = _core.$config.features[country] && _core.$config.features[country].metadataVersionName;\n\n if (versionPxpName && _core.$config.metadataPxpExperiments[versionPxpName]) {\n var pxp = (0, _paypal.$pxp)(_core.$config.metadataPxpExperiments[versionPxpName].experimentName, {\n 'ctx.COUNTRY': country,\n 'ctx.LANGUAGE': lang\n }, _core.$config.metadataPxpExperiments[versionPxpName].experimentTreatmentName);\n\n return pxp.then(function (treatment) {\n if (treatment) {\n _this2.version = versionPxpName;\n _logger.$logger.info('metadata_version_set', {\n country: country,\n lang: lang,\n version: versionPxpName\n });\n } else {\n delete _this2.version;\n }\n })['catch'](function () {\n delete _this2.version;\n })['finally'](function () {\n return _core.$promise.resolve();\n });\n } else {\n delete this.version;\n return _core.$promise.resolve();\n }\n },\n\n change: function change(country, lang) {\n var _this3 = this;\n\n this.country = country;\n this.lang = lang;\n\n return this.setVersion(country, lang).then(function () {\n return _this3.reload().then(function () {\n if (!_this3.noBroadcast) {\n _core.$event.broadcast('metadataChange');\n }\n });\n });\n },\n\n choose: function choose(country, lang, override) {\n\n if (country && (!this.chosenCountry || override !== false)) {\n this.chosenCountry = country;\n }\n\n if (lang && (!this.chosenLang || override !== false)) {\n this.chosenLang = lang;\n }\n\n country = this.chosenCountry || this.country;\n lang = this.chosenLang;\n\n if (_core.$config.supportedCountries) {\n if (!_core.$config.supportedCountries[country]) {\n country = this.country;\n }\n\n if (_core.$config.supportedCountries[country].indexOf(lang) === -1) {\n lang = _core.$config.supportedCountries[country][0];\n }\n }\n\n if (!lang) {\n lang = this.lang;\n }\n\n return this.change(country, lang);\n },\n\n normalizeAddressFields: function normalizeAddressFields(content) {\n\n var CONTENT_MAPPING = {\n line1Label: 'streetAddress',\n line2Label: 'streetAddress2',\n cityLabel: 'city',\n stateLabel: 'state',\n postcodeLabel: 'postalCode'\n };\n\n // Loop over all layout props, if they don't exist in Griffin, get them from xo-content\n for (var prop in CONTENT_MAPPING) {\n if (this.addressEntry && this.addressEntry.strings[prop]) {\n this.addressEntry.strings[prop] = this.addressEntry.strings[prop] || content.get('common.' + CONTENT_MAPPING[prop]);\n }\n }\n }\n});\n\nfunction mapLanguage(lang) {\n var unselectableLanguages = _core.$config.unselectableLanguages || [];\n\n if (unselectableLanguages.indexOf(lang) !== -1) {\n if (!(_core.$meta.corp && _core.$config.betaLanguages && _core.$config.betaLanguages.indexOf(lang) !== -1)) {\n return 'en';\n }\n }\n\n var unsupportedLanguages = _core.$config.unsupportedLanguages || [];\n\n if (unsupportedLanguages.indexOf(lang) !== -1) {\n if (!(_core.$meta.corp && _core.$config.betaLanguages && _core.$config.betaLanguages.indexOf(lang) !== -1)) {\n var s = lang + '_locale_not_supported';\n\n throw new Error(s);\n }\n }\n\n return lang;\n}\n\nvar $LocaleModel = exports.$LocaleModel = _core.$Model.extend('LocaleModel', {\n api: new _core.$Api({\n uri: '/api/locale'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.content = $ContentModel.instance();\n this.metadata = $MetadataModel.instance();\n },\n\n retrieve: function retrieve() {\n var self = this;\n\n return this._super.retrieve.apply(this, arguments).then(function (result) {\n self.lang = mapLanguage(self.lang);\n return _core.$promise.all([self.content.change(self.country, self.lang), self.metadata.change(self.country, self.lang)]).then(function () {\n\n // TODO: This at build time... or make sure griffin metadata is complete\n self.metadata.normalizeAddressFields(self.content);\n\n return result;\n });\n });\n },\n\n change: function change(country, lang) {\n\n var self = this;\n\n lang = mapLanguage(lang);\n\n if (country === this.country && lang === this.lang) {\n return _core.$promise.resolve(this);\n }\n\n _logger.$logger.info('locale_change', {\n country: country,\n lang: lang\n });\n\n this.country = country;\n this.lang = lang;\n\n return _core.$promise.all([this.content.change(country, lang), this.metadata.change(country, lang)]).then(function (loadedData) {\n\n // TODO: This at build time... or make sure griffin metadata is complete\n self.metadata.normalizeAddressFields(self.content);\n\n _core.$event.broadcast('localeChange'); // broadcast only when data has all been loaded\n return loadedData;\n });\n },\n\n choose: function choose(country, lang, override) {\n\n if (country && (!this.chosenCountry || override !== false)) {\n this.chosenCountry = country;\n }\n\n if (lang && (!this.chosenLang || override !== false)) {\n this.chosenLang = lang;\n }\n\n country = this.chosenCountry || this.country;\n lang = this.chosenLang;\n\n if (!_core.$config.supportedCountries[country]) {\n country = this.country;\n }\n\n if (_core.$config.supportedCountries[country].indexOf(lang) === -1) {\n lang = _core.$config.supportedCountries[country][0];\n }\n\n if (!lang) {\n lang = this.lang;\n }\n\n return this.change(country, lang);\n },\n\n chooseCountry: function chooseCountry(country) {\n return this.choose(country, null);\n },\n\n chooseLang: function chooseLang(lang) {\n return this.choose(null, lang);\n },\n\n getLocaleCode: function getLocaleCode() {\n return this.lang + '_' + this.country;\n },\n\n getCountryCodeISO: function getCountryCodeISO() {\n return PP_SPECIAL_COUNTRIES_ISO_CODES[this.country] || this.country;\n }\n});\n\nvar $locale = exports.$locale = $LocaleModel.instance();\n\nfunction $renderContent(key, props) {\n return Content.get(key, props);\n}\n\nfunction $flushContent() {\n contentCache = {};\n Content.cache = {};\n $locale.content = $ContentModel.create();\n $locale.metadata = $MetadataModel.create();\n metadataCache = {};\n}\n\nvar $localeHelper = exports.$localeHelper = {\n /**\n *\n * @param locale - Ex: en_US\n * @returns {{country: *, dialect}}\n */\n normalizeLocale: function normalizeLocale(locale) {\n if (!locale) {\n return {};\n }\n\n locale = locale.replace('-', '_');\n\n var country = void 0;\n var language = void 0;\n\n if (locale.match(/^\\w{2}_\\w{2}$/)) {\n locale = locale.split('_');\n\n language = locale[0];\n country = locale[1];\n } else {\n language = locale;\n }\n\n return {\n country: country,\n language: language\n };\n }\n};\n\nangular.value(\"sanitize\", sanitize);\nangular.value(\"Content\", Content);\nangular.value(\"$contentVersion\", $contentVersion);\nangular.value(\"$ContentModel\", $ContentModel);\nangular.value(\"$MetadataModel\", $MetadataModel);\nangular.value(\"$LocaleModel\", $LocaleModel);\nangular.value(\"$locale\", $locale);\nangular.value(\"$renderContent\", $renderContent);\nangular.value(\"$flushContent\", $flushContent);\nangular.value(\"$localeHelper\", $localeHelper);\n_logger.$logger;\n\n_core.$event;\n\n_core.$Model;\n\n_core.$Api;\n\n_core.$meta;\n\n_core.$promise;\n\n_core.$config;\n\n_core.$loader;\n\n_core.$dom;\n\n_paypal.$pxp;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/locale.js\n// module id = ../node_modules/squid/dist/locale/locale.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.formatNameInformal = formatNameInformal;\n\nvar _locale = require('./locale');\n\n// Mapping of Griffin fields to name fields that should be used\nvar SUBSTITUTED_FIELDS = {\n givenName: 'first_name',\n surname: 'last_name'\n};\n\n// Taken from griffin-paypal: test if a string is Latin\nfunction isLatin(str) {\n if (!str) {\n return true;\n }\n\n for (var i = 0; i < str.length; i++) {\n if (str.charCodeAt(i) > 0x24F) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Formats name into informal format based on Griffin metadata\n * @param {Object} name The name to be formatted, containing first_name and last_name properties\n * @return {String} The formatted string, or null if data is missing\n */\nfunction formatNameInformal(name) {\n var layoutMetadata = _locale.$locale.metadata.nameInformal;\n var layout = null;\n\n if (!layoutMetadata) {\n return name.first_name || null; // Default to first name if metadata not loaded\n }\n\n // According to Griffin, if the name is all Latin and there is a Latin formatting variant, use that one\n if (layoutMetadata['latinLayout'] && isLatin(name.first_name) && isLatin(name.last_name)) {\n layout = layoutMetadata['latinLayout'];\n } else {\n layout = layoutMetadata['layout'];\n }\n\n // Map griffin layout parts to the name passed in. If it requires a value not passed in name, returns null early\n var formattedName = [];\n\n for (var i = 0; i < layout.length; i++) {\n var namePart = layout[i];\n\n if (name[SUBSTITUTED_FIELDS[namePart['$']]]) {\n formattedName.push(name[SUBSTITUTED_FIELDS[namePart['$']]]);\n } else if (namePart['$'] === 'separator') {\n formattedName.push(namePart._);\n }\n }\n\n return formattedName.join('');\n}\n\n_locale.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/name.js\n// module id = ../node_modules/squid/dist/locale/name.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.formatQuantity = formatQuantity;\n\nvar _locale = require('./locale');\n\nvar _currency = require('./currency');\n\n// format a quantity to add a thousand separator based on a locality\nfunction formatQuantity(quantity) {\n var _ref = _locale.$locale.metadata || {},\n _ref$number = _ref.number,\n numberConfig = _ref$number === undefined ? {} : _ref$number;\n\n var dot = '';\n var comma = numberConfig.GROUP_SEP === undefined ? ',' : numberConfig.GROUP_SEP;\n\n return (0, _currency.roundingAndSeparators)(quantity.toString(), _locale.$locale, { decimalPlaces: 0, dot: dot, comma: comma });\n}\n\n_locale.$locale;\n\n_currency.roundingAndSeparators;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/locale/quantity.js\n// module id = ../node_modules/squid/dist/locale/quantity.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$Component = undefined;\nexports.$populate = $populate;\n\nvar _angular = require('angular');\n\nvar _core = require('../core');\n\nvar _ng = require('./ng');\n\nvar _directive = require('./directive');\n\n(0, _directive.$registerDirective)('prevent-default', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $element.on('click', function (event) {\n event.preventDefault();\n });\n }\n };\n});\n\n(0, _directive.$registerDirective)('stop-propagation', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $element.on('click keydown keypress keyup', function (event) {\n event.stopPropagation();\n });\n }\n };\n});\n\n(0, _directive.$registerDirective)('validate-submit', function () {\n\n return {\n link: function link($scope, $element, $attrs) {\n\n var $form = $element.closest('form');\n var form = $scope[$form.prop('name')];\n var formID_element = $attrs.form; // take the form attribute from submit button\n var formID_linked = $element[0] // take the id from the linked form element\n && $element[0].form && $element[0].form.id;\n var isLinkedForm = formID_element && formID_element === formID_linked; // Checking for confirmation. May not be required. Presence should be good enough.\n\n if (isLinkedForm) {\n $form = angular.element(document.getElementById(formID_linked));\n var scope = $form.scope(); // Linked forms should mantain form scope\n\n form = scope[$form.prop('name')];\n }\n\n $element.on('click', function (event) {\n event.preventDefault();\n\n $form.addClass('validated');\n $scope.validated = true;\n form.$setSubmitted();\n\n if (form.$valid) {\n try {\n $scope.$eval($attrs.validateSubmit);\n } catch (err) {\n _angular.$injector.get('$exceptionHandler')(err);\n }\n } else {\n $form.find('.ng-invalid:first').focus();\n }\n });\n }\n };\n});\n\nfunction assertModelsRetrievedOrEmpty(items) {\n if (_core.$config.deploy.isLocal() || _core.$config.deploy.isStage()) {\n angular.forEach(items, function (item, name) {\n if (item instanceof _core.$Model) {\n if (item.meta.populated) {\n throw new Error(name + ' is already populated. Please call .retrieve() to ensure your code is not relying on cache being present.');\n }\n }\n });\n }\n}\n\nfunction setUpComponentRoute($scope, $Component, angular) {\n var componentRoute = $scope.componentRoute;\n\n componentRoute.scope = $scope;\n\n componentRoute.scope.goto = function (route) {\n componentRoute.goto(route);\n };\n\n var parentRoute = componentRoute.parent;\n\n if (parentRoute) {\n var parentScope = parentRoute.scope;\n var parentDirective = parentRoute.getDirective();\n var childSpec = componentRoute.childSpec;\n\n if (childSpec.config) {\n if (parentDirective instanceof $Component) {\n parentScope.viewConfig = childSpec.config.call(parentScope);\n } else {\n throw new Error('In order to use config() for child routes,\\n ' + parentRoute.getDirectiveTag() + ' must be instance of new\\n style $Component');\n }\n }\n\n if (childSpec.props) {\n if (parentDirective instanceof $Component) {\n angular.extend($scope, childSpec.props.call(parentScope));\n } else {\n throw new Error('In order to use props() for child routes,\\n ' + parentRoute.getDirectiveTag() + ' must be instance of new\\n style $Component');\n }\n }\n }\n}\n\nvar $Component = exports.$Component = _core.$Class.extend('$Component', {\n\n onPopulate: angular.noop,\n\n init: function init() {\n var _this = this,\n _arguments = arguments;\n\n this.validate();\n\n this.name = _core.$util.dasherizeToCamel(this.tag);\n\n var wrapperType = this.wrapperType === 'span' ? 'span' : 'div';\n\n this.template = '<' + wrapperType + ' class=\"' + this.tag + '-wrapper\" ng-if=\"populated && display\">' + this.template + '';\n\n this.scope = this.scope || {};\n this.resolve = this.resolve || {};\n this.props = this.props || {};\n this.rootEvents = this.rootEvents || {};\n\n this.actions = this.actions || {};\n\n this.lifecycle = this.lifecycle || {};\n this.lifecycle.enter = this.lifecycle.enter || angular.noop;\n this.lifecycle.reenter = this.lifecycle.reenter || angular.noop;\n this.lifecycle.exit = this.lifecycle.exit || angular.noop;\n this.lifecycle.populate = this.lifecycle.populate || angular.noop;\n\n if (this.scope && Object.keys(this.scope).length) {\n\n if (this.props && Object.keys(this.props).length) {\n throw new Error('Can not defined scope and props on the same component');\n }\n\n this.scope.componentRoute = '=';\n this.scope['export'] = '@';\n\n this.props = _core.$util.map(this.scope, function (type, key) {\n return {\n type: {\n '=': 'var',\n '@': 'str'\n }[type],\n required: false\n };\n });\n } else {\n\n this.props.componentRoute = {\n type: 'var',\n required: false\n };\n\n this.props['export'] = {\n type: 'str',\n required: false\n };\n\n var isRequired = function isRequired() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n required = _ref.required,\n optional = _ref.optional;\n\n return [true, 'true'].indexOf(required) > -1 || [false, 'false'].indexOf(optional) > -1;\n };\n\n this.scope = _core.$util.map(this.props, function (spec, key) {\n return {\n 'var': isRequired(spec) ? '=' : '=?',\n str: isRequired(spec) ? '@' : '@?'\n }[spec.type || 'var'];\n });\n }\n\n var originalController = this.controller || angular.noop;\n\n this.controller = ['$scope', '$element', function ($scope, $element) {\n $scope.$element = $element;\n\n $scope.$on('$destroy', function () {\n if ($scope.componentRoute && $scope.componentRoute.parent && $scope.componentRoute.parent.scope) {\n delete $scope.componentRoute.parent.scope.viewConfig;\n }\n _this.lifecycle.exit.call($scope);\n });\n\n $scope.props = {};\n\n if ($scope.componentRoute) {\n setUpComponentRoute($scope, $Component, angular);\n }\n\n angular.forEach(_this.props, function (type, key) {\n\n var prop = _this.props[key];\n var required = prop.required !== false;\n var def = void 0;\n\n if (prop['default'] instanceof Function) {\n def = _core.$util.memoize(prop['default'].bind($scope));\n } else {\n def = function def() {\n return prop['default'];\n };\n }\n\n var UNDEFINED = {\n 'var': undefined,\n str: ''\n }[prop.type];\n\n Object.defineProperty($scope.props, key, {\n get: function get() {\n var val = $scope[key];\n\n if (val === UNDEFINED) {\n if (required) {\n throw new Error('Prop required for component :: ' + _this.tag + ' :: ' + key);\n }\n\n return def();\n }\n\n return val;\n },\n\n set: function set() {\n throw new Error('Prop is immutable :: ' + _this.tag + ' :: ' + key);\n }\n });\n });\n\n $scope.fields = {};\n\n $scope.actions = _core.$util.bindObject(_this.actions, $scope);\n\n Object.keys(_this.rootEvents).forEach(function (eventName) {\n var cancel = _core.$event.on(eventName, function (event) {\n _this.rootEvents[eventName].apply($scope, _arguments);\n });\n\n $scope.$on('$destroy', cancel);\n });\n\n $scope.display = true;\n\n $scope.reload = function () {\n\n if (!$scope.populated) {\n throw new Error('Can not reload unpopulated component');\n }\n\n $scope.display = false;\n setTimeout(function () {\n $scope.display = true;\n });\n };\n\n $scope.componentScope = $scope;\n\n if ($scope.props['export'] && $scope.$parent.componentScope) {\n\n $scope.exports = angular.extend({}, _this.exports || {}, {\n reload: $scope.reload\n });\n\n Object.defineProperty($scope.$parent.componentScope, $scope.props['export'], {\n get: function get() {\n return $scope.exports;\n },\n\n configurable: true\n });\n }\n\n $scope._enablePopulateEvents = true;\n\n _angular.$injector.invoke(originalController, _this, { $scope: $scope, $element: $element });\n _this.lifecycle.enter.call($scope);\n\n $scope._enablePopulateEvents = false;\n\n var cancelReEnterEvent = _core.$event.on('$stateChangeSuccess', function (event, toState) {\n if (toState === $scope.props.componentRoute) {\n _this.lifecycle.reenter.call($scope);\n }\n });\n\n $scope.$on('$destroy', cancelReEnterEvent);\n\n return _core.$promise.sequential([function () {\n $scope.$emit('_populating');\n }, function () {\n return _core.$promise.map(_this.resolve, function (resolver, name, resolverPromises) {\n\n if (angular.isObject(resolver)) {\n $scope[name] = resolver;\n return resolver;\n }\n\n return _core.$promise.resolve(resolver.call($scope, resolverPromises)).then(function (data) {\n assertModelsRetrievedOrEmpty(data);\n\n return _core.$promise.hash(data).then(function (resolvedData) {\n\n $scope[name] = resolvedData;\n return resolvedData;\n });\n });\n });\n }, function () {\n\n $scope.populated = true;\n\n $scope.$emit('_populated');\n\n _core.$event.refCount($scope, '_populating', '_populated').then(function () {\n\n $scope.$on('populated', function (populatedEvent) {\n populatedEvent.stopPropagation();\n });\n\n $scope.$emit('populated');\n _this.onPopulate.call($scope);\n _this.lifecycle.populate.call($scope);\n });\n }]);\n }];\n },\n\n validate: function validate() {\n\n if (_core.$config.deploy.isLive() && !_core.$config.deploy.isTest()) {\n return;\n }\n\n var componentName = this.constructor.name;\n\n if (!this.tag) {\n throw new Error(componentName + ' :: expected property \\'tag\\'');\n }\n\n if (!this.tag.match(/^[a-z0-9-]+$/)) {\n throw new Error(componentName + ' :: tag should contain only lowercase alphanumeric characters and dashes');\n }\n\n if (!this.template) {\n throw new Error(componentName + ' :: expected property \\'template\\'');\n }\n\n if (this.resolve) {\n angular.forEach(this.resolve, function (resolver, name) {\n if (!(resolver instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'resolve.' + name + '\\' to be a function');\n }\n });\n }\n\n if (this.props) {\n angular.forEach(this.props, function (prop, name) {\n\n if (!(prop instanceof Object)) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '\\' to be a function');\n }\n\n if (prop.type && ['var', 'str'].indexOf(prop.type) === -1) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '.type\\' to be one of var, str');\n }\n\n if (prop['default'] && prop.required) {\n throw new Error(componentName + ' :: unnecessary \\'props.' + name + '.default\\', since prop is required');\n }\n\n if (prop['default'] && prop['default'] instanceof Object && !(prop['default'] instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'props.' + name + '.default\\' to be a primitive or a function - please do not pass mutable objects');\n }\n });\n }\n\n if (this.actions) {\n angular.forEach(this.actions, function (action, name) {\n if (!(action instanceof Function)) {\n throw new Error(componentName + ' :: expected \\'actions.' + name + '\\' to be a function');\n }\n });\n }\n\n if (this.lifecycle) {\n Object.keys(this.lifecycle).forEach(function (name) {\n if (['enter', 'populate', 'exit', 'reenter'].indexOf(name) === -1) {\n throw new Error(componentName + ' :: unexpected \\'lifecycle.' + name + '\\'');\n }\n });\n }\n }\n});\n\n$Component.reopenClass({\n\n extend: function extend() {\n\n var SubClass = _core.$Class.extend.apply(this, arguments);\n var spec = new SubClass();\n\n angular.module().directive(spec.name, function () {\n return spec;\n });\n\n return SubClass;\n },\n\n render: function render(scope) {\n _core.$event.emit('$resetState');\n\n var $scope = _angular.$rootScope.$new();\n\n angular.extend($scope, scope);\n\n var attrs = Object.keys(scope).map(function (key) {\n return _core.$util.camelToDasherize(key) + '=\"' + (this.prototype.props[key].type === 'var' ? key : scope[key]) + '\"';\n }.bind(this)).join(' ');\n\n var cleanRootScope = (0, _ng.$cleanRootScope)(_angular.$rootScope);\n var html = '<' + this.prototype.tag + ' ' + attrs + '>';\n\n console.log('RENDER', html, scope);\n\n var element = (0, _angular.$compile)(html)($scope);\n\n // attaching to the document so DOM Api works in karma flow tests (e.g document.getElementById('myId'))\n angular.element(document.body).append(element);\n\n afterEach(_core.$util.once(function () {\n $scope.$destroy();\n cleanRootScope();\n element.remove();\n }));\n\n setTimeout.flush();\n\n element.isolateScope = function () {\n throw new Error('Please test this element by interfacing with its public api: define mock endpoints, and interact with html links, buttons and form fields');\n };\n\n element.updateProps = function (props) {\n angular.extend($scope, props);\n $scope.$digest();\n setTimeout.flush();\n };\n\n return element;\n }\n});\n\nfunction autoConvertDirectiveToComponent(_ref2, original) {\n var name = _ref2[0],\n factory = _ref2[1];\n\n\n if (!angular.isFunction(factory)) {\n return original();\n }\n\n var tag = _core.$util.camelToDasherize(name);\n var spec = _angular.$injector.invoke(factory);\n\n if (spec.controller) {\n var originalController = spec.controller;\n\n spec.controller = ['$scope', '$element', function ($scope, $element) {\n $scope._enablePopulateEvents = true;\n var result = _angular.$injector.invoke(originalController, this, { $scope: $scope, $element: $element });\n\n $scope._enablePopulateEvents = false;\n return result;\n }];\n }\n\n if (spec instanceof $Component || !spec.template || !spec.controller || name.indexOf('xo') !== 0 || spec.transclude) {\n return original(this, [name, function () {\n return spec;\n }]);\n }\n\n if (spec.componentize) {\n\n $Component.extend('$' + name + 'Component', spec, {\n tag: tag\n });\n\n return this;\n }\n\n return original(this, [name, function () {\n return spec;\n }]);\n}\n\n_core.$util.monkeyPatch(_angular.$compileProvider, 'directive', autoConvertDirectiveToComponent);\n_core.$util.monkeyPatch(angular.module(), 'directive', autoConvertDirectiveToComponent);\n\n// $populate needs to go away\n\nfunction $populate($scope, instances) {\n\n $scope.$on = $scope.$on || angular.noop;\n $scope.$emit = $scope.$emit || angular.noop;\n\n var _enablePopulateEvents = $scope._enablePopulateEvents;\n\n if (_enablePopulateEvents) {\n _core.$event.refCount($scope, '_populating', '_populated').then(function () {\n $scope.$emit('populated');\n });\n }\n\n $scope.$on('populated', function (populatedEvent) {\n populatedEvent.stopPropagation();\n });\n\n if (_enablePopulateEvents) {\n $scope.$emit('_populating');\n }\n\n return _core.$promise.all(_core.$util.map(instances, function (instance, name) {\n\n var promise = void 0;\n\n if (instance.then) {\n promise = instance;\n } else {\n promise = instance.retrieve();\n $scope[name] = instance;\n }\n\n return promise.then(function (result) {\n $scope[name] = result;\n return result;\n });\n })).then(function (result) {\n\n if (_enablePopulateEvents) {\n $scope.$emit('_populated');\n }\n\n return result;\n });\n}\n\nangular.value(\"$Component\", $Component);\nangular.value(\"$populate\", $populate);\n_angular.$rootScope;\n\n_angular.$compile;\n\n_angular.$injector;\n\n_angular.$compileProvider;\n\n_core.$Class;\n\n_core.$Model;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$config;\n\n_core.$event;\n\n_ng.$cleanRootScope;\n\n_directive.$registerDirective;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/component.js\n// module id = ../node_modules/squid/dist/ng/component.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _core = require('../core');\n\n_core.$event.use({\n on: function on() {\n return _angular.$rootScope.$on.apply(_angular.$rootScope, arguments);\n },\n once: function once(name, handler) {\n var cancel = _core.$event.on(name, function () {\n cancel();\n handler.apply(this, arguments);\n }, true);\n\n return cancel;\n },\n emit: function emit() {\n return _angular.$rootScope.$emit.apply(_angular.$rootScope, arguments);\n },\n broadcast: function broadcast() {\n return _angular.$rootScope.$broadcast.apply(_angular.$rootScope, arguments);\n }\n});\n\n_core.$promise.use(_angular.$q);\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_core.$event;\n\n_core.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/core.js\n// module id = ../node_modules/squid/dist/ng/core.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$registerDirective = $registerDirective;\n\nvar _angular = require(\"angular\");\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction $registerDirective(tag, definition) {\n\n var directiveName = tag.replace(/-([a-z])/g, function (g) {\n return g[1].toUpperCase();\n });\n\n return _angular2[\"default\"].module().directive(directiveName, definition);\n}\n\n_angular2[\"default\"].value(\"$registerDirective\", $registerDirective);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/directive.js\n// module id = ../node_modules/squid/dist/ng/directive.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _core = require('../core');\n\nangular.module().run(function () {\n\n _core.$event.on('$stateChangeStart', function (event) {\n _core.$event.emit('loading');\n _core.$event.emit('loaded');\n });\n\n var startLoadTime = 0;\n var currentState = 'checkout_init';\n\n function currentStateName() {\n return _uiRouter.$state.current.name && _uiRouter.$state.current.name.replace(/\\./g, '_');\n }\n\n _core.$event.on('startLoad', function () {\n\n if (startLoadTime) {\n startLoadTime = _core.$util.now();\n } else if (window.enablePerformance && window.performance.timing.connectEnd && window.performance.timing.navigationStart) {\n\n var performance = window.performance;\n var timing = window.performance.timing || {};\n var now = performance.now();\n\n startLoadTime = parseInt(now - (timing.connectEnd - timing.navigationStart), 10);\n }\n });\n\n _core.$event.on('allLoaded', function () {\n\n var newState = currentStateName();\n\n if (!newState) {\n return;\n }\n\n if (currentState === newState) {\n _core.$event.emit('page_reloaded', currentState);\n } else {\n\n var duration = void 0;\n\n if (startLoadTime) {\n duration = _core.$util.now() - startLoadTime;\n }\n\n var payload = {\n start: currentState,\n end: newState,\n time: duration,\n duration: duration\n };\n\n _core.$event.emit('$transition', {\n from: currentState,\n toState: _uiRouter.$state.current,\n duration: duration\n });\n\n _logger.$logger.info('transition', payload);\n _logger.$logger.info('transition_' + currentState + '_to_' + newState, payload);\n\n _core.$event.emit('page_loaded', currentState, newState);\n _logger.$logger.flush();\n\n currentState = newState;\n }\n });\n\n _core.$event.emit('loading');\n\n var cancel = _core.$event.on('$stateChangeSuccess', function () {\n if (_uiRouter.$state.current.template) {\n cancel();\n setTimeout(function () {\n _core.$event.emit('loaded');\n }, 50);\n }\n });\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_core.$event;\n\n_core.$util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/events.js\n// module id = ../node_modules/squid/dist/ng/events.js\n// module chunks = main-code-split","\n\nvar _directive = require('./directive');\n\nvar _locale = require('../locale');\n\nvar _core = require('../core');\n\n(0, _directive.$registerDirective)('feature', function () {\n return {\n restrict: 'A',\n transclude: true,\n scope: {},\n template: '',\n link: function link($scope, element, attr) {\n $scope.enabled = function () {\n return (0, _locale.$feature)(attr.feature) || _core.$integration.getConfig(attr.feature);\n };\n }\n };\n});\n\n(0, _directive.$registerDirective)('unless-feature', function () {\n return {\n restrict: 'A',\n transclude: true,\n scope: {},\n template: '',\n link: function link($scope, element, attr) {\n $scope.enabled = function () {\n return (0, _locale.$feature)(attr.unlessFeature) || _core.$integration.getConfig(attr.unlessFeature);\n };\n }\n };\n});\n_directive.$registerDirective;\n\n_locale.$feature;\n\n_core.$integration;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/feature.js\n// module id = ../node_modules/squid/dist/ng/feature.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _core = require('./core');\n\nObject.keys(_core).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _core[key];\n }\n });\n});\n\nvar _route = require('./route');\n\nObject.keys(_route).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _route[key];\n }\n });\n});\n\nvar _component = require('./component');\n\nObject.keys(_component).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _component[key];\n }\n });\n});\n\nvar _feature = require('./feature');\n\nObject.keys(_feature).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _feature[key];\n }\n });\n});\n\nvar _locale = require('./locale');\n\nObject.keys(_locale).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _locale[key];\n }\n });\n});\n\nvar _module = require('./module');\n\nObject.keys(_module).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _module[key];\n }\n });\n});\n\nvar _ng = require('./ng');\n\nObject.keys(_ng).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _ng[key];\n }\n });\n});\n\nvar _directive = require('./directive');\n\nObject.keys(_directive).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _directive[key];\n }\n });\n});\n\nvar _events = require('./events');\n\nObject.keys(_events).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _events[key];\n }\n });\n});\n\nvar _pxp = require('./pxp');\n\nObject.keys(_pxp).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _pxp[key];\n }\n });\n});\n\nvar _lazyLoadRoutes = require('./lazyLoadRoutes');\n\nObject.keys(_lazyLoadRoutes).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _lazyLoadRoutes[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/index.js\n// module id = ../node_modules/squid/dist/ng/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.lazyLoadRoute = exports.findRelativeState = exports.initRoute = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _core = require('../core');\n\nvar _config = require('../core/config');\n\nvar getHash = function getHash(url) {\n if (!url || !~url.indexOf('#')) {\n // eslint-disable-line no-bitwise\n return;\n }\n\n url = url.split('#');\n return url[url.length - 1];\n};\n\n/**\n *\n * get parent state, e.g \"checkout.sidebar.addCard\" -> \"checkout.sidebar\"\n */\nvar getParentState = function getParentState(path) {\n return _uiRouter.$state.get(path.slice(0, path.lastIndexOf('.')));\n};\n\n/**\n * Find route by slug\n * path - full path of the current route, e.g \"checkout.payWithSelection\"\n * slug - path of the route that we want to search, e.g \"payWithSelection\"\n */\nvar getRoute = function getRoute(path, slug) {\n var route = getParentState(path);\n\n if (!route) {\n return;\n }\n var children = route.children;\n\n if (children) {\n return children.find(function (child) {\n return child.slug === slug;\n });\n }\n};\n\n/**\n * Lazy load children routes in the background\n */\nvar lazyLoadChildren = function lazyLoadChildren(children) {\n if (children) {\n _logger.$logger.info('lazy_loading_route_load_children');\n children.forEach(function (child) {\n if (child.lazyRoute) {\n // request to download js chunk (dynamic import)\n child.lazyRoute();\n }\n });\n }\n};\n\n/**\n * Dynamically load route and initialize / register it\n * @param {Object} routeObj - route object from Route definition, e.g\n * {\n * name: '$PayWithSelection',\n * slug: 'payWithSelection',\n * lazyRouter: () => import('pages/payWithSelection/route)\n * }\n *\n * @param {Route} parent - parent of the passed routeObj\n * @param {String} fullRoutePath - full path of the route, e.g \"checkout.payWithselection\"\n */\nvar initRoute = exports.initRoute = function initRoute(routeObj, parent, fullRoutePath) {\n if (!routeObj) {\n return;\n }\n\n var name = routeObj.name,\n slug = routeObj.slug,\n attributes = routeObj.attributes,\n lazyRoute = routeObj.lazyRoute;\n\n\n _logger.$logger.info('lazy_loading_route_init', {\n name: name,\n slug: slug,\n fullRoutePath: fullRoutePath\n });\n\n return lazyRoute().then(function (route) {\n if (!route) {\n return;\n }\n if ((typeof route === 'undefined' ? 'undefined' : _typeof(route)) === 'object') {\n route = route[name];\n }\n var childRoute = new route({ //eslint-disable-line\n parent: parent || getParentState(fullRoutePath),\n childSpec: _core.$util.extend(routeObj, { route: route }),\n childAttributes: attributes\n });\n childRoute.register();\n return childRoute;\n });\n};\n\n/**\n * Promisify all lazy routes\n * Example:\n * targetState = 'checkout.sidebar.addCardFlow.addCard'\n * Lets say 'addCard', 'addCardFlow' and 'addCard' are lazy routes\n * 1. Go through each possible route, e.g 'checkout', 'checkout.sidebar', 'checkout.sidebar.addCardFlow', 'checkout.sidebar.addCardFlow.addCard'\n * 2. Check if each exists / already registered\n * 3. if route is not registered -> find that route and return promise\n * @param {String} targetState full path of the target route\n * Returns an array of promisified functions\n */\nvar findAndPromisifyRoutes = function findAndPromisifyRoutes(targetState) {\n var splittedTargetState = targetState.split('.');\n var states = splittedTargetState.slice(1);\n var routes = [];\n var path = splittedTargetState[0];\n\n states.forEach(function (state) {\n path += '.' + state;\n var fullRoutePath = path;\n\n if (!_uiRouter.$state.get(path)) {\n routes.push(function (parent) {\n var route = getRoute(fullRoutePath, state);\n\n return initRoute(route, parent, fullRoutePath);\n });\n }\n });\n return routes;\n};\n\n/**\n * Checks if it's a relative path (having `.` or `^`)\n * @param {String} stateName - path of the state, e.g `.mychildRoute`\n */\nvar isRelative = function isRelative(stateName) {\n return stateName.indexOf('.') === 0 || stateName.indexOf('^') === 0;\n};\n\n/**\n * finds a full path of the relative state name\n * examples:\n * '^' - will go to a parent state\n * '^.sibling' - will go to a sibling state\n * '.child.grandchild' - will go to grandchild state\n * @param {String / Object} stateOrName - state to find, e.g `^.selectFi`\n * Returns full path name of the state, e.g `^.selectFi` -> `checkout.selectFi`\n */\nvar findRelativeState = exports.findRelativeState = function findRelativeState(stateOrName) {\n if (!stateOrName) {\n return;\n }\n var base = _uiRouter.$state.current;\n\n var rel = stateOrName.split('.');\n var current = base;\n var i = 0;\n\n for (; i < rel.length; i++) {\n if (rel[i] === '' && i === 0) {\n current = base;\n continue;\n }\n if (rel[i] === '^') {\n if (!current.parent) {\n throw new Error('lazy-loading: path \\'' + stateOrName + '\\' not valid for state \\'' + base.name + '\\'');\n }\n current = current.parent;\n continue;\n }\n break;\n }\n rel = rel.slice(i).join('.');\n return current.name + (current.name && rel ? '.' : '') + rel;\n};\n\n/**\n * Lazy load route and redirect if successfull or reject if route was not found\n * Note: routes will be loading sequentialy for now to load parent routes first if they are lazy as well.\n * Example:\n * targetState = 'checkout.sidebar.addCardFlow.addCard'\n * Lets say 'addCard', 'addCardFlow' and 'addCard' are lazy routes and represent separate js chunk\n * We have to load each js chunk in order one by one to be able to register them and attach to corresponding parents.\n * @param {String} targetState - route path, e.g 'checkout.payWithSelection'\n * @param {Object} targetParams - params which route may need\n * @param {Boolean} shouldChangeState - if state should be changed after route is loaded\n */\nvar lazyLoadRoute = exports.lazyLoadRoute = function lazyLoadRoute(targetState) {\n var targetParams = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var shouldChangeState = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (!targetState) {\n return _core.$promise.reject(new Error('lazy_loading_target_state_is_empty'));\n }\n _logger.$logger.info('lazy_loading_route', {\n targetState: targetState,\n targetParams: targetParams\n });\n if (isRelative(targetState)) {\n targetState = findRelativeState(targetState, _uiRouter.$state.current);\n }\n _core.$event.emit('loading');\n\n var routes = findAndPromisifyRoutes(targetState);\n\n return _core.$promise.sequential(routes).then(function (result) {\n if (_uiRouter.$state.get(targetState)) {\n if (result) {\n lazyLoadChildren(result.children);\n }\n _logger.$logger.info('lazy_loading_route_state_change', {\n targetState: targetState,\n targetParams: targetParams\n });\n if (!shouldChangeState) {\n return _core.$promise.resolve();\n }\n return _uiRouter.$state.go(targetState, targetParams)['catch'](function (err) {\n if (err.message === 'transition prevented' || err.message === 'transition superseded') {\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n } else {\n return _core.$promise.reject(new Error('lazy_loading_state_was_not_loaded'));\n }\n })['catch'](function (error) {\n // in case of exceptions, spinner must dissapear, because for each 'loading' event\n // that's sent in the beginning of the function must be corresponding 'loaded' event\n // otherwise, there will be infinite spinner\n\n _logger.$logger.info('lazy_loading_route_error', {\n targetState: targetState,\n targetParams: targetParams,\n errorMessage: error && error.message,\n errorStack: error && error.stack\n });\n\n return _core.$promise.reject(error);\n })['finally'](function () {\n _core.$event.emit('loaded');\n });\n};\n\n/**\n * mostly needed for use cases when user types route manually\n */\nwindow.addEventListener('hashchange', function (event) {\n if (_config.$meta.codeSplitting) {\n var fromHash = getHash(event.oldURL);\n var toHash = getHash(event.newURL || window.location.hash);\n\n // skip lazy loading in case hash is undefined or empty\n // example -> OpenModal\n // in that case `toHash` will be empty\n if (!toHash) {\n return;\n }\n\n var getHashQueryParams = function getHashQueryParams(path) {\n var splittedPath = path.split('?');\n // e.g #/checkout/genericError?code=ERROR_CODE -> code=ERROR_CODE\n var hashParams = splittedPath.length > 1 && splittedPath[1];\n\n if (hashParams) {\n // e.g code=ERROR_CODE -> { code: ERROR_CODE }\n return _core.$util.params(hashParams);\n }\n };\n // e.g #/checkout/review -> checkout.review\n var path = toHash.slice(1).replace(/\\//g, '.');\n var hashQueryParams = getHashQueryParams(path);\n\n if (hashQueryParams) {\n // e.g checkout.genericError?code=ERROR_CODE -> checkout.genericError\n path = path.split('?')[0];\n }\n\n if (_uiRouter.$state.get(path)) {\n return;\n }\n\n _logger.$logger.info('hashchange_lazy_loading', {\n from: fromHash,\n to: toHash\n });\n\n lazyLoadRoute(path, hashQueryParams)['catch'](function () {\n _logger.$logger.info('hashchange_lazy_loading_error', {\n from: fromHash,\n to: toHash,\n params: hashQueryParams\n });\n });\n }\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_config.$meta;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/lazyLoadRoutes.js\n// module id = ../node_modules/squid/dist/ng/lazyLoadRoutes.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _core = require('../core');\n\nvar _locale = require('../locale');\n\n(0, _angular.$registerDirective)('content', function () {\n return {\n restrict: 'A',\n\n link: function link($scope, element, attributes) {\n $scope.content = $scope.htmlContent = function (key, props) {\n if (attributes.content) {\n key = attributes.content + '.' + key;\n }\n var content = _locale.Content.get(key, props);\n\n if (content.toString()) {\n return content;\n } else {\n return;\n }\n };\n }\n };\n});\n\n(0, _angular.$registerDirective)('bind-html-compile', function () {\n\n return {\n restrict: 'A',\n link: function link($scope, $element, $attrs) {\n $scope.$watch(function () {\n return $scope.$eval($attrs.bindHtmlCompile);\n }, function (value) {\n $element.html(value && value.toString());\n (0, _angular.$compile)($element.contents())($scope);\n });\n }\n };\n});\n\n(0, _angular.$registerDirective)('format-currency', function () {\n\n return {\n restrict: 'E',\n template: '',\n scope: {\n amount: '=?',\n symbol: '=?',\n code: '=?',\n currencyStyle: '@?'\n },\n controller: ['$scope', function ($scope) {\n\n function format() {\n $scope.amount_formatted = _angular.$sce.trustAsHtml((0, _locale.formatCurrency)($scope.amount, $scope.code, true, $scope.currencyStyle));\n }\n\n $scope.$on('$destroy', _core.$event.on('localeChange', format));\n\n $scope.$watch('amount', function (newValue, oldValue) {\n if (newValue !== oldValue && _locale.$locale.country) {\n format();\n }\n });\n\n if (_locale.$locale.country) {\n format();\n }\n }] // controller\n }; // return\n}); // registerDirective\n\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().value('$sanitize', function (val) {\n if (val instanceof _locale.Content) {\n return val.toSafeString();\n }\n return (0, _locale.sanitize)(val);\n});\n\n_angular.$sce;\n\n_angular.$registerDirective;\n\n_angular.$compile;\n\n_core.$event;\n\n_locale.formatCurrency;\n\n_locale.sanitize;\n\n_locale.Content;\n\n_locale.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/locale.js\n// module id = ../node_modules/squid/dist/ng/locale.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.module = undefined;\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _module = _angular2['default'].module;\nexports.module = _module;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/module.js\n// module id = ../node_modules/squid/dist/ng/module.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$angularInvoke = $angularInvoke;\nexports.$once = $once;\nexports.$cleanRootScope = $cleanRootScope;\n\nvar _angular = require('angular');\n\nvar _core = require('../core');\n\nfunction $angularInvoke(method) {\n try {\n return method();\n } catch (err) {\n _angular.$injector.get('$exceptionHandler')(err);\n }\n}\n\nfunction $once(name, handler) {\n var cancel = _core.$event.on(name, function () {\n cancel();\n handler.apply(this, arguments);\n }, true);\n}\n\nfunction $cleanRootScope(rootScope) {\n\n var keys = Object.keys(rootScope);\n\n var autoCleanupEventHandlers = [];\n var eventHandlers = [];\n var eventCancelers = [];\n\n _core.$util.monkeyPatch(rootScope, '$on', function (_ref, original) {\n var name = _ref[0],\n handler = _ref[1],\n once = _ref[2];\n\n\n var cancel = original();\n\n var $state = void 0;\n\n try {\n $state = _angular.$injector.get('$state');\n } catch (err) {\n // pass\n }\n\n if (name === '$destroy' || !$state || !$state.current || !$state.current.name || $state.current.name === 'default') {\n autoCleanupEventHandlers.push(cancel);\n return function autoCleanedUpCancel() {}; // eslint-disable-line no-empty-function\n }\n\n if (once) {\n eventCancelers.push(cancel);\n return cancel;\n }\n\n // Let ng-router do its thing\n if (handler.toString().indexOf('updateView') !== -1) {\n return cancel;\n }\n\n var stack = void 0;\n\n try {\n throw new Error('$rootScope.$on');\n } catch (err) {\n stack = err.stack;\n }\n\n var reference = {\n name: name,\n handler: handler.toString(),\n stack: stack\n };\n\n eventHandlers.push(reference);\n\n return function () {\n cancel();\n eventHandlers.splice(eventHandlers.indexOf(reference), 1);\n };\n });\n\n return function () {\n\n _core.$event.emit('$destroy');\n\n autoCleanupEventHandlers.forEach(function (canceler) {\n return canceler();\n });\n autoCleanupEventHandlers = [];\n\n Object.keys(rootScope).forEach(function (key) {\n if (keys.indexOf(key) === -1) {\n delete rootScope[key];\n }\n });\n\n if (eventHandlers.length) {\n throw new Error('$rootScope event handlers not cleaned up:\\n\\n' + eventHandlers.map(function (eventHandler) {\n return eventHandler.name + '\\n\\n' + eventHandler.handler + '\\n\\n' + eventHandler.stack;\n }).join('\\n\\n'));\n }\n\n eventCancelers.forEach(function (cancel) {\n return cancel();\n });\n };\n}\n\nangular.value(\"$angularInvoke\", $angularInvoke);\nangular.value(\"$once\", $once);\nangular.value(\"$cleanRootScope\", $cleanRootScope);\n_angular.$injector;\n\n_core.$util;\n\n_core.$event;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/ng.js\n// module id = ../node_modules/squid/dist/ng/ng.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _core = require('../core');\n\n_core.$event.on('pxp_res', function (event, pxpRes) {\n _uiRouter.$state.current.trackingData = _uiRouter.$state.current.trackingData || {};\n _uiRouter.$state.current.trackingData.pxpData = _uiRouter.$state.current.trackingData.pxpData || [];\n _uiRouter.$state.current.trackingData.pxpData.push(pxpRes);\n});\n\n_uiRouter.$state;\n\n_core.$event;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/pxp.js\n// module id = ../node_modules/squid/dist/ng/pxp.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ComponentRoute = exports.$Route = undefined;\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _core = require('../core');\n\nvar _locale = require('../locale');\n\nvar _component = require('./component');\n\nvar _ng = require('./ng');\n\nvar _config = require('../core/config');\n\nvar _lazyLoadRoutes = require('./lazyLoadRoutes');\n\nvar $Route = exports.$Route = _core.$Class.extend('$ComponentRoute', {\n\n childSpec: {},\n\n init: function init() {\n var _this = this;\n\n this.validate();\n\n this.url = '/' + (this.path || this.name);\n\n if (this.query) {\n this.url += '?' + this.query.join('&');\n }\n\n this.hasResolver = Boolean(this.resolve);\n\n var controller = this.controller = ['$scope', function ($scope) {\n $scope.route = _this;\n if ($scope.componentScope) {\n delete $scope.componentScope.view;\n }\n }];\n\n if (this.get('resolve.action')) {\n this.controller = ['$scope', 'action', function ($scope, action) {\n _angular.$injector.invoke(controller, this, { $scope: $scope });\n if (action) {\n if (!action.newState) {\n _angular.$location.replace();\n }\n\n if (angular.isObject(action) && action.to) {\n _uiRouter.$state.go(action.to, action.params);\n } else {\n _uiRouter.$state.go(action);\n }\n }\n }];\n }\n },\n\n validate: function validate() {\n\n if (_core.$config.deploy.isLive() && !_core.$config.deploy.isTest()) {\n return;\n }\n\n var routeName = this.constructor.name;\n\n if (!this.name && !this.path) {\n throw new Error(routeName + ' :: expected property \\'path\\'');\n }\n\n if (this.url) {\n _logger.$logger.warn(routeName + ' :: unexpected property \\'url\\' :: ' + this.url);\n }\n\n if (this.query && !(this.query instanceof Array)) {\n throw new Error(routeName + ' :: expected property \\'query\\' to be array of query params');\n }\n\n if (this.controller) {\n // throw new Error(`${routeName} :: unexpected property 'controller'`);\n }\n\n if (this.resolve) {\n if (this.resolve.action && !(this.resolve.action instanceof Function)) {\n throw new Error(routeName + ' :: expected property \\'resolve.action\\' to be a function');\n }\n\n Object.keys(this.resolve).forEach(function (name) {\n if (name === 'data') {\n _logger.$logger.warn(routeName + ' :: unexpected resolver :: ' + name);\n } else if (name !== 'action') {\n throw new Error(routeName + ' :: unexpected resolver :: ' + name);\n }\n });\n }\n\n if (this.template) {\n throw new Error(routeName + ' :: unexpected property \\'template\\'');\n }\n\n if (!this.directive && !this.resolve && !this.resolve.action) {\n throw new Error(routeName + ' :: expected property \\'directive\\'');\n }\n\n if (this.directive && angular.isString(this.directive) && !this.getDirective()) {\n throw new Error(routeName + ' :: unknown directive \\'' + this.directive + '\\'');\n }\n\n if (this.directive && !angular.isString(this.directive) && !_component.$Component.isChild(this.directive)) {\n throw new Error(routeName + ' :: expected directive to be subclass of $Component');\n }\n\n if (this.children) {\n this.children.forEach(function (childSpec) {\n\n if (!childSpec.route && !childSpec.name) {\n throw new Error(routeName + ' :: child expected property \\'route\\'');\n }\n\n var ChildRoute = childSpec.route;\n var childName = childSpec.name || ChildRoute.name;\n\n // skip loading route as it won't be available to validate\n if (_config.$meta.codeSplitting && childSpec.lazyRoute) {\n return;\n }\n\n if (!ChildRoute && childSpec.name) {\n try {\n ChildRoute = _angular.$injector.get(childSpec.name);\n } catch (err) {\n throw new Error(routeName + ' :: could not find child route \\'' + childName + '\\'');\n }\n }\n\n if (!$Route.isChild(ChildRoute)) {\n throw new Error(routeName + ' :: ' + childName + ' :: expected child to be instance of $Route');\n }\n });\n }\n },\n goto: function goto(route) {\n return _uiRouter.$state.go(route.replace('this.', this.absolutePath + '.'));\n },\n getDirective: function getDirective() {\n return _angular.$injector.get(_core.$util.dasherizeToCamel(this.getDirectiveTag() + 'Directive'))[0];\n },\n getDirectiveTag: function getDirectiveTag() {\n return angular.isString(this.directive) ? this.directive : this.directive.prototype.tag;\n },\n\n\n bootstrap: function bootstrap(defaultState, middleware) {\n var _this2 = this;\n\n return (0, _ng.$angularInvoke)(function () {\n // only bootstrap if not bootstrapped already\n var element = angular.element(document.body);\n\n if (!element.injector()) {\n angular.bootstrap(element, ['app']);\n }\n\n return _this2.load(defaultState, middleware);\n });\n },\n\n load: function load(defaultState, middleware) {\n\n defaultState = defaultState || this.defaultState;\n middleware = middleware || this.middleware;\n\n _logger.$logger.info('bootstrap_route', {\n route: this.path || this.name\n });\n\n var logStateNotFoundAndThrow = function logStateNotFoundAndThrow(_ref) {\n var unfoundState = _ref.unfoundState,\n fromState = _ref.fromState,\n fromParams = _ref.fromParams,\n _ref$logName = _ref.logName,\n logName = _ref$logName === undefined ? '' : _ref$logName;\n\n _logger.$logger.error('state_not_found' + logName, {\n name: unfoundState.to,\n from: fromState.name,\n fromParams: fromParams,\n hash: window.location.hash\n });\n throw new Error('state_not_found' + logName + ': ' + unfoundState.to);\n };\n\n (0, _ng.$once)('$stateNotFound', function (event, unfoundState, fromState, fromParams) {\n if (!_config.$meta.codeSplitting) {\n event.preventDefault();\n logStateNotFoundAndThrow({ unfoundState: unfoundState, fromState: fromState, fromParams: fromParams });\n }\n });\n\n // for code splitting this event handler will be triggered every single time user tries to load lazy route\n // so we need to have it being listening more than once\n _core.$event.on('$stateNotFound', function (event, unfoundState, fromState, fromParams) {\n if (_config.$meta.codeSplitting) {\n event.preventDefault();\n // if route was not found - lazy load it or throw state_not_found if it was not found\n (0, _lazyLoadRoutes.lazyLoadRoute)(unfoundState.to, unfoundState.toParams)['catch'](function () {\n logStateNotFoundAndThrow({ unfoundState: unfoundState, fromState: fromState, fromParams: fromParams, logName: '_lazy_loading' });\n });\n }\n });\n\n this.register();\n\n _uiRouter.$urlRouterProvider.otherwise(function () {\n return _logger.$logger.info('otherwise_after_bootstrap', {\n hash: window.location.hash\n });\n });\n\n this.runMiddleware(middleware).then(function () {\n var targetState = void 0;\n var targetParams = void 0;\n\n if (window.location.hash && window.location.hash.indexOf('#/') === 0) {\n\n targetState = window.location.hash.slice(2).split('?')[0].replace(/^\\/+/, '').replace(/\\/+$/, '').replace(/\\//g, '.');\n\n targetParams = _core.$util.params(window.location.hash.slice(2).split('?')[1] || '');\n }\n\n _logger.$logger.info('initializing_route', {\n target: targetState,\n defaultState: defaultState,\n hash: window.location.hash\n });\n\n _angular.$location.replace();\n\n /**\n * load default state in case target state was not found\n * e.g checkout.landing - is the default state in Hermes\n */\n var loadDefaultState = function loadDefaultState() {\n if (_uiRouter.$state.get(defaultState)) {\n _logger.$logger.info('default_state', {\n stateName: defaultState\n });\n return _uiRouter.$state.go(defaultState)['catch'](function (err) {\n if (err.message === 'transition prevented') {\n _logger.$logger.warn('transition_prevented', {\n targetState: defaultState\n });\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n }\n\n throw new Error('Default state not found: ' + defaultState);\n };\n\n if (targetState) {\n var logUnknownState = function logUnknownState() {\n var logName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n _logger.$logger.info('unknown_state' + logName, {\n stateName: targetState\n });\n };\n\n if (_uiRouter.$state.get(targetState)) {\n _logger.$logger.info('existing_state', {\n stateName: targetState\n });\n return _uiRouter.$state.go(targetState, targetParams)['catch'](function (err) {\n // lib/js/security.js event listener handles auth required state changes\n // and cancels transitions if user not authenticated\n if (err.message === 'transition prevented') {\n _logger.$logger.warn('transition_prevented', {\n targetState: targetState\n });\n return _core.$promise.resolve();\n }\n return _core.$promise.reject(err);\n });\n } else if (_config.$meta.codeSplitting) {\n // try to lazy load route and catch / handle redirect errors\n // 1. If route was not found -> log and try to load default state\n // 2. If route was found but redirect throws an error -> reject\n return (0, _lazyLoadRoutes.lazyLoadRoute)(targetState, targetParams)['catch'](function (err) {\n if (err.message === 'lazy_loading_state_was_not_loaded') {\n logUnknownState('_lazy_loading');\n return loadDefaultState();\n } else {\n return _core.$promise.reject(err);\n }\n });\n } else {\n logUnknownState();\n }\n }\n return loadDefaultState();\n })['catch'](function (err) {\n return _angular.$injector.get('$exceptionHandler')(err);\n });\n },\n\n runMiddleware: function runMiddleware(middleware) {\n\n _logger.$logger.info('middleware', {\n priority: _core.$util.map(middleware, function (method) {\n return method.name;\n }).join('|')\n });\n\n var promise = _core.$promise.resolve();\n\n angular.forEach(middleware, function (method) {\n promise = promise.then(function () {\n\n if (method.name) {\n _logger.$logger.info('middleware_' + method.name);\n }\n\n return method();\n });\n });\n\n return promise;\n },\n\n register: function register() {\n var _this3 = this;\n\n this.template = this.constructTemplate(this.childAttributes || {});\n\n this.absolutePath = this.path || this.name;\n\n if (this.parent) {\n this.absolutePath = this.parent.absolutePath + '.' + this.absolutePath;\n }\n\n if (!_uiRouter.$state.get(this.absolutePath)) {\n _uiRouter.$stateProvider.state(this.absolutePath, this);\n }\n\n angular.forEach(this.children, function (childSpec) {\n // skip registering child if it's supposed to be lazy loaded\n if (_config.$meta.codeSplitting && childSpec.lazyRoute) {\n return;\n }\n var ChildRoute = childSpec.route || _angular.$injector.get(childSpec.name);\n\n var childRoute = new ChildRoute({\n parent: _this3,\n childSpec: childSpec,\n childAttributes: childSpec.attributes\n });\n\n childRoute.register();\n });\n },\n\n /**\n * Constructs the template string for this route. If route.directive = 'xo-add-bank', then the template will be\n * ''.\n * If attributes are specified, they will be passed to directive. Ex: \n *\n * @param attributes - A map of name value pairs - {name: value}.\n * @returns {string}\n */\n constructTemplate: function constructTemplate(attributes) {\n var self = this;\n\n if (!self.directive) {\n return;\n }\n\n attributes['component-route'] = 'route';\n\n if (this.parent) {\n attributes['export'] = 'view';\n }\n\n var tag = this.getDirectiveTag();\n\n var paramString = '';\n\n angular.forEach(attributes, function (value, key) {\n paramString += ' ' + key + '=\"' + value + '\"';\n });\n\n return '
    ';\n }\n});\n\nif (!_uiRouter.$state.get('default')) {\n _uiRouter.$stateProvider.state('default', {\n auth: false\n });\n}\n\n$Route.reopenClass({\n render: function render(props) {\n\n _core.$event.emit('$resetState');\n _core.$loader.reset();\n _uiRouter.$state.go('default');\n setTimeout.flush();\n\n var $scope = angular.extend(_angular.$rootScope.$new(), props);\n\n var cleanRootScope = (0, _ng.$cleanRootScope)(_angular.$rootScope);\n var element = (0, _angular.$compile)('
    ')($scope);\n\n afterEach(_core.$util.once(function () {\n $scope.$destroy();\n cleanRootScope();\n _core.$loader.reset();\n angular.element(document.getElementById('app')).remove();\n }));\n\n var route = new this({\n // Pass child attributes to simulate a route receiving scope variables from the parent\n childAttributes: _core.$util.reduce(props, function (result, val, key) {\n result[_core.$util.camelToDasherize(key)] = key;\n return result;\n }, {})\n });\n\n route.bootstrap(route.defaultState || route.path || route.name);\n setTimeout.flush();\n\n element.isolateScope = function () {\n throw new Error('Please test this element by interfacing with its public api: define mock endpoints, and interact with html links, buttons and form fields');\n };\n\n // attaching to the document so DOM Api works in karma flow tests (e.g document.getElementById('myId'))\n angular.element(document.body).append(element);\n\n return element;\n },\n\n\n assertActive: function assertActive() {\n var isState = _uiRouter.$state.current instanceof this;\n\n if (!isState) {\n throw new Error('Current state should be \"' + (this.prototype.path || this.prototype.name) + '\", found \"' + _uiRouter.$state.current.name + '\"');\n }\n }\n});\n\nfunction getPageTitle(stateName) {\n\n var state = _uiRouter.$state.get(stateName);\n\n if (!state) {\n return;\n }\n\n if (state.titleContent) {\n return _locale.$locale.content.get(state.titleContent);\n }\n}\n\nfunction changePageTitle() {\n\n document.documentElement.setAttribute('lang', _locale.$locale.lang);\n\n if (!_uiRouter.$state.current || !_uiRouter.$state.current.name) {\n return;\n }\n\n var fullStateTitle = [];\n\n _uiRouter.$state.current.name.split('.').reduce(function (a, b) {\n\n var stateName = [a, b].filter(Boolean).join('.');\n var stateTitle = getPageTitle(stateName);\n\n if (stateTitle) {\n fullStateTitle.push(stateTitle);\n }\n\n return stateName;\n }, null);\n\n document.title = _core.$util.unique(fullStateTitle).join(' - ');\n}\n\n_core.$event.on('$stateChangeSuccess', changePageTitle);\n_core.$event.on('contentChange', changePageTitle);\n\nvar $ComponentRoute = exports.$ComponentRoute = $Route;\n\nangular.value(\"$Route\", $Route);\nangular.value(\"$ComponentRoute\", $ComponentRoute);\n_angular.$rootScope;\n\n_angular.$location;\n\n_angular.$injector;\n\n_angular.$compile;\n\n_uiRouter.$state;\n\n_uiRouter.$stateProvider;\n\n_uiRouter.$urlRouterProvider;\n\n_logger.$logger;\n\n_core.$config;\n\n_core.$Class;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_core.$loader;\n\n_locale.$locale;\n\n_component.$Component;\n\n_ng.$cleanRootScope;\n\n_ng.$angularInvoke;\n\n_ng.$once;\n\n_config.$meta;\n\n_lazyLoadRoutes.lazyLoadRoute;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/ng/route.js\n// module id = ../node_modules/squid/dist/ng/route.js\n// module chunks = main-code-split","\n\nvar _core = require('../core');\n\nvar _env = require('./env');\n\n_core.$config.deploy = _core.$config.deploy || _env.$env;\n\n_core.$config;\n\n_env.$env;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/paypal/config.js\n// module id = ../node_modules/squid/dist/paypal/config.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar $env = exports.$env = {\n\n isLocal: function isLocal() {\n return window.location.hostname === 'localhost' || window.location.hostname === 'localhost.paypal.com';\n },\n\n isStage: function isStage() {\n return Boolean(window.location.hostname.match(/^.*\\.qa\\.paypal\\.com$/));\n },\n\n isSandbox: function isSandbox() {\n return Boolean(window.location.hostname.match(/^.*\\.sandbox\\.paypal\\.com$/));\n },\n\n isLive: function isLive() {\n return window.location.hostname === 'www.paypal.com';\n },\n\n isTest: function isTest() {\n return false;\n }\n};\n\nangular.value(\"$env\", $env);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/paypal/env.js\n// module id = ../node_modules/squid/dist/paypal/env.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _env = require('./env');\n\nObject.keys(_env).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _env[key];\n }\n });\n});\n\nvar _config = require('./config');\n\nObject.keys(_config).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _config[key];\n }\n });\n});\n\nvar _pxp = require('./pxp');\n\nObject.keys(_pxp).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _pxp[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/paypal/index.js\n// module id = ../node_modules/squid/dist/paypal/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$PXPModel = undefined;\nexports.$getPxpTreatments = $getPxpTreatments;\nexports.$pxp = $pxp;\nexports.$pxpMatch = $pxpMatch;\nexports.$pxpFactors = $pxpFactors;\nexports.$elmo = $elmo;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _core = require('../core');\n\nvar _locale = require('../locale');\n\nvar $PXPModel = exports.$PXPModel = _core.$Model.extend({\n api: new _core.$Api({\n uri: '/api/pxp/:pagename'\n })\n});\n\nfunction logPxp(pxpRes, params, logPayload) {\n var exp_name = [];\n var xe = [];\n var xt = [];\n var isElmoExperiment = params.isElmoExperiment;\n\n angular.forEach(pxpRes.treatments, function (treatment) {\n\n _logger.$logger.info('treatment_' + treatment.treatment_name, angular.extend({\n experiment: pxpRes.pagename,\n treatment: treatment.treatment_name,\n experiment_id: treatment.experiment_id,\n treatment_id: treatment.treatment_id,\n loc_country: _locale.$locale.country,\n loc_lang: _locale.$locale.lang,\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n }, params, logPayload));\n\n exp_name.push(treatment.treatment_name);\n xe.push(treatment.experiment_id);\n xt.push(treatment.treatment_id);\n });\n\n _logger.$logger.info('pxp_' + pxpRes.pagename, angular.extend({\n pxp_exp_id: xe.join('|'),\n pxp_trtmnt_id: xt.join('|'),\n treatments: exp_name.join('|'),\n loc_country: _locale.$locale.country,\n loc_lang: _locale.$locale.lang,\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n }, params, logPayload));\n\n _logger.$logger.info('fpti_pxp_check', {\n from: 'PXP_CHECK',\n to: 'process_pxp_check',\n pxp_exp_id: xe.join(','),\n pxp_trtmnt_id: xt.join(','),\n exp_source: isElmoExperiment ? 'elmo' : 'pxp'\n });\n\n _core.$event.emit('pxp_res', pxpRes);\n}\n\nfunction $getPxpTreatments(id, params, logPayload) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var isElmoExperiment = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n\n return _core.$promise.run(function () {\n if (isElmoExperiment) {\n Object.assign(params, { isElmoExperiment: isElmoExperiment });\n }\n\n var pxp = $PXPModel.instance(_core.$util.buildURL(id, params), { pagename: id });\n var forceTreatments = _core.$util.param('pxp_' + id) || _core.$util.param('elmo_' + id);\n\n if (forceTreatments) {\n var treatments = forceTreatments.split(',').filter(Boolean);\n\n pxp.treatments = treatments.map(function (treatment_name) {\n return {\n treatment_name: treatment_name\n };\n });\n\n return pxp;\n }\n\n if (forceApiCall) {\n pxp.cached = false;\n\n return pxp.reload({\n params: params,\n silent: silent\n });\n }\n\n return pxp.retrieve({\n params: params,\n silent: silent,\n // Ignore all errors from this api, by passing transientError as true\n // Pxps are not critical calls, so they should fail silently without fallbacks (page reload / showing error page)\n transientError: true\n });\n }).then(function (pxp) {\n if (!pxp.cached) {\n logPxp(pxp, params, logPayload);\n }\n\n pxp.cached = true;\n\n return pxp;\n });\n}\n\nfunction $pxp(id, params, pattern) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n var isElmoExperiment = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n if (!pattern) {\n pattern = params;\n params = {};\n }\n\n pattern = new RegExp('^' + pattern + '$');\n\n return exports.$getPxpTreatments(id, params, null, forceApiCall, silent, isElmoExperiment).then(function (experimentResponse) {\n var result = void 0;\n\n (experimentResponse.treatments || []).some(function (treatment) {\n if (!pattern.test(treatment.treatment_name)) {\n return false;\n }\n\n result = {\n treatment_name: treatment.treatment_name,\n factors: treatment.factors\n };\n\n return true;\n });\n\n return result;\n });\n}\n\nfunction $pxpMatch(id, params, patterns, logPayload) {\n if (!patterns) {\n patterns = params;\n params = {};\n }\n\n return exports.$getPxpTreatments(id, params, logPayload).then(function (pxpResponse) {\n var result = {};\n\n angular.forEach(patterns, function (pattern, name) {\n pattern = new RegExp('^' + pattern + '$');\n result[name] = false;\n\n (pxpResponse.treatments || []).some(function (treatment) {\n if (!pattern.test(treatment.treatment_name)) {\n return false;\n }\n\n result[name] = true;\n return true;\n });\n });\n\n return result;\n });\n}\n\nfunction $pxpFactors(id, params, pattern) {\n params.factors = 'true';\n return $pxp(id, params, pattern).then(function (pxpResponse) {\n var result = void 0;\n\n if (pxpResponse && pxpResponse.factors) {\n result = { treatment_name: pxpResponse.treatment_name };\n var pxpFactors = pxpResponse.factors;\n var length = pxpFactors.length;\n\n for (var i = 0; i < length; i++) {\n result[pxpFactors[i].name] = pxpFactors[i].value;\n }\n }\n\n return result;\n });\n}\n\nfunction $elmo(id, params, pattern) {\n var forceApiCall = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n var silent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n\n var isElmoExperiment = true;\n\n return $pxp(id, params, pattern, forceApiCall, silent, isElmoExperiment);\n}\n\nwindow.$pxp = $pxp;\nwindow.$elmo = $elmo;\n\nangular.value(\"$PXPModel\", $PXPModel);\nangular.value(\"$getPxpTreatments\", $getPxpTreatments);\nangular.value(\"$pxp\", $pxp);\nangular.value(\"$pxpMatch\", $pxpMatch);\nangular.value(\"$pxpFactors\", $pxpFactors);\nangular.value(\"$elmo\", $elmo);\n_logger.$logger;\n\n_core.$Model;\n\n_core.$Api;\n\n_core.$util;\n\n_core.$promise;\n\n_core.$event;\n\n_locale.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/squid/dist/paypal/pxp.js\n// module id = ../node_modules/squid/dist/paypal/pxp.js\n// module chunks = main-code-split","/*** IMPORTS FROM imports-loader ***/\n(function() {\n\n!function(a,b){a.PAYPAL=a.PAYPAL||{},a.PAYPAL.unifiedLogin=b()}(this,function(){function a(a,b){var c,d={src:a,height:b.height||239,style:\"width: 100%;\",name:b.name||\"injectedUl\",frameborder:0,scrolling:b.scrolling||\"no\",title:b.title||\"PayPal\",sandbox:\"allow-same-origin allow-scripts allow-popups allow-forms allow-top-navigation\"},e=document.createElement(\"iframe\");b.hide&&(d.style=d.style+\"display: none;\");for(c in d)e.setAttribute(c,d[c]);return e}function b(a,b,c){var d,e=a||window.location.origin||window.location.protocol+\"//\"+window.location.host,f=e+(c||\"/signin/inject/\"),g=b?\"?\":\"\",h=0;if(!b)return f;for(d in b)h>0&&(g+=\"&\"),g=g+d+\"=\"+encodeURIComponent(b[d]),h+=1;return f+g}function c(a){var b,c=\"\";try{if(a.source.name!==q.name)return}catch(d){return}if(b=g(a.origin),!f(b))throw new Error(\"PostMessage iframe domain (\"+b+\"), must be a *.paypal.com domain\");if(c=a&&a.data,\"string\"==typeof c)try{c=JSON.parse(c)}catch(h){throw new Error(\"Invalid JSON string sent to onPostMessage handler: \"+c)}c.data&&\"resize\"===c.data.event?e(q,c.data.heightInPx):c.data&&\"htmlRendered\"===c.data.event?x=!0:!w&&p?p(c):w&&v.push(c)}function d(a){a&&\"resize\"===a.event?e(s,a.heightInPx):r(a)}function e(a,b){a.setAttribute(\"height\",b)}function f(a){var b=/\\.paypal\\.com$/gi;return b.test(a)}function g(a){if(a){var b=/^https?:\\/\\/(.*\\.paypal\\.com)(:[0-9]+)?$/gi,c=b.exec(a);return c&&c[1]}}function h(){var a;if(p){for(a=0;a\\n
    \\n {{props.address.full_address}}\\n {{content('countryList.'+props.address.country)}}\\n
    \\n\\n
    \\n {{formattedAddr.displayLine1}}
    \\n {{formattedAddr.displayLine2}}
    \\n {{formattedAddr.displayLine3}}\\n
    \\n\\n
    \\n \\n {{content('shippingAddress.preferred')}}\\n \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-address-components/src/address-display/template.html\n// module id = ../node_modules/xo-address-components/src/address-display/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module('beaver.level', []).factory('$logLevel', function () {\n return {\n INFO: 'info',\n DEBUG: 'debug',\n ERROR: 'error',\n WARN: 'warn',\n ALERT: 'alert'\n };\n}).factory('$consoleLogLevel', function () {\n return {\n info: 'info',\n debug: 'debug',\n error: 'error',\n warn: 'warn',\n alert: 'info'\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-beaver/dist/level.js\n// module id = ../node_modules/xo-beaver/dist/level.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _level = require('./level');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/* eslint-disable angular/di */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$Logger', function () {\n var logger = {};\n var HERMES_DEV_COOKIE = 'hermesdev';\n\n _angular2['default'].forEach(_level.$logLevel, function (level) {\n logger[level] = function (event, payload, settings) {\n return this.log(level, event, payload, settings);\n };\n });\n\n var hostname = _angular.$window.location && _angular.$window.location.hostname || '';\n var uniqueEvents = [];\n\n _angular2['default'].extend(logger, {\n autoLog: [_level.$logLevel.WARNING, _level.$logLevel.ERROR],\n flushInterval: 10 * 60 * 1000,\n heartbeatInterval: 5000,\n sizeLimit: 500,\n debounceInterval: 10,\n uri: '/api/log',\n rootTxnUri: '/api/log/crt',\n hearbeatMaxThreshold: 50,\n deploy: {\n isLocal: function isLocal() {\n return hostname === 'localhost' || hostname === 'localhost.paypal.com';\n },\n\n isStage: function isStage() {\n return Boolean(hostname.match(/^.*\\.qa\\.paypal\\.com$/));\n },\n\n isLive: function isLive() {\n return hostname === 'www.paypal.com';\n }\n },\n\n init: function init() {\n var self = this;\n\n this.buffer = [];\n\n var previousBeforeUnloadHandler = _angular.$window.onbeforeunload;\n\n _angular.$window.onbeforeunload = function (event) {\n if (self.isDone) {\n return;\n }\n\n self.info('window_beforeunload');\n\n if (previousBeforeUnloadHandler) {\n return previousBeforeUnloadHandler.apply(this, arguments);\n }\n };\n\n var previousUnloadHandler = _angular.$window.onunload;\n\n _angular.$window.onunload = function (event) {\n\n if (self.isDone) {\n return;\n }\n\n self.info('window_unload');\n self._flush();\n\n self.done();\n\n if (previousUnloadHandler) {\n return previousUnloadHandler.apply(this, arguments);\n }\n };\n\n this.heartbeat();\n this.daemon();\n },\n\n heartbeat: function heartbeat() {\n var self = this;\n\n if (!window.enablePerformance) {\n return;\n }\n\n function timestamp() {\n var perf = window.performance;\n\n return parseInt(perf.now() - (perf.timing.connectEnd - perf.timing.navigationStart), 10);\n }\n\n var howBusy = {\n lastSampledTime: timestamp(),\n lastLag: 0,\n maxLag: 0,\n dampendedLag: 0\n };\n\n var count = 0;\n\n (0, _angular.$interval)(function () {\n\n if (!self.buffer.length || self.buffer[self.buffer.length - 1].event !== 'heartbeat') {\n count = 0;\n }\n\n if (!self.buffer.length || count > self.hearbeatMaxThreshold) {\n return;\n }\n\n count += 1;\n\n var payload = {\n count: count\n };\n\n var now = timestamp();\n\n howBusy.lastLag = now - howBusy.lastSampledTime - self.heartbeatInterval;\n howBusy.maxLag = howBusy.lastLag > howBusy.maxLag ? howBusy.lastLag : howBusy.maxLag;\n howBusy.dampendedLag = (howBusy.lastLag + howBusy.dampendedLag * 2) / 3;\n howBusy.lastSampledTime = now;\n\n payload.lastLag = howBusy.lastLag.toFixed(4);\n payload.maxLag = howBusy.maxLag.toFixed(4);\n payload.dampendedLag = howBusy.dampendedLag.toFixed(4);\n payload.lastSampledTime = howBusy.lastSampledTime.toFixed(4);\n\n if (howBusy.lastLag > 10000) {\n self.info('toobusy', {}, {\n noConsole: true,\n unique: true\n });\n }\n\n self.info('heartbeat', payload, {\n noConsole: true\n });\n }, this.heartbeatInterval);\n },\n\n done: function done() {\n this.flush(true);\n this.isDone = true;\n },\n\n addPerformanceData: function addPerformanceData(payload) {\n\n if (window.enablePerformance) {\n var performance = window.performance;\n var timing = window.performance.timing || {};\n var now = performance.now();\n\n if (window.clientStartTime && _angular2['default'].isUndefined(payload.client_elapsed)) {\n payload.client_elapsed = parseInt(now - window.clientStartTime, 10);\n }\n\n if (timing.connectEnd && timing.navigationStart && _angular2['default'].isUndefined(payload.req_elapsed)) {\n payload.req_elapsed = parseInt(now - (timing.connectEnd - timing.navigationStart), 10);\n }\n }\n },\n\n addLocaleData: function addLocaleData(payload) {\n\n var context = {};\n\n try {\n context = _angular.$injector.get('$metaBuilder').buildContext();\n } catch (err) {\n return; // Continue without adding locale data\n }\n if (context.locale && context.locale.country) {\n payload.site_cntry = context.locale.country;\n }\n },\n\n /* jslint maxcomplexity: false */\n log: function log(level, event, payload, settings) {\n var self = this;\n\n payload = payload || {};\n\n if (_angular2['default'].isArray(payload) || !_angular2['default'].isObject(payload)) {\n payload = {\n payload: payload\n };\n }\n settings = settings || {};\n\n if (settings.unique) {\n var hash = event + ':' + _angular2['default'].toJson(payload);\n\n if (uniqueEvents.indexOf(hash) > -1) {\n return self;\n }\n uniqueEvents.push(hash);\n }\n\n payload.pageID = window.meta && window.meta.pageID;\n\n this.addPerformanceData(payload);\n this.addLocaleData(payload);\n\n self.print(level, event, payload, settings);\n\n if (this.buffer.length >= this.sizeLimit) {\n if (this.buffer.length === this.sizeLimit) {\n return self.enqueue('warn', 'logger_max_buffer_length');\n }\n return self;\n }\n\n return self.enqueue(level, event, payload, settings);\n },\n\n getTimestamp: function getTimestamp() {\n var now = Date.now();\n\n return window.logOffset ? window.logOffset + now : now;\n },\n\n enqueue: function enqueue(level, event, payload, settings) {\n payload = payload || {};\n settings = settings || {};\n\n var data = {\n level: level,\n event: event,\n timestamp: this.getTimestamp(),\n payload: payload\n };\n\n this.buffer.push(data);\n\n // If the log level is classified as autolog, then flush the data\n if (this.autoLog.indexOf(level) > -1) {\n this.flush();\n }\n\n return this;\n },\n\n shouldPrintLogsToConsole: function shouldPrintLogsToConsole(settings) {\n\n if (settings.noConsole) {\n return false;\n }\n\n if (window.meta && window.meta.corp) {\n return true;\n }\n\n if (this.deploy.isLocal() || this.deploy.isStage()) {\n return true;\n }\n\n var cookies = window.cookies || {};\n\n if (cookies[HERMES_DEV_COOKIE] && cookies[HERMES_DEV_COOKIE] === '1') {\n return true;\n }\n\n return false;\n },\n\n print: function print(level, event, payload, settings) {\n\n if (!this.shouldPrintLogsToConsole(settings)) {\n return;\n }\n\n var args = [event];\n\n if (payload) {\n args.push(payload);\n\n if (payload.stack || payload.error || payload.warning) {\n args.push('\\n\\n', payload.stack || payload.error || payload.warning);\n }\n }\n\n _angular.$log[_level.$consoleLogLevel[level] || 'info'].apply(_angular.$log, args);\n },\n\n flush: function flush(immediate) {\n var self = this;\n\n if (!this.buffer.length) {\n return _angular.$q.when();\n }\n\n if (immediate) {\n return _angular.$q.when(this._flush());\n }\n\n if (self.debouncer_timeout) {\n _angular.$timeout.cancel(self.debouncer_timeout);\n }\n\n self.debouncer_timeout = (0, _angular.$timeout)(function () {\n\n var resolver = self.debouncer_resolver;\n\n delete self.debouncer_promise;\n delete self.debouncer_resolver;\n delete self.debouncer_timeout;\n\n self._flush().then(function () {\n resolver();\n });\n }, this.debounceInterval);\n\n self.debouncer_promise = self.debouncer_promise || (0, _angular.$q)(function (resolver) {\n self.debouncer_resolver = resolver;\n });\n\n return self.debouncer_promise;\n },\n\n _flush: function _flush() {\n var self = this;\n\n if (!self.buffer.length) {\n return _angular.$q.when();\n }\n\n var meta = {};\n\n try {\n meta = _angular.$injector.get('$metaBuilder').build();\n } catch (err) {\n // @TODO - Log error\n }\n\n var req = this.ajax('post', _angular.$window.meta.logURL || _angular.$window.config.urls.baseUrl + this.uri, {\n data: {\n events: self.buffer\n },\n meta: meta\n });\n\n self.buffer = [];\n\n return req;\n },\n\n ajax: function ajax(method, url, json) {\n return (0, _angular.$q)(function (resolve) {\n var XRequest = window.XMLHttpRequest || ActiveXObject; // eslint-disable-line no-undef, block-scoped-var\n var req = new XRequest('MSXML2.XMLHTTP.3.0');\n var logAppName = _angular.$window.meta.logAppName;\n\n req.open(method.toUpperCase(), url);\n\n req.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n req.setRequestHeader('Content-type', 'application/json');\n\n if (logAppName) {\n req.setRequestHeader('x-app-name', logAppName);\n }\n\n req.onreadystatechange = function () {\n if (req.readyState > 3) {\n resolve();\n }\n };\n req.send(_angular2['default'].toJson(json).replace(/&/g, '%26')); // eslint-disable-line angular/ng_json_functions\n });\n },\n\n daemon: function daemon() {\n this.stop();\n\n var self = this;\n\n this.timer = (0, _angular.$interval)(function () {\n self.flush();\n }, this.flushInterval);\n },\n\n stop: function stop() {\n if (this.timer) {\n _angular.$interval.cancel(this.timer);\n }\n },\n\n createCalRootTxn: function createCalRootTxn(data, txnName) {\n if (data !== null && _angular2['default'].isObject(data)) {\n var rootTxnData = { 'data': {}, 'transactionName': '' };\n var url = '' + _angular.$window.config.urls.baseUrl + this.rootTxnUri;\n if (_angular2['default'].isString(txnName)) {\n rootTxnData.transactionName = txnName;\n }\n Object.assign(rootTxnData.data, data);\n this.ajax('post', url, rootTxnData);\n }\n }\n });\n\n function Logger(val) {\n _angular2['default'].extend(this, val);\n this.init();\n }\n\n Logger.prototype = logger;\n Logger.prototype.constructor = Logger;\n\n return Logger;\n}).factory('$logger', ['$Logger', function ($Logger) {\n return new $Logger();\n}]).run(['$logger', function ($logger) {\n _angular2['default'].forEach(window.beaconQueue, function (payload) {\n $logger.log(payload.level, payload.event, payload);\n });\n\n window.beacon = function (level, events, payload) {\n _angular2['default'].forEach(events, function (event) {\n $logger.log(level, event, payload);\n });\n };\n}]);\n\n_level.$logLevel;\n\n_level.$consoleLogLevel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-beaver/dist/logger.js\n// module id = ../node_modules/xo-beaver/dist/logger.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _bml = require('xo-models/src/bml');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoBmlPopup', function () {\n return {\n template: _template2['default'],\n controller: ['$scope', function ($scope) {\n (0, _squid.$populate)($scope, {\n checkoutSession: _index.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n if ($scope.checkoutSession.showDeclinePopup) {\n if (!_angular.$rootScope.bml) {\n _angular.$rootScope.bml = new _bml.$BMLModel();\n }\n if (!$scope.bml) {\n $scope.bml = _angular.$rootScope.bml;\n }\n\n $scope.bml.preferenceCheck = false;\n $scope.bml.showModal = true;\n $scope.bml.showModalBackdrop = true;\n\n if ($scope.bml.applicationStatus() || $scope.bml.contingency) {\n $scope.bml.showModalBackdrop = true;\n }\n }\n });\n\n $scope.bmlSetPreferrence = function () {\n if ($scope.bml.preferenceCheck) {\n $scope.bml.action('preference', {\n data: {\n financial_instrument_id: $scope.bml.financial_instrument_id\n },\n success: function success() {\n _logger.$logger.info('COMPLETEBMLAPPLY_PREFERRED');\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['memberReview.bmlPreferredConfirmation']\n };\n }\n });\n } else {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n }\n $scope.bml.showModal = false;\n };\n\n $scope.bmlClickContinue = function ($event) {\n $event.preventDefault();\n $scope.bml.showModalBackdrop = false;\n $scope.bml.showModal = false;\n };\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$populate;\n\n_logger.$logger;\n\n_bml.$BMLModel;\n\n_index.$CheckoutSessionModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js\n// module id = ../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n
    \\n\\n
    \\n\\n
    \\n\\n
    \\n
    \\n \\n

    {{ content('memberReview.bmlSuccessHeader') }}

    \\n\\n
    \\n

    {{ content('memberReview.bmlNapeLinkSuccess')}}

    \\n
    \\n
    \\n

    {{ content('memberReview.bmlApprovalMessage') }}

    \\n
    \\n
    0\\\">\\n

    \\n

    {{ content('memberReview.bmlSuccessMessageSend', {email: bml.user_info.email_address}) }}

    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n \\n
    \\n\\n
    \\n
    \\n
    \\n \\n
    \\n

    {{ content('memberReview.bmlSorry')}}

    \\n

    {{ content('bmlDeclined.hardDeclineMsg')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.bmlAcctLinkedHeader')}}

    \\n

    {{ content('bmlDeclined.bmlAcctLinkedMsg')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.hardDeclineHeader')}}

    \\n

    {{ content('bmlDeclined.hardDeclineMsg')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.creditNotAllowedHeader')}}

    \\n

    {{ content('bmlDeclined.creditNotAllowedMsg')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.creditEligibilityDeniedHeader')}}

    \\n

    {{ content('bmlDeclined.creditEligibilityDeniedMsg')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.declineOtherCreditInstrumentExistsHeader')}}

    \\n

    {{ content('bmlDeclined.declineOtherCreditInstrumentExistsLine1')}}

    \\n

    {{ content('bmlDeclined.declineOtherCreditInstrumentExistsLine2\\\" merchantName=\\\"{bmlResult.merchantFullName}')}}

    \\n
    \\n \\n
    \\n

    {{ content('bmlDeclined.systemErrorHeader')}}

    \\n

    {{ content('bmlDeclined.systemErrorMsg')}}

    \\n
    \\n
    \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html\n// module id = ../node_modules/xo-credit-components/src/bml-display/xo-bml-popup/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.PERSONALIZATION_PHASES = undefined;\nexports.personalizationManager = personalizationManager;\n\nvar _angular = require('angular');\n\nvar _xoCreditBannerUtils = require('./xo-credit-banner-utils');\n\nvar _squid = require('squid');\n\nvar PERSONALIZATION_PHASES = exports.PERSONALIZATION_PHASES = {\n 'SHADOW': 'SHADOW',\n 'RAMP': 'RAMP',\n 'CONTROL': 'CONTROL'\n};\n\n/**\n * Calls SSOT for UK flow and MORS/SearchAds for US flows\n * @param token\n * @param models\n * @param contentKeys\n * @returns {*}\n */\nfunction callDefaultServiceAndMapBanner(token, models, contentKeys) {\n if (_squid.$locale.country.toUpperCase() === 'GB') {\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSsotAndMapBanner(token, models, contentKeys);\n } else {\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSearchAdsAndMapBanner(models);\n }\n}\n\n/**\n * This is a generic manager for personalization.\n * Typically, personalization has 3 phases.\n * CONTROL: Calls and use ONLY banner returned from MORS/searchAds\n * SHADOW: Calls MORS/searchAds && MORS/discoverMessages, compares results and logs differences. But returns banner from MORS/searchAds to use in Hermes\n * RAMP: Calls and use ONLY banner returned from MORS/discoverMessage\n * @param {string} phase\n * @param token\n * @param model\n * @param contentKeys\n * @returns {banner}\n */\nfunction personalizationManager(phase, token, models, contentKeys) {\n switch (phase) {\n case PERSONALIZATION_PHASES.SHADOW:\n return _angular.$q.all([callDefaultServiceAndMapBanner(token, models, contentKeys), _xoCreditBannerUtils.$xoCreditBannerUtils.callDiscoverMessagesAndMapToBanner(token, models)]).then(function (_ref) {\n var originalBanner = _ref[0],\n discoverMessageBanner = _ref[1];\n\n _xoCreditBannerUtils.$xoCreditBannerUtils.compareAdObjects(originalBanner, discoverMessageBanner);\n return originalBanner;\n });\n case PERSONALIZATION_PHASES.RAMP:\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callDiscoverMessagesAndMapToBanner(token, models).then(function (discoverMessageBanner) {\n if (discoverMessageBanner) {\n // return banner if it's defined\n return discoverMessageBanner;\n }\n // else call ssot\n return _xoCreditBannerUtils.$xoCreditBannerUtils.callSsotAndMapBanner(token, models, contentKeys);\n });\n default:\n return callDefaultServiceAndMapBanner(token, models, contentKeys).then(function (banner) {\n return banner;\n });\n }\n}\n\n_angular.$q;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n_squid.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/lib/personalizationManager.js\n// module id = ../node_modules/xo-credit-components/src/lib/personalizationManager.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar COUNTRY_CODE = exports.COUNTRY_CODE = {\n 'GreatBritain': 'GB',\n 'UnitedStates': 'US',\n 'Germany': 'DE'\n};\n\nvar PERSONALIZATION_TREATMENT = exports.PERSONALIZATION_TREATMENT = {\n 'GB': {\n 'SHADOW': 'xo_hermesnodeweb_gb_ppc_personalization_treatment1',\n 'RAMP': 'xo_hermesnodeweb_gb_ppc_personalization_treatment2',\n 'CONTROL': 'xo_hermesnodeweb_gb_ppc_personalization_control'\n }\n};\n\nvar PERSONALIZATION_MESSAGE_PREFIX = exports.PERSONALIZATION_MESSAGE_PREFIX = 'PS-';\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\n// module id = ../node_modules/xo-credit-components/src/lib/xo-credit-banner-constants.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCreditBannerUtils = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/credit/index');\n\nvar _index2 = require('xo-models/src/marketingoffer/index');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _index3 = require('xo-device-info/dist/index');\n\nvar _xoCreditBannerConstants = require('./xo-credit-banner-constants');\n\nvar $xoCreditBannerUtils = exports.$xoCreditBannerUtils = {\n getCreditInWallet: function getCreditInWallet(checkoutSession, isBANoPurchase) {\n if (!checkoutSession) {\n return false;\n }\n\n if (isBANoPurchase) {\n return checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = checkoutSession.getPlanList();\n return plans.find(function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n },\n /**\n * Check to see if PayPal Credit is in wallet\n * If the current transaction is BA without purchase, it looks at checkoutSession.futurePayment.isCreditInWallet\n * Otherwise, it loops through funding options to find BILL_ME_LATER instrument\n * @param checkoutSession\n * @param isBANoPurchase\n * @returns {*}\n */\n isCreditInWallet: function isCreditInWallet(checkoutSession, isBANoPurchase) {\n return this.getCreditInWallet(checkoutSession, isBANoPurchase) ? true : false;\n },\n /**\n * Check if PPC is set as default FI for the transaction\n * For BA-NOP, it checks sticky instrument.\n * For other BA transactions, it looks for future payment instruments\n * For non-BA transactions, it checks funding option instead\n * @param checkoutSession\n * @param isBANoPurchase\n * @returns {*}\n */\n isCreditSelected: function isCreditSelected(checkoutSession, isBANoPurchase) {\n var creditInWallet = this.getCreditInWallet(checkoutSession, isBANoPurchase);\n\n if (!creditInWallet) {\n return false;\n }\n\n if (isBANoPurchase) {\n var stickyFI = checkoutSession.getSelectedStickyInstrument();\n return stickyFI.type === 'BILL_ME_LATER';\n } else {\n return creditInWallet.selected;\n }\n },\n /**\n * Call SSOT and return $CreditInstallmentOptionsModel to caller\n * @param token\n * @param payee\n * @param checkoutCart\n * @param checkoutAppData\n * @param silent\n * @returns {*}\n */\n executeSsotCall: function executeSsotCall(token, payee, checkoutCart, checkoutAppData, silent) {\n var offers = new _index.$CreditInstallmentOptionsModel({\n id: token,\n payee: payee,\n checkoutCart: checkoutCart,\n checkoutAppData: checkoutAppData,\n isMemberCredit: true\n });\n\n return offers.save({\n silent: silent,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('xo-credit-banner-utils: executeSsotCall succeeded');\n return offers;\n },\n error: function error(err) {\n _logger.$logger.error('xo-credit-banner-utils: executeSsotCall error', { error: err });\n return;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n _logger.$logger.info('xo-credit-banner-utils: executeSsotCall: GET_INSTALLMENT_CONTINGENCY');\n }\n }\n });\n },\n /**\n * Constructs the application context to be used in the executeMorsDiscoverMessageCall()\n * @param models\n * @returns Array of Object {name, value}\n */\n getApplicationContext: function getApplicationContext(models) {\n var applicationContext = [{\n name: 'transaction_amount',\n value: (models.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }, {\n name: 'transaction_currency',\n value: models.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }, {\n name: 'ppc_in_wallet',\n value: this.isCreditInWallet(models.checkoutSession, models.checkoutCart.isBillingNoPurchase())\n }, {\n name: 'ppc_default_fi',\n value: models.checkoutSession.get('plan.paypal_credit')\n }, {\n name: 'is_mobile',\n value: _index3.$DeviceInfo.isDevice()\n }, {\n name: 'installments_not_allowed',\n value: !models.checkoutSession.creditInstallmentOffer || models.checkoutCart.isBilling()\n }, {\n name: 'is_ba_rt_no_purchase',\n value: models.checkoutCart.isBillingNoPurchase() && !models.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }];\n var ppcConversionInfo = models.checkoutSession.getPPCconversionInfo();\n if (ppcConversionInfo) {\n var ppcConversionRate = {\n name: 'currency_conversion_rate',\n value: ppcConversionInfo.to_amount\n };\n applicationContext.push(ppcConversionRate);\n }\n return applicationContext;\n },\n /**\n * Verify if the purchaseAmount is eligible for CORE offer\n * @param purchaseAmount\n * @returns {boolean}\n */\n isEligibleForCORE: function isEligibleForCORE(purchaseAmount) {\n var threshold = _checkout.$CreditOptionsModel.sacEligibleAmount[_squid.$locale.country];\n\n _logger.$logger.info('$xoCreditBannerUtils: purchaseAmount: ' + purchaseAmount + ', threshold: ' + threshold);\n\n return purchaseAmount < threshold;\n },\n\n /**\n * Calls $renderContent with all content keys for banner\n * Put all the dynamic content needs to be swapped out from bodyText or bodyText2 into props\n * @param keys\n * @param props\n * @returns {{ctaText: *, logo: *, bodyText: *, bodyText2: *, termsLink: *}}\n */\n renderContentByKey: function renderContentByKey(keys) {\n var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return {\n ctaText: (0, _squid.$renderContent)(keys.ctaText),\n logo: keys.logo,\n bodyText: (0, _squid.$renderContent)(keys.bodyText, props),\n bodyText2: (0, _squid.$renderContent)(keys.bodyText2, props),\n termsLink: keys.termsLink,\n messageId: 'JS-UK-Banner-ACQ'\n };\n },\n\n /**\n * Call SSOT and map SSOT response to a banner object\n * @param token\n * @param models\n * @returns {*}\n */\n callSsotAndMapBanner: function callSsotAndMapBanner(token, models, targetContentKey) {\n var _this = this;\n\n if (!token || !models.payee || !models.checkoutCart || !models.checkoutAppData || !models.checkoutSession || !targetContentKey) {\n return _angular.$q.when();\n }\n\n var isBillingNoPurchase = models.checkoutCart.isBillingNoPurchase();\n var isReuse = this.isCreditInWallet(models.checkoutSession, isBillingNoPurchase);\n\n if (isBillingNoPurchase) {\n // Use CORE content if is billing agreement without purchase\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapBanner(): BA-NOP, use CORE banner');\n return _angular.$q.when().then(function () {\n return _this.renderContentByKey(targetContentKey.core);\n });\n } else {\n return this.executeSsotCall(token, models.payee, models.checkoutCart, models.checkoutAppData, false).then(function (creditInstallmentOptionsModel) {\n if (!creditInstallmentOptionsModel) {\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapGBBanner(): No offer received from SSOT');\n return _angular.$q.when().then(function () {\n if (isReuse) {\n if (_this.isEligibleForCORE(models.checkoutCart.getPurchaseAmount())) {\n return _this.renderContentByKey(targetContentKey.core);\n } else {\n return _this.renderContentByKey(targetContentKey.ni);\n }\n }\n return;\n });\n }\n\n var formattedCartAmount = models.checkoutCart.get('purchase.amounts.total.amount_formatted');\n var props = { cartAmount: formattedCartAmount };\n\n if (creditInstallmentOptionsModel.getInstallmentOptionsPresent()) {\n _logger.$logger.info('$xoCreditBannerUtils callSsotAndMapBanner(): INST Offer');\n var creditSharedInfoModel = _index.$CreditSharedInfoModel.instance();\n creditSharedInfoModel.setInstallmentOfferPresent(true);\n // Get info needed for banner content\n var installmentCount = creditInstallmentOptionsModel.getInstallmentCount();\n var installmentOffer = creditInstallmentOptionsModel.getInstallmentOffers(installmentCount - 1);\n var monthly = installmentOffer.monthlyPayment && installmentOffer.monthlyPayment.formattedAmt;\n var term = installmentOffer.term;\n props = {\n monthlyPayment: monthly,\n term: term\n };\n return _this.renderContentByKey(targetContentKey.installment, props);\n } else if (creditInstallmentOptionsModel.getNiOfferPresent()) {\n _logger.$logger.info('$xoCreditBannerUtils: NI Offer');\n return _this.renderContentByKey(targetContentKey.ni, props);\n } else {\n // if we don't see any (either EZP or NI) offer from SSOT, it's always CORE\n _logger.$logger.info('$xoCreditBannerUtils: CORE Offer');\n return _this.renderContentByKey(targetContentKey.core, props);\n }\n });\n }\n },\n /**\n * Build Credit Offer FPTI Object\n * @param token\n * @param banner\n * @returns {*}\n */\n buildCreditOfferFptiObject: function buildCreditOfferFptiObject(token, banner) {\n\n var Device = '';\n\n if (!_index3.$DeviceInfo.isDevice()) {\n Device = 'Desktop';\n } else if (_index3.$DeviceInfo.isTablet()) {\n Device = 'Tablet';\n } else {\n Device = 'Mobile';\n }\n var defaultValues = {\n 'buyer_country': _squid.$locale.country,\n 'locale': _squid.$locale.lang,\n 'context_id': token,\n 'context_type': 'EC-Token',\n 'device_type': Device,\n 'from': 'PERSONALIZATION',\n 'to': 'PERSONALIZATION_CREDIT',\n 'banner_type': banner.presentmentStyle + '-' + banner.presentmentType\n };\n var mapBannerToFptiProperties = {\n 'visaActive': 'visa_active',\n 'merchantUpstreamPresentment': 'merchant_presented_banner',\n 'product': 'product_identifier',\n 'offerCategory': 'offer_category',\n 'offerType': 'credit_offer_type',\n // offerText1 and bodyText are mapped to the same FPTI attribute intentionally for backward compatibility\n // Should use bodyText during US refactor\n 'offerText1': 'credit_offer_text',\n 'bodyText': 'credit_offer_text',\n 'incentiveOfferProgramId': 'incentive_offer_program_id',\n 'incentiveOfferValue': 'incentive_offer_value',\n 'propensity': 'model_propensity',\n 'approvability': 'credit_user_approvability',\n 'campaignId': 'caid',\n 'currencyConversionRate': 'fx_conversion_to',\n 'cartCurrency': 'currency_conversion_from_curr',\n 'cartAmount': 'converted_transaction_amount'\n };\n var queryValues = {};\n\n for (var key in mapBannerToFptiProperties) {\n if (banner[key] !== null && typeof banner[key] !== 'undefined') {\n queryValues[mapBannerToFptiProperties[key]] = banner[key];\n }\n }\n\n var creditSharedInfo = _index.$CreditSharedInfoModel.instance();\n queryValues.funding_instrument_count = creditSharedInfo.getFiCount();\n queryValues.cart_show_amt = creditSharedInfo.getCartAmountVisible();\n\n return Object.assign({}, defaultValues, queryValues);\n },\n\n /**\n * Calculating number of funding instruments\n * FI count is used in FPTI logs after calling MORS/DiscoverMessage for both US and UK\n * @param models\n * @returns {number}\n */\n getFiCount: function getFiCount(checkoutSessionModel, isBillingNoPurchase) {\n var fundingInstruments = void 0;\n var isBalanceCoveringPurchase = false;\n\n if (!isBillingNoPurchase) {\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n isBalanceCoveringPurchase = plans.find(function (fi) {\n return fi && fi.primaryFs && !fi.secondaryFIs && fi.primaryFs.name === 'BALANCE';\n });\n fundingInstruments = checkoutSessionModel.get('fundingOptions.instruments');\n } else {\n fundingInstruments = checkoutSessionModel.get('futurePaymentInstruments');\n }\n\n var fiApplicableForThisTransaction = 0;\n\n if (fundingInstruments && fundingInstruments.length > 0) {\n fundingInstruments.forEach(function (fundingOption, index) {\n if (fundingOption.type !== 'BALANCE' || isBalanceCoveringPurchase) {\n fiApplicableForThisTransaction++;\n }\n });\n }\n return fiApplicableForThisTransaction;\n },\n /**\n * Call MORS' /message-recommendation endpoint and return $CreditOfferModel to caller\n * @param token\n * @param models\n * @param silent\n * @returns $CreditOfferModel\n */\n executeMorsDiscoverMessagesCall: function executeMorsDiscoverMessagesCall(token, models, silent) {\n var application_context = this.getApplicationContext(models);\n\n var creditOfferModel = new _index2.$CreditOfferModel({\n id: token,\n locale: _squid.$locale,\n payer: models.checkoutSession.payer.id || '',\n payee: models.payee.merchant.id || '',\n touchpoint: 'PPC_HERMES_RYI',\n message_count: 10,\n application_context: application_context\n });\n\n return creditOfferModel.save({\n silent: silent,\n cache: true,\n params: creditOfferModel.getCacheKey(),\n data: creditOfferModel.serialize(),\n success: function success(result) {\n _logger.$logger.info('xo-credit-banner-utils: executeMorsDiscoverMessagesCall Success');\n return creditOfferModel;\n },\n error: function error(_error) {\n _logger.$logger.error('xo-credit-banner-utils: executeMorsDiscoverMessagesCall Fail', { error: _error });\n return creditOfferModel;\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n _logger.$logger.error('xo-credit-banner-utils: executeMorsDiscoverMessagesCall contingency', { contingency: name });\n }\n }\n });\n },\n /**\n * Call /message-recommendations & map the response to a banner object\n * @param token\n * @param models\n * @returns {*}\n */\n callDiscoverMessagesAndMapToBanner: function callDiscoverMessagesAndMapToBanner(token, models) {\n if (!token || !models.payee || !models.checkoutCart || !models.checkoutSession) {\n return _angular.$q.when();\n }\n\n return this.executeMorsDiscoverMessagesCall(token, models, true).then(function (creditOfferModel) {\n if (!creditOfferModel) {\n _logger.$logger.info('$xoCreditBannerUtils callDiscoverMessagesAndMapGBBanner(): No offer received from MORS');\n return _angular.$q.when();\n }\n var banner = void 0;\n if (creditOfferModel.hasBannerMessage()) {\n banner = {};\n var morsBanner = creditOfferModel.getBannerMessage().content.json;\n // Map to banner fields\n banner.messageId = '' + _xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX + morsBanner.MessageDescription;\n banner.ctaText = morsBanner.CTAText;\n banner.logo = morsBanner.Logo;\n banner.bodyText = morsBanner.OfferText1;\n banner.bodyText2 = morsBanner.OfferText2;\n banner.termsLink = morsBanner.TermsLink;\n banner.cartAmount = morsBanner.CartAmount;\n banner.cartCurrency = morsBanner.CartAmountCurrencyCode;\n banner.offerCategory = morsBanner.OfferCategory;\n banner.offerType = morsBanner.OfferType;\n banner.product = morsBanner.Product;\n banner.presentmentStyle = morsBanner.PresentmentStyle;\n banner.presentmentType = morsBanner.PresentmentType;\n banner.campaignId = creditOfferModel.getBannerMessage().id;\n\n if (morsBanner.CrossCurrencyTransaction === 'true' && morsBanner.CurrencyConversionRate && models.checkoutCart.get('purchase.amounts.total.currency_code')) {\n banner.crossCurrencyTransaction = true;\n banner.currencyConversionRate = morsBanner.CurrencyConversionRate;\n banner.toTargetCurrency = morsBanner.CurrencyConversionRate + ' ' + models.checkoutCart.purchase.amounts.total.currency_code;\n banner.fromUnitCurrency = '1 ' + morsBanner.CartAmountCurrencyCode;\n }\n\n // Address US1226988\n if (morsBanner.OfferType === 'EZP') {\n _logger.$logger.info('$xoCreditBannerUtils callDiscoverMessagesAndMapToBanner(): EZP Offer');\n var creditSharedInfoModel = _index.$CreditSharedInfoModel.instance();\n creditSharedInfoModel.setInstallmentOfferPresent(true);\n }\n }\n return banner;\n });\n },\n /**\n * Compares the equivalency of banner objects `base` & `compare`\n * @param base\n * @param compare\n * @returns Object {expected, actual}\n */\n compareAdObjects: function compareAdObjects(base, compare) {\n _logger.$logger.info('Comparing ad objects', { base_ad: base, recommended_message: compare });\n var diff = [];\n var keysToIgnore = ['campaignId', 'buyItemId', 'placementCode', 'impressionUrl', 'clickUrl', 'client_elapsed', 'req_elapsed', 'messageId'];\n\n if (!base) {\n diff.push('base_ad is not present');\n } else if (!compare) {\n diff.push('recommended_message is not present');\n } else {\n Object.keys(base).forEach(function (key) {\n if (keysToIgnore.indexOf(key) === -1) {\n if (!compare[key]) {\n if (base[key].toString().length > 0) {\n diff.push({\n key: key,\n expected: base[key].toString(),\n actual: undefined\n });\n }\n } else if (compare[key].toString() !== base[key].toString()) {\n diff.push({\n key: key,\n expected: base[key].toString(),\n actual: compare[key].toString()\n });\n }\n }\n });\n }\n\n if (diff.length !== 0) {\n _logger.$logger.warn('recommended_message_warning', diff);\n }\n },\n // TODO: Update comments and implement the actual MORS searchAds call during US breakout/refactor\n /**\n * This is a stub for US flow. Put this in place so we can finish up personalization manager implementation\n * @param models\n * @returns {{}}\n */\n callSearchAdsAndMapBanner: function callSearchAdsAndMapBanner(models) {\n _logger.$logger.info('Calling MORS/SearchAds and map banner');\n return {};\n }\n};\n\nangular.value(\"$xoCreditBannerUtils\", $xoCreditBannerUtils);\n_angular.$q;\n\n_logger.$logger;\n\n_squid.$locale;\n\n_squid.$renderContent;\n\n_index.$CreditSharedInfoModel;\n\n_index.$CreditInstallmentOptionsModel;\n\n_index2.$CreditOfferModel;\n\n_checkout.$CreditOptionsModel;\n\n_index3.$DeviceInfo;\n\n_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\n// module id = ../node_modules/xo-credit-components/src/lib/xo-credit-banner-utils.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _xoMORSCreditBannerUtils = require('xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils');\n\nvar _app = require('xo-models/src/app');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nvar _pxp = require('xo-page-components/src/cart/lib/pxp');\n\nvar _marketingoffer = require('xo-models/src/marketingoffer');\n\nvar _index3 = require('xo-models/src/credit/index');\n\nvar _xoCreditBannerConstants = require('../lib/xo-credit-banner-constants');\n\nrequire('../xo-credit-offer-banners/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar ACQ_Banner_Type = 'acquisition';\n\nangular.module().directive('xoOffer', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n promotion: '=?',\n bmlaction: '=?',\n installment: '=?',\n selectedmethod: '=?',\n reusetext: '=?',\n radio: '=?',\n parentContext: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.locale = _squid.$locale;\n $scope.buyerCountry = _squid.$locale.country;\n\n // Breakout of offer to go into xo-credit-offer-banners for GB flows\n if (_squid.$locale.country === _xoCreditBannerConstants.COUNTRY_CODE.GreatBritain) {\n _logger.$logger.info('Breaking into country specific credit offer flow');\n return (0, _angular.$q)(function () {\n return;\n });\n }\n\n var isCreditInWallet = void 0;\n var isRedirectFromCape = void 0;\n var discoverMessageError = null;\n\n var BANNER_TYPES = {\n 'PASSIVE': 'PASSIVE',\n 'PROMINENT': 'PROMINENT'\n };\n var USE_CASE = {\n 'REUSE': 'REUSE',\n 'ACQUISITION': 'ACQUISITION'\n };\n var CREDIT_TYPE = {\n 'CORE': 'CORE',\n 'SAC': 'SAC',\n 'NI': 'NI',\n 'EZP': 'EZP',\n 'BA': 'BA'\n };\n\n // track interstitials\n var CREDIT_BANNER_DISPLAY_COUNT_MAX = 1;\n var CREDIT_BANNER_DISPLAY_COUNT_KEY = 'credit_banner_display_count_key';\n $scope.locale = _squid.$locale;\n\n $scope.isNewMember = function () {\n var newMember = $scope.parentContext && $scope.parentContext.newMember;\n if (!newMember) {\n return false;\n }\n\n return newMember.variant === 'one_page' || newMember.variant === 'design_2' || newMember.variant === 'design_3';\n };\n\n // Returns false to use existing logic, true to hide the banner.\n var isNewMemberDecisionToHideBanner = function isNewMemberDecisionToHideBanner() {\n if (!$scope.isNewMember()) {\n return false;\n }\n\n // If we get to this point, it means it is new member traffic.\n // Hide banner when useCEPDEcision is set to false.\n var newMember = $scope.parentContext && $scope.parentContext.newMember;\n\n if (newMember.useCEPDecision) {\n return !newMember.creditOffer;\n } else {\n return true;\n }\n };\n\n var buildCreditOfferFptiObject = function buildCreditOfferFptiObject(query) {\n var Device = '';\n\n if (!_index.$DeviceInfo.isDevice()) {\n Device = 'Desktop';\n } else if (_index.$DeviceInfo.isTablet()) {\n Device = 'Tablet';\n } else {\n Device = 'Mobile';\n }\n var defaultValues = {\n 'buyer_country': _squid.$locale.country,\n 'locale': _squid.$locale.lang,\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'EC-Token',\n 'device_type': Device,\n 'from': 'PERSONALIZATION',\n 'to': 'PERSONALIZATION_CREDIT',\n 'banner_type': query.PresentmentStyle + '-' + query.PresentmentType\n };\n var creditOfferFptiMapObject = {\n 'VisaActive': 'visa_active',\n 'MerchantUpstreamPresentment': 'merchant_presented_banner',\n 'Product': 'product_identifier',\n 'OfferCategory': 'offer_category',\n 'OfferType': 'credit_offer_type',\n 'OfferTextTemplate': 'credit_offer_text',\n 'incentiveOfferProgramId': 'incentive_offer_program_id',\n 'incentiveOfferValue': 'incentive_offer_value',\n 'CartAmountVisible': 'cart_show_amt',\n 'NumberOfFIs': 'funding_instrument_count',\n 'Propensity': 'model_propensity',\n 'Approvability': 'credit_user_approvability',\n 'campaignId': 'caid'\n };\n var queryValues = {};\n\n for (var key in creditOfferFptiMapObject) {\n if (query[key] !== null && typeof query[key] !== 'undefined') {\n queryValues[creditOfferFptiMapObject[key]] = query[key];\n }\n }\n\n return Object.assign({}, defaultValues, queryValues);\n };\n\n var buildPSMonitoringObject = function buildPSMonitoringObject(message, bannerType, err) {\n var psMonitorObject = { 'token': _angular.$rootScope.token };\n if (err) {\n psMonitorObject.m_err = err;\n } else {\n psMonitorObject.m_prod_type = message.PresentmentStyle + '_' + message.PresentmentType;\n psMonitorObject.message = message.OfferType;\n psMonitorObject.m_udf1 = message.OfferCategory;\n psMonitorObject.m_udf2 = message.VisaActive;\n psMonitorObject.m_udf3 = message.MerchantUpstreamPresentment;\n psMonitorObject.m_inptype = !!message.incentiveOfferProgramId;\n psMonitorObject.type = message.OfferTextTemplate;\n }\n psMonitorObject.msgClass = ($scope.showPassiveBanner ? 'Passive' : 'Prominent') + '_' + bannerType;\n psMonitorObject.m_trdtype = $scope.showIncentiveBanner;\n psMonitorObject.m_event = $scope.banner.offerType;\n psMonitorObject.m_chnl = 'Desktop';\n if (_index.$DeviceInfo.isDevice()) {\n psMonitorObject.m_chnl = _index.$DeviceInfo.isTablet() ? 'Tablet' : 'Mobile';\n }\n return psMonitorObject;\n };\n\n var hideBannerForNewMember = isNewMemberDecisionToHideBanner();\n\n var getDefaultBanner = function getDefaultBanner(bannerType, useCase, creditType, amount, termsLink) {\n _logger.$logger.info('getDefaultBanner(): bannerType(' + bannerType + '), useCase(' + useCase + '), creditType(' + creditType + ')');\n if (bannerType === BANNER_TYPES.PROMINENT) {\n if (useCase === USE_CASE.ACQUISITION) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferSmallTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferTitleWithAmountZero'),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferLargeTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferEZPTitleWithAmount', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferBtn'),\n termsText: $scope.htmlContent('offers.subjectToApproval')\n };\n }\n } else if (useCase === USE_CASE.REUSE) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmall', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmallDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferLarge', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferReuseCta'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.bmlExistingOfferTitle'),\n bodyText2: $scope.htmlContent('offers.assetLite.bmlExistingOfferEZP', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.assetLite.cycoOfferBtn')\n };\n }\n }\n } else if (useCase === USE_CASE.ACQUISITION) {\n if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA && amount) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if ((!amount || amount === '') && creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferTitleWithAmountZero'),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveNIDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval'),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText')\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlOfferPassiveEZPDetails', { cartAmount: amount }),\n ctaText: $scope.htmlContent('offers.bmlOfferPassiveEZPCta'),\n termsText: $scope.htmlContent('offers.subjectToApproval')\n };\n }\n }\n };\n\n var getReuseOfferInfo = function getReuseOfferInfo(creditType, termsLink, amount) {\n _logger.$logger.info('getReuseOfferInfo(): creditType(' + creditType + ')');\n if (!amount || amount === '') {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferAmountZeroDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.CORE || creditType === CREDIT_TYPE.BA) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferSmallDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.NI) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferLargeDetails', { cartAmount: amount }),\n termsLink: termsLink,\n termsLinkText: $scope.htmlContent('offers.seeTermsText') + '.'\n };\n } else if (creditType === CREDIT_TYPE.EZP) {\n return {\n bodyText: $scope.htmlContent('offers.assetLite.bmlExistingOfferEZPDetails', { cartAmount: amount })\n };\n }\n };\n\n var isCreditTxnLowerThanThreshold = function isCreditTxnLowerThanThreshold() {\n var transactionAmount = $scope.getTransactionAmount();\n var largeEligibleAmount = _index2.$CreditOptionsModel.largeEligibleAmount[_squid.$locale.country];\n\n _logger.$logger.info('transactionAmount_sacEligibleAmount', {\n transactionAmount: transactionAmount,\n largeEligibleAmount: largeEligibleAmount\n });\n return transactionAmount < largeEligibleAmount;\n };\n\n var getCreditType = function getCreditType() {\n // Check if there is an offer already selected\n // This is the scenario where user has EZP but selects SAC or NI\n var instModel = _index3.$CreditInstallmentModel.instance($scope.token);\n var creditType = void 0;\n var resolution = void 0;\n\n if ($scope.isBillingNoPurchase) {\n creditType = CREDIT_TYPE.BA;\n resolution = 'BA_NOP';\n } else if (instModel && instModel.creditType === CREDIT_TYPE.SAC) {\n creditType = CREDIT_TYPE.SAC;\n resolution = 'SAC_SELECTED';\n } else if (instModel && instModel.creditType === CREDIT_TYPE.NI) {\n creditType = CREDIT_TYPE.NI;\n resolution = 'NI_SELECTED';\n } else if ($scope.banner && $scope.banner.offerType) {\n // Check MORS offer type\n creditType = $scope.banner.offerType;\n resolution = 'MORS';\n } else if ($scope.installmentOptionsPresent) {\n // Check SSOT response + installment eligibility\n creditType = CREDIT_TYPE.EZP;\n resolution = 'SSOT_INST';\n } else if ($scope.largeOfferType) {\n // Check SSOT response\n creditType = $scope.largeOfferType;\n resolution = 'SSOT_LARGE_OFFER';\n } else if (!isCreditTxnLowerThanThreshold()) {\n creditType = CREDIT_TYPE.NI;\n resolution = 'CART_NI';\n } else {\n creditType = CREDIT_TYPE.CORE;\n resolution = 'CART_CORE';\n }\n\n return {\n creditType: creditType,\n resolution: resolution\n };\n };\n\n var incrementTreatmentBannerDisplayedCount = function incrementTreatmentBannerDisplayedCount(localStorageKey) {\n _logger.$logger.info('Inside incrementTreatmentBannerDisplayedCount');\n if (_squid.$util.localStorageEnabled()) {\n var public_device_key = 'public_device_test';\n var credit_banner_displayed_count = void 0;\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest !== 'true') {\n // don't overuse localStorage as there is a size limit\n credit_banner_displayed_count = localStorage.getItem(localStorageKey) || 0;\n _logger.$logger.info('incrementTreatmentBannerDisplayedCount: credit_banner_displayed_count' + credit_banner_displayed_count);\n credit_banner_displayed_count++;\n localStorage.setItem(localStorageKey, credit_banner_displayed_count.toString());\n _logger.$logger.info('incrementTreatmentBannerDisplayedCount: credit_banner_displayed_count' + credit_banner_displayed_count);\n }\n }\n };\n\n var isTreatmentCapped = function isTreatmentCapped(result, maxCount) {\n _logger.$logger.info('Inside isTreatmentCapped');\n if (_squid.$util.localStorageEnabled()) {\n var public_device_key = 'public_device_test';\n var credit_banner_displayed_count = void 0;\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest === 'true') {\n // don't overuse localStorage as there is a size limit\n localStorage.removeItem(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n } else {\n credit_banner_displayed_count = localStorage.getItem(CREDIT_BANNER_DISPLAY_COUNT_KEY) || 0;\n _logger.$logger.info('isTreatmentCapped: credit_banner_displayed_count' + credit_banner_displayed_count);\n if (angular.isNumber(maxCount) && maxCount <= credit_banner_displayed_count) {\n _logger.$logger.info('Banner/interstitial treatment is capped');\n return true;\n }\n }\n }\n\n return false;\n };\n\n var isTreatmentIneligible = function isTreatmentIneligible(result, maxCount, localStorageKey) {\n if (CREDIT_TYPE.EZP === getCreditType().creditType) {\n _logger.$logger.info('INST available, Returning to control since its installments');\n return true;\n }\n\n if (isTreatmentCapped(result, maxCount, localStorageKey)) {\n _logger.$logger.info('Treatment Capped');\n return true;\n }\n\n return false;\n };\n\n var shouldSetInterstitial = function shouldSetInterstitial(result) {\n if (isCreditTxnLowerThanThreshold() || isTreatmentIneligible(result, CREDIT_BANNER_DISPLAY_COUNT_MAX, CREDIT_BANNER_DISPLAY_COUNT_KEY)) {\n _logger.$logger.info('setInterstitial: returning false (should not show interstitial)');\n return false;\n }\n var isMobileOrTablet = _index.$DeviceInfo.isDevice();\n\n if (isMobileOrTablet) {\n _logger.$logger.info('setInterstitial: returning false for mobile devices');\n return false;\n }\n\n _logger.$logger.info('setInterstitial: treatment is eligible and not capped');\n incrementTreatmentBannerDisplayedCount(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n return true;\n };\n\n var getInterstitialContent = function getInterstitialContent(params) {\n if (params.showDynamic) {\n $scope.creditOfferModel.fireInterstitialBeacon();\n return $scope.creditOfferModel.getInterstitialContent();\n } else {\n var interstitialContent = {};\n interstitialContent.messageId = 'JS-NI-Interstitial';\n interstitialContent.bodyText = 'No Interest if paid in full in 6 months for your purchase of ' + params.cart_amount;\n interstitialContent.bodyText2 = 'This offer is always available for purchases of $99+';\n interstitialContent.termsText = 'Subject to credit approval.';\n interstitialContent.termsText2 = 'Interest will be charged to your account from the purchase date if ' + 'the balance is not paid in full within 6 months. Minimum monthly ' + 'payments required.';\n interstitialContent.termsLink = 'https://www.billmelater.com/cm/paypal/landers/18ppcTERMS.html';\n interstitialContent.termsLinkText = 'See terms';\n interstitialContent.ctaText = 'Apply Now';\n return interstitialContent;\n }\n };\n\n var showInterstitial = function showInterstitial() {\n _logger.$logger.info('acq_banner', {\n 'from': 'xo_review',\n 'to': 'prepare_banner_interstitial'\n });\n\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped && $scope.creditOfferModel.hasInterstitialMessage()) {\n var interstitialMessage = Object.assign({}, $scope.creditOfferModel.getInterstitialMessage().content.json, { campaignId: $scope.creditOfferModel.getInterstitialMessage().id });\n\n _logger.$logger.info('checkout_fpti', buildCreditOfferFptiObject(interstitialMessage));\n _logger.$logger.createCalRootTxn(buildPSMonitoringObject(interstitialMessage, 'Interstitial', null), 'hermes_personalization');\n }\n\n var interstitialParams = {\n cart_amount: $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''),\n showDynamic: $scope.creditOfferModel && $scope.creditOfferModel.isRamped && $scope.creditOfferModel.hasInterstitialMessage()\n };\n\n return _uiRouter.$state.go('checkout.bannerInterstitial', {\n creditInterstitialTreatment: $scope.creditInterstitialTreatment,\n banner: getInterstitialContent(interstitialParams)\n }, {\n location: false\n });\n };\n\n var renderBanner = function renderBanner() {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T2' });\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutSession: _index2.$CheckoutSessionModel.instance($scope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance($scope.token),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance($scope.token),\n payee: _index2.$CheckoutPayeeModel.instance($scope.token)\n }).then(function () {\n $scope.creditData = _index3.$CreditDataModel.instance($scope.token);\n }).then(function () {\n var merchantId = $scope.payee.getId();\n var country = _squid.$locale.country;\n\n // Exit early for non UK countries\n if (country !== 'GB') {\n return _angular.$q.when();\n }\n\n // pxp for banner ramp in UK\n return (0, _squid.$pxp)('xo_hermes_cape_migration_UK', {\n 'ctx.COUNTRY': _squid.$locale.country,\n 'ctx.merchantID': merchantId,\n 'uid': merchantId\n }, 'xo_cape_migration_UK.*', false, true).then(function (result) {\n if (result && result.treatment_name === 'xo_cape_migration_UK_test') {\n $scope.isUKBannerEligible = true;\n }\n return _angular.$q.when();\n });\n }).then(function () {\n $scope.placementCode = '210004';\n $scope.presentation_types = ['PayPalCreditCheckout'];\n $scope.pu_type = 'PERSONAL';\n $scope.overrideLogoUrl = true;\n var morsCallFailed = false;\n var ssotCallFailed = false;\n\n /** --------------------------------------------------\n ** Populate credit offers and $scope.showBml\n ** -------------------------------------------------- */\n $scope.creditOffer = $scope.checkoutSession.creditOffer;\n $scope.creditOfferIntensity = 0;\n _logger.$logger.info('creditOffer: ' + $scope.creditOffer);\n $scope.buyerCountry = _squid.$locale.country;\n\n var isCoreSACEligible = $scope.creditOffer;\n isRedirectFromCape = $scope.creditData.isRedirectFromCape();\n\n $scope.isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n if ($scope.isBillingNoPurchase) {\n isCreditInWallet = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n isCreditInWallet = _squid.$util.find(plans, function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n\n $scope.checkIfSelectFiDisplayedBanner = function (showBanner) {\n var current = _uiRouter.$state.current;\n\n\n if (showBanner && current.name === 'checkout.selectFi') {\n _angular.$rootScope.hideBanner = true;\n } else if (_angular.$rootScope.hideBanner) {\n showBanner = false;\n }\n return showBanner;\n };\n\n // Banner for US installments and for all banners in UK\n var showBannerRules = function showBannerRules() {\n if (_squid.$locale.country === 'GB') {\n $scope.offerTypeKey = $scope.installmentOptionsPresent && !$scope.checkoutCart.isBilling() ? 'offers.bmlInstallmentTitle' : $scope.isBmlOfferSmallOrLarge(ACQ_Banner_Type);\n // FPTI tracking\n _logger.$logger.info('isUkBannerEligible ' + $scope.isUKBannerEligible);\n\n if ($scope.isUKBannerEligible && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n // UK banner eligible for credit test group\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'test_ACQUISITION'\n });\n } else if (!$scope.isUKBannerEligible && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n // UK banner eligible for credit control group (will not see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'control_ACQUISITION'\n });\n }\n\n if ($scope.checkoutCart.isBilling()) {\n return $scope.showUKBanner && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer) && !isCreditInWallet;\n } else if ($scope.showUKBanner && !isCreditInWallet && !isRedirectFromCape && (isCoreSACEligible || $scope.checkoutSession.creditInstallmentOffer)) {\n return true;\n } else {\n return false;\n }\n } else {\n return !isCreditInWallet && $scope.installmentOptionsPresent && !isRedirectFromCape;\n }\n };\n\n // Logic to determine is CYCO is shown in acquisiton and reuse\n // Warning: This value is being stored and used in other Hermes components (such as xo-review)\n var showCYCORules = function showCYCORules() {\n var commonRules = isCreditInWallet && $scope.checkoutSession.creditInstallmentOffer && $scope.installmentOptionsPresent;\n\n if (_squid.$locale.country === 'GB') {\n return $scope.showUKBanner && commonRules;\n } else {\n return commonRules;\n }\n };\n\n /**\n * This function is to determine that the offer is large offer (transaction amount >= 99) or\n * smaller (transaction amount < 99) to display appropriate text on ui\n * @returns bmlExistingSmall/LargeOffer\n */\n $scope.isBmlOfferSmallOrLarge = function (bannerType) {\n var key = void 0;\n\n if ($scope.isBmlOfferLarge()) {\n key = bannerType === ACQ_Banner_Type ? 'offers.bmlOfferLargeTitle' : 'offers.bmlExistingOfferLarge';\n } else {\n key = bannerType === ACQ_Banner_Type ? 'offers.bmlOfferSmallTitle' : 'offers.bmlExistingOfferSmall';\n }\n return key;\n };\n\n // small refactor of isBmlOfferSmallOrLarge() function\n $scope.isBmlOfferLarge = function () {\n var transactionAmount = $scope.getTransactionAmount();\n var sacEligibleAmount = _index2.$CreditOptionsModel.sacEligibleAmount[_squid.$locale.country];\n\n return transactionAmount >= sacEligibleAmount;\n };\n\n $scope.getTransactionAmount = function () {\n var transactionAmount = $scope.checkoutCart.get('purchase.amounts.total.amount');\n\n return parseFloat(transactionAmount) || 0;\n };\n\n if ($scope.buyerCountry === 'US' && $scope.creditOffer) {\n if ($scope.isBmlOfferLarge()) {\n $scope.creditOfferIntensity = 1;\n } else {\n $scope.creditOfferIntensity = 2;\n }\n $scope.installment.creditOfferIntensity = $scope.creditOfferIntensity;\n }\n\n var executeSsotCall = function executeSsotCall(silent) {\n _logger.$logger.info('executeSsotCall');\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutAppData.merchant.merchant_country === _squid.$locale.country && !$scope.isBillingNoPurchase) {\n var offers = new _index3.$CreditInstallmentOptionsModel({\n id: $scope.token,\n payee: $scope.payee,\n checkoutCart: $scope.checkoutCart,\n checkoutAppData: $scope.checkoutAppData,\n isMemberCredit: true\n });\n\n var processInstallmentResponse = function processInstallmentResponse(result) {\n $scope.installmentOptionsPresent = $scope.installment.installmentOptionsPresent = offers.getInstallmentOptionsPresent();\n $scope.installmentCount = offers.getInstallmentCount();\n $scope.creditOffers = offers.getInstallmentOffers();\n $scope.showUKBanner = _squid.$locale.country === 'GB' && ($scope.checkoutAppData.is_second_button_txn || $scope.isUKBannerEligible);\n $scope.largeOfferType = offers.getNiOfferPresent();\n\n if ($scope.buyerCountry === 'US') {\n $scope.installment.showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showBannerRules());\n $scope.installment.showWalletBanner = showBannerRules();\n } else {\n $scope.installment.showBanner = showBannerRules();\n }\n $scope.installment.showCYCO = showCYCORules();\n $scope.showCYCO = $scope.installment.showCYCO; // this is being used in the template for pink banner UK link content\n var hideSacBanner = $scope.installment.showBanner || isRedirectFromCape || _squid.$locale.country === 'GB';\n $scope.showBml = hideSacBanner ? false : isCoreSACEligible;\n\n // Logging when Both BA and EZP enabled.\n if ($scope.checkoutCart.isBilling() && $scope.installmentOptionsPresent && $scope.offerTypeKey === 'offers.bmlInstallmentTitle') {\n _logger.$logger.info('RYI SSOT call: Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found') + ' has both BA and EZP enabled');\n }\n };\n\n return offers.save({\n silent: silent,\n cache: true,\n params: {\n txnAmount: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n success: function success(result) {\n _logger.$logger.info('executeSsotCall succeeded');\n processInstallmentResponse(result);\n },\n error: function error(err) {\n _logger.$logger.error('executeSsotCall error', { error: err });\n ssotCallFailed = true;\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n return _logger.$logger.info('GET_INSTALLMENT_CONTINGENCY');\n }\n }\n });\n } else {\n return (0, _angular.$q)(function (resolve) {\n var hideSacBanner = isRedirectFromCape || _squid.$locale.country === 'GB';\n\n $scope.showBml = hideSacBanner ? false : isCoreSACEligible;\n $scope.showUKBanner = _squid.$locale.country === 'GB' && ($scope.checkoutAppData.is_second_button_txn || $scope.isUKBannerEligible);\n $scope.installment.showBanner = showBannerRules();\n\n if ($scope.checkoutCart.isBilling()) {\n _logger.$logger.info('RYI no SSOT call for this BA flow, Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found'));\n }\n resolve();\n });\n }\n };\n\n /** --------------------------------------------------\n ** Call MORS for banner\n ** -------------------------------------------------- */\n $scope.creditTerms = _squid.$config.urls.creditTerms;\n $scope.creditReuseTerms = _squid.$config.urls.creditReuseTerms;\n\n // TODO Once the Asset Lite ramp is complete, change the config credit terms urls in hermesnodeweb config.json\n $scope.creditTerms = 'https://www.paypal.com/ppclander';\n $scope.creditReuseTerms = 'https://www.paypal.com/ppclander';\n\n var mapDefaultToBanner = function mapDefaultToBanner(creditReuseTerms, creditTerms) {\n $scope.useFallbackBanner = true;\n $scope.showPassiveBanner = !isCreditInWallet;\n var creditTypeModel = getCreditType();\n\n _logger.$logger.info('mapDefaultToBanner(): creditType(' + creditTypeModel.creditType + '), resolution(' + creditTypeModel.resolution + ')');\n $scope.banner = getDefaultBanner($scope.showPassiveBanner ? BANNER_TYPES.PASSIVE : BANNER_TYPES.PROMINENT, isCreditInWallet ? USE_CASE.REUSE : USE_CASE.ACQUISITION, creditTypeModel.creditType, $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''), isCreditInWallet ? creditReuseTerms : creditTerms);\n };\n\n var mapReuseText = function mapReuseText(creditReuseTerms) {\n var creditTypeModel = getCreditType();\n\n _logger.$logger.info('mapReuseText(): creditType(' + creditTypeModel.creditType + '), resolution(' + creditTypeModel.resolution + ')');\n $scope.reuseOfferInfo = getReuseOfferInfo(creditTypeModel.creditType, creditReuseTerms, $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', ''));\n };\n\n var shouldCallMors = _squid.$locale.country === 'US' && $scope.placementCode && (\n // creditOffer checks acquisition eligibility; isCreditInWallet checks reuse\n $scope.checkoutSession.creditOffer || isCreditInWallet);\n\n // Shared function to create application context\n var getApplicationContext = function getApplicationContext() {\n return [{\n name: 'transaction_amount',\n value: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }, {\n name: 'transaction_currency',\n value: $scope.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }, {\n name: 'ppc_in_wallet',\n value: !!isCreditInWallet\n }, {\n name: 'ppc_default_fi',\n value: $scope.checkoutSession.get('plan.paypal_credit')\n }, {\n name: 'is_mobile',\n value: _index.$DeviceInfo.isDevice()\n }, {\n name: 'installments_not_allowed',\n value: !$scope.checkoutSession.creditInstallmentOffer || $scope.checkoutCart.isBilling()\n }, {\n name: 'is_ba_rt_no_purchase',\n value: $scope.checkoutCart.isBillingNoPurchase() && !$scope.checkoutCart.get('purchase.amounts.total.currency_code', '')\n }];\n };\n\n var executeMorsDiscoverMessagesCall = function executeMorsDiscoverMessagesCall(silent, useContentInBanner) {\n var morsCacheId = $scope.checkoutSession.id + '-' + $scope.placementCode + '-' + !!isCreditInWallet;\n var application_context = getApplicationContext();\n\n $scope.creditOfferModel = new _marketingoffer.$CreditOfferModel({\n id: $scope.token,\n locale: _squid.$locale,\n payer: $scope.checkoutSession.payer.id || '',\n payee: $scope.payee.merchant.id || '',\n touchpoint: 'PPC_HERMES_RYI',\n message_count: 10,\n isRamped: useContentInBanner,\n application_context: application_context\n });\n\n return $scope.creditOfferModel.save({\n silent: silent,\n cache: true,\n params: $scope.creditOfferModel.getCacheKey(),\n data: $scope.creditOfferModel.serialize(),\n success: function success(result) {\n _logger.$logger.info('discover_messages_response', result);\n var ad = {};\n var recommendationFound = false;\n\n if (result && result.touchpoint_messages) {\n $scope.recommendedMessage = {};\n var bannerContent = this.model.getBannerMessage() ? this.model.getBannerMessage().content : null;\n\n if (bannerContent) {\n recommendationFound = true;\n ad = bannerContent.json;\n\n // PresentmentStyle from Personalization Studio should be mapped to MessageType in campaign studio\n ad.MessageType = ad.PresentmentStyle;\n // OfferType from Personaliation Studio should be mapped to offertype\n ad.offertype = ad.OfferType;\n\n // Credit Incentive fields\n if (ad['Incentive-OfferProgramId']) {\n ad.incentiveOfferProgramId = ad['Incentive-OfferProgramId'];\n ad.incentiveOfferValue = ad['Incentive-OfferValue'];\n ad.incentiveOfferCurrencyCode = ad['Incentive-OfferCurrencyCode'];\n ad.incentiveOfferProgramCode = ad['Incentive-OfferProgramCode'];\n }\n\n var trackingDetails = this.model.getBannerMessage().tracking_details;\n\n if (trackingDetails) {\n ad.impressionUrl = trackingDetails.impression_url;\n ad.clickUrl = trackingDetails.click_url;\n }\n\n // Message id is used for fpti tracking.\n ad.campaignId = this.model.getBannerMessage().id;\n ad.buyItemId = ad.campaignId;\n ad.placementCode = this.model.getTouchpointCode();\n $scope.recommendedMessage = ad;\n }\n }\n\n // cache recommended message only if it's ramped\n if (useContentInBanner) {\n if (recommendationFound) {\n morsCallFailed = false;\n $scope.ad = $scope.recommendedMessage;\n _angular.$rootScope.MORS[morsCacheId] = $scope.ad;\n\n if (ad.CartAmount && ad.CartAmountCurrencyCode) {\n $scope.creditData.setCartAmountAndCurrency({\n cart_amount: ad.CartAmount,\n cart_currency: ad.CartAmountCurrencyCode\n });\n }\n\n $scope.showPassiveBanner = $scope.ad['MessageType'] !== 'Prominent';\n $scope.showIncentiveBanner = $scope.ad['incentiveOfferProgramId'] !== undefined;\n $scope.banner = _xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.mapResponseToCreditBanner($scope.ad, $scope.showPassiveBanner);\n } else {\n _logger.$logger.info('MORS_recommended_message_not_found_credit');\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_empty_message';\n }\n }\n },\n error: function error(_error) {\n _logger.$logger.error('MORS_api_failure_credit', { error: _error });\n\n // Only recognize morsCallFailed if it's ramped\n if (useContentInBanner) {\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_error_' + _error.message;\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n _logger.$logger.error('MORS_api_contingency_credit', { contingency: name });\n\n if (useContentInBanner) {\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n discoverMessageError = 'MORS_contingency_' + name;\n }\n }\n }\n });\n };\n\n var compareAdObjects = function compareAdObjects(base, compare) {\n _logger.$logger.info('Comparing ad objects', { base_ad: base, recommended_message: compare });\n var diff = [];\n var keysToIgnore = ['campaignId', 'buyItemId', 'placementCode', 'impressionUrl', 'clickUrl', 'client_elapsed', 'req_elapsed'];\n\n if (!base) {\n diff.push('base_ad is not present');\n } else if (!compare) {\n diff.push('recommended_message is not present');\n } else {\n Object.keys(base).forEach(function (key) {\n if (keysToIgnore.indexOf(key) === -1 && (!compare[key] || compare[key] !== base[key])) {\n diff.push({\n key: key,\n expected: base[key],\n actual: compare[key]\n });\n }\n });\n }\n\n if (diff.length !== 0) {\n _logger.$logger.warn('recommended_message_warning', diff);\n }\n };\n\n var executeMorsCall = function executeMorsCall(silent) {\n var morsCacheId = $scope.checkoutSession.id + '-' + $scope.placementCode + '-' + !!isCreditInWallet;\n var walletInstruments = []; // Get wallet instruments\n\n if (isCreditInWallet) {\n walletInstruments.push({\n financial_instrument_type: 'FI_PAYPAL_CREDIT',\n financial_instrument_product_type: 'PI_TYPE_CREDIT_TXN_CARD_BML',\n preferred: isCreditInWallet.isPreferred,\n out_of_wallet: false\n });\n }\n\n var marketingOfferModel = new _marketingoffer.$MarketingOfferModel(_xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.getMorsParametersForCreditBanner($scope));\n\n return marketingOfferModel.save({\n silent: silent,\n params: {\n cacheToken: morsCacheId,\n txnAmount: ($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n // Ignore all errors from this api, by passing transientError as true\n transientError: true,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('MORS_response', result);\n if (marketingOfferModel.isAdFound()) {\n $scope.ad = marketingOfferModel.getTargetAd();\n $scope.showPassiveBanner = $scope.ad['MessageType'] !== 'Prominent';\n $scope.showIncentiveBanner = $scope.ad['incentiveOfferProgramId'] !== undefined;\n $scope.banner = _xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils.mapResponseToCreditBanner($scope.ad, $scope.showPassiveBanner);\n $scope.base_ad = $scope.ad;\n _angular.$rootScope.MORS[morsCacheId] = $scope.ad;\n } else {\n _logger.$logger.info('MORS_ad_not_found_credit');\n morsCallFailed = true;\n }\n },\n error: function error(err) {\n _logger.$logger.error('MORS_api_failure_credit', { error: err });\n _angular.$rootScope.MORS[morsCacheId] = null;\n morsCallFailed = true;\n }\n });\n };\n\n var handlePersonalizationPXPResult = function handlePersonalizationPXPResult(result) {\n _angular.$rootScope.MORS = _angular.$rootScope.MORS || {};\n $scope.banner = {};\n switch (result && result.treatment_name) {\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment1':\n // Shadow only\n // 1. Call Mors search-ads & discover-messages\n // 2. Compare response from search-ads and discover-message and log warning if they differ\n // 3. Render banner with response from search-ads\n _logger.$logger.info('Personalization: Shadow only');\n return _angular.$q.all([executeMorsCall(true), executeMorsDiscoverMessagesCall(true, false)]).then(function () {\n return compareAdObjects($scope.base_ad, $scope.recommendedMessage);\n });\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment2':\n // Shadow and Ramp\n // 1. Call mors search-ads & discover-messages\n // 2. Compare response from search-ads and discover-messages and log warning if they differ\n // 3. Render banner with response from discover-messages\n _logger.$logger.info('Personalization: Shadow and Ramp');\n return _angular.$q.all([executeMorsCall(true), executeMorsDiscoverMessagesCall(true, true)]).then(function () {\n return compareAdObjects($scope.base_ad, $scope.recommendedMessage);\n });\n case 'xo_hermesnodeweb_us_ppc_personalization_treatment3':\n // Ramp only\n // 1. call mors discover-messages\n // 2. Render banner with response from discover-messages\n _logger.$logger.info('Personalization: Ramp only');\n $scope.overrideLogoUrl = false;\n return executeMorsDiscoverMessagesCall(true, true);\n default:\n // Should catch traffic on control or any unexpected treatment\n // 1. Call mors search-ads\n // 2. Render banner with response from search-ads\n return executeMorsCall(true);\n }\n };\n\n // TODO: Move PXP into contry sepefic directive during refactoring\n var runPxpExperiment = function runPxpExperiment(experimentName, pxpPattern, resultKey, handler) {\n if (_angular.$rootScope[resultKey]) {\n return handler(_angular.$rootScope[resultKey]);\n } else if (_app.$PXPBlacklist.isMerchantBlacklisted($scope.payee.merchant.id)) {\n // Skip pxp and will default to control\n return handler();\n } else {\n // Call PXP\n return (0, _squid.$pxp)(experimentName, { 'ctx.COUNTRY': _squid.$locale.country }, pxpPattern, false, true).then(function (result) {\n _angular.$rootScope[resultKey] = result;\n return handler(result);\n });\n }\n };\n\n // Don't make SSOT call if MORS is being called, unless it fails\n if (shouldCallMors) {\n return _angular.$q.when().then(function () {\n return runPxpExperiment('xo_hermesnodeweb_us_ppc_personalization', 'xo_hermesnodeweb_us_ppc_personalization.*', 'creditPersonalizationPXPResult', handlePersonalizationPXPResult);\n })['finally'](function () {\n if (morsCallFailed) {\n return executeSsotCall(true)['finally'](function () {\n if (ssotCallFailed) {\n _logger.$logger.info('SSOT call failed; cannot determine EZP');\n }\n\n mapReuseText($scope.creditReuseTerms);\n mapDefaultToBanner($scope.creditReuseTerms, $scope.creditTerms);\n });\n } else {\n // Process installment response separately\n $scope.showBml = !isRedirectFromCape && isCoreSACEligible;\n $scope.installmentOptionsPresent = $scope.installment.installmentOptionsPresent = $scope.banner.offerType === CREDIT_TYPE.EZP;\n\n var showInstBanner = $scope.installmentOptionsPresent && !isCreditInWallet && !isRedirectFromCape;\n\n $scope.installment.showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showInstBanner);\n $scope.installment.showWalletBanner = showInstBanner;\n $scope.installment.showCYCO = isCreditInWallet && $scope.checkoutSession.creditInstallmentOffer && $scope.banner.offerType === CREDIT_TYPE.EZP;\n mapReuseText($scope.creditReuseTerms);\n\n // Logging when Both BA and EZP enabled.\n if ($scope.checkoutCart.isBilling() && $scope.installmentOptionsPresent) {\n _logger.$logger.info('RYI MORS call: Merchant ' + $scope.checkoutAppData.get('merchant.brand_name', 'merchant_name_not_found') + ' has both BA and EZP enabled');\n }\n }\n });\n } else {\n return executeSsotCall(false);\n }\n }).then(function () {\n var handleInterstitialTreatment = function handleInterstitialTreatment(result) {\n var treatmentName = 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial_treatment_1';\n var treatmentVariant = 1;\n\n $scope.creditInterstitialTreatment = null;\n if (result && result.treatment_name === treatmentName) {\n $scope.creditInterstitialTreatment = treatmentVariant;\n _logger.$logger.info('Showing \"' + treatmentName + '\"');\n $scope.isRedirectingToInterstitial = true;\n showInterstitial();\n }\n _logger.$logger.info('checkout_fpti', {\n 'ppc_acq_interstitial_variant_displayed': $scope.isRedirectingToInterstitial ? treatmentVariant : 0\n });\n return result;\n };\n\n // TODO: Move into country specific directives during refactor\n var runPxpExperiment = function runPxpExperiment(experimentName, pxpPattern, resultKey, handler) {\n // US814332 HERMES-OPTIMIZE: Acquisition banner test\n if (!hideBannerForNewMember && $scope.showBml && _squid.$locale.country === 'US' && !$scope.isRedirectingToInterstitial && $scope.showPassiveBanner !== undefined && !$scope.showPassiveBanner && ($scope.creditOfferModel && $scope.creditOfferModel.isRamped || !$scope.isBillingNoPurchase)) {\n\n if (_angular.$rootScope[resultKey]) {\n return handler(_angular.$rootScope[resultKey]);\n } else if (_app.$PXPBlacklist.isMerchantBlacklisted($scope.payee.merchant.id)) {\n // skip pxp and assume control\n return handler();\n } else {\n // Call PXP\n return (0, _squid.$pxp)(experimentName, { 'ctx.COUNTRY': _squid.$locale.country }, pxpPattern, false, true).then(function (result) {\n _angular.$rootScope[resultKey] = result;\n return handler(result);\n });\n }\n }\n };\n\n $scope.isRedirectingToInterstitial = false;\n return _angular.$q.when().then(function () {\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped) {\n // This means that we're getting our content from\n // the new /message-recommendations API\n if ($scope.creditOfferModel.hasInterstitialMessage() && !isTreatmentCapped(null, CREDIT_BANNER_DISPLAY_COUNT_MAX)) {\n incrementTreatmentBannerDisplayedCount(CREDIT_BANNER_DISPLAY_COUNT_KEY);\n return runPxpExperiment('xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial', 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial.*', 'creditInterstitialPXPResult', handleInterstitialTreatment);\n }\n } else if (shouldSetInterstitial()) {\n return runPxpExperiment('xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial', 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial.*', 'creditInterstitialPXPResult', handleInterstitialTreatment);\n }\n });\n }).then(function () {\n // Add all reuse banner experience here.\n /**\n * Returns true if the buyer has a installment plan to use for this payment.\n * @returns boolean true if there is a installment plan(there can be other offers like sac with installments). false if not.\n */\n $scope.isEZP = function () {\n return CREDIT_TYPE.EZP === getCreditType().creditType;\n };\n\n /**\n * Only show PPC Reuse banner if:\n * Country is US or UK & Credit is not default AND There is credit in wallet AND pxp variant has banner\n **/\n $scope.showReuseBanner = function () {\n // FPTI tracking\n if (!$scope.fptiTrigger && _squid.$locale.country === 'GB') {\n if ($scope.showReuseBannerFlag) {\n // UK reuse banner eligible for credit test group (will see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'test_REUSE'\n });\n $scope.fptiTrigger = true;\n } else {\n // UK reuse banner eligible for credit control (will not see banner)\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': 'control_REUSE'\n });\n $scope.fptiTrigger = true;\n }\n }\n\n if (!$scope.usCreditBannerFptiFired && $scope.usReusePXPLoaded && $scope.buyerCountry === 'US') {\n $scope.usCreditBannerFptiFired = true;\n\n if ($scope.showReuseBannerFlag) {\n if ($scope.ad) {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.REUSE + '_' + $scope.ad['MessageType'] + '_MORS',\n 'caid': $scope.ad['campaignId']\n });\n _logger.$logger.info('MORS_ad_displayed_credit_' + USE_CASE.REUSE + '_' + $scope.ad['MessageType']);\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.REUSE + '_' + BANNER_TYPES.PASSIVE + '_MORSfallback'\n });\n _logger.$logger.info('MORS_fallback_ad_displayed_credit_' + USE_CASE.REUSE + '_' + BANNER_TYPES.PASSIVE);\n }\n } else {\n _logger.$logger.info('checkout_fpti', { 'banner_type': 'reuse_banner_not_shown' });\n }\n }\n return $scope.showReuseBannerFlag;\n };\n\n // The default plan is at different places in session for billing agreements without purchase and other use cases.\n // for billing agreement without purchase, it is set at futurePayment.isCreditInWallet.\n // for other usecases it is set at fundingOptions.plans.\n var isCreditInWalletForBAWithoutPurchase = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n\n // For billing agreement without purchase, show banner if the user has credit in wallet, but is not the sticky fi.\n // for others, show banner if the use has credit in wallet and the default plan is not credit.\n var creditInWalletButNotDefault = true;\n\n if ($scope.isBillingNoPurchase) {\n var stickyFi = $scope.checkoutSession.getSelectedStickyInstrument();\n\n creditInWalletButNotDefault = isCreditInWalletForBAWithoutPurchase && !(stickyFi.type === 'BILL_ME_LATER');\n } else {\n $scope.isCreditDefault = $scope.checkoutSession.get('plan.paypal_credit');\n creditInWalletButNotDefault = isCreditInWallet && !$scope.isCreditDefault;\n }\n\n $scope.showPPCLogo = true;\n // Start by saying no to banner and update to true when necessary.\n $scope.showReuseBannerFlag = false;\n // This is used by reuse usecase as well as acq usecase.\n $scope.installment.showCreditExample = $scope.showUKBanner && (creditInWalletButNotDefault || $scope.installment.showBanner || $scope.creditOffer);\n\n // Early exits for use cases where re-use banners are not applicable.\n // We only show reuse banners to GB and US users today.\n if (_squid.$locale.country !== 'GB' && _squid.$locale.country !== 'US') {\n return _angular.$q.when();\n }\n\n // We do not show banners for new members\n if (hideBannerForNewMember) {\n return _angular.$q.when();\n }\n\n if (_squid.$locale.country === 'GB') {\n if (($scope.showUKBanner && !isRedirectFromCape || $scope.checkoutCart.isBillingNoPurchase()) && creditInWalletButNotDefault) {\n $scope.reuseOfferTypeKey = $scope.installmentOptionsPresent && !$scope.checkoutCart.isBilling() ? 'offers.bmlExistingOfferInstallment' : $scope.isBmlOfferSmallOrLarge();\n $scope.showReuseBannerFlag = true;\n } else {\n $scope.showReuseBannerFlag = false;\n }\n return _angular.$q.when();\n } else if (_squid.$locale.country === 'US') {\n var showBanner = false;\n\n if (creditInWalletButNotDefault && !(isRedirectFromCape && isCreditInWallet)) {\n showBanner = true;\n }\n\n showBanner = $scope.checkIfSelectFiDisplayedBanner(showBanner);\n if (showBanner === true) {\n // pxp for banner ramp in US\n return (0, _squid.$pxp)('xo_hermesnodeweb_us_ryi_ppc_reuse_banner', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_us_ryi_ppc_reuse_banner.*', false, true).then(function (result) {\n $scope.usReusePXPLoaded = true;\n if (result && result.treatment_name === 'xo_hermesnodeweb_us_ryi_ppc_reuse_banner_none') {\n $scope.showReuseBannerFlag = false;\n } else {\n $scope.showReuseBannerFlag = true;\n }\n return _angular.$q.when();\n });\n } else {\n $scope.showReuseBannerFlag = false;\n return _angular.$q.when();\n }\n }\n }).then(function () {\n $scope.selectExistingBml = function () {\n if ($scope.ad) {\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.clickUrl);\n }\n\n if ($scope.isBillingNoPurchase) {\n var fpList = $scope.checkoutSession.get('futurePaymentInstruments');\n var bml = fpList.find(function (fp) {\n return fp.type === 'BILL_ME_LATER';\n });\n\n return $scope.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: bml.instrument_id\n },\n success: function success() {\n $scope.showReuseBannerFlag = false;\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n var fiList = $scope.checkoutSession.get('fundingOptions.instruments');\n var fundingSource = _squid.$util.find(fiList, function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n\n return $scope.checkoutSession.fundingOptions.action('select', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: fundingSource.planId\n },\n success: function success(result) {\n $scope.showReuseBannerFlag = false;\n // Update selectedmethod if provided, to reflect in multipleFi on RYI choice variant\n if ($scope.selectedmethod) {\n $scope.selectedmethod.index = 0;\n $scope.selectedmethod.planId = $scope.checkoutSession.get('plan.sources')[0].id;\n }\n\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n $scope.checkoutSession.installments = result.installments;\n }\n if (fundingSource.type === 'CREDIT' && $scope.installment.showCYCO) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n if (!fundingSource.selected) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n if ($scope.checkoutSession.selectedInstallmentData && !$scope.checkoutSession.selectedInstallmentData.preventChange) {\n // Resetting selected installment data, if installment change is not explicitly prohibited.\n $scope.checkoutSession.selectedInstallmentData = undefined;\n }\n }\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n }\n };\n\n $scope.getBmlOfferTitle = function (suffix, data) {\n if ($scope.creditOfferIntensity === 1) {\n return $scope.htmlContent('offers.bmlOfferLargeTitle' + suffix, data);\n } else if ($scope.creditOfferIntensity === 2) {\n return $scope.htmlContent('offers.bmlOfferSmallTitle' + suffix, data);\n } else {\n return '';\n }\n };\n\n if ($scope.buyerCountry === 'US') {\n $scope.bmlOfferTitle = $scope.getTransactionAmount() === 0 ? $scope.htmlContent('offers.bmlOfferTitleWithAmountZero') : $scope.getBmlOfferTitle('WithAmount', {\n cartAmount: $scope.checkoutCart.get('purchase.amounts.total.amount_formatted', '')\n });\n\n // US766704: for use in xo-wallet\n $scope.installment.bmlOfferTitle = $scope.bmlOfferTitle;\n }\n\n $scope.showAcquisitionBanner = function () {\n var showBanner = void 0;\n\n showBanner = $scope.showBml && $scope.buyerCountry !== 'GB';\n\n // Combine acquisition banner and installment banner logic\n // TODO: Refactor all of this after control is removed - there needs to be clear separation between\n // countries, and installment acquisition banner logic should be in this function\n showBanner = showBanner || $scope.installment.showBanner;\n showBanner = hideBannerForNewMember ? false : $scope.checkIfSelectFiDisplayedBanner(showBanner);\n\n if ($scope.installment.showPPCAcquisitionRadioButton && !$scope.radio) {\n showBanner = false;\n }\n\n if (!$scope.usCreditBannerFptiFired && showBanner && $scope.banner && $scope.buyerCountry === 'US') {\n $scope.usCreditBannerFptiFired = true;\n\n if ($scope.ad) {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.ACQUISITION + '_' + $scope.ad['MessageType'] + '_MORS',\n 'caid': $scope.ad['campaignId']\n });\n _logger.$logger.info('MORS_ad_displayed_credit_' + USE_CASE.ACQUISITION + '_' + $scope.ad['MessageType']);\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'banner_type': USE_CASE.ACQUISITION + '_' + BANNER_TYPES.PASSIVE + '_MORSfallback'\n });\n _logger.$logger.info('MORS_fallback_ad_displayed_credit_' + USE_CASE.ACQUISITION + '_' + BANNER_TYPES.PASSIVE);\n }\n }\n\n return showBanner;\n };\n\n $scope.bml = function () {\n if ($scope.ad) {\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.clickUrl);\n }\n\n if ($scope.installment.showBanner && $scope.installmentOptionsPresent) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n _uiRouter.$state.go('checkout.redirectToCape');\n }\n };\n }).then(function () {\n // we only show the xo-offer-top-banner in certain scenarios\n // based on pxp: xo_hermesnodeweb_us_ryi_ppc_ppcacquisitionbanner_v2\n if (!$scope.fptiCreditBannerTrigger && $scope.buyerCountry === 'US' && ($scope.showReuseBanner() || $scope.showAcquisitionBanner())) {\n\n $scope.fptiCreditBannerTrigger = true;\n var isBalanceCoveringPurchase = false;\n\n if (!$scope.isBillingNoPurchase) {\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n\n isBalanceCoveringPurchase = _squid.$util.find(plans, function (fi) {\n return fi && fi.primaryFs && !fi.secondaryFIs && fi.primaryFs.name === 'BALANCE';\n });\n }\n\n var fundingInstruments = void 0;\n\n if ($scope.isBillingNoPurchase) {\n fundingInstruments = $scope.checkoutSession.get('futurePaymentInstruments');\n } else {\n fundingInstruments = $scope.checkoutSession.get('fundingOptions.instruments');\n }\n // here we are calculating the number of FIs that are applicable for this transaction.\n // Balance counts as a standalone FI only if it covers the full txn amount.\n var fiApplicableForThisTransaction = 0;\n\n if (fundingInstruments && fundingInstruments.length > 0) {\n fundingInstruments.forEach(function (fundingOption, index) {\n if (fundingOption.type !== 'BALANCE' || isBalanceCoveringPurchase) {\n fiApplicableForThisTransaction++;\n }\n });\n }\n var userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && $scope.checkoutCart.get('purchase.items.length', 0) <= 0;\n\n (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id'), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n if ($scope.creditOfferModel && $scope.creditOfferModel.isRamped) {\n var BannerMessage = Object.assign({}, $scope.recommendedMessage, { CartAmountVisible: showAmount }, { NumberOfFIs: fiApplicableForThisTransaction });\n\n _logger.$logger.info('checkout_fpti', buildCreditOfferFptiObject(BannerMessage));\n _logger.$logger.createCalRootTxn(buildPSMonitoringObject(BannerMessage, 'Banner', discoverMessageError), 'hermes_personalization');\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'cart_show_amt': showAmount,\n 'funding_options_instruments': fiApplicableForThisTransaction\n });\n }\n });\n }\n }).then(function () {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T3' });\n });\n };\n\n renderBanner();\n $scope.$watch('checkoutCart.grossTotalAmount', function () {\n var newVal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var oldVal = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!newVal.value || !oldVal.value || !newVal.currency || !oldVal.currency) {\n return;\n }\n\n var hasNewValue = newVal.value !== oldVal.value;\n var hasNewCurrency = newVal.currency !== oldVal.currency;\n\n if (hasNewValue || hasNewCurrency) {\n return renderBanner();\n }\n }, true);\n }]\n };\n});\n\n_uiRouter.$state;\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$DeviceInfo;\n\n_xoMORSCreditBannerUtils.$xoMORSCreditBannerUtils;\n\n_app.$PXPBlacklist;\n\n_auth.$AuthModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CreditOptionsModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index2.$CheckoutSessionModel;\n\n_pxp.$pxpCartAmt;\n\n_marketingoffer.$MarketingOfferModel;\n\n_marketingoffer.$CreditOfferModel;\n\n_marketingoffer.$fireMORSBeacon;\n\n_index3.$CreditInstallmentModel;\n\n_index3.$CreditDataModel;\n\n_index3.$CreditInstallmentOptionsModel;\n\n_xoCreditBannerConstants.COUNTRY_CODE;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/offer/directive.js\n// module id = ../node_modules/xo-credit-components/src/offer/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n\\n \\n\\n
    \\n \\n \\n {{reuseOfferInfo.termsLinkText}}\\n \\n \\n \\n \\n
    \\n\\n
    \\n\\n \\n\\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n \\n
    \\n
    \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n\\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n\\n \\n \\n \\n \\n
    \\n\\n

    \\n

    \\n

    \\n \\n \\n

    \\n
    \\n
    \\n\\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n \\n \\n \\\"{{htmlContent('paymentMethod.billmelater')}}\\\"\\n \\n \\n \\n \\n
    \\n

    \\n

    \\n \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n\\n
    \\n \\n
    \\n\\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/offer/template.html\n// module id = ../node_modules/xo-credit-components/src/offer/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCreditExampleUkDirective', {\n tag: 'xo-credit-example-uk',\n template: _template2['default']\n});\n\n\n_squid.$Component;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js\n// module id = ../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n

    {{content('chooseCreditOption.representativeEx')}}

    \\n

    {{content('chooseCreditOption.representativeExHeader')}}

    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    {{content('chooseCreditOption.purchaseRate')}}{{content('chooseCreditOption.purchaseRateValue')}}
    {{content('chooseCreditOption.representativeAPR')}}{{content('chooseCreditOption.representativeAPRValue')}}
    {{content('chooseCreditOption.exCreditLimit')}}{{content('chooseCreditOption.exCreditLimitValue')}}
    \\n

    {{content('chooseCreditOption.terms')}}

    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html\n// module id = ../node_modules/xo-credit-components/src/offer/xo-credit-example-uk/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoPayWithCredit', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n token: '=?',\n doneFn: '=?'\n },\n controller: ['$scope', function ($scope) {\n var stateName = 'gce_pay_with_credit';\n\n (0, _squid.$populate)($scope, {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance($scope.token)\n }).then(function () {\n // For US and GB if txn amount is >= 99 or 150 resp show pay with credit option if credit in\n // wallet and is not the current funding option\n\n // required to avoid looging every digest cycle.\n // TODO: remove this when debounce is fixed for logger\n var offerShown = false;\n\n $scope.showPayWithCredit = function () {\n if (!$scope.checkoutCart.get('purchase.amounts.total.amount')) {\n offerShown = false;\n return false;\n }\n\n var amount = parseFloat($scope.checkoutCart.purchase.amounts.total.amount);\n var minAmount = _angular.$window.config.minCreditAmtNoInterest[_squid.$locale.country];\n var hasCredit = $scope.checkoutSession.fundingOptions.hasCredit();\n var fundingSource = $scope.checkoutSession.plan.sources;\n var showOffer = _squid.$config.features.DEFAULT.showPayWithCreditOffer && !$scope.checkoutSession.plccOffer;\n\n if (showOffer && minAmount && amount >= minAmount && hasCredit) {\n for (var i in fundingSource) {\n if (fundingSource[i].type === 'BILL_ME_LATER') {\n offerShown = false;\n return false;\n }\n }\n if (!offerShown) {\n _logger.$logger.info(stateName + '_offer_shown');\n }\n offerShown = true;\n return true;\n }\n offerShown = false;\n return false;\n };\n\n $scope.onSubmit = function () {\n _logger.$logger.info(stateName + '_offer_clicked');\n $scope.checkoutSession.message = null;\n\n var instruments = $scope.checkoutSession && $scope.checkoutSession.fundingOptions && $scope.checkoutSession.fundingOptions.instruments;\n var creditPlanId = void 0;\n\n for (var i in instruments) {\n if (instruments[i].type === 'CREDIT' && instruments[i].name === 'BILL_ME_LATER') {\n creditPlanId = instruments[i].planId;\n }\n }\n\n if (!creditPlanId) {\n _logger.$logger.info(stateName + '_credit_planid_not_found');\n return;\n }\n\n return $scope.checkoutSession.fundingOptions.action('select', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: creditPlanId\n },\n success: function success() {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _logger.$logger.info(stateName + '_success');\n }\n });\n };\n });\n }]\n };\n});\n\n_angular.$window;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutSessionModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/pay-with-credit/directive.js\n// module id = ../node_modules/xo-credit-components/src/pay-with-credit/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n

    {{ content('memberReview.switchToBml') }}

    \\n \\n
    \\n {{ content('common.select') }}\\n
    \\n
    \\t\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/pay-with-credit/template.html\n// module id = ../node_modules/xo-credit-components/src/pay-with-credit/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCreditOffer = undefined;\n\nvar _index = require('squid/index');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nvar _index3 = require('xo-models/src/credit/index');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _xoCreditBannerUtils = require('../lib/xo-credit-banner-utils');\n\nrequire('./gb-banner/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCreditOffer = exports.$xoCreditOffer = _index.$Component.extend('$xoCreditOfferBannersDirective', {\n tag: 'xo-credit-offer-banners',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve(),\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n checkoutCart: _index2.$CheckoutCartModel.instance(this.props.token).retrieve(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(this.props.token).retrieve(),\n payee: _index2.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n creditData: _index3.$CreditDataModel.instance(this.props.token),\n creditSharedInfo: _index3.$CreditSharedInfoModel.instance()\n };\n }\n },\n lifecycle: {\n enter: function enter() {},\n populate: function populate() {\n var self = this;\n self.buyerCountry = _index.$locale.country;\n self.showCreditBanner = false;\n\n // Don't show credit banner if it's redirected from CAPE\n if (self.models.creditData && self.models.creditData.isRedirectedFromCape) {\n return;\n }\n\n var isBillingNoPurchase = self.models.checkoutCart.isBillingNoPurchase();\n var isCreditSelected = _xoCreditBannerUtils.$xoCreditBannerUtils.isCreditSelected(self.models.checkoutSession, isBillingNoPurchase);\n // FI count is used in FPTI logs after calling MORS/DiscoverMessage for both US and UK\n self.models.creditSharedInfo.setFiCount(_xoCreditBannerUtils.$xoCreditBannerUtils.getFiCount(self.models.checkoutSession, isBillingNoPurchase));\n\n if (!isCreditSelected) {\n // only show credit banner when PPC is not selected/no PPC\n self.showCreditBanner = true;\n // show UK credit example whenever we show credit banner\n self.models.creditSharedInfo.setShowCreditExample(true);\n }\n }\n }\n});\n\nangular.value(\"$xoCreditOffer\", $xoCreditOffer);\n_index.$Component;\n\n_index.$locale;\n\n_index2.$CheckoutSessionModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index3.$CreditSharedInfoModel;\n\n_index3.$CreditDataModel;\n\n_auth.$AuthModel;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js\n// module id = ../node_modules/xo-credit-components/src/xo-credit-offer-banners/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.gbPersonalizationTreatmentMapping = exports.bannerTypes = exports.gbContentKeys = undefined;\n\nvar _personalizationManager = require('../../lib/personalizationManager');\n\nvar gbContentKeys = exports.gbContentKeys = {\n reuse: {\n installment: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferInstallment',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n ni: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferLarge',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n core: {\n ctaText: 'offers.select',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlExistingOfferTitle',\n bodyText2: 'offers.bmlExistingOfferSmall',\n termsLink: 'https://www.paypal.com/ppclander'\n }\n },\n acq: {\n installment: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlInstallmentTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n ni: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlOfferLargeTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n },\n core: {\n ctaText: 'offers.bmlOfferBtn',\n logo: 'https://www.paypalobjects.com/webstatic/credit/img/pp_credit_logo_white@2x.png',\n bodyText: 'offers.bmlOfferSmallTitle',\n bodyText2: '',\n termsLink: 'https://www.paypal.com/ppclander'\n }\n }\n};\n\nvar bannerTypes = exports.bannerTypes = {\n 'ACQ': 'ACQ',\n 'REUSE': 'REUSE',\n 'NONE': 'NONE'\n};\n\nvar gbPersonalizationTreatmentMapping = exports.gbPersonalizationTreatmentMapping = {\n 'xo_hermesnodeweb_gb_ppc_personalization_treatment1': _personalizationManager.PERSONALIZATION_PHASES.SHADOW,\n 'xo_hermesnodeweb_gb_ppc_personalization_treatment2': _personalizationManager.PERSONALIZATION_PHASES.RAMP,\n 'xo_hermesnodeweb_gb_ppc_personalization_control': _personalizationManager.PERSONALIZATION_PHASES.CONTROL\n};\n\n_personalizationManager.PERSONALIZATION_PHASES;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js\n// module id = ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/constants.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCreditOfferGBBanner = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/credit/index');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _xoCreditBannerUtils = require('../../lib/xo-credit-banner-utils');\n\nvar _xoCreditBannerConstants = require('../../lib/xo-credit-banner-constants');\n\nvar _personalizationManager = require('../../lib/personalizationManager');\n\nvar _pxp = require('xo-page-components/src/cart/lib/pxp');\n\nvar _constants = require('./constants');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCreditOfferGBBanner = exports.$xoCreditOfferGBBanner = _squid.$Component.extend('$xoCreditOfferGBBanner', {\n tag: 'xo-credit-offer-gb-banners',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _index.$CheckoutCartModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n payee: _index.$CheckoutPayeeModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n creditData: _index2.$CreditDataModel.instance(this.props.token),\n creditSharedInfo: _index2.$CreditSharedInfoModel.instance()\n };\n },\n experiments: function experiments(resolvers) {\n return resolvers.models.then(function (models) {\n var userAction = models.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && models.checkoutCart.get('purchase.items.length', 0) <= 0;\n return {\n gb_personalization: (0, _squid.$pxp)('xo_hermesnodeweb_gb_ppc_personalization', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_gb_ppc_personalization_.*').then(function (result) {\n var treatment_name = result && result.treatment_name;\n _logger.$logger.info('checkout_fpti', { 'xo_hermesnodeweb_gb_ppc_personalization': treatment_name || 'xo_hermesnodeweb_gb_ppc_personalization_control' });\n return _constants.gbPersonalizationTreatmentMapping[treatment_name];\n }),\n showCartAmount: (0, _pxp.$pxpCartAmt)(models.checkoutAppData.get('merchant.merchant_country'), models.payee.get('merchant.id'), noLineItemDetails, models.checkoutCart.isPurchase()).then(function (showAmount) {\n models.creditSharedInfo.setCartAmountVisible(showAmount);\n })\n };\n });\n }\n },\n actions: {\n selectExistingBml: function selectExistingBml() {\n // This is called on UI when user clicks on \"Select\" link in reuse banner\n // might be sharable between country flows\n _logger.$logger.info('Select existing BML');\n var self = this;\n if (self.models.checkoutCart.isBillingNoPurchase()) {\n // if this is a BA-NOP transaction, set sticky FI and go to review page\n var fpList = self.models.checkoutSession.get('futurePaymentInstruments');\n var ppc = fpList.find(function (fp) {\n return fp.type === 'BILL_ME_LATER';\n });\n this.models.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: ppc.instrument_id\n },\n success: function success(result) {\n self.showReuseBannerFlag = false;\n self.models.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n _uiRouter.$state.go('checkout.review');\n }\n });\n } else {\n // Anything other than BA-NOP, we set fundingOption for this transaction and go to the next page\n var _fpList = self.models.checkoutSession.get('fundingOptions.instruments');\n var fundingSource = _fpList.find(function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n\n self.models.checkoutSession.fundingOptions.action('select', {\n resultModel: self.models.checkoutSession,\n data: {\n planId: fundingSource.planId\n },\n success: function success(result) {\n // Do not show PPC banner after user selected PPC\n self.showReuseBanner = false;\n\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n self.models.checkoutSession.installments = result.installments;\n }\n\n // If selected fundingSource is CREDIT and there's installment offers present, we go to CYCO\n if (fundingSource.type === 'CREDIT' && self.models.creditSharedInfo.hasInstallmentOffers()) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n // otherwise, we go to review page\n if (!fundingSource.selected) {\n self.models.checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n if (self.models.checkoutSession.selectedInstallmentData && !self.models.checkoutSession.selectedInstallmentData.preventChange) {\n // Resetting selected installment data, if installment change is not explicitly prohibited.\n self.models.checkoutSession.selectedInstallmentData = undefined;\n }\n }\n _uiRouter.$state.go('checkout.review');\n }\n }\n });\n }\n },\n selectAcqBml: function selectAcqBml() {\n // this is called on UI when user clicks on \"Apply\" link in ACQ banner\n // if installment offers are present, go CYCO.\n // otherwise, go CAPE\n if (this.models.creditSharedInfo.hasInstallmentOffers()) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n _uiRouter.$state.go('checkout.redirectToCape');\n }\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var self = this;\n\n var isBillingNoPurchase = self.models.checkoutCart.isBillingNoPurchase();\n var isReuse = _xoCreditBannerUtils.$xoCreditBannerUtils.isCreditInWallet(self.models.checkoutSession, isBillingNoPurchase);\n var contentKeys = isReuse ? _constants.gbContentKeys.reuse : _constants.gbContentKeys.acq;\n\n self.displayBannerType = undefined;\n // putting bannerTypes into scope so we can use bannerTypes.REUSE or bannerTypes.ACQ in template.html\n self.bannerTypes = _constants.bannerTypes;\n\n (0, _personalizationManager.personalizationManager)(self.experiments.gb_personalization, self.props.token, self.models, contentKeys).then(function (banner) {\n if (banner) {\n // use whatever banner returned from personalizationManager\n self.banner = banner;\n\n // stick cartAmount and cartCurrency into creditData so it's passed to CAPE\n if (banner.cartAmount && banner.cartCurrency) {\n self.models.creditData.setCartAmountAndCurrency({\n cart_amount: banner.cartAmount,\n cart_currency: banner.cartCurrency\n });\n }\n // Send FPTI log if the banner is from personalization studio and it's not already sent\n if (banner.messageId.startsWith(_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX) && !_this.models.creditSharedInfo.getMorsFptiFiredFlag()) {\n _logger.$logger.info('checkout_fpti', _xoCreditBannerUtils.$xoCreditBannerUtils.buildCreditOfferFptiObject(_this.props.token, banner));\n _this.models.creditSharedInfo.setMorsFptiFiredFlag(true);\n }\n\n if (isReuse) {\n self.displayBannerType = _constants.bannerTypes.REUSE;\n } else {\n self.displayBannerType = _constants.bannerTypes.ACQ;\n }\n } else {\n // Address US1226993. But need to be tested\n self.displayBannerType = _constants.bannerTypes.NONE;\n }\n });\n }\n }\n});\n\nangular.value(\"$xoCreditOfferGBBanner\", $xoCreditOfferGBBanner);\n_angular.noop;\n\n_logger.$logger;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index2.$CreditSharedInfoModel;\n\n_index2.$CreditDataModel;\n\n_auth.$AuthModel;\n\n_xoCreditBannerUtils.$xoCreditBannerUtils;\n\n_xoCreditBannerConstants.PERSONALIZATION_MESSAGE_PREFIX;\n\n_personalizationManager.personalizationManager;\n\n_pxp.$pxpCartAmt;\n\n_constants.bannerTypes;\n\n_constants.gbContentKeys;\n\n_constants.gbPersonalizationTreatmentMapping;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js\n// module id = ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/directive.js\n// module chunks = main-code-split","module.exports = \"\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html\n// module id = ../node_modules/xo-credit-components/src/xo-credit-offer-banners/gb-banner/template.html\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html\n// module id = ../node_modules/xo-credit-components/src/xo-credit-offer-banners/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoOfferTopBanner', {\n tag: 'xo-offer-top-banner',\n template: _template2['default'],\n controller: ['$scope', function ($scope) {\n $scope.isTopBannerVisible = false;\n $scope.offerTopBanner = {};\n\n // this data comes from an $emit() call in:\n // xo-credit-components/src/offer/directive.js\n var unbind = _angular.$rootScope.$on('setOfferTopBanner', function (event, data) {\n $scope.offerTopBanner = data;\n $scope.isTopBannerVisible = true;\n });\n\n $scope.$on('$destroy', unbind);\n }]\n});\n\n\n_squid.$Component;\n\n_angular.$rootScope;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js\n// module id = ../node_modules/xo-credit-components/src/xo-offer-top-banner/directive.js\n// module chunks = main-code-split","module.exports = \"\\n
    \\n \\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n \\n
    \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html\n// module id = ../node_modules/xo-credit-components/src/xo-offer-top-banner/template.html\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _logger = require('xo-beaver/dist/logger');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$DeviceInfo', function () {\n var userAgent = _angular.$window.navigator.userAgent;\n var standalone = _angular.$window.navigator.standalone;\n var DEVICE_PATTERN = /iPod|iPhone|iPad|Android|BlackBerry|BB10|Palm|CriOS|IEMobile|Windows Phone OS|webOS|Symbian|silk|Kindle|Opera Mini|mobile/i;\n var TABLET_PATTERN = /ip(a|ro)d|silk|xoom|playbook|tablet|kindle|Nexus 7|GT-P10|SC-01C|SHW-M180S|SM-T320|SGH-T849|SCH-I800|SHW-M180L|SPH-P100|SGH-I987|zt180|HTC( Flyer|_Flyer)|Sprint ATP51|ViewPad7|pandigital(sprnova|nova)|Ideos S7|Dell Streak 7|Advent Vega|A101IT|A70BHT|MID7015|Next2|nook|FOLIO|MB511.*RUTEM|Mac OS.*Silk/i;\n var IOS_PATTERN = /iP(hone|od|ad)/i;\n\n function getIntegrationContext(integrationKey) {\n // additonal context sent via partners in regards to integration\n var integrationContext = _squid.$meta.integrationCTX || {};\n\n return integrationContext[integrationKey];\n }\n\n // Supports iOS and Android. Updated / more accurate method of detecting webviews\n function isWebView() {\n var logEnabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n var ua = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : userAgent;\n\n var ios = /iphone|ipod|ipad/i.test(ua);\n var android = /Android/i.test(ua);\n\n if (ios) {\n // Unfortunately no perfectly reliable way, this will detect some 3rd party browsers as ui webview\n // Major browsers: chrome, safari, firefox, uc browser, puffin, are detected reliably.\n var ios_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua);\n\n if (!standalone && ios_uiwebview && !isSafariViewController()) {\n // uiwebview\n logWebView('iOS');\n return true;\n }\n } else if (android) {\n // not iOS, Android platform handling\n // Whitelist for x-requested-with header values for web view detection\n var allowedXRequestedWithRegexMap = {\n ajax: /XMLHttpRequest/i,\n baiduBrowser: /com.baidu.browser.inter/i,\n operaMini: /com.opera.mini.native/i,\n maxthon: /com.mx.browser/i,\n litterPenguinBrowser: /com.explore.web.browser/i\n };\n var xRequestedWithHeaderVal = _squid.$meta.requestHeaders['x-requested-with'];\n\n if (xRequestedWithHeaderVal) {\n // check if x-requested-with header val is in whitelist\n for (var key in allowedXRequestedWithRegexMap) {\n if (allowedXRequestedWithRegexMap.hasOwnProperty(key)) {\n if (allowedXRequestedWithRegexMap[key].test(xRequestedWithHeaderVal)) {\n return false;\n }\n }\n }\n logWebView('Android');\n return true;\n }\n }\n\n return false;\n\n function logWebView(device) {\n if (!logEnabled) {\n return;\n }\n // cal log\n _logger.$logger.info('WebView :: ' + device);\n }\n }\n\n /**\n * Check if the given the user-agent string is belongs to a device.\n */\n function isDevice() {\n if (_angular2['default'].isString(userAgent)) {\n return DEVICE_PATTERN.test(userAgent) || TABLET_PATTERN.test(userAgent);\n }\n\n return false;\n }\n\n /**\n * Check if the given the user-agent string is belongs to a tablet.\n */\n function isTablet() {\n if (_angular2['default'].isString(userAgent)) {\n return TABLET_PATTERN.test(userAgent);\n }\n\n return false;\n }\n\n /**\n * Check if the given the user-agent string is belongs to a mobile\n */\n function isMobile() {\n return isDevice(userAgent) && !isTablet(userAgent);\n }\n\n /**\n * Get the mobile platform value given the user-agent string.\n */\n function getDevicePlatform() {\n if (_angular2['default'].isString(userAgent)) {\n var matched = userAgent.match(/iPod|iPhone|iPad|Android|BlackBerry|Windows Phone OS|webOS|Symbian|mobile/g);\n\n if (matched && matched.length > 0) {\n return matched[0];\n }\n }\n }\n\n /**\n * Check if the give user agent is from an app.\n */\n function isApp(uaString) {\n userAgent = uaString || userAgent;\n\n if (DEVICE_PATTERN.test(userAgent) || TABLET_PATTERN.test(userAgent)) {\n if (getDevicePlatform(userAgent) === 'Android') {\n return (/Version\\/\\d.\\d/i.test(userAgent)\n );\n }\n\n return (/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)|PLAYSTATION|iPadApp/i.test(userAgent)\n );\n }\n\n return false;\n }\n\n function isSafariViewController() {\n if (getIntegrationContext('brainTreeIntegration') === 'SFVC') {\n return true;\n }\n if (_angular2['default'].isString(userAgent)) {\n var ios = /iphone|ipod|ipad/i.test(userAgent);\n\n return ios && _angular.$window.indexedDB && isApp();\n } else {\n return false;\n }\n }\n\n /**\n * Get the device capabilities\n */\n function getCapabilities() {\n var capabilities = {};\n var device = DEVICE_PATTERN.test(userAgent);\n var tablet = TABLET_PATTERN.test(userAgent);\n var app = isApp(userAgent);\n\n if (_angular2['default'].isString(userAgent)) {\n capabilities.isWireless = device || tablet;\n capabilities.isTablet = tablet;\n capabilities.isMobile = device && !tablet;\n capabilities.isDesktop = !device;\n capabilities.isApp = app;\n }\n return capabilities;\n }\n\n /**\n * Get various AppIntegrationType\n */\n function getAppIntegrationType() {\n var app_int_type = void 0;\n\n if (isDevice()) {\n if (isApp()) {\n if (isSafariViewController()) {\n app_int_type = 'SFVC';\n } else {\n app_int_type = 'WebView';\n }\n } else {\n app_int_type = 'Browser';\n }\n }\n return app_int_type;\n }\n\n function isSafariiOSBrowserView() {\n var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : userAgent;\n\n var ios = IOS_PATTERN.test(ua);\n var safari = /safari/i.test(ua);\n var isIOSApp = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ua);\n var isChromeOnIOS = /(.*?CriOS)/i.test(ua);\n var isFirefoxOnIOS = /(.*?FxiOS)/i.test(ua);\n var isSafariBrowserOnly = safari && !isChromeOnIOS && !isFirefoxOnIOS;\n\n return ios && !standalone && isSafariBrowserOnly && !isIOSApp;\n }\n\n function getiOSVersion() {\n var ua = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : userAgent;\n\n var ios = IOS_PATTERN.test(ua);\n\n if (ios) {\n var version = ua.match(/OS (\\d+)_(\\d+)/);\n return [parseInt(version[1], 10), parseInt(version[2], 10)];\n }\n return false;\n }\n\n return {\n isDevice: isDevice,\n isTablet: isTablet,\n isMobile: isMobile,\n isApp: isApp,\n isSafariViewController: isSafariViewController,\n getCapabilities: getCapabilities,\n getAppIntegrationType: getAppIntegrationType,\n isWebView: isWebView,\n isSafariiOSBrowserView: isSafariiOSBrowserView,\n getiOSVersion: getiOSVersion\n };\n});\n\n_squid.$meta;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-device-info/dist/index.js\n// module id = ../node_modules/xo-device-info/dist/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.VALID_DIRECTION = undefined;\n\nvar _squid = require('squid');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar VALID_DIRECTION = exports.VALID_DIRECTION = ['top', 'bottom'];\nvar isValidDirection = function isValidDirection(n) {\n return VALID_DIRECTION.includes(n);\n};\n\n\nangular.module().directive('xoLanguageOptions', function () {\n return {\n template: _template2['default'],\n\n scope: {\n direction: '@?'\n },\n\n controller: ['$scope', function ($scope) {\n $scope.direction = isValidDirection($scope.direction) ? $scope.direction : 'bottom';\n $scope.showLanguages = false;\n\n function setLanguageVars() {\n $scope.localeModel = _squid.$locale;\n $scope.currentLanguage = $scope.localeModel.lang;\n $scope.currentCountry = $scope.localeModel.country;\n $scope.languageList = $scope.localeModel.metadata.languageLabel;\n $scope.supportedLanguages = _squid.$config.supportedCountries[$scope.currentCountry];\n $scope.hasMultipleLanguages = $scope.supportedLanguages && $scope.supportedLanguages.length > 1 ? true : false;\n }\n\n $scope.selectLanguage = function (language) {\n $scope.currentLanguage = language;\n _squid.$locale.chooseLang(language);\n };\n\n $scope.toggle = function ($event) {\n if ($event) {\n $event.preventDefault();\n }\n\n $scope.showLanguages = !$scope.showLanguages;\n };\n\n setLanguageVars();\n\n // Reset locale properties for languageToggle\n $scope.$on('localeChange', function () {\n setLanguageVars();\n });\n\n // \"clickBody\" is an artifical event broadcast by the xo-checkout component (essentially document.click)\n $scope.$on('clickBody', function ($event, target) {\n if ($(target).parents('.languageToggleDisplay div').length === 0) {\n $scope.showLanguages = false;\n $scope.$apply();\n }\n });\n }]\n };\n});\n\n_squid.$config;\n\n_squid.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-form-components/src/language-options/directive.js\n// module id = ../node_modules/xo-form-components/src/language-options/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-form-components/src/language-options/template.html\n// module id = ../node_modules/xo-form-components/src/language-options/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/shippingMethod/index');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nrequire('xo-ui-components/src/modal/directive');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('xo-page-components/src/cart/lib/ui');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Import the decodeEntities angular filter\n\nvar callbackShippingOptions = void 0,\n fallbackShippingOptions = void 0,\n callbackInsuranceOffered = void 0;\nvar defaultFallbackOptionIndex = void 0;\n\nexports['default'] = _squid.$Component.extend('$xoSelectShippingMethod', {\n tag: 'xo-select-shipping-method',\n template: _template2['default'],\n\n props: {\n token: {\n type: 'var',\n required: false\n },\n showShippingAddress: {\n type: 'var',\n required: false\n },\n errorHandlerHelper: {\n type: 'var',\n required: false\n },\n instantUpdateFeature: {\n type: 'var',\n required: false\n }\n },\n\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n checkoutCart: _index2.$CheckoutCartModel.instance(this.props.token).retrieve(),\n checkoutPayee: _index2.$CheckoutPayeeModel.instance(this.props.token).retrieve(),\n checkoutShippingAddresses: _index2.$CheckoutShippingAddressesModel.instance(this.props.token).retrieve(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(this.props.token).retrieve()\n };\n }\n },\n\n actions: {\n closeModal: function closeModal() {\n this.showModal = false;\n },\n openModal: function openModal() {\n this.showModal = true;\n },\n continueHandler: function continueHandler() {\n\n /**\n * Function responsible to patch Cart for\n * 1. Buyer select's a new shipping method.\n * 2. Buyer chooses to opt for insurance or chooses not to.\n */\n if (this.selectedMethod.current.index !== this.selectedMethod.previous.index || this.selectedMethod.current.insuranceSelected !== this.selectedMethod.previous.insuranceSelected) {\n\n var selectedMethodCharges = void 0,\n taxAmtApplied = void 0,\n insurance = void 0;\n selectedMethodCharges = this.response.charges[this.selectedMethod.current.index];\n taxAmtApplied = this.getTax(selectedMethodCharges);\n insurance = this.getInsurance(selectedMethodCharges);\n this.shippingAmtApplied = this.safeConvert(selectedMethodCharges.shipping_charge.shipping_amount.value);\n if (this.isInstantUpdateFlow) {\n this.selectedMethod.showInsuranceAmount = this.selectedMethod.current.insuranceSelected;\n this.insuranceApplied = insurance;\n this.updateSelectedExternalCallbackOption(this.response.shipping_options_source, this.selectedMethod.previous.index, this.selectedMethod.current.index);\n this.selectedMethod.previous.insuranceSelected = this.selectedMethod.current.insuranceSelected;\n }\n this.updateShippingTaxCharge(this.shippingAmtApplied, taxAmtApplied, selectedMethodCharges.shipping_charge.shipping_method_type, insurance);\n this.selectedShippingMethod = selectedMethodCharges.shipping_charge.shipping_method;\n this.selectedMethod.previous.index = this.selectedMethod.current.index;\n }\n\n this.actions.closeModal();\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.selectedMethod = {\n current: {\n index: 0,\n insuranceSelected: false\n },\n previous: {\n index: 0,\n insuranceSelected: false\n },\n insuranceAvailable: false,\n showInsuranceAmount: false\n };\n\n // Initialization\n this.showModal = false;\n this.shippingInfoDisplay = 'noHighlight';\n this.addressChanged = false;\n\n var timer = void 0;\n this.previousCosts = {};\n\n // Function used to format amount based on currency code\n this.formatAmount = function (amount) {\n if (amount && amount.value) {\n var amountToBeFormatted = (parseInt(amount.value.toString(), 10) / 100).toFixed(2);\n if (amountToBeFormatted) {\n return (0, _squid.formatCurrency)(amountToBeFormatted, _this.currencyCode);\n }\n }\n };\n\n this.uncheckInsuranceCheckbox = function () {\n _this.selectedMethod.current.insuranceSelected = false;\n };\n\n this.showInsurance = function (selectedIndex) {\n return Number(_this.selectedMethod.current.index) === selectedIndex;\n };\n\n // Function to check if is insurance is offered for a shipping charge\n this.isInsuranceOfferedInCharge = function (charge) {\n return charge.shipping_charge.offer_insurance_option;\n };\n\n var responseHasShippingCharges = function responseHasShippingCharges() {\n if (_this.response.charges.length === 0) {\n return false;\n }\n return !!_this.response.charges[0].shipping_charge;\n };\n\n var responseHasTaxCharges = function responseHasTaxCharges() {\n if (_this.response.charges.length === 0) {\n return false;\n }\n return !!_this.response.charges[0].tax;\n };\n\n this.safeConvert = function (value) {\n value = Number(value);\n if (isNaN(value)) {\n throw new Error(value + ' cannot be divided');\n }\n return value / 100;\n };\n\n /*\n This function is responsible to update the previously selected external callback option to newly selected one.\n */\n this.updateSelectedExternalCallbackOption = function (optionsSource, prevIndex, index) {\n if (optionsSource === 'CALLBACK' && callbackShippingOptions) {\n if (!isNaN(prevIndex)) {\n callbackShippingOptions[prevIndex].is_selected = false;\n }\n callbackShippingOptions[index].is_selected = true;\n } else if (optionsSource === 'FALLBACK' && fallbackShippingOptions) {\n if (!isNaN(prevIndex)) {\n fallbackShippingOptions[prevIndex].is_selected = false;\n }\n fallbackShippingOptions[index].is_selected = true;\n }\n };\n\n var highlight = function highlight(duration) {\n _this.shippingInfoDisplay = 'highlight';\n if (timer) {\n _angular.$timeout.cancel(timer);\n }\n timer = (0, _angular.$timeout)(function () {\n _this.shippingInfoDisplay = 'noHighlight';\n }, duration);\n };\n\n this.getTax = function (charge) {\n var tax = void 0;\n if (!_this.isInstantUpdateFlow && (_this.isBuyNow || _this.isCartUpload) && _this.cartAmounts.taxAmt >= 0) {\n tax = _this.cartAmounts.taxAmt;\n }\n // tax calculation\n else {\n charge = charge || responseHasTaxCharges() && _this.response.charges[0];\n if (charge && charge.tax && charge.tax.total_tax) {\n tax = _this.safeConvert(charge.tax.total_tax.value);\n }\n }\n return tax;\n };\n\n /**\n * Function to return the insurance from shipping charge.\n * 1. By default return insurance amount from the charge.\n * 2. In case insurance is offered and is not chosen , do not return the insurance amount.\n * @param charge - shipping charge\n * @param index - index of the shipping charge\n */\n this.getInsurance = function (charge) {\n if (charge && charge.shipping_charge && charge.shipping_charge.insurance_amount) {\n if (charge.shipping_charge.offer_insurance_option && !_this.selectedMethod.current.insuranceSelected) {\n return;\n }\n return _this.safeConvert(charge.shipping_charge.insurance_amount.value);\n }\n };\n\n var updatePreviousCosts = function updatePreviousCosts() {\n _this.previousCosts = {};\n if (_this.models.checkoutCart.purchase.amounts.shipping) {\n _this.previousCosts.shippingAmount = _this.models.checkoutCart.purchase.amounts.shipping.amount;\n }\n if (_this.models.checkoutCart.purchase.amounts.tax) {\n _this.previousCosts.taxAmount = _this.models.checkoutCart.purchase.amounts.tax.amount;\n }\n };\n\n var hasShippingCostChanged = function hasShippingCostChanged(newShipping) {\n if (newShipping !== undefined) {\n return newShipping.amount !== _this.previousCosts.shippingAmount;\n }\n return newShipping !== _this.previousCosts.shippingAmount;\n };\n\n var hasTaxCostChanged = function hasTaxCostChanged(newTax) {\n if (newTax !== undefined) {\n return newTax.amount !== _this.previousCosts.taxAmount;\n }\n return newTax !== _this.previousCosts.taxAmount;\n };\n\n var setToolTipMessage = function setToolTipMessage() {\n _this.models.checkoutSession.message.msgKeys = hasShippingCostChanged(_this.models.checkoutCart.purchase.amounts.shipping) || hasTaxCostChanged(_this.models.checkoutCart.purchase.amounts.tax) ? ['smallToolTip.addressShippingChargesUpdated'] : ['smallToolTip.onlyAddressUpdated'];\n };\n\n var addExternalCallBackOptionsToPatchRequest = function addExternalCallBackOptionsToPatchRequest(patchEntities) {\n var externalCallbackOptions = _this.models.checkoutCart.purchaseUnits[0].external_callback_options;\n\n if (_this.response.shipping_options_source === 'CALLBACK') {\n externalCallbackOptions.callback_shipping_options = callbackShippingOptions;\n externalCallbackOptions.callback_insurance_option_offered = callbackInsuranceOffered;\n } else if (_this.response.shipping_options_source === 'FALLBACK') {\n externalCallbackOptions.fallback_shipping_options = fallbackShippingOptions;\n\n // if callback shipping option failed, delete it as fallback is default now\n // use case , say if buyer changes shipping address multiple times and the first attempt callback success\n // and second attempt callback failed, as patchCart of first attempt updated checkout session we may endup in having\n // both callback and fallback shipping option , and only one if possible (useful) from checkout session\n // delete the callback as it is not always source of shipping charge\n delete externalCallbackOptions.callback_shipping_options;\n }\n\n patchEntities.push({\n field: 'externalCallbackOptions',\n value: externalCallbackOptions\n });\n };\n\n var populatePatchShippingDetails = function populatePatchShippingDetails(patchEntities, shipMethod) {\n if (_this.isInstantUpdateFlow) {\n addExternalCallBackOptionsToPatchRequest(patchEntities);\n } else {\n patchEntities.push({\n field: 'shippingMethod',\n value: shipMethod ? _this.shippingMethods.getShippingMethodId(shipMethod) : ''\n });\n }\n };\n\n var populatePatchAmountDetails = function populatePatchAmountDetails(patchableAmountEntities, constantAmountEntities, decimalDigits, amounts) {\n var newTotal = _this.cartAmounts.total;\n Object.keys(patchableAmountEntities).forEach(function (key) {\n var detail = patchableAmountEntities[key];\n if (!isNaN(detail.value)) {\n detail.value = Number(detail.value);\n amounts.details[key] = detail.value.toFixed(decimalDigits);\n } else {\n detail.value = 0;\n }\n newTotal += detail.valueInCart ? detail.value - detail.valueInCart : detail.value;\n });\n amounts.total = newTotal.toFixed(decimalDigits);\n Object.keys(constantAmountEntities).forEach(function (key) {\n var detail = constantAmountEntities[key];\n if (detail.valueInCart !== undefined) {\n amounts.details[key] = detail.valueInCart.toFixed(decimalDigits);\n }\n });\n };\n\n // Generates the request body to be used for patch Cart\n var getPatchReqData = function getPatchReqData(shippingAmt, taxAmt, shipMethod, insuranceAmt) {\n // 1. amount values in the cart,\n // 2. shipping method (only in case of non instant update flows)\n // 3. external_callback_options (only in case of instant update flows)\n\n var currencyDigits = _squid.$locale.metadata && _squid.$locale.metadata.currency && _squid.$locale.metadata.currency.digits;\n var decimalDigits = currencyDigits && currencyDigits[_this.currencyCode];\n if (isNaN(decimalDigits)) {\n decimalDigits = 2;\n }\n var patchEntities = [];\n var amounts = {\n 'currency': _this.currencyCode,\n 'details': {\n 'subtotal': _this.cartAmounts.subTotal.toFixed(decimalDigits)\n }\n };\n var patchableAmountEntities = {\n shipping: {\n value: shippingAmt,\n valueInCart: _this.cartAmounts.shippingAmt\n },\n tax: {\n value: taxAmt,\n valueInCart: _this.cartAmounts.taxAmt\n },\n insurance: {\n value: insuranceAmt,\n valueInCart: _this.cartAmounts.insuranceAmt\n }\n };\n\n // amount details which are not affected by SnT response,\n // but still need to get included in the patch request if initially present\n var constantAmountEntities = {\n handling_fee: {\n valueInCart: _this.cartAmounts.handlingAmt\n },\n shipping_discount: {\n valueInCart: _this.cartAmounts.shippingDiscountAmt\n },\n discount: {\n valueInCart: _this.cartAmounts.discountAmt\n }\n };\n populatePatchAmountDetails(patchableAmountEntities, constantAmountEntities, decimalDigits, amounts);\n\n patchEntities.push({\n field: 'purchaseAmount',\n value: amounts\n });\n\n populatePatchShippingDetails(patchEntities, shipMethod);\n\n return {\n id: _this.token,\n patchEntities: patchEntities\n };\n };\n\n this.updateShippingTaxCharge = function (shippingAmt, taxAmt, shipMethod, insurance) {\n _this.models.checkoutCart.action('patchCartData', {\n data: getPatchReqData(shippingAmt, taxAmt, shipMethod, insurance),\n success: function success(result) {\n _this.models.checkoutSession.invalidate();\n (0, _squid.$populate)(_this, {\n checkoutSession: _index2.$CheckoutSessionModel.instance(_this.token)\n }).then(function () {\n // update checkout cart model with item information\n // this is for displaying additional item information in cart\n // any modification here need check in xo-page-component-> cart directive also\n _this.models.checkoutCart.get('purchase.items', []).forEach(function addDetails(item) {\n item.details = {};\n\n if (item.quantity > 1) {\n item.details.price = item.price.amount;\n item.details.quantity = (0, _squid.formatQuantity)(item.quantity);\n }\n\n if (item.description) {\n if (!item.name) {\n item.name = item.description;\n } else {\n item.details.description = item.description;\n }\n }\n\n // move options to detail section\n if (item.item_option_selections) {\n item.details.hasSelections = true;\n item.details.item_option_selections = item.item_option_selections;\n }\n\n if (item.sku) {\n item.details.sku = item.sku;\n }\n\n item.hasDetails = Object.keys(item.details).length > 0;\n item.details.hasMore = item.hasDetails || item.details.hasSelections;\n });\n }).then(function () {\n highlight(4000);\n if (_this.addressChanged) {\n setToolTipMessage();\n _this.addressChanged = false;\n }\n updatePreviousCosts();\n });\n }\n });\n };\n\n var populateCallbackShippingOptions = function populateCallbackShippingOptions() {\n var charges = _this.response && _this.response.charges;\n if (charges) {\n callbackShippingOptions = charges.map(function (charge, index) {\n var shippingCharge = charge.shipping_charge;\n var taxCharge = charge.tax;\n var option = {};\n if (shippingCharge) {\n option = {\n method: shippingCharge.shipping_method,\n amount: {\n value: _this.safeConvert(shippingCharge.shipping_amount.value),\n currency: shippingCharge.shipping_amount.currency_code\n },\n is_default: shippingCharge.default_method,\n is_selected: false\n };\n if (shippingCharge.insurance_amount) {\n option.insurance = {\n value: _this.safeConvert(shippingCharge.insurance_amount.value),\n currency: shippingCharge.insurance_amount.currency_code\n };\n callbackInsuranceOffered = shippingCharge.offer_insurance_option;\n }\n if (taxCharge) {\n option.tax = {\n value: _this.safeConvert(taxCharge.total_tax.value),\n currency: taxCharge.total_tax.currency_code\n };\n }\n }\n return option;\n });\n }\n };\n\n var setDefaultShippingMethod = function setDefaultShippingMethod() {\n _this.showShippingOptions = true;\n var chargesElement = void 0,\n methodType = void 0,\n taxAmtApplied = void 0,\n insurance = void 0;\n for (var i = 0; i < _this.response.charges.length; i++) {\n chargesElement = _this.response.charges[i];\n if (chargesElement.shipping_charge.default_method) {\n _this.selectedMethod.current.index = i;\n _this.selectedMethod.previous.index = i;\n insurance = _this.getInsurance(chargesElement);\n if (_this.isInstantUpdateFlow) {\n _this.updateSelectedExternalCallbackOption(_this.response.shipping_options_source, _this.selectedMethod.previous.index, _this.selectedMethod.current.index);\n }\n _this.selectedShippingMethod = chargesElement.shipping_charge.shipping_method;\n methodType = chargesElement.shipping_charge.shipping_method_type;\n _this.shippingAmtApplied = _this.safeConvert(chargesElement.shipping_charge.shipping_amount.value);\n\n taxAmtApplied = _this.getTax(chargesElement);\n\n insurance = _this.getInsurance(chargesElement);\n\n break;\n }\n }\n _this.updateShippingTaxCharge(_this.shippingAmtApplied, taxAmtApplied, methodType, insurance);\n };\n\n var isPatchCartRequired = function isPatchCartRequired(applicableShippingAmt, applicableTaxAmt) {\n return applicableShippingAmt !== _this.previousCosts.shippingAmount || applicableTaxAmt !== _this.previousCosts.taxAmount;\n };\n\n // Find the charges of the default option and patch cart with corresponding values.\n var updateShippingTaxChargeWithDefaultOption = function updateShippingTaxChargeWithDefaultOption() {\n var defaultOption = void 0,\n shippingAmt = void 0,\n taxAmt = void 0,\n insuranceAmt = void 0,\n methodType = void 0;\n if (_this.response.shipping_options_source === 'FALLBACK' && !isNaN(defaultFallbackOptionIndex)) {\n defaultOption = fallbackShippingOptions[defaultFallbackOptionIndex];\n }\n if (defaultOption) {\n shippingAmt = defaultOption.amount && defaultOption.amount.value;\n taxAmt = defaultOption.tax && defaultOption.tax.value;\n insuranceAmt = defaultOption.insurance && defaultOption.insurance.value;\n methodType = defaultOption.shipping_method_type || 'DEFAULT';\n }\n _this.updateShippingTaxCharge(shippingAmt, taxAmt, methodType, insuranceAmt);\n };\n\n /**\n Function to enable the link to select insurance's by the user if offered in charges\n */\n var enableUserToChooseInsuranceOptionsIfAvailable = function enableUserToChooseInsuranceOptionsIfAvailable() {\n var charges = _this.response && _this.response.charges;\n if (!charges) {\n return;\n }\n for (var i = 0; i < charges.length; i++) {\n if (_this.isInsuranceOfferedInCharge(charges[i])) {\n _this.selectedMethod.insuranceAvailable = true;\n _this.selectedMethod.showInsuranceAmount = false;\n break;\n }\n }\n };\n\n /* Function which is responsible to process shipping tax response\n Use cases\n ---------\n 1. (i) WPS: If response has shipping charges and shipping options are to be shown, set default shipping method else patch cart\n with shipping amount returned.\n (ii)Instant Update: If the shipping region is unsupported, display error message. Otherwise the above behavior applies.\n 2. If no_shipping = 1\n (i) WPS: If profile_override = true , apply shipping from button if it is not empty.\n (ii) Instant Update: Do not display the shipping options. Apply the default fallback(or callback) shipping option charges.\n 3. Apply tax if applicable.\n */\n var processShippingAndTaxResponse = function processShippingAndTaxResponse() {\n\n var applicableShippingAmt = void 0,\n applicableTaxAmt = void 0;\n\n if (_this.isInstantUpdateFlow) {\n if (!_this.response.shipping_region_supported) {\n _this.errorHandlerHelper.addPageError('shippingMethod.shippingRegionUnsupported', { merchant: _this.nonEmptyMerchantDisplayName });\n _this.instantUpdateFeature.shippingRegionSupported = false;\n }\n\n if (_this.response.shipping_options_source === 'CALLBACK') {\n populateCallbackShippingOptions();\n }\n\n enableUserToChooseInsuranceOptionsIfAvailable();\n\n // no_shipping = 0\n if (_this.showShippingAddress) {\n if (responseHasShippingCharges()) {\n setDefaultShippingMethod();\n }\n }\n // no_shipping=1 in case of instant update api , hide the overlay, shipping and tax from default fallback or callback options should be applied\n else {\n _this.showShippingOptions = false;\n updateShippingTaxChargeWithDefaultOption();\n }\n return;\n }\n\n // shipping calculation\n if (_this.showShippingAddress) {\n if (responseHasShippingCharges()) {\n if (_this.response.show_shipping_options) {\n setDefaultShippingMethod(); // setDefaultShippingMethod takes care of both shipping and tax\n return;\n } else if (_this.response.charges[0].shipping_charge.shipping_amount) {\n // if no shipping options , try to get the shipping amount if returned from SNTService\n applicableShippingAmt = _this.safeConvert(_this.response.charges[0].shipping_charge.shipping_amount.value);\n }\n }\n }\n // when not instant update flow , no_shipping is 1, shipping is applied only when override is true and shipping is passed in button\n else if (_this.response.profile_override_allowed) {\n if (_this.cartAmounts.shippingAmt !== undefined) {\n applicableShippingAmt = _this.cartAmounts.shippingAmt;\n }\n }\n\n applicableTaxAmt = _this.getTax();\n\n if (isPatchCartRequired(applicableShippingAmt, applicableTaxAmt)) {\n _this.updateShippingTaxCharge(applicableShippingAmt, applicableTaxAmt);\n }\n };\n\n var clearFallbackOptionsSelectionFlags = function clearFallbackOptionsSelectionFlags() {\n for (var i = 0; i < fallbackShippingOptions.length; i++) {\n fallbackShippingOptions[i].is_selected = false;\n }\n };\n\n this.getShippingMethods = function () {\n _this.showShippingOptions = false;\n _this.selectedShippingMethod = '';\n _this.shippingAmtApplied = 0;\n _this.insuranceAmountOffered = 0;\n _this.response = {};\n\n // when no_shipping = 1, checkoutSession,shipping is undefined. Primary address is considered for SnT as per legacy\n var shippingAddress = _this.models.checkoutSession.shipping ? _this.models.checkoutSession.getShippingAddressMinimalDetails() : _this.models.checkoutShippingAddresses.getPrimaryShippingAddress();\n\n var sntRequest = {\n 'address': shippingAddress,\n 'cart_weight': _this.cartWeight,\n 'cart_handling': { value: _this.cartAmounts.handlingAmt, currency_code: _this.currencyCode },\n 'discount': _this.cartDiscount,\n 'item_list': _this.models.checkoutCart.purchase.items,\n 'tax_on_shipping_required': _this.showShippingAddress, // tax on shipping is not applicable when no_shipping is 1\n 'merchant_id': _this.models.checkoutPayee.merchant.id,\n 'locale': _squid.$locale.content.lang + '_' + _squid.$locale.chosenCountry,\n 'currency_code': _this.currencyCode,\n 'id': _this.token\n };\n\n if (_this.isInstantUpdateFlow) {\n _this.selectedMethod = {\n current: {\n index: 0,\n insuranceSelected: false\n },\n previous: {\n index: 0,\n insuranceSelected: false\n },\n insuranceAvailable: false,\n showInsuranceAmount: false\n };\n callbackShippingOptions = [];\n callbackInsuranceOffered = false;\n clearFallbackOptionsSelectionFlags();\n _this.instantUpdateFeature.shippingRegionSupported = true;\n _this.errorHandlerHelper.clearPageErrors();\n\n if (_this.models.checkoutCart.purchaseUnits && _this.models.checkoutCart.purchaseUnits[0]) {\n sntRequest.external_callback_options = _this.models.checkoutCart.purchaseUnits[0].external_callback_options;\n }\n }\n\n _this.shippingMethods = new _index.$ShippingMethodModel(sntRequest);\n\n _logger.$logger.info('calculate_shipping_charges_call');\n _this.shippingMethods.save({\n data: _this.shippingMethods,\n success: function success(result) {\n _this.response = result;\n processShippingAndTaxResponse();\n }\n });\n };\n },\n populate: function populate() {\n var _this2 = this;\n\n var set = function set(key, value) {\n if (value) {\n _this2.cartAmounts[key] = Number(value.amount);\n }\n };\n\n function hasAddressChanged(newValue, oldValue, isInstantUpdateFlow) {\n // only these values determine if the shiptax service needs to be called again\n var countryZipStateCityChanged = newValue.country !== oldValue.country || newValue.state !== oldValue.state || newValue.city !== oldValue.city || newValue.postal_code !== oldValue.postal_code;\n\n if (!countryZipStateCityChanged && isInstantUpdateFlow) {\n // For instant update flow any change of address variable must trigger a call to shiptax\n var anyAddressFieldChanged = newValue.line1 !== oldValue.line1 || newValue.line2 !== oldValue.line2;\n return anyAddressFieldChanged;\n }\n\n return countryZipStateCityChanged;\n }\n\n this.currencyCode = this.models.checkoutCart.purchase.amounts.total.currency_code;\n\n var appDataFlags = this.models.checkoutAppData && this.models.checkoutAppData.flags;\n\n // We need merchantDisplayName to be non empty and if merchant_name or brand_name is undefined\n // then we need the value of merchantDisplayName to be 'The merchant' as it is the first word\n // in page level error below (look for place where nonEmptyMerchantDisplayName var is used)\n this.nonEmptyMerchantDisplayName = this.models.checkoutAppData && this.models.checkoutAppData.getMerchantDisplayName({\n nonEmptyReturnValue: true,\n isSentenceBeginning: true\n });\n\n this.isBuyNow = appDataFlags && appDataFlags.is_buy_now_flow;\n\n this.isCartUpload = appDataFlags && appDataFlags.is_cart_upload_flow;\n\n this.isInstantUpdateFlow = this.models.checkoutCart && this.models.checkoutCart.instantUpdateIntegration;\n\n if (this.isInstantUpdateFlow) {\n fallbackShippingOptions = this.models.checkoutCart.purchaseUnits[0].external_callback_options.fallback_shipping_options;\n if (fallbackShippingOptions) {\n defaultFallbackOptionIndex = _squid.$util.findIndex(fallbackShippingOptions, function (option) {\n return option.is_default;\n });\n }\n }\n\n this.cartAmounts = {};\n set('shippingAmt', this.models.checkoutCart.purchase.amounts.shipping);\n set('taxAmt', this.models.checkoutCart.purchase.amounts.tax);\n set('subTotal', this.models.checkoutCart.purchase.amounts.subtotal);\n set('total', this.models.checkoutCart.purchase.amounts.total);\n set('handlingAmt', this.models.checkoutCart.purchase.amounts.handling_fee);\n set('insuranceAmt', this.models.checkoutCart.purchase.amounts.insurance);\n set('shippingDiscountAmt', this.models.checkoutCart.purchase.amounts.shipping_discount);\n set('discountAmt', this.models.checkoutCart.purchase.amounts.discount);\n this.previousCosts = {\n shippingAmount: this.models.checkoutCart.purchase.amounts.shipping ? Number(this.models.checkoutCart.purchase.amounts.shipping.amount) : undefined,\n taxAmount: this.models.checkoutCart.purchase.amounts.tax ? Number(this.models.checkoutCart.purchase.amounts.tax.amount) : undefined\n };\n\n if (this.models.checkoutCart.cartWeight) {\n this.cartWeight = {};\n if (this.models.checkoutCart.cartWeight.value) {\n this.cartWeight.value = Number(this.models.checkoutCart.cartWeight.value).toFixed(2);\n }\n this.cartWeight.unit = this.models.checkoutCart.cartWeight.unit;\n }\n\n if (this.models.checkoutCart.purchase.amounts.discount) {\n this.cartDiscount = {\n value: Number(this.models.checkoutCart.purchase.amounts.discount.amount).toFixed(2),\n currency_code: this.currencyCode\n };\n }\n\n if (this.showShippingAddress) {\n this.$watch('this.models.checkoutSession.shipping', function (newValue, oldValue) {\n if (hasAddressChanged(newValue, oldValue, _this2.isInstantUpdateFlow)) {\n _this2.addressChanged = true;\n _this2.getShippingMethods();\n }\n });\n }\n this.getShippingMethods();\n }\n }\n});\n\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.formatCurrency;\n\n_squid.formatQuantity;\n\n_index.$ShippingMethodModel;\n\n_index2.$CheckoutSessionModel;\n\n_index2.$CheckoutPayeeModel;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutShippingAddressesModel;\n\n_index2.$CheckoutAppDataModel;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-form-components/src/select-shipping-method/directive.js\n// module id = ../node_modules/xo-form-components/src/select-shipping-method/directive.js\n// module chunks = main-code-split","module.exports = \"\\n
    \\n
    \\n
    \\n
    {{ content('shippingMethod.shipTo') }}
    \\n
    {{ content('shippingMethod.storeLocation') }}
    \\n

    {{ content('shippingMethod.storeLocationInfo') }}

    \\n
    \\n
    \\n
    \\n {{ content('shippingMethod.shipping') }}:\\n \\n \\n {{selectedShippingMethod | decodeEntities}} - \\n \\n \\n \\n
    \\n
    \\n {{ content('shippingMethod.shippingInsurance') }}:\\n \\n \\n {{ content('shippingMethod.insuranceNoneSelected')}}\\n \\n \\n \\n \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n {{ content('shippingMethod.selectMethod') }}\\n {{ content('shippingMethod.merchantOptions') }}\\n
    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-form-components/src/select-shipping-method/template.html\n// module id = ../node_modules/xo-form-components/src/select-shipping-method/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nrequire('./styles');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar CONTENT_KEY_MAP = {\n ADD_CARD: {\n benefitsKey: 'passwordRecovery.stepUpBenefits',\n reasonKey: 'passwordRecovery.stepUpAddCard'\n },\n ADD_SHIPPING: {\n benefitsKey: 'passwordRecovery.stepUpBenefits',\n reasonKey: 'passwordRecovery.stepUpAddShipping'\n },\n APPLY_PPC: {\n benefitsKey: 'passwordRecovery.stepUpApplyPPCBenefits',\n reasonKey: 'passwordRecovery.stepUpApplyPPC'\n },\n GENERIC: {\n benefitsKey: 'passwordRecovery.stepUpGenericBenefits',\n reasonKey: 'passwordRecovery.stepUpGeneric'\n },\n NEW_PHONE: {\n reasonKey: 'passwordRecovery.stepUpNewPhone'\n },\n NEED_US_ADDRESS: {\n reasonKey: 'passwordRecovery.stepUpNeedUSAddress'\n },\n CARD_EXPIRED: {\n reasonKey: 'passwordRecovery.stepUpCardExpired'\n },\n MERCHANT_NOT_ACCEPT_AMEX: {\n reasonKey: 'passwordRecovery.stepUpMerchantNotAcceptAmex'\n },\n NEED_CREDIT_CARD: {\n reasonKey: 'passwordRecovery.stepUpContigencyAddCard'\n },\n PAYER_AUTHENTICATION_REQUIRED: {\n reasonKey: 'passwordRecovery.stepUpNewAddress'\n },\n BILLING_AGREEMENTS: {\n reasonKey: 'passwordRecovery.stepUpBillingAgreements'\n },\n GENERIC_CONTINGENCY: {\n reasonKey: 'passwordRecovery.stepUpContigencyGeneric'\n }\n};\n\nexports['default'] = _squid.$Component.extend('$xoPasswordRecoveryLandingDirective', {\n tag: 'xo-create-password',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n onContinue: {\n type: 'var',\n required: false\n },\n onCancel: {\n type: 'var',\n required: false\n },\n reason: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.contingencyName = this.reason && _squid.$util.camelToCapsUnderscore(this.reason) || 'GENERIC';\n this.getReasonKey = function () {\n return (CONTENT_KEY_MAP[_this.contingencyName] || CONTENT_KEY_MAP['GENERIC']).reasonKey;\n };\n\n this.getBenefitsKey = function () {\n return (CONTENT_KEY_MAP[_this.contingencyName] || CONTENT_KEY_MAP['GENERIC']).benefitsKey;\n };\n this.onSubmit = function () {\n _logger.$logger.info('checkout_fpti', {\n from: 'quick_security_check',\n to: 'process_quick_security_check'\n });\n _this.onContinue();\n };\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.$util;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/create-password/directive.js\n// module id = ../node_modules/xo-login-components/src/create-password/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    {{content('passwordRecovery.quickSecurityCheck')}}
    \\n\\n
    {{content(getReasonKey())}}
    \\n\\n
    {{content(getBenefitsKey())}}
    \\n\\n \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/create-password/template.html\n// module id = ../node_modules/xo-login-components/src/create-password/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _utils = require('./utils');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-dolphin',\n template: _template2['default'],\n hasUserClosedTheBanner: false,\n isPhoneConfirmed: false,\n // prevent iframe timer from executing overlay has loaded in any scenario (error or success)\n hasOverlayLoaded: false,\n isTimerRunning: false,\n timerDuration: 10000,\n actions: {\n startTimer: function startTimer() {\n var _this = this;\n\n _logger.$logger.info('xoDolphin_startTimer');\n // Set a 10 second timer to check if UL has loaded or not\n this.isTimerRunning = true;\n (0, _angular.$timeout)(function () {\n if (!_this.hasOverlayLoaded && _this.isTimerRunning) {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_timeout',\n 'context_id': _angular.$rootScope.token\n });\n _this.isTimerRunning = false;\n }\n }, this.timerDuration);\n },\n closeBanner: function closeBanner() {\n this.showBanner = false;\n this.hasUserClosedTheBanner = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'close_banner',\n 'context_id': _angular.$rootScope.token\n });\n },\n openOverlay: function openOverlay() {\n var _this2 = this;\n\n this.showOverlay = true;\n var onPostMessagesHandler = function onPostMessagesHandler(postMessage) {\n if (!angular.isObject(postMessage)) {\n try {\n postMessage = JSON.parse(postMessage);\n } catch (e) {\n _logger.$logger.info('xoDolphin_jsonParseFailed');\n }\n }\n\n if (!postMessage || !postMessage.data || !postMessage.data.event) {\n _logger.$logger.info('xoDolphin_invalidPostMessage');\n return;\n }\n\n if (postMessage.data.event === 'phoneConfirmationLoaded') {\n _this2.hasOverlayLoaded = true;\n _angular.$rootScope.$emit('loaded');\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_loaded',\n 'context_id': _angular.$rootScope.token\n });\n }\n\n if (postMessage.data.event === 'phoneConfirmationCompleted') {\n _this2.isPhoneConfirmed = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'successfully_confirmed',\n 'context_id': _angular.$rootScope.token\n });\n _this2.actions.closeOverlay();\n }\n\n if (postMessage.data.event === 'phoneConfirmationError') {\n _this2.hasOverlayLoaded = true;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'generic_error',\n 'context_id': _angular.$rootScope.token\n });\n _this2.actions.closeOverlay();\n }\n\n if (postMessage.data.event === 'notNowClicked') {\n _this2.hasOverlayLoaded = true;\n _this2.actions.closeOverlay();\n }\n };\n (0, _angular.$timeout)(function () {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'show_overlay',\n 'context_id': _angular.$rootScope.token\n });\n\n _this2.$element.addClass('overlayOpen').promise().then(function () {\n // Note: A second timeout is added here to avoid a race condition where the DOM is not yet available\n // for the inject script to pick a targetElement for injecting the iframe.\n (0, _angular.$timeout)(function () {\n var variant = _this2.toastParams && _this2.toastParams.variant;\n var options = (0, _utils.getInjectULBaseObject)(variant);\n options.onPostMessage = onPostMessagesHandler;\n if (!options.targetElement) {\n _logger.$logger.info('xoDolphin_missingTargetElement');\n }\n if (window.PAYPAL && window.PAYPAL.unifiedLogin && options.targetElement) {\n _logger.$logger.info('xoDolphin_injectIframe');\n window.PAYPAL.unifiedLogin.inject(options);\n _this2.actions.startTimer();\n }\n });\n });\n });\n },\n closeOverlay: function closeOverlay() {\n var _this3 = this;\n\n this.$element.removeClass('overlayOpen');\n this.isTimerRunning = false;\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'overlay_closed',\n 'context_id': _angular.$rootScope.token\n });\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('xoDolphin_hideOverlay');\n _this3.showOverlay = false;\n _this3.hasOverlayLoaded = false;\n }, 300);\n }\n },\n lifecycle: {\n enter: function enter() {\n var ulToast = _squid.$util.param('ulToast') || _squid.$util.param('ulToastWpsDone');\n this.toastParams = ulToast && _utils.variantParams[ulToast];\n },\n populate: function populate() {\n var _this4 = this;\n\n if (!this.toastParams) {\n _logger.$logger.info('Missing or invalid toast param!');\n return;\n }\n\n this.showBanner = !this.toastParams.autoTriggeredOverlay;\n this.bannerContent = this.toastParams.messageKey;\n this.successContent = this.toastParams.successKey;\n this.autoTriggeredOverlay = this.toastParams.autoTriggeredOverlay;\n this.variant = this.toastParams.variant;\n // DeviceInfo doesnt seem to have isDesktop, hence just avoiding the mobile use case\n this.fixedBanner = _index.$DeviceInfo.isMobile() ? '' : 'dolphinBannerFixed';\n\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': this.toastParams.transitionName,\n 'banner_type': this.toastParams.bannerType,\n 'context_id': _angular.$rootScope.token\n });\n\n // Cannot use `$apply` as we need to wait for the entire digest cycle to complete\n (0, _angular.$timeout)(function () {\n if (_this4.autoTriggeredOverlay) {\n _this4.actions.openOverlay();\n }\n angular.element('#confirmPhoneBtn').on('click', function () {\n _logger.$logger.info(_utils.flowName, {\n 'from': 'show_banner',\n 'to': 'click_link',\n 'context_id': _angular.$rootScope.token\n });\n _this4.actions.openOverlay();\n });\n // Add a delay to open the overlay when it's A) auto trigger and B) Not WPS\n // `ulToastWpsDone` will be added by UL only if it is indeed a WPS flow\n }, this.autoTriggeredOverlay && !_squid.$util.param('ulToastWpsDone') ? 1800 : 0);\n }\n }\n});\n\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_utils.getInjectULBaseObject;\n\n_utils.flowName;\n\n_utils.variantParams;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/dolphin/directive.js\n// module id = ../node_modules/xo-login-components/src/dolphin/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n \\n {{ content(successContent) }}

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/dolphin/template.html\n// module id = ../node_modules/xo-login-components/src/dolphin/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.getDolphinEligibility = exports.variantParams = exports.flowName = exports.getInjectULBaseObject = undefined;\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _eligibility = require('xo-models/src/eligibility');\n\nvar getCreditInterstitialEligibility = function getCreditInterstitialEligibility() {\n // TODO: Refactor the usage of PXP result stored in rootScope once Credit team make a change to this\n var creditInterstitialPXPResult = _angular.$rootScope['creditInterstitialPXPResult'];\n var creditInterstitialControl = 'xo_hermesnodeweb_us_ryi_ppc_ppcacquisition_interstitial_control';\n // If there is a value && it is not Control, then it's any of the treatments\n return creditInterstitialPXPResult && creditInterstitialPXPResult !== creditInterstitialControl;\n};\n\nvar getInjectULBaseObject = exports.getInjectULBaseObject = function getInjectULBaseObject(variant) {\n var options = {\n config: {\n name: 'PPFrameRedirect',\n height: 577\n },\n queryParams: {\n intent: variant === 'add3' || variant === 'confirm3' ? 'xoAutoTrigger' : 'xoToast',\n flowId: _angular.$rootScope.token,\n flowInfo: _uiRouter.$state.current && _uiRouter.$state.current.name,\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.getLocaleCode()\n },\n iframePathname: '/signin/phone-confirmation',\n targetElement: document.getElementById('injectedULPhoneConfirmation')\n };\n\n return options;\n};\n\nvar flowName = exports.flowName = 'ul_dolphin';\n\n// A simple object to map all the properties specific to a particular variant\n// Not creating a function & abstracting common things for the sake of simplicity\n// Once the performance is measured, only 1 of the 4 variants will be left behind\n// and this object will have only 2 props again.\n// A variant prop is added to define the class name in the template\n// The query param's value is not used directly to avoid XSS\nvar variantParams = exports.variantParams = {\n confirm: {\n messageKey: 'login.confirmPhone',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'short_text_link',\n // `variant` uses a hardcoded value for th ulToast query param\n // it is used later in the flow from here instead of the query param\n variant: 'confirm'\n },\n confirm1: {\n messageKey: 'login.confirmPhoneWithButton',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'short_text_button',\n variant: 'confirm1'\n },\n confirm2: {\n messageKey: 'login.confirmPhoneLongWithButton',\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'long_text_button',\n variant: 'confirm2'\n },\n confirm3: {\n // There is no messageKey in this variant\n successKey: 'login.confirmPhoneSuccess',\n transitionName: 'confirm_phone',\n bannerType: 'auto_trigger',\n variant: 'confirm3',\n autoTriggeredOverlay: true\n },\n add: {\n messageKey: 'login.addPhone',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'short_text_link',\n variant: 'add'\n },\n add1: {\n messageKey: 'login.addPhoneWithButton',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'short_text_button',\n variant: 'add1'\n },\n add2: {\n messageKey: 'login.addPhoneLongWithButton',\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'long_text_button',\n variant: 'add2'\n },\n add3: {\n // There is no messageKey in this variant\n successKey: 'login.addPhoneSuccess',\n transitionName: 'add_phone',\n bannerType: 'auto_trigger',\n variant: 'add3',\n autoTriggeredOverlay: true\n }\n};\n\nvar getDolphinEligibility = exports.getDolphinEligibility = function getDolphinEligibility(stateName) {\n var isReviewOrFi = /checkout\\.review|checkout\\.selectFi/.test(stateName) && _squid.$util.param('ulToast');\n\n if (!isReviewOrFi) {\n _logger.$logger.info(flowName, {\n 'from': 'dolphin_elg_chk',\n 'to': 'process_dolphin_elg_chk',\n 'eligibility_reason': 'not_ryp',\n 'context_id': _angular.$rootScope.token\n });\n return _squid.$promise.resolve();\n }\n\n return _eligibility.$stickyCTA.instance().getEligibility()\n // Dolphin can be enabled only in case sticky & credit interstitial are not eligibile\n .then(function (isStickyEligible) {\n var eligibilityReason = 'no_sticky_or_credit';\n var isCreditInsterstialEligible = getCreditInterstitialEligibility();\n\n if (isCreditInsterstialEligible) {\n eligibilityReason = 'has_credit_interstitial';\n }\n\n if (isStickyEligible) {\n eligibilityReason = 'has_sticky';\n }\n\n _logger.$logger.info(flowName, {\n 'from': 'dolphin_elg_chk',\n 'to': 'process_dolphin_elg_chk',\n 'eligibility_reason': eligibilityReason,\n 'context_id': _angular.$rootScope.token\n });\n\n return !isStickyEligible && !isCreditInsterstialEligible;\n });\n};\n\n_angular.$rootScope;\n\n_uiRouter.$state;\n\n_squid.$locale;\n\n_squid.$promise;\n\n_squid.$util;\n\n_logger.$logger;\n\n_eligibility.$stickyCTA;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/dolphin/utils.js\n// module id = ../node_modules/xo-login-components/src/dolphin/utils.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-models/src/checkout/index');\n\nrequire('../create-password/directive');\n\nrequire('../login/handler/directive');\n\nrequire('../password-recovery/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLoginOverlay', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n stateInfo: '=?',\n modalCallback: '=?'\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.autoLogin = false;\n $scope.ulEligibility = true;\n $scope.auth = _auth.$AuthModel.instance();\n\n var stateInfo = {};\n var subFlowTitles = {\n addCard: 'loginAddCard',\n bank: 'loginAddBank',\n addShipping: 'loginAddAddress',\n deleteShipping: 'loginDeleteAddress',\n confirmUpop: 'loginConfirmUpop',\n redirectToCape: 'loginApplyCredit',\n sepaAgreement: 'riskyLoginSepa',\n DEFAULT: 'loginTitle'\n };\n\n function getFptiStateName() {\n if ($scope.createPassword) {\n return 'quick_security_check';\n } else if ($scope.passwordRecovery) {\n return 'password_recovery';\n } else {\n return 'LOGIN_STEP_UP_AUTH';\n }\n }\n\n /**\n * Use iframe for risky login use case.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLoginViaIframe = function doRiskyLoginViaIframe(event, data) {\n _logger.$logger.debug('doRiskyLoginViaIframe');\n $scope.showOverlay = true;\n\n $('#wrapper #spinner').hide();\n\n stateInfo = data;\n\n var subFlowName = (stateInfo.newState || '').replace(/^.*\\./, '');\n\n if (subFlowName) {\n $scope.subFlowName = subFlowName;\n $scope.subFlowTitleKey = 'login.' + subFlowTitles[subFlowName] || subFlowTitles.DEFAULT;\n }\n\n $scope.createPassword = (0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less;\n $scope.passwordRecovery = false;\n if ($scope.createPassword) {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'prepare_quick_security_check'\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'prepare_login_step_up_AUTH'\n });\n }\n\n (0, _angular.$timeout)(function () {\n $element.addClass('overlayOpen');\n });\n };\n\n /**\n * Do a full page redirect to ul as landing for risky login use case.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLoginViaFullpageRedirect = function doRiskyLoginViaFullpageRedirect(event, data) {\n _logger.$logger.debug('doRiskyLoginViaFullpageRedirect');\n stateInfo = data;\n var subFlowName = (stateInfo.newState || '').replace(/^.*\\./, '');\n var subFlowTitleKey = subFlowName && subFlowTitles[subFlowName] || subFlowTitles.DEFAULT;\n\n return $scope.auth.redirectToLogin('insufficientPermission', {\n ulClientKey: subFlowTitleKey\n });\n };\n\n /**\n * Decide to do fullpage or iframe risky login.\n *\n * @param {any} event: name of the event.\n * @param {any} data: state and contextual data\n */\n var doRiskyLogin = function doRiskyLogin(event, data) {\n _logger.$logger.debug('doRiskyLogin');\n if (_squid.$config.fullPageRiskyLogin) {\n return doRiskyLoginViaFullpageRedirect(event, data);\n } else {\n return doRiskyLoginViaIframe(event, data);\n }\n };\n\n var cancelInsufficientPermission = _angular.$rootScope.$on('$insufficientPermission', doRiskyLogin);\n\n $scope.$on('$destroy', cancelInsufficientPermission);\n\n var hideOverlay = function hideOverlay() {\n $('#wrapper #spinner').attr('style', '');\n $element.removeClass('overlayOpen');\n return (0, _angular.$timeout)(function () {\n $scope.showOverlay = false;\n }, 300);\n };\n\n function logCancel() {\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'process_user_cancel'\n });\n }\n\n $scope.hideModal = function (event) {\n event.preventDefault();\n logCancel();\n hideOverlay();\n _uiRouter.$state.go(stateInfo.oldState);\n };\n\n $scope.onCreatePassword = function () {\n _angular.$rootScope.$emit('loading');\n $scope.passwordRecovery = true;\n };\n\n $scope.onPasswordRecoveryReady = function () {\n _angular.$rootScope.$emit('loaded');\n $scope.createPassword = false;\n };\n\n $scope.onCompletePasswordRecovery = function () {\n $scope.passwordRecovery = false;\n };\n\n $scope.onPasswordRecovery = function () {\n $scope.auth.password_less = false;\n };\n\n $scope.onSuccess = function () {\n var checkoutSession = _index.$CheckoutSessionModel.instance($scope.token);\n var checkoutCart = _index.$CheckoutCartModel.instance(_angular.$rootScope.token);\n return checkoutSession.action('create', {\n data: {\n baToken: checkoutCart.billing && checkoutCart.billing.ba_token\n },\n success: function success() {\n if (stateInfo.pageOnOverlay) {\n _uiRouter.$state.go(stateInfo.newState, { fromLoginOverlay: true });\n $scope.showOverlay = false;\n } else {\n hideOverlay().then(function () {\n _uiRouter.$state.go(stateInfo.newState);\n });\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: getFptiStateName(),\n to: 'process_login_step_up_AUTH'\n });\n }\n })['finally'](function () {\n hideOverlay();\n });\n };\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$feature;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutSessionModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login-overlay/directive.js\n// module id = ../node_modules/xo-login-components/src/login-overlay/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login-overlay/template.html\n// module id = ../node_modules/xo-login-components/src/login-overlay/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _dist = require('xo-device-info/dist');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _user = require('xo-models/src/user');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _squid = require('squid');\n\nrequire('xo-ui-components/src/popup/directive');\n\nrequire('xo-ui-components/src/error-tooltip/directive');\n\nvar _fn = require('./fn');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLogin', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n doneFn: '=?',\n errorFn: '=?',\n clientId: '=?',\n redirectUri: '=?',\n scope: '=?',\n autoLogin: '=?',\n apsIntegration: '=?',\n batch: '=?',\n loginSubmit: '=?'\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.locale = _squid.$locale;\n var lang = _squid.$locale.lang ? _squid.$locale.lang : 'en';\n var country = _squid.$locale.country ? _squid.$locale.country : 'US';\n var localeNVP = 'locale.x=' + lang.toLowerCase() + '_' + country.toUpperCase();\n var forgotPasswordUrl = 'https://www.paypal.com/' + country.toLowerCase() + '/webapps/accountrecovery/passwordrecovery?' + localeNVP;\n var legacyForgotPasswordUrl = 'https://www.paypal.com/' + country.toLowerCase() + '/merchantpaymentweb?cmd=_account-recovery&from=PayPal&' + localeNVP;\n var checkoutInputData = _user.$CheckoutInputDataModel.instance(_angular.$rootScope.token);\n var creditData = _credit.$CreditDataModel.instance(_angular.$rootScope.token);\n var apsRemMe = $scope.apsIntegration === 'apsIntegrationRM';\n var $passwordField = $element.find('[ng-model=\"auth.password\"]');\n var fptiStateName = $scope.apsIntegration ? 'LOGIN_APS' : 'LOGIN';\n\n $scope.forgotPasswordUrl = (0, _squid.$feature)('newForgotPasswordSupported') ? forgotPasswordUrl : legacyForgotPasswordUrl;\n _fn.$fn.sendTypingSpeedPayload('Hermes');\n\n /* ******** Here goes the Remember User controls *************************** */\n\n // Show the RM consent section when\n // 1. feature is ON\n // 2. when its not a contingency flow\n // 3. eBay doesn't want to hide it explicitly\n\n if (checkoutInputData.rmEnabled(Boolean(_squid.$config.rememberMeFeatureEnabled)) && !checkoutInputData.hideRM()) {\n fptiStateName = 'LOGIN_RM';\n $scope.rememberMe = 'nonKmli';\n } else if (apsRemMe) {\n $scope.rememberMe = 'kmli';\n }\n $scope.rememberMeChkBox = {\n // Leave the consent box un-ticked by default\n agreed: false\n };\n\n // Show the RM details only if user clicks on 'learn more' link or clicks on Checkbox\n $scope.showRmMore = false;\n\n // Expand details when RM check-box is ticked and Remember the user\n $scope.toggleRMDetails = function () {\n $scope.showRmMore = $scope.rememberMeChkBox.agreed;\n };\n\n function setRememberUser() {\n if (checkoutInputData.rmEnabled(Boolean(_squid.$config.rememberMeFeatureEnabled))) {\n if (checkoutInputData.hideRM() === 'true') {\n // Feature is ON but consent box is hidden since hideRM param is true\n // Do not remember user in this case\n $scope.auth.rememberUser = false;\n } else {\n // RM is enabled and consent box displayed on login page\n // Remember the user based on the consent of user\n $scope.auth.rememberUser = $scope.rememberMeChkBox.agreed ? true : false;\n }\n } else {\n // Feature is wired off\n // If RM is not enabled that means the control is with eBay and we should retain current behavior by remembering the user\n $scope.auth.rememberUser = true;\n }\n }\n\n /* ************ Remember User Ends *************************************** */\n\n function showLoadingMessage() {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get(creditData.isRedirectFromCape() || creditData.isChangeStatus() ? 'base.processing' : 'base.loggingIn'));\n }\n\n function loginAction() {\n showLoadingMessage();\n var loginInput = {\n user: {\n email: $scope.auth.email,\n password: $scope.auth.password\n }\n };\n\n if ($scope.clientId) {\n loginInput.client = {\n redirect_uri: _squid.$config.app_redirect_uri,\n client_id: _squid.$config.app_clientId || '',\n target_client_id: _squid.$util.param('fromLipp') === 'true' ? $scope.clientId : _squid.$util.base64Decode($scope.clientId), // eslint-disable-line block-scoped-var,no-undef\n scope: $scope.scope,\n response_type: 'token id_token',\n skip_oauth: false,\n skip_consent: true\n };\n } else if ($scope.apsIntegration) {\n loginInput.client = {\n remember_me: Boolean(apsRemMe && $scope.rememberMeChkBox.agreed)\n };\n loginInput.fastLogin = true;\n }\n\n // updated the product to decide the entry point\n loginInput.product = _angular.$rootScope.wps ? 'wps' : 'ec';\n\n // if risk_correlation_id (fraudNetId) is present in cart, then include it to req\n loginInput.fraudnet_id = $scope.checkoutCart.supplementary && $scope.checkoutCart.supplementary.risk_correlation_id;\n\n // add token (cart-id) in context for RL\n var adsClientContextData = { context_type: 'Cart-ID', context_id: $scope.token };\n\n loginInput['ads-client-context-data'] = adsClientContextData;\n $scope.auth.action('login', {\n data: loginInput,\n headers: {\n 'x-pp-ads-client-context-data': JSON.stringify(adsClientContextData)\n },\n success: function success(result) {\n var transition_name = $scope.rememberMeChkBox.agreed ? 'process_login_rm' : 'process_login';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name\n });\n\n if (window.xprops && window.xprops.onAuth && $scope.auth.access_token) {\n return window.xprops.onAuth({\n accessToken: $scope.auth.access_token\n }).then(function () {\n return $scope.doneFn($scope.auth);\n });\n }\n return $scope.doneFn($scope.auth);\n },\n\n contingencies: {\n DEFAULT: function DEFAULT(name, contingency) {\n var transition_name = $scope.rememberMeChkBox.agreed ? 'process_login_rm' : 'process_login';\n var error_source = $scope.apsIntegration ? 'aps' : 'userauth';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name,\n 'int_error_description': contingency && contingency.message,\n 'error_type': 'soft_decline',\n 'error_source': error_source\n });\n $scope.auth.password = '';\n $passwordField.focus();\n return $scope.errorFn(name, contingency);\n }\n }\n });\n }\n\n $scope.$on('$destroy', function () {\n $scope.auth.password = '';\n });\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n }).then(function () {\n if ($scope.auth.loggedIn()) {\n if ($scope.autoLogin) {\n showLoadingMessage();\n if ($scope.auth.remembered) {\n _logger.$logger.info('REMEMBERED_ACTIVE_SESSION');\n } else {\n _logger.$logger.info('ACTIVE_SESSION');\n }\n return $scope.doneFn($scope.auth);\n }\n } else if ($scope.checkoutCart.payer && $scope.checkoutCart.payer.email && !$scope.auth.timed_out) {\n $scope.auth.email = $scope.checkoutCart.payer.email;\n }\n var transition_name = void 0;\n\n if (apsRemMe) {\n transition_name = 'prepare_login_rm';\n } else if (creditData.isCreditTxn()) {\n transition_name = 'prepare_login_ppc';\n } else {\n transition_name = 'prepare_login';\n }\n\n var app_int_type = _dist.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiStateName,\n 'to': transition_name,\n 'app_int_type': app_int_type\n });\n $scope.onSubmit = function () {\n setRememberUser();\n loginAction();\n };\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_dist.$DeviceInfo;\n\n_credit.$CreditDataModel;\n\n_user.$CheckoutInputDataModel;\n\n_index.$CheckoutCartModel;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$util;\n\n_fn.$fn;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/directive.js\n// module id = ../node_modules/xo-login-components/src/login/directive.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fn', function () {\n var fncls = 'fnparams-dede7cc5-15fd-4c75-a9f4-36c430ee3a99';\n var fnCorrId;\n var fraudnetConfig = _squid.$config.fraudnet;\n var token = _angular.$rootScope.token || _squid.$meta.token;\n\n if (_squid.$meta.baToken) {\n _logger.$logger.info('BEAM_In_Hermes_Checkout');\n fnCorrId = _squid.$meta.baToken;\n } else if (_angular.$rootScope.fraudNetId) {\n fnCorrId = _angular.$rootScope.fraudNetId;\n } else {\n fnCorrId = _angular.$rootScope.token || _squid.$meta.token;\n }\n\n var options = {\n fnSessionId: fnCorrId,\n sourceId: fraudnetConfig && fraudnetConfig.sourceId || 'HERMES_SIGNIN',\n allowsCustomEvent: typeof CustomEvent !== 'undefined' && _angular2['default'].isFunction(CustomEvent)\n };\n\n function init() {\n\n _logger.$logger.info('FN_contexts', {\n 'token': token,\n 'fnSessionId': options.fnSessionId\n });\n\n // Todo: remove the conditional logic after all the boxes picked up latest config.\n if (_angular2['default'].isString(_squid.$config.urls.fraudnetUrl)) {\n options.fnUrl = _squid.$config.urls.fraudnetUrl;\n } else {\n options.fnUrl = _squid.$config.urls.fraudnetUrl && _squid.$config.urls.fraudnetUrl.passive;\n }\n\n _logger.$logger.info('FN_Initialised', {\n 'allowsCustomEvent': options.allowsCustomEvent\n });\n }\n\n var enableFraudnet = function enableFraudnet() {\n var userAgent = _angular.$window.navigator.userAgent;\n\n // Disable for web view\n if (_index.$DeviceInfo.isApp()) {\n if (_angular.$window.enableFraudNetForMobileWebView) {\n _logger.$logger.info('Enable_FN_MobileApp_PXP_Decision');\n return true;\n }\n\n _logger.$logger.info('Disable_FN_Mobileapp');\n return false;\n } else if (userAgent.indexOf('EtsyInc') > -1) {\n _logger.$logger.info('Disable_FN_Etsy');\n return false;\n }\n _logger.$logger.info('Enable_FN');\n return true;\n };\n\n function injectScript(fnUrl) {\n var script = document.createElement('script');\n script.id = 'js-sync';\n script.src = fnUrl;\n document.body.appendChild(script);\n }\n\n function injectIframe(beaconOptions) {\n var iframe = document.createElement('iframe');\n var dom;\n var doc;\n var where;\n\n iframe.src = 'about:blank'; // eslint-disable-line no-script-url\n iframe.title = '';\n iframe.role = 'presentation';\n (iframe.frameElement || iframe).style.cssText = 'width: 0; height: 0; border: 0; display: none;';\n\n where = document.getElementsByTagName('script');\n where = where[where.length - 1];\n where.parentNode.insertBefore(iframe, where);\n\n try {\n doc = iframe.contentWindow.document;\n } catch (e) {\n dom = document.domain;\n iframe.src = 'javascript:var d=document.open();d.domain=\"' + dom + '\";void(0);'; // eslint-disable-line no-script-url\n doc = iframe.contentWindow.document;\n }\n\n doc.open()._l = function () {\n var js = this.createElement('script');\n if (dom) {\n this.domain = dom;\n }\n js.id = 'js-iframe-async';\n js.src = beaconOptions.fnUrl;\n this.body.appendChild(js);\n };\n function listener() {\n doc._l();\n }\n if (iframe.addEventListener) {\n iframe.addEventListener('load', listener, false);\n } else if (iframe.attachEvent) {\n iframe.attachEvent('onload', listener);\n } else {\n doc.write('');\n }\n doc.close();\n }\n\n function _injectConfig(configOptions) {\n var script = document.getElementById('fconfig');\n\n if (script) {\n if (script.parentNode) {\n script.parentNode.removeChild(script);\n }\n }\n\n script = document.createElement('script');\n script.id = 'fconfig';\n script.type = 'application/json';\n script.setAttribute('fncls', fncls);\n\n script.text = '{\"f\": \"' + configOptions.fnSessionId + '\", \"s\": \"' + configOptions.sourceId + '\", \"cb\": \"fnCallback\"}';\n document.body.appendChild(script);\n }\n\n /**\n * Loads the fraudnet beacons (triggers 2 image beacons to c.paypal.com and c6.paypal.com)\n *\n * Integration pattern ripped from the Fraudnet Integration guide:\n * https://confluence.paypal.com/display/RiskDataAcquisition/FraudNet+Client+System+Integration+Guide+3.0#FraudNetClientSystemIntegrationGuide3.0-IntegrationCode\n */\n function _loadBeacon(beaconOptions) {\n if (_index.$DeviceInfo.isApp() && _angular.$window.enableFraudNetForMobileWebView) {\n injectScript(beaconOptions.fnUrl);\n } else {\n injectIframe(beaconOptions);\n }\n }\n\n function trigger(scope) {\n\n var fnLoaded = !!_angular.$rootScope.fnLoaded;\n\n if (fnLoaded) {\n return false;\n }\n _logger.$logger.info('Trigger_FN');\n\n if (options.fnUrl) {\n if (enableFraudnet()) {\n _angular.$window.fnCallback = function () {\n if (scope) {\n scope.$emit('fnCallback');\n }\n };\n _injectConfig(options);\n _loadBeacon(options);\n _angular.$rootScope.fnLoaded = true;\n return true;\n }\n }\n return false;\n }\n\n /**\n * send a payload to fraudnet for analysing typing speed\n * @param type\n */\n function sendTypingSpeedPayload(type) {\n\n var tsLoadPayload = {\n 'detail': {\n 'type': type\n }\n };\n\n if (type === 'Hermes') {\n tsLoadPayload.detail['fields'] = ['username', 'password'];\n }\n if (type === 'HermesUL') {\n tsLoadPayload.detail['frame'] = 'injectedUl';\n tsLoadPayload.detail['fields'] = ['email', 'password'];\n }\n\n if (type) {\n var event;\n if (options.allowsCustomEvent) {\n // document.createEvent deprecated\n _logger.$logger.info('fn_CustomEvent_type1');\n event = new CustomEvent('tsLoad', tsLoadPayload);\n } else {\n // IE does not support CustomEvent constructor\n try {\n _logger.$logger.info('fn_CustomEvent_type2');\n event = window.document.createEvent('CustomEvent');\n event.initCustomEvent('tsLoad', true, true, tsLoadPayload.detail);\n } catch (err) {\n _logger.$logger.info('fn_CustomEvent_None', {\n 'error': err\n });\n }\n }\n if (event) {\n window.document.dispatchEvent(event);\n _logger.$logger.info('Dispatched_FN_TS_Payload_' + type);\n }\n }\n }\n\n return {\n init: init,\n trigger: trigger,\n sendTypingSpeedPayload: sendTypingSpeedPayload\n };\n});\n\n_squid.$config;\n\n_squid.$meta;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/fn.js\n// module id = ../node_modules/xo-login-components/src/login/fn.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _props = require('../props');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('../../unified-login/directive');\n\nrequire('../directive');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoLoginHandler', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n successCallback: '=?',\n contingencyCallback: '=?',\n autoLogin: '=?',\n ulEligibility: '=?',\n subFlowTitleKey: '=?',\n apsIntegration: '=?',\n batch: '=?',\n loginSubmit: '=?',\n logout: '=?',\n preAuth: '=?',\n hideloginpp: '=?',\n flowcontext: '=?',\n hideTitle: '=?'\n },\n\n controller: ['$scope', function ($scope) {\n // Login Contingency Handling\n var CONTENT_KEY = {\n INVALID_EMAIL_PASSWORD: 'invalidEmailPasswordPageError',\n ACCOUNT_LOCKED: 'accountLockedPageError',\n ACCOUNT_CLOSED: 'accountLockedPageError',\n INVALID_PHONE: 'invalidPhone',\n INVALID_PIN: 'invalidPin',\n INVALID_ACCESS_TOKEN: 'invalidAccessToken',\n TIMED_OUT: 'loginStatusTimedOut',\n CANNOT_PAY_SELF: 'cannotPaySelf',\n RISK_DECLINE: 'riskDeclinePageError',\n LOGIN_ADD_PHONE: 'loginAddPhone',\n LOGIN_PREFILLED_SHIPPING_ADDRESS: 'loginMerchantPassedAddress',\n LOGIN_CONTINGENCY: 'loginContingency',\n LOGIN_REACTIVATE: 'checkOneTouch',\n LOGIN_LEAVECHECKED: 'leaveOneTouchChecked',\n LOGIN_OT_GENERIC_ERROR: 'reactivateOneTouch',\n VENMO_GENERIC_ERROR: 'venmoGenericError'\n };\n\n var CONTENT_MAPPING = {\n INVALID_USER: { content: CONTENT_KEY.INVALID_EMAIL_PASSWORD, type: 'error' },\n INVALID_PHONE_PIN: { content: CONTENT_KEY.INVALID_PIN, type: 'error' },\n INVALID_ACCESS_TOKEN: { content: CONTENT_KEY.INVALID_ACCESS_TOKEN, type: 'error' },\n LOCKED_USER: { content: CONTENT_KEY.ACCOUNT_LOCKED, type: 'error' },\n ACCOUNT_LOCKED: { content: CONTENT_KEY.ACCOUNT_LOCKED, type: 'error' },\n CLOSED_USER: { content: CONTENT_KEY.ACCOUNT_CLOSED, type: 'error' },\n TIMED_OUT: { content: CONTENT_KEY.TIMED_OUT, type: 'error' },\n CANNOT_PAY_SELF: { content: CONTENT_KEY.CANNOT_PAY_SELF, type: 'error' },\n RISK_DECLINE: { content: CONTENT_KEY.RISK_DECLINE, type: 'error' },\n addPhone: { content: CONTENT_KEY.LOGIN_ADD_PHONE, type: 'error' },\n PAYER_AUTHENTICATION_REQUIRED: {\n content: CONTENT_KEY.LOGIN_PREFILLED_SHIPPING_ADDRESS,\n type: 'info'\n },\n LOGIN_CONTINGENCY: { content: CONTENT_KEY.LOGIN_CONTINGENCY, type: 'error' },\n ONETOUCH_REACTIVATE: { content: CONTENT_KEY.LOGIN_REACTIVATE, type: 'warning' },\n ONETOUCH_LEAVECHECKED: { content: CONTENT_KEY.LOGIN_LEAVECHECKED, type: 'warning' },\n ONETOUCH_GENERIC_ERROR: { content: CONTENT_KEY.LOGIN_OT_GENERIC_ERROR, type: 'warning' },\n VENMO_ERROR: { content: CONTENT_KEY.VENMO_GENERIC_ERROR, type: 'error' }\n };\n\n function populateMessage(name, type) {\n var contentKey = CONTENT_MAPPING[name];\n if (contentKey) {\n $scope.message = {\n msgKeys: ['login.' + contentKey.content],\n type: type || contentKey.type\n };\n } else {\n _logger.$logger.debug('unresolved content for login ' + type + ' message ' + name + ' in xo-login page');\n }\n }\n\n function handleAuthChallengeFailure(urlParams) {\n if (urlParams.acRedirect === '2fa') {\n var userLocale = urlParams['locale.test'];\n\n if (userLocale) {\n _squid.$locale.chosenLang = _squid.$localeHelper.normalizeLocale(userLocale).language;\n }\n\n if (urlParams.ulMethod === 'phone') {\n _logger.$logger.debug('2FA_RETURNED_FAILED_PHONE');\n populateMessage('INVALID_PHONE_PIN', 'error');\n } else {\n _logger.$logger.debug('2FA_RETURNED_FAILED_EMAIL');\n populateMessage('INVALID_USER', 'error');\n }\n } else if (urlParams.acRedirect === 'loginato') {\n _logger.$logger.debug('LOGIN_ATO_RETURNED_FAILED');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n } else if (urlParams.acRedirect === 'safe') {\n _logger.$logger.debug('SAFE_RETURNED_FAILED');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n }\n\n function handleAuthChallengeSuccess(urlParams) {\n switch (urlParams.acRedirect) {\n case '2fa':\n _logger.$logger.debug('2FA_RETURNED_SUCCESS');\n break;\n case 'loginato':\n _logger.$logger.debug('LOGIN_ATO_RETURNED_SUCCESS');\n break;\n case 'safe':\n _logger.$logger.debug('SAFE_RETURNED_SUCCESS');\n break;\n default:\n // do nothing\n }\n $scope.auth.is_auth_api_call = !urlParams.acRedirect;\n }\n\n $scope.onComplete = function (auth) {\n // Dont show the login contingency message once poma password recovery is enabled.\n if (!(0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less && $scope.checkoutCart.isBilling()) {\n populateMessage('LOGIN_CONTINGENCY', 'info');\n }\n\n if (_angular.$rootScope.contingency && _angular.$rootScope.contingency.message) {\n populateMessage(_angular.$rootScope.contingency.message, 'error');\n } else {\n if (!_squid.$util.param('langTgl')) {\n // for UL Landing\n _squid.$locale.choose(auth.country, auth.language, false);\n }\n $scope.successCallback();\n }\n };\n\n // Make country and lang available to htmlContent for dynamically generating content\n $scope.locale = _squid.$locale;\n\n if (_uiRouter.$stateParams.targetPage) {\n if (_props.$loginProps.inList(_uiRouter.$stateParams.targetPage) && (0, _squid.$feature)('riskyLoginContingency')) {\n var riskyLoginInfo = _props.$loginProps.mapInfo(_uiRouter.$stateParams.targetPage);\n $scope.subFlowTitleKey = riskyLoginInfo.title;\n $scope.contingencyDesc = riskyLoginInfo.subtitle;\n $scope.hideloginpp = true;\n $scope.postlogout = function () {\n delete $scope.subFlowTitleKey;\n\n if ($scope.contingencyDesc) {\n delete $scope.contingencyDesc;\n }\n\n delete $scope.hideloginpp;\n $scope.showLanguageDropdown = (0, _squid.$feature)('languageToggle');\n $scope.logout();\n };\n } else {\n var errMessage = CONTENT_MAPPING[_uiRouter.$stateParams.targetPage] ? _uiRouter.$stateParams.targetPage : 'LOGIN_CONTINGENCY';\n var type = errMessage.type ? errMessage.type : 'info';\n populateMessage(errMessage, type);\n }\n }\n\n if (_auth.$AuthModel.instance().meta.invalidated) {\n populateMessage('TIMED_OUT', 'error');\n } else if (_auth.$AuthModel.instance().meta.selfPay) {\n populateMessage('CANNOT_PAY_SELF', 'error');\n _auth.$AuthModel.instance().meta.selfPay = false;\n }\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token).retrieve()\n }).then(function () {\n // Land on create password info page in case poma user was routed to login, after the\n // initial login/auth.\n if ((0, _squid.$feature)('pomaPasswordRecovery') && $scope.auth.password_less && !$scope.autoLogin) {\n _uiRouter.$state.go('checkout.createPassword', { targetPage: _uiRouter.$stateParams.targetPage });\n return;\n }\n\n var ULCallbacks = {\n showErrorMessages: function showErrorMessages(errorCase) {\n populateMessage(errorCase);\n (0, _angular.$timeout)(function () {\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n },\n toggleUnifiedLogin: function toggleUnifiedLogin(value) {\n $scope.ulEligibility = value;\n $scope.apsIntegration = true;\n _angular.$rootScope.continueLoadingForUL = value;\n (0, _angular.$timeout)(function () {\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n }\n };\n\n // redirect to UL if config says true and we have targetPage\n if (_squid.$config.fullPageRiskyLogin && _uiRouter.$stateParams.targetPage) {\n _logger.$logger.debug('doRiskyLoginViaRedirectToUL');\n // delete scope variables to avoid UL iframe execution\n delete $scope.ulEligibility;\n delete $scope.apsIntegration;\n\n var subFlowTitleKey = $scope.subFlowTitleKey && $scope.subFlowTitleKey.split('.')[1];\n\n return $scope.auth.redirectToLogin('insufficientPermission', {\n ulClientKey: subFlowTitleKey\n });\n } else {\n _logger.$logger.debug('doRiskyLoginViaiFrameInHermes');\n $scope.ULCallback = function (name, value) {\n var callback = ULCallbacks[name];\n if (callback) {\n callback(value);\n }\n };\n }\n\n if ($scope.auth.timed_out) {\n populateMessage('TIMED_OUT', 'error');\n }\n\n if (!$scope.subFlowTitleKey) {\n $scope.showLanguageDropdown = (0, _squid.$feature)('languageToggle');\n }\n\n var urlParams = _squid.$util.params();\n\n if (urlParams.acRedirect) {\n // Returning from auth challenge\n if (urlParams.failedBecause) {\n handleAuthChallengeFailure(urlParams);\n } else {\n handleAuthChallengeSuccess(urlParams);\n }\n }\n\n var getErrorDesc = function getErrorDesc(msg) {\n return decodeURIComponent(msg);\n };\n\n var getErrorType = function getErrorType(msg) {\n var errorNum = decodeURIComponent(msg).match(/\\d+/g); // to extract the error type from the error msg\n return errorNum ? errorNum : '';\n };\n\n var mapCodeToError = function mapCodeToError(code) {\n\n var errorMap = {\n '82016': 'RISK',\n '82017': 'COMPLIANCE'\n };\n\n return errorMap[code];\n };\n\n if (_uiRouter.$stateParams.venmoError) {\n\n if (_uiRouter.$stateParams.errorCode) {\n\n var errorSource = mapCodeToError(_uiRouter.$stateParams.errorCode);\n if (errorSource) {\n _logger.$logger.info('checkout_fpti', {\n from: 'VENMO_ENTRYPOINT',\n to: 'process_checkout_login',\n 'int_error_code': _uiRouter.$stateParams.errorCode,\n 'int_error_description': _uiRouter.$stateParams.errorMessage ? getErrorDesc(_uiRouter.$stateParams.errorMessage) : '',\n 'error_type': _uiRouter.$stateParams.errorMessage ? getErrorType(_uiRouter.$stateParams.errorMessage) : '',\n 'error_source': errorSource\n });\n }\n }\n\n populateMessage('VENMO_ERROR', 'error');\n }\n\n var handleContingency = {\n // Errors - Show Page Level Error\n INVALID_USER: populateMessage,\n LOCKED_USER: populateMessage,\n ACCOUNT_LOCKED: populateMessage,\n CLOSED_USER: populateMessage,\n ONETOUCH_REACTIVATE: populateMessage,\n ONETOUCH_LEAVECHECKED: populateMessage\n\n };\n\n $scope.onContingency = function (name, contingency, type) {\n // eslint-disable-line no-shadow\n\n _squid.$locale.choose($scope.auth.country, $scope.auth.language, false);\n\n if (!handleContingency[name]) {\n return $scope.contingencyCallback(name, contingency);\n }\n\n var message_type = type || 'error';\n return handleContingency[name](name, message_type);\n };\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$localeHelper;\n\n_squid.$populate;\n\n_squid.$util;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_props.$loginProps;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/handler/directive.js\n// module id = ../node_modules/xo-login-components/src/login/handler/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n \\n \\n
    \\n
    \\n

    \\n

    \\n
    \\n

    \\n

    \\n \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/handler/template.html\n// module id = ../node_modules/xo-login-components/src/login/handler/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$KmliEligibility = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nvar scope = { eligibility: {} };\nvar ulMeta = _squid.$config.ulMeta || {};\n\nvar getPXPList = function getPXPList(country) {\n // returns a list of Pxp's that needs to be executed\n var countryCTX = { 'ctx.COUNTRY': country };\n var pxpExpId = ulMeta.pxpExpId;\n var pxpList = [(0, _squid.$pxp)(pxpExpId, countryCTX, 'xo_hermes_ul_timeout_treatment.*', false, true), (0, _squid.$pxp)(pxpExpId, countryCTX, 'xo_hermes_ul_preload_treatment', false, true)];\n\n return pxpList;\n};\n\nvar routingReason = function routingReason() {\n // Check for conditions that deviates from the PXP eligibility\n // Reasons that deviates from control to treatment\n var isRememberedUser = scope.auth.refreshToken();\n\n if (scope.kmli === true) {\n return 'kmliMandated';\n } else if (isRememberedUser) {\n return 'rememberedUser';\n } else if (_squid.$util.param('ul') === '2') {\n return 'ulParam';\n } else if (_squid.$meta.corp && ulMeta.allowKMLIForInternalIP) {\n var merchantCountry = scope.checkoutAppData.merchant.merchant_country;\n\n if ((0, _squid.$feature)('enableOneTouchInternalIP', false, merchantCountry)) {\n return 'internalIP';\n }\n } else if (ulMeta.enableOneTouchByDefault) {\n return 'oneTouchByDefault';\n }\n};\n\nvar compatibility = function compatibility(reasons) {\n // Check for compatibility/environment issues which impacts UL/KMLI overall\n // This should override previous decisions\n if (_index.$DeviceInfo.isApp()) {\n scope.kmliEligibility = false;\n reasons.push('Webview');\n } else if (!_squid.$util.cookiesEnabled()) {\n scope.kmliEligibility = false;\n reasons.push('cookiesDisabled');\n } else if (scope.auth.ota) {\n scope.kmliEligibility = false;\n reasons.push('otaDevice');\n }\n\n if (scope.forcedLogin === true) {\n scope.kmliEligibility = false;\n reasons.push('forcedLogin');\n }\n if (scope.logoutCallback) {\n scope.kmliEligibility = true;\n reasons.push('riskyLoginContingency');\n }\n};\n\nvar isULpreload = function isULpreload(preloadULTreatments) {\n // const userAgent = $window.navigator.userAgent;\n // const isIE = !!userAgent.match(/MSIE|trident|edge/i);\n var isTreatment = Boolean(preloadULTreatments && preloadULTreatments.treatment_name);\n var forceUlss = _squid.$util.param('_ulss') === 'true';\n var preloadUL = forceUlss || isTreatment;\n\n return preloadUL;\n};\n\nvar isUlAsLanding = function isUlAsLanding() {\n // markes\n var forceUlAsLanding = _squid.$util.param('ul') === 'landing';\n var ulAsLandingParam = _squid.$util.param('ulReturn') === 'true';\n\n // tried Ul as landing -> failed -> used iframe\n var failedAttempt = _squid.$util.param('lndgFailedBecause'); // eslint-disable-line no-unused-vars\n\n\n return forceUlAsLanding || ulAsLandingParam;\n};\n\nvar getTimeoutLimit = function getTimeoutLimit(pxpTimeoutTrt) {\n var ulTimeoutLimit = void 0;\n var timeoutTrtFact = pxpTimeoutTrt && angular.isArray(pxpTimeoutTrt.factors);\n var pxpTimeoutVal = timeoutTrtFact && pxpTimeoutTrt.factors[0] && pxpTimeoutTrt.factors[0].value;\n\n if (pxpTimeoutVal) {\n ulTimeoutLimit = pxpTimeoutVal;\n _logger.$logger.info('pxp_timeout_treatment', { ulTimeoutLimit: ulTimeoutLimit });\n }\n return ulTimeoutLimit;\n};\n\nvar $KmliEligibility = exports.$KmliEligibility = {\n init: function init(params) {\n if (scope.eligibility.treatment) {\n // do not init twice\n return _angular.$q.resolve(scope.eligibility);\n }\n _logger.$logger.debug('kmliEligibility_init');\n scope.forcedLogin = params && params.forcedLogin;\n scope.logoutCallback = params && params.logoutCallback;\n\n return (0, _squid.$populate)(scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = scope.checkoutAppData.merchant.merchant_country;\n\n return _angular.$q.all(getPXPList(country)).then(function (result) {\n scope.eligibility.ulTimeoutLimit = getTimeoutLimit(result[0]);\n scope.eligibility.preloadUL = isULpreload(result[1]);\n scope.eligibility.safeEligibility = true;\n scope.eligibility.ulAsLanding = isUlAsLanding();\n });\n }).then(function () {\n // STEP1: kmli pxp ramped to 100%, so always kmli eligible\n scope.kmliEligibility = true;\n\n // STEP2: Push the eligible reasons from routingReason check.\n var reasons = []; // Reasons that deviates from control to treatment\n\n reasons.push('pxpFullyRamped');\n\n var reason = routingReason();\n\n if (reason) {\n scope.kmliEligibility = true;\n reasons.push(reason);\n }\n\n // STEP3: Check for compatibility/environment issues which impacts UL/KMLI overall\n compatibility(reasons);\n\n var routing_reason = reasons[reasons.length - 1];\n\n scope.eligibility.treatment = true;\n scope.eligibility.routingReason = routing_reason;\n scope.eligibility.deviatingReasons = reasons;\n scope.eligibility.kmliEligibility = scope.kmliEligibility;\n\n // STEP4: Instrument deterministically whether KMLI is shown to the user or not\n _logger.$logger.debug(scope.kmliEligibility ? 'KMLI_ELIGIBLE_USER' : 'KMLI_INELIGIBLE_USER', { userGroup: reasons, routing_reason: routing_reason });\n _logger.$logger.info('checkout_fpti', {\n 'from': 'KMLI_ELG_CHK',\n 'to': 'process_kmli_elg_chk',\n routing_reason: routing_reason\n });\n return scope.eligibility;\n });\n },\n eligible: function eligible() {\n return scope.eligibility;\n }\n};\n\nangular.value(\"$KmliEligibility\", $KmliEligibility);\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_auth.$AuthModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/kmliEligibility.js\n// module id = ../node_modules/xo-login-components/src/login/kmliEligibility.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar RISKY_LOGIN_TITLE = {\n ECONSENT_REQUIRED: '',\n ELV_DECLINE: '',\n EXPIRED_CREDIT_CARD: 'login.riskyLoginUpdateCard',\n INSTANT_FUNDING_SOURCE_UPSELL_NEEDED: '',\n NEED_CREDIT_CARD: 'login.riskyLoginAddCard',\n NEED_CREDIT_CARD_OR_BANK_ACCOUNT: 'login.riskyLoginAddFi',\n NEED_CONFIRMED_CARD: '',\n NEED_AUTHENTICATED_CARD: 'login.riskyLoginUpdateCard',\n NEED_SHIPPING_ADDRESS: 'login.riskyLoginAddShipping',\n PHONE_NUMBER_REQUIRED: 'login.riskyLoginAddPhone',\n PAYER_AUTHENTICATION_REQUIRED: 'login.riskyLoginShippingPassed',\n SEPA_MANDATE_ACCEPTANCE_NEEDED: 'login.riskyLoginSepa',\n TAX_ID_REQUIRED: ''\n};\nvar RISKY_LOGIN_SUBTITLE = {\n EXPIRED_CREDIT_CARD: 'login.riskyLoginExpiredCardST',\n NEED_SHIPPING_ADDRESS: 'login.riskyLoginAddShippingST',\n PHONE_NUMBER_REQUIRED: 'login.riskyLoginAddPhoneST',\n SEPA_MANDATE_ACCEPTANCE_NEEDED: 'login.riskyLoginSepaST',\n PAYER_AUTHENTICATION_REQUIRED: 'login.riskyLoginShippingPassedST'\n};\n\nvar $loginProps = exports.$loginProps = {\n mapInfo: function mapInfo(contingency) {\n var contingencyTitle = RISKY_LOGIN_TITLE[contingency] ? RISKY_LOGIN_TITLE[contingency] : 'login.loginContingency';\n var contingencySubTitle = RISKY_LOGIN_SUBTITLE[contingency];\n\n return { title: contingencyTitle, subtitle: contingencySubTitle };\n },\n\n inList: function inList(contingency) {\n return RISKY_LOGIN_TITLE.hasOwnProperty(contingency);\n }\n};\n\nangular.value(\"$loginProps\", $loginProps);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/props.js\n// module id = ../node_modules/xo-login-components/src/login/props.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n
    \\n \\n \\n
      \\n
    • {{ content('rememberMe.skipLogin') }}
    • \\n
    • {{ content('rememberMe.toCancel') }}
    • \\n
    • {{ content('rememberMe.protectAccounts') }}
    • \\n
    \\n
    \\n
    \\n \\n \\n
    \\n \\\"{{\\n
    \\n
    \\n
    \\n\\n \\n
    \\n

    {{ content('login.kmliTooltipLine1') }}

    \\n

    {{ content('login.kmliTooltipLine2') }}

    \\n

    {{ content('login.kmliTooltipLine3') }}

    \\n
    \\n
    \\n\\n \\n\\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/login/template.html\n// module id = ../node_modules/xo-login-components/src/login/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$KmliUpsell = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _newMember = require('xo-models/src/newMember');\n\nvar _kmliEligibility = require('../login/kmliEligibility');\n\n// Model Retrived\nvar idToken = void 0;\n// models\n\nvar successfulLogin = void 0;\nvar isOneTouched = void 0;\nvar upsellOptInDisplayed = void 0; // eslint-disable-line no-unused-vars\nvar kmliEligible = void 0;\nvar walletTokenization = void 0;\nvar preloadUL = void 0;\nvar lastUpsellVersion = void 0; // eslint-disable-line no-unused-vars\nvar showReactivationInterstitial = void 0;\nvar kmliChecked = void 0; // Passed in init\nvar expPromise = void 0; // Promisified experience data\nvar scope = {};\n\nvar getKmliContentKey = function getKmliContentKey() {\n // NOTE: `xo_hermesnode_kmli_upsell` has been removed\n // and currently it's always returned `xo_hermesnode_kmli_content_t1`\n scope.oneTouchContentVersion = 1;\n return _angular.$q.resolve();\n};\n\n// Determine if the NMJ experience the user has is ineligible\nvar getIsNmj = function getIsNmj() {\n return _newMember.$NewMemberEligibility.instance().isNmj(scope.token);\n};\n\nvar resolveEligibilityConditions = function resolveEligibilityConditions(params) {\n idToken = Boolean(scope.auth.idTokenPresent);\n successfulLogin = scope.auth.loggedIn();\n isOneTouched = scope.auth.loggedIn() && scope.auth.refreshToken();\n walletTokenization = scope.checkoutCart.isWalletTokenization() || scope.auth.remembered_partner_assertion; // android pay, apple pay, etc\n kmliChecked = Boolean(params.isKmliSet); // may not be OT but user has already opted in\n upsellOptInDisplayed = Boolean(scope.auth.upsellOptInDisplayed);\n lastUpsellVersion = scope.auth.ryiOptIn && scope.auth.ryiOptIn.interstitialDisplayed;\n showReactivationInterstitial = Boolean(params.showReactivationInterstitial);\n _logger.$logger.debug('kmliUpsell_resolveEligibilityConditions', { params: params });\n\n if (walletTokenization || preloadUL || scope.oneTouchContentVersion !== '3') {\n // do not trigger pxp for walletTokenization, ulpreload\n // Interstitial is only eligibile when the contentKey is set to treatment 3\n _logger.$logger.debug('kmliUpsell_init_ineligible');\n }\n return _angular.$q.resolve();\n};\n\nvar $KmliUpsell = exports.$KmliUpsell = {\n init: function init(params) {\n scope.token = _angular.$rootScope.token;\n\n if (expPromise) {\n return; // do not init twice\n }\n _logger.$logger.debug('kmliUpsell_init', params);\n expPromise = _kmliEligibility.$KmliEligibility.init().then(function (KmliEligibility) {\n kmliEligible = Boolean(KmliEligibility.kmliEligibility) && !params.jwtBasedAssertion;\n preloadUL = Boolean(KmliEligibility.preloadUL);\n return (0, _squid.$populate)(scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance(scope.token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(scope.token)\n });\n }).then(getKmliContentKey).then(function () {\n return resolveEligibilityConditions(params);\n });\n },\n // This should be called after checkout session is populated\n // Any data depending on the checkout session should be resolved here\n eligible: function eligible() {\n var eligibility = {};\n\n if (!expPromise) {\n _logger.$logger.debug('kmliUpsell_init_not_executed');\n return _angular.$q.resolve(eligibility);\n }\n return _angular.$q.all([expPromise, getIsNmj()]).then(function (result) {\n var experience = result[0];\n var isNmj = result[1];\n var eligibilityCriteria = {\n pxp: experience,\n profile_country: (0, _squid.$feature)('ryiOptIn'),\n isNotNmj: !isNmj\n };\n\n _logger.$logger.debug('kmliUpsell_eligiblityCheck', { eligibilityCriteria: eligibilityCriteria });\n\n var ineligibleReasons = _squid.$util.filter(Object.keys(eligibilityCriteria), function (key) {\n return !eligibilityCriteria[key];\n });\n var upsellFeatureEnabled = ineligibleReasons.length === 0;\n var regularLogin = kmliEligible && idToken;\n var autoLoginEnabled = isOneTouched || kmliChecked || scope.auth.remembered;\n\n eligibility.banner = upsellFeatureEnabled && (0, _squid.$feature)('optinToggle') && Boolean(isOneTouched || regularLogin);\n\n eligibility.interstitial = {\n eligible: upsellFeatureEnabled && !autoLoginEnabled && experience && experience.name && (experience.name.slice(-1) === '1' || experience.name.slice(-1) === '3') // use only treatment 1,3 for interstitial\n && experience.version,\n type: showReactivationInterstitial ? 'reactivation' : successfulLogin ? 'member' : '', // eslint-disable-line no-nested-ternary\n color: experience && experience.color,\n pxpVersion: experience && experience.pxpVersion\n };\n\n var elgStr = 'interstitial-' + eligibility.interstitial.eligible + '&toggle-';\n\n _logger.$logger.info('ryi_optin', {\n 'from': 'ryi_optin_elg_chk',\n 'to': 'process_ryi_optin_elg_chk',\n 'eligibility_reason': upsellFeatureEnabled ? elgStr + 'eligible' : elgStr + 'ineligible_' + ineligibleReasons.join()\n });\n _logger.$logger.debug('kmliUpsell_eligibility', {\n eligibility: eligibility,\n experience: experience,\n cases: {\n activeOT: isOneTouched,\n regularLogin: regularLogin,\n feature: upsellFeatureEnabled\n }\n });\n return eligibility;\n });\n },\n getOptions: function getOptions() {\n if (showReactivationInterstitial) {\n return {\n flowName: 'expiredUpsell'\n };\n }\n },\n getFPTIAttributes: function getFPTIAttributes() {\n if (showReactivationInterstitial) {\n return {\n stateName: 'KMLI_reactivation',\n transInfix: '_kmli_reactivation_'\n };\n } else {\n return {\n stateName: 'KMLI_UPSELL',\n transInfix: '_kmli_upsell_'\n };\n }\n }\n};\n\nangular.value(\"$KmliUpsell\", $KmliUpsell);\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$util;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_newMember.$NewMemberEligibility;\n\n_kmliEligibility.$KmliEligibility;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\n// module id = ../node_modules/xo-login-components/src/onetouch-interstitial/kmliUpsell.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _model = require('xo-tracking/dist/model');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoPasswordRecoveryDirective', {\n tag: 'xo-password-recovery',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n onContinue: {\n type: 'var',\n required: false\n },\n onPasswordRecovery: {\n type: 'var',\n required: false\n },\n onLoad: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n var PAYPAL = window.PAYPAL;\n\n this.loaded = false;\n var postMessageHandler = function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n switch (response.event) {\n case 'render':\n if (response.pageName === 'authflow/password-recovery/done') {\n _this.onPasswordRecovery();\n _logger.$logger.info('checkout_fpti', {\n from: 'password_recovery',\n to: 'process_password_recovery'\n });\n } else if (response.pageName === 'authflow/password-recovery') {\n _this.onLoad();\n _this.loaded = true;\n _logger.$logger.info('checkout_fpti', {\n from: 'password_recovery',\n to: 'prepare_password_recovery'\n });\n } else {\n // Do nothing\n }\n break;\n case 'passwordSetSuccess':\n _this.onContinue();\n break;\n default:\n break;\n }\n });\n };\n\n this.loadPasswordRecoveryFlow = function () {\n var isHermesInsideIframe = _squid.$util.isIFrame();\n\n if (isHermesInsideIframe) {\n _logger.$logger.info('MERCHANT_IFRAME_INTEGRATION');\n }\n var options = {\n targetElement: document.getElementById('injectedPasswordRecovery'),\n xhrRequest: isHermesInsideIframe,\n iframePathname: '/authflow/password-recovery',\n caller: 'secondaryIframe',\n queryParams: {\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.getLocaleCode(),\n 'contextId': _this.token,\n 'correlationId': _model.$CalDataModel.getCalCorrId()\n },\n onPostMessage: postMessageHandler\n };\n\n if (_squid.$config.deploy.isLocal()) {\n options.origin = 'https://' + _squid.$meta.stage;\n }\n\n if (PAYPAL && PAYPAL.unifiedLogin) {\n PAYPAL.unifiedLogin.inject(options);\n }\n };\n\n (0, _angular.$timeout)(this.loadPasswordRecoveryFlow);\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_model.$CalDataModel;\n\n_angular.$timeout;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/password-recovery/directive.js\n// module id = ../node_modules/xo-login-components/src/password-recovery/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/password-recovery/template.html\n// module id = ../node_modules/xo-login-components/src/password-recovery/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nvar _fpti = require('xo-tracking/dist/fpti');\n\nvar _model = require('xo-tracking/dist/model');\n\nvar _fn = require('../login/fn');\n\nvar _kmliEligibility = require('../login/kmliEligibility');\n\nvar _kmliUpsell = require('../onetouch-interstitial/kmliUpsell');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoUnifiedLogin', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n redirectUri: '=?',\n parentCallback: '=?',\n doneFn: '=?',\n errorFn: '=?',\n autoLogin: '=?',\n promptlogin: '=?',\n logoutCallback: '=?',\n kmli: '=?',\n preAuth: '=?',\n postAuth: '=?',\n flowcontext: '=?'\n },\n controller: ['$scope', function ($scope) {\n var ulClientRedirect = _squid.$util.param('ulClientRedirect') || '';\n var redirect_reason_timeout = 'timeout';\n var PAYPAL = window.PAYPAL || {};\n var failureReasons = {\n timeout: 'TIMEDOUT',\n error: 'INTERNALERROR',\n blacklistedDevice: 'PLATFORM_NOT_SUPPORTED',\n fallback: 'FALLBACK'\n };\n var enteringTime = Date.now();\n var loginAttemptedMethod = '';\n var userSelectedLanguage = '';\n\n _logger.$logger.debug('ENTERING_LOADING_UL_IFRAME', { enteringTime: enteringTime });\n $scope.locale = _squid.$LocaleModel.instance();\n $scope.forcedLogin = !$scope.autoLogin; // change to true during forcedLogin scenario\n\n if (_uiRouter.$stateParams.source === 'NOT_YOU' || _uiRouter.$stateParams.source === 'FRESH_START') {\n $scope.forcedLogin = false;\n }\n\n var ulTimeoutLimit = 35000;\n var ulTimeoutPromise = null;\n var loadCnt = 0;\n\n if (ulClientRedirect === redirect_reason_timeout) {\n _logger.$logger.info('ulClientRedirect_timeout');\n }\n\n function setLoading(tag, isRT) {\n _angular.$rootScope.$emit('loading');\n if (isRT && !$scope.auth.loggedIn()) {\n _angular.$rootScope.$emit('loadingMessage', {\n heading: _squid.$locale.content.get('base.loggingIn'),\n subHeading: _squid.$locale.content.get('login.rmSubHeading')\n });\n }\n loadCnt++;\n _logger.$logger.debug('setLoading by ' + tag + ' cnt ' + loadCnt);\n }\n\n function setLoaded(tag) {\n if (loadCnt > 0) {\n _angular.$rootScope.$emit('loaded');\n loadCnt--;\n } else {\n _logger.$logger.error('loadCnt_zero');\n }\n _logger.$logger.debug('setLoaded by ' + tag + ' cnt ' + loadCnt);\n }\n\n function fallback(product, reason, params) {\n throw new _squid.$FallbackError({\n product: product || 'ux',\n reason: reason,\n params: params\n });\n }\n\n function appLoginHandler(status) {\n _logger.$logger.debug('ULLOGIN_' + status);\n _logger.$logger.info('checkout_fpti', { 'from': 'LOGIN', 'to': 'prepare_login' });\n fallback('ux', 'ul_server_error');\n }\n\n var startTimerTS = void 0;\n\n function startTimer(tag) {\n startTimerTS = Date.now();\n _logger.$logger.debug('startTimer by ' + tag, {\n startTime: startTimerTS\n });\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'prepare_' + tag\n });\n\n ulTimeoutPromise = (0, _angular.$timeout)(function () {\n _logger.$logger.error('load_ul_timeout');\n var stop_time = Date.now();\n var time_taken = stop_time - startTimerTS;\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'process_timeout',\n 'int_error_code': 'ULLOGIN_TIMEOUT',\n 'int_error_description': 'ULLOGIN_TIMEOUT',\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline',\n 'page_load_time': time_taken\n });\n if (!_squid.$config.disableUlTimeout) {\n fallback('ux', 'ul_load_timeout');\n } else {\n // remove after ulAsLanding risky login\n var isRememberedUser = $scope.auth && $scope.auth.remembered;\n\n // remove after ulAsLanding starts to support tokenexchange\n var isTokenExchange = $scope.auth && $scope.auth.refreshToken() && !$scope.auth.accessToken();\n // Do trigger for remebered user\n // Do not trigger if already triggered before\n // Do not trigger for RT to AT case\n if (!ulClientRedirect && !isRememberedUser && !isTokenExchange) {\n $scope.auth.redirectToLogin(redirect_reason_timeout);\n }\n }\n }, ulTimeoutLimit);\n }\n\n function stopTimer(tag, keepLoading) {\n var stopTimerTS = Date.now();\n var timeTaken = stopTimerTS - startTimerTS;\n\n _logger.$logger.debug('stopTimer by ' + tag, {\n stopTimer: stopTimerTS,\n page_load_time: timeTaken\n });\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_Timer',\n 'to': 'process_' + tag,\n 'page_load_time': timeTaken\n });\n\n if (!keepLoading) {\n setLoaded('stopTimer');\n }\n\n if (ulTimeoutPromise) {\n _angular.$timeout.cancel(ulTimeoutPromise);\n }\n }\n\n function logFptiData(fptiData, eventName) {\n var errorDescription = void 0;\n\n switch (eventName) {\n case '2fa':\n errorDescription = '2fa_required';\n break;\n case 'safeRequired':\n errorDescription = 'SAFE_required';\n break;\n case 'stepupRequired':\n errorDescription = 'Login_ATO_required';\n break;\n default:\n // nothing to do here\n }\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': fptiData.fptiTransition,\n 'int_error_code': eventName,\n 'int_error_description': errorDescription,\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n }\n\n function buildRedirectURL(contingencyUrl, eventName) {\n var authChallengeUrl = contingencyUrl;\n var paramIndex = authChallengeUrl.indexOf('?');\n var urlParams = _squid.$util.params(authChallengeUrl.substring(paramIndex + 1));\n\n urlParams.returnUri = _squid.$config.ulMeta.authChallengeReturnUri;\n if (userSelectedLanguage) {\n urlParams['locale.x'] = _squid.$locale.getLocaleCode();\n urlParams['state'] += '&locale.test=' + _squid.$locale.getLocaleCode();\n }\n switch (eventName) {\n case '2fa':\n urlParams['state'] += '&acRedirect=2fa&ulMethod=' + loginAttemptedMethod;\n break;\n case 'safeRequired':\n urlParams['state'] += '&acRedirect=safe';\n break;\n case 'stepupRequired':\n urlParams['state'] += '&acRedirect=loginato';\n break;\n default:\n // nothing to do here\n }\n var redirectUrl = _squid.$util.buildURL(authChallengeUrl.substring(0, paramIndex), urlParams);\n\n return redirectUrl;\n }\n\n if (!_squid.$config.ulMeta) {\n _logger.$logger.error('config_no_ulMeta');\n }\n\n var ulMeta = _squid.$config.ulMeta || {};\n\n (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index2.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _index2.$CheckoutCartModel.instance($scope.token)\n }).then(function () {\n // if remebered user then update spinner text\n var isRememberedUser = $scope.auth.refreshToken();\n\n setLoading('loadUL', isRememberedUser);\n\n return _kmliEligibility.$KmliEligibility.init({\n forcedLogin: $scope.forcedLogin,\n logoutCallback: $scope.logoutCallback\n });\n }).then(function (eligibility) {\n ulTimeoutLimit = eligibility.ulTimeoutLimit ? eligibility.ulTimeoutLimit : ulTimeoutLimit;\n $scope.preloadUL = eligibility.preloadUL;\n $scope.safeEligibility = eligibility.safeEligibility;\n $scope.kmliEligibility = eligibility.kmliEligibility;\n\n if ($scope.preloadUL) {\n _logger.$logger.debug('ULSS_CLIENT_PRELOAD_TREATMENT');\n return (0, _squid.$populate)($scope, { ulSource: _auth.$ULoginModel.instance() });\n }\n\n if (!$scope.checkoutCart.isWalletTokenization() && !$scope.preloadUL) {\n $scope.ryiOptin = false;\n }\n return _angular.$q.resolve(true);\n }).then(function () {\n var rememberMe = !$scope.auth.refreshToken() ? false : $scope.kmliEligibility; // UL needs 'rememberMe=true' for RT exchange\n var app_int_type = _index.$DeviceInfo.getAppIntegrationType();\n\n if ($scope.auth.refreshToken() && !$scope.forcedLogin) {\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'prepare_login_ul_RM',\n app_int_type: app_int_type\n });\n }\n\n function getPostLoginFpti(data) {\n var result = void 0;\n\n if (data.event === 'tokenExchanged') {\n // This is either OneTouch or JWT (Partner Integration).\n if (data.authorizationToken === 'jwt_token') {\n result = { fptiState: 'LOGIN_UL_JWT', fptiTransition: 'process_UL_JWT' };\n } else {\n result = { fptiState: 'LOGIN_UL_RM', fptiTransition: 'process_RT_AT_exch' };\n }\n } else {\n var fptiTransitionName = data.keepMeLoggedIn === true ? 'process_login_UL_RM' : 'process_login_UL';\n var ULState = rememberMe === true ? 'LOGIN_UL_RM' : 'LOGIN_UL';\n\n result = { fptiState: ULState, fptiTransition: fptiTransitionName };\n }\n\n return result;\n }\n\n var cancelLocaleChange = void 0;\n\n function loginComplete(data) {\n var jwtBasedAssertion = data.event === 'tokenExchanged' && data.authorizationToken === 'jwt_token';\n var rtExchanged = data.event === 'tokenExchanged' && data.authorizationToken !== 'jwt_token';\n\n _squid.$promise.run(function () {\n // eslint-disable-line\n $scope.auth.stepupAuthRequired = false;\n\n stopTimer('loginComplete');\n\n if (cancelLocaleChange) {\n cancelLocaleChange();\n }\n\n $scope.auth.isKmliSet = data.keepMeLoggedIn || rtExchanged;\n $scope.auth.rtExchanged = rtExchanged;\n\n var fptiData = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': fptiData.fptiTransition\n });\n\n if (window.xprops && window.xprops.onAuth && data && data.accessToken) {\n return window.xprops.onAuth({\n accessToken: data.accessToken\n });\n }\n }).then(function () {\n var upsellEligibilityData = { ulData: data };\n\n // Doesn't exist in risky login case\n if ($scope.preAuth) {\n // Fires off eligibility + econsent + xosession in batch mode\n $scope.preAuth();\n }\n\n if (data.event === 'tokenExchanged') {\n if ((0, _squid.$feature)('rmSpinnerText') && !jwtBasedAssertion) {\n _angular.$rootScope.$emit('loadingMessage', {\n heading: _squid.$locale.content.get('base.planning'),\n subHeading: _squid.$locale.content.get('login.rmSubHeading')\n });\n } else {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('base.planning'));\n }\n }\n\n return $scope.auth.reload({\n resultModel: $scope.auth,\n headers: {\n 'x-paypal-internal-euat': data.accessToken\n },\n batch: {\n name: 'setbuyer',\n id: 'securityCtx',\n dependencies: []\n },\n success: function success() {\n $scope.auth.is_auth_api_call = data.event === 'tokenExchanged';\n angular.extend(upsellEligibilityData, {\n buyerCountry: $scope.auth.country,\n jwtBasedAssertion: jwtBasedAssertion,\n showReactivationInterstitial: $scope.showReactivationInterstitial\n });\n _kmliUpsell.$KmliUpsell.init(upsellEligibilityData);\n $scope.postAuth($scope.auth);\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, contingency) {\n $scope.auth.password = '';\n $scope.errorFn(name, contingency);\n }\n }\n });\n });\n }\n\n var ulEventHandlers = {\n 'loginRendered': function loginRendered(data) {\n var loadingCompletedTime = Date.now();\n\n _logger.$logger.debug('ULLOGIN_FRAME_LOADED_SUCCESSFULLY', {\n page_load_time: loadingCompletedTime - enteringTime\n });\n\n // Check if this is triggered by JWT assertion failure.\n // If so, do FPTI instrumentation.\n if (data.authorizationType === 'token' && data.authorizationToken === 'jwt_token') {\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_JWT',\n 'to': 'process_UL_JWT',\n 'int_error_code': 'unknown',\n 'int_error_description': 'JWT assertion failed',\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline'\n });\n }\n },\n 'loginFullyLoaded': function loginFullyLoaded(data) {\n stopTimer(data.event);\n\n if ($scope.notYou) {\n _angular.$rootScope.$emit('loaded');\n delete $scope.notYou;\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'prepare_login_ul'\n });\n _fn.$fn.sendTypingSpeedPayload('HermesUL');\n return $scope.logoutCallback();\n }\n\n if (!_uiRouter.$state.current.trackingData) {\n _uiRouter.$state.current.trackingData = { fptiState: 'ulLoginDefault' };\n }\n _uiRouter.$state.current.trackingData.pageQualifier = 'ulLogin';\n\n var loadingCompletedTime = Date.now();\n var timeTaken = loadingCompletedTime - enteringTime;\n\n _logger.$logger.debug('ULLOGIN_LOADED_SUCCESSFULLY', {\n page_load_time: timeTaken\n });\n\n if ($scope.preLoadedSource) {\n _logger.$logger.debug('ULSS_CLIENT_LOADED_SUCCESSFULLY', {\n page_load_time: timeTaken\n });\n }\n\n var ULState = rememberMe === true && !$scope.logoutCallback ? 'LOGIN_UL_RM' : 'LOGIN_UL';\n\n _logger.$logger.info('checkout_fpti', {\n 'from': ULState,\n 'to': 'prepare_iframe',\n 'page_load_time': timeTaken\n });\n\n var payload = {\n 'from': ULState,\n 'to': 'prepare_login_ul',\n 'app_int_type': app_int_type\n };\n\n if (_uiRouter.$stateParams.targetPage) {\n angular.extend(payload, { 'int_error_code': _uiRouter.$stateParams.targetPage });\n }\n\n _logger.$logger.info('checkout_fpti', payload);\n _fn.$fn.sendTypingSpeedPayload('HermesUL');\n _logger.$logger.flush();\n },\n 'loginEmailPasswordAttempted': function loginEmailPasswordAttempted() {\n loginAttemptedMethod = 'email';\n },\n 'loginPhonePinAttempted': function loginPhonePinAttempted() {\n loginAttemptedMethod = 'phone';\n },\n 'loginAttempted': function loginAttempted(data) {\n setLoading(data.event);\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('base.loggingIn'));\n if (rememberMe === true) {\n var kmliStatus = data.keepMeLoggedIn === true ? 'KMLI_CHECKED' : 'KMLI_UNCHECKED';\n\n _logger.$logger.debug(kmliStatus);\n }\n startTimer(data.event);\n },\n 'loginSuccess': loginComplete,\n 'tokenExchanged': function tokenExchanged(data) {\n _logger.$logger.info('TOKEN_EXCHANGED', {\n authorizationType: data.authorizationType,\n authorizationToken: data.authorizationToken || ''\n });\n loginComplete(data);\n },\n 'notYouLinkClicked': function notYouLinkClicked(data) {\n _angular.$rootScope.$emit('loading');\n $scope.notYou = true;\n _logger.$logger.info('checkout_fpti', {\n from: 'LOGIN_UL',\n to: 'login_with_diff_user'\n });\n startTimer(data.event);\n },\n '2fa': function fa(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n if (data.contingencyUrl) {\n _logger.$logger.debug('ULLOGIN_TWO_FA_AUTH_REDIRECT');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('ULLOGIN_TWO_FA_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'DEFAULT' });\n }\n },\n 'safeRequired': function safeRequired(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n if ($scope.safeEligibility && data.contingencyUrl) {\n if (data.authorizationType && data.authorizationType === 'token') {\n // for remembered user redirect to login instead of SAFE APP\n _logger.$logger.debug('LOGIN_REDIRECTION_SAFE_RM_USER');\n _uiRouter.$state.go('checkout.login', { targetPage: 'LOGIN_CONTINGENCY' });\n }\n _logger.$logger.debug('ULSAFE_REDIRECTION');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('ULSAFE_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n },\n 'serverError': function serverError(data) {\n stopTimer(data.event);\n var error_code = 'INVALID_USER';\n var error = {\n type: 'pageError',\n code: 500\n };\n\n // internalServerError, code: 500, take user to hermes login, no need for error message\n switch (data.reason) {\n case 'serverValidationError':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else if (loginAttemptedMethod === 'phone') {\n error_code = 'INVALID_PHONE_PIN';\n error.msg = _squid.$locale.content.get('login.invalidPin');\n } else {\n error.msg = _squid.$locale.content.get('login.invalidEmailPasswordPageError');\n }\n break;\n case 'invalidUser':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n }\n break;\n case 'internalServerError':\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else {\n error.msg = _squid.$locale.content.get('login.invalidEmailPasswordPageError');\n }\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n return appLoginHandler(failureReasons.error);\n case 'accountTemporaryLocked':\n case 'accountPermanentlyLocked':\n error.code = data.code;\n error.msg = _squid.$locale.content.get('login.accountLockedPageError');\n error_code = 'ACCOUNT_LOCKED';\n break;\n case 'riskDecline':\n error.code = data.code;\n if (data.authorizationType === 'token') {\n error_code = 'ONETOUCH_GENERIC_ERROR';\n error.msg = _squid.$locale.content.get('login.reactivateOneTouch');\n } else {\n error.msg = _squid.$locale.content.get('login.riskDeclinePageError');\n error_code = 'RISK_DECLINE';\n }\n break;\n default:\n // Do nothing\n }\n var fptidata = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptidata.fptiState,\n 'to': fptidata.fptiTransition,\n 'int_error_code': data.code,\n 'int_error_description': data.reason,\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n $scope.parentCallback('showErrorMessages', error_code);\n },\n 'client_validation_error': function client_validation_error(data) {\n var error = {\n type: 'pageError',\n msg: _squid.$locale.content.get('login.invalidEmailPasswordPageError')\n };\n var fptidata = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptidata.fptiState,\n 'to': fptidata.fptiTransition,\n 'int_error_code': data.event,\n 'int_error_description': 'invalid_credentials',\n 'error_type': 'soft_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n _fpti.$fpti.setupDataString(_uiRouter.$state.current, error);\n },\n 'stepupRequired': function stepupRequired(data) {\n stopTimer(data.event);\n var fptidata = getPostLoginFpti(data);\n\n logFptiData(fptidata, data.event);\n\n if (data.authorizationType && data.authorizationType === 'token') {\n // for remembered user redirect to login instead of AuthChallenge APP\n _logger.$logger.debug('LOGIN_ATO_RM_USER');\n\n // doing nothing, ul will render the login page, we need to show warning on top though\n var error_code = 'ONETOUCH_GENERIC_ERROR';\n } else if (data.contingencyUrl) {\n _logger.$logger.debug('LOGIN_ATO_USER');\n var authChallengeRedirectUrl = buildRedirectURL(data.contingencyUrl, data.event);\n\n _squid.$util.redirect(authChallengeRedirectUrl);\n } else {\n _logger.$logger.debug('LOGIN_ATO_GENERIC_ERROR');\n _uiRouter.$state.go('checkout.genericError', { code: 'RESTRICTED_USER' });\n }\n // to show error message on login page\n $scope.parentCallback('showErrorMessages', error_code); // eslint-disable-line block-scoped-var\n },\n 'captcha': function captcha(data) {\n var fptiData = getPostLoginFpti(data);\n\n _logger.$logger.info('checkout_fpti', {\n 'from': fptiData.fptiState,\n 'to': 'prepare_captcha'\n });\n },\n 'bodyClick': function bodyClick() {\n _angular.$rootScope.$broadcast('clickBody');\n },\n 'expiredRefreshToken': function expiredRefreshToken(data) {\n var treatment = data.treatment;\n\n _logger.$logger.info('EXPIRED_RT_' + treatment);\n _logger.$logger.info('checkout_fpti', {\n 'from': 'LOGIN_UL_RM',\n 'to': 'process_RT_AT_exch',\n 'int_error_code': 'expired_RT_Token',\n 'int_error_desc': treatment,\n 'error_source': 'unifiedloginnodeweb',\n 'error_type': 'soft_decline'\n });\n\n switch (treatment) {\n case 'showInterstitial':\n $scope.showReactivationInterstitial = true;\n break;\n\n case 'checkboxPreselectedWithNotification':\n $scope.errorFn('ONETOUCH_LEAVECHECKED', {}, 'warning');\n break;\n\n case 'checkboxNotPreselectedWithNotification':\n $scope.errorFn('ONETOUCH_REACTIVATE', {}, 'warning');\n break;\n\n case 'expiredRefreshTokenControl':\n break;\n\n default:\n break;\n }\n }\n };\n\n function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('ul_postmessaged_received', response);\n var data = response.data || response.error;\n var eventId = data && data.event;\n\n if (eventId) {\n _logger.$logger.debug('ULLOGIN_' + eventId, response);\n var handler = ulEventHandlers[eventId];\n\n if (handler) {\n handler(data);\n }\n }\n });\n }\n\n function loadUnifiedLogin(iframeCopy) {\n var queryString = _squid.$util.queryStringSplice(_squid.$util.queryString(), {\n 'flow': '1-P',\n 'token': $scope.token\n }, ['cmd']);\n var isHermesInsideIframe = _squid.$util.isIFrame();\n\n if (isHermesInsideIframe) {\n _logger.$logger.info('MERCHANT_IFRAME_INTEGRATION');\n }\n\n var options = {\n targetElement: document.getElementById('injectedUnifiedLogin'),\n xhrRequest: isHermesInsideIframe,\n queryParams: {\n 'stsRedirectUri': ulMeta.stsReturnUrl,\n 'country.x': $scope.locale.country,\n 'locale.x': $scope.locale.getLocaleCode(),\n 'returnUri': ulMeta.ulReturnUri,\n 'state': queryString,\n 'flowId': $scope.token,\n 'correlationId': _model.$CalDataModel.getCalCorrId()\n },\n config: {\n title: 'PayPal - ' + _squid.$locale.content.get('common.login')\n },\n onPostMessage: postMessageHandler\n };\n\n if (_squid.$meta.baToken) {\n angular.extend(options.queryParams, { 'fn_dt': _squid.$meta.baToken });\n }\n\n if ($scope.forcedLogin) {\n angular.extend(options.queryParams, { 'prompt': 'login' });\n }\n\n if ($scope.logoutCallback) {\n angular.extend(options.queryParams, { 'showNotYou': true });\n }\n\n if (_uiRouter.$stateParams.source !== 'NOT_YOU') {\n $scope.flowcontext = $scope.checkoutCart.flow_context;\n } else {\n $scope.flowcontext = $scope.checkoutCart.flow_context_without_email;\n }\n\n if ($scope.flowcontext) {\n angular.extend(options.queryParams, { 'flowContextData': $scope.flowcontext });\n }\n\n if (_squid.$config.deploy.isLocal()) {\n options.origin = 'https://' + _squid.$meta.stage;\n if (!_squid.$meta.stage) {\n // if no stage url shows up then use any backup url for origin\n var backupURL = _squid.$config.onboarding.url.split('/webapps/')[0];\n options.origin = backupURL;\n }\n }\n\n // preload only for first time login attempts\n if ($scope.preloadUL && $scope.ulSource && $scope.ulSource.src && !$scope.forcedLogin && _uiRouter.$stateParams.source !== 'NOT_YOU' && !userSelectedLanguage && rememberMe) {\n _logger.$logger.debug('ULSS_CLIENT_PRELOAD_INJECT');\n $scope.preLoadedSource = true;\n options.preLoadedSource = decodeURI($scope.ulSource.src);\n }\n\n function ulInvoke() {\n if (PAYPAL && PAYPAL.unifiedLogin) {\n startTimer('ulInvoke');\n if (!iframeCopy) {\n PAYPAL.unifiedLogin.inject(options);\n } else {\n PAYPAL.unifiedLogin.copyPasteIframe({\n targetElement: document.getElementById('injectedUnifiedLogin'),\n onPostMessage: postMessageHandler\n });\n }\n } else {\n return appLoginHandler(failureReasons.fallback);\n }\n }\n\n var jwtToken = _squid.$util.param('jwtToken');\n\n if (jwtToken) {\n options.queryParams.jwtToken = jwtToken;\n }\n\n if (rememberMe === true) {\n options.queryParams.rememberMe = true;\n // NOTE: `xo_hermesnode_kmli_upsell` has been ramped to 100%\n // and it's always return `xo_hermesnode_kmli_content_t1`\n options.queryParams.rememberMeContent = 1;\n }\n return ulInvoke();\n }\n\n var cancelAllLoaded = _angular.$rootScope.$on('allLoaded', function () {\n cancelLocaleChange = $scope.$on('localeChange', function () {\n userSelectedLanguage = _squid.$locale.lang;\n setLoading('localeChange');\n loadUnifiedLogin();\n });\n cancelAllLoaded();\n });\n\n $scope.$on('$destroy', cancelAllLoaded);\n loadUnifiedLogin(ulMeta.iframeCopy);\n });\n }]\n };\n});\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$LocaleModel;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.$promise;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_auth.$AuthModel;\n\n_auth.$ULoginModel;\n\n_index2.$CheckoutAppDataModel;\n\n_index2.$CheckoutCartModel;\n\n_fpti.$fpti;\n\n_model.$CalDataModel;\n\n_fn.$fn;\n\n_kmliEligibility.$KmliEligibility;\n\n_kmliUpsell.$KmliUpsell;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/unified-login/directive.js\n// module id = ../node_modules/xo-login-components/src/unified-login/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/unified-login/template.html\n// module id = ../node_modules/xo-login-components/src/unified-login/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ul = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _config = require('squid/dist/core/config');\n\nvar _model = require('xo-tracking/dist/model');\n\nvar _auth = require('xo-models/src/auth');\n\nrequire('ul-inline/dist/inject');\n\n/**\n * Created by upigilam on 4/8/16.\n * UL handler is to exchange ST to RT exchanges.\n */\n\nvar $ul = exports.$ul = {\n\n optInToOneTouch: function optInToOneTouch(token, locale_country, locale_code, silent, fptiData, flowName) {\n\n return (0, _angular.$q)(function (resolve, reject) {\n\n var PAYPAL = window.PAYPAL || {};\n var ulTimeOutValue = 10000;\n var ulTimeoutPromise = null;\n\n function logSubmit(data) {\n var fptiPayload = {\n 'from': fptiData && fptiData.stateName ? fptiData.stateName : 'poma_page',\n 'to': fptiData && fptiData.transInfix ? fptiData.transInfix : 'process_kmli_optin'\n };\n if (data && data.errorCode) {\n angular.extend(fptiPayload, {\n 'int_error_code': data.errorCode,\n 'error_type': 'hard_decline',\n 'error_source': 'unifiedloginnodeweb'\n });\n }\n _logger.$logger.info('checkout_fpti', fptiPayload);\n }\n\n function failureHandler(reason) {\n logSubmit({ errorCode: reason });\n _logger.$logger.info('UL_Loading_error_' + reason);\n return reject(new Error('UL_Loading_error_' + reason));\n }\n\n function startTimer(tag) {\n _logger.$logger.info('UL_START_TIMER_' + tag);\n ulTimeoutPromise = (0, _angular.$timeout)(function () {\n failureHandler('timed_out');\n if (!silent) {\n _angular.$rootScope.$emit('loaded');\n }\n }, ulTimeOutValue);\n }\n\n function stopTimer(tag) {\n if (!silent) {\n _angular.$rootScope.$emit('loaded');\n }\n _logger.$logger.info('UL_STOP_TIMER_' + tag);\n\n if (ulTimeoutPromise) {\n _angular.$timeout.cancel(ulTimeoutPromise);\n ulTimeoutPromise = null;\n }\n }\n\n var ulEventHandlers = {\n 'oneTouchInterstitialOptInLoaded': function oneTouchInterstitialOptInLoaded(data) {\n // Don't start or stop timer. Flow should not get block even the post messages is not returned from UL\n },\n 'oneTouchInterstitialOptInAttempted': function oneTouchInterstitialOptInAttempted(data) {\n // Don't start or stop timer. Flow should not get block even the post messages is not returned from UL\n },\n 'oneTouchInterstitialOptInSuccess': function oneTouchInterstitialOptInSuccess(data) {\n stopTimer(data.event);\n logSubmit();\n // UL will drop RT cookie and respond oneTouchInterstitialOptInSuccess postmessage.\n _auth.$AuthModel.instance().retrieve().then(function (auth) {\n auth.refresh_token = true;\n });\n return resolve();\n },\n 'oneTouchInterstitialOptInFailed': function oneTouchInterstitialOptInFailed(data) {\n stopTimer(data.event);\n failureHandler(data.event);\n },\n 'oneTouchInterstitialOptInNotAuthorized': function oneTouchInterstitialOptInNotAuthorized(data) {\n // removing the element - ulTargetAttribute from DOM, to avoid any other accidental\n // actions on the element which is causing excess spinners later.\n var child = document.getElementById('ulTargetAttribute');\n child.parentNode.removeChild(child);\n stopTimer(data.event);\n failureHandler(data.event);\n }\n };\n\n function postMessageHandler(response) {\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('ul_postmessaged_received', response);\n var data = response.data || response.error;\n var eventId = data && data.event;\n if (eventId) {\n _logger.$logger.debug('UL' + eventId, response);\n var handler = ulEventHandlers[eventId];\n if (handler) {\n handler(data);\n }\n }\n });\n }\n\n function loadOneTouchUpsell() {\n if (!silent) {\n _angular.$rootScope.$emit('loading');\n }\n\n var ulTargetAttribute = document.createElement('div');\n ulTargetAttribute.setAttribute('id', 'ulTargetAttribute');\n\n // setting display to None leading FireFox hiding all the ul elements due to which body click doesn't work\n // ulTargetAttribute.style.display = \"None\";\n\n // Making 0px, it works for FF, Chrome, Safari\n ulTargetAttribute.style.width = '0px';\n ulTargetAttribute.style.margin = '0px';\n ulTargetAttribute.style.height = '0px';\n ulTargetAttribute.style.padding = '0px';\n\n document.body.appendChild(ulTargetAttribute);\n\n var options = {\n targetElement: document.getElementById('ulTargetAttribute'),\n queryParams: {\n 'country.x': locale_country,\n 'locale.x': locale_code,\n 'flowId': token,\n 'correlationId': _model.$CalDataModel.getCalCorrId(),\n 'flowName': flowName ? flowName : 'checkoutOnlyMember' // default is poma flow\n },\n iframePathname: '/signin/activate-one-touch',\n onPostMessage: postMessageHandler\n };\n\n if (_config.$config.deploy.isLocal()) {\n if (_config.$meta.stage) {\n options.origin = 'https://' + _config.$meta.stage;\n } else {\n // if no stage url shows up then use any backup url for origin\n options.origin = _config.$config.urls.onboarding.split('/webapps/')[0];\n }\n }\n\n if (PAYPAL && PAYPAL.unifiedLogin) {\n startTimer('initializeUl');\n PAYPAL.unifiedLogin.inject(options);\n } else {\n failureHandler('PAYPAL.unifiedLogin_undefined');\n }\n }\n\n loadOneTouchUpsell();\n });\n }\n};\n\n// Loads unifiedLogin key on to PAYPAL window object\n\n\nangular.value(\"$ul\", $ul);\n_angular.$rootScope;\n\n_angular.$q;\n\n_angular.$timeout;\n\n_logger.$logger;\n\n_config.$config;\n\n_config.$meta;\n\n_model.$CalDataModel;\n\n_auth.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-login-components/src/unified-login/ul.js\n// module id = ../node_modules/xo-login-components/src/unified-login/ul.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoBackupLabel = undefined;\n\nvar _squid = require('squid');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles.less');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoBackupLabel = exports.$xoBackupLabel = _squid.$Component.extend('$xoBackupLabel', {\n tag: 'xo-backup-label',\n template: _template2['default'],\n props: {\n plan: {\n type: 'var',\n required: false\n },\n hasMask: {\n type: 'var',\n required: false\n }\n }\n});\n\nangular.value(\"$xoBackupLabel\", $xoBackupLabel);\n_squid.$Component;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/backup-label/directive.js\n// module id = ../node_modules/xo-member-components/src/backup-label/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n {{plan.backup.name}}\\n \\n x-{{plan.backup.last4}} {{ content('paymentMethod.backup') }}\\n {{plan.backup.last4}} {{ content('paymentMethod.backup') }}\\n \\n
    \"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/backup-label/template.html\n// module id = ../node_modules/xo-member-components/src/backup-label/template.html\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _fi = require('xo-models/src/fi');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(0, _squid.$registerDirective)('xo-billing-address', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n editUri: '=?'\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('xo-billing-address_enter');\n }\n },\n controller: ['$scope', function ($scope) {\n var getBillingAddress = function getBillingAddress(cardId) {\n return (0, _squid.$populate)($scope, {\n cardInfo: _fi.$CardInfoModel.instance(cardId)\n }).then(function () {\n return $scope.cardInfo && $scope.cardInfo.billingAddress;\n });\n };\n\n var updateScopeData = function updateScopeData(checkoutSession) {\n $scope.selectedCardId = $scope.checkoutSession.plan.sources[0].instrument_id;\n return getBillingAddress($scope.selectedCardId).then(function (address) {\n $scope.address = address;\n $scope.line3 = address.city + ', ' + address.state + ' ' + address.postal_code;\n });\n };\n\n (0, _squid.$populate)($scope, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance($scope.token)\n }).then(function () {\n $scope.header = _squid.$locale.content.get('addCard.billingAddress');\n $scope.updateType = _squid.$locale.content.get('common.edit');\n return updateScopeData($scope.checkoutSession);\n }); // populate\n\n $scope.$watchCollection('checkoutSession', function (newVal) {\n if (newVal) {\n // Clear the cached CardInfo so we can get the latest associated Billing Address\n if ($scope.cardInfo) {\n $scope.cardInfo.invalidate();\n }\n }\n return updateScopeData($scope.checkoutSession);\n });\n }]\n };\n});\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$registerDirective;\n\n_logger.$logger;\n\n_checkout.$CheckoutSessionModel;\n\n_fi.$CardInfoModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/billing-address/directive.js\n// module id = ../node_modules/xo-member-components/src/billing-address/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    {{header}}
    \\n
    \\n
    \\n {{address.line1}},\\n {{address.line2}},\\n {{line3}}\\n \\n {{updateType}}\\n \\n\\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/billing-address/template.html\n// module id = ../node_modules/xo-member-components/src/billing-address/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _fiMeta = require('xo-models/src/fiMeta');\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles.less');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * xo-card-backup\n * Render a dropdown for user to select their backup instrument in case their card\n * gets declined\n * @params {String} token - token for models\n */\nexports['default'] = _squid.$Component.extend('$CardBackupComponent', {\n tag: 'xo-card-backup',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n // Since selected method means the user might have something different selected compared to the checkout session,\n // might need to have this passed in to filter out the plan\n selectedmethod: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve(),\n fiMeta: _fiMeta2['default'].instance(this.props.token).fetch()\n };\n }\n },\n actions: {\n getAllowedBackups: function getAllowedBackups() {\n var planList = this.models.checkoutSession.getPlanList() || [];\n var currentPlanId = this.props.selectedmethod ? this.props.selectedmethod.planId : planList[0].planId;\n\n return planList.filter(function (a) {\n return a.planId !== currentPlanId && a.primaryFs && a.primaryFs.type === 'CARD' && a.secondaryFIs === false;\n });\n },\n renderCover: function renderCover() {\n var backup = this.models.checkoutSession.cardBackup.getPlan();\n\n if (!backup) {\n return (0, _squid.$renderContent)('paymentMethod.chooseBackup');\n } else {\n return this.actions.renderOption(backup) + ' ' + (0, _squid.$renderContent)('paymentMethod.backup');\n }\n },\n renderOption: function renderOption(plan) {\n return this.models.fiMeta.getName(plan.primaryFs) + ' x-' + plan.primaryFs.lastDigits;\n },\n selectBackup: function selectBackup(plan) {\n var _this = this;\n\n var selectedmethodPlan = this.props.selectedmethod ? (this.models.checkoutSession.getPlanList() || []).find(function (p) {\n return p.planId === _this.props.selectedmethod.planId;\n }) : null;\n\n this.models.checkoutSession.cardBackup.setPlan(plan, selectedmethodPlan);\n this.actions.toggleDropdown();\n },\n toggleDropdown: function toggleDropdown() {\n var _this2 = this;\n\n this.showDropdown = !this.showDropdown;\n\n if (this.showDropdown) {\n (0, _angular.$timeout)(function () {\n return _this2.actions.showDropdownUI();\n });\n }\n },\n\n // UI change - the box is right aligned, but need to position it so that\n // it doesn't overflow on the left\n showDropdownUI: function showDropdownUI(open) {\n var position = this.$element.find('.card-backup-dropdown').position();\n\n this.$element.find('.card-backup-options').css({\n right: position && position.left < 0 ? position.left : 0,\n visibility: 'visible'\n });\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this3 = this;\n\n // Close the dropdown if focus leaves the menu\n _angular.$document.on('focusin.cardBackup', function (event) {\n if (_this3.showDropdown && !_this3.$element[0].contains(event.target)) {\n _this3.showDropdown = false;\n }\n });\n },\n exit: function exit() {\n // Clean up the dropdown handler\n _angular.$document.off('focusin.cardBackup');\n }\n }\n});\n\n\n_angular.$document;\n\n_angular.$timeout;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_checkout.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/card-backup/directive.js\n// module id = ../node_modules/xo-member-components/src/card-backup/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n {{content('paymentMethod.cardBackupDescription')}}\\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/card-backup/template.html\n// module id = ../node_modules/xo-member-components/src/card-backup/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _factory = require('./factory');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoDonate', {\n tag: 'xo-donate',\n template: _template2['default'],\n props: {\n merchantName: {\n type: 'str',\n required: false\n }\n },\n actions: {\n showConsent: function showConsent() {\n this.showConsentBox = !this.showConsentBox;\n _factory.$GiveAtCheckoutFactory.set({ donateCheckboxSelected: this.showConsentBox });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.showConsentBox = false;\n },\n populate: function populate() {\n this.isWpsflow = _factory.$GiveAtCheckoutFactory.get().isWPSflow;\n this.charity = _factory.$GiveAtCheckoutFactory.get().charity;\n if (this.charity) {\n this.formattedAmount = (0, _squid.formatCurrency)(this.charity.amount, this.charity.currency, false, 'Currency');\n }\n this.tracking = _factory.$GiveAtCheckoutFactory.get().tracking;\n }\n }\n});\n\n\n_squid.$Component;\n\n_squid.formatCurrency;\n\n_factory.$GiveAtCheckoutFactory;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/give-at-checkout/directive.js\n// module id = ../node_modules/xo-member-components/src/give-at-checkout/directive.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _marketingoffer = require('xo-models/src/marketingoffer/');\n\nfunction parseMessage(mors) {\n if (!(mors && mors.data)) {\n return {};\n }\n var touchpoints = mors.data.touchpoint_messages || [];\n\n if (Array.isArray(touchpoints) && touchpoints.length > 0) {\n var messages = touchpoints[0].messages || [];\n\n var chosen = messages.filter(function (message) {\n return message.content && message.content.json && message.content.json.model_score;\n }).reduce(function (prev, curr) {\n return prev && prev.content.json.model_score > curr.content.json.model_score ? prev : curr;\n }, undefined);\n if (chosen) {\n var charity = chosen.content.json;\n var tracking = chosen.tracking_details;\n\n if (charity) {\n return { charity: charity, tracking: tracking };\n }\n }\n }\n return {};\n}\n\nfunction parseUserType(charity) {\n if (charity && charity.user_type) {\n return charity.user_type;\n }\n var DONOR_MODELS = ['0', '1'];\n if (charity && charity.model_id) {\n return DONOR_MODELS.indexOf(charity.model_id) >= 0 ? 'DONOR' : 'NONDONOR';\n }\n}\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$GiveAtCheckoutFactory', function () {\n var state = {\n donateCheckboxSelected: false,\n eligible: false,\n charity: undefined,\n tracking: undefined,\n isWPSflow: undefined\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n var decideEligibility = function decideEligibility() {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token)\n }).then(function () {\n return _marketingoffer.$MessageDiscoverModel.instance().save({\n silent: true,\n data: {\n 'country_code': _squid.$locale.getCountryCodeISO(),\n 'language': _squid.$locale.getLocaleCode(),\n 'identity_context': [{\n 'type': 'PAYER_ID',\n 'value': models.checkoutSession.get('payer.id')\n }, {\n 'type': 'MERCHANT_PAYER_ID',\n 'value': models.payee && models.payee.merchant && models.payee.merchant.id\n }],\n 'recommendation_context': {\n 'touchpoint_details': [{\n 'code': 'hermes_gac_touchpoint',\n 'message_count': -1\n }]\n }\n },\n error: function error(err) {\n return _squid.$promise.reject(err);\n }\n });\n }).then(function (mors) {\n var _parseMessage = parseMessage(mors),\n charity = _parseMessage.charity,\n tracking = _parseMessage.tracking;\n\n if (charity) {\n state.charity = charity;\n state.tracking = tracking;\n _logger.$logger.info('mors_eligibility', {\n eligible: !!charity\n });\n\n return charity;\n }\n }).then(function (charity) {\n if (!charity) {\n return;\n }\n var userType = parseUserType(charity);\n if (userType) {\n var paymentAction = models.checkoutCart && models.checkoutCart.get('payment_action');\n var currencyCode = models.checkoutCart && models.checkoutCart.get('purchase.amounts.total.currency_code');\n var buyerCountry = _squid.$locale.country;\n var merchantId = models.payee && models.payee.getId();\n var merchantCountry = models.checkoutAppData && models.checkoutAppData.get('merchant.merchant_country');\n var billingAgreement = models.checkoutCart && models.checkoutCart.isBilling();\n var isWPSflow = models.checkoutAppData && !!models.checkoutAppData.is_wps_flow();\n var is_wps_subscription_flow = models.checkoutAppData && !!models.checkoutAppData.is_wps_subscription_flow();\n var is_buy_now_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_buy_now_flow;\n var is_cart_upload_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_cart_upload_flow;\n var is_shopping_cart_flow = models.checkoutAppData && !!models.checkoutAppData.flags.is_shopping_cart_flow;\n var is_invoice_flow = models.checkoutAppData && !!models.checkoutAppData.isInvoiceFlow();\n var buyerID = models.checkoutSession.get('payer.id');\n var isMobile = _index.$DeviceInfo.isMobile();\n var isCorp = _squid.$meta.corp;\n\n state.isWPSflow = isWPSflow;\n\n _logger.$logger.info('gac_pxpContext', {\n userType: userType,\n currencyCode: currencyCode,\n paymentAction: paymentAction,\n merchantCountry: merchantCountry,\n buyerCountry: buyerCountry,\n billingAgreement: billingAgreement,\n isWPSflow: isWPSflow,\n is_wps_subscription_flow: is_wps_subscription_flow,\n is_buy_now_flow: is_buy_now_flow,\n is_cart_upload_flow: is_cart_upload_flow,\n is_shopping_cart_flow: is_shopping_cart_flow,\n is_invoice_flow: is_invoice_flow,\n buyerID: buyerID,\n isMobile: isMobile,\n isCorp: isCorp\n });\n\n var pageName = 'xo_hermes_gac';\n var wpsTreatment = isWPSflow ? 'xo_hermes_gac_treatment_wps' : 'xo_hermes_gac_treatment';\n var pxpTreatment = userType === 'DONOR' ? wpsTreatment : 'xo_hermes_gac_nondonor_treatment';\n\n return (0, _squid.$pxp)(pageName, {\n 'uid': buyerID,\n 'ctx.userType': userType,\n 'ctx.currencyCode': currencyCode,\n 'ctx.paymentAction': paymentAction,\n 'ctx.merchantId': merchantId,\n 'ctx.merchantCountry': merchantCountry,\n 'ctx.buyerCountry': buyerCountry,\n 'ctx.isBillingAgreement': billingAgreement,\n 'ctx.isWpsFlow': isWPSflow,\n 'ctx.isSubscriptionFlow': is_wps_subscription_flow,\n 'ctx.isBuyNowFlow': is_buy_now_flow,\n 'ctx.isCartUploadFlow': is_cart_upload_flow,\n 'ctx.isShoppingCartFlow': is_shopping_cart_flow,\n 'ctx.isInvoiceFlow': is_invoice_flow,\n 'ctx.isMobile': isMobile,\n 'ctx.isCorp': isCorp\n }, pxpTreatment, false, true);\n }\n }).then(function (pxp) {\n if (pxp) {\n var pxpResult = !!pxp;\n\n _logger.$logger.info('gac_pxpResult', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n\n if (state.eligible && state.tracking && state.tracking.impression_url) {\n _marketingoffer.$fireMORSBeacon.fireBeacon(state.tracking.impression_url);\n }\n } else {\n state.eligible = false;\n }\n })['catch'](function (err) {\n _logger.$logger.error('gac_eligibility', err);\n state.eligible = false;\n return state.eligible;\n });\n };\n\n return {\n get: get,\n set: set,\n decideEligibility: decideEligibility\n };\n});\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_marketingoffer.$MessageDiscoverModel;\n\n_marketingoffer.$fireMORSBeacon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/give-at-checkout/factory.js\n// module id = ../node_modules/xo-member-components/src/give-at-checkout/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n
    \\n
    \\n \\n \\n
    \\n
    \\n
    \\n

    \\n {{content('donate.ecFlowConsentLine1')}}\\n

    \\n

    \\n {{content('donate.ecFlowConsentLine2')}}\\n

    \\n

    \\n {{content('donate.ecFlowConsentLine3')}}\\n

    \\n
    \\n
    \\n

    \\n {{content('donate.wpsFlowConsentLine1')}}\\n

    \\n

    \\n {{content('donate.wpsFlowConsentLine2')}}\\n

    \\n
    \\n
    \\n\\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/give-at-checkout/template.html\n// module id = ../node_modules/xo-member-components/src/give-at-checkout/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoMsbOffer = undefined;\n\nvar _squid = require('squid');\n\nrequire('xo-ui-components/src/tooltip/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Component for rendering Merchant specific balance on the review page for multi fi\n * It renders on top of the list of the FI's\n * As far as we know - there can only be 1 msb applied per plan\n * and so each should have \"incentive\" attached\n*/\nvar $xoMsbOffer = exports.$xoMsbOffer = _squid.$Component.extend('$xoMsbOffer', {\n tag: 'xo-msb-offer',\n template: _template2['default'],\n props: {\n /**\n * incentive field from FI object\n */\n msb: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n var msb = this.props.msb;\n\n\n this.amount = (0, _squid.formatCurrency)(msb.amount.value, msb.amount.currency);\n this.minPurchaseAmount = msb.minPurchaseAmount;\n }\n }\n});\n\nangular.value(\"$xoMsbOffer\", $xoMsbOffer);\n_squid.$Component;\n\n_squid.formatCurrency;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/msb-offer/directive.js\n// module id = ../node_modules/xo-member-components/src/msb-offer/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n \\n
    \\n \\n {{ content('paymentMethod.msbOffer') }}\\n \\n\\n
    \\n {{ content('paymentMethod.msbHelpText', {amount: amount})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n
    \\n\\n
    \\n\\n
    \\n
    \\n \\n
    \\n

    {{ content('paymentMethod.msbToolTipOffer') }}

    \\n
    \\n

    \\n {{ content('paymentMethod.msbToolTipText', {amount: amount, minimumPurchase: minPurchaseAmount}) }}\\n

    \\n

    \\n {{ content('paymentMethod.msbToolTipText2', {amount: amount}) }}\\n

    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/msb-offer/template.html\n// module id = ../node_modules/xo-member-components/src/msb-offer/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoNoBalance = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _factory = require('./factory');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * Banner with text messages that user have pending (not claimed yet) balance available,\n * but needs to go through verification steps on 8ball\n *\n * Used in the following pages:\n * 1. review page - hermesnodeweb/public/pages/xo-review\n * 2. add card contingency page - hermesnodeweb/public/pages/xo-add-card\n */\nvar $xoNoBalance = exports.$xoNoBalance = _squid.$Component.extend('$xoNoBalance', {\n tag: 'xo-no-balance-banner',\n template: _template2['default'],\n actions: {\n /**\n * event when clicking on info icon to show secondary message\n */\n onShowSecondaryMsg: function onShowSecondaryMsg($event) {\n $event.preventDefault();\n this.showSecondaryMsg = true;\n _logger.$logger.info('no_balance', {\n from: 'no_balance',\n to: 'no_balance_click_info'\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n var _$NoBalanceFactory$ge = _factory.$NoBalanceFactory.get(),\n showMsgWithAmount = _$NoBalanceFactory$ge.showMsgWithAmount,\n pendingBalances = _$NoBalanceFactory$ge.pendingBalances;\n\n if (showMsgWithAmount) {\n var balance1 = pendingBalances[0],\n balance2 = pendingBalances[1];\n\n\n if (pendingBalances.length === 1) {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsgWithAmt', { amt: (0, _squid.formatCurrency)(balance1.value, balance1.currency) });\n } else {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsgWithMultiAmt', {\n amt1: (0, _squid.formatCurrency)(balance1.value, balance1.currency),\n amt2: (0, _squid.formatCurrency)(balance2.value, balance2.currency)\n });\n }\n } else {\n this.msg = (0, _squid.$renderContent)('noBalance.primaryMsg');\n }\n }\n }\n});\n\nangular.value(\"$xoNoBalance\", $xoNoBalance);\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.formatCurrency;\n\n_logger.$logger;\n\n_factory.$NoBalanceFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/no-balance/directive.js\n// module id = ../node_modules/xo-member-components/src/no-balance/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _wallet = require('xo-models/src/wallet');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _angular = require('angular');\n\n/**\n * Money Waiting (no balance) factory\n * story with details - https://rally1.rallydev.com/#/42145958143/detail/userstory/243026109436\n */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$NoBalanceFactory', function () {\n\n /**\n * eligible - to show / hide xo-no-balance component\n * showMsgWithAmount - to show / hide message with amount\n * pendingBalances - list of pending(non claimed yet) balances amounts\n * isAlreadyShown - was banner already shown or not\n */\n var state = {\n eligible: false,\n showMsgWithAmount: false,\n pendingBalances: undefined,\n isAlreadyShown: false\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n /**\n * call \"No Balance\" pxp:\n * stage url - https://engineering.paypalcorp.com/pxptoolstage/configuration?exptId=5007\n * xo_hermes_nobalance_treatment1 - for showing message without amount\n * xo_hermes_nobalance_treatment2 - for showing message with amount\n */\n var getPxp = function getPxp() {\n return (0, _squid.$pxp)('xo_hermes_nobalance', 'xo_hermes_nobalance_treatment(1|2)', undefined, false, true);\n };\n\n /**\n * Decide to show / hide message with amount / amounts\n * @param {Object} pxpResult - pxp result\n * @param {Object} pendingBalances - array of pending (non claimed yet) balances\n */\n var shouldShowMsgWithAmount = function shouldShowMsgWithAmount(_ref) {\n var pxpResult = _ref.pxpResult,\n pendingBalances = _ref.pendingBalances;\n\n return pendingBalances.length > 0 && pxpResult && pxpResult.treatment_name === 'xo_hermes_nobalance_treatment2';\n };\n\n /**\n * req.user has noBalance flag in case there is pending balance availaible which is getting mapped to auth model\n * mapping - https://github.paypal.com/Checkout/xo-hercules/blob/master/apis/auth/outputMapper.js\n */\n var hasUserPendingBalance = function hasUserPendingBalance() {\n return _auth.$AuthModel.instance().no_balance;\n };\n\n /**\n * Mark as already shown, for example:\n * if user doesn't have any FI -> user will see \"no balance\" banner on Add Card Page.\n * And so after user adds cart successfully -> we should not show banner on review page\n */\n var markAsAlreadyShown = function markAsAlreadyShown() {\n state.isAlreadyShown = true;\n state.eligible = false;\n };\n\n /**\n * experiment is eligible in the following cases:\n * 1. user has `no_balance` flag as `true` - means there is pending balance that user can claim, but need to go through verification first on 8ball\n * 2. user has less than 3 balance accounts\n * 3. pxp returns treatment1 or treatment2\n */\n var decideEligibility = function decideEligibility() {\n if (state.isAlreadyShown) {\n return _squid.$promise.resolve({});\n }\n\n var isUserWithPendingBalance = hasUserPendingBalance();\n\n return _wallet.$WalletModel.instance(_angular.$rootScope.token).retrieve().then(function (wallet) {\n var pendingBalances = wallet.getAmountsOfBalances();\n var isNoBalanceEligible = isUserWithPendingBalance && pendingBalances.length > 0 && pendingBalances.length < 3;\n\n var balance1 = pendingBalances[0],\n balance2 = pendingBalances[1];\n\n\n _logger.$logger.info('no_balance', {\n from: 'no_balance',\n to: 'no_balance_eligibility',\n number_of_balances: pendingBalances.length,\n no_balance_eligible: isNoBalanceEligible,\n balance_amount1: balance1 && balance1.value,\n balance_currency1: balance1 && balance1.currency,\n balance_amount2: balance2 && balance2.value,\n balance_currency2: balance2 && balance2.currency\n });\n\n if (!isNoBalanceEligible) {\n return _squid.$promise.resolve({});\n }\n\n return getPxp().then(function (pxpResult) {\n state.eligible = !!pxpResult;\n if (state.eligible) {\n state.pendingBalances = pendingBalances;\n state.showMsgWithAmount = shouldShowMsgWithAmount({ pxpResult: pxpResult, pendingBalances: pendingBalances });\n }\n return state;\n });\n });\n };\n\n return {\n get: get,\n set: set,\n markAsAlreadyShown: markAsAlreadyShown,\n decideEligibility: decideEligibility\n };\n});\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n_logger.$logger;\n\n_wallet.$WalletModel;\n\n_auth.$AuthModel;\n\n_angular.$rootScope;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/no-balance/factory.js\n// module id = ../node_modules/xo-member-components/src/no-balance/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n
    {{ msg }}
    \\n
    \\n
    {{ content('noBalance.secondaryMsg') }}
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/no-balance/template.html\n// module id = ../node_modules/xo-member-components/src/no-balance/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-preferred-checkbox',\n template: _template2['default'],\n props: {\n makeFiPreferred: {\n type: 'var',\n required: false\n },\n plan: {\n type: 'var',\n required: false\n },\n cardart: {\n type: 'var',\n required: false\n }\n },\n actions: {\n toggleModel: function toggleModel() {\n if (this.props.makeFiPreferred.selected) {\n this.props.makeFiPreferred.planId = this.props.plan.planId;\n this.props.makeFiPreferred.fiId = this.props.plan.primaryFs.type === 'BALANCE' ? this.props.plan.primaryFs.type : // Balance doesn't have an instrument id\n this.props.plan.primaryFs.id;\n }\n }\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('checkout_fpti', { 'pref_fi_option_shown': '1' });\n }\n }\n});\n\n\n_squid.$Component;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/preferred-checkbox/directive.js\n// module id = ../node_modules/xo-member-components/src/preferred-checkbox/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-models/src/choice/index');\n\nvar _angular = require('angular');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$PreferredCheckboxFactory', function () {\n var state = {\n eligible: false\n };\n\n /**\n * call pxp to determint if we should show preferred checkbox in case of single fi\n */\n var getSinglePreferredCheckboxPxp = function getSinglePreferredCheckboxPxp() {\n return (0, _squid.$pxp)('xo_hermes_single_preffered_checkbox', 'xo_hermes_single_preffered_checkbox_treatment', undefined, false, true).then(function (pxpRes) {\n return !!pxpRes;\n });\n };\n\n /**\n * check choice eligibility based on:\n * 1. pxp\n * 2. is billing or not\n */\n var getChoicePreferredCheckboxEligibility = function getChoicePreferredCheckboxEligibility(checkoutCart) {\n return _index.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n var checkboxVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n\n return checkboxVariants.indexOf(variant) !== -1 && !checkoutCart.isBilling();\n });\n };\n\n /**\n * eligible if:\n *\n * 1. choice eligibility is successfull\n * 2. number of plans >= 1\n *\n * If there is only 1 plan, xo_hermes_single_preffered_checkbox pxp (https://engineering.paypalcorp.com/pxptoolstage/configuration?exptId=5480&version=1)\n * must return treatment\n *\n */\n var decideEligibility = function decideEligibility(_ref) {\n var plans = _ref.plans,\n checkoutCart = _ref.checkoutCart;\n\n if (!plans || plans.length === 0) {\n state.eligible = false;\n return;\n }\n\n return getChoicePreferredCheckboxEligibility(checkoutCart).then(function (choiceEligibility) {\n if (!choiceEligibility) {\n state.eligible = false;\n return;\n }\n\n if (plans.length > 1) {\n state.eligible = true;\n return;\n }\n\n return getSinglePreferredCheckboxPxp().then(function (pxpResult) {\n _logger.$logger.info('single_fi_preferred_checkbox_eligibility', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n });\n });\n };\n\n var isSinglePreferredCheckboxEligible = function isSinglePreferredCheckboxEligible(_ref2) {\n var plans = _ref2.plans;\n\n return plans && plans.length > 0 && state.eligible;\n };\n\n var showPreferredCheckbox = function showPreferredCheckbox(plan, fundingOptions) {\n return (plan.primaryFs.id || plan.primaryFs.type === 'BALANCE') && !fundingOptions.isPreferred(plan);\n };\n\n return {\n isSinglePreferredCheckboxEligible: isSinglePreferredCheckboxEligible,\n decideEligibility: decideEligibility,\n showPreferredCheckbox: showPreferredCheckbox\n };\n});\n\n_squid.$pxp;\n\n_squid.$config;\n\n_logger.$logger;\n\n_index.$ChoiceEligibility;\n\n_angular.$rootScope;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/preferred-checkbox/factory.js\n// module id = ../node_modules/xo-member-components/src/preferred-checkbox/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/preferred-checkbox/template.html\n// module id = ../node_modules/xo-member-components/src/preferred-checkbox/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/auth/index');\n\nrequire('xo-address-components/src/address-display/directive');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-review-address',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n makeAddrPreferred: {\n type: 'var',\n required: false\n },\n countryCode: {\n type: 'str',\n required: false\n },\n storePickUpSelected: {\n type: 'var',\n required: false\n },\n nmjExperience: {\n type: 'var',\n required: false\n },\n hideShipToHeader: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n auth: _index2.$AuthModel.instance().retrieve()['catch'](_angular.noop)\n };\n }\n },\n actions: {\n gotoShipping: function gotoShipping() {\n if (this.models.checkoutAppData.flags.allow_change_shipping) {\n _uiRouter.$state.go('checkout.review.sidebar.shipping');\n } else {\n this.cannotChangeShippingInfoMessages = true;\n }\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n var updateMakePreferredFlag = function updateMakePreferredFlag(flag) {\n if (_this.makeAddrPreferred) {\n // Update the makeAddrPreferred.shown flag, for the caller to know about it.\n _this.makeAddrPreferred.shown = flag;\n }\n return flag;\n };\n\n /**\n * Decision on whether to show Make Preferred Checkbox\n * @returns {boolean}\n */\n this.isMakePreferred = function () {\n if (_this.models.auth.remembered) {\n return updateMakePreferredFlag(false);\n }\n\n if (_this.isPreferredShippingEnabled && !_this.models.checkoutSession.get('shipping.preferred_address') && !_this.models.checkoutSession.get('shipping.s2s_address')) {\n return updateMakePreferredFlag(true);\n }\n return updateMakePreferredFlag(false);\n };\n },\n populate: function populate() {\n // countryCode is not available, hence we use the shipping.county to retrieve the feature flag.\n var shipping = this.models.checkoutSession && this.models.checkoutSession.shipping || {};\n\n this.isPreferredShippingEnabled = (0, _squid.$feature)('preferredShipping', false, shipping.country);\n this.isNmj = this.props.nmjExperience && (this.props.nmjExperience.one_page || this.props.nmjExperience.design_2 || this.props.nmjExperience.design_3);\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$feature;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\n\n_index2.$AuthModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-address/directive.js\n// module id = ../node_modules/xo-member-components/src/review-address/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n

    {{ content('shippingAddress.shipTo') }}

    \\n
    \\n

    {{ content('shippingAddress.yourAddress') }}

    \\n {{ content('shippingAddress.merchantReq') }}\\n
    \\n
    \\n
    \\n {{models.checkoutSession.shipping.name}}\\n \\n \\n
    \\n
    \\n \\n
    \\n {{models.checkoutSession.shipping.name}}\\n \\n
    \\n
    \\n
    \\n
    \\n \\n {{ content('common.change') }}\\n \\n \\n
    \\n
    \\n
    \\n \\n
      \\n
    • \\n {{ content('memberReview.cannotChangeShippingMsgUserActionCommit', {merchantName: models.checkoutAppData.merchant.brand_name, merchantName2: models.checkoutAppData.merchant.brand_name}) }}\\n
    • \\n
    • \\n {{ content('memberReview.cannotChangeShippingMsg', {merchantName: models.checkoutAppData.merchant.brand_name, merchantName2: models.checkoutAppData.merchant.brand_name}) }}\\n
    • \\n
    \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-address/template.html\n// module id = ../node_modules/xo-member-components/src/review-address/template.html\n// module chunks = main-code-split","\n\nrequire('xo-wallet-components/src/add-card/cvv/directive');\n\nrequire('xo-ui-components/src/tooltip/directive');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nrequire('xo-ui-components/src/cardicon/directive');\n\nrequire('xo-ui-components/src/fi-panel/directive');\n\nrequire('xo-ui-components/src/experience/directive');\n\nrequire('xo-credit-components/src/pay-with-credit/directive');\n\nrequire('xo-credit-components/src/offer/directive');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nrequire('../billing-address/directive');\n\nrequire('../card-backup/directive');\n\nrequire('../preferred-checkbox/directive');\n\nvar _pxp = require('xo-page-components/src/cart/lib/pxp');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _index = require('xo-models/src/fiMeta/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nrequire('../show-more-fi/directive');\n\nvar _factory = require('../show-more-fi/factory');\n\nvar _factory2 = require('../preferred-checkbox/factory');\n\nvar _factory3 = require('../rewards-checkbox/factory');\n\nrequire('../rewards-checkbox/directive');\n\nvar _factory4 = require('./factory');\n\nrequire('../msb-offer/directive');\n\nrequire('../backup-label/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _factory5 = require('xo-wallet-components/src/currency-conversion/factory');\n\nrequire('xo-wallet-components/src/currency-conversion-overlay/directive');\n\nvar _experiments = require('xo-models/src/experiments');\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// billing address display\n// PPC offer banner\n// \nvar ADD_CARD_URLS = {\n SIDEBAR_DEFAULT: {\n route: 'checkout.review.sidebar.sidebarAddCard.addCardFlow.addCard',\n label: 'fundingInstruments.addNewCard'\n },\n SIDEBAR_ADDCARD_WITH_ADDBANK: {\n route: 'checkout.review.sidebar.sidebarAddNew.bank.add',\n label: 'common.addNew'\n }\n}; // \n// accessibility directives\n// \n\n\n(0, _angular.$registerDirective)('xo-review-paywith', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n token: '=?',\n showBmlPopup: '=?',\n installmentNotSelected: '=?',\n payButtonText: '=?',\n installment: '=?',\n padToggleFeature: '=?',\n selectedmethod: '=?',\n makeFiPreferred: '=?',\n selectFiVariant: '=?',\n nmjExperience: '=?',\n creditParentContext: '=?',\n choiceBalanceCheckboxState: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.locale = _squid.$locale;\n $scope.formatCurrency = _squid.formatCurrency;\n $scope.nmjMultiPage = $scope.nmjExperience && $scope.nmjExperience.multiPage;\n $scope.showMoreFiFactory = _factory.$ShowMoreFiFactory;\n $scope.smartAuthFactory = _factory4.$SmartAuthFactory;\n $scope.currencyConversionFactory = _factory5.$CurrencyConversionFactory;\n $scope.isCountryDE = _squid.$locale.country === 'DE';\n\n // check for feature enabled in config/inc/ui.json for AU country\n // this feature is there only in country AU as of June 29th, 2015\n $scope.showUachFeatureDiscalimer = false;\n\n /**\n * isMultiFiPadEligible\n * Used to determine if we should combine plans to be able to show\n * a PAD toggle checkbox instead of 2 plans\n *\n * padToggleEnabled is used to control ramp per country using a combination of pxp\n * and a feature flag\n *\n * If the coutnry is included on the list of countires that should look at the pxp config\n * we check the pxp and then the feature flag to check if its enabled,\n *\n * If the country its not included in the list of countries that should check pxp\n * we just use the feature flag.\n *\n */\n var isMultiFiPadEligible = function isMultiFiPadEligible() {\n return $scope.isPadToggleFeatureApplicable() && $scope.padToggleEnabled;\n };\n\n var setPadStatus = function setPadStatus(state) {\n $scope.padToggleFeature.checkboxEnabled = state;\n };\n\n var getPadStatus = function getPadStatus() {\n return $scope.padToggleFeature.checkboxEnabled;\n };\n\n var getMultiFiPadCheckboxState = function getMultiFiPadCheckboxState(id) {\n return $scope.padToggleFeature.multiFiCheckboxStates[id];\n };\n\n // used for multiFi DE\n // update pad status which is used to show/hide \"Pay after 14 Days\" label as a text on a blue Pay button\n var setPadStatusForMultiFi = function setPadStatusForMultiFi(plan) {\n if ($scope.checkoutSession.fundingOptions.isPAD(plan) || $scope.checkoutSession.fundingOptions.isIACH(plan)) {\n setPadStatus(getMultiFiPadCheckboxState(plan.primaryFs.id));\n } else {\n setPadStatus(false);\n }\n };\n\n // TODO: remove after PAPS fix\n $scope.balanceWithRewards = function (fi) {\n return _factory3.$RewardsCheckboxFactory.hideAmount(fi);\n };\n\n $scope.hasRewards = function (plan) {\n return _factory3.$RewardsCheckboxFactory.isRewardsPlan(plan);\n };\n\n $scope.getRewardsContent = function (plan) {\n // Need a content mapper because content experience\n // changes based on type of rewards in plan.\n var contentKeys = _factory3.$RewardsCheckboxFactory.getContentKeys(plan);\n\n return contentKeys || {};\n };\n\n $scope.isSelected = function (plan) {\n if (!plan) {\n return false;\n }\n var getID = function getID(obj) {\n return obj.planId || obj.id;\n };\n var selection = $scope.selectedmethod ? $scope.selectedmethod : $scope.checkoutSession.plan;\n var result = getID(plan) === getID(selection);\n // When the user is on RYI after selectFI\n // selection logic is maintained by the session\n // and not by radio button clicks on $scope.selectedmethod\n return result;\n };\n\n $scope.$on('$destroy', function () {\n return _factory3.$RewardsCheckboxFactory.destroy();\n });\n\n $scope.showChangeFI = function () {\n return $scope.canChangeFI && !$scope.selectedmethod && !$scope.nmjExperience;\n };\n\n $scope.showCreditPlacement = function (fs) {\n return fs && !fs.is_pinless_debit && fs.name === 'PayPal Credit' || fs.primaryFs && fs.primaryFs.name === 'BILL_ME_LATER';\n };\n\n $scope.isPadToggleFeatureApplicable = function () {\n return $scope.padToggleEnabled && $scope.padToggleFeature.applicable;\n };\n\n // for PAD eligible get combined plans\n $scope.getSortedPlans = function () {\n if (isMultiFiPadEligible()) {\n return $scope.checkoutSession.fundingOptions.getPadAndIachCombinedPlans();\n } else {\n return $scope.checkoutSession.getPlanList();\n }\n };\n\n $scope.showMultiFiPadToggle = function (plan) {\n var padToggle = false;\n\n if (isMultiFiPadEligible() && $scope.checkoutSession.fundingOptions.isPadToggleApplicableForFS(plan.planId) && plan.planId === $scope.selectedmethod.planId) {\n padToggle = true;\n setPadStatusForMultiFi(plan);\n }\n return padToggle;\n };\n\n $scope.showPadLabelForPadEligibleCountries = function (plan) {\n return $scope.checkoutSession.fundingOptions.isPAD(plan) || $scope.checkoutSession.fundingOptions.isIACHWithPad(plan) && $scope.padToggleEnabled && plan.planId !== $scope.selectedmethod.planId;\n };\n\n $scope.isUSGambling = function () {\n // US Only Real Money Gaming\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = $scope.checkoutAppData && $scope.checkoutAppData.merchant && $scope.checkoutAppData.merchant.merchant_country === 'US';\n\n return $scope.payee && $scope.payee.isGambling() && isUSBuyer && isUSmerchant;\n };\n\n // get add card link state to display different versions based on country\n $scope.getAddCardLink = function () {\n var linkObj = ADD_CARD_URLS.SIDEBAR_DEFAULT;\n\n if ((0, _squid.$feature)('addBank')) {\n linkObj = ADD_CARD_URLS.SIDEBAR_ADDCARD_WITH_ADDBANK;\n }\n\n var state = {\n show: $scope.selectedmethod && !$scope.nmjExperience && !$scope.isUSGambling(),\n route: linkObj.route,\n label: $scope.content(linkObj.label)\n };\n\n return state;\n };\n\n var populateModels = function populateModels() {\n _index2['default'].instance($scope.token).fetch();\n return (0, _squid.$populate)($scope, {\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _checkout.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance($scope.token),\n payee: _checkout.$CheckoutPayeeModel.instance($scope.token)\n });\n };\n\n var setShowAmount = function setShowAmount() {\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && $scope.checkoutCart.get('purchase.items.length', 0) === 0;\n\n return (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n $scope.showAmt = $scope.checkoutCart.get('payment_action') !== 'authorize' && showAmount;\n });\n };\n\n var setNegativeBalanceData = function setNegativeBalanceData() {\n var negBals = $scope.checkoutSession && $scope.checkoutSession.negBals;\n\n // re-order multiple currencies when first balance has different currency\n if (negBals && negBals[0].currency_code !== $scope.checkoutCart.purchase.amounts.currency_code) {\n negBals = negBals.reverse();\n }\n $scope.negBals = negBals;\n };\n\n var setShowBillingAddress = function setShowBillingAddress() {\n if (!$scope.nmjMultiPage) {\n return;\n }\n // only show billing address if the selected instrument is a Credit Card\n var selectedInstrument = $scope.checkoutSession.plan.sources && $scope.checkoutSession.plan.sources[0];\n\n if (selectedInstrument && selectedInstrument.type === 'PAYMENT_CARD') {\n $scope.showBillingAddress = true;\n }\n };\n\n var setCurrencyConversionExperiment = function setCurrencyConversionExperiment() {\n var plan = $scope.checkoutSession.plan;\n\n var callCurrencyConversionPXP = plan.hasConversion() && (0, _squid.$feature)('showConversionOverlay');\n var conversion = plan.conversion;\n\n\n if (conversion) {\n $scope.toTargetCurrency = conversion.to_amount_forex + ' ' + conversion.to_code;\n $scope.fromUnitCurrency = '1 ' + conversion.from_code;\n }\n\n // The following if block is the condition to call the currency conversion PXP,\n // remove it after Nov 11th 2018, as one of the treatment has been ramped to 100% on Oct 12th.\n if (callCurrencyConversionPXP) {\n return _factory5.$CurrencyConversionFactory.fetchPXPTreatments();\n }\n };\n\n var setMultiFiPadCheckboxState = function setMultiFiPadCheckboxState(id, state) {\n $scope.padToggleFeature.multiFiCheckboxStates[id] = state;\n };\n\n $scope.getPadStatus = getPadStatus;\n\n var logFptiForPadToggle = function logFptiForPadToggle(status) {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggle' + status\n });\n };\n\n // for PAD checking the corresponding IACH bank is preferred or not\n // only MEFT and IACH subtypes can have isPreferred as true\n $scope.showPreferredLabelForMultiFi = function (plan) {\n var preferred = $scope.checkoutSession.fundingOptions.isPreferred(plan);\n\n return $scope.makeFiPreferred && preferred && !$scope.checkoutSession.fundingOptions.isMEFT(plan);\n };\n\n $scope.showPreferredLabelForSingleFi = function (fs) {\n var plans = $scope.checkoutSession.get('fundingOptions.plans') || [];\n var filteredPlans = plans.filter(function (plan) {\n return plan.planId === fs.id && plan.primaryFs && plan.primaryFs.id === fs.instrument_id;\n });\n\n if (filteredPlans.length > 0) {\n return $scope.checkoutSession.fundingOptions.isPreferred(filteredPlans[0]) && $scope.showPreferredLabel;\n } else {\n return false;\n }\n };\n\n // show / hide preferred checkbox for multi fi use case\n $scope.showPreferredCheckboxForMultiFi = function (plan) {\n var preferred = $scope.checkoutSession.fundingOptions.isPreferred(plan);\n\n return $scope.makeFiPreferred && plan.planId === $scope.selectedmethod.planId && !preferred;\n };\n\n // Decide whether multiple FI or single FI section should be shown, based on choice experiment criteria\n var initPadToggleFeatureParams = function initPadToggleFeatureParams() {\n $scope.padToggleFeature.applicable = $scope.checkoutSession.fundingOptions.isPadToggleApplicable();\n setPadStatus($scope.padToggleFeature.applicable && $scope.checkoutSession.plan.isPAD() ? true : false);\n var sortedPlans = $scope.getSortedPlans();\n\n // sortedPlans (fundingOptions.plans) is undefined for BA no purchase case\n if (sortedPlans) {\n sortedPlans.forEach(function (plan) {\n if ($scope.checkoutSession.fundingOptions.isPAD(plan)) {\n setMultiFiPadCheckboxState(plan.primaryFs.id, true);\n }\n });\n }\n $scope.padToggleFeature.defaultPlan = $scope.checkoutSession.plan.isPAD();\n };\n\n // Decide whether multiple FI or single FI section should be shown, based on choice experiment criteria\n $scope.showMultipleFi = function () {\n var length = $scope.selectedmethod && $scope.getSortedPlans() && $scope.getSortedPlans().length || 0;\n\n // If the PPC Acquisition Banner experiment is treatment 1, add banner as an \"FI\"\n if ($scope.installment && $scope.installment.showPPCAcquisitionRadioButton) {\n length++;\n }\n\n return length > 1;\n };\n\n var setPadToggleEligbiility = function setPadToggleEligbiility() {\n if ($scope.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n return Experiments.padToggleFeatureSupported().then(function (result) {\n $scope.padToggleEnabled = result;\n });\n } else {\n $scope.padToggleEnabled = false;\n }\n };\n\n return populateModels().then(function () {\n var sortedPlans = $scope.getSortedPlans();\n\n return _angular.$q.all([setShowAmount(), setNegativeBalanceData(), setShowBillingAddress(), setCurrencyConversionExperiment(), _factory.$ShowMoreFiFactory.decideEligibility({\n plans: sortedPlans\n }), _factory2.$PreferredCheckboxFactory.decideEligibility({\n plans: sortedPlans,\n checkoutCart: $scope.checkoutCart\n }), setPadToggleEligbiility(), _factory3.$RewardsCheckboxFactory.buildCache()]).then(function () {\n if (sortedPlans) {\n _factory.$ShowMoreFiFactory.init(sortedPlans);\n }\n\n var plans = $scope.checkoutSession.get('fundingOptions.plans');\n var merchant = $scope.checkoutAppData.merchant;\n\n $scope.merchant = merchant.brand_name || merchant.merchant_name || merchant.merchant_email;\n\n // add FPTI tracking for CVV field\n var cvvData = $scope.checkoutSession.cvvData;\n\n if (cvvData && !cvvData.lastAddedCard) {\n _logger.$logger.info('checkout_fpti', {\n 'iscvvshown': 'true'\n });\n }\n\n var isBilling = $scope.checkoutCart.isBilling();\n var isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n var disableStickyForMerchant = _squid.$config.disableMerchantForStickyBA.indexOf($scope.payee.merchant.id) > -1;\n var stickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n var isWpsSubscription = $scope.checkoutAppData.is_wps_subscription_flow();\n\n // Hide 'change' link for sticky disabled merchants\n $scope.showPayMerchantWithPayPal = isBillingNoPurchase && (disableStickyForMerchant || !stickyInstrument);\n\n // Hide 'Pay With' header for NMJ multiple step experience\n $scope.showPayWithText = !$scope.nmjMultiPage && !$scope.showPayMerchantWithPayPal;\n $scope.showPreferredLabel = $scope.selectFiVariant && $scope.makeFiPreferred && $scope.checkoutSession.getPlanList() && $scope.checkoutSession.getPlanList().length > 1;\n\n var checkoutPlan = $scope.checkoutSession.plan;\n\n $scope.canChangeFI = true;\n if ($scope.showPayMerchantWithPayPal || checkoutPlan.isMSB() || $scope.nmjMultiPage) {\n $scope.canChangeFI = false;\n } else if (checkoutPlan.isBalance() && !(0, _squid.$feature)('choiceExperiment')) {\n // Show the change link always for US, where planning is finished ramping choice.\n // For other countries, keep old checks until we're sure planning has ramped choice changes there.\n $scope.canChangeFI = $scope.checkoutSession.plan.hasConversion() || $scope.checkoutSession.fundingOptions.hasECheck() || $scope.checkoutSession.fundingOptions.hasCredit() || Boolean($scope.checkoutSession.getDisallowedPreferred()) || Boolean($scope.checkoutSession.fundingOptions.getPreferred());\n }\n\n $scope.hasMultipleBalances = plans && plans.filter(function (p) {\n return p.primaryFs.type === 'BALANCE';\n }).length > 1;\n\n $scope.gotoWallet = function () {\n // For choice variant, go to manage wallet instead. Always available\n if ($scope.selectedmethod) {\n return _uiRouter.$state.go('checkout.review.sidebar.sidebarManageWallet');\n }\n\n if ($scope.canChangeFI) {\n return _uiRouter.$state.go('checkout.review.sidebar.wallet', { padToggleFeature: $scope.padToggleFeature });\n }\n };\n\n $scope.bmlSeeTerms = function () {\n $scope.showBmlPopup();\n };\n\n var currentPlanId = $scope.checkoutSession.plan.id;\n\n $scope.isSplitPaymentWithBalanceAndIachPlan = false;\n\n if ($scope.padToggleEnabled) {\n initPadToggleFeatureParams();\n }\n\n // page section changes to show pad toggle tooltip properly\n if ($scope.padToggleEnabled && $scope.padToggleFeature.applicable) {\n var checkoutPageSection = angular.element(document.getElementById('sliding-area'));\n\n checkoutPageSection.css('overflow', 'visible');\n }\n\n $scope.showPadToggle = function () {\n var padToggle = false;\n\n if ($scope.padToggleEnabled && $scope.padToggleFeature.applicable) {\n var padToggleForFS = $scope.checkoutSession.fundingOptions.isPadToggleApplicableForFS($scope.checkoutSession.plan.id);\n var isPadPlan = $scope.checkoutSession.plan.isPAD();\n\n $scope.isIachPlan = $scope.checkoutSession.plan.isIACH();\n if ($scope.isIachPlan && !$scope.isSplitPaymentWithBalanceAndIachPlan) {\n $scope.isSplitPaymentWithBalanceAndIachPlan = $scope.checkoutSession.plan.isSplitPaymentWithBalanceAndIach();\n }\n\n $scope.padToggleFeature.showCheckbox = padToggleForFS && (isPadPlan || $scope.isIachPlan);\n\n if (!padToggleForFS) {\n setPadStatus(false);\n currentPlanId = $scope.checkoutSession.plan.id;\n } else if (currentPlanId !== $scope.checkoutSession.plan.id && !isPadPlan) {\n setPadStatus(false);\n currentPlanId = $scope.checkoutSession.plan.id;\n } else if (currentPlanId !== $scope.checkoutSession.plan.id && isPadPlan) {\n setPadStatus(true);\n currentPlanId = $scope.checkoutSession.plan.id;\n }\n\n if ($scope.padToggleFeature.showCheckbox) {\n padToggle = true;\n\n // padToggle is false when split balance and `choice` balance checkbox is selected by user\n var checkboxBalanceChecked = $scope.choiceBalanceCheckboxState && $scope.choiceBalanceCheckboxState.checkbox;\n\n if ($scope.isSplitPaymentWithBalanceAndIachPlan && checkboxBalanceChecked) {\n padToggle = false;\n }\n }\n }\n return padToggle;\n };\n\n $scope.getPadFsContent = function (fs) {\n return $scope.isPadToggleFeatureApplicable() ? $scope.content('paymentMethod.padToggleFs', { bank: fs.name, last4: fs.last4 }) : $scope.content('paymentMethod.padFs', { bank: fs.name, date: fs.hop_date, last4: fs.last4 });\n };\n\n $scope.updatePlan = function (planId) {\n currentPlanId = planId;\n\n $scope.checkoutSession.fundingOptions.action('select', {\n data: {\n planId: planId\n },\n success: function success(result) {\n $scope.checkoutSession.populate(result);\n if (result) {\n // Update the installments to support the user selecting a card that does not support installments.\n $scope.checkoutSession.installments = result.installments;\n }\n }\n });\n };\n\n function getBankInstrumentId() {\n var instrumentId = void 0;\n\n if ($scope.isSplitPaymentWithBalanceAndIachPlan) {\n var iachSource = $scope.checkoutSession.plan.sources.find(function (source) {\n return source.type === 'BANK_ACCOUNT' && source.sub_type === 'INSTANT_TRANSFER';\n });\n\n instrumentId = iachSource && iachSource.instrument_id;\n } else if ($scope.isIachPlan) {\n instrumentId = $scope.checkoutSession.plan.sources[0].instrument_id;\n }\n return instrumentId;\n }\n\n $scope.multiFiPadToggleCheckboxEvent = function (plan) {\n setPadStatusForMultiFi(plan);\n\n // if pad checkbox is checked for the selected plan\n if (getMultiFiPadCheckboxState(plan.primaryFs.id)) {\n logFptiForPadToggle('On');\n } else {\n logFptiForPadToggle('Off');\n }\n };\n\n $scope.padToggleCheckboxEvent = function () {\n var planId = void 0;\n\n // For choice multi FI experience, we want to keep this in sync since this is read on clicking 'Continue' in RYI page\n // Skip the rest of it though. Doesn't apply for the multiFi variant\n if ($scope.selectedmethod) {\n var plan = $scope.checkoutSession.fundingOptions.plans[0];\n\n $scope.padToggleFeature.multiFiCheckboxStates[plan.primaryFs.id] = getPadStatus();\n return $scope.multiFiPadToggleCheckboxEvent(plan);\n }\n\n // if getPadStatus() === true, that means we're currently selecting a PAD plan\n if (getPadStatus()) {\n var bankInstrumentId = getBankInstrumentId();\n\n planId = $scope.checkoutSession.fundingOptions.getBankPadPlanIdByInstrumentId(bankInstrumentId, 'IACH');\n logFptiForPadToggle('On');\n } else {\n // otherwise we have to find the corresponding IACH plan\n var padInstrumentId = $scope.checkoutSession.plan.sources[0].instrument_id;\n\n planId = $scope.checkoutSession.fundingOptions.getBankPadPlanIdByInstrumentId(padInstrumentId, 'PAD');\n\n // when a user intentionally un-check the PayPal balance from choice view\n var isChoiceBalanceUnchecked = $scope.choiceBalanceCheckboxState.checkbox !== undefined && $scope.choiceBalanceCheckboxState.checkbox === false;\n\n if (isChoiceBalanceUnchecked) {\n // find a IACH plan without a balance\n var iachPlanWithoutBalance = $scope.checkoutSession.fundingOptions.plans.find(function (p) {\n return (p.primaryFs && p.primaryFs.id) === padInstrumentId && $scope.checkoutSession.fundingOptions.isIACH(p) && !p.secondaryFIs;\n });\n\n if (iachPlanWithoutBalance) {\n planId = iachPlanWithoutBalance.planId;\n }\n }\n logFptiForPadToggle('Off');\n }\n\n return $scope.updatePlan(planId);\n };\n\n var processAllLoadedPadToggle = function processAllLoadedPadToggle() {\n if ($scope.padToggleEnabled && $scope.showPadToggle()) {\n // To remove focus from checkbox so that focus style is not applied\n if (getPadStatus()) {\n var section = document.querySelector('#padToggleHelp');\n\n if (section) {\n section.focus();\n section.blur();\n }\n }\n // fpti logging\n if (!$scope.padToggleFeature.fptiLogged) {\n if (getPadStatus()) {\n _logger.$logger.info('pad_toggle_on_feature_shown');\n logFptiForPadToggle('OnShown');\n } else {\n _logger.$logger.info('pad_toggle_off_feature_shown');\n logFptiForPadToggle('OffShown');\n }\n\n $scope.padToggleFeature.fptiLogged = true;\n }\n }\n };\n\n var handleAllLoadedForPadToggle = _angular.$rootScope.$on('allLoaded', processAllLoadedPadToggle);\n\n $scope.$on('$destroy', handleAllLoadedForPadToggle);\n\n var stickyEligible = isBilling && !disableStickyForMerchant;\n\n // save sticky decision - to be used in the app and other components\n _squid.$config.features.DEFAULT.enableStickyFunding = stickyEligible;\n $scope.getPlanList = function (n) {\n // with purchase - always use plan\n var sources = $scope.checkoutSession.plan.sources || [];\n var planList = stickyEligible && isBillingNoPurchase ? $scope.checkoutSession.getSelectedStickyInstrument() && [$scope.checkoutSession.getSelectedStickyInstrument()] : sources.filter(function (instrument) {\n return instrument.type !== 'REWARDS';\n });\n\n $scope.showUachFeatureDiscalimer = false;\n\n // required to display direct debit agreement to AU buyers with unconfirmed bank as payment mode\n angular.forEach(planList, function (plan) {\n // display uach - direct debit agreement for AU as of July 1st, 2015\n if (plan && plan.type === 'BANK_ACCOUNT' && plan.unconfirmed_bank && (0, _squid.$feature)('directDebitAgreement', false, plan.country_code)) {\n $scope.showUachFeatureDiscalimer = true;\n }\n });\n\n if (!n) {\n return planList;\n } else {\n return planList.slice(0, n);\n }\n };\n\n $scope.showBackupPlan = function (plan) {\n return plan.backup && !(stickyEligible && isBillingNoPurchase);\n };\n\n var isRP = void 0;\n var isSubscriptionsV1 = void 0;\n\n if (isBilling) {\n isRP = $scope.checkoutCart.billing.type === 'RECURRING_PAYMENTS';\n isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n }\n\n $scope.showRpBaText = isRP || isWpsSubscription || isSubscriptionsV1;\n\n // Show expanded Variant of Text\n $scope.showExpandedText = function () {\n $scope.isExpandedAgreementText = true;\n };\n\n if (_squid.$locale.country === 'US') {\n $scope.isExpandedAgreementText = true;\n }\n\n $scope.getBAContent = function () {\n var consentCode = $scope.checkoutCart.billing.consent_code;\n var useraction = $scope.checkoutAppData.useraction() === 'commit' ? 'Pay' : 'Continue';\n var stickyFI = $scope.checkoutSession.getSelectedStickyInstrument();\n var stickyOrNoStickyText = stickyEligible && stickyFI ? 'FiSticky' : 'NoFiSticky';\n var expandedOrCollapsedText = $scope.isExpandedAgreementText === true ? 'Expanded' : 'Collapsed';\n var isIndiaDomestic = _squid.$locale.country === 'IN' && _squid.$locale.country === $scope.checkoutAppData.get('merchant.merchant_country', 'US');\n var indiaDomestic = isIndiaDomestic ? 'Domestic' : '';\n var contentKey = void 0;\n\n if (consentCode) {\n contentKey = 'enterpriseAgreement.' + consentCode + (stickyEligible && stickyFI ? '' : 'No') + 'FiStickyConsent';\n } else {\n contentKey = 'billingAgreement.';\n\n $scope.isCIB = $scope.checkoutCart.billing.type === 'CHANNEL_INITIATED_BILLING';\n\n if ($scope.isCIB) {\n contentKey += 'memberAgreementCib' + stickyOrNoStickyText + useraction + expandedOrCollapsedText;\n } else {\n contentKey += 'memberAgreement' + stickyOrNoStickyText + indiaDomestic + useraction;\n }\n }\n return contentKey;\n };\n\n $scope.getRPContent = function () {\n var contentKey = 'billingAgreement.';\n var useraction = $scope.checkoutAppData.useraction() === 'commit' ? 'Pay' : 'Continue';\n\n if (stickyEligible && $scope.checkoutSession.getSelectedStickyInstrument()) {\n contentKey += 'rpAgreementFiSticky' + useraction;\n } else {\n contentKey += 'rpAgreementNoFiSticky' + useraction;\n }\n return contentKey;\n };\n\n $scope.getStickyFiName = function () {\n var selectedStickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n\n return stickyEligible && selectedStickyInstrument && selectedStickyInstrument.name;\n };\n\n $scope.getStickyFiLast4 = function () {\n var selectedStickyInstrument = $scope.checkoutSession.getSelectedStickyInstrument();\n\n return stickyEligible && selectedStickyInstrument && selectedStickyInstrument.last4 && 'x-' + selectedStickyInstrument.last4;\n };\n\n // Choice Experiment\n // Preferred checkbox for single FI variants should only be shown if:\n $scope.showSinglePreferred = function () {\n return _factory2.$PreferredCheckboxFactory.isSinglePreferredCheckboxEligible({ plans: $scope.getSortedPlans() });\n };\n\n $scope.showPreferredCheckbox = function (plan) {\n return _factory2.$PreferredCheckboxFactory.showPreferredCheckbox(plan, $scope.checkoutSession.fundingOptions);\n };\n\n // Update selectedmethod to call update on checkout session later\n $scope.updateFS = function (fundingsource, index) {\n $scope.selectedmethod.planId = fundingsource.planId;\n $scope.selectedmethod.index = index;\n\n if ($scope.makeFiPreferred) {\n $scope.makeFiPreferred.selected = false;\n }\n\n $scope.checkoutSession.cardBackup.resetIfDoesNotApply(fundingsource);\n setPadStatusForMultiFi(fundingsource);\n };\n\n $scope.isBillingNoCards = function () {\n if ($scope.checkoutCart.isBillingNoPurchase()) {\n var emptyPlan = $scope.checkoutSession.futurePaymentInstruments && $scope.checkoutSession.futurePaymentInstruments.length === 0;\n\n if ($scope.checkoutAppData.flags.allow_billing_agreement_without_bufs && emptyPlan) {\n $scope.canChangeFI = false;\n $scope.showEmptyPlanHeader = true;\n _logger.$logger.info('BA_nocards_toggle_on_and_empty_plan');\n return true;\n }\n }\n return false;\n };\n\n $scope.showPPCAcquisitionRadioButton = function () {\n return $scope.installment && $scope.installment.showPPCAcquisitionRadioButton;\n };\n\n $scope.selectApplyForPPC = function () {\n return $scope.updateFS({\n planId: 'applyForPPCRadio'\n });\n };\n\n $scope.showConversionOptions = function () {\n if (_factory5.$CurrencyConversionFactory.getConversionOverlayFlag()) {\n _angular.$rootScope.$broadcast('$showConversionOverlay');\n } else {\n return _uiRouter.$state.go('checkout.review.sidebar.currencyConversion');\n }\n };\n });\n });\n }]\n };\n});\n\n_logger.$logger;\n\n_pxp.$pxpCartAmt;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_squid.formatCurrency;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$locale;\n\n_uiRouter.$state;\n\n_angular.$registerDirective;\n\n_angular.$rootScope;\n\n_angular.$q;\n\n_factory.$ShowMoreFiFactory;\n\n_factory2.$PreferredCheckboxFactory;\n\n_factory3.$RewardsCheckboxFactory;\n\n_factory4.$SmartAuthFactory;\n\n_factory5.$CurrencyConversionFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-paywith/directive.js\n// module id = ../node_modules/xo-member-components/src/review-paywith/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$SmartAuthFactory', function () {\n\n var isAuthRequired = function isAuthRequired(fs) {\n return fs.constraint;\n };\n\n var getConstraintAmount = function getConstraintAmount(fs) {\n var constraint = fs.constraint;\n return (0, _squid.formatCurrency)(constraint.amount.value, constraint.amount.currency, false);\n };\n\n return {\n isAuthRequired: isAuthRequired,\n getConstraintAmount: getConstraintAmount\n };\n});\n_squid.formatCurrency;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-paywith/factory.js\n// module id = ../node_modules/xo-member-components/src/review-paywith/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    1)}\\\">\\n
    \\n
    \\n

    \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n \\n {{ content('paymentMethod.payAfter') }}\\n \\n \\n \\n {{ content('paymentMethod.payMerchantWithPayPal', {merchantName: merchant}) }}\\n \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n \\n

    \\n \\n
      \\n
    • \\n
      \\n \\n \\n \\n \\n \\n {{ content('paymentMethod.billmelater') }}\\n \\n \\n \\n \\n \\n \\n {{ content('paymentMethod.msbOffer') }}\\n \\n \\n {{ content('paymentMethod.paypalBalance') }}\\n \\n \\n {{ content('fsMappings.PAYPAL_EXTRAS_MASTERCARD') }}\\n \\n \\n \\n {{ content('paymentMethod.pinlessDebit') }}\\n \\n \\n {{fs.name}}\\n \\n {{ content('paymentMethod.eCheck') }}\\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n \\n {{ content('paymentMethod.meft') }}\\n \\n \\n {{ content('paymentMethod.iach') }}\\n \\n \\n {{ content('paymentMethod.instantTransfer') }}\\n \\n \\n \\n \\n
      \\n {{ content('memberReview.preferred') }}\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n \\n \\n

      \\n {{ content('paymentMethod.msbHelpText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n

      \\n\\n \\n
      \\n

      {{ content('paymentMethod.msbToolTipOffer') }}

      \\n
      \\n

      \\n {{ content('paymentMethod.msbToolTipText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code), minimumPurchase:fs.minPurchaseAmount})\\n }}\\n

      \\n

      \\n {{ content('paymentMethod.msbToolTipText2', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)}) }}\\n

      \\n

      \\n

      \\n
      \\n
      \\n
      \\n\\n \\n
      \\n

      \\n {{content('paymentMethod.padHelpTxt')}}\\n

      \\n
        \\n
      • \\n \\n
      • \\n
      • \\n \\n
      • \\n
      • \\n \\n
      • \\n
      \\n

      \\n \\n

      \\n
      \\n
      \\n
      \\n 1)\\\" class=\\\"methodAmount\\\">\\n \\n \\n
      \\n
      \\n
      \\n
      \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n \\n
    • \\n
    • \\n \\n \\n \\n
    • \\n
    • 1)\\\" ng-click=\\\"$event.stopPropagation()\\\">\\n \\n {{checkoutSession.selectedInstallmentData.term}}X {{content('paymentMethod.of')}} {{checkoutSession.selectedInstallmentData.monthly_payment.formatted_value}}\\n {{content('paymentMethod.changeInstallmentLink') }}\\n \\n \\n
    • \\n
    • \\n \\n {{ content('paymentMethod.eCheckDescription') }}\\n \\n \\n {{ content('paymentMethod.payAfterDeliveryDetails') }}\\n \\n
      \\n {{ content('paymentMethod.padHelpTxt', {date: fs.HOPDate}) }}\\n {{ content('paymentMethod.padHelpTxtList') }}\\n
      \\n
      \\n
      \\n
    • \\n
    • \\n ‏:\\n \\n \\n \\n
    • \\n
    • \\n {{ content('memberReview.nbrPaypalCut') }}:\\n \\n \\n \\n
    • \\n
    • \\n
      \\n {{ content('memberReview.enterCSC') }}\\n \\n
      \\n
    • \\n\\n
    • \\n
      \\n {{content('currencyOptions.paypalRate')}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n
      \\n
      \\n {{content('currencyOptions.issuerFeesDisclaimer')}}\\n
      \\n \\n \\n
    • \\n
    \\n
    \\n \\n
    \\n
  • \\n 1) && !balanceWithRewards(fs)\\\"\\n name-override=\\\"fs.sub_type === 'DELAYED_TRANSFER' && getPadFsContent(fs)\\\"\\n >\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n \\n

    \\n {{ content('paymentMethod.msbHelpText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)})}}\\n\\n {{ content('paymentMethod.msbDetails')}}\\n

    \\n\\n \\n \\n\\n
    \\n {{ content('memberReview.preferred') }}\\n
    \\n
    \\n \\n
    \\n

    {{ content('paymentMethod.msbToolTipOffer') }}

    \\n
    \\n

    \\n {{ content('paymentMethod.msbToolTipText', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code), minimumPurchase:fs.minPurchaseAmount}) }}\\n

    \\n

    \\n {{ content('paymentMethod.msbToolTipText2', {amount: formatCurrency(fs.amount.amount, fs.amount.currency_code)}) }}\\n

    \\n

    \\n

    \\n
    \\n
    \\n
    \\n \\n
    \\n

    \\n {{content('paymentMethod.padHelpTxt')}}\\n

    \\n
      \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    • \\n \\n
    • \\n
    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
  • \\n
    \\n \\n \\n
    \\n \\n \\n \\n
  • \\n :\\n \\n \\n \\n
  • \\n
  • \\n {{ content('memberReview.nbrPaypalCut') }}:\\n \\n \\n \\n
  • \\n
  • \\n
    \\n {{ content('memberReview.enterCSC') }}\\n \\n
    \\n
  • \\n\\n
    \\n
    \\n {{content('currencyOptions.paypalRate')}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n
    \\n
    \\n {{content('currencyOptions.issuerFeesDisclaimer')}}\\n
    \\n \\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    \\n \\n {{ content('paymentMethod.payAfter') }}\\n \\n \\n \\n {{ content('paymentMethod.payMerchantWithPayPal', {merchantName: merchant}) }}\\n \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n \\n

    \\n\\n
    \\n \\n
    \\n\\n
      \\n \\n
    • \\n \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n \\n \\n
      \\n
      \\n {{ content('paymentMethod.eCheckDescription') }}\\n
      \\n\\n
      \\n \\n \\n
      \\n

      \\n \\n

      \\n \\n
      \\n

      \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

      \\n

      \\n \\n

      \\n
      \\n
      \\n
      \\n
      \\n

      \\n \\n

      \\n \\n
      \\n

      \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

      \\n

      \\n \\n

      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n \\n \\n
      \\n
      \\n
    • \\n
    • \\n
      \\n \\n \\n
      \\n
    • \\n
    \\n
    \\n\\n \\n\\n
    \\n \\n
    \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n \\n \\n
    \\n

    \\n \\n

    \\n \\n
    \\n

    \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n

    \\n \\n

    \\n \\n
    \\n

    \\n {{content('paymentMethod.padToggleHelpTooltipHeader')}}\\n

    \\n

    \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n\\n \\n\\n \\n \\n\\n \\n \\n\\n

    \\n \\n {{ content('paymentMethod.emptyPlanHeader') }}\\n \\n

    \\n \\n\\n

    \\n \\n

    \\n\\n

    \\n \\n

    \\n\\n
    \\n \\n
    \\n\\n \\n

    \\n\\n \\n {{ locale.country === 'BR' ? content('common.changePayment') : content('common.change') }}\\n \\n \\n\\n \\n {{ content('asideHeader.manage') }}\\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-paywith/template.html\n// module id = ../node_modules/xo-member-components/src/review-paywith/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nrequire('xo-address-components/src/address-display/directive');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nrequire('../review-address/directive');\n\nrequire('./dropdown/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar SHIPPING_TYPE_MAPPING = {\n SHIPPING: 'shipping.shipHome',\n PICKUP: 'shipping.shipStore'\n};\n\nvar SHIPPING_TYPE = {\n SHIPPING: 'SHIPPING',\n PICKUP: 'PICKUP'\n};\n\nvar TAB_STATE = {\n SHIP: 'ship',\n PICKUP: 'pickup'\n};\n\nexports['default'] = _squid.$Component.extend('$xoReviewShippingOptionsComponent', {\n tag: 'xo-review-shipping-options',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n methods: {\n type: 'var',\n required: true\n },\n shippingChangeFeature: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n\n actions: {\n gotoShipping: function gotoShipping() {\n // action defined to either take you to view your shipping option selection or explain why you can't change this address\n if (this.models.checkoutAppData.flags.allow_change_shipping || this.shippingMethods && this.shippingMethods.length === 0) {\n _uiRouter.$state.go('checkout.review.sidebar.shipping');\n } else {\n this.cannotChangeShippingInfoMessages = true;\n }\n },\n setStateTo: function setStateTo(state) {\n this.state = state;\n\n if (state === TAB_STATE.SHIP) {\n // resetting the Pick Up methods since we're transitioning to the Shipping Tab\n this.selectedPickupMethod = undefined;\n if (this.shippingMethods && this.shippingMethods.length === 1) {\n\n this.actions.selectShippingMethod(this.shippingMethods[0]);\n return;\n }\n }\n\n if (state === TAB_STATE.PICKUP) {\n // resetting the Shipping methods since we're transitioning to the Pick Up Tab\n this.selectedShippingMethod = undefined;\n if (this.pickupMethods && this.pickupMethods.length === 1) {\n\n this.actions.selectShippingMethod(this.pickupMethods[0]);\n return;\n }\n }\n /*\n if none of these, then it means that the buyer has multiple choices in the next tab and we can't make any assumptions\n so we'll unselect them by storing undefined in our cache.\n */\n window.xprops.supplement.addPaymentDetails(this.models.checkoutAppData.get('payment_id'), undefined);\n },\n\n\n /*\n selects a Shipping Method and saves it in our incontext checkout.js caching in-script.\n */\n selectShippingMethod: function selectShippingMethod(selected) {\n var _this = this;\n\n var callCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n\n if (!selected) {\n this.selectedPickupMethod = undefined;\n this.selectedShippingMethod = undefined;\n return;\n }\n\n var _ref = this.props.methods.filter(function (method) {\n // eslint-disable-line array-callback-return\n if (method && selected && method.id === selected.id) {\n return method;\n }\n }) || [],\n shippingMethod = _ref[0];\n\n switch (shippingMethod.type) {\n case SHIPPING_TYPE.SHIPPING:\n this.selectedShippingMethod = selected;\n break;\n case SHIPPING_TYPE.PICKUP:\n this.selectedPickupMethod = selected;\n break;\n default:\n break;\n }\n\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.addPaymentDetails) {\n var addedPaymentDetails = window.xprops.supplement.addPaymentDetails(this.models.checkoutAppData.get('payment_id'), {\n selected_shipping_method: shippingMethod\n });\n\n if (addedPaymentDetails) {\n addedPaymentDetails.then(function () {\n if (_this.shippingChangeFeature && _this.shippingChangeFeature.callOnShippingChange && callCallback) {\n _this.shippingChangeFeature.callOnShippingChange();\n }\n });\n }\n }\n },\n\n /*\n Helper to map shipping methods passed by the props and\n select only the ones that fit the 'type'.\n Returns typed shipping methods with shippingType and\n shippingLabel containing their localized content\n */\n mapShippingMethodsByType: function mapShippingMethodsByType() {\n var shippingMethods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var type = arguments[1];\n\n return shippingMethods.filter(function (shippingMethod) {\n return SHIPPING_TYPE[shippingMethod.type] === type;\n });\n },\n getTypeLabel: function getTypeLabel() {\n var shippingMethod = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return (0, _squid.$renderContent)(SHIPPING_TYPE_MAPPING[shippingMethod.type] || '');\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this2 = this;\n\n // Tab State between 'ship' and 'pickup'\n this.state = TAB_STATE.SHIP;\n // Dropdown active flag\n this.isPickupDropdownActive = false;\n this.isShippingDropdownActive = false;\n\n // selectedShippingMethod contains the buyer's current selection\n this.selectedShippingMethod; // eslint-disable-line no-unused-expressions\n this.selectedPickupMethod; // eslint-disable-line no-unused-expressions\n\n // map JSV4 shipping methods\n this.pickupMethods = this.actions.mapShippingMethodsByType(this.props.methods, SHIPPING_TYPE.PICKUP);\n this.shippingMethods = this.actions.mapShippingMethodsByType(this.props.methods, SHIPPING_TYPE.SHIPPING);\n\n this.isShipping = function () {\n return _this2.state === TAB_STATE.SHIP;\n };\n this.isPickup = function () {\n return _this2.state === TAB_STATE.PICKUP;\n };\n\n // We'll render dual tabs ONLY when there are TWO Shipping types sent by the merchant\n this.renderTabs = function () {\n return Boolean(_this2.pickupMethods.length && _this2.shippingMethods.length);\n };\n\n // Find the right header to render\n this.choosePageHeader = function () {\n if (_this2.renderTabs()) {\n return (0, _squid.$renderContent)('shipping.orderChoiceLabel');\n } else if (_this2.shippingMethods.length) {\n _this2.actions.setStateTo(TAB_STATE.SHIP);\n return (0, _squid.$renderContent)('shipping.ShipOnlyHeader');\n } else {\n _this2.actions.setStateTo(TAB_STATE.PICKUP);\n return (0, _squid.$renderContent)('shipping.PickupOnlyHeader');\n }\n };\n // when clicking outside the dropdown\n var self = this;\n this.$on('clickBody', function () {\n self.isPickupDropdownActive = false;\n self.isShippingDropdownActive = false;\n });\n },\n populate: function populate() {\n // If there's only one choice from the start, we'll select it\n if (this.isShipping()) {\n if (this.shippingMethods && this.shippingMethods.length === 1) {\n this.actions.selectShippingMethod(this.shippingMethods[0], false);\n }\n } else if (this.pickupMethods && this.pickupMethods.length === 1) {\n this.actions.selectShippingMethod(this.pickupMethods[0], false);\n }\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-shipping-options/directive.js\n// module id = ../node_modules/xo-member-components/src/review-shipping-options/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoShippingOptionsDropdownComponent', {\n tag: 'xo-shipping-options-dropdown',\n template: _template2['default'],\n props: {\n defaultText: {\n type: 'var',\n required: true\n },\n type: {\n type: 'var',\n required: true\n },\n methods: {\n type: 'var',\n required: true\n },\n onSelect: {\n type: 'var',\n required: true\n }\n },\n actions: {\n getFormattedLabel: function getFormattedLabel(shippingMethod) {\n if (shippingMethod.amount && parseFloat(shippingMethod.amount.value) > 0) {\n var amountFormatted = (0, _squid.formatCurrency)(shippingMethod.amount.value, shippingMethod.amount.currency_code);\n return (0, _squid.$renderContent)('shipping.customLabelAndAmount', {\n amount: amountFormatted,\n label: shippingMethod.label\n });\n }\n\n return shippingMethod.label;\n },\n select: function select(shippingMethod) {\n this.selectedMethod = shippingMethod;\n\n if (shippingMethod) {\n this.props.onSelect(shippingMethod);\n }\n },\n clickDropdown: function clickDropdown($event) {\n if ($event) {\n $event.stopPropagation();\n }\n\n if (this.selectedMethod) {\n this.cachedSelectedMethod = (0, _angular.copy)(this.selectedMethod);\n }\n\n this.isActive = !this.isActive;\n\n if (this.isActive) {\n this.selectedMethod = undefined;\n }\n\n if (!this.isActive && this.cachedSelectedMethod) {\n this.selectedMethod = (0, _angular.copy)(this.cachedSelectedMethod);\n }\n }\n },\n lifecycle: {\n reenter: function reenter() {\n if (this.selectedMethod && this.cachedSelectedMethod) {\n this.cachedSelectedMethod = undefined;\n }\n }\n }\n});\n\n\n_angular.copy;\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.formatCurrency;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js\n// module id = ../node_modules/xo-member-components/src/review-shipping-options/dropdown/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n\\n
    \\n \\n \\n
    \\n\\n
      \\n
    • \\n \\n
    • \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html\n// module id = ../node_modules/xo-member-components/src/review-shipping-options/dropdown/template.html\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n\\n

    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n\\n \\n
    \\n\\n \\n
    \\n {{models.checkoutSession.shipping.name}}\\n \\n \\n {{ content('common.change') }}\\n \\n \\n
    \\n\\n \\n \\n\\n
    \\n\\n \\n
    \\n\\n \\n
    \\n \\n
    \\n\\n \\n \\n\\n
    \\n\\n\\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-shipping-options/template.html\n// module id = ../node_modules/xo-member-components/src/review-shipping-options/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _fi = require('xo-models/src/fi');\n\nvar _app = require('xo-models/src/app');\n\nvar _auth = require('xo-models/src/auth');\n\nrequire('xo-ui-components/src/modal/directive');\n\nrequire('./styles');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('xoReviewTopup', {\n tag: 'xo-review-topup',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n flags: {\n // flags.sepaAgree is set to true when the Sepa Mandate checkbox is checked by user\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n var checkoutCart = _checkout.$CheckoutCartModel.instance(this.props.token);\n var auth = _auth.$AuthModel.instance();\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n walletPreferences: _fi.$WalletPreferences.instance(this.props.token).retrieve()['catch'](_angular.noop),\n tokenizedFundingCapabilitiesModel: _app.$TokenizedFundingCapabilitiesModel.instance(this.props.token).retrieve({\n params: {\n tokenizedWalletToken: checkoutCart.tokenizedWalletToken,\n country: auth.country\n }\n })['catch'](_angular.noop)\n };\n }\n },\n actions: {\n gotoTopupFunding: function gotoTopupFunding() {\n _uiRouter.$state.go('checkout.review.sidepage.topupFunding');\n },\n closeModal: function closeModal() {\n this.showSepaModal = false;\n },\n openModal: function openModal() {\n this.showSepaModal = true;\n },\n\n /**\n * This function is refered in the signupTerms.agreeSepaTermsV2 content which has a link to open the Sepa page.\n */\n openSepa: function openSepa() {\n var sepaModel = _fi.$SepaModel.instance();\n this.sepa = {};\n var that = this;\n sepaModel.action('sepaDirectMandate', {\n resultModel: this.sepa,\n data: {\n bank: {\n id: this.models.checkoutSession.sepa_mandate.bankId\n }\n },\n success: function success() {\n that.actions.openModal();\n }\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.showSepaModal = false;\n this.formatCurrency = _squid.formatCurrency;\n this.instrumentIconId = function (name) {\n return _fi.$WalletInstrumentNameMapping.instance().getInstrumentNameNormalized(name);\n };\n },\n populate: function populate() {\n var _this = this;\n\n /**\n * Identify the preferred fs from the matching instrument_id\n */\n this.identifyPreferred = function (preferred, userSelectedFundingSource, fundingSources) {\n if (!preferred || !preferred.instrument_id) {\n // Preferred does not have an instrument_id, hence pick the userSelectedFundingSource\n return userSelectedFundingSource;\n } else if (!preferred.name) {\n // Preferred has an instrument_id but does not have the full details, so map the corresponding element\n return _squid.$util.find(fundingSources, function (fs) {\n return fs.instrument_id === preferred.instrument_id;\n });\n }\n return preferred;\n };\n\n /**\n * PatchXO api call for tokenization flows\n */\n this.tokenizationPatchXO = function (instrumentId) {\n return _this.models.checkoutSession.action('setTopupFI', {\n data: {\n instrument_id: instrumentId\n }\n });\n };\n\n var _models = this.models,\n checkoutSession = _models.checkoutSession,\n walletPreferences = _models.walletPreferences,\n tokenizedFundingCapabilitiesModel = _models.tokenizedFundingCapabilitiesModel;\n var topupFundingSources = checkoutSession.topupFundingSources,\n futurePaymentInstruments = checkoutSession.futurePaymentInstruments;\n // Topup does not have userSelectedFundingSource during the initial CreateXO api call\n\n var userSelectedFundingSource = checkoutSession.userSelectedFundingSource || topupFundingSources && topupFundingSources[0] || {};\n\n // Set the FI preferred currency\n walletPreferences.currency = tokenizedFundingCapabilitiesModel.getCurrency();\n\n if (tokenizedFundingCapabilitiesModel.isTopupEnabled()) {\n // Reset the users walletPreferences.direct to an empty object in an Topup flow.\n walletPreferences.direct = {};\n // Identify the preferred topup instrument\n walletPreferences.topup.fundingSource = this.identifyPreferred(walletPreferences.topup.fundingSource, userSelectedFundingSource, topupFundingSources);\n\n // topup amount is fixed to single value\n walletPreferences.topup.amount = _squid.$config.topup.topupAmounts[0];\n walletPreferences.topup.currency = _squid.$config.topup.currency;\n } else if (tokenizedFundingCapabilitiesModel.isDirectFundingEnabled()) {\n // Reset the users walletPreferences.topup to an empty object in an Direct funding flow.\n walletPreferences.topup = {};\n // futurePaymentInstruments could have balance in it\n walletPreferences.direct.fundingSource = this.identifyPreferred(walletPreferences.direct.fundingSource, userSelectedFundingSource, futurePaymentInstruments);\n }\n\n if (walletPreferences.getPreferred().instrument_id !== userSelectedFundingSource.instrument_id && userSelectedFundingSource.instrument_id !== null) {\n /**\n * instrumet_id not in sync with XO, hence make a patchXO api call.\n * Use Case:\n * When there are 2 banks (B1, B2) in the user account, and the user had linked his PayPal account in his Google wallet, with B2 as the preferred instrument.\n * User then tries to link his PayPal account in a different Google wallet.\n * - PAPS CreateXO api always returns the 1st direct funding instrument (i.e. B1) as the userSelectedFundingSource, and the contingency would be resolved for it.\n * - But wallet preference for the user will return B2.\n * - Since we need to show B2 to the user, we will update PAPS with B2 using the PatchXO api call.\n */\n this.tokenizationPatchXO(walletPreferences.getPreferred().instrument_id);\n }\n\n if (tokenizedFundingCapabilitiesModel.isTopupEnabled()) {\n this.fundingLabel = (0, _squid.$renderContent)('review.topupFundingLabel');\n } else {\n this.fundingLabel = (0, _squid.$renderContent)('review.paymentMethod');\n }\n\n /**\n * Checks whether Sepa manadate agreement needs to be shown to the user or not\n */\n this.isSepaMandateRequired = function () {\n if (this.models.checkoutSession.sepa_mandate) {\n return true;\n }\n };\n }\n }\n});\n\n\n_angular.noop;\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.formatCurrency;\n\n_squid.$util;\n\n_squid.$renderContent;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutCartModel;\n\n_fi.$WalletPreferences;\n\n_fi.$WalletInstrumentNameMapping;\n\n_fi.$SepaModel;\n\n_app.$TokenizedFundingCapabilitiesModel;\n\n_auth.$AuthModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-topup/directive.js\n// module id = ../node_modules/xo-member-components/src/review-topup/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n {{content('review.topupAmountLabel')}}\\n \\n
    \\n
    \\n
    \\n {{ fundingLabel }}\\n
    \\n \\n\\n \\n \\n {{models.walletPreferences.getPreferred().name}}\\n  x-{{models.walletPreferences.getPreferred().last4}}\\n \\n \\n \\n
    {{models.walletPreferences.getPreferred().name}}
    \\n
    ••••{{models.walletPreferences.getPreferred().last4}}
    \\n
    \\n\\n \\n \\n \\n
    \\n
    \\n
    \\n {{content('review.topupFundingSourceInfo')}}\\n
    \\n
    \\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    \\n
    \\n
    \\n

    {{content('directDebitAgreement.ddFullAgreementTitle')}}

    \\n

    {{content('DEMemberGuest.ddAgreementPara1')}}

    \\n
    \\n
    \\n {{content('DEMemberGuest.accountCarrier')}}\\n

    \\n {{sepa.user.name}}\\n
    {{sepa.user.address.line1}}\\n
    {{sepa.user.address.line2}}\\n
    {{sepa.user.address.city}}, {{sepa.user.address.postal_code}}\\n
    {{sepa.user.address.country}}\\n

    \\n
    \\n
    \\n

    \\n {{content('DEMemberGuest.IBAN')}}\\n

    \\n {{sepa.bank.iban_number}}\\n

    \\n {{content('DEMemberGuest.bankName')}}\\n

    \\n {{sepa.bank.bank_name}}\\n

    \\n {{content('DEMemberGuest.bic')}}\\n

    \\n {{sepa.bank.bic}}\\n
    \\n
    \\n\\n \\n\\n
    {{ content('base.payPal') }}
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/review-topup/template.html\n// module id = ../node_modules/xo-member-components/src/review-topup/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nrequire('uiUtils');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _checkout = require('xo-models/src/checkout');\n\nrequire('xo-ui-components/src/modal/directive');\n\nvar _choice = require('xo-models/src/choice');\n\nvar _factory = require('./factory');\n\nvar _utils = require('./utils');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// eslint-disable-line no-unused-vars\n// for ui-validate directive\nexports['default'] = _squid.$Component.extend({\n tag: 'xo-rewards-checkbox',\n template: _template2['default'],\n props: {\n selectedmethod: {\n type: 'var',\n required: false\n },\n plan: {\n type: 'var',\n required: false\n },\n cardart: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop),\n choiceVariant: _choice.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token)\n };\n }\n },\n actions: {\n open: function open() {\n this.rewards.interstitialValue = this.rewards.value; // Set initial value to be the same as regular\n this.showOverlay = true;\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'prepare_update_rewards_amount',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n },\n close: function close() {\n this.showOverlay = false;\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_cancellation',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n },\n toggle: function toggle() {\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n if (this.state.selected) {\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: true,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'FUNDING_OPTION_SELECTION',\n 'to': 'process_funding_option_selection',\n 'rewards_type': this.contentkeys.issuerName,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n } else {\n // set done to false if user disables checkbox\n this.done = false;\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: false,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n }\n },\n submit: function submit() {\n var _this = this;\n\n _logger.$logger.info('PayWithRewards_interstitial_submit');\n var loaded = this.rewards && this.rewards.rewardsPayload && this.rewards.rewardsPayload.rewardsAssociatedIds && this.rewards.value;\n\n if (!loaded) {\n // should not actually be needed\n return false;\n }\n\n if (!_factory.$RewardsCheckboxFactory.isRewardsTypeChangeable(this.rewards.rewardsPayload.issuerDetails.rewardsType)) {\n this.showOverlay = false;\n return;\n }\n\n var ctx = this.getContext();\n var rewardsAssociatedIds = this.rewards.rewardsPayload.rewardsAssociatedIds || {};\n var value = this.rewards.interstitialValue;\n\n _factory.$RewardsCheckboxFactory.submitRewards(this.models.checkoutSession, ctx.currency_code, rewardsAssociatedIds.planID, rewardsAssociatedIds.rewardsID, value).then(function (data) {\n var isFail = typeof data === 'boolean' && data === false;\n var iRewardsPlan = _this.models.checkoutSession.plan.sources.length > 1; // TODO: maybe a better way to de this check ?\n\n _this.state.selected = !isFail && iRewardsPlan;\n if (!isFail) {\n _this.rewards.value = _this.rewards.interstitialValue;\n\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: true,\n plan: _this.plan,\n selectedmethod: _this.selectedmethod,\n isReplan: true\n });\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_update_rewards_amount',\n 'rewards_type': ctx.issuerData.issuerName,\n 'rewards_amt': value,\n 'fi_id': rewardsAssociatedIds.cardID\n });\n }\n _this.done = _this.done || !isFail; // TODO: check if already selected ?\n })['finally'](function () {\n // TODO: error handler\n _this.showOverlay = false;\n });\n }\n },\n lifecycle: {\n enter: function enter() {\n this.state = {\n selected: false\n };\n this.done = false;\n this.rewards = this.rewards || {\n // TODO: remove after moving logic to use selectedmethod\n // as opposed to separate var\n // placeholder var until cleanup/removal\n value: '',\n interstitialValue: '',\n planid: '',\n rewardsPayload: {},\n type: ''\n };\n this.form_error = false;\n\n _factory.$RewardsCheckboxFactory.setCheckboxSelectionForPlan({\n selected: false,\n plan: this.plan,\n selectedmethod: this.selectedmethod,\n isReplan: false\n });\n },\n populate: function populate() {\n this.showOverlay = false;\n this.plan = this.plan || this.props.plan || this.models.checkoutSession.plan;\n // TODO: Consider a mapper of sorts here for the payload\n this.rewards.rewardsPayload = _factory.$RewardsCheckboxFactory.getRewardDetails(this.plan);\n this.contentkeys = _factory.$RewardsCheckboxFactory.getContentKeys(this.plan, this.rewards.rewardsPayload);\n this.rewards.type = this.contentkeys.type; // type is a predefined key // recheck later\n\n var rewardsPayload = this.rewards && this.rewards.rewardsPayload && this.rewards.rewardsPayload.rewardsPayload || {};\n\n this.rewards.value = this.rewards.interstitialValue = (0, _utils.getInitialRewardsValue)(this.models, rewardsPayload);\n this.fullOverlay = this.rewards.type === 'statement-credit';\n }\n },\n controller: ['$scope', function ($scope) {\n\n $scope.getContext = function () {\n var ctx = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // TODO: first destructor and then get rid of it\n // need to refactor base payload first\n var rewardsDetails = $scope.rewards && $scope.rewards.rewardsPayload || {};\n var issuerData = rewardsDetails && rewardsDetails.issuerDetails || {};\n var constraint = rewardsDetails && rewardsDetails.rewardsPayload && rewardsDetails.rewardsPayload.rewards_constraint;\n var currency_code = $scope.models.checkoutCart.purchase && $scope.models.checkoutCart.purchase.amounts && $scope.models.checkoutCart.purchase.amounts.total.currency_code;\n return _squid.$util.extend({\n issuerData: issuerData, constraint: constraint, currency_code: currency_code,\n rewards_type: issuerData.rewardsType,\n conversion_metadata: rewardsDetails.rewardsPayload && rewardsDetails.rewardsPayload.conversion_metadata\n }, ctx);\n };\n\n $scope.showCheckbox = function () {\n var result = _factory.$RewardsCheckboxFactory.showCheckbox($scope.plan, $scope.selectedmethod, $scope.models.choiceVariant);\n\n return result;\n };\n\n $scope.valueValidator = function (data) {\n /**\n * Cases:\n * 1) less than max usable\n * 2) less than equal to cart\n * 3) should be a number\n * 4) 2 digit decimal place\n * 5) should be greater than min value\n */\n var constraint = $scope.getContext().constraint;\n\n if (!constraint || !constraint.maximum_usable) {\n // safe check to see if constraint is populated\n return true;\n }\n var rawValue = data || $scope.rewards && $scope.rewards.interstitialValue;\n var value = (0, _utils.toNumber)(rawValue);\n var maxUsable = (0, _utils.toNumber)(constraint.maximum_usable.value);\n $scope.minAllowed = (0, _utils.toNumber)(constraint.minimum_spend.value);\n var cartAmount = (0, _utils.toNumber)($scope.models.checkoutCart.purchase.amounts.total.amount, 2);\n var exists = value && maxUsable;\n var hasMax2DigitDecimal = /^\\d+(\\.\\d{1,2})?$/i;\n var errorMap = [['default', !exists], ['default', isNaN(value)], ['default', !hasMax2DigitDecimal.test(rawValue)], ['minimum', value < $scope.minAllowed], ['moreThanAvailable', value > maxUsable && value <= cartAmount], ['moreThanPurchase', value > cartAmount]];\n var errorList = errorMap.find(function (testcase) {\n return testcase[1];\n });\n\n if (errorList) {\n // TODO: Make into debug or remove once rewards is stable.\n _logger.$logger.info('PayWithRewards_client_validation_error_' + errorList[0]);\n }\n $scope.form_error = errorList && errorList[0] || false;\n return !$scope.form_error;\n };\n\n $scope.useAmountContent = function () {\n /**\n * Final interstitial value to checkbox.\n *\n * cashback : currency -> currency\n * points : currency -> reward(currency)\n * miles : currency -> reward(currency)\n * statement-credit : currency -> currency\n */\n var ctx = $scope.getContext();\n var currency_symbol = (0, _squid.getCurrencySymbol)(ctx.currency_code);\n\n // inputType === 'currency' (cashback, chase)\n var rewardAmount = (0, _utils.toCommaSeparatedString)($scope.rewards.value, $scope.getContext({\n conversion_type: 'REWARDS_TO_AMOUNT'\n }));\n var currencyAmount = '';\n\n // inputType === 'rewards' (points, miles)\n if ((0, _utils.conversionDetails)(ctx.issuerData.rewardsType).inputType === 'rewards') {\n rewardAmount = (0, _utils.convert)('AMOUNT_TO_REWARDS', $scope.rewards.value, ctx, true);\n currencyAmount = (0, _utils.toCommaSeparatedString)($scope.rewards.value, $scope.getContext({\n conversion_type: 'REWARDS_TO_AMOUNT'\n }));\n }\n\n return (0, _squid.$renderContent)('rewards.useAmount.' + ctx.issuerData.contentKey, {\n rewardAmount: rewardAmount,\n currency_symbol: currency_symbol,\n currencyAmount: currencyAmount\n });\n };\n\n $scope.formOutputContent = function () {\n var ctx = $scope.getContext();\n var rewardPoints = (0, _utils.convert)('AMOUNT_TO_REWARDS', $scope.rewards.interstitialValue, ctx, true);\n\n return (0, _squid.$renderContent)('rewards.formResultLabel.' + ctx.issuerData.contentKey, {\n rewardPoints: rewardPoints\n });\n };\n }]\n});\n\n\n_squid.$Component;\n\n_squid.$renderContent;\n\n_squid.getCurrencySymbol;\n\n_squid.$util;\n\n_logger.$logger;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_choice.$ChoiceEligibility;\n\n_factory.$RewardsCheckboxFactory;\n\n_utils.toNumber;\n\n_utils.toCommaSeparatedString;\n\n_utils.getInitialRewardsValue;\n\n_utils.convert;\n\n_utils.conversionDetails;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/rewards-checkbox/directive.js\n// module id = ../node_modules/xo-member-components/src/rewards-checkbox/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _utils = require('./utils');\n\nvar _logger = require('xo-beaver/dist/logger');\n\n// eslint-disable-line no-unused-vars\n\n/**\n * TODO: Somehow try to move some of this constant\n * mapping logic to some facade layer.\n */\nvar REWARD_CODE_MAPPINGS = {\n 'DLR': {\n issuerName: 'discover',\n rewardsType: 'cashback',\n contentKey: 'discover.cashback'\n },\n 'MIL': {\n issuerName: 'discover',\n rewardsType: 'miles',\n contentKey: 'discover.miles'\n },\n 'TYP': {\n issuerName: 'citi',\n rewardsType: 'points',\n contentKey: 'citi'\n },\n 'LPTS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'WPTS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'USD': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'MLS': {\n issuerName: 'chase',\n rewardsType: 'statement-credit',\n contentKey: 'chase'\n },\n 'DEFAULT': {\n // This should never really be used.\n issuerName: 'default',\n rewardsType: 'points',\n contentKey: 'default'\n }\n};\n\n/**\n * Given a rewards instrument\n * Returns all ids and keys we need to link rewards\n * to different plans and instruments\n *\n * @param {*} instrument\n * @returns\n */\nvar rewardsAssociatedIds = function rewardsAssociatedIds(instrument) {\n var rewardsPayload = instrument.rewards || {};\n var related_card = rewardsPayload && rewardsPayload.related_card;\n var cardID = related_card && related_card.id;\n var rewardsID = instrument.id;\n var planID = instrument.planId;\n\n return {\n rewardsID: rewardsID,\n cardID: cardID,\n planID: planID\n };\n};\n\n/**\n * Returns all issuer related info required to render\n * custom experience for different reward programs\n *\n * @param {*} instrument\n * @returns\n */\nvar issuerDetails = function issuerDetails(instrument) {\n var rewardsPayload = instrument.rewards || {};\n var available_incentive = rewardsPayload && rewardsPayload.available_incentive;\n var rewards_currency_code = available_incentive.rewards_code || '';\n var issuerData = available_incentive && REWARD_CODE_MAPPINGS[rewards_currency_code];\n var issuerName = issuerData.issuerName,\n rewardsType = issuerData.rewardsType,\n contentKey = issuerData.contentKey;\n\n var rewardPoints = available_incentive && available_incentive.value;\n var rewardMonetaryValue = available_incentive && available_incentive.monetary_value && available_incentive.monetary_value.value;\n\n // Convert strings to numeric values\n rewardPoints = (0, _utils.toNumber)(rewardPoints);\n rewardMonetaryValue = (0, _utils.toNumber)(rewardMonetaryValue);\n\n return {\n rewards_currency_code: rewards_currency_code,\n rewardPoints: rewardPoints,\n rewardMonetaryValue: rewardMonetaryValue,\n rewardsType: rewardsType,\n issuerName: issuerName,\n contentKey: contentKey\n };\n};\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$RewardsCheckboxFactory', function () {\n\n var rewardsCache = {};\n var models = {};\n var cancelSessionWatcher = void 0; // holds the deactivator function\n\n var checkboxSelection = {\n planId: null,\n rewardsChosenPlan: null\n };\n\n var buildCache = function buildCache() {\n /**\n * TODO:\n * Consider developing a focus around fi as opposed to plans\n * once you proved stability in rewards move it out and expand to\n * all FI not just rewards. The case we need to confirm is plan refreshes.\n * 1) If we are starting a cache then how does cache management work with the\n * different plan refresh cases?\n * 2) How can we leverage the xo-models cache infrastructure ?\n */\n var isFeatureEnabled = (0, _squid.$feature)('payWithRewards');\n if (isFeatureEnabled && !cancelSessionWatcher) {\n cancelSessionWatcher = _squid.$event.on('checkoutSessionChange', function (event) {\n // For SNT in WPS there is a plan refresh upon RYI render.\n refreshCache();\n });\n }\n\n (0, _squid.$populate)(models, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var _models$checkoutSessi = models.checkoutSession.fundingOptions.instruments,\n instruments = _models$checkoutSessi === undefined ? [] : _models$checkoutSessi;\n\n\n if (isFeatureEnabled) {\n _squid.$util.forEach(instruments, function (instrument) {\n var payload = {};\n\n if (instrument.type === 'REWARDS') {\n payload.rewardsAssociatedIds = rewardsAssociatedIds(instrument);\n payload.issuerDetails = issuerDetails(instrument);\n payload.rewardsPayload = instrument.rewards || {};\n // TODO: DO we still need to hold on to raw payload ?\n // move to store only whats needed approach\n var cardID = payload.rewardsAssociatedIds.cardID; // set focus on card as opposed to rewards/plans\n\n rewardsCache[cardID] = payload;\n _logger.$logger.info('PayWithRewards_instrument_check', {\n 'fi_id': cardID\n });\n }\n });\n }\n })['finally'](function () {\n // instrumentation here\n });\n };\n\n var refreshCache = function refreshCache() {\n // TODO: Consider this when handling\n // plan refresh use case\n rewardsCache = {};\n buildCache();\n };\n\n var destroy = function destroy() {\n if (cancelSessionWatcher) {\n cancelSessionWatcher();\n }\n };\n\n /**\n * Checks to see if the current session\n * has any rewards FI in any plan.\n *\n * @returns Boolean\n */\n var rewardsFound = function rewardsFound() {\n return Object.keys(rewardsCache).length > 0;\n };\n\n /**\n * Returns a string representing rewards fi's\n * with issuer name.\n * Sample: \"CC-T2RX5VBELRL7C_discover:CC-ZKQBGHWZQECYJ:chase\"\n *\n * @returns String\n */\n var toString = function toString() {\n var result = '';\n _squid.$util.forEach(rewardsCache, function (instrument, instrument_id) {\n var issuerData = instrument.issuerDetails;\n var issuerName = issuerData.issuerName;\n if (instrument_id && issuerName) {\n result = result ? result + ':' + instrument_id + '_' + issuerName : instrument_id + '_' + issuerName;\n }\n });\n return result;\n };\n\n /**\n * Checks if the FI has a rewards\n * instrument attached\n *\n * @param {*} fi\n * @returns\n */\n var isRewardsFi = function isRewardsFi(fi) {\n // const isCard = fi.type === 'CARD';\n var result = Boolean(rewardsCache[fi.instrument_id]);\n\n return result;\n };\n\n /**\n * Checks if the primary FI associated\n * with the plan has rewards\n *\n * @param {*} plan\n * @returns\n */\n var isRewardsPlan = function isRewardsPlan(plan) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var isBalanceSelected = (0, _utils.isPayPalBalanceSelected)(plan);\n var isRewards = isRewardsFi(fi);\n // balance and rewards are incompatible\n // if balance then do not use rewards\n // Should we check for balance as part of isRewards check\n // or separate?\n\n return isRewards && !isBalanceSelected;\n };\n\n /**\n * Returns if the rewards has a changeable amount, based on the provided type\n */\n var isRewardsTypeChangeable = function isRewardsTypeChangeable(type) {\n return type !== 'statement-credit';\n };\n\n var getRewardDetails = function getRewardDetails(plan) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var result = isRewardsFi(fi) && rewardsCache[fi.instrument_id];\n\n return result;\n };\n\n var getRewardsPlanFromFi = function getRewardsPlanFromFi(fi) {\n var fiDetails = rewardsCache[fi.instrument_id] || {};\n var planID = fiDetails.rewardsAssociatedIds && fiDetails.rewardsAssociatedIds.planID;\n\n return (0, _utils.getPlanFromId)(planID);\n };\n\n var ifRewardsThenUpdatePlan = function ifRewardsThenUpdatePlan(currentPlanId, selectedmethod, checkoutSession) {\n\n // Given an Id\n // get plan object.\n // check if plan object contains rewards\n\n // ------------------------------------\n // -----> handle these before the plan comes into this function\n // check if plan is selected (2 cases)\n // 1st check if plan is user selected\n // --- We need this to give precedence to checkbox which wont trigger replan\n // 2nd check if plan is session selected\n // -- if we have a replan or initial plan already selecting rewards then honor it.\n // ------------------------------------\n var isRewardsChosen = selectedmethod ? selectedmethod.rewardsChosenPlan : // multiple FI selection\n checkboxSelection.rewardsChosenPlan; // single FI selection\n var selectedPlan = (0, _utils.getPlanFromId)(checkoutSession, selectedmethod ? selectedmethod.planId : currentPlanId);\n var rewardsEligible = isRewardsPlan(selectedPlan);\n\n if (!rewardsEligible) {\n return currentPlanId;\n }\n\n var result = (0, _utils.matchPlanFromConstraints)({\n checkoutSession: checkoutSession,\n instrumentId: (0, _utils.getInstrumentID)(selectedPlan),\n // For now, we never want balance with this method.\n balance: false,\n rewards: isRewardsChosen\n });\n\n return result && (0, _utils.getPlanID)(result);\n };\n\n var showCheckbox = function showCheckbox(plan, fiSelectionContext, choiceVariant) {\n var isChoiceVariant = Boolean(choiceVariant === '6');\n var isMultiFi = Boolean(plan && plan.primaryFs); // TODO: fails for selectFI use case\n var usingPayPalBalance = Boolean(plan && plan.secondaryFIs);\n var uiSelectedPlanId = plan && (0, _utils.getPlanID)(plan);\n var clickSelectedPlanId = fiSelectionContext && fiSelectionContext.planId;\n // Differentiating between uiSelection vs clickSelection to avoid the case\n // when this function gets triggered due to digest while the user has clicked\n // on a different fi. Do not show checkbox for this case. Would cause flickering.\n var isRewards = isRewardsPlan(plan);\n var disregardClickSelection = isChoiceVariant || !isMultiFi;\n var isSelected = uiSelectedPlanId && uiSelectedPlanId === clickSelectedPlanId || disregardClickSelection;\n\n var result = isSelected && isRewards && !usingPayPalBalance;\n return result;\n };\n\n /**\n * When session has balance and\n * fi has rewards then hide amount.\n * TODO: consider removing this after PAPS fix\n *\n * @param {*} fi\n * @returns\n */\n var hideAmount = function hideAmount(fi) {\n if (!fi) {\n return false;\n }\n var isRewards = isRewardsFi(fi);\n var _models$checkoutSessi2 = models.checkoutSession,\n checkoutSession = _models$checkoutSessi2 === undefined ? {} : _models$checkoutSessi2;\n var _checkoutSession$fund = checkoutSession.fundingOptions.instruments,\n instruments = _checkoutSession$fund === undefined ? [] : _checkoutSession$fund;\n\n var sessionHasBalance = instruments.some(function (instrument) {\n return instrument.type === 'BALANCE';\n });\n\n return isRewards && sessionHasBalance;\n };\n\n var setCheckboxSelectionForPlan = function setCheckboxSelectionForPlan(_ref) {\n var selected = _ref.selected,\n plan = _ref.plan,\n selectedmethod = _ref.selectedmethod,\n isReplan = _ref.isReplan;\n\n if (selectedmethod) {\n if (selected) {\n (0, _utils.setSelectedPlan)(plan, selectedmethod, isReplan);\n } else {\n (0, _utils.clearSelectedPlan)(plan, selectedmethod);\n }\n } else {\n var planId = (0, _utils.getPlanID)(plan);\n\n checkboxSelection.planId = planId;\n checkboxSelection.rewardsChosenPlan = selected ? planId : null;\n }\n };\n\n var getContentKeys = function getContentKeys(plan, rewardsPayload) {\n var fi = (0, _utils.getPrimaryFI)(plan);\n var last4Digits = fi && fi.lastDigits;\n var rewardsDetails = rewardsPayload || getRewardDetails(plan);\n var issuerData = rewardsDetails && rewardsDetails.issuerDetails || {};\n var currency_code = fi && fi.amount && fi.amount.currency_code;\n var rewardPoints = (0, _utils.toCommaSeparatedString)(issuerData.rewardPoints, {\n conversion_metadata: rewardsDetails.conversion_metadata,\n conversion_type: 'AMOUNT_TO_REWARDS',\n rewards_type: issuerData.rewardsType,\n currency_code: currency_code\n });\n var rewardMonetaryValue = (0, _utils.toCommaSeparatedString)(issuerData.rewardMonetaryValue, {\n conversion_metadata: rewardsDetails.conversion_metadata,\n conversion_type: 'REWARDS_TO_AMOUNT',\n rewards_type: issuerData.rewardsType,\n currency_code: currency_code\n });\n var currency_symbol = (0, _squid.getCurrencySymbol)(currency_code);\n var getString = function getString(key) {\n return (0, _squid.$renderContent)(key + '.' + issuerData.contentKey, {\n issuerName: issuerData.issuerName,\n last4Digits: last4Digits,\n rewardPoints: rewardPoints,\n rewardAmount: rewardMonetaryValue,\n currency_symbol: currency_symbol\n });\n };\n var map = {\n header: getString('rewards.header'),\n rewardsAvailble: getString('rewards.rewardsAvailble'),\n subText: getString('rewards.subText'),\n policy: getString('rewards.policy'),\n secondLineText: getString('rewards.secondLineText'),\n chargeAmount: getString('rewards.chargeAmount'),\n changeAmount: getString('rewards.changeAmount'),\n formInputLabel: getString('rewards.formInputLabel'),\n formResultLabel: getString('rewards.formResultLabel'),\n // TODO: use dynamic amount\n // useAmount:$renderContent(`rewards.useAmount.${issuerData.contentKey}`, {\n // rewardAmount: '919191',\n // currencyUnit: '$',\n // currencyAmount: '9999'\n // }),\n enterValidAmount: (0, _squid.$renderContent)('rewards.enterValidAmount.default'),\n type: issuerData.rewardsType,\n overlayButton: (0, _squid.$renderContent)(isRewardsTypeChangeable(issuerData.rewardsType) ? 'common.save' : 'common.OK'),\n issuerName: issuerData.issuerName,\n value: {\n rewardPoints: rewardPoints, // Amount in rewards\n rewardAmount: rewardMonetaryValue // Amount in currency\n }\n };\n\n return map;\n };\n\n /**\n * Do a select call and an update call in sequence.\n * Consider batching this later\n *\n * @param {*} checkoutSession\n * @param {*} currency_code\n * @param {*} planID\n * @param {*} rewardsID\n * @param {*} value\n * @returns\n */\n var submitRewards = function submitRewards(checkoutSession, currency_code, planID, rewardsID, value) {\n var payload = {\n type: 'REWARDS',\n value: value,\n currency: currency_code,\n id: rewardsID\n };\n\n var errorHandler = function errorHandler(name, err, action, type) {\n // TODO: Get rid of this or discuss better handling with product\n // Do we really need 2 handlers? once we have decided the kind of errors\n // that get thrown then pick one type of handler contingency or error\n\n checkoutSession.message = {\n type: 'error',\n msgKeys: ['paymentMethod.cycoSsotWarning']\n };\n _logger.$logger.info('pay_with_rewards', {\n 'from': 'UPDATE_REWARDS_INTERSTITIAL',\n 'to': 'process_planning_response',\n 'int_error_code': err,\n 'int_error_description': action + '-' + type,\n 'error_source': 'paymentapiplatformserv'\n });\n return _squid.$promise.reject(err);\n };\n\n return checkoutSession.fundingOptions.action('select', {\n resultModel: checkoutSession,\n data: {\n planId: planID\n },\n success: function success(result) {\n checkoutSession.populate(result);\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return errorHandler(name, err, 'select', 'contingency');\n }\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'select', 'error');\n }\n }).then(function () {\n return checkoutSession.fundingOptions.action('patch', {\n resultModel: checkoutSession,\n data: payload,\n success: function success(result) {\n checkoutSession.message = {\n type: 'success',\n msgKeys: ['paymentMethod.paymentMethodUpdated']\n };\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return errorHandler(name, err, 'patch', 'contingency');\n }\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'patch', 'error');\n }\n\n });\n });\n };\n\n return {\n buildCache: buildCache,\n refreshCache: refreshCache,\n destroy: destroy,\n rewardsFound: rewardsFound,\n toString: toString,\n isRewardsPlan: isRewardsPlan,\n isRewardsFi: isRewardsFi,\n isRewardsTypeChangeable: isRewardsTypeChangeable,\n getRewardsPlanFromFi: getRewardsPlanFromFi,\n getRewardDetails: getRewardDetails,\n getContentKeys: getContentKeys,\n showCheckbox: showCheckbox,\n hideAmount: hideAmount,\n setCheckboxSelectionForPlan: setCheckboxSelectionForPlan,\n ifRewardsThenUpdatePlan: ifRewardsThenUpdatePlan,\n submitRewards: submitRewards\n };\n});\n\n_squid.$util;\n\n_squid.$renderContent;\n\n_squid.$populate;\n\n_squid.$feature;\n\n_squid.$promise;\n\n_squid.$event;\n\n_squid.getCurrencySymbol;\n\n_angular.$rootScope;\n\n_checkout.$CheckoutSessionModel;\n\n_utils.getPlanID;\n\n_utils.getInstrumentID;\n\n_utils.getPrimaryFI;\n\n_utils.getPlanFromId;\n\n_utils.toNumber;\n\n_utils.toCommaSeparatedString;\n\n_utils.isPayPalBalanceSelected;\n\n_utils.setSelectedPlan;\n\n_utils.clearSelectedPlan;\n\n_utils.matchPlanFromConstraints;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/rewards-checkbox/factory.js\n// module id = ../node_modules/xo-member-components/src/rewards-checkbox/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n \\n
    \\n {{contentkeys.chargeAmount}}\\n
    \\n
    \\n
    \\n \\n
    \\n \\n

    \\n \\n

    \\n
    \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n\\n \\n \\n \\n \\n \\n =\\n \\n \\n
    \\n
    \\n
    \\n
    {{contentkeys.subText}}
    \\n
    {{content('rewards.enterValidAmount.default')}}
    \\n
    {{content('rewards.enterValidAmount.minimum', { value: minAllowed })}}
    \\n
    {{content('rewards.enterValidAmount.moreThanAvailable')}}
    \\n
    {{content('rewards.enterValidAmount.moreThanPurchase')}}
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/rewards-checkbox/template.html\n// module id = ../node_modules/xo-member-components/src/rewards-checkbox/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.matchPlanFromConstraints = exports.getSelectedPlan = exports.isPayPalBalanceSelected = exports.getInitialRewardsValue = exports.getPlanFromId = exports.getPrimaryFI = exports.clearSelectedPlan = exports.setSelectedPlan = exports.isPayNow = exports.convert = exports.convertValue = exports.toCommaSeparatedString = exports.toNumber = exports.sanitizeNumber = exports.conversionDetails = exports.getInstrumentID = exports.getPlanID = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\n// eslint-disable-line no-unused-vars\n\n/**\n * fundingOptions has plan.planId\n * checkoutSession has plan.id\n *\n * @param {*} plan\n */\nvar getPlanID = exports.getPlanID = function getPlanID(plan) {\n if (!plan) {\n return plan;\n }\n return plan.planId || plan.id;\n};\n\n/**\n * getInstrumentId\n * @param {Object} plan Any type of plan\n * @retursn {String} Instrument ID of primary fs\n */\nvar getInstrumentID = exports.getInstrumentID = function getInstrumentID(plan) {\n return plan.sources ? plan.sources[plan.sources.length - 1].instrument_id : plan.primaryFs.id;\n};\n\n/**\n * Returns an object containing input\n * and output details about the conversion\n *\n * @param {*} rewards_type\n * @param {*} conversion_type\n * @returns {}\n */\nvar conversionDetails = exports.conversionDetails = function conversionDetails(rewards_type, conversion_type) {\n var result = {};\n\n if (rewards_type) {\n var rewardsInCurrency = rewards_type === 'cashback'\n // TODO: Consider replacing rewardsInCurrency with monetary flag from PSS.\n // As of now not receiving it from PAPS.\n ;\n\n result.inputType = rewardsInCurrency ? 'currency' : 'rewards';\n if (conversion_type) {\n var useCurrency = conversion_type === 'REWARDS_TO_AMOUNT' || rewardsInCurrency && conversion_type === 'AMOUNT_TO_REWARDS';\n\n result.outputType = useCurrency ? 'currency' : 'rewards';\n result.skipConversion = result.inputType === result.outputType;\n }\n }\n return result;\n};\n\n/**\n * sanatizes undefined, NAN numbers\n * does rounding and limits\n *\n * @param {*} value\n * @param {*} limit\n * @param {*} rounding\n * @returns\n */\nvar sanitizeNumber = exports.sanitizeNumber = function sanitizeNumber(value, limit, rounding) {\n var isString = value && typeof value === 'string';\n var hasComma = isString && value.indexOf(',') >= 0;\n\n if (!value || hasComma) {\n /** \n * Avoid accidental double sanitization\n * TODO: figure out how to prevent double \n * sanitization in the first place\n */\n return !value ? '0' : value;\n }\n\n var num = Number(value);\n num = isNaN(num) || !num ? 0 : num;\n num = rounding === 1 ? Math.round(num) : num;\n num = limit ? num.toFixed(limit) : num;\n num = isString ? num : Number(num);\n /** \n * if you get a string return a string\n * required for 1.20 or decimal/currency use case\n * since toFixed return a string\n */\n\n return num;\n};\n\n/**\n * Given a string return a number\n *\n * @param {*} str\n * @param {number} [limit=2]\n * @param {number} [rounding=0]\n * @returns\n */\nvar toNumber = exports.toNumber = function toNumber(value) {\n var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var rounding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n var num = typeof value === 'string' ? parseFloat(value) : value;\n\n return sanitizeNumber(num, limit, rounding);\n};\n\n/**\n * extract the required decimal precision from rewards\n *\n * @param {*} conversion_metadata\n * @param {*} key\n * @returns\n */\nvar getPrecision = function getPrecision(conversion_metadata, key) {\n var decimal_precision = {};\n\n _squid.$util.forEach(conversion_metadata.decimal_precisions, function (ele) {\n decimal_precision[ele.conversion_type] = toNumber(ele.length, 0);\n });\n return decimal_precision[key] || 0;\n};\n\n/**\n * extract the required rounding details from rewards\n *\n * @param {*} conversion_metadata\n * @param {*} key\n * @returns\n */\nvar getRounding = function getRounding(conversion_metadata, key) {\n var rounding_modes = {};\n var mapper = {\n 'UNNECESSARY': 0,\n 'HALF_UP': 1\n // More may be added over time\n };\n _squid.$util.forEach(conversion_metadata.rounding_modes, function (ele) {\n rounding_modes[ele.conversion_type] = ele.value;\n });\n var value = rounding_modes[key] || 'UNNECESSARY';\n\n return mapper[value];\n};\n\nvar toCommaSeparatedString = exports.toCommaSeparatedString = function toCommaSeparatedString(value) {\n var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!value) {\n return '';\n }\n var currency_code = ctx.currency_code,\n _ctx$conversion_metad = ctx.conversion_metadata,\n conversion_metadata = _ctx$conversion_metad === undefined ? {} : _ctx$conversion_metad,\n conversion_type = ctx.conversion_type,\n rewards_type = ctx.rewards_type;\n\n var locale_code = _squid.$locale.lang + '-' + _squid.$locale.country;\n var useCurrency = conversionDetails(rewards_type, conversion_type).outputType === 'currency';\n var precision = getPrecision(conversion_metadata, conversion_type);\n var rounding = getRounding(conversion_metadata, conversion_type);\n var num = toNumber(value, '', rounding);\n var result = '';\n\n if (useCurrency) {\n result = (0, _squid.formatCurrency)(value, currency_code, false, 'AmountOnlyStyle');\n result = sanitizeNumber(result, 2, 0);\n } else {\n result = num.toLocaleString(locale_code, {\n useGrouping: true, // may only need for certain countries.\n minimumFractionDigits: precision\n });\n result = sanitizeNumber(result);\n }\n\n return result;\n};\n\n/**\n * Conversion math logic.\n * use precision and rounding from the rewards payload\n * to preform conversion to & from rewards\n *\n * @param {*} amount\n * @param {*} conversion_type\n * @param {*} conversionData\n * @returns\n */\nvar convertValue = exports.convertValue = function convertValue(amount, conversion_type, conversionData) {\n var result = '';\n\n if (!amount || !conversion_type || !conversionData) {\n return result;\n }\n var precision = getPrecision(conversionData, conversion_type);\n var rounding = getRounding(conversionData, conversion_type);\n // Use 4 decimal places or more for factor multiplication.\n // We need this to maintain decimal precision during calculation.\n var factor = toNumber(conversionData.conversion_factor, 4);\n\n // convert from rewards to points and vice-versa\n result = conversion_type === 'AMOUNT_TO_REWARDS' ? amount * 1.0 / factor : amount * factor;\n // Choose final precision based on downstream requirements\n var res = toNumber(result, precision, rounding);\n\n return res;\n};\n\n/**\n * Conversion business logic.\n * It decides when to convert and when not to and\n * finally returns the appropriate formated value.\n *\n * @param {*} conversion_type\n * @param {*} amount\n * @param {*} [ctx={}]\n * @returns\n */\nvar convert = exports.convert = function convert(conversion_type, amount) {\n var ctx = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var force = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!amount || !conversion_type) {\n return '';\n }\n var _ctx$conversion_metad2 = ctx.conversion_metadata,\n conversion_metadata = _ctx$conversion_metad2 === undefined ? {} : _ctx$conversion_metad2,\n _ctx$issuerData = ctx.issuerData,\n issuerData = _ctx$issuerData === undefined ? {} : _ctx$issuerData,\n currency_code = ctx.currency_code;\n\n var skip = !force && conversionDetails(issuerData.rewardsType, conversion_type).skipConversion;\n var converted = skip ? toNumber(amount) : convertValue(amount, conversion_type, conversion_metadata);\n\n converted = toCommaSeparatedString(converted, {\n rewards_type: issuerData.rewardsType,\n conversion_metadata: conversion_metadata,\n conversion_type: conversion_type,\n currency_code: currency_code\n });\n return converted;\n};\n\n/**\n * Checks for paynow vs continue usecase\n * TODO: expand and move logic to $CheckoutAppDataModel\n *\n * @param {*} checkoutAppData\n * @returns Boolean\n */\nvar isPayNow = exports.isPayNow = function isPayNow(checkoutAppData) {\n var isWPS = checkoutAppData.is_wps_flow();\n var userAction = checkoutAppData.useraction();\n\n return !!(!isWPS && userAction === 'commit');\n};\n\n/**\n * UI related operations to be performed on select.\n *\n * @param {*} plan\n * @param {*} selectedmethod\n * @param {*} isReplan\n */\nvar setSelectedPlan = exports.setSelectedPlan = function setSelectedPlan(plan, selectedmethod, isReplan) {\n // use applyAsync in order to wait for all plans to be updated and etc.\n // Wait for the radio buttons to have all the latest plan ids in its scope\n if (selectedmethod) {\n _angular.$rootScope.$applyAsync(function () {\n selectedmethod.planId = getPlanID(plan); // force UI selected method to use non-reward plan.\n selectedmethod.index = isReplan ? 0 : selectedmethod.index; // reset index on replan\n selectedmethod.rewardsChosenPlan = getPlanID(plan);\n });\n }\n};\n\n/**\n * UI related operations to be performed on de-select.\n *\n * @param {*} plan\n * @param {*} selectedmethod\n */\nvar clearSelectedPlan = exports.clearSelectedPlan = function clearSelectedPlan(plan, selectedmethod) {\n var hasPlanSelected = selectedmethod && selectedmethod.rewardsChosenPlan === getPlanID(plan);\n\n if (hasPlanSelected) {\n delete selectedmethod.rewardsChosenPlan;\n }\n};\n\n/**\n * Returns the primaryFI for multi-fi use case\n * else returns the first FI for single FI use case\n *\n * @param {*} plan\n * @returns {*} fiPayload\n */\nvar getPrimaryFI = exports.getPrimaryFI = function getPrimaryFI(plan) {\n // TODO: return '' instead of {}\n if (!plan || !getPlanID(plan)) {\n return {};\n }\n var firstPlanFi = plan && plan.sources && plan.sources[plan.sources.length - 1];\n var fi = plan && plan.primaryFs || firstPlanFi || {};\n\n fi.instrument_id = fi.instrument_id || fi.id;\n return fi;\n};\n\n/**\n * Given a planId it returns a complete plan object\n *\n * @param {*} checkoutSession\n * @param {*} planId\n * @returns\n */\nvar getPlanFromId = exports.getPlanFromId = function getPlanFromId(checkoutSession, planId) {\n var matchingPlans = _squid.$util.filter(checkoutSession.fundingOptions.plans, function (plan) {\n if (getPlanID(plan) === planId) {\n return plan;\n }\n });\n\n return matchingPlans && matchingPlans.length > 0 ? matchingPlans[0] : '';\n};\n\n/**\n * Returns the initial value to use considering\n * cart amount and rewards availability\n *\n * @param {*} models\n * @param {*} rewardsPayload\n * @returns\n */\nvar getInitialRewardsValue = exports.getInitialRewardsValue = function getInitialRewardsValue(models, rewardsPayload) {\n // TODO: Consider relying only on PAPS amount for initial value.\n // It would help with page refresh use case.\n var constraint = rewardsPayload.rewards_constraint;\n var grossTotal = toNumber(models.checkoutCart.purchase.amounts.total.amount, 2);\n if (!constraint.maximum_usable) {\n return grossTotal;\n }\n var maximumUsuableRewards = toNumber(constraint.maximum_usable.value);\n var initialValue = grossTotal < maximumUsuableRewards ? grossTotal : maximumUsuableRewards;\n\n return initialValue;\n};\n\n/**\n * Checks if the plan has PayPal balance in it\n *\n * @param {*} plan\n */\nvar isPayPalBalanceSelected = exports.isPayPalBalanceSelected = function isPayPalBalanceSelected() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // TODO: should default initialize to {} or error handle ?\n var sources = plan.sources || plan.secondaryFIs || [];\n\n return sources.some(function (source) {\n return source.type === 'BALANCE';\n });\n};\n\n/**\n * Return the current selected plan id.\n * Prioritize clickSelectedPlanID\n * over sessionSelectedPlanID\n *\n * @param {*} selectedmethod\n * @param {*} checkoutSession\n * @returns {*} planID\n */\nvar getSelectedPlan = exports.getSelectedPlan = function getSelectedPlan(selectedmethod, checkoutSession) {\n var clickSelectedPlanID = selectedmethod && selectedmethod.planId;\n var sessionSelectedPlan = checkoutSession && checkoutSession.plan || {};\n var sessionSelectedPlanID = getPlanID(sessionSelectedPlan);\n var selectionID = selectedmethod ? clickSelectedPlanID // Radio checkbox selection\n : sessionSelectedPlanID; // selectFI use-case, session selection\n\n return selectionID;\n};\n\n/**\n * Given some contraints and a checkoutSession, return the plan that matches exactly\n * TODO: HANDLE BALANCE PROPERLY\n * @param {String} instrumentId\n * @param {String} balance The currency code of the balance to be used\n * @param {Boolean} rewards Whether to use the rewards plan or not\n * @returns {String} planId of the plan to select\n */\nvar matchPlanFromConstraints = exports.matchPlanFromConstraints = function matchPlanFromConstraints(_ref) {\n var instrumentId = _ref.instrumentId,\n balance = _ref.balance,\n rewards = _ref.rewards,\n checkoutSession = _ref.checkoutSession;\n\n return checkoutSession.get('fundingOptions.plans', []).find(function (plan) {\n var idMatches = plan.primaryFs.id === instrumentId;\n var planHasBalance = plan.secondaryFIs && plan.secondaryFIs.length;\n var balanceMatches = balance && planHasBalance || !balance && !planHasBalance;\n var rewardsMatches = rewards && plan.rewards || !rewards && !plan.rewards;\n\n if (!idMatches || !balanceMatches || !rewardsMatches) {\n return false;\n }\n\n return plan;\n });\n};\n\n_angular.$rootScope;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.formatCurrency;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/rewards-checkbox/utils.js\n// module id = ../node_modules/xo-member-components/src/rewards-checkbox/utils.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoShowMoreFiLink = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nrequire('xo-ui-components/src/link/directive');\n\nvar _factory = require('./factory');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoShowMoreFiLink = exports.$xoShowMoreFiLink = _squid.$Component.extend('$xoShowMoreFiLink', {\n tag: 'xo-show-more-fi-link',\n template: _template2['default'],\n actions: {\n showMore: function showMore() {\n _factory.$ShowMoreFiFactory.set({ isShowMoreBtnClicked: true });\n _logger.$logger.info('checkout_fpti', {\n from: '3fi',\n to: 'process_3fi'\n });\n }\n },\n lifecycle: {\n enter: function enter() {}\n }\n});\n\nangular.value(\"$xoShowMoreFiLink\", $xoShowMoreFiLink);\n_squid.$Component;\n\n_logger.$logger;\n\n_factory.$ShowMoreFiFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/show-more-fi/directive.js\n// module id = ../node_modules/xo-member-components/src/show-more-fi/directive.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _ui = require('xo-ui-components/src/accessibility/ui');\n\nvar _index = require('xo-models/src/choice/index');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$ShowMoreFiFactory', function () {\n var state = {\n isTooManyFi: false,\n isShowMoreBtnClicked: false,\n eligible: false\n };\n\n var get = function get() {\n return state;\n };\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n // max number of FI to be shown by default\n // if user has <= 4 -- all 4 FI will be shown\n // if user has > 4 -- 3 FI will be shown\n var MAX_FI_NUMBER = 4;\n\n // condition to determine if there are too many FI's\n // to hide them and display \"Show More\" link\n var isTooManyFi = function isTooManyFi() {\n var planList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n return planList.length > MAX_FI_NUMBER;\n };\n\n // get pxp result\n var getPxp = function getPxp() {\n return (0, _squid.$pxp)('xo_hermes_3fi', 'xo_hermes_3fi_treatment', undefined, false, true).then(function (pxpRes) {\n return !!pxpRes;\n });\n };\n\n // when logout -> reset flag\n _angular.$rootScope.$on('logout', function (event, args) {\n state.isShowMoreBtnClicked = false;\n });\n\n // returns true if:\n // 1) there are too many FI's\n // 2) \"Show more\" link was not clicked yet\n var isFiNeverExpanded = function isFiNeverExpanded() {\n return !state.isShowMoreBtnClicked && state.isTooManyFi;\n };\n\n var init = function init(planList) {\n if (!state.eligible) {\n return;\n }\n state.isTooManyFi = isTooManyFi(planList);\n if (isFiNeverExpanded()) {\n _logger.$logger.info('checkout_fpti', {\n from: '3fi',\n to: 'prepare_3fi'\n });\n }\n };\n\n // eligible if:\n // 1. multi fi\n // 2. 3fi pxp returns treatment\n var decideEligibility = function decideEligibility(_ref) {\n var plans = _ref.plans;\n\n if (!isTooManyFi(plans)) {\n return;\n }\n\n return _index.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n var multipleFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.multipleFi || [];\n\n if (multipleFiVariants.indexOf(variant) !== -1) {\n return getPxp().then(function (pxpResult) {\n _logger.$logger.info('3fi_eligibility', {\n pxp: pxpResult\n });\n state.eligible = pxpResult;\n });\n }\n });\n };\n\n // used to show / hide individual fi entry of the plan list\n // index - selected radio box index starting from 0\n var shouldHideFiEntry = function shouldHideFiEntry(index) {\n return isFiNeverExpanded() && index + 1 > MAX_FI_NUMBER - 1;\n };\n\n // event handler for accessibility\n // if current index is 0 and user press UP - expand FI's\n // if current index is one which goes before the last visible one\n var selectFiOnKeyDown = function selectFiOnKeyDown(event, index) {\n if (index === 0 && event.keyCode === _ui.KEYS.UP || index + 1 >= MAX_FI_NUMBER - 2 && event.keyCode === _ui.KEYS.DOWN) {\n state.isShowMoreBtnClicked = true;\n }\n };\n\n return {\n get: get,\n set: set,\n init: init,\n isFiNeverExpanded: isFiNeverExpanded,\n decideEligibility: decideEligibility,\n shouldHideFiEntry: shouldHideFiEntry,\n selectFiOnKeyDown: selectFiOnKeyDown\n };\n});\n\n_angular.$rootScope;\n\n_squid.$util;\n\n_squid.$pxp;\n\n_squid.$config;\n\n_logger.$logger;\n\n_ui.KEYS;\n\n_index.$ChoiceEligibility;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/show-more-fi/factory.js\n// module id = ../node_modules/xo-member-components/src/show-more-fi/factory.js\n// module chunks = main-code-split","module.exports = \"\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/show-more-fi/template.html\n// module id = ../node_modules/xo-member-components/src/show-more-fi/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.authorize = exports.checkVaultingEligibility = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _auth = require('xo-models/src/auth');\n\n/**\n * checks if the current user is eligible\n * for vaulting based on PXP\n *\n * @returns {Promise} Represents current vaulting treatment\n */\nvar checkPxp = function checkPxp() {\n return (0, _squid.$elmo)('xo_hermes_vaulting', { 'ctx.country': _squid.$locale.country }, 'Trmt_xo_hermes_vaulting_1').then(function (result) {\n return result && result.treatment_name;\n });\n};\n\n/**\n * Checks weather a specific set of use cases are enabled/disabled.\n *\n * @returns {Object} Represents list of eligibility flags\n */\n// eslint-disable-line no-unused-vars\nvar getEligibility = function getEligibility() {\n var token = _angular.$rootScope.token;\n var models = {};\n return (0, _squid.$populate)(models, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _index.$CheckoutCartModel.instance(token),\n checkoutSession: _index.$CheckoutSessionModel.instance(token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n var hasBackupFunding = models.checkoutSession.cardBackup && models.checkoutSession.cardBackup.getPlan() && models.checkoutSession.cardBackup.getPlan().planId;\n\n return {\n billing: models.checkoutCart.isBilling(),\n invoice: models.checkoutAppData.get('flags.is_invoice_flow'),\n upop: models.checkoutSession.unconfirmed_upop,\n walletTokenization: models.checkoutCart.isWalletTokenization(),\n threeDS: models.checkoutSession.resolve_3ds,\n sepa: models.checkoutSession.get('sepa_mandate.bankId'),\n negativeBalance: models.checkoutSession.negBals,\n poma: models.auth.password_less,\n isXoonUpopRedirect: _squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon',\n miniBrowser: _angular.$rootScope.miniBrowser,\n secondButtonCredit: models.checkoutAppData.get('is_second_button_txn'),\n hasBackupFunding: hasBackupFunding\n };\n });\n};\n\n/**\n * Checks to see whether the current vaulting experience is eligible.\n * return the current experience based flow and pxp\n *\n * @returns {Promise} Represents current vaulting experience\n */\nvar checkVaultingEligibility = exports.checkVaultingEligibility = function checkVaultingEligibility() {\n var isCorp = _squid.$meta.corp;\n var isVaultFlow = _squid.$util.param('vault');\n if (isCorp && isVaultFlow === 'true') {\n _logger.$logger.info('xo_hermes_vaulting_eligibility_forced', {\n isCorp: isCorp, isVaultFlow: isVaultFlow\n });\n return _squid.$promise.resolve(isVaultFlow);\n }\n return getEligibility().then(function (eligibility) {\n // Define an explicit check since it makes the eligibility more easier to reference\n var decision = !eligibility.billing && !eligibility.invoice && !eligibility.upop && !eligibility.walletTokenization && !eligibility.threeDS && !eligibility.sepa && !eligibility.negativeBalance && !eligibility.poma && !eligibility.isXoonUpopRedirect && !eligibility.miniBrowser && !eligibility.secondButtonCredit && !eligibility.hasBackupFunding;\n _logger.$logger.info('xo_hermes_vaulting_eligibility', {\n eligibility: eligibility,\n decision: decision\n });\n return decision ? checkPxp() : _squid.$promise.resolve('');\n });\n};\n\n/**\n * Given an error use cases handles logging\n * and functionality\n *\n * @param {*} name of error\n * @param {*} err Error object\n * @param {*} type 'contingency' or 'error'\n */\nvar errorHandler = function errorHandler(name, err, type) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_' + type, { name: name });\n throw err;\n};\n\n/**\n * Performs an authorize on checkout and returns a response\n *\n * @param {*} checkoutSession\n * @param {*} checkoutAppData\n * @returns {String} Representing next state\n */\nvar authorize = exports.authorize = function authorize(checkoutSession, checkoutAppData) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_attempt');\n _angular.$rootScope.$emit('loadingMessage', 'Vaulting through checkout.');\n var cardBackup = checkoutSession.cardBackup && checkoutSession.cardBackup.getPlan();\n return checkoutSession.action('authorize', {\n data: {\n alternateFundingOptionId: cardBackup && cardBackup.planId\n },\n success: function success(result) {\n _logger.$logger.info('xo_hermes_vaulting_authorize_success');\n if (!window.xchild && checkoutAppData.doec_on_approve()) {\n return 'checkout.pay';\n }\n return 'checkout.end';\n },\n contingencies: function contingencies(name, err) {\n return errorHandler(name, err, 'contingency');\n },\n error: function error(name, err) {\n return errorHandler(name, err, 'error');\n }\n });\n};\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$locale;\n\n_squid.$util;\n\n_squid.$elmo;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$meta;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutSessionModel;\n\n_auth.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-member-components/src/vaulting/utils.js\n// module id = ../node_modules/xo-member-components/src/vaulting/utils.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$PXPBlacklist = exports.$TokenizedWalletMsbOfferModel = exports.$TokenizedWalletPinModel = exports.$TokenizedFundingCapabilitiesModel = exports.$TokenizedWalletInfoModel = exports.$TokenizedWalletEligibilityModel = exports.$MessengerIntegrationDataModel = exports.$AppDataModel = exports.$LocaleConfigModel = exports.$PXPModel = undefined;\n\nvar _brandNames, _msbDisclaimerLinks;\n\nvar _squid = require('squid');\n\nvar $PXPModel = exports.$PXPModel = _squid.$Model.extend('$PXPModel', {\n api: new _squid.$Api({\n uri: '/api/pxp/:id'\n })\n});\n\nvar $LocaleConfigModel = exports.$LocaleConfigModel = _squid.$Model.extend('$LocaleConfigModel', {\n api: new _squid.$Api({\n uri: '/api/localeConfig'\n })\n});\n\nvar $AppDataModel = exports.$AppDataModel = _squid.$Model.extend('$AppDataModel', {\n api: new _squid.$Api({\n uri: '/api/app'\n }),\n\n isMobile: function isMobile() {\n return this.platform === 'mobile';\n }\n});\n\nvar $MessengerIntegrationDataModel = exports.$MessengerIntegrationDataModel = _squid.$Model.extend('$MessengerIntegrationDataModel', {\n api: new _squid.$Api({\n uri: '/api/messenger'\n })\n});\n\nvar $TokenizedWalletEligibilityModel = exports.$TokenizedWalletEligibilityModel = _squid.$Model.extend('$TokenizedWalletEligibilityModel', {\n api: new _squid.$Api({\n uri: '/api/eligibility/tokenizedWallet/:id'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n isEligible: function isEligible() {\n return this.eligible;\n }\n});\n\nvar subjectTypes = {\n SAMSUNG_PAY: 'Samsung',\n ANDROID_PAY: 'google'\n};\n\nvar brandNames = (_brandNames = {}, _brandNames[subjectTypes.SAMSUNG_PAY] = 'Samsung Pay', _brandNames[subjectTypes.ANDROID_PAY] = 'Google Pay', _brandNames);\n\n/**\n * disclaimer links used on the *pay review page\n */\nvar disclaimerLinks = function disclaimerLinks(country) {\n var _ref;\n\n return _ref = {}, _ref[subjectTypes.SAMSUNG_PAY] = 'https://www.paypal.com/' + country + '/webapps/mpp/ua/ppsamsungpay-tnc', _ref[subjectTypes.ANDROID_PAY] = 'https://www.paypal.com/' + country + '/webapps/mpp/ua/ppandroidpay-tnc', _ref;\n};\n\n// disclaimer links used on Msb offer popup\nvar msbDisclaimerLinks = (_msbDisclaimerLinks = {}, _msbDisclaimerLinks[subjectTypes.SAMSUNG_PAY] = 'https://www.paypal.com/us/smarthelp/article/samsung-pay-terms-and-conditions-faq3863', _msbDisclaimerLinks[subjectTypes.ANDROID_PAY] = 'https://www.paypal.com/us/smarthelp/article/google-pay-terms-and-conditions-faq3862', _msbDisclaimerLinks);\n\n/**\n * this model populates data from tokenized wallet mayfly object\n * (see xo-hermes-app/apis/tokenizedWalletInfo) which contains:\n *\n * - wallet_id (used for both Samsung Pay and Android Pay)\n * - external_device_id (used for Samsung Pay only)\n * - subject (used for both Samsung Pay and Android Pay)\n *\n * Note: model is being populated in xo-preload on the server (see config.json)\n */\n\nvar $TokenizedWalletInfoModel = exports.$TokenizedWalletInfoModel = _squid.$Model.extend('$TokenizedWalletInfoModel', {\n\n api: new _squid.$Api({\n uri: '/api/info/tokenizedWallet/:id'\n }),\n\n isAndroidPay: function isAndroidPay() {\n return this.subject === subjectTypes.ANDROID_PAY;\n },\n\n isSamsungPay: function isSamsungPay() {\n return this.subject === subjectTypes.SAMSUNG_PAY;\n },\n\n getSubject: function getSubject() {\n return this.subject || subjectTypes.ANDROID_PAY;\n },\n\n // until we use mayfly for android pay - fallback to Android Pay\n brandName: function brandName() {\n return brandNames[this.subject] || brandNames[subjectTypes.ANDROID_PAY];\n },\n\n // until we use mayfly for android pay - fallback to Android Pay\n getDisclaimerLink: function getDisclaimerLink() {\n var country = _squid.$locale.country.toLowerCase();\n\n return disclaimerLinks(country)[this.subject] || disclaimerLinks(country)[subjectTypes.ANDROID_PAY];\n },\n\n // get Msb terms and conditions link based on the subject\n getMsbDisclaimerLink: function getMsbDisclaimerLink() {\n return msbDisclaimerLinks[this.subject] || msbDisclaimerLinks[subjectTypes.ANDROID_PAY];\n }\n});\n\nvar $TokenizedFundingCapabilitiesModel = exports.$TokenizedFundingCapabilitiesModel = _squid.$Model.extend('$TokenizedFundingCapabilitiesModel', {\n api: new _squid.$Api({\n uri: '/api/capabilities/tokenizedWallet/:id'\n }),\n invalidateOnLogout: true,\n\n isDirectFundingEnabled: function isDirectFundingEnabled() {\n return this.directFundingEnabled;\n },\n\n isTopupEnabled: function isTopupEnabled() {\n return this.topupFundingEnabled;\n },\n getProductName: function getProductName() {\n return this.name;\n },\n\n getCurrency: function getCurrency() {\n return this.issuingCurrency;\n },\n\n getContingencies: function getContingencies() {\n return this.contingencies;\n },\n\n getTopupAmountChoices: function getTopupAmountChoices() {\n return this.topUpAmountChoices;\n }\n});\n\nvar $TokenizedWalletPinModel = exports.$TokenizedWalletPinModel = _squid.$Model.extend('$TokenizedWalletPinModel', {\n api: new _squid.$Api({\n uri: '/api/pin/tokenizedWallet/:id'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n getPinOrigin: function getPinOrigin() {\n return this.pinOrigin;\n },\n getSuggestedPin: function getSuggestedPin() {\n return this.suggestedPin;\n },\n getSuggestedKey: function getSuggestedKey() {\n return this.suggestedKey;\n },\n getPinId: function getPinId() {\n return this.pinId;\n },\n isPinIdPresent: function isPinIdPresent() {\n return !!this.pinId;\n },\n isSetupEligible: function isSetupEligible() {\n return this.pinOrigin === 'UNSET' || this.pinOrigin === 'SYSTEM';\n }\n});\n\nvar $TokenizedWalletMsbOfferModel = exports.$TokenizedWalletMsbOfferModel = _squid.$Model.extend('$TokenizedWalletMsbOfferModel', {\n api: new _squid.$Api({\n uri: '/api/msb/tokenizedWallet/:id'\n }),\n invalidateOnLogout: true\n});\n\nvar $PXPBlacklist = exports.$PXPBlacklist = {\n isMerchantBlacklisted: function isMerchantBlacklisted(merchantId) {\n return _squid.$config.pxpBlacklist && _squid.$config.pxpBlacklist.merchant && _squid.$config.pxpBlacklist.merchant.indexOf(merchantId) !== -1;\n }\n};\n\nangular.value(\"$PXPModel\", $PXPModel);\nangular.value(\"$LocaleConfigModel\", $LocaleConfigModel);\nangular.value(\"$AppDataModel\", $AppDataModel);\nangular.value(\"$MessengerIntegrationDataModel\", $MessengerIntegrationDataModel);\nangular.value(\"$TokenizedWalletEligibilityModel\", $TokenizedWalletEligibilityModel);\nangular.value(\"$TokenizedWalletInfoModel\", $TokenizedWalletInfoModel);\nangular.value(\"$TokenizedFundingCapabilitiesModel\", $TokenizedFundingCapabilitiesModel);\nangular.value(\"$TokenizedWalletPinModel\", $TokenizedWalletPinModel);\nangular.value(\"$TokenizedWalletMsbOfferModel\", $TokenizedWalletMsbOfferModel);\nangular.value(\"$PXPBlacklist\", $PXPBlacklist);\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/app/index.js\n// module id = ../node_modules/xo-models/src/app/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ULoginModel = exports.$AuthModel = exports.$AuthApi = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _app = require('../app');\n\nvar $AuthApi = exports.$AuthApi = _squid.$Model.extend('$AuthApi', {\n api: new _squid.$Api({\n uri: '/api/auth',\n postAttempts: 3\n })\n});\n\nvar $AuthModel = exports.$AuthModel = _squid.$Model.extend('$AuthModel', {\n api: new _squid.$Api({\n uri: '/api/auth',\n postAttempts: 3\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n loggedIn: function loggedIn() {\n return this.logged_in;\n },\n\n visitorId: function visitorId() {\n return this.visitor_id;\n },\n\n accessToken: function accessToken() {\n return this.access_token;\n },\n\n accessTokenPresent: function accessTokenPresent() {\n return this.access_token_present;\n },\n\n refreshToken: function refreshToken() {\n return this.refresh_token;\n },\n\n rememberedOT: function rememberedOT() {\n return this.remembered && this.remembered_device_token;\n },\n\n isSessionTimeout: function isSessionTimeout() {\n return this.meta && this.meta.invalidated;\n },\n\n clearCookies: function clearCookies() {\n var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return this.action('clearCookies', { data: data });\n },\n\n showNotYou: function showNotYou() {\n var isAuthApiCall = this.is_auth_api_call;\n var isConsumerApp = _squid.$util.param('source') === 'consumerApp';\n var redirectToHermesOn3DSDecline = _squid.$util.param('redirectToHermesOn3DSDecline');\n var isUlReturnLoggedIn = _squid.$util.param('ulReturn') && this.auth_state === 'LOGGEDIN';\n\n // for Tokenized Venice integraion (Google Pay Venice / Samsung Pay Venice) - `not you` link should be hidden.\n // `TokenizedWalletInfoModel` is always populated in xo-preload (even for error cases - it will be just empty)\n // so we don't need to retrieve the model\n var tokenizedWalletInfo = _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token);\n var isNotVeniceTokenizedIntegration = function isNotVeniceTokenizedIntegration() {\n return !tokenizedWalletInfo || tokenizedWalletInfo && !tokenizedWalletInfo.is_venice_integration;\n };\n\n // disallow_login_switch is used for Google Pay - acount linking to hide \"not you\" button (see xo-hercules/auth/outputMapper)\n return isAuthApiCall && !isConsumerApp && !redirectToHermesOn3DSDecline && !isUlReturnLoggedIn && !this.disallow_login_switch && isNotVeniceTokenizedIntegration();\n },\n\n logout: function logout() {\n _squid.$Model.bulkInvalidate('invalidateOnLogout');\n _angular.$rootScope.$broadcast('logout');\n return this.action('logout');\n },\n\n /**\n * Perform a logout and then redirect.\n * @param reason - used to log reason why a redirect was trigged.\n */\n logoutAndRedirect: function logoutAndRedirect() {\n var _this = this;\n\n var reason = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'logout';\n\n return this.logout().then(function () {\n return _this.redirectToLogin(reason);\n });\n },\n\n // redirect to UL as landing through xo-landing-router\n // so first it hits hermes app and then redirects to UL\n redirectToLogin: function redirectToLogin(reason, ctx) {\n if (!reason) {\n return false;\n }\n // current query parameters\n var qs = _squid.$util.queryString() || '';\n var params = { 'ulClientRedirect': reason };\n\n params = _squid.$util.extend(params, ctx); // update params with context that may be sent\n\n // insert \"ulClientRedirect\" param and remove \"ul\", \"ulReturn\"\n var updatedQs = _squid.$util.queryStringSplice(qs, params, ['ul', 'ulReturn']);\n\n // base url should not be hardcoded to \"/webapps/hermes\" due to other use cases such as\n // 1. * Pay (Android Pay / Samsung Pay) -- uses /agreements/setup to exchange BA token to EC token\n var ulAsLandingUrl = _squid.$util.paypalURL('' + window.location.pathname + updatedQs);\n\n _logger.$logger.info('redirecting_to_ulAsLanding');\n return _squid.$util.redirect(ulAsLandingUrl);\n }\n\n});\n\nvar $ULoginModel = exports.$ULoginModel = _squid.$Model.extend('$ULoginModel', {\n api: new _squid.$Api({\n uri: '/api/auth/ulogin',\n postAttempts: 1,\n cache: false\n })\n});\n\nangular.value(\"$AuthApi\", $AuthApi);\nangular.value(\"$AuthModel\", $AuthModel);\nangular.value(\"$ULoginModel\", $ULoginModel);\n_angular.$rootScope;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_logger.$logger;\n\n_app.$TokenizedWalletInfoModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/auth/index.js\n// module id = ../node_modules/xo-models/src/auth/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$BMLApplicationModel = exports.$BMLModel = exports.$ApplyForBMLModel = undefined;\n\nvar _squid = require('squid');\n\nvar $ApplyForBMLModel = exports.$ApplyForBMLModel = _squid.$Model.extend('$ApplyForBMLModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/cart',\n cache: true\n }),\n\n personalInformation: {\n day: '',\n month: '',\n year: '',\n natId: '',\n phone: {\n telephone: '',\n phoneType: ''\n }\n },\n\n billingAdrress: {\n phoneType: '',\n phoneNumber: ''\n }\n});\n\nvar $BMLModel = exports.$BMLModel = _squid.$Model.extend('$BMLModel', {\n api: new _squid.$Api({\n uri: '/api/bml',\n cache: false\n }),\n\n applicationStatus: function applicationStatus() {\n return this.application_status;\n },\n\n applicationId: function applicationId() {\n return this.application_id;\n }\n});\n\nvar $BMLApplicationModel = exports.$BMLApplicationModel = _squid.$Model.extend('$BMLApplicationModel', {\n api: new _squid.$Api({\n uri: '/api/bml/:application_id',\n cache: false\n })\n});\n\nangular.value(\"$ApplyForBMLModel\", $ApplyForBMLModel);\nangular.value(\"$BMLModel\", $BMLModel);\nangular.value(\"$BMLApplicationModel\", $BMLApplicationModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/bml/index.js\n// module id = ../node_modules/xo-models/src/bml/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CheckoutSessionModel = exports.$CardBackupModel = exports.$CheckoutPlanModel = exports.$CheckoutShippingAddressesModel = exports.$CreditOptionsModel = exports.$CheckoutPayeeModel = exports.$ShippingAddressModel = exports.$CheckoutShippingAddressModel = exports.$FlowEligibilityModel = exports.$InstallmentOptionsModel = exports.serializeInstallmentsOptionsData = exports.$FundingOptionsModel = exports.$FundingSourceModel = exports.$CheckoutAppDataModel = exports.$CheckoutCartModel = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _squid = require('squid');\n\nvar _processorDecline = require('../processorDecline');\n\nvar _utils = require('./lib/utils');\n\nvar $CheckoutCartModel = exports.$CheckoutCartModel = _squid.$Model.extend('$CheckoutCartModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/cart',\n cache: true\n }),\n\n isPurchase: function isPurchase() {\n return Boolean(this.purchase);\n },\n\n getCartCurrencyCode: function getCartCurrencyCode() {\n return _squid.$util.getProperty(this, 'purchase.amounts.total.currency_code');\n },\n\n // NOTE returns undefined if this is not a purchase or there is some other error\n getPurchaseAmount: function getPurchaseAmount() {\n if (!this.isPurchase()) {\n return;\n }\n var purchaseAmount = _squid.$util.getProperty(this, 'purchase.amounts.total.amount');\n var purchaseAmountFloat = parseFloat(purchaseAmount);\n\n return purchaseAmountFloat || undefined;\n },\n\n isBilling: function isBilling() {\n return Boolean(this.billing);\n },\n\n isSubscriptionsV1: function isSubscriptionsV1() {\n return this.isBilling() && this.billing.type === 'SUBSCRIPTIONS_V1';\n },\n\n getBaToken: function getBaToken() {\n return this.isBilling() && this.billing.ba_token;\n },\n\n isBillingPurchase: function isBillingPurchase() {\n return this.isPurchase() && this.isBilling();\n },\n\n isBillingNoPurchase: function isBillingNoPurchase() {\n return this.isBilling() && !this.isPurchase();\n },\n\n getBillingDescription: function getBillingDescription() {\n return this.billing && this.billing.description;\n },\n\n isMultiSellerPurchase: function isMultiSellerPurchase() {\n return this.purchaseUnits && this.purchaseUnits.length > 1;\n },\n\n isShippingMethodStorePickUp: function isShippingMethodStorePickUp() {\n return this.isPurchase() && (this.purchase.shipping_method === '29' || this.purchase.shipping_method === '21');\n },\n\n isWalletTokenization: function isWalletTokenization() {\n return this.isBilling() && this.billing.intent === 'TOKENIZED_WALLET';\n },\n\n getExternalCallbackOptions: function getExternalCallbackOptions() {\n return this.purchaseUnits && this.purchaseUnits[0] && this.purchaseUnits[0].external_callback_options;\n }\n});\n\nvar $CheckoutAppDataModel = exports.$CheckoutAppDataModel = _squid.$Model.extend('$CheckoutAppDataModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/appData'\n }),\n\n useraction: function useraction() {\n // user_action from session takes precedence over CGI param.\n var incontext_integration = window.xchild && window.xchild.props.commit ? 'commit' : false;\n var rest_integration = this.flags && this.flags.user_action === 'PAY' ? 'commit' : false;\n\n return rest_integration || incontext_integration || _squid.$util.param('useraction');\n },\n\n is_wps_flow: function is_wps_flow() {\n return this.flags && this.flags.is_wps_flow;\n },\n\n is_snt_supported: function is_snt_supported() {\n return this.flags && this.flags.is_snt_supported;\n },\n\n doec_on_approve: function doec_on_approve() {\n return this.flags && this.flags.doec_on_approve;\n },\n\n is_wps_subscription_flow: function is_wps_subscription_flow() {\n return this.flags && this.flags.is_wps_subscription_flow;\n },\n\n /*\n * Returns a string or undefined value\n * nonEmptyReturnValue - if true, then always return non empty string\n * isSentenceBeginning - if true, and merchant brand_name and merchant_name is undefined\n * then returns 'The merchant'. If false, returns 'the merchant'\n * NOTE: We should not return merchant_email for any reason as it is a PII\n */\n getMerchantDisplayName: function getMerchantDisplayName() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n nonEmptyReturnValue = _ref.nonEmptyReturnValue,\n isSentenceBeginning = _ref.isSentenceBeginning,\n getContent = _ref.getContent;\n\n var merchantName = this.merchant.brand_name || this.merchant.merchant_name;\n\n if (nonEmptyReturnValue) {\n var contentKey = isSentenceBeginning ? 'common.Themerchant' : 'common.themerchant';\n var merchantAltName = getContent ? getContent(contentKey) : _squid.$locale.content.get(contentKey);\n\n return merchantName || merchantAltName;\n }\n\n return merchantName;\n },\n\n isInvoiceFlow: function isInvoiceFlow() {\n return Boolean(this.flags && this.flags.is_invoice_flow);\n },\n\n\n // Returns true if flow should be treated as a second button (PP Credit) transaction\n isSecondButton: function isSecondButton() {\n return this.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n }\n});\n\nvar $FundingSourceModel = exports.$FundingSourceModel = _squid.$Model.extend('$FundingSourceModel', {\n\n formatLast4: function formatLast4() {\n var last4;\n\n if (this.last4) {\n last4 = this.last4;\n\n if (!this.parent.isAuthRequired) {\n last4 = 'x-' + last4;\n }\n }\n\n return last4;\n }\n});\n\nvar $FundingOptionsModel = exports.$FundingOptionsModel = _squid.$Model.extend('$FundingOptionsModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/fundingOptions',\n postAttempts: 2\n }),\n\n eachPlan: function eachPlan(method, context) {\n angular.forEach(this.plans, method, this);\n },\n\n hasECheck: function hasECheck() {\n var _instruments = this.instruments,\n instruments = _instruments === undefined ? [] : _instruments;\n\n\n return instruments.some(function (instr) {\n return instr.type === 'ECHECK' || instr.subtype === 'ECHECK';\n });\n },\n\n hasCredit: function hasCredit() {\n var _instruments2 = this.instruments,\n instruments = _instruments2 === undefined ? [] : _instruments2;\n\n\n return instruments.some(function (instrument) {\n return instrument.type === 'CREDIT';\n });\n },\n\n getBankPlanIdByInstrumentId: function getBankPlanIdByInstrumentId(id, subType) {\n var fundingInstrument = _squid.$util.find(this.plans, function (plan) {\n return plan.primaryFs && plan.primaryFs.type === 'BANK' && plan.primaryFs.id === id && plan.primaryFs.subtype === subType;\n });\n\n return fundingInstrument && fundingInstrument.planId;\n },\n\n // get IACH and PAD banks combined by plan.primaryFs.id\n // order matters, so if IACH comes first then PAD is filtered and vise versa\n getPadAndIachCombinedPlans: function getPadAndIachCombinedPlans() {\n var _this = this;\n\n var plans = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.plans;\n\n if (!plans) {\n return [];\n }\n var planIds = {};\n\n plans.forEach(function (plan) {\n var planId = plan.planId,\n primaryFs = plan.primaryFs;\n\n\n if (_this.isIACH(plan) && !planIds[planId]) {\n planIds[primaryFs.padPlanId] = true;\n }\n if (_this.isPAD(plan) && !planIds[planId]) {\n planIds[primaryFs.iachPlanId] = true;\n }\n });\n\n return plans.filter(function (plan) {\n return !planIds[plan.planId];\n });\n },\n\n // get plan by planId\n getPlanByPlanId: function getPlanByPlanId(id) {\n var plan = _squid.$util.find(this.plans, function (p) {\n return p.primaryFs && p.planId === id;\n });\n\n return plan;\n },\n\n getPlanSubType: function getPlanSubType() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _plan$primaryFs = plan.primaryFs;\n _plan$primaryFs = _plan$primaryFs === undefined ? {} : _plan$primaryFs;\n var subtype = _plan$primaryFs.subtype;\n\n\n return subtype;\n },\n\n\n // is plan PAD bank (bank is charged after some delay)\n isPAD: function isPAD(plan) {\n return this.getPlanSubType(plan) === 'PAD';\n },\n\n\n // is plan IACH bank (instant transfer)\n isIACH: function isIACH(plan) {\n return this.getPlanSubType(plan) === 'IACH';\n },\n\n\n // is plan MEFT bank\n isMEFT: function isMEFT(plan) {\n return this.getPlanSubType(plan) === 'MEFT';\n },\n\n\n // is plan IACH bank (instant transfer)\n isIACHWithPad: function isIACHWithPad(plan) {\n return this.isIACH(plan) && plan.primaryFs.padPlanId;\n },\n\n // get PAD hop date (when bank will be charged) based on selected plan and PAD toggle state\n getPadPlanHopDate: function getPadPlanHopDate(plan) {\n if (this.isIACH(plan)) {\n var padPlan = this.getPlanByPlanId(plan.primaryFs.padPlanId);\n\n if (padPlan) {\n return padPlan.primaryFs.hop_date;\n }\n } else {\n return plan.primaryFs.hop_date;\n }\n },\n\n // get PAD or IACH plan id based on selected plan and PAD toggle state\n getPadOrIachPlanIdBySelectedPlan: function getPadOrIachPlanIdBySelectedPlan(_ref2) {\n var plan = _ref2.plan,\n isPadToggleSelected = _ref2.isPadToggleSelected;\n\n if (!plan || !plan.primaryFs) {\n return;\n }\n\n var _plan$primaryFs2 = plan.primaryFs,\n padPlanId = _plan$primaryFs2.padPlanId,\n iachPlanId = _plan$primaryFs2.iachPlanId,\n planId = plan.planId;\n\n\n if (isPadToggleSelected) {\n return this.isPAD(plan) ? planId : padPlanId;\n } else {\n return this.isIACH(plan) ? planId : iachPlanId;\n }\n },\n\n onPopulate: function onPopulate() {\n var self = this;\n\n angular.forEach(this.plans, function (plan) {\n if (plan.primaryFs && plan.primaryFs.type === 'BANK' && (plan.primaryFs.subtype === 'IACH' || plan.primaryFs.subtype === 'PAD')) {\n Object.defineProperty(plan.primaryFs, plan.primaryFs.subtype === 'IACH' ? 'padPlanId' : 'iachPlanId', {\n enumerable: true,\n configurable: false,\n writeable: false,\n value: self.getBankPlanIdByInstrumentId(plan.primaryFs.id, plan.primaryFs.subtype === 'IACH' ? 'PAD' : 'IACH')\n });\n }\n });\n },\n\n getBankPadPlanIdByInstrumentId: function getBankPadPlanIdByInstrumentId(fsId, fsSubtype) {\n var bankPadPlan = _squid.$util.find(this.plans, function () {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _plan$primaryFs3 = plan.primaryFs;\n _plan$primaryFs3 = _plan$primaryFs3 === undefined ? {} : _plan$primaryFs3;\n var id = _plan$primaryFs3.id,\n type = _plan$primaryFs3.type,\n subtype = _plan$primaryFs3.subtype;\n\n\n return id === fsId && type === 'BANK' && subtype === fsSubtype;\n });\n\n if (!bankPadPlan) {\n return;\n }\n\n var _bankPadPlan$primaryF = bankPadPlan.primaryFs;\n _bankPadPlan$primaryF = _bankPadPlan$primaryF === undefined ? {} : _bankPadPlan$primaryF;\n var subtype = _bankPadPlan$primaryF.subtype,\n padPlanId = _bankPadPlan$primaryF.padPlanId,\n iachPlanId = _bankPadPlan$primaryF.iachPlanId;\n\n\n return subtype === 'IACH' ? padPlanId : iachPlanId;\n },\n\n\n isPadToggleApplicable: function isPadToggleApplicable() {\n var padToggleApplicable = false;\n\n this.eachPlan(function (plan) {\n if (!padToggleApplicable && plan.primaryFs && plan.primaryFs.type === 'BANK') {\n if (plan.primaryFs.subtype === 'IACH' && plan.primaryFs.hasOwnProperty('padPlanId')) {\n padToggleApplicable = plan.primaryFs.padPlanId ? true : false;\n } else if (plan.primaryFs.subtype === 'PAD' && plan.primaryFs.hasOwnProperty('iachPlanId')) {\n padToggleApplicable = plan.primaryFs.iachPlanId ? true : false;\n }\n }\n }, this);\n\n return padToggleApplicable;\n },\n\n isPadToggleApplicableForFS: function isPadToggleApplicableForFS(planId) {\n var padToggleApplicable = false;\n var selectedPlan = _squid.$util.find(this.plans, function (plan) {\n return plan.planId === planId;\n });\n\n if (selectedPlan && selectedPlan.primaryFs && selectedPlan.primaryFs.type === 'BANK' && (selectedPlan.primaryFs.subtype === 'IACH' && selectedPlan.primaryFs.padPlanId || selectedPlan.primaryFs.subtype === 'PAD' && selectedPlan.primaryFs.iachPlanId)) {\n padToggleApplicable = true;\n }\n\n return padToggleApplicable;\n },\n\n getPreferred: function getPreferred() {\n var _this2 = this;\n\n return _squid.$util.find(this.plans, function (plan) {\n return _this2.isPreferred(plan);\n });\n },\n\n isPreferred: function isPreferred() {\n var plan = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (this.isPAD(plan)) {\n // if the current plan is PAD -> find corresponding IACH plan to see if it's preferred\n var iachPlan = this.getPlanByPlanId(plan.primaryFs.iachPlanId) || {};\n var _iachPlan$primaryFs = iachPlan.primaryFs;\n _iachPlan$primaryFs = _iachPlan$primaryFs === undefined ? {} : _iachPlan$primaryFs;\n\n var _iachPlan$primaryFs$i = _iachPlan$primaryFs.isPreferred,\n _isPreferred = _iachPlan$primaryFs$i === undefined ? false : _iachPlan$primaryFs$i;\n\n return _isPreferred;\n }\n\n var _plan$primaryFs4 = plan.primaryFs;\n _plan$primaryFs4 = _plan$primaryFs4 === undefined ? {} : _plan$primaryFs4;\n var _plan$primaryFs4$isPr = _plan$primaryFs4.isPreferred,\n isPreferred = _plan$primaryFs4$isPr === undefined ? false : _plan$primaryFs4$isPr;\n\n\n return isPreferred;\n },\n\n // get Merchant specific balance by plan id\n getMsbByPlanId: function getMsbByPlanId(planId) {\n var plan = this.getPlanByPlanId(planId);\n\n return plan && plan.incentive;\n },\n\n /**\n * Avoid plans that are not meant for display on the UI.\n * - Hide Rewards\n */\n getDisplayPlans: function getDisplayPlans() {\n // return type should be undefined in no plans\n // for billing agreement use case\n return this.plans ? this.plans.filter(function (plan) {\n return !plan.rewards;\n }) : this.plans;\n },\n /**\n * Avoid instruments that are not meant for display on the UI.\n * - Hide Rewards\n */\n getDisplayInstruments: function getDisplayInstruments() {\n var _instruments3 = this.instruments,\n instruments = _instruments3 === undefined ? [] : _instruments3;\n\n\n return instruments.filter(function (instrument) {\n return instrument.type !== 'REWARDS';\n });\n }\n});\n\n// Map the data needed for the installmentsOptions endpoint\nvar serializeInstallmentsOptionsData = exports.serializeInstallmentsOptionsData = function serializeInstallmentsOptionsData(_ref3) {\n var merchant_country = _ref3.checkoutAppData.merchant.merchant_country,\n checkoutCart = _ref3.checkoutCart,\n country = _ref3.country,\n id = _ref3.payee.merchant.id,\n isMemberCredit = _ref3.isMemberCredit,\n cc = _ref3.cc;\n\n var payload = {\n checkoutAppData: {\n merchant: {\n merchant_country: merchant_country\n }\n },\n checkoutCart: {},\n country: country,\n payee: {\n merchant: {\n id: id\n }\n },\n isMemberCredit: isMemberCredit,\n cc: cc\n };\n\n if (checkoutCart.purchase && checkoutCart.purchase.amounts) {\n var _checkoutCart$purchas = checkoutCart.purchase.amounts.total,\n amount = _checkoutCart$purchas.amount,\n currency_code = _checkoutCart$purchas.currency_code;\n\n\n payload.checkoutCart.purchase = {\n amounts: {\n total: {\n amount: amount,\n currency_code: currency_code\n }\n }\n };\n }\n\n return payload;\n};\n\nvar $InstallmentOptionsModel = exports.$InstallmentOptionsModel = _squid.$Model.extend('$InstallmentOptionsModel', {\n\n api: new _squid.$Api({\n uri: '/api/checkout/:id/installmentOptions/',\n postAttempts: 2\n }),\n\n save: function save(options) {\n options.data = serializeInstallmentsOptionsData(options.data);\n\n return this._super.save.call(this, options);\n }\n});\n\nvar $FlowEligibilityModel = exports.$FlowEligibilityModel = _squid.$Model.extend('$FlowEligibilityModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/flowEligibility'\n })\n});\n\nvar $CheckoutShippingAddressModel = exports.$CheckoutShippingAddressModel = _squid.$Model.extend('$CheckoutShippingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:parent.id/shipping/:id'\n })\n});\n\nvar $ShippingAddressModel = exports.$ShippingAddressModel = _squid.$Model.extend('$ShippingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/shipping/add'\n }),\n\n serialize: function serialize() {\n return {\n first_name: this.first_name,\n last_name: this.last_name,\n recipient_name: this.recipient_name,\n line1: this.line1,\n line2: this.line2,\n city: this.city,\n state: this.state,\n postal_code: this.postal_code,\n country: this.country\n };\n }\n});\n\nvar $CheckoutPayeeModel = exports.$CheckoutPayeeModel = _squid.$Model.extend('$CheckoutPayeeModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/payee'\n }),\n\n getId: function getId() {\n return this.merchant && this.merchant.id;\n },\n\n isGambling: function isGambling() {\n return this.merchant && this.merchant.isGambling;\n },\n\n isOnBaNoStickyList: function isOnBaNoStickyList() {\n var merchantId = this.getId();\n\n return merchantId && _squid.$config.disableMerchantForStickyBA && _squid.$config.disableMerchantForStickyBA.indexOf(merchantId) > -1;\n }\n});\n\nvar creditOptionsModel = {\n largeEligibleAmount: {\n US: 99,\n GB: 150\n }\n};\n\n// keeping sacEligibleAmount available for backwards compat, largeEligibleAmount preferred\ncreditOptionsModel.sacEligibleAmount = creditOptionsModel.largeEligibleAmount;\n\nvar $CreditOptionsModel = exports.$CreditOptionsModel = creditOptionsModel;\n\nvar $CheckoutShippingAddressesModel = exports.$CheckoutShippingAddressesModel = _squid.$Model.extend('$CheckoutShippingAddressesModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/shipping'\n }),\n\n onPopulate: function onPopulate() {\n this.addresses = this.children($CheckoutShippingAddressModel, this.addresses);\n },\n\n getPreferredShippingAddress: function getPreferredShippingAddress() {\n var preferredAddress = {};\n\n if (this.addresses) {\n var i = void 0;\n var address = void 0;\n\n for (i = 0; i < this.addresses.length; i++) {\n address = this.addresses[i];\n\n if (address && address.preferred_address) {\n preferredAddress = {\n 'line1': address.line1,\n 'line2': address.line2,\n 'city': address.city,\n 'state': address.state,\n 'postal_code': address.postal_code,\n 'country_code': address.country_code\n };\n\n break;\n }\n }\n }\n return preferredAddress;\n },\n\n getPrimaryShippingAddress: function getPrimaryShippingAddress() {\n var primaryAddress = {};\n\n if (this.addresses) {\n var i = void 0;\n var address = void 0;\n\n for (i = 0; i < this.addresses.length; i++) {\n address = this.addresses[i];\n\n if (address && address.primary_address) {\n primaryAddress = {\n 'line1': address.line1,\n 'line2': address.line2,\n 'city': address.city,\n 'state': address.state,\n 'postal_code': address.postal_code,\n 'country_code': address.country_code\n };\n\n break;\n }\n }\n }\n return primaryAddress;\n }\n});\n\nvar $CheckoutPlanModel = exports.$CheckoutPlanModel = _squid.$Model.extend('$CheckoutPlanModel', {\n\n onPopulate: function onPopulate() {\n this.sources = this.children($FundingSourceModel, this.sources);\n },\n\n eachSource: function eachSource(method, context) {\n angular.forEach(this.sources, method, this);\n },\n\n hasFundingMethodType: function hasFundingMethodType(name) {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.type === name) {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n hasFundingMethodSubType: function hasFundingMethodSubType(name) {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.sub_type === name) {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n isPAD: function isPAD() {\n return this.hasFundingMethodSubType('DELAYED_TRANSFER');\n },\n\n isIACH: function isIACH() {\n var found = false;\n\n this.eachSource(function (source) {\n if (source.type === 'BANK_ACCOUNT' && source.sub_type === 'INSTANT_TRANSFER') {\n found = true;\n }\n }, this);\n\n return found;\n },\n\n isSplitBalance: function isSplitBalance() {\n return this.sources && this.sources.length > 1 && this.hasFundingMethodType('BALANCE');\n },\n\n isSplitPaymentWithBalanceAndIach: function isSplitPaymentWithBalanceAndIach() {\n return this.isSplitBalance() && this.isIACH();\n },\n\n isMSB: function isMSB() {\n return this.sources && this.sources.length === 1 && this.sources[0].type === 'INCENTIVE';\n },\n\n isBalance: function isBalance() {\n return this.sources && this.sources.length === 1 && this.sources[0].type === 'BALANCE';\n },\n\n hasConversion: function hasConversion() {\n return this.conversion !== null && _typeof(this.conversion) === 'object';\n }\n});\n\nvar $CardBackupModel = exports.$CardBackupModel = _squid.$Model.extend('$CardBackupModel', {\n onPopulate: function onPopulate() {\n if (!this.get('parent.meta.populated')) {\n return;\n }\n\n // If plan IDs change, we need to reevaluate the correct backup plan id\n this.resetIfDoesNotApply();\n this.reevaluateEligibility();\n },\n\n\n /**\n * getCardBackupInstrument\n * Get the user's last selection for card backup, if still eligible\n * @returns {Object|undefined} the plan of the user's last selection, or undefined otherwise\n */\n getPlan: function getPlan() {\n if (!this.isAllowed()) {\n return;\n }\n\n return this.plan;\n },\n\n\n /**\n * setCardBackupInstrument\n * Save the user's selection for backup. Tied to the currently selected plan\n * @param {Object} plan - the plan to use as the backup\n * @param {Object} [forPlan] - if needed, the plan to compare against. prefer not to pass it in\n */\n setPlan: function setPlan(plan, forPlan) {\n this.plan = plan;\n this.forPlan = forPlan || this.getCheckoutSessionPlan();\n },\n isAllowed: function isAllowed() {\n var _forPlan = this.forPlan;\n _forPlan = _forPlan === undefined ? {} : _forPlan;\n var _forPlan$primaryFs = _forPlan.primaryFs;\n _forPlan$primaryFs = _forPlan$primaryFs === undefined ? {} : _forPlan$primaryFs;\n var type = _forPlan$primaryFs.type,\n secondaryFIs = _forPlan.secondaryFIs;\n\n\n if (type !== 'CARD' || secondaryFIs !== false) {\n return false;\n }\n return this.allowCardBackup;\n },\n getCheckoutSessionPlan: function getCheckoutSessionPlan() {\n return this.get('parent.fundingOptions.plans.0');\n },\n reevaluateEligibility: function reevaluateEligibility() {\n var _this3 = this;\n\n (0, _processorDecline.getProcessorDeclineRetryEligibility)(this.id, this.parent).then(function (eligibility) {\n _this3.allowCardBackup = eligibility;\n\n return eligibility;\n });\n },\n reset: function reset(forPlan) {\n this.setPlan(undefined, forPlan);\n },\n\n /**\n * resetIfDoesNotApply\n * resets the selected backup for card if no longer valid based on user's choice\n * matches the plan ID if still valid but plan IDs change\n * @param {String} [plan] - current checkout session funding options plan user has selected\n */\n resetIfDoesNotApply: function resetIfDoesNotApply(plan) {\n if (!plan) {\n plan = this.getCheckoutSessionPlan();\n }\n\n var getKey = function getKey(p) {\n return p && p.primaryFs && p.primaryFs.id;\n };\n var planKey = getKey(plan);\n var forKey = getKey(this.forPlan);\n\n if (!planKey || planKey !== forKey) {\n return this.reset(plan);\n }\n\n // Since planIds may change, if backup is still valid then find the new plan\n var plans = this.get('parent.fundingOptions.plans') || [];\n var currentPlanKey = getKey(this.plan);\n var newPlan = currentPlanKey && plans.find(function (p) {\n return getKey(p) === currentPlanKey;\n });\n\n // If, for whatever reason, the old instrument isn't in the new plans, we'll reset\n if (currentPlanKey && !newPlan) {\n return this.reset(plan);\n }\n\n this.forPlan = plan;\n this.plan = newPlan;\n }\n});\n\nvar $CheckoutSessionModel = exports.$CheckoutSessionModel = _squid.$Model.extend('$CheckoutSessionModel', {\n\n api: new _squid.$Api({\n uri: '/api/checkout/:id/session',\n postAttempts: 2\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n smartDollarAuthFailed: false, // initial value for smartDollar authorization check\n\n onPopulate: function onPopulate() {\n this.plan = new $CheckoutPlanModel(this.plan);\n this.shipping = this.child($CheckoutShippingAddressModel, this.shipping);\n this.fundingOptions = this.child($FundingOptionsModel, this.fundingOptions);\n\n // Reevaluate the eligibility for allowing backup with cards. This can\n // change when the checkout session is updated\n this.cardBackup = this.child($CardBackupModel, this.cardBackup || {});\n _squid.$event.emit('checkoutSessionChange'); // emit a session change event for apps to react accordingly\n },\n\n /**\n * Finds the plan in billing cases that the user is intending to use as the sticky FI.\n * @return {Object} the instrument representation from futurePaymentInstruments\n */\n getSelectedStickyInstrument: function getSelectedStickyInstrument() {\n // This method doesn't apply for non-billing cases\n if (!this.futurePaymentInstruments) {\n return;\n }\n\n // For BA no purchase cases (no plan), use either\n // 1. selectedFuturePaymentInstrument (we've made and persisted a selection)\n // 2. first of futurePaymentInstruments (we haven't made a selection and need to save it later)\n if (!(this.plan && this.plan.sources)) {\n return this.selectedFuturePaymentInstrument || this.futurePaymentInstruments[0];\n }\n\n // Otherwise, if we have a plan list (ie. this is a purchase case),\n // we'll always want to take the currently selected plan,\n // as selectedFuturePaymentInstrument may not be updated to the user's current plan\n var selectedInstrumentId = _squid.$util.some(this.plan.sources, function (fi) {\n return fi.instrument_id ? fi.instrument_id : undefined;\n });\n\n var stickyInstrument = _squid.$util.find(this.futurePaymentInstruments, function (fi) {\n return fi.instrument_id === selectedInstrumentId;\n });\n\n return stickyInstrument;\n },\n\n getPlanList: function getPlanList() {\n // Only show plans that need to be shown.\n return this.fundingOptions && this.fundingOptions.getDisplayPlans();\n },\n\n // returns true if more than one plan uses BALANCE as the primary FI\n isMultipleBalancePlan: function isMultipleBalancePlan() {\n var matchingBalancePlans = 0;\n\n return this.fundingOptions && this.fundingOptions.plans && this.fundingOptions.plans.some(function (plan) {\n // if BALANCE is the primary FI...\n if (plan.primaryFs.name === 'BALANCE') {\n // increment number of balance plans found\n matchingBalancePlans++;\n }\n // exit once we have more than one balance plan\n return matchingBalancePlans > 1;\n });\n },\n\n getDisallowedInstruments: function getDisallowedInstruments() {\n if (this.fundingOptions && this.fundingOptions.disallowedInstruments && angular.isArray(this.fundingOptions.disallowedInstruments)) {\n var filteredDisallowedInstruments = this.fundingOptions.disallowedInstruments.filter(function (instrument) {\n if (instrument.type === 'CARD' && instrument.declineReason === 'unsupportedDueToExpiration') {\n return (0, _utils.filterCardWithinLastNMonths)(instrument, (0, _squid.$feature)('expirePeriod'));\n }\n return true;\n });\n this.fundingOptions.disallowedInstruments = filteredDisallowedInstruments;\n }\n return this.fundingOptions && this.fundingOptions.disallowedInstruments;\n },\n\n getDisallowedPreferred: function getDisallowedPreferred() {\n var disallowedInstrument = this.getDisallowedInstruments();\n\n // find only the disallowed instrument that has been marked as preferred.\n disallowedInstrument = disallowedInstrument && _squid.$util.find(disallowedInstrument, function (fi) {\n return fi.isPreferred;\n });\n\n // if the disallowed instrument is in the plan list (in the case that the instrument has a BUF)\n // we do not show it in the disallowed section.\n var isDisallowedInstrumentInPlanList = disallowedInstrument && _squid.$util.some(this.getPlanList(), function (plan) {\n var instrumentID = plan.primaryFs && plan.primaryFs.id;\n\n if (instrumentID && disallowedInstrument.id) {\n return instrumentID === disallowedInstrument.id;\n } else {\n return false;\n }\n });\n\n return !isDisallowedInstrumentInPlanList && disallowedInstrument;\n },\n\n expiredInstruments: function expiredInstruments() {\n var expiredInstruments = [];\n var disallowedPreferred = this.getDisallowedPreferred();\n var disallowedInstruments = this.getDisallowedInstruments();\n\n if (disallowedPreferred) {\n expiredInstruments.push(disallowedPreferred);\n }\n\n _squid.$util.forEach(disallowedInstruments, function (instrument) {\n if (instrument.type === 'CARD' && !instrument.isPreferred && instrument.declineReason === 'unsupportedDueToExpiration') {\n expiredInstruments.push(instrument);\n }\n });\n\n return expiredInstruments;\n },\n\n preferredExpiredInstruments: function preferredExpiredInstruments() {\n var disallowedPreferred = this.getDisallowedPreferred();\n\n if (disallowedPreferred && disallowedPreferred.type === 'CARD' && disallowedPreferred.isPreferred && disallowedPreferred.declineReason === 'unsupportedDueToExpiration') {\n return true;\n }\n\n return false;\n },\n\n getShippingAddressMinimalDetails: function getShippingAddressMinimalDetails() {\n return {\n 'line1': this.shipping.line1,\n 'line2': this.shipping.line2,\n 'city': this.shipping.city,\n 'state': this.shipping.state,\n 'postal_code': this.shipping.postal_code,\n 'country_code': this.shipping.country\n };\n },\n\n getPPCconversionInfo: function getPPCconversionInfo() {\n var ppcFi = void 0;\n if (this.fundingOptions && this.fundingOptions.instruments) {\n ppcFi = this.fundingOptions.instruments.find(function (fi) {\n return fi.type === 'CREDIT' && fi.name === 'BILL_ME_LATER';\n });\n }\n if (ppcFi && ppcFi.currency_conversion) {\n return Object.assign({}, ppcFi.currency_conversion);\n }\n return null;\n }\n\n});\n\nangular.value(\"$CheckoutCartModel\", $CheckoutCartModel);\nangular.value(\"$CheckoutAppDataModel\", $CheckoutAppDataModel);\nangular.value(\"$FundingSourceModel\", $FundingSourceModel);\nangular.value(\"$FundingOptionsModel\", $FundingOptionsModel);\nangular.value(\"serializeInstallmentsOptionsData\", serializeInstallmentsOptionsData);\nangular.value(\"$InstallmentOptionsModel\", $InstallmentOptionsModel);\nangular.value(\"$FlowEligibilityModel\", $FlowEligibilityModel);\nangular.value(\"$CheckoutShippingAddressModel\", $CheckoutShippingAddressModel);\nangular.value(\"$ShippingAddressModel\", $ShippingAddressModel);\nangular.value(\"$CheckoutPayeeModel\", $CheckoutPayeeModel);\nangular.value(\"$CreditOptionsModel\", $CreditOptionsModel);\nangular.value(\"$CheckoutShippingAddressesModel\", $CheckoutShippingAddressesModel);\nangular.value(\"$CheckoutPlanModel\", $CheckoutPlanModel);\nangular.value(\"$CardBackupModel\", $CardBackupModel);\nangular.value(\"$CheckoutSessionModel\", $CheckoutSessionModel);\n_squid.$Class;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$event;\n\n_squid.$feature;\n\n_processorDecline.getProcessorDeclineRetryEligibility;\n\n_utils.filterCardWithinLastNMonths;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/checkout/index.js\n// module id = ../node_modules/xo-models/src/checkout/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n/**\n* @param {Date} d1\n* @param {Date} d2 \n* @returns {number}\n*/\nvar monthDiff = function monthDiff(d1, d2) {\n var months = void 0;\n months = (d2.getFullYear() - d1.getFullYear()) * 12;\n months -= d1.getMonth() + 1;\n months += d2.getMonth() + 1;\n return months <= 0 ? 0 : months;\n};\n\n/**\n* @param {Object} fi - A funding instrument \n* @param {boolean} expiredPeriod - feature boolean flag from config.json\n* @returns {boolean}\n*/\nvar filterCardWithinLastNMonths = function filterCardWithinLastNMonths(fi, expirePeriod) {\n var expiryDate = new Date(fi.expire_year + '-' + fi.expire_month + '-01');\n\n var monthDifference = monthDiff(expiryDate, new Date());\n\n return monthDifference !== 0 && monthDifference <= expirePeriod;\n};\n\nexports.filterCardWithinLastNMonths = filterCardWithinLastNMonths;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/checkout/lib/utils.js\n// module id = ../node_modules/xo-models/src/checkout/lib/utils.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ChoiceEligibility = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('../auth');\n\nvar _checkout = require('../checkout');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _experiments = require('../experiments');\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\n// Variants:\n// control\n// 5 - If any choice treatment, do 5 unless 5 is ineligible\n// 6 - If any choice treatment, do 6 if 5 is ineligible and 6 is eligible\n\nvar checkPPCInstallments = function checkPPCInstallments(token, _ref) {\n var checkoutSessionModel = _ref.checkoutSessionModel,\n checkoutPayeeModel = _ref.checkoutPayeeModel,\n checkoutCartModel = _ref.checkoutCartModel,\n checkoutAppDataModel = _ref.checkoutAppDataModel;\n\n // Check for installments - has credit in wallet, has credit offer in checkout session, and has installment options\n if (checkoutSessionModel.fundingOptions.hasCredit() && checkoutSessionModel.creditInstallmentOffer && (0, _squid.$feature)('creditInstallmentOffers')) {\n var installmentOptions = _checkout.$InstallmentOptionsModel.instance(token);\n\n return installmentOptions.save({\n cache: true, // Cache response for selectFi page or wherever needed\n data: {\n payee: checkoutPayeeModel,\n checkoutCart: checkoutCartModel,\n checkoutAppData: checkoutAppDataModel,\n isMemberCredit: true\n },\n success: function success(result) {\n var offers = result.installments && result.installments[0];\n var hasInstallments = offers && offers.installment_options && offers.installment_options.length;\n\n return hasInstallments;\n },\n contingencies: {\n DEFAULT: function DEFAULT(message) {\n // Assume is eligible if contingency\n _logger.$logger.info('installments_contingency', {\n message: message\n });\n return false;\n }\n },\n error: function error(err) {\n _logger.$logger.info('installments_error', err);\n return false;\n }\n });\n } else {\n return _squid.$promise.resolve(false);\n }\n};\n\n// Main logic to decide choice eligibility\nvar decideEligibility = function decideEligibility(token, _ref2) {\n var authModel = _ref2.authModel,\n checkoutCartModel = _ref2.checkoutCartModel,\n checkoutSessionModel = _ref2.checkoutSessionModel,\n checkoutAppDataModel = _ref2.checkoutAppDataModel,\n checkoutPayeeModel = _ref2.checkoutPayeeModel;\n var fundingOptions = checkoutSessionModel.fundingOptions;\n\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n\n // Reasons for a transaction to be ineligible:\n // - Doesn't meet pxp\n // - is billing\n // - is split balance\n // - balance covers full transaction but does not have preferred set\n // - has PAD\n // - is second button\n // - is not US\n // - has currency conversion\n // - is not a merchant account\n // - is a Third Party transaction (Venmo, Baidu, etc...)\n\n // Check to see if any plans include split balance\n var splitBalance = plans && plans.some(function (option) {\n return option.primaryFs && option.secondaryFIs;\n });\n var billing = checkoutCartModel.isBilling();\n var PAD = plans && plans.some(function (option) {\n return option.primaryFs && option.primaryFs.subtype === 'PAD';\n });\n var secondButton = checkoutAppDataModel.is_second_button_txn;\n var hasMerchantCountryChoice = (0, _squid.$feature)('choiceExperiment', false, checkoutAppDataModel.merchant.merchant_country);\n var fullBalance = plans && plans.some(function (option) {\n return option.primaryFs && option.primaryFs.type === 'BALANCE';\n });\n var hasPreferred = fundingOptions && fundingOptions.getPreferred();\n var isNotMerchantAccount = authModel.account_type !== 2;\n var isNotAndroidPay = !checkoutCartModel.isWalletTokenization();\n var isNotFbBaFlow = !_squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n var isThirdPartyWalletTransaction = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n var isNotGambling = !checkoutPayeeModel.isGambling();\n var isNotBaDisableStickyForMerchant = !(checkoutCartModel.isBillingNoPurchase() && checkoutPayeeModel.isOnBaNoStickyList());\n var involvedCurrencies = {};\n\n if (checkoutCartModel.get('purchase.amounts.total.currency_code') && plans) {\n involvedCurrencies[checkoutCartModel.purchase.amounts.total.currency_code] = 1;\n plans.forEach(function (option) {\n involvedCurrencies[option.primaryFs.amount.currency_code] = 1;\n });\n }\n\n var singleCurrency = Object.keys(involvedCurrencies).length <= 1;\n\n var choiceVariantsName = 'xo_hermes_choice_variant(?:_preferred_newusers)?_treatment_?(.*)';\n\n // checking if pad is to avoid calls to PXP\n var padToggleFeatureCheck = PAD ? Experiments.padToggleFeatureSupported() : _squid.$promise.resolve(false);\n\n // Check the global preferred experiment and the choice variant.\n // User must pass the global preferred experiment to be eligible to see a variant\n // Forced pxp call in case logged in user is different\n var _$config$choiceExperi = _squid.$config.choiceExperiment;\n _$config$choiceExperi = _$config$choiceExperi === undefined ? {} : _$config$choiceExperi;\n var _$config$choiceExperi2 = _$config$choiceExperi.stillInPxpRampCountries,\n stillInPxpRampCountries = _$config$choiceExperi2 === undefined ? [] : _$config$choiceExperi2,\n _$config$choiceExperi3 = _$config$choiceExperi.ignored;\n _$config$choiceExperi3 = _$config$choiceExperi3 === undefined ? {} : _$config$choiceExperi3;\n var _$config$choiceExperi4 = _$config$choiceExperi3.multipleFi,\n multipleFiIgnored = _$config$choiceExperi4 === undefined ? [] : _$config$choiceExperi4,\n _$config$choiceExperi5 = _$config$choiceExperi3.selectFi,\n selectFiIgnored = _$config$choiceExperi5 === undefined ? [] : _$config$choiceExperi5;\n\n\n var getPxp = function getPxp() {\n return stillInPxpRampCountries.indexOf(_squid.$locale.country) === -1 ? 'already_ramped' : (0, _squid.$pxp)('xo_hermes_choice_variant', {}, choiceVariantsName, true, true);\n };\n\n return _squid.$promise.all([getPxp(), padToggleFeatureCheck]).then(function (_ref3) {\n var choiceVariant = _ref3[0],\n isPadToggleFeatureSupported = _ref3[1];\n\n // Check transaction eligibility\n var eligibilityCriteria = {\n pxpVariant: choiceVariant,\n noBilling: !billing,\n noSplitBalance: !splitBalance,\n balanceWithPreferred: !(fullBalance && !hasPreferred),\n noPAD: !PAD || isPadToggleFeatureSupported,\n noSecondButton: !secondButton,\n hasMerchantCountryChoice: hasMerchantCountryChoice,\n singleCurrency: singleCurrency,\n noMerchant: isNotMerchantAccount,\n noAndroidPay: isNotAndroidPay,\n isNotFbBaFlow: isNotFbBaFlow,\n noThirdPartyWalletTransactions: !isThirdPartyWalletTransaction,\n isNotGambling: isNotGambling,\n isNotBaDisableStickyForMerchant: isNotBaDisableStickyForMerchant\n };\n // First check to see if transaction is eligible for choice at all.\n // Base eligibility check follows the selectFi eligibility\n var choiceIneligibleReasons = Object.keys(eligibilityCriteria).filter(function (key) {\n return selectFiIgnored.indexOf(key) === -1 && !eligibilityCriteria[key];\n });\n var transactionEligible = choiceIneligibleReasons.length === 0;\n\n if (!transactionEligible) {\n _logger.$logger.info('choice_experiment_ineligible', {\n failed: choiceIneligibleReasons.join()\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_control-' + choiceIneligibleReasons.join()\n });\n\n return 'control';\n }\n\n // If eligible for choice, check if transaction is eligible for multipleFi variant\n return checkPPCInstallments(token, {\n checkoutCartModel: checkoutCartModel,\n checkoutSessionModel: checkoutSessionModel,\n checkoutAppDataModel: checkoutAppDataModel,\n checkoutPayeeModel: checkoutPayeeModel\n }).then(function (hasPPCInstallments) {\n var validCountryForMultipleFi =\n // IN requires CVV collection, multipleFi variant does not have yet\n _squid.$locale.country !== 'IN';\n var hasInstallments = plans && plans.some(function (plan) {\n return plan.installments;\n });\n\n var multipleFiEligibility = (0, _angular.extend)({\n // Have not built method to select PPC installments for multipleFi\n creditInstallments: !hasPPCInstallments,\n validCountryForMultipleFi: validCountryForMultipleFi,\n noInstallments: !hasInstallments\n }, eligibilityCriteria);\n var multipleFiIneligibleReasons = Object.keys(multipleFiEligibility).filter(function (criteria) {\n return multipleFiIgnored.indexOf(criteria) === -1 && !multipleFiEligibility[criteria];\n }).join();\n var multipleFiEligible = multipleFiIneligibleReasons.length === 0;\n\n if (!multipleFiEligible) {\n _logger.$logger.info('choice_experiment_var5_ineligible', {\n failed: multipleFiIneligibleReasons\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_6-' + multipleFiIneligibleReasons\n });\n\n return '6';\n }\n\n _logger.$logger.info('choice_experiment_eligible', {\n variant: '5'\n });\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CHOICE_ELG_CHK',\n to: 'process_choice_elg_chk',\n eligibility_reason: 'pxp_treatment'\n });\n\n return '5';\n });\n });\n};\n\nvar promiseControl = _squid.$promise.resolve('control');\n\nvar $ChoiceEligibility = exports.$ChoiceEligibility = _squid.$Model.extend('$ChoiceEligibility', {\n getVariant: function getVariant(token) {\n var _this = this;\n\n if (!(0, _squid.$feature)('choiceExperiment')) {\n return promiseControl;\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n authModel: _auth.$AuthModel.instance(),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n // If user logged in is the same, we don't need the pxp call so we can skip the decision making logic\n if (_this.variant && models.authModel.buyer_id === _this.buyerId) {\n return _this.variant;\n }\n\n _this.variant = decideEligibility(token, models);\n _this.buyerId = models.authModel.buyer_id;\n\n return _this.variant;\n });\n }\n});\n\nangular.value(\"$ChoiceEligibility\", $ChoiceEligibility);\n_angular.extend;\n\n_squid.$Model;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$integration;\n\n_squid.$locale;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$InstallmentOptionsModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/choice/index.js\n// module id = ../node_modules/xo-models/src/choice/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CreditSharedInfoModel = exports.$CreditInstallmentOptionsModel = exports.$CreditInstallmentModel = exports.$CreditDataModel = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _checkout = require('../checkout');\n\nvar $CreditDataModel = exports.$CreditDataModel = _squid.$Model.extend('$CreditDataModel', {\n init: function init() {\n this._super.init.apply(this);\n this.setProperties({\n flow_type: _squid.$util.param('flow'),\n cape_key: _squid.$util.param('key'),\n cape_success: _squid.$util.param('success'),\n credit_signup: _squid.$util.param('creditSignup'),\n userAction: _squid.$util.param('action'),\n merchantAction: _squid.$util.param('merchantAction'),\n credit_login_failure: false,\n is_cross_border: false,\n has_selected_cyco: false,\n cape_service_error: _squid.$util.param('isInternalServiceError'),\n cape_redirect_uri: '',\n change_installment: _squid.$util.param('changeStatus'),\n nextState: '',\n cart_amount: null,\n cart_currency: null,\n installment_count: 0\n });\n },\n\n api: new _squid.$Api({\n uri: '/api/credit/:id/creditData',\n postAttempts: 2\n }),\n\n isCreditSignup: function isCreditSignup() {\n return this.credit_signup && this.credit_signup === 'true';\n },\n\n setCapeRedirectUri: function setCapeRedirectUri(input) {\n this.cape_redirect_uri = input;\n },\n\n getCapeRedirectUri: function getCapeRedirectUri() {\n return this.cape_redirect_uri;\n },\n\n getMerchantAction: function getMerchantAction() {\n return this.merchantAction || '';\n },\n\n setCreditSignup: function setCreditSignup(input) {\n this.credit_signup = input;\n },\n\n getCapeKey: function getCapeKey() {\n return this.cape_key;\n },\n\n getFlow: function getFlow() {\n if (this.userAction === 'addCredit') {\n return 'credit';\n }\n return this.flow_type;\n },\n setFlow: function setFlow(flowType) {\n this.flow_type = flowType;\n },\n\n setNextState: function setNextState(nextState) {\n this.nextState = nextState;\n },\n\n isCapeSuccess: function isCapeSuccess() {\n return this.cape_success && this.cape_success === 'true';\n },\n\n isCreditTxn: function isCreditTxn() {\n return this.flow_type && this.flow_type === 'credit' || this.userAction && this.userAction === 'addCredit';\n },\n\n setCreditLoginFailure: function setCreditLoginFailure(input) {\n this.credit_login_failure = input;\n },\n\n getCreditLoginFailure: function getCreditLoginFailure() {\n return this.credit_login_failure;\n },\n\n isCapeReturn: function isCapeReturn() {\n return this.flow_type && this.flow_type === 'capeReturn';\n },\n\n isCapeInternalServiceError: function isCapeInternalServiceError() {\n return this.cape_service_error && this.cape_service_error === 'true';\n },\n\n getNextState: function getNextState() {\n return this.nextState;\n },\n\n isChangeStatus: function isChangeStatus() {\n return this.change_installment === 'changeInstallment';\n },\n\n isRedirectFromCape: function isRedirectFromCape() {\n return Boolean(this.cape_key && this.cape_success === 'true' || _squid.$util.param('applyCredit'));\n },\n\n // User has selected a financing offer on the CYCO page\n setSelectedCYCOOffer: function setSelectedCYCOOffer(hasOffer) {\n this.has_selected_cyco = hasOffer;\n },\n\n hasSelectedCYCOOffer: function hasSelectedCYCOOffer() {\n return this.has_selected_cyco;\n },\n\n // Cross border is when the merchant and buyer countries mismatch\n setCrossBorder: function setCrossBorder(value) {\n this.is_cross_border = value;\n },\n\n isCrossBorder: function isCrossBorder() {\n return this.is_cross_border;\n },\n\n // Cross currency: getCartAmountAndCurrency and setCartAmountAndCurrency\n getCartAmountAndCurrency: function getCartAmountAndCurrency() {\n if (this.cart_amount && this.cart_currency) {\n return {\n cart_amount: this.cart_amount,\n cart_currency: this.cart_currency\n };\n }\n },\n\n setCartAmountAndCurrency: function setCartAmountAndCurrency(cartData) {\n this.cart_amount = cartData && cartData.cart_amount;\n this.cart_currency = cartData && cartData.cart_currency;\n },\n\n getInstallmentCount: function getInstallmentCount() {\n return this.installment_count;\n },\n\n setInstallmentCount: function setInstallmentCount(count) {\n this.installment_count = count;\n }\n});\n\nvar $CreditInstallmentModel = exports.$CreditInstallmentModel = _squid.$Model.extend('$CreditInstallmentModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/creditOptions/'\n })\n});\n\nvar $CreditInstallmentOptionsModel = exports.$CreditInstallmentOptionsModel = _squid.$Model.extend('$CreditInstallmentOptionsModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:id/installmentOptions/',\n postAttempts: 2\n }),\n\n init: function init() {\n this.setProperties({\n installmentOffers: [],\n installmentCount: 0,\n installmentOptionsPresent: false,\n niOffer: [],\n niOfferPresent: false\n });\n this.meta = {\n populated: false\n };\n },\n\n onPopulate: function onPopulate() {\n if (this.installments && this.installments[0]) {\n this.storeInstallments();\n } else {\n _logger.$logger.log('No installments offer');\n }\n },\n\n storeInstallments: function storeInstallments() {\n\n this.installmentOffers = this.installments && this.installments[0];\n this.installmentCount = this.installmentOffers.installment_options && this.installmentOffers.installment_options.length;\n this.installmentOptionsPresent = this.installmentCount > 0;\n this.niOfferPresent = this.installmentOffers.sac_options && this.installmentOffers.sac_options.creditType;\n this.niOffer = this.niOfferPresent && this.installmentOffers.sac_options;\n },\n\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.cacheParam) {\n this.cacheParam.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n\n getInstallmentOptionsPresent: function getInstallmentOptionsPresent() {\n return this.installmentOptionsPresent;\n },\n\n getInstallmentOffers: function getInstallmentOffers(index) {\n if (typeof index === 'undefined') {\n return this.installmentOffers;\n } else {\n if (!this.installmentOffers || !this.installmentOffers.installment_options) {\n return;\n }\n return this.installmentOffers.installment_options[index];\n }\n },\n\n getInstallmentCount: function getInstallmentCount() {\n return this.installmentCount;\n },\n\n getNiOffer: function getNiOffer() {\n return this.niOffer;\n },\n\n getNiOfferPresent: function getNiOfferPresent() {\n return this.niOfferPresent;\n },\n\n serialize: function serialize() {\n var data = {\n payee: this.payee,\n checkoutCart: this.checkoutCart,\n checkoutAppData: this.checkoutAppData,\n isMemberCredit: true\n };\n\n return (0, _checkout.serializeInstallmentsOptionsData)(data);\n },\n save: function save(options) {\n options.data = this.serialize();\n\n return this._super.save.call(this, options);\n }\n});\n\nvar $CreditSharedInfoModel = exports.$CreditSharedInfoModel = _squid.$Model.extend('$CreditSharedInfoModel', {\n\n init: function init() {\n this.setProperties({\n installmentOfferPresent: false,\n showCreditExample: false,\n fiCount: 0,\n morsDiscoverMessageFPTIFired: false,\n cartAmountVisible: false\n });\n this._super.init.apply(this);\n },\n setInstallmentOfferPresent: function setInstallmentOfferPresent(installmentOfferPresent) {\n this.installmentOfferPresent = installmentOfferPresent;\n },\n hasInstallmentOffers: function hasInstallmentOffers() {\n return this.installmentOfferPresent;\n },\n setShowCreditExample: function setShowCreditExample(shouldShowCreditExample) {\n this.showCreditExample = shouldShowCreditExample;\n },\n shouldShowCreditExample: function shouldShowCreditExample() {\n return this.showCreditExample;\n },\n setFiCount: function setFiCount(count) {\n this.fiCount = parseInt(count, 10);\n },\n getFiCount: function getFiCount() {\n return this.fiCount;\n },\n getMorsFptiFiredFlag: function getMorsFptiFiredFlag() {\n return this.morsDiscoverMessageFPTIFired;\n },\n setMorsFptiFiredFlag: function setMorsFptiFiredFlag(alreadyFired) {\n this.morsDiscoverMessageFPTIFired = alreadyFired;\n },\n getCartAmountVisible: function getCartAmountVisible() {\n return this.cartAmountVisible;\n },\n setCartAmountVisible: function setCartAmountVisible(visible) {\n this.cartAmountVisible = visible;\n }\n\n});\n\nangular.value(\"$CreditDataModel\", $CreditDataModel);\nangular.value(\"$CreditInstallmentModel\", $CreditInstallmentModel);\nangular.value(\"$CreditInstallmentOptionsModel\", $CreditInstallmentOptionsModel);\nangular.value(\"$CreditSharedInfoModel\", $CreditSharedInfoModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_logger.$logger;\n\n_checkout.serializeInstallmentsOptionsData;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/credit/index.js\n// module id = ../node_modules/xo-models/src/credit/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$GiveAtCheckoutModel = undefined;\n\nvar _squid = require('squid');\n\nvar $GiveAtCheckoutModel = exports.$GiveAtCheckoutModel = _squid.$Model.extend('$GiveAtCheckoutModel', {\n api: new _squid.$Api({\n uri: '/api/donation',\n postAttempts: 2\n })\n});\n\nangular.value(\"$GiveAtCheckoutModel\", $GiveAtCheckoutModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/donation/index.js\n// module id = ../node_modules/xo-models/src/donation/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$stickyCTA = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _checkout = require('../checkout');\n\nvar _gdprCookieBanner = require('../gdprCookieBanner');\n\nvar checkEligibility = function checkEligibility() {\n var token = _angular.$rootScope.token;\n var models = {};\n\n return _squid.$promise.all([(0, _squid.$populate)(models, {\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token)\n }), _gdprCookieBanner.$GDPRCookieBannerModel.instance().hasBanner()]).then(function () {\n // Device Checks\n var userAgent = _angular.$window.navigator.userAgent;\n var isIE = !!userAgent.match(/MSIE|trident|edge/i);\n var isMobile = _index.$DeviceInfo.isMobile();\n var miniBrowser = _angular.$rootScope.miniBrowser;\n var isValidTraffic = isMobile || miniBrowser;\n var isSmallScreen = _angular.$window.innerWidth <= 600;\n\n // Flow Checks\n var billing = models.checkoutCartModel.isBilling();\n var invoice = models.checkoutAppDataModel.get('flags.is_invoice_flow');\n var upop = models.checkoutSessionModel.unconfirmed_upop;\n var gpdr = _gdprCookieBanner.$GDPRCookieBannerModel.instance().shown();\n\n // Feature checks\n var eligibleCountry = (0, _squid.$feature)('stickyCTA');\n var ineligibilityConditions = {\n isIE: isIE,\n upop: upop,\n invoice: invoice,\n gpdr: gpdr,\n billing: billing,\n isNotSmallScreen: !isSmallScreen,\n isNotValidTraffic: !isValidTraffic,\n isNotEligibleCountry: !eligibleCountry\n };\n\n var decision = isValidTraffic && eligibleCountry && isSmallScreen && !billing && !invoice && !upop && !isIE && !gpdr;\n\n var ineligibilityReasons = Object.keys(ineligibilityConditions).filter(function (key) {\n return ineligibilityConditions[key];\n });\n var eligibility_reason = 'eligible';\n\n if (ineligibilityReasons.length > 0 || !decision) {\n eligibility_reason = 'ineligible-' + ineligibilityReasons.join(',');\n }\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_eligibility_check',\n eligibility_reason: eligibility_reason\n });\n\n return decision;\n });\n};\n\nvar checkPxp = function checkPxp() {\n var _$CheckoutAppDataMode = _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n merchant = _$CheckoutAppDataMode.merchant;\n\n var country = merchant && merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_sticky_cta_(.*)', false, true).then(function (treatment) {\n if (treatment) {\n var test = /xo_hermesnode_sticky_cta_(.*)/g;\n var name = treatment && treatment.treatment_name;\n var treatmentTest = test.exec(name);\n var treatmentName = treatmentTest.length > 1 && treatmentTest[1];\n\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_pxp_check',\n eligibility_reason: treatmentName\n });\n return treatmentName;\n }\n return '';\n });\n};\n\nvar mapper = function mapper(eligibility, treatment) {\n var variant = {\n 'treatmentA': 'bottom',\n 'treatmentB': 'top',\n 'control': '',\n 'DEFAULT': ''\n };\n var result = variant[treatment] || variant.DEFAULT;\n\n _logger.$logger.info('checkout_fpti', {\n from: 'sticky_cta',\n to: 'process_variant_check',\n eligibility_reason: result || 'ineligible'\n });\n return result;\n};\n\n/**\n * To be replaced by $EligibilityClass.\n * Following new EligibilityClass pattern.\n*/\nvar $stickyCTA = exports.$stickyCTA = _squid.$Model.extend('$stickyCTA', {\n getEligibility: function getEligibility() {\n return checkEligibility().then(function (eligibility) {\n if (eligibility) {\n return checkPxp().then(function (treatment) {\n return mapper(eligibility, treatment);\n });\n } else {\n return '';\n }\n });\n }\n});\n\nangular.value(\"$stickyCTA\", $stickyCTA);\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_squid.$Model;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$feature;\n\n_squid.$promise;\n\n_index.$DeviceInfo;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_gdprCookieBanner.$GDPRCookieBannerModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/eligibility/index.js\n// module id = ../node_modules/xo-models/src/eligibility/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.padToggleWalletSupported = exports.padToggleFeatureSupported = exports.PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = exports.PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = undefined;\n\nvar _squid = require('squid');\n\nvar PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = exports.PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS = ['xo_hermesnode_pad_2_ui_rollout'];\nvar PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = exports.PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES = ['AU'];\n\n/*\n * Returns the feature configuration\n *\n * If the country its part of the countries in the list of pxp enabled countries\n * we will check first if the treatment its enabled before calling the feature.\n *\n * if the treatment its not enabled we will return false for this feature.\n *\n * otherwise we will just return whatever is configured on the feature\n*/\nvar _getPad2Feature = function _getPad2Feature(feature) {\n var country = _squid.$locale.country;\n\n\n if (PAD_CHECKBOX_SUPPORTED_PXP_ENABLED_COUNTRIES.includes(country)) {\n // if the contry is AU we want to check that the experiment its enabled before returning the config values\n return (0, _squid.$pxp)('xo_hermesnode_pad_2_ui_' + country, PAD_CHECKBOX_SUPPORTED_VALID_TREATMENTS.join('|'), undefined, false, true).then(function (pxpResponse) {\n // If the pxp has a valid treatment then enable based on the configs\n // this will enable to enable/disable the new pad experience with an experiment and configs\n if (pxpResponse) {\n return (0, _squid.$feature)(feature, false, country);\n }\n return false;\n });\n }\n return _squid.$promise.resolve((0, _squid.$feature)(feature, false, country));\n};\n\nvar padToggleFeatureSupported = exports.padToggleFeatureSupported = function padToggleFeatureSupported() {\n return _getPad2Feature('padToggleFeatureSupported');\n};\n\nvar padToggleWalletSupported = exports.padToggleWalletSupported = function padToggleWalletSupported() {\n return _getPad2Feature('padToggleWalletSupported');\n};\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$pxp;\n\n_squid.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/experiments/index.js\n// module id = ../node_modules/xo-models/src/experiments/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CardInfoModel = exports.$WalletInstrumentNameMapping = exports.$WalletPreferences = exports.$ResolveOTP = exports.$Resolve3DS = exports.$CardTypeFromBinModel = exports.$BillingAddressesModel = exports.$CurrencyConversionModel = exports.$BillingAddressModel = exports.$AddBillingAddressModel = exports.$DeleteCardModel = exports.$SepaModel = exports.$PreferredFi = exports.$AddBankModel = exports.$BankModel = exports.$CardTypesModel = exports.$UnavailableCardModel = exports.$AddCardModel = exports.$CardModel = undefined;\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _squid = require('squid');\n\nvar BILLING_ADDRESS_FORMAT = {\n DEFAULT: {\n ',': ', ',\n ' ': ' '\n },\n IL: {\n he: {\n ',': '‏, ‏',\n ' ': '‏ ‏'\n }\n }\n};\n\nvar $CardModel = exports.$CardModel = _squid.$Model.extend('$CardModel', {\n serialize: function serialize() {\n return {\n type: this.type,\n number: this.number.replace(/[^\\d]+/g, ''),\n security_code: this.security_code,\n expiry_month: this.expiry_month && _squid.$util.pad(this.expiry_month, 2),\n expiry_year: this.expiry_year,\n issue_number: this.issue_number ? this.issue_number : undefined,\n start_month: this.start_month ? _squid.$util.pad(this.start_month, 2) : undefined,\n start_year: this.start_year ? this.start_year : undefined\n };\n },\n\n last4: function last4() {\n var cardNumber = this.number;\n\n return cardNumber.substr(cardNumber.length - 4);\n },\n\n isExisting: function isExisting() {\n return this.number && Boolean(this.number.match(/^xxxx-xxxx-xxxx-[\\d]{4}$/));\n }\n});\n\nvar $AddCardModel = exports.$AddCardModel = _squid.$Model.extend('$AddCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id?'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.card = new $CardModel();\n },\n\n serialize: function serialize() {\n var id = this.address.id && this.address.id !== '0' ? this.address.id : undefined;\n\n return {\n cardType: this.cardType ? this.cardType : 'creditCard',\n sponsor_id: this.sponsor_id,\n preference: this.preference,\n user: this.user,\n card: this.card.serialize(),\n address: id ? {\n id: id\n } : this.address.serialize()\n };\n },\n\n clearId: function clearId() {\n delete this.id;\n }\n});\n\nvar $UnavailableCardModel = exports.$UnavailableCardModel = _squid.$Model.extend('$UnavailableCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/unavailable/card?addFIContingency'\n })\n});\n\nvar $CardTypesModel = exports.$CardTypesModel = _squid.$Model.extend('$CardTypesModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/types?country=:country&token=:token'\n }),\n\n retrieve: function retrieve() {\n return this._super.retrieve.apply(this, arguments).then(function (result) {\n this.disallowedCards = (0, _squid.$feature)('disallowedCards', undefined, this.country);\n // override disallowed cards with card types config list based on country\n if (this.disallowedCards) {\n result.disallowed = this.disallowedCards.cardTypes;\n }\n return result;\n });\n },\n\n supportedNames: function supportedNames() {\n if (typeof this.allowed === 'undefined') {\n return;\n }\n\n return this.allowed.map(function (type) {\n return _squid.$locale.content.cardTypes[type];\n });\n },\n\n unsupportedNames: function unsupportedNames() {\n if (typeof this.disallowed === 'undefined') {\n return;\n }\n\n return this.disallowed.map(function (type) {\n return _squid.$locale.content.cardTypes[type];\n });\n }\n});\n\nvar $BankModel = exports.$BankModel = _squid.$Model.extend('$BankModel', {\n init: function init() {\n this._super.init.apply(this);\n this.bank_account_number = '';\n this.bank_routing_number = '';\n this.iban_number = '';\n },\n\n serialize: function serialize() {\n var data = {};\n\n if (this.bank_account_number) {\n data.bank_account_number = this.bank_account_number;\n }\n if (this.bank_routing_number) {\n data.bank_routing_number = this.bank_routing_number;\n }\n if (this.iban_number) {\n data.iban_number = this.iban_number.replace(/\\s/g, '').toUpperCase();\n }\n return data;\n }\n});\n\nvar $AddBankModel = exports.$AddBankModel = _squid.$Model.extend('$AddBankModel', {\n api: new _squid.$Api({\n uri: '/api/fi/bank'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n this.user = this.user || {\n first_name: '',\n dob_day: '',\n dob_month: '',\n dob_year: '',\n currency_code: '',\n country: ''\n };\n this.bank = this.bank || new $BankModel();\n this.address = this.address || {};\n this.creditorDetails = this.creditorDetails || {};\n this.fiDetails = this.fiDetails || {};\n },\n\n getBankData: function getBankData() {\n var data = {};\n\n // Set user info\n data.user = this.user;\n\n // Set bank info\n var bank = {};\n\n this.bank = this.bank || {};\n\n if (this.candidate_id) {\n data.candidate_id = this.candidate_id;\n }\n\n if (this.bank.bank_account_number) {\n bank.bank_account_number = this.bank.bank_account_number;\n }\n\n if (this.bank.bank_routing_number) {\n bank.bank_routing_number = this.bank.bank_routing_number;\n }\n\n if (this.bank.iban_number) {\n bank.iban_number = this.bank.iban_number.replace(/\\s/g, '');\n }\n data.bank = bank;\n\n // Set address info\n if (this.address) {\n data.address = {\n line1: this.address.line1,\n line2: this.address.line2,\n city: this.address.city,\n country: this.address.country,\n postal_code: this.address.postal_code\n };\n }\n\n return data;\n }\n});\n\nvar $PreferredFi = exports.$PreferredFi = _squid.$Model.extend('$PreferredFi', {\n api: new _squid.$Api({\n uri: '/api/fi/preferred'\n }),\n\n init: function init() {\n this._super.init.apply(this);\n\n // Get the type of device to send to FI for logging\n function getUiChannel() {\n var capabilities = _index.$DeviceInfo.getCapabilities();\n\n if (capabilities.isTablet) {\n return 'Tablet';\n } else if (capabilities.isMobile) {\n return 'Mobile';\n } else if (capabilities.isDesktop) {\n return 'Desktop';\n } else if (capabilities.isApp) {\n return 'App';\n } else {\n return null;\n }\n }\n\n this.uiChannel = getUiChannel();\n },\n\n serialize: function serialize() {\n return {\n preferred: this.preferred,\n uiChannel: this.uiChannel\n };\n }\n});\n\nvar $SepaModel = exports.$SepaModel = _squid.$Model.extend('$SepaModel', {\n api: new _squid.$Api({\n uri: '/api/fi/bank'\n })\n});\n\nvar $DeleteCardModel = exports.$DeleteCardModel = _squid.$Model.extend('$DeleteCardModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id/delete'\n })\n});\n\nvar $AddBillingAddressModel = exports.$AddBillingAddressModel = _squid.$Model.extend('$AddBillingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/fi/:instrumentid/addbillingaddress'\n })\n});\n\nvar $BillingAddressModel = exports.$BillingAddressModel = _squid.$Model.extend('$BillingAddressModel', {\n api: new _squid.$Api({\n uri: '/api/fi/billingaddress/validate'\n }),\n\n format: function format() {\n\n var langConfig = (BILLING_ADDRESS_FORMAT[_squid.$locale.country] || {})[_squid.$locale.lang] || {};\n\n var comma = angular.isUndefined(langConfig[',']) ? BILLING_ADDRESS_FORMAT['DEFAULT'][','] : langConfig[','];\n var space = angular.isUndefined(langConfig[' ']) ? BILLING_ADDRESS_FORMAT['DEFAULT'][' '] : langConfig[' '];\n\n return _squid.$util.filter([this.line1, this.line2, this.city, this.state, this.country]).join(comma) + space + _squid.$util.filter([this.postal_code]);\n },\n\n serialize: function serialize() {\n return {\n line1: this.line1 && this.line1.trim(),\n line2: this.line2 && this.line2.trim(),\n city: this.city && this.city.trim(),\n state: this.state && this.state.trim(),\n postal_code: this.postal_code && this.postal_code.trim(),\n normalization_status: this.normalization_status,\n country: this.country\n };\n }\n});\n\nvar $CurrencyConversionModel = exports.$CurrencyConversionModel = _squid.$Model.extend('$CurrencyConversionModel', {\n api: new _squid.$Api({\n uri: '/api/fi/currencyConversion'\n })\n});\n\nvar $BillingAddressesModel = exports.$BillingAddressesModel = _squid.$Model.extend('$BillingAddressesModel', {\n api: new _squid.$Api({\n uri: '/api/fi/billingaddress'\n }),\n\n onPopulate: function onPopulate() {\n this.addresses = this.children($BillingAddressModel, this.addresses);\n }\n});\n\nvar $CardTypeFromBinModel = exports.$CardTypeFromBinModel = _squid.$Model.extend('$CardTypeFromBinModel', {\n api: new _squid.$Api({\n uri: '/api/fi/cardTypeFromBin'\n })\n});\n\nvar $Resolve3DS = exports.$Resolve3DS = _squid.$Model.extend('$Resolve3DS', {\n api: new _squid.$Api({\n uri: '/api/fi/3ds/:id'\n })\n});\n\nvar $ResolveOTP = exports.$ResolveOTP = _squid.$Model.extend('$ResolveOTP', {\n api: new _squid.$Api({\n uri: '/api/fi/otp/:id'\n })\n});\n\nvar $WalletPreferences = exports.$WalletPreferences = _squid.$Model.extend('$WalletPreferences', {\n api: new _squid.$Api({\n uri: '/api/fi/wallet/preferences'\n }),\n\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n\n init: function init() {\n this._super.init.apply(this);\n this.topup = {};\n this.direct = {};\n },\n\n serialize: function serialize() {\n var data = {};\n\n if (this.topup.amount) {\n var _topup = this.topup,\n amount = _topup.amount,\n _topup$fundingSource = _topup.fundingSource;\n _topup$fundingSource = _topup$fundingSource === undefined ? {} : _topup$fundingSource;\n var instrument_id = _topup$fundingSource.instrument_id;\n\n // Set the Topup funding instrument in the wallet preference api, which will be used by future Topup transactions\n\n data.topup = {\n amount: amount,\n instrument_id: instrument_id,\n autoload_minimum_threshold: _squid.$config.topup.autoload_minimum_threshold\n };\n } else {\n var _direct$fundingSource = this.direct.fundingSource;\n _direct$fundingSource = _direct$fundingSource === undefined ? {} : _direct$fundingSource;\n var _instrument_id = _direct$fundingSource.instrument_id;\n\n // Set the Direct funding instrument in the wallet preference api, which will be used by future Direct funding transactions\n\n data.direct = {\n instrument_id: _instrument_id,\n currency_code: this.currency\n };\n }\n return data;\n },\n\n /**\n * Return the preferred topup/direct fundingsource.\n * Originally values of topup & direct are from the FI wallet preferences api, which gets assigned during the init() call.\n * Values can be changed in the Review and the Wallet pages.\n */\n getPreferred: function getPreferred() {\n if (this.topup.fundingSource && this.topup.fundingSource.instrument_id) {\n // xo-hermes-fi will always return topup.fundingSource even when there is no preferred topup instrument, hence making the additional check here.\n return this.topup.fundingSource;\n } else {\n return this.direct.fundingSource || {};\n }\n }\n});\n\nvar $WalletInstrumentNameMapping = exports.$WalletInstrumentNameMapping = _squid.$Model.extend('$WalletInstrumentNameMapping', {\n init: function init() {\n this._super.init.apply(this);\n this.INSTRUMENT_MAP = {\n AMSOUTH: /AMSOUTH,/,\n BOFA: /BANK OF AMERICA/,\n CAPITAL: /CAPITAL/,\n CHASE: /CHASE/,\n CITI: /CITIBANK/,\n FIFTHTHIRD: /FIFTH THIRD BANK/,\n HUNTINGTON: /HUNTINGTON/,\n INGDIRECT: /ING DIRECT/,\n NATIONALCITY: /NATIONAL CITY/,\n PNC: /PNC/,\n REGIONS: /REGIONS/,\n SUNTRUST: /SUNTRUST/,\n TDWATERHOUSE: /TD WATERHOUSE/,\n USAA: /USAA/,\n USBANK: /US BANK/,\n VISA: /VISA/,\n WAMUTUAL: /WASHINGTON MUTUAL/,\n WELLSFARGO: /WELLS FARGO/\n };\n this.INSTRUMENT_NAMES = Object.keys(this.INSTRUMENT_MAP);\n },\n\n getInstrumentNameNormalized: function getInstrumentNameNormalized(fsName) {\n var _this = this;\n\n if (!fsName) {\n return;\n }\n\n fsName = fsName.toUpperCase();\n\n return _squid.$util.find(this.INSTRUMENT_NAMES, function (instName) {\n if (_this.INSTRUMENT_MAP[instName].test(fsName)) {\n return true;\n }\n return false;\n });\n }\n});\n\nvar $CardInfoModel = exports.$CardInfoModel = _squid.$Model.extend('$CardInfoModel', {\n api: new _squid.$Api({\n uri: '/api/fi/card/:id'\n })\n});\n\nangular.value(\"$CardModel\", $CardModel);\nangular.value(\"$AddCardModel\", $AddCardModel);\nangular.value(\"$UnavailableCardModel\", $UnavailableCardModel);\nangular.value(\"$CardTypesModel\", $CardTypesModel);\nangular.value(\"$BankModel\", $BankModel);\nangular.value(\"$AddBankModel\", $AddBankModel);\nangular.value(\"$PreferredFi\", $PreferredFi);\nangular.value(\"$SepaModel\", $SepaModel);\nangular.value(\"$DeleteCardModel\", $DeleteCardModel);\nangular.value(\"$AddBillingAddressModel\", $AddBillingAddressModel);\nangular.value(\"$BillingAddressModel\", $BillingAddressModel);\nangular.value(\"$CurrencyConversionModel\", $CurrencyConversionModel);\nangular.value(\"$BillingAddressesModel\", $BillingAddressesModel);\nangular.value(\"$CardTypeFromBinModel\", $CardTypeFromBinModel);\nangular.value(\"$Resolve3DS\", $Resolve3DS);\nangular.value(\"$ResolveOTP\", $ResolveOTP);\nangular.value(\"$WalletPreferences\", $WalletPreferences);\nangular.value(\"$WalletInstrumentNameMapping\", $WalletInstrumentNameMapping);\nangular.value(\"$CardInfoModel\", $CardInfoModel);\n_index.$DeviceInfo;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/fi/index.js\n// module id = ../node_modules/xo-models/src/fi/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar issuerDeclineExperimentMap = exports.issuerDeclineExperimentMap = {\n Trmt_xo_hermesnodeweb_issuer_decline_1: {\n member: 'payment.processorDeclineIssuerMember',\n memberNoIssuer: 'payment.processorDeclineIssuerMemberNoIssuer',\n guest: 'payment.processorDeclineIssuerGuest',\n guestNoIssuer: 'payment.processorDeclineIssuerGuestNoIssuer',\n type: 'info'\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/fi/lib/constants.js\n// module id = ../node_modules/xo-models/src/fi/lib/constants.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$fiApis = undefined;\n\nvar _angular = require('angular');\n\nvar $fiApis = exports.$fiApis = {\n patchCvv: function patchCvv(checkoutSession) {\n var cvvData = checkoutSession.get('cvvData');\n\n if (cvvData) {\n return checkoutSession.action('patchCvv', {\n data: {\n id: cvvData.id,\n cvv: cvvData.security_code,\n type: cvvData.type,\n number: cvvData.number\n }\n });\n }\n\n return _angular.$q.when();\n }\n};\n\nangular.value(\"$fiApis\", $fiApis);\n_angular.$q;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/fi/lib/fiApis.js\n// module id = ../node_modules/xo-models/src/fi/lib/fiApis.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _constants = require('./constants.js');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fiMessages', function () {\n var xoonRedirectExperimentMap = {\n xo_hermes_addcard_msg_xoon_redirect_retry_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_bgr_orange: {\n msgKey: 'creditcard.noFIContingency',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_without_details: {\n msgKey: 'addFiError.declinedRetry',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_with_details: {\n msgKey: 'addFiError.declinedRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_retry_with_avs_details: {\n msgKey: 'addFiError.declinedRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_bgr_orange: {\n msgKey: 'creditcard.noFIContingency',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_without_details: {\n msgKey: 'addFiError.declinedNoRetry',\n type: 'warning',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_with_details: {\n msgKey: 'addFiError.declinedNoRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_noretry_with_avs_details: {\n msgKey: 'addFiError.declinedNoRetryWithCardDetails',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_control: {\n msgKey: 'creditcard.noFIContingency',\n type: 'info',\n showDetails: false\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_dropdown: {\n msgKey: 'addFiError.declinedWithBilling',\n type: 'warning',\n showDetails: true\n },\n xo_hermes_addcard_msg_xoon_redirect_avs_address_box: {\n msgKey: 'addFiError.declinedWithBilling',\n type: 'warning',\n showDetails: true\n }\n };\n\n function getContentKeys(hasFi) {\n if (hasFi) {\n return {\n member: 'payment.processorDeclineMember',\n generic: 'payment.processorDeclineMemberGeneric',\n buyerCredit: 'payment.processorDeclineMemberBuyerCredit'\n };\n } else {\n return {\n member: 'payment.processorDeclineMemberNoFI',\n generic: 'payment.processorDeclineMemberNoFIGeneric',\n buyerCredit: 'payment.processorDeclineMemberBuyerCreditNoFI'\n };\n }\n }\n\n // Temporary solution until PAPS returns CCID in the declined instrument\n var getIssuerName = function getIssuerName(_ref) {\n var _ref$instrument = _ref.instrument,\n instrument = _ref$instrument === undefined ? {} : _ref$instrument,\n _ref$disallowedInstru = _ref.disallowedInstruments,\n disallowedInstruments = _ref$disallowedInstru === undefined ? [] : _ref$disallowedInstru,\n _ref$cardAccounts = _ref.cardAccounts,\n cardAccounts = _ref$cardAccounts === undefined ? [] : _ref$cardAccounts;\n\n var last4 = instrument && instrument.last4 ? instrument.last4 : '';\n var search = disallowedInstruments.find(function (disallowedInstrument) {\n return disallowedInstrument.lastDigits === last4;\n });\n\n if (search) {\n var id = search.id;\n\n var cardAccount = cardAccounts.find(function (card) {\n return card.id.replace('-', '') === id;\n });\n\n if (cardAccount) {\n // Will need to eventually deprecate to the Wallet Model to manage this\n var issuerName = cardAccount.issuer && cardAccount.issuer.filtered_issuer_name ? cardAccount.issuer.filtered_issuer_name : '';\n\n return issuerName;\n }\n }\n return '';\n };\n\n function processorDeclinedMsg(checkoutSession, hasFi) {\n var experiment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n var authSession = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var wallet = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;\n var informalName = arguments[5];\n\n var declinedInstruments = checkoutSession.get('declinedInstruments', []);\n\n if (_angular2['default'].isArray(declinedInstruments) && declinedInstruments.length) {\n var msg = void 0;\n var type = 'warning';\n var instrument = declinedInstruments[0];\n var contentKeys = getContentKeys(hasFi);\n\n if (instrument.type === 'PAYMENT_CARD') {\n if (instrument.card_type && instrument.last4) {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'member' });\n var experimentMap = _constants.issuerDeclineExperimentMap[experiment];\n\n if (experimentMap && authSession && wallet) {\n var card_accounts = wallet.card_accounts;\n\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n var issuer = getIssuerName({\n instrument: instrument,\n disallowedInstruments: disallowedInstruments,\n cardAccounts: card_accounts\n });\n\n if (issuer) {\n type = experimentMap.type;\n msg = (0, _squid.$renderContent)(experimentMap.member, {\n name: informalName,\n type: instrument.card_type,\n issuer: issuer,\n number: instrument.last4\n });\n } else {\n type = experimentMap.type;\n msg = (0, _squid.$renderContent)(experimentMap.memberNoIssuer, {\n name: informalName,\n type: instrument.card_type,\n number: instrument.last4\n });\n }\n } else {\n msg = (0, _squid.$renderContent)(contentKeys.member, {\n type: instrument.card_type,\n number: instrument.last4\n });\n }\n } else {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'generic' });\n msg = (0, _squid.$renderContent)(contentKeys.generic);\n }\n } else {\n _logger.$logger.info('processor_decline', { hasFi: hasFi, message: 'buyerCredit' });\n msg = (0, _squid.$renderContent)(contentKeys.buyerCredit);\n }\n\n checkoutSession.set('declinedInstruments', null);\n\n return {\n type: type,\n msg: msg\n };\n }\n }\n\n function getXoonRedirectAddCardMsg(unavailableCard, experiment) {\n var experimentMap = xoonRedirectExperimentMap[experiment];\n\n if (!unavailableCard) {\n _logger.$logger.info(experiment + '_card_empty');\n return {\n type: 'info',\n msg: (0, _squid.$renderContent)('creditcard.noFIContingency')\n };\n }\n\n var msg = (0, _squid.$renderContent)(experimentMap['msgKey']);\n var type = experimentMap['type'];\n var showDetails = experimentMap['showDetails'];\n\n if (showDetails) {\n var cardType = (0, _squid.$renderContent)('cardTypes.' + unavailableCard.cardType);\n var lastDigits = unavailableCard.lastDigits;\n\n if (cardType && cardType.toString() && lastDigits) {\n msg = (0, _squid.$renderContent)(experimentMap['msgKey'], {\n cardType: cardType,\n last4: lastDigits\n });\n } else {\n msg = (0, _squid.$renderContent)('creditcard.noFIContingency');\n type = 'info';\n _logger.$logger.info(experiment + '_detail_missing');\n }\n }\n\n _logger.$logger.info(experiment, { type: unavailableCard.cardType, msgType: type, msgRendered: msg ? true : false });\n return {\n type: type ? type : 'info',\n msg: msg ? msg : (0, _squid.$renderContent)('creditcard.noFIContingency')\n };\n }\n\n function getAddCardControlMsg(checkoutSession) {\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n\n if (disallowedInstruments && disallowedInstruments.length === 1) {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'single_disallowed_FI_addcard_control_msg'\n });\n } else if (disallowedInstruments && disallowedInstruments.length > 1) {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'multi_disallowed_FI_addcard_control_msg'\n });\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'has_no_disallowed_FI_addcard_control_msg'\n });\n }\n\n return {\n msg: (0, _squid.$renderContent)('creditcard.noFIContingency'),\n type: 'info'\n };\n }\n\n function getAddCardMsg(unavailableCard, experiment, checkoutSession) {\n var xoonRedirectAddCardMsgExp = xoonRedirectExperimentMap[experiment];\n\n if (xoonRedirectAddCardMsgExp) {\n return getXoonRedirectAddCardMsg(unavailableCard, experiment);\n }\n return getAddCardControlMsg(checkoutSession);\n }\n\n function getAddCardTreatmentMsg(checkoutSession) {\n var msg = void 0;\n var type = void 0;\n var title = void 0;\n var cardList = void 0;\n var lastCard = void 0;\n var disallowedInstruments = checkoutSession.get('fundingOptions.disallowedInstruments', []);\n disallowedInstruments = disallowedInstruments.filter(function (instrument) {\n return instrument.type && instrument.type !== 'REWARDS' && instrument.type !== 'BALANCE';\n });\n\n if (disallowedInstruments && disallowedInstruments.length === 1) {\n cardList = disallowedInstruments[0].lastDigits ? disallowedInstruments[0].name + '-' + disallowedInstruments[0].lastDigits : disallowedInstruments[0].name;\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'single_disallowed_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasSingleDisallowedFi', { cardList: cardList });\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.hasDisallowedAddCardTitle');\n } else if (disallowedInstruments && disallowedInstruments.length > 1) {\n cardList = '';\n\n for (var i = 0; i < disallowedInstruments.length; i++) {\n if (i === disallowedInstruments.length - 1) {\n lastCard = disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits : disallowedInstruments[i].name;\n } else if (i === disallowedInstruments.length - 2) {\n cardList += disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits : disallowedInstruments[i].name;\n } else {\n cardList += disallowedInstruments[i].lastDigits ? disallowedInstruments[i].name + '-' + disallowedInstruments[i].lastDigits + ', ' : disallowedInstruments[i].name + ', ';\n }\n }\n\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'multi_disallowed_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasMultipleDisallowedFi', { cardList: cardList, lastCard: lastCard });\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.hasDisallowedAddCardTitle');\n } else {\n _logger.$logger.info('checkout_fpti', {\n 'int_error_description': 'has_no_FI_addcard_msg'\n });\n msg = (0, _squid.$renderContent)('creditcard.hasNoDisallowedFi');\n type = 'normal';\n title = (0, _squid.$renderContent)('creditcard.noDisallowedAddCardTitle');\n }\n\n return {\n msg: msg,\n type: type,\n title: title\n };\n }\n\n // User with only banks in disallowed list with message indicating the same\n function getAddBankTreatmentMsg() {\n return {\n msg: (0, _squid.$renderContent)('bank.disallowedAddCard'),\n type: 'normal'\n };\n }\n\n // Add card contingency for the case where card fails preauth; Show message which indicates that card failed pre-auth\n function getPreAuthTreatmentMsg() {\n var preAuthDisallowed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var disallowedInstrument = preAuthDisallowed[0];\n\n\n return {\n msg: (0, _squid.$renderContent)('creditCard.preAuthNoIssuer', {\n cardType: disallowedInstrument && disallowedInstrument.name || '',\n last4: disallowedInstrument && disallowedInstrument.lastDigits || 'xxxx'\n }),\n type: 'info'\n };\n }\n\n function getGamblingMsg() {\n return {\n type: 'error',\n msg: (0, _squid.$renderContent)('creditcard.noEligibleFI')\n };\n }\n\n return {\n processorDeclinedMsg: processorDeclinedMsg,\n getGamblingMsg: getGamblingMsg,\n getAddCardTreatmentMsg: getAddCardTreatmentMsg,\n getAddCardControlMsg: getAddCardControlMsg,\n getAddCardMsg: getAddCardMsg,\n getAddBankTreatmentMsg: getAddBankTreatmentMsg,\n getPreAuthTreatmentMsg: getPreAuthTreatmentMsg\n };\n});\n\n_squid.$renderContent;\n\n_logger.$logger;\n\n_constants.issuerDeclineExperimentMap;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/fi/lib/fiMessages.js\n// module id = ../node_modules/xo-models/src/fi/lib/fiMessages.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _checkout = require('../checkout');\n\nvar _wallet = require('../wallet');\n\nvar _dist = require('squid/dist');\n\nvar PADSUBTYPE = 'DELAYED_TRANSFER';\nvar MEFTSUBTYPE = 'MEFT';\nvar IACHSUBTYPE = 'IACH';\nvar ECHECKSUBTYPE = 'ECHECK';\n\n// any mappings to normalize fi name\nvar NAME_MAPPINGS = {\n 'MERCHANT_SPECIFIC_BALANCE': 'INCENTIVE'\n};\n\n// eslint-disable-next-line no-confusing-arrow\nvar allFis = function allFis(plan) {\n return plan.secondaryFIs ? [plan.primaryFs].concat(plan.secondaryFIs) : [plan.primaryFs];\n};\n\nvar isSubType = function isSubType(subtype) {\n return function (fi) {\n return fi.subtype === subtype || fi.sub_type === subtype;\n };\n};\n\nvar capFirst = function capFirst(product) {\n return product && product.charAt(0).toUpperCase() + product.slice(1).toLowerCase();\n};\n\nexports['default'] = _squid.$Model.extend('$FiMetaModel', {\n invalidateOnLogout: true,\n\n onInvalidate: function onInvalidate() {\n if (this.session) {\n delete this.session;\n }\n if (this.wallet) {\n delete this.wallet;\n }\n },\n fetch: function fetch() {\n var _this = this;\n\n if (_squid.$config.disableCardArt) {\n return _squid.$promise.resolve(this);\n } else {\n return _squid.$promise.all({\n session: _checkout.$CheckoutSessionModel.instance(this.id).retrieve(),\n wallet: _wallet.$WalletModel.instance(this.id).retrieve()\n }).then(function (r) {\n return _squid.$util.extend(_this, r);\n });\n }\n },\n\n\n // pxp apply for user\n cardArtEnabled: function cardArtEnabled() {\n return this.wallet && this.wallet.cardArtEnabled;\n },\n getCardArt: function getCardArt(fi) {\n return this.wallet && this.cardArtEnabled() && this.wallet.getCardArt(fi);\n },\n plans: function plans() {\n return this.session.fundingOptions.plans;\n },\n hasPadPlan: function hasPadPlan() {\n return this.plans().map(allFis).some(function (fis) {\n return fis.some(isSubType(PADSUBTYPE));\n });\n },\n type: function type(fi) {\n if (fi.type === 'CREDIT' || fi.type === 'BILL_ME_LATER') {\n return 'CREDIT';\n } else {\n return fi.type;\n }\n },\n getName: function getName(fi) {\n if (fi.isPinlessDebit || fi.is_pinless_debit) {\n return (0, _dist.$renderContent)('fsMappings.PINLESSDEBIT');\n }\n\n // Normalize fs name for content key lookup\n var name = NAME_MAPPINGS[fi.name] || fi.name;\n\n return this.wallet && this.wallet.getCustomName(fi) || (0, _dist.$renderContent)('fsMappings.' + name).toString() || name;\n },\n getAmount: function getAmount(fi) {\n return fi.amount;\n },\n getCurrencyCode: function getCurrencyCode(fi) {\n return fi.amount.currency_code;\n },\n getAllCurrencyCodes: function getAllCurrencyCodes(plan) {\n return allFis(plan).map(this.getCurrencyCode);\n },\n getCardMask: function getCardMask(fi) {\n var mask = this.wallet && this.wallet.getCardMask(fi);\n\n if (!mask.before) {\n mask.before = capFirst(fi.productClass);\n }\n if (!mask.after) {\n mask.after = fi.lastDigits || fi.last4;\n }\n return mask;\n },\n isPinlessDebit: function isPinlessDebit(fi) {\n return fi.is_pinless_debit || fi.isPinlessDebit;\n },\n isPad: function isPad(fi) {\n return isSubType(PADSUBTYPE)(fi) || isSubType('PAD')(fi);\n },\n isMeft: function isMeft(fi) {\n return isSubType(MEFTSUBTYPE)(fi);\n },\n isIach: function isIach(fi) {\n return isSubType(IACHSUBTYPE)(fi);\n },\n isEcheck: function isEcheck(fi) {\n return isSubType(ECHECKSUBTYPE)(fi);\n },\n getEditDisallowedContentKey: function getEditDisallowedContentKey(fi) {\n if (!fi) {\n return;\n }\n if (fi.editDisallowedMsg) {\n return 'wallet.' + fi.editDisallowedMsg;\n } else if (this.wallet.isLinkedCard(fi)) {\n return 'wallet.editDisallowedPayment';\n }\n }\n});\n\n\n_squid.$Model;\n\n_squid.$promise;\n\n_squid.$util;\n\n_squid.$config;\n\n_checkout.$CheckoutSessionModel;\n\n_wallet.$WalletModel;\n\n_dist.$renderContent;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/fiMeta/index.js\n// module id = ../node_modules/xo-models/src/fiMeta/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$GDPRCookieBannerModel = exports.isGdprValid = exports.testGdprBannerCookie = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar testGdprBannerCookie = exports.testGdprBannerCookie = function testGdprBannerCookie(cookies) {\n return (/(^|;\\s*)cookie_prefs=/.test(cookies)\n );\n};\n\nvar isGdprValid = exports.isGdprValid = function isGdprValid() {\n if (_squid.$util.param('forceGDPR')) {\n return true;\n }\n\n var country = _squid.$locale.country;\n\n return _squid.$util.getProperty(_squid.$config, 'GDPR.cookieBanner', { 'default': false }) && _squid.$util.getProperty(_squid.$config, 'GDPR.countries', { 'default': [] }).indexOf(country) > -1;\n};\n\nvar $GDPRCookieBannerModel = exports.$GDPRCookieBannerModel = _squid.$Model.extend('$GDPRCookieBannerModel', {\n api: new _squid.$Api({\n uri: '/api/cookieBanner'\n }),\n\n /**\n * Handles the logic for when to fetch the banner and when to return\n * Don't repeat the call for same country\n * Don't return the banner if not PXP check\n * @returns {Promise} resolves an object\n */\n getBanner: function getBanner() {\n var _this = this;\n\n // API is cached on country. Return current result if already present\n if (this.lastResult && this.lastCountry === _squid.$locale.country && this.lastLang === _squid.$locale.lang) {\n return this.lastResult;\n }\n\n // Invalidate the model to make a fresh call\n this.invalidate();\n\n // Log if the user has cookie indicating a previous interaction with the cookie banner\n if (testGdprBannerCookie(document.cookie)) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GDPR_banner',\n to: 'GDPR_banner_has_cookie'\n });\n }\n\n // Cache the result promise and params\n this.lastCountry = _squid.$locale.country;\n this.lastLang = _squid.$locale.lang;\n this.lastResult = this.retrieve().then(function (res) {\n var html = res.html,\n css = res.css,\n js = res.js;\n\n\n if (!html || !js || !css) {\n _logger.$logger.info('gdpr_response_missing_props', {\n html: !!html,\n js: !!js,\n css: !!css\n });\n _this.reset();\n return;\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: 'GDPR_banner',\n to: 'GDPR_banner_shown'\n });\n\n return { html: html, css: css, js: js };\n });\n\n return this.lastResult;\n },\n reset: function reset() {\n this.html = '';\n this.css = '';\n this.js = '';\n },\n shown: function shown() {\n return !!this.html;\n },\n\n // Check if a banner was shown in the flow.\n // SOME EDGE CASES:\n // Will not update when the user clicks to accept the banner, and it closes\n // Will update if retrieve is called with a new country and blank data is returned\n hasBanner: function hasBanner() {\n var _this2 = this;\n\n // check config flag\n // check if already populated\n // make call again and let regular logic populate html\n // return boolean\n\n if (!isGdprValid()) {\n return _squid.$promise.resolve(false);\n }\n if (this.html) {\n return _squid.$promise.resolve(this.shown());\n }\n return this.getBanner().then(function () {\n return _this2.shown();\n });\n }\n});\n\nangular.value(\"testGdprBannerCookie\", testGdprBannerCookie);\nangular.value(\"isGdprValid\", isGdprValid);\nangular.value(\"$GDPRCookieBannerModel\", $GDPRCookieBannerModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$locale;\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$promise;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/gdprCookieBanner/index.js\n// module id = ../node_modules/xo-models/src/gdprCookieBanner/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$InventoryModel = undefined;\n\nvar _squid = require('squid');\n\nvar $InventoryModel = exports.$InventoryModel = _squid.$Model.extend('$InventoryModel', {\n api: new _squid.$Api({\n uri: '/api/catalog/:id/item/',\n postAttempts: 2,\n cache: true\n }),\n\n setInvetoryItems: function setInvetoryItems(inventoryItems) {\n this.inventoryItems = inventoryItems;\n },\n\n getInventoryItems: function getInventoryItems() {\n return this.inventoryItems;\n }\n});\n\nangular.value(\"$InventoryModel\", $InventoryModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/inventory/index.js\n// module id = ../node_modules/xo-models/src/inventory/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CreditOfferModel = exports.$MemberSegmentModel = exports.$fireMORSBeacon = exports.$MessageDiscoverModel = exports.$MarketingOfferModel = undefined;\n\nvar _uuid = require('node-uuid/uuid');\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $MarketingOfferModel = exports.$MarketingOfferModel = _squid.$Model.extend('$MarketingOfferModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/offer/search-ads',\n postAttempts: 1,\n cache: true\n }),\n init: function init() {\n this.setProperties({ ads: [] });\n this.meta = { populated: false };\n },\n onPopulate: function onPopulate() {\n var _this = this;\n\n if (this.targetPlacements && this.targetPlacements[0]) {\n var targetAd = this.ads.find(function (ad) {\n return ad.valid && ad.campaign.adunit_id === _this.targetPlacements[0].placement_code;\n });\n\n this.ad = undefined;\n if (targetAd) {\n var ad = {};\n var nvpContent = targetAd && targetAd.content && targetAd.content.nvp;\n\n nvpContent.forEach(function (obj) {\n ad[obj.name] = obj.value;\n });\n ad['impressionUrl'] = targetAd && targetAd.tracking && targetAd.tracking.impression_url;\n ad['clickUrl'] = targetAd && targetAd.tracking && targetAd.tracking.click_url;\n ad['campaignId'] = targetAd && targetAd.campaign && targetAd.campaign.campaign_id;\n ad['buyItemId'] = targetAd && targetAd.campaign && targetAd.campaign.buy_item_id;\n ad['placementCode'] = targetAd && targetAd.campaign && targetAd.campaign.adunit_id;\n this.ad = ad;\n }\n }\n },\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.cacheParam) {\n this.cacheParam.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n serialize: function serialize() {\n return {\n 'site': this.site,\n 'locale': this.locale,\n 'si': this.si,\n 'visit_id': _uuid2['default'].v4(),\n 'page': this.page,\n 'epu': this.payer,\n 'pu_type': this.puType || 'ANONYMOUS',\n 'country_code': this.countryCode,\n 'payment_context': {\n 'total_transaction_amount': this.totalTransactionAmount,\n 'total_shipping_amount': this.totalShippingAmount,\n 'business_case': 'NONE',\n 'business_case_variation': '',\n 'validate_existing_offer': 'false',\n 'payment_units': [{\n 'transaction_amount': this.totalTransactionAmount,\n 'transaction_id': '',\n 'encrypted_transaction_id': '',\n 'activity_id': '',\n 'payee': {\n 'pu_type': 'BUSINESS',\n 'country_code': this.countryCode,\n 'epu': this.payee,\n 'pu': ''\n }\n }]\n },\n 'target_placements': this.targetPlacements,\n 'wallet_instruments': this.walletInstruments,\n 'addl_property_installments_not_allowed': this.installmentsNotAllowed\n };\n },\n getTargetAd: function getTargetAd() {\n return this.ad;\n },\n isAdFound: function isAdFound() {\n if (this.ad) {\n for (var property in this.ad) {\n if (this.ad.hasOwnProperty(property)) {\n return true;\n }\n }\n }\n return false;\n }\n});\n\nvar $MessageDiscoverModel = exports.$MessageDiscoverModel = _squid.$Model.extend('$MessageDiscoverModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/offer/discover-messages',\n postAttempts: 1\n })\n});\n\nvar $fireMORSBeacon = exports.$fireMORSBeacon = {\n fireBeacon: function fireBeacon(uri) {\n var img = document.createElement('img');\n\n img.setAttribute('src', uri);\n document.body.appendChild(img);\n return;\n }\n};\n\nvar $MemberSegmentModel = exports.$MemberSegmentModel = _squid.$Model.extend('$MemberSegmentModel', {\n api: new _squid.$Api({\n uri: '/api/segment/memberSegment',\n postAttempts: 1\n }),\n invalidateOnLogout: true, // invalidate this model when auth.logout() gets called\n getMemberSegment: function getMemberSegment() {\n return this.memberSegment;\n },\n getCreditOffer: function getCreditOffer() {\n return this.creditOffer;\n },\n isNewMember: function isNewMember() {\n return this.memberSegment === 'NEW_MEMBER' || this.memberSegment === 'YOUNG_MEMBER';\n },\n isExistingMember: function isExistingMember() {\n return this.memberSegment === 'EXISTING_MEMBER';\n },\n // Member Segments that are eligble for the New Experience\n isEligibleForExperimentation: function isEligibleForExperimentation() {\n var eligibleMemberSegments = _squid.$config.memberSegments;\n\n return eligibleMemberSegments.indexOf(this.memberSegment) > -1;\n }\n});\n\nvar $CreditOfferModel = exports.$CreditOfferModel = $MessageDiscoverModel.extend('$CreditOfferModel', {\n init: function init() {\n this.setProperties({\n bannerMessages: [],\n interstitialMessages: []\n });\n },\n populate: function populate(result) {\n var _this2 = this;\n\n if (result && result.touchpoint_messages) {\n var touchpoint_messages = result.touchpoint_messages.find(function (element) {\n return element.touchpoint_code === _this2.touchpoint;\n });\n\n this.storeMessages(touchpoint_messages);\n }\n },\n storeMessages: function storeMessages(touchpoint_messages) {\n if (touchpoint_messages) {\n this.viewName = touchpoint_messages.view_name;\n\n if (touchpoint_messages.messages) {\n var messages = touchpoint_messages.messages;\n\n for (var i = 0; i < touchpoint_messages.messages.length; i++) {\n var presentmentType = messages[i].content.json.PresentmentType;\n\n if (presentmentType === 'Banner') {\n this.bannerMessages.push(messages[i]);\n } else if (presentmentType === 'Interstitial') {\n this.interstitialMessages.push(messages[i]);\n }\n }\n }\n }\n },\n getBannerCount: function getBannerCount() {\n return this.bannerMessages.length;\n },\n hasBannerMessage: function hasBannerMessage() {\n return this.getBannerCount() > 0;\n },\n getInterstitialCount: function getInterstitialCount() {\n return this.interstitialMessages.length;\n },\n hasInterstitialMessage: function hasInterstitialMessage() {\n return this.getInterstitialCount() > 0;\n },\n getTouchpointCode: function getTouchpointCode() {\n return this.touchpoint;\n },\n getBannerMessage: function getBannerMessage(i) {\n i = !i ? 0 : i;\n\n if (this.getBannerCount() > i) {\n return this.bannerMessages[i];\n }\n return null;\n },\n getInterstitialMessage: function getInterstitialMessage(i) {\n i = !i ? 0 : i;\n\n if (this.getInterstitialCount() > i) {\n return this.interstitialMessages[i];\n }\n return null;\n },\n getInterstitialContent: function getInterstitialContent() {\n var interstitialContent = {};\n\n if (this.hasInterstitialMessage()) {\n var interstitialMessage = this.getInterstitialMessage().content.json;\n\n _logger.$logger.info('interstitial content', interstitialMessage);\n interstitialContent.messageId = 'PS-' + interstitialMessage['MessageDescription'];\n interstitialContent.bodyText = interstitialMessage['HeadlineText'];\n interstitialContent.bodyText2 = interstitialMessage['TaglineText'];\n interstitialContent.termsText = interstitialMessage['TermsText'];\n interstitialContent.termsText2 = interstitialMessage['TermsText2'];\n interstitialContent.termsLink = interstitialMessage['TermsLink'];\n interstitialContent.termsLinkText = interstitialMessage['TermsLinkText'];\n interstitialContent.ctaText = interstitialMessage['CTAText'];\n }\n return interstitialContent;\n },\n fireInterstitialBeacon: function fireInterstitialBeacon() {\n if (this.hasInterstitialMessage()) {\n var impressionUrl = this.getInterstitialMessage().tracking_details.impression_url;\n\n _logger.$logger.info('interstitial impressionUrl', impressionUrl);\n $fireMORSBeacon.fireBeacon(impressionUrl);\n }\n },\n getCacheKey: function getCacheKey() {\n var cacheKey = {};\n\n if (this.application_context) {\n this.application_context.forEach(function (element) {\n if (typeof element.value !== 'undefined') {\n cacheKey[element.name] = element.value.toString();\n }\n });\n }\n return cacheKey;\n },\n serialize: function serialize() {\n return {\n 'country_code': this.locale.country,\n 'language': this.locale.lang + '_' + this.locale.country,\n 'identity_context': [{\n 'type': 'PAYER_ID',\n 'value': this.payer\n }, {\n 'type': 'MERCHANT_PAYER_ID',\n 'value': this.payee\n }],\n 'recommendation_context': {\n 'view_names': this.view_names ? this.view_names : [],\n 'touchpoint_details': [{\n 'code': this.touchpoint,\n 'message_count': this.message_count ? this.message_count : 1\n }]\n },\n 'application_context': this.application_context\n };\n }\n});\n\nangular.value(\"$MarketingOfferModel\", $MarketingOfferModel);\nangular.value(\"$MessageDiscoverModel\", $MessageDiscoverModel);\nangular.value(\"$fireMORSBeacon\", $fireMORSBeacon);\nangular.value(\"$MemberSegmentModel\", $MemberSegmentModel);\nangular.value(\"$CreditOfferModel\", $CreditOfferModel);\n_logger.$logger;\n\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$config;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/marketingoffer/index.js\n// module id = ../node_modules/xo-models/src/marketingoffer/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoMORSCreditBannerUtils = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _ = require('..');\n\nvar _squid = require('squid');\n\nvar $xoMORSCreditBannerUtils = exports.$xoMORSCreditBannerUtils = {\n /**\n * Returns if eligible for MORS call\n * @param {Object} args\n * @param {CheckoutSessionModel} args.checkoutSession - Populated $CheckoutSessionModel\n * @returns {Boolean} flag showing whether to call MORS or not\n */\n eligible: function eligible(_ref) {\n var checkoutSession = _ref.checkoutSession;\n\n var hasCredit = checkoutSession.fundingOptions.hasCredit();\n\n return _squid.$locale.country === 'US' && (checkoutSession.creditOffer || hasCredit);\n },\n\n\n /**\n * Input parameters needed to generate payload to call MORS\n * @typedef {Object} MorsInput\n * @property {CheckoutCartModel} checkoutCart - Populated $CheckoutCartModel\n * @property {CheckoutSessionModel} checkoutSession - Populated $CheckoutSessionModel\n * @property {CheckoutPayeeModel} payee - Populated $CheckoutPayeeModel\n * @property {Object} locale - The buyer's locale. Most likely will want to pass in $locale\n * @property {Boolean} isBillingNoPurchase - Flag indicating if purchase is of type billing with no purchase\n * @property {String} placementCode - MORS parameter. (Probably) a code that indicates which part of the page the ad will be used in\n * @property {String} pu_type - MORS parameter. (Probably) a classification of the account type the ad is for\n * @property {Array} presentation_types - MORS parameter. (Probably) some codes targeting the types of ads to search for\n */\n\n /**\n * Make a call to MORS for credit banner info\n * Some caveats on usage:\n * - expects user to be logged in and checkout session to already be populated\n * @param {MorsInput} morsInput - data needed to call MORS\n * @param {Object} options - options on how to make the API call\n * @param {Boolean} options.silent - have the MORS call be silent (no spinner)\n *\n * @returns {Promise}\n */\n getMorsCreditBanner: function getMorsCreditBanner(morsInput) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$silent = _ref2.silent,\n silent = _ref2$silent === undefined ? true : _ref2$silent;\n\n var morsParams = $xoMORSCreditBannerUtils.getMorsParametersForCreditBanner(morsInput);\n var cacheId = morsParams.cacheId;\n var marketingOfferModel = new _.$MarketingOfferModel(morsParams);\n\n return marketingOfferModel.save({\n silent: silent,\n params: {\n cacheToken: cacheId,\n txnAmount: morsParams.totalTransactionAmount.value\n },\n transientError: true,\n cache: true,\n success: function success(result) {\n _logger.$logger.info('MORS_response', result);\n return marketingOfferModel;\n },\n error: function error(err) {\n _logger.$logger.error('MORS_api_failure_credit', { error: err });\n throw err;\n }\n });\n },\n\n /**\n * getMorsParametersForCreditBanner\n * Returns an object with all the parameters needed for calling MORS\n * @param {MorsInput} morsInput - data needed to call MORS\n *\n * @returns {Object} Various MORS params, formatted for calling the API\n */\n getMorsParametersForCreditBanner: function getMorsParametersForCreditBanner(_ref3) {\n var checkoutCart = _ref3.checkoutCart,\n checkoutSession = _ref3.checkoutSession,\n payee = _ref3.payee,\n locale = _ref3.locale,\n isBillingNoPurchase = _ref3.isBillingNoPurchase,\n _ref3$placementCode = _ref3.placementCode,\n placementCode = _ref3$placementCode === undefined ? '210004' : _ref3$placementCode,\n _ref3$pu_type = _ref3.pu_type,\n pu_type = _ref3$pu_type === undefined ? 'PERSONAL' : _ref3$pu_type,\n _ref3$presentation_ty = _ref3.presentation_types,\n presentation_types = _ref3$presentation_ty === undefined ? ['PayPalCreditCheckout'] : _ref3$presentation_ty;\n\n _logger.$logger.debug('xoMORSCreditBannerUtils: Composing MORS parameters for credit banner');\n var isCreditInWallet = false;\n\n if (isBillingNoPurchase) {\n isCreditInWallet = checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n var plans = checkoutSession.get('fundingOptions.plans', []);\n\n if (plans) {\n isCreditInWallet = plans.find(function (fi) {\n return fi && fi.primaryFs && fi.primaryFs.name === 'BILL_ME_LATER';\n });\n }\n }\n\n var morsCacheId = checkoutSession.id + '-' + placementCode + '-' + !!isCreditInWallet;\n var walletInstruments = [];\n\n if (isCreditInWallet) {\n walletInstruments.push({\n financial_instrument_type: 'FI_PAYPAL_CREDIT',\n financial_instrument_product_type: 'PI_TYPE_CREDIT_TXN_CARD_BML',\n preferred: (typeof isCreditInWallet === 'undefined' ? 'undefined' : _typeof(isCreditInWallet)) === 'object' ? isCreditInWallet.isPreferred : undefined,\n out_of_wallet: false\n });\n }\n\n return {\n countryCode: locale.country,\n cache: true,\n cacheId: morsCacheId,\n cacheParam: [{ name: 'cacheToken', value: morsCacheId }, {\n name: 'txnAmount',\n value: (checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n }],\n page: 'HERMES_RYI_PAGE',\n site: 'HERMES_RYI_PAGE',\n puType: pu_type,\n totalTransactionAmount: {\n currency_code: checkoutCart.get('purchase.amounts.total.currency_code', ''),\n value: (checkoutCart.get('purchase.amounts.total.amount', 0) * 100).toFixed(0)\n },\n totalShippingAmount: {\n currency_code: checkoutCart.get('purchase.amounts.total.currency_code', ''),\n value: (checkoutCart.get('purchase.amounts.shipping.amount', 0) * 100).toFixed(0)\n },\n payee: payee.merchant.id || '',\n payer: checkoutSession.payer.id || '',\n si: checkoutSession.id || '',\n targetPlacements: [{\n placement_code: placementCode || '',\n presentation_types: presentation_types || ''\n }],\n walletInstruments: walletInstruments,\n installmentsNotAllowed: !checkoutSession.creditInstallmentOffer\n };\n },\n mapResponseToCreditBanner: function mapResponseToCreditBanner(ad, shouldShowPassiveBanner) {\n var banner = {};\n\n banner.offerType = this.morsOfferTypeToCreditType(ad['offertype']);\n banner.logo = ad['Logo'];\n banner.termsText = this.formatBannerField(ad['TermsText']);\n banner.termsLink = ad['TermsLink'];\n banner.termsLinkText = ad['TermsLinkText'];\n if (!shouldShowPassiveBanner) {\n banner.bodyText = this.formatBannerField(ad['OfferText1']);\n banner.bodyText2 = this.formatBannerField(ad['OfferText2']);\n banner.ctaText = this.formatBannerField(ad['CTAText']);\n } else {\n banner.ctaText = this.formatBannerField(ad['OfferText1']);\n banner.bodyText = this.formatBannerField(ad['OfferText2']);\n }\n banner.messageId = ad['MessageDescription'] ? 'PS-' + ad['MessageDescription'] : 'CS-' + ad['MessageType'] + '-' + ad['offertype'];\n return banner;\n },\n formatBannerField: function formatBannerField(content) {\n if (angular.isString(content)) {\n // Ensure \"PayPal Credit\" does not wrap\n content = _angular.$sce.trustAsHtml(content.replace(/PayPal Credit/g, 'PayPal Credit'));\n }\n return content;\n },\n morsOfferTypeToCreditType: function morsOfferTypeToCreditType(morsOfferType) {\n var CREDIT_TYPE = {\n CORE: 'CORE',\n SAC: 'SAC',\n NI: 'NI',\n EZP: 'EZP',\n BA: 'BA'\n };\n\n switch (morsOfferType) {\n case 'CORE':\n return CREDIT_TYPE.CORE;\n case 'SAC':\n return CREDIT_TYPE.SAC;\n case 'NI':\n return CREDIT_TYPE.NI;\n case 'PALA':\n return CREDIT_TYPE.EZP;\n default:\n _logger.$logger.warn('unknown_credit_type');\n return;\n }\n }\n};\n\nangular.value(\"$xoMORSCreditBannerUtils\", $xoMORSCreditBannerUtils);\n_angular.$sce;\n\n_logger.$logger;\n\n_.$MarketingOfferModel;\n\n_squid.$locale;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js\n// module id = ../node_modules/xo-models/src/marketingoffer/lib/xoMORSCreditBannerUtils.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$NewMemberEligibility = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _checkout = require('../checkout');\n\nvar _shippingMethod = require('../shippingMethod');\n\nvar _app = require('../app');\n\nvar _marketingoffer = require('../marketingoffer');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _auth = require('../auth');\n\nvar control = 'control';\nvar ineligible = 'ineligible';\nvar one_page = 'one_page';\nvar design_2 = 'design_2';\nvar design_3 = 'design_3';\n\nvar TREATMENT_PATTERNS = {\n CONTROL: /xo_hermes_\\w*_member_control/,\n ONE_PAGE: /xo_hermes_\\w*_member_treatment_1/,\n DESIGN_2: /xo_hermes_\\w*_member_treatment_3/,\n DESIGN_3: /xo_hermes_\\w*_member_treatment_4/\n};\n\nvar mapTreatment = function mapTreatment(treatment) {\n if (!treatment) {\n return;\n }\n\n if (TREATMENT_PATTERNS.ONE_PAGE.test(treatment)) {\n return one_page;\n }\n\n if (TREATMENT_PATTERNS.DESIGN_2.test(treatment)) {\n return design_2;\n }\n\n if (TREATMENT_PATTERNS.DESIGN_3.test(treatment)) {\n return design_3;\n }\n};\n\nvar getSegmentParameters = function getSegmentParameters(token) {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token)\n }).then(function () {\n var data = {\n page: 'HERMES_RYI_PAGE',\n site: 'HERMES_RYI_PAGE',\n locale: _squid.$locale.lang + '_' + _squid.$locale.country,\n puType: 'PERSONAL',\n visit_id: token,\n si: token,\n payment_context: {\n business_case: 'NONE',\n business_case_variation: '',\n validate_existing_offer: 'false',\n total_transaction_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.total.amount', 0) * 100)\n },\n total_shipping_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.shipping.amount', 0) * 100)\n },\n payment_units: [{\n transaction_amount: {\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code', ''),\n value: Math.round(models.checkoutCartModel.get('purchase.amounts.total.amount', 0) * 100)\n },\n transaction_id: '',\n encrypted_transaction_id: '',\n activity_id: '',\n payee: {\n pu_type: 'BUSINESS',\n country_code: models.checkoutAppDataModel.get('merchant.merchant_country') || '',\n epu: models.checkoutPayeeModel.merchant.id || '',\n pu: ''\n }\n }]\n },\n target_placements: [{\n placement_code: '210005',\n presentation_types: ['decision']\n }]\n };\n\n return data;\n });\n};\n\nvar isMemberSegmentEligible = function isMemberSegmentEligible(token) {\n var memberSegmentModel = _marketingoffer.$MemberSegmentModel.instance();\n var memberSegment = memberSegmentModel.getMemberSegment();\n\n if (memberSegment !== undefined) {\n return _squid.$promise.resolve(memberSegmentModel.isEligibleForExperimentation());\n }\n\n return getSegmentParameters(token).then(function (data) {\n memberSegmentModel.invalidate();\n return memberSegmentModel.save({\n silent: true,\n data: data,\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n return;\n }\n }\n }).then(function () {\n return memberSegmentModel.isEligibleForExperimentation();\n })['catch'](function () {\n return false;\n });\n });\n};\n\nvar eligibility = function eligibility(token, _ref) {\n var authModel = _ref.authModel,\n checkoutSessionModel = _ref.checkoutSessionModel,\n checkoutAppDataModel = _ref.checkoutAppDataModel,\n checkoutCartModel = _ref.checkoutCartModel,\n checkoutPayeeModel = _ref.checkoutPayeeModel,\n shippingRuleSummaryModel = _ref.shippingRuleSummaryModel;\n var plan = checkoutSessionModel.plan,\n negBalances = checkoutSessionModel.negBalances;\n\n var plans = checkoutSessionModel.get('fundingOptions.plans');\n\n // Ineligible reasons:\n // - multiple plans\n // - negative balance\n // - billing agreement\n // - third Party wallet (Baidu, Venmo, etc..)\n // - shipping and tax\n // - second button\n // - Android Pay\n // - Gambling\n // - Default funding source is not card\n var isMultiplePlans = plans && plans.length > 1;\n var isNegativeBalance = negBalances && negBalances.length !== 0;\n var isBilling = checkoutCartModel.isBilling();\n var isThirdParty = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n var isShippingRulesEnabled = shippingRuleSummaryModel.isSnTEnabled;\n var isSecondButton = checkoutAppDataModel.is_second_button_txn;\n var isAPay = checkoutCartModel.isWalletTokenization();\n var isGambling = checkoutPayeeModel.isGambling();\n var isHideShipping = checkoutAppDataModel.flags.hide_shipping_address || !checkoutAppDataModel.flags.shipping_address_required;\n\n // Default funding source needs to be card for now.\n var isSupportedDefaultFundingSource = plan && plan.sources && plan.sources.length === 1 && plan.sources[0].type === 'PAYMENT_CARD';\n\n var eligibilityCriteria = {\n noMultiplePlans: !isMultiplePlans,\n noNegativeBalance: !isNegativeBalance,\n noBilling: !isBilling,\n noThirdParty: !isThirdParty,\n noSnT: !isShippingRulesEnabled,\n noSecondButton: !isSecondButton,\n noAPay: !isAPay,\n noGambling: !isGambling,\n noSupportedDefaultFundingSource: isSupportedDefaultFundingSource,\n noHideShipping: !isHideShipping\n };\n\n var ineligibleReasons = Object.keys(eligibilityCriteria).filter(function (key) {\n return !eligibilityCriteria[key];\n });\n var transactionEligible = ineligibleReasons.length === 0;\n\n if (!transactionEligible) {\n var reasons = ineligibleReasons.join(':');\n\n _logger.$logger.info('checkout_ftpi', {\n from: 'new_member_eligibility',\n to: 'process_new_member_eligibility',\n eligibility_reason: reasons\n });\n for (var _iterator = ineligibleReasons, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref2;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref2 = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref2 = _i.value;\n }\n\n var reason = _ref2;\n\n _logger.$logger.info('new_member_experience_ineligible_' + reason);\n }\n return _squid.$promise.resolve(ineligible);\n }\n\n // Check member segment\n return isMemberSegmentEligible(token).then(function (eligibleMember) {\n if (!eligibleMember) {\n _logger.$logger.info('new_member_experience_ineligible_member_segment');\n return ineligible;\n }\n\n // if merchant is on blacklist...\n if (_app.$PXPBlacklist.isMerchantBlacklisted(checkoutPayeeModel.get('merchant.id'))) {\n _logger.$logger.info('new_member_experience_ineligible_merchant_blacklisted');\n return control;\n }\n\n var memberSegmentModel = _marketingoffer.$MemberSegmentModel.instance();\n var memberSegment = memberSegmentModel.getMemberSegment();\n\n _logger.$logger.info('new_member_experience_eligible_' + memberSegment);\n\n return (0, _squid.$pxp)('xo_hermes_new_member_journey', {\n 'uid': authModel.buyer_id,\n 'ctx.COUNTRY': authModel.country,\n 'ctx.SEGMENT': memberSegment }, 'xo_hermes_(\\\\w*)_member_treatment_(\\\\d)|xo_hermes_(\\\\w*)_member_control', false, true).then(function (t) {\n if (t) {\n var r = mapTreatment(t.treatment_name);\n\n return r || control;\n } else {\n return control;\n }\n });\n });\n};\n\nvar snt = function snt(models, token) {\n if (_squid.$integration.getConfig('SHOW_SHIPPING_METHOD')) {\n return (0, _squid.$populate)(models, {\n shippingRuleSummaryModel: _shippingMethod.$ShippingRuleSummaryModel.instance(token).retrieve({\n params: {\n merchant_id: models.checkoutPayeeModel.get('merchant.id'),\n currency_code: models.checkoutCartModel.get('purchase.amounts.total.currency_code')\n }\n })\n });\n } else {\n models.shippingRuleSummaryModel = {};\n return _squid.$promise.resolve();\n }\n};\n\nvar $NewMemberEligibility = exports.$NewMemberEligibility = _squid.$Model.extend('$NewMemberEligibility', {\n getVariant: function getVariant(token) {\n var _this = this;\n\n if (!(0, _squid.$feature)('newMemberExperience')) {\n return _squid.$promise.resolve(ineligible);\n }\n\n if (_squid.$meta.corp) {\n var nmexp = _squid.$util.param('nmj_exp');\n\n if (nmexp === '1') {\n return _squid.$promise.resolve(one_page);\n } else if (nmexp === '2') {\n return _squid.$promise.resolve(design_2);\n } else if (nmexp === '3') {\n return _squid.$promise.resolve(design_3);\n } else if (nmexp === '0') {\n return _squid.$promise.resolve(control);\n }\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n authModel: _auth.$AuthModel.instance(),\n checkoutSessionModel: _checkout.$CheckoutSessionModel.instance(token),\n checkoutAppDataModel: _checkout.$CheckoutAppDataModel.instance(token),\n checkoutPayeeModel: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutCartModel: _checkout.$CheckoutCartModel.instance(token)\n }).then(function () {\n return snt(models, token);\n }).then(function () {\n // Rerun eligibility if user has changed.\n if (_this.variant && models.authModel.buyer_id === _this.buyerId) {\n return _this.variant;\n }\n\n _this.buyerId = models.authModel.buyer_id;\n return eligibility(token, models).then(function (variant) {\n _this.variant = variant;\n return variant;\n });\n });\n },\n\n isNmj: function isNmj(token) {\n return this.getVariant(token).then(function (variant) {\n if (variant && (variant === 'one_page' || variant === 'design_2' || variant === 'design_3')) {\n return true;\n } else {\n return false;\n }\n });\n },\n\n nmjShowGreyHeader: function nmjShowGreyHeader(token) {\n return this.getVariant(token).then(function (variant) {\n if (variant && (variant === 'design_2' || variant === 'design_3')) {\n return true;\n } else {\n return false;\n }\n });\n },\n\n getMemberSegmentParameters: function getMemberSegmentParameters(token) {\n return getSegmentParameters(token);\n }\n});\n\nangular.value(\"$NewMemberEligibility\", $NewMemberEligibility);\n_squid.$Model;\n\n_squid.$promise;\n\n_squid.$populate;\n\n_squid.$feature;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_squid.$integration;\n\n_logger.$logger;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_shippingMethod.$ShippingRuleSummaryModel;\n\n_app.$PXPBlacklist;\n\n_marketingoffer.$MemberSegmentModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_auth.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/newMember/index.js\n// module id = ../node_modules/xo-models/src/newMember/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.getProcessorDeclineRetryEligibility = getProcessorDeclineRetryEligibility;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _checkout = require('../checkout');\n\nvar _auth = require('../auth');\n\nvar INELIGIBLE = _squid.$promise.resolve(false);\nvar lastBuyerId = null;\n\n// Check eligibility for processor decline retry feature\n// First checks if feature eligibility is met, then PXP eligibility is met\nfunction getProcessorDeclineRetryEligibility(token, checkoutSession) {\n if (!(0, _squid.$feature)('cardBackup')) {\n return INELIGIBLE;\n }\n\n // TODO: Refactor the eligibility rules to a set of common rules\n var models = {};\n\n return (0, _squid.$populate)(models, {\n auth: _auth.$AuthModel.instance(),\n checkoutCart: _checkout.$CheckoutCartModel.instance(token),\n checkoutPayee: _checkout.$CheckoutPayeeModel.instance(token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(token)\n }).then(function () {\n var checkoutCart = models.checkoutCart,\n checkoutPayee = models.checkoutPayee,\n checkoutAppData = models.checkoutAppData;\n\n var plans = checkoutSession.get('fundingOptions.plans', []);\n var moreThanOneCard = plans.filter(function (fi) {\n return fi.primaryFs.type === 'CARD';\n }).length < 2;\n\n // exclude rewards from the eligibility list\n var hasRewards = plans.filter(function (fi) {\n return fi && fi.rewards !== undefined;\n }).length > 0;\n\n // See https://engineering.paypalcorp.com/confluence/display/HellsKitchen/Hermes+Processor+Decline+Retry for eligibility reasons\n var isGambling = checkoutPayee.isGambling();\n var isBilling = checkoutCart.isBilling();\n // We're only sure that Sale transactions will go onto the new payments stack, for now\n var isNotSale = checkoutCart.get('payment_action') !== 'sale';\n var isThirdParty = _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(token);\n // Exclude all WPS products\n var isWpsOrInvoice = checkoutAppData.get('flags.is_wps_flow') || checkoutAppData.get('flags.is_invoice_flow');\n // We will need to confirm functionality for this before we can enable for this feature\n var isMultiSellerPurchase = checkoutCart.isMultiSellerPurchase();\n var hasInstallments = checkoutSession.installments && checkoutSession.installments.length > 1;\n var involvedCurrencies = plans.reduce(function (currencies, plan) {\n currencies[plan.primaryFs.amount.currency_code] = 1;\n return currencies;\n }, {});\n // Buyer promo email routing through checkoutserv, downstream does not support\n var hasBuyerPromoEmail = checkoutAppData.get('flags.display_buyer_email_promotional_opt_in');\n\n if (checkoutCart.get('purchase.amounts.total.currency_code')) {\n involvedCurrencies[checkoutCart.purchase.amounts.total.currency_code] = 1;\n }\n\n var ineligibilityCriteria = {\n isGambling: isGambling,\n moreThanOneCard: moreThanOneCard,\n hasRewards: hasRewards,\n isBilling: isBilling,\n isNotSale: isNotSale,\n isThirdParty: isThirdParty,\n isWpsOrInvoice: isWpsOrInvoice,\n isMultiSellerPurchase: isMultiSellerPurchase,\n hasInstallments: hasInstallments,\n currencyConversion: Object.keys(involvedCurrencies).length > 1,\n hasBuyerPromoEmail: hasBuyerPromoEmail\n };\n var ineligibleReasons = Object.keys(ineligibilityCriteria).filter(function (key) {\n return ineligibilityCriteria[key];\n });\n var eligible = ineligibleReasons.length === 0;\n\n // Logging for FPTI\n _logger.$logger.info('checkout_fpti', {\n from: 'processor_decline_retry',\n // This logs whether user is eligible by Hermes criteria\n to: 'processor_decline_retry_' + (eligible ? 'eligible' : 'ineligible')\n });\n\n if (!eligible) {\n // This logs the overall result of the eligibility check\n _logger.$logger.info('processor_decline_retry_ineligible', {\n reasons: ineligibleReasons.join()\n });\n }\n\n return eligible;\n }).then(function (featureEligible) {\n // BuyerId is needed to make sure pxp is reloaded if a new user logs in.\n // Refactor: Make this a common pxp model that is invalidated on logout\n var buyerId = models.auth.buyerId;\n\n var sameBuyer = buyerId === lastBuyerId;\n\n lastBuyerId = buyerId;\n\n if (!featureEligible) {\n return false;\n }\n\n // Only run the PXP if the feature is eligible, as requested from analytics\n return (0, _squid.$pxp)('xo_hermes_processor_decline_retry', {}, 'xo_hermes_processor_decline_retry_treatment', sameBuyer ? false : true, true).then(function (pxpRes) {\n if (!pxpRes) {\n _logger.$logger.info('processor_decline_retry_ineligible', {\n pxpIneligible: true\n });\n }\n\n return !!pxpRes;\n });\n }).then(function (eligibleWithPxp) {\n if (eligibleWithPxp) {\n _logger.$logger.info('processor_decline_retry_eligible');\n }\n return eligibleWithPxp;\n });\n}\n\n_squid.$feature;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_logger.$logger;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_auth.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/processorDecline/index.js\n// module id = ../node_modules/xo-models/src/processorDecline/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$MerchantPreferenceModel = undefined;\n\nvar _squid = require('squid');\n\nvar $MerchantPreferenceModel = exports.$MerchantPreferenceModel = _squid.$Model.extend('$MerchantPreferenceModel', {\n init: function init() {\n this._super.init.apply(this);\n\n this.setProperties({\n rm: _squid.$util.param('rm'), // Return Method\n return_url: _squid.$util.param('return'),\n auto_return: {\n enabled: false\n },\n pdt: {\n enabled: false\n }\n });\n },\n\n\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: '/api/profilemanagement/:id/getMerchantPreferences'\n }),\n\n autoReturn: function autoReturn() {\n return this.auto_return.enabled;\n },\n pdtEnabled: function pdtEnabled() {\n return this.pdt && this.pdt.enabled;\n },\n returnUrl: function returnUrl() {\n return this.return_url || this.auto_return.url;\n },\n\n\n /**\n * 0 – redirect using GET method ( default behavior )\n * 1 – redirect using the GET method, but no payment variables are included\n * 2 – redirect using the POST method, and include all payment variables\n */\n returnMethod: function returnMethod() {\n if (this.rm === '2') {\n return this.pdtEnabled() ? 'GET' : 'POST';\n }\n\n return 'GET';\n },\n returnMethodSupported: function returnMethodSupported() {\n return this.returnMethod() === 'GET';\n },\n\n\n /**\n * Determines if payment details need to be sent back to the merchant.\n * @returns {boolean}\n */\n postPaymentData: function postPaymentData() {\n return this.rm === '2' && !this.pdtEnabled() && this.returnUrl();\n },\n\n\n // charset of merchant having in profile\n charSet: function charSet() {\n return this.charset;\n }\n});\n\nangular.value(\"$MerchantPreferenceModel\", $MerchantPreferenceModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$config;\n\n_squid.$util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/profilemanagement/index.js\n// module id = ../node_modules/xo-models/src/profilemanagement/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ShippingRuleSummaryModel = exports.$ShippingMethodModel = undefined;\n\nvar _squid = require('squid');\n\nvar $ShippingMethodModel = exports.$ShippingMethodModel = _squid.$Model.extend('$ShippingMethodModel', {\n api: new _squid.$Api({\n uri: '/api/shippingtax/charges'\n }),\n\n getShippingMethodId: function getShippingMethodId(shippingMethodType) {\n var shippingMethodsMap = {\n DEFAULT: '0',\n AIR_SERVICE: '1',\n ECONOMY: '2',\n EXPEDITED_AIR_SERVICE: '3',\n EXPEDITED_FLAT_RATE_SHIPPING: '4',\n EXPRESS: '5',\n EXPRESS_DOMESTIC: '6',\n FREE_SHIPPING: '7',\n GROUND: '8',\n GLOBAL_PRIORITY: '9',\n INTERNATIONAL_ECONOMY: '10',\n INTERNATIONAL_EXPEDITED: '11',\n INTERNATIONAL_EXPRESS: '12',\n INTERNATIONAL_EXPRESS_AIR: '13',\n INTERNATIONAL_PRIORITY_AIR: '14',\n NEXT_DAY: '15',\n NEXT_DAY_AIR: '16',\n NEXT_DAY_AIR_ECONOMY: '17',\n ONE_DAY_SHIPPING: '18',\n OVERNIGHT: '19',\n OVERNIGHT_FLAT_RATE_SHIPPING: '20',\n PICKUP: '21',\n PRIORITY: '22',\n RUSH_DELIVERY: '23',\n STANDARD_DOMESTIC: '24',\n STANDARD_EXPEDITED: '25',\n STANDARD_FLAT_RATE_SHIPPING: '26',\n STANDARD_INTERNATIONAL: '27',\n STANDARD_SHIPPING: '28',\n STORE_PICKUP: '29',\n TWO_DAY_SHIPPING: '30',\n WORLDWIDE_SHIPPING: '31',\n TWO_DAY_AIR: '32'\n };\n\n return shippingMethodsMap[shippingMethodType];\n },\n\n isStorePickUp: function isStorePickUp(shipping_method_type) {\n return shipping_method_type === 'STORE_PICKUP' || shipping_method_type === 'PICKUP';\n }\n});\n\nvar $ShippingRuleSummaryModel = exports.$ShippingRuleSummaryModel = _squid.$Model.extend('$ShippingRuleSummaryModel', {\n api: new _squid.$Api({\n uri: '/api/shippingtax/:id/rulesSummary'\n })\n});\n\nangular.value(\"$ShippingMethodModel\", $ShippingMethodModel);\nangular.value(\"$ShippingRuleSummaryModel\", $ShippingRuleSummaryModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/shippingMethod/index.js\n// module id = ../node_modules/xo-models/src/shippingMethod/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$SubscriptionModel = exports.$CreateBAModel = undefined;\n\nvar _squid = require('squid');\n\nvar $CreateBAModel = exports.$CreateBAModel = _squid.$Model.extend('$CreateBAModel', {\n api: new _squid.$Api({\n uri: '/api/billagmt',\n postAttempts: 3\n })\n});\n\nvar $SubscriptionModel = exports.$SubscriptionModel = _squid.$Model.extend('$SubscriptionModel', {\n api: new _squid.$Api({\n uri: '/api/billagmt/:id',\n postAttempts: 3,\n cache: true\n })\n});\n\nangular.value(\"$CreateBAModel\", $CreateBAModel);\nangular.value(\"$SubscriptionModel\", $SubscriptionModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/subscription/index.js\n// module id = ../node_modules/xo-models/src/subscription/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$AuthConsentModel = exports.$UserPhotoModel = exports.$EConsentModel = exports.$WaxUserModel = exports.$PatchPhoneModel = exports.$AddKYCModel = exports.$ValidatePhoneModel = exports.$UserInfoModel = exports.$CheckoutInputDataModel = exports.$CheckoutClientDataModel = undefined;\n\nvar _squid = require('squid');\n\nvar $CheckoutClientDataModel = exports.$CheckoutClientDataModel = _squid.$Model.extend('$CheckoutClientDataModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/clientData'\n }),\n\n merchantIdentityData: function merchantIdentityData() {\n return {\n email: this.email,\n brand_name: this.display_name,\n logo_uri: this.logo_uri,\n identity_uri: this.identity_uri\n };\n },\n\n validateClient: function validateClient() {\n if (this.partner_id && this.identity_uri) {\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: 'invalid_client'\n };\n }\n },\n validateRedirectUri: function validateRedirectUri(redirectUrl) {\n if (this.identity_uri && this.identity_uri.indexOf(redirectUrl) > -1) {\n return {\n success: true\n };\n } else {\n return {\n success: false,\n error: 'invalid_redirect_url'\n };\n }\n }\n});\n\nvar ACTION = {\n login: 'login',\n resolve: 'resolve',\n addCard: 'addCard',\n addBank: 'addBank',\n changeCurrencyConv: 'changeCurrencyConv',\n signup: 'signup',\n mandate: 'mandate',\n addCredit: 'addCredit',\n ulReturn: 'ulReturn',\n creditReturn: 'creditReturn',\n guestCurrencyConversion: 'guestCurrencyConversion',\n guestAuthentication: 'guestAuthentication',\n compliance: 'compliance'\n};\n\nvar $CheckoutInputDataModel = exports.$CheckoutInputDataModel = _squid.$Model.extend('$CheckoutInputDataModel', {\n init: function init() {\n this._super.init.apply(this);\n this.setProperties({\n client_id: _squid.$util.param('client_id'),\n action: _squid.$util.param('action'),\n redirect_uri: _squid.$util.param('redirect_uri'),\n scope: _squid.$util.param('scope'),\n state: _squid.$util.param('state'),\n flow: _squid.$util.param('flow'),\n payer_id: _squid.$util.param('payer_id'),\n mandate_reference_number: _squid.$util.param('mandate_reference_number'),\n funding_option_id: _squid.$util.param('funding_option_id'),\n locale: _squid.$util.param('locale'),\n logout: _squid.$util.param('logout'),\n refresh_parent: _squid.$util.param('refresh_parent'),\n escape_hatch: _squid.$util.param('escape_hatch'),\n failedBecause: _squid.$util.param('failedBecause'),\n redirectReferrer: _squid.$util.param('redirectReferrer'),\n id_token: _squid.$util.param('prox_id'),\n nonce: _squid.$util.param('nonce'),\n hide_rm: _squid.$util.param('hideRM'),\n payloadEnc: _squid.$util.param('payloadEnc'),\n xcancel: _squid.$util.param('x-cancel'),\n xsuccess: _squid.$util.param('x-success')\n });\n },\n\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: '/api/user/:id/payerId'\n }),\n\n isEbayTxn: function isEbayTxn() {\n return Boolean(this.client_id);\n },\n\n validAction: function validAction() {\n var actions = {\n login: 'login',\n resolve: 'resolve',\n addCard: 'addCard',\n addBank: 'addBank',\n changeCurrencyConv: 'changeCurrencyConv',\n signup: 'signup',\n mandate: 'mandate',\n addCredit: 'addCredit',\n ulReturn: 'ulReturn',\n creditReturn: 'creditReturn',\n guestCurrencyConversion: 'guestCurrencyConversion',\n guestAuthentication: 'guestAuthentication',\n compliance: 'compliance'\n };\n\n return actions.hasOwnProperty(this.action);\n },\n\n showRYP: function showRYP() {\n return !this.isEbayTxn();\n },\n\n requiresOAuth: function requiresOAuth() {\n return this.action === ACTION.login || this.action === ACTION.signup;\n },\n\n requiresRedirectUri: function requiresRedirectUri() {\n return this.action === ACTION.mandate || !this.requiresOAuth();\n },\n\n validRedirectUri: function validRedirectUri() {\n if (this.requiresRedirectUri()) {\n return Boolean(this.redirect_uri);\n }\n return true;\n },\n\n validate: function validate() {\n var error;\n var success = true;\n\n if (this.isEbayTxn()) {\n if (!this.validAction()) {\n success = false;\n error = 'invalid_action';\n } else if (!this.validRedirectUri()) {\n success = false;\n error = 'invalid_redirect_uri';\n }\n }\n\n return {\n success: success,\n error: error\n };\n },\n\n errorUrl: function errorUrl(err, errorDesc) {\n var url = this.redirect_uri;\n\n url += url && url.indexOf('?') < 0 ? '?' : '&';\n url += 'state=' + encodeURIComponent(this.state);\n\n if (err) {\n url += '&error=' + err;\n }\n if (errorDesc) {\n url += '&error_description=' + errorDesc;\n }\n\n return url;\n },\n\n successUrl: function successUrl(code) {\n var url = this.redirect_uri;\n\n url += url && url.indexOf('?') < 0 ? '?' : '&';\n url += 'state=' + encodeURIComponent(this.state);\n\n url += '&code=' + code;\n\n return url;\n },\n\n rmEnabled: function rmEnabled(featureEnabled) {\n return featureEnabled && this.action === ACTION.login;\n },\n\n hideRM: function hideRM() {\n return angular.isDefined(this.hide_rm) ? this.hide_rm.toLowerCase() === 'true' : false;\n }\n});\n\nvar $UserInfoModel = exports.$UserInfoModel = _squid.$Model.extend('$UserInfoModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/session'\n })\n});\n\nvar $ValidatePhoneModel = exports.$ValidatePhoneModel = _squid.$Model.extend('$ValidatePhoneModel', {\n api: new _squid.$Api({\n uri: '/api/user/:token/session/validatePhone',\n cache: false\n })\n});\n\nvar $AddKYCModel = exports.$AddKYCModel = _squid.$Model.extend('$AddKYCModel', {\n api: new _squid.$Api({\n uri: '/api/user/:token/session/addKYC'\n })\n});\n\nvar $PatchPhoneModel = exports.$PatchPhoneModel = _squid.$Model.extend('$PatchPhoneModel', {\n api: new _squid.$Api({\n uri: '/api/checkout/:token/session/patch',\n cache: false\n })\n});\n\nvar $WaxUserModel = exports.$WaxUserModel = _squid.$Model.extend('$WaxUserModel', {\n api: new _squid.$Api({\n uri: '/api/user/:id/waxUser'\n })\n});\n\nvar $EConsentModel = exports.$EConsentModel = _squid.$Model.extend('$EConsentModel', {\n api: new _squid.$Api({\n uri: '/api/user/eConsent'\n }),\n\n invalidateOnLogout: true // invalidate this model when auth.logout() gets called\n});\n\nvar $UserPhotoModel = exports.$UserPhotoModel = _squid.$Model.extend('$UserPhotoModel', {\n api: new _squid.$Api({\n baseURI: _squid.$config.urls.baseUrl,\n uri: 'api/user/photo'\n }),\n\n invalidateOnLogout: true // invalidate this model when auth.logout() gets called\n});\n\nvar $AuthConsentModel = exports.$AuthConsentModel = _squid.$Model.extend('$AuthConsentModel', {\n api: new _squid.$Api({\n uri: '/api/user/authConsent'\n })\n});\n\nangular.value(\"$CheckoutClientDataModel\", $CheckoutClientDataModel);\nangular.value(\"$CheckoutInputDataModel\", $CheckoutInputDataModel);\nangular.value(\"$UserInfoModel\", $UserInfoModel);\nangular.value(\"$ValidatePhoneModel\", $ValidatePhoneModel);\nangular.value(\"$AddKYCModel\", $AddKYCModel);\nangular.value(\"$PatchPhoneModel\", $PatchPhoneModel);\nangular.value(\"$WaxUserModel\", $WaxUserModel);\nangular.value(\"$EConsentModel\", $EConsentModel);\nangular.value(\"$UserPhotoModel\", $UserPhotoModel);\nangular.value(\"$AuthConsentModel\", $AuthConsentModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_squid.$config;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/user/index.js\n// module id = ../node_modules/xo-models/src/user/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$WalletModel = undefined;\n\nvar _squid = require('squid');\n\nvar _instrument = require('./instrument');\n\n// ID https://engineering.paypalcorp.com/confluence/display/PayPalMediaService/Image+Request+Metadata+Data\nvar imageSizeId = '0';\n\nvar normalize = function normalize(instId) {\n return instId && instId.replace(/-/g, '');\n};\n\nvar imageTypes = ['png', 'jpg', 'gif', 'bmp'];\nvar imageType = function imageType(mimeType) {\n return _squid.$util.find(imageTypes, function (t) {\n return mimeType.indexOf(t) !== -1;\n }) || 'png';\n};\n\n// Network types to check for linked cards\nvar NETWORK_TYPES = {\n CHASE: 'CHASENET'\n};\n\nfunction capFirst(string) {\n return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();\n}\n\nfunction getLinkedCapability(cardData) {\n return cardData.fs.capabilities.find(function (cap) {\n return cap.name === 'TOKEN';\n });\n}\n\nvar $WalletModel = exports.$WalletModel = _squid.$Model.extend('$WalletModel', {\n invalidateOnLogout: true,\n api: new _squid.$Api({\n uri: '/api/fi/wallet/wallet'\n }),\n\n getId: function getId(fs) {\n return normalize(fs.instrument_id || fs.id);\n },\n\n getCardMask: function getCardMask(fs) {\n var rep = this.getWalletRepresentation(fs);\n\n if (!rep) {\n return { mask: true };\n }\n\n var selector = rep.type === 'card' ? 'product_class' : 'type';\n var renderedType = void 0;\n\n if (rep.fs[selector] === 'UNKNOWN' || !rep.fs[selector]) {\n renderedType = '';\n } else {\n renderedType = capFirst(rep.fs[selector]) + ' ';\n }\n\n return {\n before: renderedType,\n mask: true,\n after: rep.fs.last_nchars || rep.fs.last_nchars_card_number || ''\n };\n },\n\n /**\n * Returns the wallet API data for a FI given a funding source from the checkoutSession model\n * @returns {Instrument|BankInstrument|null}\n */\n getWalletRepresentation: function getWalletRepresentation(fs) {\n // Balance does not have an ID, so we search for this first\n if (fs.type === 'BALANCE') {\n var currency = fs.amount && fs.amount.currency_code;\n\n var bal = _squid.$util.find(this.balance_accounts, function (b) {\n return b.currency_code === currency;\n });\n\n return bal ? new _instrument.Instrument({\n type: 'balance',\n fs: bal\n }) : null;\n }\n\n // Otherwise, search other types that have IDs\n var id = this.getId(fs);\n\n return this.getById(id);\n },\n\n\n /**\n * Returns the wallet API data for a FI based on the id provided\n * @returns {Instrument|BankInstrument|null} - the model of the FI, if found\n */\n getById: function getById(id) {\n if (!id) {\n return null;\n }\n\n return this.getCardById(id) || this.getBankById(id) || null;\n },\n\n\n /**\n * Return the wallet API data for a FI of a card id provided\n * @returns {Instrument}\n */\n getCardById: function getCardById(id) {\n var card = _squid.$util.find(this.card_accounts, function (c) {\n return normalize(c.id) === id;\n });\n\n return card && new _instrument.Instrument({\n type: 'card',\n fs: card\n });\n },\n\n\n /**\n * Return the wallet API data for a FI of a bank id provided\n * @returns {BankInstrument}\n */\n getBankById: function getBankById(id) {\n var bank = _squid.$util.find(this.bank_accounts, function (b) {\n return normalize(b.id) === id;\n });\n\n return bank && new _instrument.BankInstrument({\n type: 'bank',\n fs: bank\n });\n },\n\n\n getCustomName: function getCustomName(fs) {\n var rep = this.getWalletRepresentation(fs);\n\n if (!rep) {\n return false;\n }\n\n return rep.type === 'card' && rep.fs.issuer && rep.fs.issuer.issuer_product_description;\n },\n\n getCardArt: function getCardArt(fs) {\n try {\n var cardId = this.getId(fs);\n var card = this.getCardById(cardId);\n var primary_content = card.fs.card_art_details.card_art.primary_content;\n\n var base = primary_content.base_cdn_link_path || primary_content.base_cdnlink_path;\n\n var path = base + imageSizeId + '.' + imageType(primary_content.original_mime_type);\n\n return path;\n } catch (e) {\n return null;\n }\n },\n\n /**\n * retrieve list of total balances (each currency is a separate balance account)\n * Notes:\n * 1. Skip balances with '0' amount\n * 2. Since wallet returns amount in \"cents\" - convert it to \"dollars\".\n * For us it's safe to divide by 100 as PayPal doesn't support currencies with more than 2 decimal points.\n * For those currencies with no decimal points - wallet adds two zeros, e.g\n * in case of JPY - 1 JPY will be sent as 100 to the response\n */\n getAmountsOfBalances: function getAmountsOfBalances() {\n var balances = [];\n\n this.get('balance_accounts', []).forEach(function (balanceAccount) {\n var _balanceAccount$sub_b = balanceAccount.sub_balances.find(function (subBalance) {\n return subBalance.type === 'TOTAL_BALANCE';\n }),\n amount = _balanceAccount$sub_b.amount;\n\n if (amount.value !== '0') {\n balances.push({\n value: Number(amount.value) / 100,\n currency: amount.currency\n });\n }\n });\n\n return balances;\n },\n\n isLinkedCard: function isLinkedCard(fi) {\n var id = this.getId(fi);\n var card = this.getCardById(id);\n var hasLinkedCapability = card && !!getLinkedCapability(card);\n\n return hasLinkedCapability;\n },\n\n\n /**\n * Check if the given CI passed is a ChasePay linked card, which means it was added by linking to their Chase account\n */\n isChaseLinkedCard: function isChaseLinkedCard(fi) {\n var id = this.getId(fi);\n var card = this.getCardById(id);\n var linkedCapability = card && getLinkedCapability(card);\n\n if (!linkedCapability) {\n return false;\n }\n\n return linkedCapability.network_contingencies.some(function (networkInfo) {\n return networkInfo.network === NETWORK_TYPES.CHASE;\n });\n }\n});\n\nangular.value(\"$WalletModel\", $WalletModel);\n_squid.$Model;\n\n_squid.$Api;\n\n_squid.$util;\n\n_instrument.Instrument;\n\n_instrument.BankInstrument;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/wallet/index.js\n// module id = ../node_modules/xo-models/src/wallet/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.BankInstrument = exports.Instrument = undefined;\n\nvar _squid = require('squid');\n\n/*\n * Base model for wallet instrument data, to be used as a fallback if more specific\n * model does not exist\n */\nvar Instrument = exports.Instrument = _squid.$Class.extend('Instrument', {\n getName: _squid.$util.noop,\n getLastChars: _squid.$util.noop\n});\n\nvar BankInstrument = exports.BankInstrument = Instrument.extend({\n getName: function getName() {\n return this.get('fs.issuer.name');\n },\n getLastChars: function getLastChars() {\n return this.get('fs.last_nchars');\n }\n});\n\n_squid.$util;\n\n_squid.$Class;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-models/src/wallet/instrument.js\n// module id = ../node_modules/xo-models/src/wallet/instrument.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('cartWrapper', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n showAmt: '=?',\n showArrow: '=?',\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n _squid.$util.assert($scope.token, 'Expected token');\n\n (0, _squid.$populate)($scope, {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n });\n }]\n };\n});\n\n_squid.$populate;\n\n_squid.$util;\n\n_index.$CheckoutCartModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/cartWrapper/directive.js\n// module id = ../node_modules/xo-page-components/src/cart/cartWrapper/directive.js\n// module chunks = main-code-split","module.exports = \"\\n \\n \\n \\n \\n \\n \\n \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/cartWrapper/template.html\n// module id = ../node_modules/xo-page-components/src/cart/cartWrapper/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _index = require('xo-models/src/checkout/index');\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nrequire('./cartWrapper/directive');\n\nrequire('./itemDetails/directive');\n\nvar _showCartDecision = require('./lib/showCartDecision');\n\nrequire('./lib/ui');\n\nrequire('./subscription/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoCart', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n\n scope: {\n showCartTotal: '=?',\n renderCartContainer: '=?',\n token: '=?'\n },\n\n controller: ['$scope', function ($scope) {\n\n _squid.$util.assert($scope.token, 'Expected token');\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance($scope.token),\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n payee: _index.$CheckoutPayeeModel.instance($scope.token)\n }).then(function loadCartData() {\n\n var emptyCart = $scope.checkoutCart.get('purchase.items.length', 0) <= 0;\n var cartDesc = $scope.checkoutCart.get('purchase.description');\n\n $scope.note = $scope.checkoutCart.get('note');\n\n // resolve string in descriptions array since the only element may be `null`\n // TODO: fix backend to return a string, to avoid this conditional\n if (cartDesc && angular.isString(cartDesc[0])) {\n cartDesc = cartDesc[0];\n } else {\n cartDesc = '';\n }\n\n $scope.desc = cartDesc;\n $scope.hasItems = !$scope.renderCartContainer && !emptyCart;\n var showCartDetails = !$scope.checkoutAppData.flags.hide_cart_details;\n var notMultiSellerPurchase = !$scope.checkoutCart.isMultiSellerPurchase();\n // Always Render minicart for wps subscription .\n var wpsSubscription = $scope.checkoutAppData.is_wps_subscription_flow();\n var isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n\n $scope.showArrow = (wpsSubscription || showCartDetails && (cartDesc || $scope.hasItems || $scope.note) && notMultiSellerPurchase) && !isSubscriptionsV1;\n\n // add details to render to the checkoutCart items\n $scope.checkoutCart.get('purchase.items', []).forEach(function addDetails(item) {\n item.details = {};\n\n if (item.quantity > 1) {\n item.details.price = item.price.amount;\n item.details.quantity = (0, _squid.formatQuantity)(item.quantity);\n }\n\n if (item.description) {\n if (!item.name) {\n item.name = item.description;\n } else {\n item.details.description = item.description;\n }\n }\n\n // move options to detail section\n if (item.item_option_selections) {\n item.details.hasSelections = true;\n item.details.item_option_selections = item.item_option_selections;\n }\n\n if (item.sku) {\n item.details.sku = item.sku;\n }\n\n item.hasDetails = Object.keys(item.details).length > 0;\n item.details.hasMore = item.hasDetails || item.details.hasSelections;\n });\n\n // Mapping of field name as recieved by API to corresponding property key\n $scope.amountHeaders = {\n 'total': 'header.total',\n 'subtotal': 'header.itemTotal',\n 'tax': 'header.tax',\n 'shipping': 'header.shipping',\n 'insurance': 'header.insurance',\n 'handling_fee': 'header.handling',\n 'shipping_discount': 'header.shippingDiscount',\n 'description': 'header.description',\n 'discount': 'header.discount'\n };\n\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var userAction = $scope.userAction = $scope.checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && emptyCart;\n\n var purchase = $scope.checkoutCart.purchase;\n var total = purchase && purchase.amounts && purchase.amounts.total;\n\n $scope.isCartTextTotalOrSubTotal = userAction === 'commit' || $scope.showCartTotal === true ? 'header.total' : 'header.subTotal';\n\n return (0, _showCartDecision.showCartDecision)($scope.checkoutAppData.is_wps_subscription_flow() || $scope.checkoutCart.isSubscriptionsV1(), total, $scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (result) {\n $scope.showAmt = result.showAmt;\n $scope.showCartSubTotal = result.showCartSubTotal;\n $scope.showAmountInCartIcon = result.showAmountInCartIcon;\n });\n }).then(function handleCartOpenClose() {\n // the cart is only automatically open under the following criteria:\n // 1. the cart has a 'note to buyer' ($scope.note is defined)\n // 2. the cart was not previously automatically opened before\n // 3. the state has transitioned to checkout.review or checkout.guest\n function decideShowCart(currentState) {\n var falsePositive = /^checkout\\.(selectFi)$/.test(currentState) && /^checkout\\.(review|guest)$/.test($scope.openedAlready);\n var notOpened = !$scope.openedAlready && /^checkout\\.(review|guest)$/.test(currentState);\n var canShow = notOpened || falsePositive;\n\n if ($scope.note && canShow) {\n $scope.openedAlready = currentState; // may have been undefined before\n return true;\n }\n\n return false;\n }\n\n $scope.showCartItem = function (breakdown) {\n return breakdown.field_name !== 'total' && Number(breakdown.amount) !== 0;\n };\n\n $scope.showCart = decideShowCart(_uiRouter.$state.current.name);\n\n // TODO: Must we really couple this so tightly with the state transition names?\n var openCartListener = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState) {\n $scope.showCart = decideShowCart(toState.name);\n });\n\n $scope.$on('$destroy', openCartListener); // see http://stackoverflow.com/a/27016855 on why $destroy\n\n $scope.toggleCart = function ($event) {\n $scope.showCart = !$scope.showCart;\n $event.preventDefault();\n };\n\n $scope.closeCart = function ($event) {\n $scope.showCart = false;\n // for accessible autofocus on cart toggle link button\n $scope.$broadcast('cart-closed');\n if ($event) {\n $event.preventDefault();\n }\n };\n\n $scope.$on('clickBody', function ($event, target) {\n if ($scope.showCart && $(target).parents('.cartContainer').length === 0) {\n $scope.closeCart($event);\n $scope.$apply();\n }\n });\n\n // this listener / broadcast allows accessibility components to scan and focus inside the cart\n // when the cart is displayed\n $scope.$watch('showCart', function (showCart) {\n if (showCart) {\n $scope.$broadcast('cart-updated');\n }\n });\n }).then(function handleEllipsisIssues() {\n // NOTE: the scattered broadcasts of \"cart-updated\" events are mostly\n // to allow the accessibility directives modal-box and focus-when to\n // know when to recalculate keyboard behavior / focus\n $scope.toolongTracker = {};\n\n // this function is invoked by the onEllipsis directive that tracks\n // if the item name won't fit within the restricted space.\n $scope.toolong = function (idx) {\n $scope.toolongTracker[idx] = true;\n $scope.$broadcast('cart-updated');\n };\n\n $scope.showMore = function (idx, type) {\n // there are 2 types of more, \"floating\" when the name is too long\n // and \"inline\" when the name can fit, but there are additional details.\n //\n // Show a more if the item\n // 1. has an expanded state\n // 2. is not already expanded\n // 3. if it is appropriate to show that type.\n var itemIsTooLong = $scope.toolongTracker[idx];\n var isAppropriateType = itemIsTooLong && type === 'floating' || !itemIsTooLong && type === 'inline';\n\n return $scope.hasExpandedState(idx) && !$scope.isExpanded(idx) && isAppropriateType;\n };\n\n $scope.expandedIndex = -1; // initially, none of the line items are expanded\n $scope.isExpanded = function isExpanded(idx) {\n return idx === $scope.expandedIndex;\n };\n $scope.hasExpandedState = function hasExpandedState(idx) {\n // A line item is exandable if\n // 1. the name cannot fit in one line ($scope.toolongTracker) and/or\n // 2. there are details (attached to purchase.items in the cart)\n // 3. there is item number (sku) in the item\n var item = $scope.checkoutCart.get('purchase.items', [])[idx] || {};\n var nameTooLong = $scope.toolongTracker[idx];\n\n return nameTooLong || item.hasDetails || item.sku;\n };\n $scope.expand = function expand(idx) {\n $scope.expandedIndex = idx;\n $scope.$broadcast('cart-updated');\n };\n $scope.collapse = function collapse() {\n $scope.expandedIndex = -1;\n $scope.$broadcast('cart-updated');\n };\n\n // Set default focus on cart first element \"more\" link\n $scope.focusElementCssSelector = 'a.more';\n\n // Change the focus element as user clicks on elements\n $scope.$watch('expandedIndex', function (expandedIndex) {\n if (expandedIndex === -1) {\n $scope.focusElementCssSelector = 'a.more';\n } else {\n // If any \"more\" link or item is clicked in cart, then\n // set focus to itemNameContainer\n $scope.focusElementCssSelector = '.itemNameContainer.expanded';\n }\n });\n\n $scope.$emit('dataLoaded');\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$populate;\n\n_squid.$util;\n\n_squid.formatQuantity;\n\n_uiRouter.$state;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_showCartDecision.showCartDecision;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/directive.js\n// module id = ../node_modules/xo-page-components/src/cart/directive.js\n// module chunks = main-code-split","\n\nrequire('xo-ui-components/src/accessibility/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('itemDetails', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n details: '=?',\n sku: '=?',\n currencyCode: '=?',\n onClickLess: '&?'\n },\n controller: function controller() {/* dumb component */}\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/itemDetails/directive.js\n// module id = ../node_modules/xo-page-components/src/cart/itemDetails/directive.js\n// module chunks = main-code-split","module.exports = \"\\n
      \\n
    • \\n \\n {{ content('header.itemNumber') }} {{ details.sku }}\\n \\n
    • \\n
    • {{ content('header.price') }}\\n \\n
    • \\n
    • {{ content('header.quantity') }} {{ details.quantity }}
    • \\n
    • \\n
      \\n \\n {{ selection.name }}:\\n {{ selection.select }}\\n \\n
      \\n\\n
      \\n {{ content('header.description') }} {{ details.description }}\\n
      \\n
    • \\n
    \\n{{ content('header.less') }}\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/itemDetails/template.html\n// module id = ../node_modules/xo-page-components/src/cart/itemDetails/template.html\n// module chunks = main-code-split","\n\n/**\n * Takes a string with HTML entities within and renders it as the unicode\n * characters they represent. This is done by leveraging the browser to\n * perform this transformation internally. InnerText is chosen as the output\n * so as to kill any HTML itself that was supplied.\n *\n * @param {Element} element any HTML element supporting innerText and\n * innerHTML. Preferably one not connected to the DOM or visible in any way.\n * @param {String} input a String containing HTML entities that need to be\n * decoded and HTML stripped.\n * @return {String} the same string with HTML tags removed and entities\n * decoded.\n */\n\nexports.__esModule = true;\nexports.decodeEntities = decodeEntities;\nexports['default'] = decodeEntitiesAngularFilter;\nfunction decodeEntities(element, input) {\n // Escape opening tags on vulnerable tags\n input = input.replace(/<(\\/?)(html|script|body|meta|style|img|iframe|svg|link)/ig, '<$1$2');\n element.innerHTML = input;\n return element.textContent || element.innerText;\n}\n\nfunction decodeEntitiesAngularFilter() {\n // A constant key that can be used to find the element\n var ENTITY_ELEM = '__xpc_entitydecoder__';\n\n // Create the element if this is the first time this is called\n if (!window[ENTITY_ELEM]) {\n window[ENTITY_ELEM] = document.createElement('p');\n }\n\n // Retrieve the converter element rather than create one every\n // time. Angular may call this filter many times repeatedly and\n // we should make a small effort to optimize the process\n var converter = window[ENTITY_ELEM];\n\n /**\n * Takes a string with HTML entities within and renders it as the unicode\n * characters they represent. This is done by leveraging the browser to\n * perform this transformation internally. InnerText is chosen as the output\n * so as to kill any HTML itself that was supplied.\n *\n * @param {String} input a String containing HTML entities that need to be\n * decoded and HTML stripped.\n * @return {String} the same string with HTML tags removed and entities\n * decoded.\n */\n return decodeEntities.bind(null, converter);\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/lib/decode_entities.js\n// module id = ../node_modules/xo-page-components/src/cart/lib/decode_entities.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$pxpCartAmt', function () {\n return function (merchantCountry, merchantId, noLineItemDetails, isPurchase) {\n if (merchantCountry !== 'AU' && noLineItemDetails && isPurchase) {\n var pageName = 'xo_hermes_no_line_item_details';\n var showAmtBlacklistTreatment = 'xo_hermes_no_line_items_show_amount_blacklist_test_group';\n var showAmtTreatment = 'xo_hermes_no_line_items_show_amount_test_group';\n\n return _angular.$q.all([(0, _squid.$pxp)(pageName, {\n 'ctx.merchantID': merchantId,\n uid: merchantId\n }, showAmtBlacklistTreatment, false, true), (0, _squid.$pxp)(pageName, {\n 'ctx.merchantID': merchantId,\n uid: merchantId\n }, showAmtTreatment, false, true)]).then(function (results) {\n var showAmtBlacklist = results[0];\n var showAmt = results[1];\n\n if (showAmtBlacklist && showAmtBlacklist.treatment_name === showAmtBlacklistTreatment) {\n return true;\n }\n\n if (showAmt && showAmt.treatment_name === showAmtTreatment) {\n return true;\n }\n\n return false; // default to hide\n });\n }\n\n return _angular.$q.when(!noLineItemDetails && isPurchase);\n };\n});\n\n_squid.$pxp;\n\n_angular.$q;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/lib/pxp.js\n// module id = ../node_modules/xo-page-components/src/cart/lib/pxp.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.showCartDecision = showCartDecision;\n\nvar _pxp = require('./pxp');\n\nfunction showCartDecision(isSubscriptionFlow, total, merchantCountry, merchantId, noLineItemDetails, isPurchase) {\n return (0, _pxp.$pxpCartAmt)(merchantCountry, merchantId, noLineItemDetails, isPurchase).then(function (showAmount) {\n // Show cart subtotal if there is a total amount\n // Do not show subtotal for wps subscription flow.\n // Show amount in cart icon only if showAmount is truthy and total amount is not zero\n return {\n showAmt: showAmount,\n showCartSubTotal: showAmount && total && !isSubscriptionFlow,\n showAmountInCartIcon: showAmount && +total.amount !== 0\n };\n });\n}\n\n_pxp.$pxpCartAmt;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/lib/showCartDecision.js\n// module id = ../node_modules/xo-page-components/src/cart/lib/showCartDecision.js\n// module chunks = main-code-split","\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _decode_entities = require('./decode_entities');\n\nvar _decode_entities2 = _interopRequireDefault(_decode_entities);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Register entity decoding filter in Angular\n_angular.$filterProvider.register('decodeEntities', _decode_entities2['default']);\n\n// if an element has an ellipsis text-overflow in effect (it must already have\n// the appropriate css styling) then invoke the function that is passed to the directive\nfunction getVisibleWidth(elem) {\n var elemRect = elem.getBoundingClientRect();\n\n // cross browser, returns decimals for ultra-precision\n return elemRect.right - elemRect.left;\n}\n\nfunction getNaturalWidth(elem) {\n var old = {\n overflow: elem.style.overflow,\n width: elem.style.width,\n display: elem.style.display\n };\n var result = void 0;\n\n elem.style.overflow = 'visible';\n elem.style.width = 'auto';\n elem.style.display = 'inline-block';\n result = getVisibleWidth(elem);\n elem.style.overflow = old.overflow;\n elem.style.width = old.width;\n elem.style.display = old.display;\n\n return result;\n}\n\n// pre-determine approach to reading styles\nvar getStyle = _angular.$window.getComputedStyle ? function (elem, style) {\n return _angular.$window.getComputedStyle(elem)[style];\n} // modern browsers\n: function (elem, style) {\n return elem.currentStyle[style];\n}; // IE\n\nfunction hasEllipsis(elem) {\n var overflowHidden = getStyle(elem, 'overflow') === 'hidden';\n var textOverflowEllipsis = getStyle(elem, 'text-overflow') === 'ellipsis';\n var whiteSpaceNowrap = getStyle(elem, 'white-space') === 'nowrap';\n\n if (overflowHidden && textOverflowEllipsis && whiteSpaceNowrap) {\n return getVisibleWidth(elem) < getNaturalWidth(elem);\n }\n\n return false;\n}\n\n(0, _squid.$registerDirective)('onEllipsis', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function invokeSubscriber() {\n (0, _angular.$parse)(attrs.onEllipsis)(scope);\n scope.$apply();\n }\n\n (0, _angular.$timeout)(function () {\n if (hasEllipsis(element[0])) {\n invokeSubscriber();\n }\n });\n }\n };\n});\n\n// Makes an element examine the outerHeight of its siblings\n// and the max-height of its parent, then sets a max-height for itself\n// so that everything fits within the limits of the parent. Note that it assumes\n// no other sibling also has dynamic-maxheight.\n(0, _squid.$registerDirective)('dynamicMaxheight', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function resizeContainer() {\n var $element = (0, _jquery2['default'])(element);\n var parentHeight = parseFloat(getStyle($element.parent()[0], 'max-height'));\n var siblings = $element.siblings().filter(function () {\n var pos = getStyle((0, _jquery2['default'])(this)[0], 'position');\n\n return pos !== 'fixed' && pos !== 'absolute';\n }).map(function getOuterHeights() {\n return (0, _jquery2['default'])(this).outerHeight();\n });\n var siblingsHeight = 0;\n var i = void 0;\n\n for (i = 0; i < siblings.length; i += 1) {\n siblingsHeight += siblings[i];\n }\n\n var spaceAvailable = parentHeight - siblingsHeight;\n\n if (!isNaN(spaceAvailable)) {\n $element.css('max-height', spaceAvailable + 'px');\n }\n }\n\n // if an expression is provided, it is used as an event to listen for and recalculate the height\n if (attrs.dynamicMaxheight) {\n scope.$on((0, _angular.$parse)(attrs.dynamicMaxheight)(scope), resizeContainer);\n }\n\n (0, _angular.$timeout)(resizeContainer);\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$timeout;\n\n_angular.$filterProvider;\n\n_angular.$window;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/lib/ui.js\n// module id = ../node_modules/xo-page-components/src/cart/lib/ui.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/subscription/index');\n\nvar _subscriptionTerms = require('../../subscription-terms');\n\nvar _subscriptionTerms2 = _interopRequireDefault(_subscriptionTerms);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles.less');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$subscription', {\n tag: 'subscription',\n template: _template2['default'],\n props: {\n baToken: {\n type: 'var',\n optional: false\n },\n merchantId: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n subscriptionData: _index.$SubscriptionModel.instance(this.baToken).retrieve({\n params: {\n merchant_id: this.merchantId\n }\n })['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n this.itemName = _subscriptionTerms2['default'].getItemName(this.models.subscriptionData);\n this.itemOptions = _subscriptionTerms2['default'].getItemOptions(this.models.subscriptionData);\n\n this.getFirstAmount = function () {\n return _subscriptionTerms2['default'].getFormattedFirstAmount(_this.models.subscriptionData);\n };\n\n this.getTermsText = function () {\n return _subscriptionTerms2['default'].getTermsText(_this.models.subscriptionData);\n };\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_index.$SubscriptionModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/subscription/directive.js\n// module id = ../node_modules/xo-page-components/src/cart/subscription/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n\\n

    {{content('wpsSubscription.message.subscriptionDetails')}}:

    \\n
    \\n\\n {{itemName}}\\n
    \\n
    {{option.name}}:\\n {{option.selection}}\\n
    \\n
    \\n
    \\n
    \\n\\n
    \\n

    {{content('wpsSubscription.message.terms')}}:\\n

    \\n
    \\n {{term}}\\n
    \\n
    \\n
    \\n

    {{content('wpsSubscription.message.firstAmount')}}

    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/subscription/template.html\n// module id = ../node_modules/xo-page-components/src/cart/subscription/template.html\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n\\n \\n \\n \\n\\n \\n\\n
    \\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('header.noteFromMerchant', {merchant: checkoutAppData.merchant.brand_name}) }}\\n {{ checkoutAppData.merchant.brand_name }}\\n

    \\n

    \\n {{ note | decodeEntities }}\\n {{ desc | decodeEntities }}\\n

    \\n
    \\n\\n \\n\\n\\n
    \\n \\n\\n
      \\n
    • \\n
    • \\n {{ content(amountHeaders[breakdown.field_name]) }}\\n \\n \\n \\n
    • \\n \\n
    \\n
    \\n\\n
    \\n {{ content(isCartTextTotalOrSubTotal) }}\\n \\n \\n \\n
    \\n\\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/cart/template.html\n// module id = ../node_modules/xo-page-components/src/cart/template.html\n// module chunks = main-code-split","\n\n/* Constants for FB messenger related components */\nmodule.exports = {\n OVERRIDE_FBPP_REPEAT_FLAG: 'override_fbpp_repeat',\n OVERRIDE_FBPP_MOBILE_FLAG: 'override_fbpp_mobile',\n FB_BA_SHOWN_FLAG: 'is_xo_wps_fb_messenger_plugin_match_withba_shown',\n MOBILE_CHANNEL: 'MOBILE',\n WEB_CHANNEL: 'WEB',\n FB_USER_API_MOBILE_URL: 'https://m.facebook.com/paypal/user_identifier',\n FB_USER_API_URL: 'https://www.facebook.com/paypal/user_identifier',\n FB_PROD_APP_ID: '1084613224964631',\n FB_PROD_PAGE_ID: {\n US: '55982004572',\n AU: '171522459698178',\n CA: '164660263560926',\n GB: '167465479930420',\n HK: '575224445931086',\n JP: '252040838174046',\n NZ: '171522459698178',\n PH: '1895483750701842',\n SG: '1405303076421245',\n IL: '369238992488',\n CZ: '199396843578121',\n DE: '109838022384872',\n AT: '109838022384872',\n CH: '109838022384872',\n FR: '124143236317',\n IT: '198366693576785',\n BR: '170288122998781',\n ES: '244240615638886',\n MX: '42433532610',\n ZA: '388473619362',\n NL: '105370782861413',\n DK: '133211860117553',\n SE: '121404111292725',\n RU: '275216545856555',\n PL: '244706038980513',\n NO: '304581546592510',\n GR: '704200349634422',\n IN: '347199669139259',\n AE: '402374783229274',\n BH: '402374783229274',\n DZ: '402374783229274',\n EG: '402374783229274',\n JO: '402374783229274',\n KW: '402374783229274',\n MA: '402374783229274',\n OM: '402374783229274',\n QA: '402374783229274',\n SA: '402374783229274',\n TN: '402374783229274',\n YE: '402374783229274',\n AR: '474276366001351',\n CL: '474276366001351',\n CO: '474276366001351',\n CR: '474276366001351',\n DO: '474276366001351',\n EC: '474276366001351',\n PE: '474276366001351',\n UY: '474276366001351',\n VE: '474276366001351'\n },\n FB_TEST_PAGE_ID: '676472402496128',\n PRECHECKED_COUNTRIES: ['US', 'AU', 'HK', 'JP', 'NZ', 'PH', 'SG', 'ZA'],\n PXP_MESSENGER_EXPT: 'xo_wps_fb_messenger_plugin',\n PXP_SHOW_MESSENGER_PLUGIN_TREATMENT: 'xo_wps_fb_messenger_plugin_1_treatment',\n PXP_MESSENGER_IN: 'xo_wps_fb_messenger_plugin_IN',\n PXP_MESSENGER_PLUGIN_TREATMENT_IN: 'xo_wps_fb_messenger_plugin_IN_treatment'\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/constants/fbMessenger.js\n// module id = ../node_modules/xo-page-components/src/constants/fbMessenger.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nrequire('xo-form-components/src/language-options/directive');\n\nvar _index2 = require('xo-models/src/auth/index');\n\nvar _index3 = require('xo-models/src/checkout/index');\n\nvar _index4 = require('xo-models/src/user/index');\n\nvar _index5 = require('xo-return-to-merchant/dist/index');\n\nrequire('xo-ui-components/src/escape-hatch/escapeHatch/directive');\n\nrequire('xo-ui-components/src/modal/directive');\n\nvar _footerMap = require('./footerMap');\n\nvar _footerMap2 = _interopRequireDefault(_footerMap);\n\nvar _opinionlab = require('./opinionlab');\n\nvar _opinionlab2 = _interopRequireDefault(_opinionlab);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoFooter', function () {\n return {\n template: _template2['default'],\n restrict: 'EA',\n scope: {\n token: '=?',\n escapeHatchIncontext: '=?',\n cancel: '@?',\n merchant: '@?',\n languageSwitch: '=?',\n showVenmoLegalLinks: '=?'\n },\n controller: ['$scope', function ($scope) {\n $scope.isIFrame = _squid.$util.isIFrame();\n if ($scope.escapeHatchIncontext) {\n $scope.showEscapeHatch = $scope.isIFrame;\n }\n $scope.locale = _squid.$locale;\n $scope.proxSignUpFlow = _index4.$CheckoutInputDataModel.instance($scope.token).isEbayTxn();\n $scope.year = new Date().getFullYear();\n\n $scope.isApac = function () {\n return _squid.$config.apacCountries && _squid.$config.apacCountries.indexOf($scope.locale.country) > -1;\n };\n\n // Determine if country belongs to a region to serve correct footer links\n var getRegion = function getRegion(country) {\n var regions = _squid.$config.regions;\n for (var region in regions) {\n if (regions[region].indexOf(country) > -1) {\n return region;\n }\n }\n return false;\n };\n\n function isDESecondButtonFlow() {\n return $scope.locale.country === 'DE' && $scope.checkoutAppData && $scope.checkoutAppData.is_second_button_txn;\n }\n\n $scope.footerLinks = function () {\n if ($scope.isApac()) {\n return _footerMap2['default'].APAC;\n }\n\n // It is a product requirement that for the DE CYCO page, Hermes only show the footer links\n // that were available in Aries\n if (isDESecondButtonFlow()) {\n return _footerMap2['default']['DESecondButton'];\n }\n\n return _footerMap2['default'][$scope.locale.country] || _footerMap2['default'][getRegion($scope.locale.country)] || _footerMap2['default'].DEFAULT;\n };\n\n $scope.showPolicyInfo = function () {\n return $scope.isApac() || $scope.locale.country === 'AU';\n };\n\n $scope.cancelRedirect = function ($event) {\n $event.preventDefault();\n\n var cancelUri = $scope.cancel;\n var redirectUri = _squid.$util.param('redirect_uri');\n\n if (window.xprops && window.xprops.onCancel && !cancelUri) {\n return window.xprops.onCancel({\n orderID: $scope.token\n });\n }\n\n // \"redirect_uri\" as a query param overrides the cancel url in the checkout session\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM') && redirectUri) {\n\n cancelUri = _squid.$util.buildURL(redirectUri, {\n opType: 'cancel',\n return_uri: $scope.cancel,\n token: $scope.token\n });\n }\n\n _index5.$ReturnToMerchant.goTo(cancelUri);\n };\n\n $scope.isIndiaLegalEntity = function () {\n // for PayPal India domestic launch legal entity should be 84\n // update footer with indian policy for this case\n return $scope.auth && $scope.auth.logged_in && $scope.auth.legalEntity === 84 || $scope.locale.country === 'IN';\n };\n\n if ($scope.token) {\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance($scope.token),\n checkoutPayee: _index3.$CheckoutPayeeModel.instance($scope.token),\n auth: _index2.$AuthModel.instance()\n }).then(function () {\n var payee = $scope.checkoutPayee;\n\n if (payee && payee.merchant && payee.merchant.id) {\n var hcl = _squid.$config.hideCancelLinkForMerchant;\n\n var shouldHide = hcl && hcl.indexOf(payee.merchant.id) !== -1;\n if (shouldHide) {\n $scope.hideCancel = true;\n }\n }\n $scope.cancel = $scope.checkoutAppData.urls.cancel_url;\n $scope.merchant = $scope.checkoutAppData.getMerchantDisplayName();\n });\n }\n\n var cancelShowModal = _angular.$rootScope.$on('showModal', function (event, config) {\n $scope.popupUrl = config && config.popupUrl;\n $scope.show = true;\n $scope.$digest(); // eslint-disable-line angular/ng_no_digest\n });\n\n $scope.$on('$destroy', cancelShowModal);\n\n $scope.showOL = function showOL(event) {\n event.preventDefault();\n\n var placeholder = 'main:ec:hermes';\n var page = _uiRouter.$state.current.get('trackingData.buzname.fullpage.pagename2', 'unknown').replace('%', placeholder);\n var data = {\n opVars: {\n rlogId: _angular.$window.meta.rlogId || '',\n page: page || window.location.hash,\n csci: 'Unknown',\n calc: _angular.$window.meta.correlationId,\n custId: 'Unknown',\n merchantId: 'Unknown',\n token: $scope.token || 'Unknown'\n },\n locale: {\n country: _squid.$locale.country,\n languageCode: _squid.$locale.lang + '_' + _squid.$locale.country\n }\n };\n\n (0, _opinionlab2['default'])(data);\n };\n\n $scope.showFeedback = function () {\n return !_index.$DeviceInfo.isDevice() && !isDESecondButtonFlow();\n };\n\n $scope.hideReturnCancelUrl = function () {\n if (window.xprops && window.xprops.onCancel) {\n return false;\n }\n\n if (!$scope.cancel) {\n return true;\n }\n\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.done') {\n return true;\n }\n\n return false;\n };\n\n $scope.showVenmoLinks = function () {\n // if on payWithSelection State, always show it, else we choose whatever 'checkout' directive says.\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.payWithSelection') {\n return true;\n }\n return !!$scope.showVenmoLegalLinks;\n };\n\n $scope.showPaypalLinks = function () {\n // will force Paypal Links if on payWithSelection state. Hide paypal links if we explicitly request venmo Links\n if (_uiRouter.$state.current && _uiRouter.$state.current.name === 'checkout.payWithSelection') {\n return true;\n }\n return !$scope.showVenmoLegalLinks;\n };\n }]\n };\n});\n\n_uiRouter.$state;\n\n_angular.$window;\n\n_angular.$rootScope;\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$integration;\n\n_index.$DeviceInfo;\n\n_index2.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutPayeeModel;\n\n_index4.$CheckoutInputDataModel;\n\n_index5.$ReturnToMerchant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/footer/directive.js\n// module id = ../node_modules/xo-page-components/src/footer/directive.js\n// module chunks = main-code-split","\n\ndefine({\n CA: [{\n id: 'policy',\n content: 'footer.policiesCA'\n }, {\n id: 'terms',\n content: 'footer.termsCA'\n }, {\n id: 'privacy',\n content: 'footer.privacyCA'\n }],\n\n BE: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n DE: [{\n id: 'imprint',\n content: 'footer.DEImprint'\n }, {\n id: 'legal',\n content: 'footer.DELegal'\n }, {\n id: 'privacy',\n content: 'footer.DEPrivacy'\n }, {\n id: 'paymentdesc',\n content: 'footer.DEKeyPaymentDesc'\n }],\n\n ES: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n FR: [{\n id: 'legal',\n content: 'footer.FRLegal'\n }, {\n id: 'useragreement',\n content: 'footer.FRUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.FRPrivacy'\n }],\n\n IT: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n NL: [{\n id: 'legal',\n content: 'footer.legal'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n IE: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n APAC: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n EMEA: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n EM: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'useragreement',\n content: 'footer.userAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n LATAM: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n AU: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n AT: [{\n id: 'imprint',\n content: 'footer.ATImprint'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n CH: [{\n id: 'imprint',\n content: 'footer.CHImprint'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n DK: [{\n id: 'useragreement',\n content: 'footer.DKUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n SE: [{\n id: 'useragreement',\n content: 'footer.SEUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n PL: [{\n id: 'useragreement',\n content: 'footer.PLUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n NO: [{\n id: 'useragreement',\n content: 'footer.NOUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n TR: [{\n id: 'useragreement',\n content: 'footer.TRUserAgreement'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n BR: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n MX: [{\n id: 'help',\n content: 'footer.help'\n }, {\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n RU: [{\n id: 'terms',\n content: 'footer.terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy'\n }],\n\n DESecondButton: [{\n id: 'imprint',\n content: 'footer.DEImprint'\n }, {\n id: 'privacy',\n content: 'footer.DEPrivacy'\n }],\n\n DEFAULT: [{\n id: 'policy',\n content: 'footer.policies',\n venmoContent: 'footer.venmo_policies'\n }, {\n id: 'terms',\n content: 'footer.terms',\n venmoContent: 'footer.venmo_terms'\n }, {\n id: 'privacy',\n content: 'footer.privacy',\n venmoContent: 'footer.venmo_privacy'\n }]\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/footer/footerMap.js\n// module id = ../node_modules/xo-page-components/src/footer/footerMap.js\n// module chunks = main-code-split","\n\ndefine([], function () {\n\n var _doc = document;\n var _w = window;\n var _tm = new Date().getTime();\n var _sH = screen.height;\n var _ht = escape(_w.location.href); // eslint-disable-line block-scoped-var,no-undef\n var _hr = escape(_doc.referrer); // eslint-disable-line block-scoped-var,no-undef\n var _sW = screen.width;\n\n function popUp(opinionlabURL) {\n _w.open(opinionlabURL, 'comments', 'width=535,height=192' + ',screenX=' + (_sW - 535) / 2 + ',screenY=' + (_sH - 192) / 2 + ',top=' + (_sH - 192) / 2 + ',left=' + (_sW - 535) / 2 + ',resizable=yes' + ',copyhistory=yes' + ',scrollbars=no');\n }\n\n function updateCustomVars(data) {\n\n var opVars = data.opVars;\n var locale = data.locale;\n\n _ht = 'https://' + locale.country + '.paypal.com/' + locale.languageCode + '/00/' + escape(opVars.page.replace(/\\s|\\//g, '_')) + '.page'; // eslint-disable-line block-scoped-var,no-undef\n\n var customVar = (opVars.rlogId || opVars.calc) + '|' + opVars.csci + '|' + opVars.page + '|' + locale.country + '|' + locale.languageCode + '|' + opVars.custId + '|' + opVars.merchantId + '|' + opVars.token + '|' + 'Unknown';\n return customVar;\n }\n\n function _fC(_u) {\n var _sp = '%3A\\\\/\\\\/';\n var _rp = '%3A//';\n var _aT = _sp + ',\\\\/,\\\\.,-,_,' + _rp + ',%2F,%2E,%2D,%5F';\n var _aA = _aT.split(',');\n\n for (var i = 0; i < 5; i++) {\n eval('_u=_u.replace(/' + _aA[i] + '/g,_aA[i+5])'); // eslint-disable-line no-eval\n }\n return _u;\n }\n\n return function (locale) {\n\n var custom_var = updateCustomVars(locale);\n\n var opinionlabURL = 'https://secure.opinionlab.com/ccc01/comment_card.asp?' + 'time1=' + _tm + '&time2=' + new Date().getTime() + '&prev=' + _fC(_hr) + '&referer=' + _fC(_ht) + '&height=' + _sH + '&width=' + _sW + '&custom_var=' + custom_var;\n popUp(opinionlabURL);\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/footer/opinionlab.js\n// module id = ../node_modules/xo-page-components/src/footer/opinionlab.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n

    \\n \\n \\n \\n

    \\n\\n
    \\n \\n
      \\n
    • \\n
    • \\n
    \\n

    \\n {{ content('footer.copyright', {year: year}) }}\\n \\n {{ content('memberReview.propHead') }}\\n

    \\n\\n \\n
    \\n\\n
    \\n

    \\n

    \\n

    {{ content('footer.moreCopyright', {year: year}) }}

    \\n
    \\n\\n
    \\n \\n

    {{ content('footer.openLinks') }}

    \\n

    {{popupUrl}}

    \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/footer/template.html\n// module id = ../node_modules/xo-page-components/src/footer/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$gdprCookieBannerComponent = undefined;\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _gdprCookieBanner = require('xo-models/src/gdprCookieBanner');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n/**\n * General Data Protection Regulation (GDPR) defines standards on how personal data is collected, processed, transferred and disposed.\n * Affected Countries: All \"GDPR\" countries: Please check config.json for country list.\n * Wiki: https://github.paypal.com/Checkout-R/xoonboardingnodeweb/wiki/GDPR:-Feature,-Integration-documentation\n */\nvar $gdprCookieBannerComponent = exports.$gdprCookieBannerComponent = _squid.$Component.extend('$gdprCookieBanner', {\n tag: 'xo-gdpr-cookie-banner',\n template: _template2['default'],\n actions: {\n // Fetch the GDPR banner, append to DOM if available\n refreshGDPR: function refreshGDPR() {\n var _this = this;\n\n var gdprModel = _gdprCookieBanner.$GDPRCookieBannerModel.instance();\n\n return gdprModel.getBanner().then(function () {\n var banner = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n // Run cleanup once we know the result, to prevent screen flash\n _this.actions.cleanup();\n\n var html = banner.html,\n css = banner.css,\n js = banner.js;\n\n\n if (!html || !css || !js) {\n return;\n }\n\n var div = angular.element(html);\n var style = angular.element(css);\n var script = angular.element(js);\n\n var el = _this.$element.find('#gdpr-cookie-banner-outerwrap');\n\n el.append(style);\n el.append(div);\n el.append(script);\n\n if (!(0, _angular.isFunction)(window.bindGdprEvents)) {\n _logger.$logger.error('gdpr_banner_bindGdprEvents_not_defined');\n return;\n }\n\n // TODO: Remove this class add when cookie banner script is fixed to add this class properly\n angular.element(document.body).addClass('gdprCookieBanner-acceptedAll');\n\n window.bindGdprEvents();\n });\n },\n\n // Clear out the banner container to remove the old elements\n cleanup: function cleanup() {\n var el = this.$element.find('#gdpr-cookie-banner-outerwrap');\n\n el.empty();\n }\n },\n\n lifecycle: {\n populate: function populate() {\n var _this2 = this;\n\n this.actions.refreshGDPR();\n\n // On \"localeChange\" we are re-fetching data.\n this.$on('localeChange', function () {\n _this2.actions.refreshGDPR();\n });\n }\n }\n});\n\nangular.value(\"$gdprCookieBannerComponent\", $gdprCookieBannerComponent);\n_squid.$Component;\n\n_angular.isFunction;\n\n_gdprCookieBanner.$GDPRCookieBannerModel;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/gdprCookieBanner/directive.js\n// module id = ../node_modules/xo-page-components/src/gdprCookieBanner/directive.js\n// module chunks = main-code-split","module.exports = \"\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/gdprCookieBanner/template.html\n// module id = ../node_modules/xo-page-components/src/gdprCookieBanner/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$SetHeaderText = undefined;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nrequire('xo-ui-components/src/escape-hatch/closeFrame/directive');\n\nrequire('xo-form-components/src/language-options/directive');\n\nrequire('../cart/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoHeader', function () {\n return {\n template: _template2['default'],\n scope: {\n showCartTotal: '=?',\n renderCartContainer: '=?',\n token: '=?',\n isUnbranded: '=?',\n unbrandedTitle: '=?',\n unbrandedSubTitle: '=?',\n languageSwitch: '=?',\n redirectiframe: '=?',\n redirectLightbox: '=?',\n isVenmoFlow: '=?'\n },\n controller: ['$scope', function ($scope) {\n var _ref = window.xprops || {},\n _ref$experience = _ref.experience,\n experience = _ref$experience === undefined ? { facebook: false } : _ref$experience;\n\n $scope.isFacebookBAIntegration = experience.facebook;\n $scope.isMessengerBAIntegration = _squid.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n $scope.isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n $scope.title = (0, _squid.$renderContent)($scope.unbrandedTitle);\n $scope.subTitle = (0, _squid.$renderContent)($scope.unbrandedSubTitle);\n $SetHeaderText.subscribe($scope, function (event, text) {\n $scope.unbrandedTitle = text;\n $scope.title = (0, _squid.$renderContent)($scope.unbrandedTitle);\n });\n }]\n };\n});\n\nvar headerText = '';\nvar $SetHeaderText = exports.$SetHeaderText = {\n setText: function setText(text) {\n headerText = text;\n _angular.$rootScope.$emit('update_header_text', text);\n },\n getText: function getText() {\n return headerText;\n },\n subscribe: function subscribe($scope, callback) {\n var handler = _angular.$rootScope.$on('update_header_text', callback);\n $scope.$on('$destroy', handler);\n }\n};\n\nangular.value(\"$SetHeaderText\", $SetHeaderText);\n_angular.$rootScope;\n\n_squid.$integration;\n\n_squid.$renderContent;\n\n_index.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/header/directive.js\n// module id = ../node_modules/xo-page-components/src/header/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n \\n
    \\n {{title}}\\n
    {{ content('base.payPal') }}
    \\n
    Venmo Checkout
    \\n
    \\n \\\"PayPal\\\"\\n \\n \\\"Facebook\\\"\\n
    \\n
    \\n
    \\n \\\"PayPal\\n
    \\n
    \\n \\\"PayPal\\n
    \\n
    \\n \\n\\n \\n\\n
    {{subTitle}}
    \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/header/template.html\n// module id = ../node_modules/xo-page-components/src/header/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-models/src/checkout/index');\n\nrequire('xo-title/dist/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _marketingoffer = require('xo-models/src/marketingoffer');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoMarketingOffers', function () {\n return {\n template: _template2['default'],\n scope: {\n placementCode: '=?',\n titleTxtProperty: '=?',\n subtitleProperty: '=?',\n token: '=?',\n pageName: '=?',\n backgroundImage: '=?',\n xoTitleTag: '@?',\n xoTitleClass: '@?'\n },\n controller: ['$scope', '$element', '$sce', function ($scope, $element, $sce) {\n var morsOfferFlag = $scope.placementCode === '202003' && (0, _squid.$feature)('morsValuePropOffers');\n var populateObj = void 0;\n\n if (morsOfferFlag) {\n populateObj = {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance($scope.token),\n payee: _index.$CheckoutPayeeModel.instance($scope.token),\n auth: _auth.$AuthModel.instance()\n };\n } else {\n populateObj = {\n checkoutCart: _index.$CheckoutCartModel.instance($scope.token)\n };\n }\n (0, _squid.$populate)($scope, populateObj).then(function () {\n $scope.locale = _squid.$locale;\n $scope.token = _angular.$rootScope.token;\n function setDefaultValues() {\n $scope.ad = {\n Title: (0, _squid.$renderContent)($scope.titleTxtProperty),\n Body: (0, _squid.$renderContent)($scope.subtitleProperty),\n backgroundImage: $scope.backgroundImage\n };\n }\n\n $scope.$watch('ad.backgroundImage', function (imageUrl) {\n if (imageUrl) {\n var url = imageUrl;\n var propImg = angular.element($element[0].querySelector('div.prop-img'));\n var isRetina = window && window.matchMedia && window.matchMedia('(-webkit-min-device-pixel-ratio: 2), ' + '(min--moz-device-pixel-ratio: 2), ' + '(-o-min-device-pixel-ratio: 2/1),' + '(min-device-pixel-ratio: 2),' + '(min-resolution: 192dpi), ' + '(min-resolution: 2dppx)').matches;\n\n if (isRetina && url) {\n var index = url.lastIndexOf('.'); // index at which file extension start\n url = url.substring(0, index) + '_2x' + url.substring(index, url.length);\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n } else {\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n }\n }\n });\n\n if ($scope.placementCode === '202002') {\n $scope.pu_type = 'ANONYMOUS';\n $scope.presentation_types = ['CompositeText'];\n $scope.pxpInfo = {\n name: 'xo_xoon_hermes_mors',\n pattern: '(xo_xoon_hermes_mors_)(.*)',\n treatment: 'xo_xoon_hermes_mors_treatment'\n };\n } else if ($scope.placementCode === '202003') {\n $scope.className = 'props';\n $scope.pu_type = 'PERSONAL';\n $scope.presentation_types = ['GenericComposite'];\n $scope.pxpInfo = {\n name: 'xo_mors_hermes_placements_ryi',\n pattern: '(xo_mors_hermes_placements_ryi_)(.*)',\n treatment: 'xo_mors_hermes_placements_ryi_treatment'\n };\n } else {\n setDefaultValues();\n }\n\n // serve ads only if pxp is true, country is US and lang is en\n if (_squid.$locale.country === 'US' && _squid.$locale.lang === 'en' && $scope.placementCode && (0, _squid.$feature)('morsValuePropOffers')) {\n $scope.marketingOfferData = new _marketingoffer.$MarketingOfferModel({\n countryCode: $scope.locale.country,\n page: $scope.pageName,\n puType: $scope.pu_type,\n locale: _squid.$locale.lang + '_' + _squid.$locale.country,\n totalTransactionAmount: {\n 'currency_code': $scope.checkoutCart.get('purchase.amounts.total.currency_code', ''),\n // Round the calculation to eliminate Floating point Rounding Error (69.99 * 100 === 6998.999999999999)\n // http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html\n 'value': Math.round($scope.checkoutCart.get('purchase.amounts.total.amount', 0) * 100)\n },\n totalShippingAmount: {\n 'currency_code': $scope.checkoutCart.get('purchase.amounts.total.currency_code', ''),\n // Round the calculation to eliminate Floating point Rounding Error (69.99 * 100 === 6998.999999999999)\n // http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html\n 'value': Math.round($scope.checkoutCart.get('purchase.amounts.shipping.amount', 0) * 100)\n },\n payee: morsOfferFlag ? $scope.payee.merchant.id : '',\n payer: morsOfferFlag ? $scope.checkoutSession.payer.id : '',\n si: morsOfferFlag ? $scope.checkoutSession.id : '',\n visitor_id: morsOfferFlag ? $scope.auth.visitor_id : '',\n targetPlacements: [{\n 'placement_code': $scope.placementCode,\n 'presentation_types': $scope.presentation_types\n }]\n });\n (0, _squid.$pxp)($scope.pxpInfo.name, { 'ctx.COUNTRY': _squid.$locale.country }, $scope.pxpInfo.pattern, false, true).then(function (res) {\n\n _logger.$logger.info('MO treatment: ' + (res ? res.treatment_name : '[no pxp response!]'));\n if (res && res.treatment_name === $scope.pxpInfo.treatment) {\n\n return _marketingoffer.$MarketingOfferModel.instance($scope.token).save({\n silent: true,\n data: $scope.marketingOfferData.serialize(),\n // Ignore all errors from this api, by passing transientError as true\n transientError: true,\n success: function success(result) {\n var ads_arr = result && result.ads || [];\n var adFound = false;\n\n // MORS could serve multiple ads for a given page. Iterate to get the\n // correct one based on the ad placement_id\n ads_arr.forEach(function (ad) {\n var adunit_id = ad.campaign.adunit_id;\n\n if (adunit_id.toString() === $scope.placementCode.toString() && ad.valid) {\n adFound = true;\n $scope.ad = {};\n var content = ad.content.nvp;\n content.forEach(function (obj) {\n $scope.ad[obj.name] = obj.value;\n });\n $scope.ad['impressionUrl'] = ad.tracking.impression_url;\n $scope.ad['clickUrl'] = ad.tracking.click_url;\n }\n });\n\n if (adFound) {\n $scope.ad.Body = $sce.trustAsHtml($scope.ad.Body);\n // $scope.ad.Title does not need to be assigned. for 202001, 202002,\n // and 202003 placement_ids as this will already be assigned.\n\n // notify MORS of successful rendering by firing the impressionurl\n // beacon and by setting the click url to be fired for future\n // conversion.\n // setting the placement_id helps to differentiate between multiple ads\n // displayed on the same page\n\n _logger.$logger.info('MORS_ad_displayed');\n _marketingoffer.$fireMORSBeacon.fireBeacon($scope.ad.impressionUrl);\n\n _angular.$rootScope.$broadcast('MORSDisplayed', {\n clickUrl: $scope.ad.clickUrl,\n placementId: $scope.placementCode\n });\n } else {\n _logger.$logger.info('MORS_ad_not_found');\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n },\n\n error: function error(err) {\n setDefaultValues();\n _logger.$logger.error('MORS_api_failure', { error: err });\n }\n });\n } else {\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n });\n } else {\n setDefaultValues();\n _angular.$rootScope.$broadcast('MORSNotDisplayed');\n }\n $scope.$on('localeChange', function () {\n setDefaultValues();\n });\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$renderContent;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$CheckoutSessionModel;\n\n_marketingoffer.$MarketingOfferModel;\n\n_marketingoffer.$fireMORSBeacon;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/marketingOffers/directive.js\n// module id = ../node_modules/xo-page-components/src/marketingOffers/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n

    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/marketingOffers/template.html\n// module id = ../node_modules/xo-page-components/src/marketingOffers/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/user/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoMerchantHeaderDirective', {\n tag: 'xo-merchant-header',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n merchant: {\n type: 'var',\n required: false\n },\n disableId: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n if (this.props.token) {\n return {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n }\n },\n lifecycle: {\n populate: function populate() {\n var _ref = this.models || {},\n checkoutAppData = _ref.checkoutAppData;\n\n if (checkoutAppData) {\n // get Merchant display name - can be undefined in which case we have an empty header\n this.merchantDisplayName = checkoutAppData.getMerchantDisplayName();\n\n if (this.props.token && !_index2.$CheckoutInputDataModel.instance(this.props.token).isEbayTxn()) {\n this.merchant = checkoutAppData.merchant;\n }\n }\n }\n }\n});\n\n\n(0, _squid.$registerDirective)('xoMerchantImageResize', function () {\n return {\n restrict: 'A',\n link: function link(scope, element) {\n element.bind('load', function () {\n var MAX_WIDTH = 780;\n var MAX_HEIGHT = 90;\n\n if (this.width > MAX_WIDTH) {\n var ratio = MAX_WIDTH / this.width;\n var height = this.height * ratio;\n\n this.width = MAX_WIDTH;\n this.height = height > MAX_HEIGHT ? MAX_HEIGHT : height;\n }\n });\n }\n };\n});\n\n_angular.noop;\n\n_squid.$Component;\n\n_squid.$registerDirective;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$CheckoutInputDataModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/merchant-header/directive.js\n// module id = ../node_modules/xo-page-components/src/merchant-header/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n \\n {{ merchantDisplayName || merchant.brand_name }}\\n \\t\\n \\\"{{\\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/merchant-header/template.html\n// module id = ../node_modules/xo-page-components/src/merchant-header/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _angular = require('angular');\n\nvar _uuid = require('node-uuid/uuid');\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nvar _index3 = require('xo-models/src/app/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _fbMessenger = require('../constants/fbMessenger');\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoMessengerPluginDirective', {\n tag: 'xo-messenger-plugin',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n },\n pluginType: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index2.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n messengerIntegration: _index3.$MessengerIntegrationDataModel.instance().retrieve()['catch'](_angular.noop)\n };\n }\n },\n\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n var lang = _squid.$locale.lang,\n country = _squid.$locale.country;\n var _props = this.props,\n pluginType = _props.pluginType,\n token = _props.token;\n var _models = this.models,\n _models$checkoutSessi = _models.checkoutSession,\n checkoutSession = _models$checkoutSessi === undefined ? {} : _models$checkoutSessi,\n _models$messengerInte = _models.messengerIntegration,\n messengerIntegration = _models$messengerInte === undefined ? {} : _models$messengerInte;\n\n // BA was offered to user or not\n\n var fbBAShownFlag = _squid.$util.localStorageEnabled() && window.localStorage.getItem(_fbMessenger2['default'].FB_BA_SHOWN_FLAG);\n\n // Added following flags to override usual behaviour to enable internal testing by FB and PYPL teams\n\n var _ref = window.xprops || {},\n _ref$experience = _ref.experience;\n\n _ref$experience = _ref$experience === undefined ? {} : _ref$experience;\n var override_fbpp_repeat = _ref$experience.override_fbpp_repeat;\n\n var overrideRepeatUserFlag = _squid.$util.param(_fbMessenger2['default'].OVERRIDE_FBPP_REPEAT_FLAG) || override_fbpp_repeat;\n\n var isChatEnabled = messengerIntegration.isChatEnabled,\n emailHash = messengerIntegration.emailHash,\n nameHash = messengerIntegration.nameHash,\n dataRefJWT = messengerIntegration.dataRefJWT;\n var _checkoutSession$paye = checkoutSession.payer;\n _checkoutSession$paye = _checkoutSession$paye === undefined ? {} : _checkoutSession$paye;\n var payerId = _checkoutSession$paye.id,\n _checkoutSession$tran = checkoutSession.transactionDetails,\n transactionDetails = _checkoutSession$tran === undefined ? {} : _checkoutSession$tran;\n\n var txnId = transactionDetails.receipt_id || transactionDetails.id || '';\n\n _logger.$logger.info('Messenger_plugin_props', { pluginType: pluginType, isMobile: isMobile });\n _logger.$logger.info('Messenger_plugin_data', messengerIntegration);\n\n // if 'isChatEnabled' variable is enabled, it means that user has already onboarded to\n // the messenger feature, so don't trigger messenger onboarding for that user again\n if (!overrideRepeatUserFlag && (isChatEnabled || fbBAShownFlag === 'true' && pluginType === 'STM')) {\n _logger.$logger.info('UNP_chat_prefernce_is_already_enabled');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'chat_pref_enabled'\n });\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n return;\n }\n\n // set all the needed props for the template to render (basically anything attached to `this`)\n // Messenger plugin – comparare this user ID hash with FB user\n this.identityMatchVal = JSON.stringify({\n email_hash: emailHash,\n name_hash: nameHash\n });\n this.dataRefVal = dataRefJWT + '_txnID_' + txnId + '_plugin_' + pluginType + '_token_' + token + '_locale_' + lang + '_' + country;\n this.originVal = window.location.origin;\n this.pageIdVal = _squid.$config.deploy.isLive() ? _fbMessenger2['default'].FB_PROD_PAGE_ID[country] : _fbMessenger2['default'].FB_TEST_PAGE_ID;\n\n if (pluginType === 'CHECKBOX') {\n this.uuidVal = payerId + '_' + _uuid2['default'].v1(); // the `user_ref`, which includes the user's payer ID\n this.isPrechecked = _fbMessenger2['default'].PRECHECKED_COUNTRIES.includes(country);\n if (_squid.$util.sessionStorageEnabled()) {\n window.sessionStorage.setItem('checkboxUUIDVal', this.uuidVal);\n }\n }\n\n // load the correct SDK based on the user's locale\n // it'll fallback to en_US if the locale isn't supported by facebook\n _squid.$dom.loadScript('facebook-jssdk', 'https://www.paypalobjects.com/fbjs/' + lang + '_' + country + '/sdk.js').then(function () {\n if (window.FB) {\n _this.fbAsyncInit();\n\n // NOTE: uncomment to test on stage and localhost\n // this.cbSTMPlugin({\n // event: 'identity_match',\n // ref: this.dataRefVal,\n // result: 'match'\n // });\n }\n })['catch'](function (err) {\n // just log that script is not loaded\n // messenger is an optional service which should not block payment done page rendering\n return _logger.$logger.info('fb_messenger_load_script_error', { error: err && err.message });\n });\n\n this.cbSTMPlugin = function (evt) {\n if (pluginType === 'STM') {\n if (evt.event === 'rendered') {\n _logger.$logger.info('STM_plugin_rendered');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_rendering_plugin',\n eligibility_reason: 'plugin_rendered'\n });\n }\n\n if (evt.event === 'identity_match' && evt.result === 'match') {\n _logger.$logger.info('FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_identity_matching',\n eligibility_reason: 'identity_matched'\n });\n\n _this.dataRefVal = evt.ref;\n\n _jquery2['default'].ajax({\n url: isMobile ? _fbMessenger2['default'].FB_USER_API_MOBILE_URL : _fbMessenger2['default'].FB_USER_API_URL,\n xhrFields: { withCredentials: true }\n }).always(function () {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$responseText = _ref2.responseText,\n responseText = _ref2$responseText === undefined ? '' : _ref2$responseText;\n\n var json = responseText.substring(responseText.indexOf('{'));\n var data = JSON.parse(json);\n\n _logger.$logger.info('callFBToGetBAToken_call', data);\n messengerIntegration.action('callFBToGetBAToken', {\n data: { userIdentifier: data.user_identifier },\n success: function success() {\n var getBAResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var isSuccessful = getBAResponse.success,\n batoken = getBAResponse.batoken;\n\n if (isSuccessful) {\n _logger.$logger.info('BAToken_from_FB', {\n batoken: batoken\n });\n\n var fbBAToken = batoken;\n var xoJSData = void 0;\n\n if (_squid.$config.deploy.isLocal()) {\n xoJSData = {\n 'data-env': 'local',\n 'data-stage': 'msmaster',\n 'data-no-bridge': ''\n };\n\n // Generate new FB Channel BA and update while testing, BA gets invalidated in few hours\n fbBAToken = 'BA-5UD039368V581733E';\n } else if (_squid.$config.deploy.isStage() || _squid.$config.deploy.isSandbox()) {\n xoJSData = {\n 'data-env': 'sandbox',\n 'data-no-bridge': ''\n };\n } else {\n xoJSData = {\n 'data-env': 'production',\n 'data-no-bridge': ''\n };\n }\n\n var launchBAFlow = function launchBAFlow() {\n _logger.$logger.info('Launch_BA_flow_with_token', { fbBAToken: fbBAToken });\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'prepare_billing_agreement',\n eligibility_reason: 'identity_matched',\n click_source: 'pay_now',\n ba_token: fbBAToken\n });\n\n window.paypal.Checkout.contexts.iframe = true;\n if (_squid.$util.localStorageEnabled()) {\n window.localStorage.setItem(_fbMessenger2['default'].FB_BA_SHOWN_FLAG, 'true');\n }\n window.paypal.Checkout.render({\n experience: {\n messenger: true,\n override_fbpp_repeat: overrideRepeatUserFlag\n },\n payment: function payment() {\n return fbBAToken;\n },\n\n onAuthorize: function onAuthorize() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n baToken = _ref3.billingToken;\n\n _logger.$logger.info('User_accepted_FB_BA');\n\n var isUnchecked = _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxPluginState') === 'unchecked';\n var eligibility_reason = isUnchecked ? 'checkbox_plugin_unchecked' : 'checkbox_plugin_checked';\n if (isUnchecked) {\n _logger.$logger.info('user_not_accepted_messenger_notifications');\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n (0, _jquery2['default'])('#ba-integration-content').show();\n } else {\n _logger.$logger.info('user_accepted_checkbox_messenger_notifications');\n (0, _jquery2['default'])('.fb-send-to-messenger').hide();\n (0, _jquery2['default'])('#stm-upsell-content').hide();\n (0, _jquery2['default'])('#messenger-ba-integration-content').show();\n }\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'process_billing_agreement',\n eligibility_reason: eligibility_reason,\n click_source: 'agree_continue',\n ba_token: fbBAToken\n });\n\n _this.confirmCheckboxPluginOptIn();\n messengerIntegration.action('notifyFBOntBAAuthorize', {\n data: { baToken: baToken },\n success: function success() {\n var authorizeResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (authorizeResponse.success) {\n _logger.$logger.info('notifyFBOntBAAuthorize_call_success!');\n } else {\n _logger.$logger.info('notifyFBOntBAAuthorize_call_failure!');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(authorizeResponse),\n error_type: 'failure',\n error_source: 'notifyFBOntBAAuthorize'\n });\n }\n }\n });\n\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'prepare_billing_agreement_success',\n eligibility_reason: eligibility_reason,\n click_source: 'return_to_merchant',\n ba_token: fbBAToken\n });\n }\n });\n };\n if (window.paypal) {\n _logger.$logger.info('xo_JS_is_already_present');\n launchBAFlow();\n } else {\n _squid.$dom.loadScript('xo-js', 'https://www.paypalobjects.com/api/checkout.js', 0, xoJSData).then(function () {\n _logger.$logger.info('xo_JS_got_loaded');\n launchBAFlow();\n });\n }\n } else {\n _logger.$logger.info('callFBToGetBAToken_call_failure!');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(getBAResponse),\n error_type: 'failure',\n error_source: 'callFBToGetBAToken'\n });\n }\n }\n });\n });\n } else if (evt.event === 'identity_match' && evt.result === 'no_match') {\n _logger.$logger.info('No_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'identity_not_matched',\n click_source: 'pay_now'\n });\n } else if (evt.event === 'identity_match' && evt.result === 'no_logged_in_user') {\n _logger.$logger.info('No_loggedin_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n from: 'XO_REVIEW',\n to: 'process_XO_success',\n eligibility_reason: 'logged_out',\n click_source: 'pay_now'\n });\n } else if (evt.event === 'identity_match' && evt.result === 'failure') {\n _logger.$logger.info('Fail_FBPP_ID_match');\n _logger.$logger.info('checkout_fpti', {\n buyer_country: country,\n buyer_id: payerId,\n design: 'fbmessenger',\n int_error_code: '500',\n int_error_description: JSON.stringify(evt),\n error_type: 'failure',\n error_source: 'identity_match'\n });\n } else if (evt.event === 'clicked') {\n _logger.$logger.info('user_accepted_STM_messenger_notifications');\n }\n }\n };\n\n this.fbAsyncInit = function () {\n _logger.$logger.info('Initializing_FB_scripts');\n window.FB.init({\n appId: _fbMessenger2['default'].FB_PROD_APP_ID,\n xfbml: true,\n version: 'v2.11'\n });\n\n // Subscribe to STM\n window.FB.Event.subscribe('send_to_messenger', _this.cbSTMPlugin);\n\n // Subscribe to CHECKBOX\n window.FB.Event.subscribe('messenger_checkbox', function (evt) {\n _logger.$logger.info('messenger_checkbox_event', evt);\n if (evt.event === 'checkbox') {\n if (_squid.$util.sessionStorageEnabled()) {\n window.sessionStorage.setItem('checkboxPluginState', evt.state);\n }\n _logger.$logger.info('checkbox_plugin_state_' + evt.state);\n }\n });\n };\n\n this.confirmCheckboxPluginOptIn = function () {\n _logger.$logger.info('MessengerCheckboxPluginUserConfirmation_event_to_fb', {\n uuidVal: _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxUUIDVal') || '',\n pageIdVal: _this.pageIdVal,\n dataRefVal: _this.dataRefVal\n });\n window.FB.AppEvents.logEvent('MessengerCheckboxUserConfirmation', null, {\n page_id: _this.pageIdVal,\n app_id: _fbMessenger2['default'].FB_PROD_APP_ID,\n ref: _this.dataRefVal,\n user_ref: _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxUUIDVal') || ''\n });\n };\n },\n exit: function exit() {\n _logger.$logger.info('Messenger_plugin_EXIT_event');\n }\n }\n});\n\n\n_angular.noop;\n\n_logger.$logger;\n\n_squid.$Component;\n\n_squid.$dom;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_index.$DeviceInfo;\n\n_index2.$CheckoutSessionModel;\n\n_index3.$MessengerIntegrationDataModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/messenger-plugin/directive.js\n// module id = ../node_modules/xo-page-components/src/messenger-plugin/directive.js\n// module chunks = main-code-split","module.exports = \"\\n\\t
    \\n\\n\\t\\t
    \\n\\t\\t
    \\n\\n\\t\\t
    \\n\\t\\t
    \\n\\n\\t
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/messenger-plugin/template.html\n// module id = ../node_modules/xo-page-components/src/messenger-plugin/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoNotYouComponent = undefined;\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoNotYouComponent = exports.$xoNotYouComponent = _squid.$Component.extend('$xoNotYou', {\n tag: 'xo-not-you',\n template: _template2['default'],\n resolve: {\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve(),\n appData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve(),\n cart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token).retrieve()\n };\n }\n },\n actions: {\n onClick: function onClick() {\n if (_thirdPartyInfo.thirdPartyInfo.isVenmoEligible()) {\n this.actions.preferToPayWithVenmo();\n return;\n }\n this.actions.logout();\n },\n preferToPayWithVenmo: function preferToPayWithVenmo() {\n _logger.$logger.info('click_prefer_to_pay_with_venmo');\n _uiRouter.$state.go('checkout.payWithSelection', {}, { location: false });\n },\n logout: function logout() {\n var _this = this;\n\n _logger.$logger.info('not_you_logout');\n if (window.xchild && _squid.$util.isIFrame() && window.paypal && !window.paypal.isWebView()) {\n window.xchild.hide();\n\n var url = window.location.href.split('#')[0];\n var xprops = _squid.$util.extend({}, window.xprops);\n\n xprops.url = url;\n xprops.payment = function () {\n return _this.models.auth.logout().then(function () {\n return _angular.$rootScope.token;\n });\n };\n\n return window.ppxo.Checkout.renderPopupTo(window.xchild.getParentRenderWindow(), xprops);\n }\n\n this.models.auth.logoutAndRedirect('NOT_YOU');\n }\n },\n lifecycle: {\n populate: function populate() {\n var getMessage = function getMessage() {\n if (_thirdPartyInfo.thirdPartyInfo.isVenmoEligible() && !_thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token)) {\n return _squid.$locale.content.get('memberReview.preferToPayWithVenmo');\n }\n\n return _squid.$locale.content.get('memberReview.notYou');\n };\n\n this.message = getMessage();\n this.token = _angular.$rootScope.token;\n }\n }\n});\n\nangular.value(\"$xoNotYouComponent\", $xoNotYouComponent);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_squid.$Component;\n\n_squid.$util;\n\n_squid.$locale;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_thirdPartyInfo.thirdPartyInfo;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/notYou/directive.js\n// module id = ../node_modules/xo-page-components/src/notYou/directive.js\n// module chunks = main-code-split","module.exports = \"{{ this.message }}\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/notYou/template.html\n// module id = ../node_modules/xo-page-components/src/notYou/template.html\n// module chunks = main-code-split","\n\nvar addValidParam = require('../utils').addValidParam;\n\nfunction returnWPSParams(checkoutCart, checkoutSession, returnToMerchantMethod, is_cart_upload_flow) {\n var params = {};\n var customData = checkoutCart.get('purchase.custom');\n\n if (returnToMerchantMethod === 'POST') {\n // TODO: find out why we get postbackData as undefined\n // UPDATE: couldn't reproduce an issue on the stage for now\n if (checkoutSession.postbackData) {\n params = checkoutSession.postbackData;\n }\n } else {\n var transactionDetail = checkoutSession.transactionDetails;\n\n if (transactionDetail) {\n addValidParam(params, 'tx', transactionDetail.id);\n addValidParam(params, 'st', transactionDetail.state);\n\n if (transactionDetail.amount) {\n addValidParam(params, 'amt', transactionDetail.amount.total);\n addValidParam(params, 'cc', transactionDetail.amount.currency);\n }\n }\n\n // Cart uploads can have more than one item so we don't add any in return URL\n if (!is_cart_upload_flow) {\n var itemDetail = checkoutSession.get('itemsList.0');\n if (itemDetail) {\n addValidParam(params, 'item_name', itemDetail.name);\n addValidParam(params, 'item_number', itemDetail.sku);\n }\n }\n\n addValidParam(params, 'cm', customData);\n }\n return params;\n}\n\n/**\n * this API function is used by hermesnodeweb/public/pages/xo-end and xoonboardingnodeweb/public/pages/xo-end\n * Create params to return back to the merchant after clicking on \"Return to merchant\" on the Done page.\n * buy-now and cart-upload params are slightly different: given cart-upload might have multiple items,\n * please refer https://github.paypal.com/NodeXOShared/xo-hermes-checkout/blob/master/apis/session/postBackDataMapper.js\n * to know more details about post back data\n\n * @param {Object (angular model)} cart model\n * @param {Object (angular model)} session model\n * @param {String} http method, either \"POST\" or \"GET\"\n * @param {String} feature type (WPS only for now)\n * @param {Boolean} flag that indicates if it's a cart upload or not\n * @returns {object} params to pass back to the merchant\n*/\nmodule.exports = {\n $returnParams: function $returnParams(checkoutCart, checkoutSession, returnToMerchantMethod, feature, is_cart_upload_flow) {\n if (feature === 'WPS') {\n return returnWPSParams(checkoutCart, checkoutSession, returnToMerchantMethod, is_cart_upload_flow);\n }\n return {};\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/returnParams/index.js\n// module id = ../node_modules/xo-page-components/src/returnParams/index.js\n// module chunks = main-code-split","\n\nvar _subscriptionTerms = require('./subscriptionTerms');\n\nvar _subscriptionTerms2 = _interopRequireDefault(_subscriptionTerms);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nmodule.exports = {\n getFirstAmount: _subscriptionTerms2['default'].getFirstAmount,\n getFormattedFirstAmount: _subscriptionTerms2['default'].getFormattedFirstAmount,\n getItemOptions: _subscriptionTerms2['default'].getItemOptions,\n getItemName: _subscriptionTerms2['default'].getItemName,\n getCurrencyCode: _subscriptionTerms2['default'].getCurrencyCode,\n getTermsText: _subscriptionTerms2['default'].getTermsText,\n getEffectiveDate: _subscriptionTerms2['default'].getEffectiveDate\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/subscription-terms/index.js\n// module id = ../node_modules/xo-page-components/src/subscription-terms/index.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar BILL_PERIOD_DAY = 'DAY';\nvar BILL_PERIOD_WEEK = 'WEEK';\nvar BILL_PERIOD_MONTH = 'MONTH';\nvar BILL_PERIOD_YEAR = 'YEAR';\nvar TRIAL_SUBSCRIPTION = 'TRIAL';\nvar REGULAR_SUBSCRIPTION = 'REGULAR';\nvar INFINITE_CYCLES = 'INFINITE';\n\n/**\n * Plural time unit\n * True: time unit will be one of: days, weeks, months, years\n * False: time unit will be one of: day, week, month, year\n * @type {boolean}\n */\nvar pluralTimeUnit = false;\n\n/**\n * If a statement has hasPriorTerm=true , then the statement will begin with \"Then\"\n * e.g. Then 2$ for next 4 months\n * otherwise statement will be\n * 2$ for next 4 months\n * @type {boolean}\n */\nvar hasPriorTerm = false;\n\n/**\n * Returns a localized text from given key and props\n * @param key\n * @param props\n */\nfunction localizedContent(key, props) {\n return _squid.Content.get(key, props) && _squid.Content.get(key, props).toString();\n}\n\n/**\n * Computes the singular or plural form for time unit\n * @param billPeriod\n * @returns {string}\n */\nfunction computeTimeUnit(billPeriod) {\n var timeUnit = void 0;\n\n switch (billPeriod) {\n case BILL_PERIOD_DAY:\n timeUnit = pluralTimeUnit ? 'days' : 'day';\n break;\n case BILL_PERIOD_WEEK:\n timeUnit = pluralTimeUnit ? 'weeks' : 'week';\n break;\n case BILL_PERIOD_MONTH:\n timeUnit = pluralTimeUnit ? 'months' : 'month';\n break;\n case BILL_PERIOD_YEAR:\n timeUnit = pluralTimeUnit ? 'years' : 'year';\n break;\n default:\n timeUnit = '';\n }\n\n return localizedContent('wpsSubscription.label.' + timeUnit);\n}\n\n/**\n * Format amount\n * @param amount\n * @param currencyCode\n * @returns {string} A formatted amount string with currency code or free if 0\n */\nfunction computeAmount(amount, currencyCode) {\n if (amount === 0) {\n return localizedContent('wpsSubscription.label.free');\n } else {\n return (0, _squid.formatCurrency)(amount, currencyCode, false);\n }\n}\n\n/**\n * This method computes first trial key\n * @returns {string} Content Key for 1st trial, which must be prepended by wpsSubscription.message\n */\nfunction computeFirstTrialKey() {\n if (pluralTimeUnit) {\n // {amount} for the first {timePeriod} {timeUnit}\n return 'firstTrialPeriod.plural';\n } else {\n // {amount} for the first {timeUnit}\n return 'firstTrialPeriod.singular';\n }\n}\n\n/**\n * This method computes content key for 2nd trial\n * @returns {string} Content Key for 2nd trial, which must be prepended by wpsSubscription.message\n */\nfunction computeSecondTrialKey() {\n if (pluralTimeUnit) {\n // Then {amount} for the next {timePeriod} {timeUnit}\n return 'secondTrialPeriod.plural';\n } else {\n // Then {amount} for the next {timeUnit}\n return 'secondTrialPeriod.singular';\n }\n}\n\n/**\n * Computes and returns content key for regular subscription\n * There can be 12 variations of regular subscription content\n * @param totalCycles\n * @returns {string} Content Key for 2nd trial, which must be prepended by wpsSubscription.message\n */\nfunction computeRegularSubscriptionKey(totalCycles) {\n var key = 'regularSubscriptionPeriod';\n\n if (hasPriorTerm) {\n // Content starts with Then {amount} for ......\n key += '.withPriorTerms';\n } else {\n // Content does NOT starts with Then\n key += '.noPriorTerms';\n }\n\n if (pluralTimeUnit) {\n // Content has: {amount} for each 2 days/weeks/months/years\n key += '.plural';\n } else {\n // Content has: {amount} for each day/week/month/year\n key += '.singular';\n }\n\n switch (+totalCycles) {\n case 0:\n case 1:\n // Text will look like $20.00 USD for the next 2 months\n // Content does NOT end with: for 3 installments\n key += '.nonRecurring';\n break;\n case Infinity:\n // Content ends with: for each 2 months OR for each month\n // Content will look like $30.00 USD for each week\n key += '.recurringInfinite';\n break;\n default:\n // Content ends with: for 3 installments\n // Content will look like $100.00 USD for each 2 months, for 3 installments\n key += '.recurring';\n }\n return key;\n}\n\n/**\n * Prepares and returns an individual term text string\n * @param subscriptionTerms\n * @param index\n * @param currencyCode\n * @returns {string}\n */\nfunction prepareIndividualTermText(subscriptionTerms, index, currencyCode) {\n var amount = +subscriptionTerms[index].amount,\n billPeriod = subscriptionTerms[index].billPeriod,\n periodType = subscriptionTerms[index].periodType,\n billFrequency = +subscriptionTerms[index].billFrequency,\n totalCycles = +subscriptionTerms[index].totalCycles;\n var contentKey = void 0;\n hasPriorTerm = index > 0;\n pluralTimeUnit = billFrequency > 1;\n\n if (periodType === TRIAL_SUBSCRIPTION) {\n if (index === 0) {\n // First Trial\n contentKey = computeFirstTrialKey();\n } else if (index === 1) {\n // Second Trial\n contentKey = computeSecondTrialKey();\n }\n } else if (periodType === REGULAR_SUBSCRIPTION) {\n contentKey = computeRegularSubscriptionKey(totalCycles);\n }\n contentKey = 'wpsSubscription.message.' + contentKey;\n var templatePlaceholderData = {\n amount: computeAmount(amount, currencyCode),\n timePeriod: billFrequency,\n timeUnit: computeTimeUnit(billPeriod),\n installmentCount: totalCycles\n };\n\n return localizedContent(contentKey, templatePlaceholderData);\n}\n\nfunction mapBaResponse(baResponseData) {\n var mappedSubscriptionDetails = {};\n var plan = baResponseData && baResponseData.plan;\n var allTerms = plan && plan.payment_definitions;\n var mappedTerms = [];\n var firstTrialAmount = null;\n var regularAmount = void 0;\n mappedSubscriptionDetails.currencyCode = plan && plan.currency_code;\n\n if (allTerms) {\n allTerms.forEach(function (eachTerm) {\n var totalCycles = eachTerm.duration === INFINITE_CYCLES ? Infinity : eachTerm.cycles;\n var eachMappedTerm = {\n amount: eachTerm.amount && eachTerm.amount.value / 100,\n billPeriod: eachTerm.frequency,\n periodType: eachTerm.type,\n billFrequency: eachTerm.frequency_interval,\n totalCycles: totalCycles\n };\n if (eachTerm.type === TRIAL_SUBSCRIPTION && eachTerm.index === '1') {\n firstTrialAmount = eachMappedTerm.amount;\n } else if (eachTerm.type === REGULAR_SUBSCRIPTION) {\n regularAmount = eachMappedTerm.amount;\n }\n mappedTerms.push(eachMappedTerm);\n });\n\n // firstTrialAmount can be zero for free trial, null for no trial\n // and valid value if there is trial amount\n mappedSubscriptionDetails.firstAmount = firstTrialAmount !== null ? firstTrialAmount : regularAmount;\n mappedSubscriptionDetails.subscriptionTerms = mappedTerms;\n }\n\n return mappedSubscriptionDetails;\n}\n\n/**\n * Prepare and return a subscription terms\n * @param baResponseData\n * @returns {Object} Containing Subscription Terms Text\n */\nfunction getTermsText(baResponseData) {\n var subscriptionDetails = mapBaResponse(baResponseData);\n var subscriptionTerms = subscriptionDetails.subscriptionTerms;\n var currencyCode = subscriptionDetails.currencyCode;\n var termTextList = [];\n\n for (var i = 0, len = subscriptionTerms.length; i < len; i++) {\n termTextList.push(prepareIndividualTermText(subscriptionTerms, i, currencyCode));\n }\n return termTextList;\n}\n\n/**\n * Returns a un formatted first amount from ba response\n */\nfunction getFirstAmount(baResponseData) {\n var subscriptionDetails = mapBaResponse(baResponseData);\n\n return subscriptionDetails.firstAmount;\n}\n\n/**\n * Returns the currency code\n */\nfunction getCurrencyCode(baResponseData) {\n var plan = baResponseData && baResponseData.plan;\n\n return plan && plan.currency_code;\n}\n\n/**\n * Returns a formatted first amount from ba response data\n */\nfunction getFormattedFirstAmount(baResponseData) {\n var amount = getFirstAmount(baResponseData);\n var currencyCode = getCurrencyCode(baResponseData);\n\n return (0, _squid.formatCurrency)(amount, currencyCode, false);\n}\n\n/**\n * Retrieve item details\n */\nfunction getItemOptions(baResponseData) {\n var itemDetails = baResponseData && baResponseData.items && baResponseData.items[0];\n\n return itemDetails.options;\n}\n\n/**\n * Retrieve item name\n */\nfunction getItemName(baResponseData) {\n if (!baResponseData) {\n return;\n }\n var _baResponseData$items = baResponseData.items;\n _baResponseData$items = _baResponseData$items === undefined ? [] : _baResponseData$items;\n var _baResponseData$items2 = _baResponseData$items[0];\n _baResponseData$items2 = _baResponseData$items2 === undefined ? {} : _baResponseData$items2;\n var name = _baResponseData$items2.name;\n\n return name;\n}\n\nfunction getEffectiveDate(baResponseData) {\n return baResponseData && baResponseData.effective_date;\n}\n\nmodule.exports = {\n getFirstAmount: getFirstAmount,\n getFormattedFirstAmount: getFormattedFirstAmount,\n getItemOptions: getItemOptions,\n getItemName: getItemName,\n getCurrencyCode: getCurrencyCode,\n getTermsText: getTermsText,\n getEffectiveDate: getEffectiveDate\n};\n\n_squid.formatCurrency;\n\n_squid.Content;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js\n// module id = ../node_modules/xo-page-components/src/subscription-terms/subscriptionTerms.js\n// module chunks = main-code-split","\n\nvar _fbMessenger = require('../constants/fbMessenger');\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nmodule.exports = {\n /**\n * add non empty key, value to the object\n * @param {Object} object where to add new key, value\n * @param {String} key\n * @param {Any type} value, can not be empty\n * @returns {void}\n */\n addValidParam: function addValidParam(obj, key, val) {\n if (!obj) {\n return;\n }\n if (typeof key === 'string' && key && val !== undefined && val !== null) {\n obj[key] = val;\n }\n },\n\n // Get PXP context for Messenger feature\n getMessengerPXPContext: function getMessengerPXPContext() {\n var isMobile = _index.$DeviceInfo.isMobile() || _index.$DeviceInfo.isTablet();\n var overrideMobileUserFlag = _squid.$util.param(_fbMessenger2['default'].OVERRIDE_FBPP_MOBILE_FLAG);\n var channelVal = isMobile ? _fbMessenger2['default'].MOBILE_CHANNEL : _fbMessenger2['default'].WEB_CHANNEL;\n var pxpContext = {\n 'ctx.COUNTRY': _squid.$locale.country,\n 'ctx.CHANNEL': overrideMobileUserFlag ? _fbMessenger2['default'].WEB_CHANNEL : channelVal,\n 'ctx.LANGUAGE': _squid.$locale.lang + '_' + _squid.$locale.country\n };\n\n return pxpContext;\n },\n\n isDolphinEligibleOnWpsDone: function isDolphinEligibleOnWpsDone(stateName) {\n return (/checkout\\.done/.test(stateName) && !!_squid.$util.param('ulToastWpsDone')\n );\n }\n}; /* eslint-disable angular/typecheck-string */\n\n\n_squid.$util;\n\n_squid.$locale;\n\n_index.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/utils/index.js\n// module id = ../node_modules/xo-page-components/src/utils/index.js\n// module chunks = main-code-split","\n\ndefine(['squid/index', 'text!./template.html'], function (squid, template) {\n squid.module('xo-value-props.directive', ['squid']).directive('xoValueProps', function () {\n return {\n template: template,\n restrict: 'E',\n scope: {\n type: '@?',\n title: '@?',\n text: '@?',\n textContent: '@?',\n imageUrl: '@?'\n },\n link: function link(scope, element, attrs) {\n if (angular.isString(attrs.imageUrl)) {\n // Only do this when image-url is defined so that we do not affect default behavior. These image-url\n // are configured through pxp tool for factor based experiments, hence they should all should adhere\n // to standard size i.e. 150X150 pixels.\n attrs.$observe('imageUrl', function (imageUrl) {\n var url = imageUrl;\n var propImg = angular.element(element[0].querySelector('div.prop-img'));\n var isRetina = window && window.matchMedia && window.matchMedia('(-webkit-min-device-pixel-ratio: 2), ' + '(min--moz-device-pixel-ratio: 2), ' + '(-o-min-device-pixel-ratio: 2/1),' + '(min-device-pixel-ratio: 2),' + '(min-resolution: 192dpi), ' + '(min-resolution: 2dppx)').matches;\n\n if (isRetina) {\n var index = url.lastIndexOf('.'); // index at which file extension start\n url = url.substring(0, index) + '_2x' + url.substring(index, url.length);\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'background-size': '150px 150px',\n 'margin-top': '0px'\n });\n } else {\n propImg.css({\n 'background-image': 'url(' + url + ')',\n 'height': '150px',\n 'margin-top': '0px'\n });\n }\n });\n }\n }\n };\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-page-components/src/value-props/directive.js\n// module id = ../node_modules/xo-page-components/src/value-props/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.formatReturnContent = formatReturnContent;\nvar MAX_MERCHANT_NAME_LENGTH = exports.MAX_MERCHANT_NAME_LENGTH = 15;\n\nfunction formatReturnContent($renderContent, merchantName) {\n if (merchantName && merchantName.length < MAX_MERCHANT_NAME_LENGTH) {\n return $renderContent('common.returnToMerchant', { merchantName: merchantName });\n }\n\n return $renderContent('common.returnToDefaultMerchant');\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-return-to-merchant/dist/formatReturnContent.js\n// module id = ../node_modules/xo-return-to-merchant/dist/formatReturnContent.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _util = require('./util');\n\nObject.defineProperty(exports, '$ReturnToMerchant', {\n enumerable: true,\n get: function get() {\n return _util.$ReturnToMerchant;\n }\n});\n\nvar _formatReturnContent = require('./formatReturnContent');\n\nObject.defineProperty(exports, 'formatReturnContent', {\n enumerable: true,\n get: function get() {\n return _formatReturnContent.formatReturnContent;\n }\n});\nObject.defineProperty(exports, 'MAX_MERCHANT_NAME_LENGTH', {\n enumerable: true,\n get: function get() {\n return _formatReturnContent.MAX_MERCHANT_NAME_LENGTH;\n }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-return-to-merchant/dist/index.js\n// module id = ../node_modules/xo-return-to-merchant/dist/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ReturnToMerchant = undefined;\nexports.goTo = goTo;\nexports.postToMerchant = postToMerchant;\nexports.postTo = postTo;\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _index2 = require('xo-models/src/checkout/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction goTo(url, forceRedirect) {\n if (!url) {\n return;\n }\n\n _logger.$logger.info(url.indexOf('PayerID') > -1 ? 'return_to_merchant' : 'cancel_to_merchant', {\n url: url\n });\n\n // if V4 in-context integration, we'll terminate and call the close handler.\n if (window.xchild) {\n _logger.$logger.done();\n _angular.$rootScope.$emit('loading');\n\n var paymentToken = _angular.$rootScope.token;\n var cart = _index2.$CheckoutCartModel.instance(paymentToken);\n var appData = _index2.$CheckoutAppDataModel.instance(paymentToken);\n var orderID = paymentToken;\n var intent = cart.payment_action;\n var billingToken = cart.billing && cart.billing.ba_token;\n var paymentID = appData.payment_id;\n var cancelUrl = url;\n\n return window.xprops.onCancel({\n paymentToken: paymentToken,\n billingToken: billingToken,\n orderID: orderID,\n paymentID: paymentID,\n intent: intent,\n cancelUrl: cancelUrl\n });\n }\n\n var isHTTPUrl = Boolean(url.indexOf('http') === 0 || url.indexOf('www') === 0);\n var showPaymentSuccess = Boolean(_index.$DeviceInfo.isDevice() && !isHTTPUrl);\n\n if (showPaymentSuccess) {\n _logger.$logger.info('redirect', {\n url: url\n });\n _angular.$window.onunload = _angular.$window.onbeforeunload = function () {// eslint-disable no-empty-function\n };\n\n // wait until state change is done and then redirect\n // for some reason, in case of webview (invoice flow) and code split\n // when user is redirecting to the return url - dynamic chunk fails to load\n // which triggers reload of the previous page\n return _uiRouter.$state.go('checkout.genericMessage', {\n code: 'PAYMENT_SUCCESS',\n returnUrl: url\n })['catch'](function (err) {\n _logger.$logger.info('app_redirect_to_merchant_generic_message_error', {\n error: err && err.message\n });\n })['finally'](function () {\n _angular.$window.location = url;\n });\n }\n\n if (forceRedirect) {\n _squid.$util.redirect(url);\n } else {\n var isVZeroIframe = Boolean(_angular.$rootScope.partnerIntegration) && _squid.$util.isIFrame();\n\n if (isVZeroIframe) {\n _squid.$util.redirect(url, { redirectImmediateParent: true });\n }\n\n // If we are not in minibrowser, do a hard redirect\n else if (_angular.$rootScope.partnerIntegration || !_angular.$rootScope.miniBrowser && !_squid.$util.isIFrame()) {\n _squid.$util.redirect(url);\n } else {\n\n // Construct a message to send to the parent\n var result = this.postToMerchant({\n operation: 'return_to_merchant',\n returnUrl: url,\n updateParent: true\n });\n\n // Otherwise we have no choice but to return to the merchant\n if (!result) {\n _squid.$util.redirect(url);\n }\n }\n }\n\n var userStatus = function userStatus() {\n _logger.$logger.info('redirected_user_still_on_page_second_checkpoint');\n };\n\n (0, _angular.$timeout)(function () {\n _logger.$logger.info('redirected_user_still_on_page_first_checkpoint');\n (0, _angular.$timeout)(userStatus, 10000);\n }, 10000);\n}\n\nfunction postToMerchant(msg) {\n\n try {\n msg = _angular2['default'].toJson(msg, 0);\n\n // If we are not in IE, attempt to send a postMessage\n if (_angular.$window.opener && (_angular.$window.navigator.userAgent.match(/edge/i) || _angular.$window.opener.postMessage && !_angular.$window.navigator.userAgent.match(/msie|trident/i))) {\n _angular.$window.opener.postMessage(msg, '*');\n _logger.$logger.info('minibrowser_postmessage');\n return true;\n }\n // Otherwise, attempt to send a message through the iframe bridge\n var bridge = _angular.$window.opener && _angular.$window.opener.frames && _angular.$window.opener.frames.length && _angular.$window.opener.frames.PayPalBridge;\n\n if (bridge && bridge.returnToParent) {\n bridge.returnToParent(msg);\n _logger.$logger.info('minibrowser_bridgemessage');\n return true;\n }\n\n _logger.$logger.warn('minibrowser_nopostback');\n } catch (err) {\n _logger.$logger.error('minibrowser_postback_error', {\n error: err.stack || err.toString()\n });\n }\n\n return false;\n}\n\nfunction postTo(url, msg) {\n var form = document.createElement('form');\n\n form.method = 'POST';\n form.action = url;\n form.className = 'hide';\n\n for (var key in msg) {\n var input = document.createElement('input');\n\n input.name = key;\n input.value = msg[key];\n form.appendChild(input);\n }\n\n _angular.$window.document.body.appendChild(form);\n form.submit();\n _logger.$logger.info('web_postmessage');\n return true;\n}\n\nvar $ReturnToMerchant = exports.$ReturnToMerchant = {\n goTo: goTo,\n postToMerchant: postToMerchant,\n postTo: postTo\n};\n\n_angular2['default'].value(\"goTo\", goTo);\n_angular2['default'].value(\"postToMerchant\", postToMerchant);\n_angular2['default'].value(\"postTo\", postTo);\n_angular2['default'].value(\"$ReturnToMerchant\", $ReturnToMerchant);\n_index.$DeviceInfo;\n\n_logger.$logger;\n\n_uiRouter.$state;\n\n_squid.$util;\n\n_index2.$CheckoutCartModel;\n\n_index2.$CheckoutAppDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-return-to-merchant/dist/util.js\n// module id = ../node_modules/xo-return-to-merchant/dist/util.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ShippingChangeFactory = $ShippingChangeFactory;\n\nvar _util = require('./util');\n\nvar _squid = require('squid');\n\nfunction $ShippingChangeFactory(token, checkoutAppData, checkoutSession, checkoutCart) {\n return {\n getCartTotal: function getCartTotal() {\n return (0, _util.getCartTotal)(checkoutCart);\n },\n getPayload: function getPayload() {\n return checkoutSession.retrieve().then(function () {\n var shipping = checkoutSession.get('shipping');\n var paymentID = checkoutAppData.get('payment_id');\n var billingToken = checkoutCart.get('billing.ba_token', null);\n\n return (0, _util.getPayload)(token, paymentID, billingToken, shipping);\n });\n },\n updateCart: function updateCart() {\n return (0, _util.updateCart)(checkoutSession, checkoutCart);\n },\n callOnShippingChange: function callOnShippingChange(payload) {\n var allowChangeShipping = checkoutAppData.get('flags.allow_change_shipping', false);\n\n if (!allowChangeShipping) {\n return (0, _squid.$promise)({\n cartHasChanged: false,\n rejected: false\n });\n }\n\n return (0, _util.callOnShippingChange)(payload, checkoutCart, checkoutSession);\n }\n };\n}\n\nangular.value(\"$ShippingChangeFactory\", $ShippingChangeFactory);\n_util.getCartTotal;\n\n_util.getPayload;\n\n_util.updateCart;\n\n_util.callOnShippingChange;\n\n_squid.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-shipping-change/src/factory.js\n// module id = ../node_modules/xo-shipping-change/src/factory.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.getCartTotal = getCartTotal;\nexports.getPayload = getPayload;\nexports.updateCart = updateCart;\nexports.callOnShippingChange = callOnShippingChange;\n\nvar _squid = require('squid');\n\nfunction getCartTotal(cart) {\n return {\n currency: cart.get('purchase.amounts.total.currency_code'),\n value: cart.get('purchase.amounts.total.amount')\n };\n}\n\nfunction getPayload(paymentToken, paymentID, billingToken) {\n var shipping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var city = shipping.city,\n state = shipping.state,\n country = shipping.country,\n postal_code = shipping.postal_code;\n\n\n var shippingChangePayload = {\n paymentID: paymentID,\n paymentToken: paymentToken,\n orderID: paymentToken,\n billingToken: billingToken,\n shipping_address: {\n city: city,\n state: state,\n country_code: country,\n postal_code: postal_code\n },\n selected_shipping_method: null\n };\n\n var checkForIxoPaymentDetails = function checkForIxoPaymentDetails() {\n if (!window.xprops || !window.xprops.supplement || !window.xprops.supplement.getPaymentDetails) {\n return (0, _squid.$promise)();\n }\n\n return window.xprops.supplement.getPaymentDetails(shippingChangePayload.paymentID).then(function (payment) {\n if (payment && payment.selected_shipping_method) {\n return (0, _squid.$promise)(payment.selected_shipping_method);\n }\n });\n };\n\n return checkForIxoPaymentDetails().then(function (selectedShippingMethod) {\n shippingChangePayload.selected_shipping_method = selectedShippingMethod;\n }).then(function () {\n return shippingChangePayload;\n });\n}\n\nfunction updateCart(session, cart) {\n session.invalidate();\n\n cart.invalidate();\n cart.api.cache = false;\n\n return _squid.$promise.all([session.reload(), cart.reload()]).then(function () {\n return getCartTotal(cart);\n });\n}\n\nfunction callOnShippingChange(payload, cart, session) {\n\n var rejected = false;\n\n var shippingChangeActions = {\n reject: function reject() {\n rejected = true;\n }\n };\n\n var cartTotal = getCartTotal(cart);\n\n return window.xprops.onShippingChange(payload, shippingChangeActions).then(function () {\n return updateCart(session, cart);\n }).then(function (total) {\n var newCartTotal = getCartTotal(cart);\n var cartHasChanged = cartTotal.currency !== newCartTotal.currency || cartTotal.value !== newCartTotal.value;\n\n return { cartHasChanged: cartHasChanged, rejected: rejected };\n });\n}\n\n_squid.$promise;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-shipping-change/src/util.js\n// module id = ../node_modules/xo-shipping-change/src/util.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nrequire('./styles');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoReviewPayWithBaiduComponent', {\n tag: 'xo-review-paywith-baidu',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var checkoutSession = this.models.checkoutSession;\n\n\n this.showAmt = true;\n this.defaultFs = checkoutSession.get('plan.sources');\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_checkout.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js\n// module id = ../node_modules/xo-third-party-components/src/review-paywith-baidu/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n\\n

    \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n

    \\n
    \\n
    \\n
    \\n \\n \\n \\n {{ content('paymentMethod.baiduWallet') }}\\n \\n
    \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html\n// module id = ../node_modules/xo-third-party-components/src/review-paywith-baidu/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _venmoModels = require('../venmo-models');\n\nvar _pxp = require('xo-page-components/src/cart/lib/pxp');\n\nvar _checkout = require('xo-models/src/checkout');\n\nrequire('./styles');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCheckoutComponent', {\n tag: 'xo-review-paywith-venmo',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n optional: false\n }\n },\n resolve: {\n models: function models() {\n return {\n venmo: _venmoModels.$VenmoOnboardModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(this.token).retrieve()['catch'](_angular.noop),\n checkoutCart: _checkout.$CheckoutCartModel.instance(this.token).retrieve()['catch'](_angular.noop),\n payee: _checkout.$CheckoutPayeeModel.instance(this.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var _models = this.models,\n payee = _models.payee,\n venmo = _models.venmo,\n checkoutCart = _models.checkoutCart,\n checkoutAppData = _models.checkoutAppData,\n checkoutSession = _models.checkoutSession;\n\n this.isBillingAgreementsEnabled = Boolean(checkoutCart.get('billing'));\n this.merchantName = checkoutAppData.get('merchant.brand_name') || checkoutAppData.get('merchant.merchant_name') || 'the merchant';\n this.intentNotSale = checkoutCart.get('payment_action') !== 'sale';\n var getAmount = function getAmount() {\n return checkoutSession.get('plan.sources.0.amount');\n };\n var mapperFS = {\n BALANCE: function BALANCE(fs) {\n return {\n type: fs.funding_mode,\n amount: getAmount()\n };\n },\n PAYMENT_CARD: function PAYMENT_CARD(fs) {\n return {\n type: fs.funding_mode,\n card_type: fs.payment_card.type,\n sub_type: 'INSTANT_TRANSFER',\n name: fs.payment_card.type,\n last4: fs.payment_card.number,\n amount: getAmount()\n };\n },\n BANK_ACCOUNT: function BANK_ACCOUNT(fs) {\n return {\n type: fs.funding_mode,\n sub_type: 'INSTANT_TRANSFER',\n name: fs.bank_account.bank_name,\n last4: fs.bank_account.account_number,\n amount: getAmount()\n };\n }\n };\n\n function determineShowAmt() {\n var userAction = checkoutAppData.useraction();\n var noLineItemDetails = !(userAction && userAction.toLowerCase() === 'commit') && checkoutCart.get('purchase.items.length') === 0;\n\n return (0, _pxp.$pxpCartAmt)(checkoutAppData.get('merchant.merchant_country'), payee.get('merchant.id'), noLineItemDetails, checkoutCart.isPurchase()).then(function (showAmount) {\n return checkoutCart.get('payment_action') !== 'authorize' && showAmount;\n });\n }\n\n function getPlanList() {\n var defaultFS = venmo.get('funding_sources.default_option');\n\n if (defaultFS && defaultFS.funding_mode && mapperFS[defaultFS.funding_mode]) {\n return [mapperFS[defaultFS.funding_mode](defaultFS)];\n } else {\n return checkoutSession.get('plan.sources');\n }\n }\n\n function getBackup() {\n var backup = venmo.get('funding_sources.alternate_option');\n\n if (backup && backup.funding_mode && mapperFS[backup.funding_mode]) {\n return mapperFS[backup.funding_mode](backup);\n }\n }\n\n this.venmoUser = '@' + venmo.get('username');\n determineShowAmt().then(function (shouldShowAmt) {\n _this.showAmt = shouldShowAmt;\n });\n this.defaultFs = getPlanList();\n this.backupFs = getBackup();\n }\n }\n});\n\n\n_angular.noop;\n\n_squid.$Component;\n\n_venmoModels.$VenmoOnboardModel;\n\n_pxp.$pxpCartAmt;\n\n_checkout.$CheckoutSessionModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js\n// module id = ../node_modules/xo-third-party-components/src/review-paywith-venmo/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n\\n

    \\n \\n {{ content('paymentMethod.payWith') }}\\n \\n

    \\n
      \\n
    • \\n
      \\n \\n \\n \\n {{ content('paymentMethod.venmoBalance') }}\\n \\n \\n \\n {{fs.name}}\\n \\n \\n {{fs.last4 ? 'x-' + fs.last4 : ''}}\\n \\n \\n
      \\n \\n \\n \\n \\n {{venmoUser}}\\n \\n
    • \\n
    \\n\\n
    \\n
    \\n

    \\n
    \\n
    \\n\\n
    \\n
    \\n

    {{content('paymentMethod.venmoMerchantDisclosure')}} {{content('paymentMethod.venmoBackupFS', {name: backupFs.name, last4: backupFs.last4}) }}

    \\n
    \\n\\n
    \\n

    {{content('paymentMethod.venmoMerchantDisclosure')}} {{content('paymentMethod.venmoBalanceInfo')}}

    \\n
    \\n
    \\n\\n
    \\n\\n
    \\n

    {{content('paymentMethod.venmoReceipt')}}

    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html\n// module id = ../node_modules/xo-third-party-components/src/review-paywith-venmo/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.thirdPartyExperience = exports.venmoExperience = exports.thirdPartyInfo = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _angular = require('angular');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _sessionStorage = require('./sessionStorage');\n\nvar _sessionStorage2 = _interopRequireDefault(_sessionStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// TODO: Check how the cookie should be read/set (through meta? if read on server side)\nvar PWV_COOKIE = 'pwv';\nvar BA = 'BILLING_AGREEMENT';\n\nvar readCookie = function readCookie(name) {\n var nameEQ = name + '=';\n var ca = document.cookie.split(';');\n\n for (var i = 0, len = ca.length; i < len; i++) {\n var c = ca[i];\n\n while (c.charAt(0) === ' ') {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n return null;\n};\n\nvar thirdPartyInfo = exports.thirdPartyInfo = {\n /**\n * @name isThirdPartyEligible\n * @returns {Promise}\n */\n isThirdPartyEligible: function isThirdPartyEligible() {\n var _this = this;\n\n return this.isBaiduEligible().then(function (baiduEligibility) {\n return _this.isVenmoEligible() || baiduEligibility;\n });\n },\n\n\n /**\n * @name isBaiduEligible\n * @returns {Promise}\n */\n isBaiduEligible: function isBaiduEligible() {\n return _checkout.$FlowEligibilityModel.instance(_angular.$rootScope.token, {\n params: {\n geolocation: _squid.$meta.geolocation\n }\n }).retrieve().then(function (eligibility) {\n _logger.$logger.info('baidu_eligibility', eligibility);\n return eligibility.baiduWallet;\n });\n },\n\n\n /**\n * @name isVenmoEligible\n * @description Handler to call to determine if user can use Venmo\n * @returns {Boolean}\n */\n isVenmoEligible: function isVenmoEligible() {\n var appData = _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n var cart = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n var merchantCountry = appData.get('merchant.merchant_country');\n var isProcessorDeclined = appData.get('flags.processor_declined');\n var isInvoice = appData.get('flags.is_invoice_flow');\n var isBillingAgreement = cart.isBilling();\n var isMobile = _index.$DeviceInfo.isDevice();\n var isVenmoCookie = this.isVenmoCookiePresent();\n var isSFAuthenticationSession = _squid.$util.param('bt_int_type') === '2';\n var isMSPTransaction = cart.isMultiSellerPurchase();\n var eligibilityParams = {\n isMobile: isMobile,\n isVenmoCookie: isVenmoCookie,\n isNotInvoice: !isInvoice,\n isNotProcessorDeclined: !isProcessorDeclined,\n isNotBillingAgreement: !isBillingAgreement,\n isUSMerchant: merchantCountry === 'US',\n isNotSFAuthenticationSession: !isSFAuthenticationSession,\n isNotMSPTransaction: !isMSPTransaction\n };\n\n var venmoEligibility = Object.keys(eligibilityParams).filter(function (param) {\n return !eligibilityParams[param];\n });\n venmoEligibility = venmoEligibility && venmoEligibility.length > 0 ? 'ineligible:' + venmoEligibility.join() : 'eligible';\n\n _logger.$logger.info('venmo_eligibility', venmoEligibility);\n\n _logger.$logger.info('checkout_fpti', {\n 'is_venmo_cookie': isVenmoCookie ? '1' : '0',\n 'eligibility_reason': venmoEligibility\n });\n\n return Boolean(venmoEligibility === 'eligible');\n },\n\n\n /**\n * @name isVenmoCookiePresent\n * @returns {Boolean}\n */\n isVenmoCookiePresent: function isVenmoCookiePresent() {\n var cookieValue = readCookie(PWV_COOKIE);\n\n return Boolean(cookieValue);\n },\n\n\n /**\n * @name buildVenmoURL\n * @description Build the venmo URL scheme\n * @returns {String}\n */\n buildVenmoURL: function buildVenmoURL() {\n // SCHEME needs to change according to old or new experience\n // const linkType = venmoUrlSchemeType();\n var SCHEME = _squid.$config.urls && _squid.$config.urls.venmoAppSwitchURL['universal'];\n var VENMO_ROUTE = '#/checkout/venmo';\n var LOGIN_ROUTE = '#/checkout/login?venmoError=true';\n var cartModel = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n\n var token = void 0;\n var total = void 0;\n var currency = void 0;\n var intent = void 0;\n\n // Send BA token instead of EC token for a billing agreement purchase\n token = cartModel.get('billing.ba_token') ? cartModel.get('billing.ba_token') : _angular.$rootScope.token;\n // For BA: setting billing agreement as payment_action explicitly, not relying on payment action returned in cart\n intent = cartModel.billing ? BA : cartModel.payment_action;\n\n // total cannot be undefined, outdated venmo app clients will crash otherwise\n total = cartModel.get('purchase.amounts.total.amount', '0');\n currency = cartModel.get('purchase.amounts.total.currency_code', 'none');\n\n var params = (0, _angular.$httpParamSerializer)({\n 'x-success': _angular.$location.absUrl().replace(/#.*$/, VENMO_ROUTE),\n 'x-failure': _angular.$location.absUrl().replace(/#.*$/, LOGIN_ROUTE),\n 'ua': _angular.$window.navigator.userAgent,\n 'merchant_id': _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token).getId(),\n 'token': token,\n total: total,\n currency: currency, // can be undefined for BA w/o purchase\n intent: intent\n });\n\n return SCHEME + '?' + params;\n }\n};\n\nvar venmoExperienceKey = 'VENMO_EXPERIENCE';\n\n// Get whether a token is marked as Venmo experience.\nvar venmoExperience = exports.venmoExperience = {\n set: function set(token) {\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n sessionStorage.setItem(venmoExperienceKey, token);\n },\n get: function get(token) {\n var auth = _auth.$AuthModel.instance();\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n if (auth.logged_in && auth.guest && // Check if Venmo guest account logged in\n sessionStorage.getItem(venmoExperienceKey) === token) {\n return true;\n } else {\n this.set(null);\n return false;\n }\n }\n};\n\nvar allowedThirdPartyExperiences = {\n VENMO: 'VENMO_EXPERIENCE',\n BAIDU: 'BAIDU_EXPERIENCE'\n};\n\nvar THIRD_PARTY_NAMESPSACE = 'THIRD_PARTY_EXPERIENCE';\n\nvar thirdPartyExperience = exports.thirdPartyExperience = {\n setAsVenmoExperience: function setAsVenmoExperience(token) {\n var _JSON$stringify;\n\n var sessionStorage = (0, _sessionStorage2['default'])();\n var payload = JSON.stringify((_JSON$stringify = {}, _JSON$stringify[token] = allowedThirdPartyExperiences['VENMO'], _JSON$stringify));\n\n sessionStorage.setItem(THIRD_PARTY_NAMESPSACE, payload);\n },\n setAsBaiduExperience: function setAsBaiduExperience(token) {\n var _JSON$stringify2;\n\n var sessionStorage = (0, _sessionStorage2['default'])();\n var payload = JSON.stringify((_JSON$stringify2 = {}, _JSON$stringify2[token] = allowedThirdPartyExperiences['BAIDU'], _JSON$stringify2));\n\n sessionStorage.setItem(THIRD_PARTY_NAMESPSACE, payload);\n },\n isThirdPartyExperience: function isThirdPartyExperience(token) {\n var availableExperiences = [];\n\n for (var key in allowedThirdPartyExperiences) {\n availableExperiences.push(allowedThirdPartyExperiences[key]);\n }\n\n var currentExperience = this.getExperience(token);\n\n return Boolean(availableExperiences.indexOf(currentExperience) > -1);\n },\n getExperience: function getExperience(token) {\n var auth = _auth.$AuthModel.instance();\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n // if logged in, and guest, we return the experience if any\n if (auth.logged_in && auth.guest && sessionStorage.getItem(THIRD_PARTY_NAMESPSACE)) {\n var payload = JSON.parse(sessionStorage.getItem(THIRD_PARTY_NAMESPSACE) || '');\n\n return payload && payload[token] || 'MEMBER_EXPERIENCE';\n } else {\n // If not logged in, we reset the third party experience\n this.resetThirdPartyExperience();\n return 'MEMBER_EXPERIENCE';\n }\n },\n resetThirdPartyExperience: function resetThirdPartyExperience() {\n var sessionStorage = (0, _sessionStorage2['default'])();\n\n sessionStorage.removeItem(THIRD_PARTY_NAMESPSACE);\n }\n};\n\n_squid.$config;\n\n_squid.$util;\n\n_squid.$meta;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_index.$DeviceInfo;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_angular.$location;\n\n_angular.$httpParamSerializer;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$FlowEligibilityModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/thirdParty-info/index.js\n// module id = ../node_modules/xo-third-party-components/src/thirdParty-info/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports['default'] = getSessionStorage;\nvar store = {};\n\n// Polyfill for sessionStorage if not available. Simple variable store\n\nfunction getSessionStorage() {\n try {\n\n window['sessionStorage'].setItem('__feature_test__', '0');\n window['sessionStorage'].removeItem('__feature_test__');\n return window.sessionStorage;\n } catch (err) {\n return {\n getItem: function getItem(key) {\n if (arguments < 1) {\n throw new Error('1 argument required');\n }\n return store[key];\n },\n setItem: function setItem(key, val) {\n if (arguments < 2) {\n throw new Error('2 arguments required');\n }\n store[key] = val;\n },\n removeItem: function removeItem(key) {\n\n delete store[key];\n }\n };\n }\n}\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js\n// module id = ../node_modules/xo-third-party-components/src/thirdParty-info/sessionStorage.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$VenmoOnboardModel = undefined;\n\nvar _squid = require('squid');\n\nvar $VenmoOnboardModel = exports.$VenmoOnboardModel = _squid.$Model.extend('$VenmoOnboardModel', {\n api: new _squid.$Api({\n uri: '/api/venmo/onboard'\n })\n});\n\nangular.value(\"$VenmoOnboardModel\", $VenmoOnboardModel);\n_squid.$Model;\n\n_squid.$Api;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-third-party-components/src/venmo-models/index.js\n// module id = ../node_modules/xo-third-party-components/src/venmo-models/index.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().directive('xoTitle', [function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n scope: {\n titleTxt: '@?',\n className: '@?',\n tagName: '@?'\n },\n link: function link($scope, $element) {\n if ($scope.tagName) {\n var newEl = document.createElement($scope.tagName || 'h1');\n\n newEl.className = $scope.className || 'alpha';\n newEl.textContent = '{{ titleTxt }}';\n (0, _angular.$compile)(newEl)($scope);\n $element.empty().append(newEl);\n }\n }\n };\n}]);\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-title/dist/directive.js\n// module id = ../node_modules/xo-title/dist/directive.js\n// module chunks = main-code-split","module.exports = \"

    \\n {{ titleTxt }}\\n

    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-title/dist/template.html\n// module id = ../node_modules/xo-title/dist/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _model = require('./model');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$FptiBuilder', function () {\n /**\n * Build the front-end FPTI event from three data sources\n * 1. the per-product configuration\n * 2. the buzname defined per-route\n * 3. the additional attributes that only available at a specific checkpoint\n *\n */\n\n return _squid.$Class.extend('FptiBuilder', {\n\n resolvePageQualifier: function resolvePageQualifier(trackingData) {\n // The pages can populated pageQualifier to override the default one\n this.pageQualifier = trackingData && trackingData.pageQualifier ? trackingData.pageQualifier\n // because 'fullpage' has been widely embedded into routes\n // we had better to keep it as a place holder\n : 'fullpage'; // update later if it's in-context\n },\n\n build: function build() {\n\n if (!this.trackingData && !this.error) {\n // do nothing if neither page nor error tracking\n return this;\n }\n\n this.resolvePageQualifier(this.trackingData);\n\n this._dataObj = new _model.$FptiDataModel().decorate('base', this.baseData).decorate('buzname', this.trackingData, this.pageQualifier, undefined, this.productOverride).decorate('templateName', this.trackingData, this.pageQualifier).decorate('pageGoal', this.trackingData.pageGoal).decorate('ecToken', this.trackingData.token).decorate('correlationId', (0, _squid.$getLatestCorrelationID)()).decorate('uuid', _model.$CalDataModel.getUUID()).decorate('fieldError', this.error).decorate('pageError', this.error).decorate('pageStartTime', new Date().getTime()).decorate('pxptrackingdata', this.trackingData.pxpData).decorate('transition_time', this.transition_time).decorate('cust', this.cust).decorate('dc', this.dc).decorate('az', this.az).decorate('comp', this.comp).getDataObject(this.isInContext);\n\n return this;\n },\n\n toString: function toString() {\n var dataAry = [];\n\n _angular2['default'].forEach(this._dataObj, function (v, k) {\n dataAry.push(k + '=' + v);\n });\n\n return dataAry.join('&');\n }\n });\n});\n\n_squid.$getLatestCorrelationID;\n\n_squid.$Class;\n\n_model.$FptiDataModel;\n\n_model.$CalDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/builder.js\n// module id = ../node_modules/xo-tracking/dist/builder.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$ButtonTrackingService', function () {\n var _beaconUrl = 'https://www.paypalobjects.com/en_US/i/scr/btn_tracking_pixel.gif?teal=null&Id=null&ru=null';\n var _beaconParams = ['fltk', 'calc', 'page', 'xe', 'xt'];\n var _alreadyFired = false;\n\n function _strToElements(str) {\n var elements = {};\n\n if (str && str.length) {\n str.split('&').forEach(function (param) {\n var nvp = param.split('=');\n\n elements[nvp[0]] = nvp[1];\n });\n }\n return elements;\n }\n\n function _fireButtonTrackingBeacon(elements) {\n var url = _beaconUrl;\n var xoData = {};\n\n function buildParam(param, value) {\n var p = '&' + param + '=' + (value ? value : 'null');\n\n return p;\n }\n\n function getGUIID(ts) {\n return _strToElements(ts).vr;\n }\n\n function addToDocument(uri) {\n var img = document.createElement('img');\n\n img.setAttribute('src', uri);\n document.body.appendChild(img);\n }\n\n // Get some params from FPTI data.\n _beaconParams.forEach(function (param) {\n url += buildParam(param, elements[param]);\n });\n\n // Build the rest of the params.\n url += buildParam('fpti', getGUIID(_squid.$cookies && _squid.$cookies.ts));\n url += buildParam('WWW_AKA_MVT_BUTTONS', _squid.$cookies && _squid.$cookies.WWW_AKA_MVT_BUTTONS);\n url += buildParam('WWW_AKA_MVT_ID', _squid.$cookies && _squid.$cookies.WWW_AKA_MVT_ID);\n url += buildParam('ip', _squid.$meta && _squid.$meta.ipaddress);\n\n if (_angular.$rootScope.token) {\n (0, _squid.$populate)(xoData, {\n payee: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n appData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n url += buildParam('mrid', xoData.payee && xoData.payee.getId());\n url += buildParam('calf', xoData.appData && xoData.appData.flow_id);\n addToDocument(url);\n });\n } else {\n url += buildParam('mrid', null);\n url += buildParam('calf', null);\n addToDocument(url);\n }\n }\n\n return {\n fireBeacon: function fireBeacon(fptiData) {\n if (!_alreadyFired && fptiData) {\n var elements = _strToElements(fptiData);\n\n // Fire the beacon if this is a page render.\n if (elements.page) {\n _alreadyFired = true;\n return _fireButtonTrackingBeacon(elements);\n }\n }\n },\n resetAlreadyFired: function resetAlreadyFired() {\n _alreadyFired = false;\n }\n };\n});\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$cookies;\n\n_squid.$populate;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutPayeeModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/button.js\n// module id = ../node_modules/xo-tracking/dist/button.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module('tracking.directive', ['ui.router']).directive('trackSubmit', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('mousedown', function (event) {\n var transition = attr && attr.trackSubmit;\n var trackSubmit = {\n currentRoute: _uiRouter.$state.current,\n transition: transition,\n errors: []\n };\n\n _angular2['default'].forEach($('input.ng-invalid, select.ng-invalid'), function (el) {\n var elem = $(el);\n var elementId = elem.attr('id');\n var elementName = elem.attr('name');\n var errorKey = elem.attr('data-error-key');\n var errorText = elem.has('required') ? 'required' : 'no error key';\n var fieldName = elementId ? elementId : elementName;\n\n if (!fieldName) {\n var elementModel = elem.attr('ng-model');\n\n fieldName = elementModel ? elementModel : 'unnamed-field';\n }\n\n trackSubmit.errors.push({\n fieldName: fieldName,\n errorMessage: errorKey ? errorKey : errorText\n });\n });\n\n _angular.$rootScope.$broadcast('trackSubmit', trackSubmit);\n });\n }\n };\n}).directive('trackLink', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('mousedown', function (event) {\n var state = attr && attr.trackLink;\n\n if (state) {\n var trackLink = {\n currentRoute: _uiRouter.$state.current,\n transition: state\n };\n\n _angular.$rootScope.$broadcast('trackLink', trackLink);\n }\n });\n }\n };\n}).directive('trackClick', function () {\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('click', function (event) {\n var state = attr && attr.trackClick;\n\n if (state) {\n var trackClick = {\n currentRoute: _uiRouter.$state.current,\n transition: state\n };\n _angular.$rootScope.$broadcast('trackClick', trackClick);\n }\n });\n }\n };\n}).directive('trackInput', function () {\n /*\n * Track an input tag with track-input attribute\n * you can use the value of track-input attribute as\n * a tracking attr Eg.: track-input=\"xo_guest_yes\"\n */\n return {\n restrict: 'AE',\n link: function link($scope, element, attr) {\n element.on('click', function (event) {\n var state = void 0;\n\n if (event.target.type === 'checkbox') {\n if (event.target.checked) {\n state = attr && attr.trackInput + '_CHECKED';\n } else {\n state = attr && attr.trackInput + '_UNCHECKED';\n }\n } else {\n state = attr && attr.trackInput;\n }\n\n var trackInput = {\n currentRoute: _uiRouter.$state.current,\n page: 'main:ec:hermes::fullpage-billing:guest:aries:'\n };\n\n if (state) {\n trackInput.transition = state;\n }\n\n _angular.$rootScope.$broadcast('trackInput', trackInput);\n });\n }\n };\n});\n\n_uiRouter.$state;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/directive.js\n// module id = ../node_modules/xo-tracking/dist/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _builder = require('./builder');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fpti', function () {\n var _beaconUrl = void 0;\n\n // Logic to switch between production/staging urls. This way we don't pollute live logs,\n // and we are able to test on stage using the fpti log viewing tool.\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n _beaconUrl = 'https://tracking.qa.paypal.com/webapps/tracking/ts'; // stage url\n } else {\n _beaconUrl = _squid.$config.urls && _squid.$config.urls.fptiBeaconUrl;\n }\n\n return {\n // Get all the tracking data defined at the page level\n getPageTrackingData: function getPageTrackingData(route) {\n route = route || {};\n\n var trackingData = route.trackingData || {};\n var routeParent = route.parent;\n\n trackingData.token = _angular.$rootScope.token;\n\n while (routeParent) {\n trackingData = _angular2['default'].merge({}, routeParent.trackingData || {}, trackingData);\n routeParent = routeParent.parent;\n }\n return trackingData;\n },\n\n setupDataString: function setupDataString(route, err, data) {\n var trackingData = this.getPageTrackingData(route);\n var PAYPAL = window && window.PAYPAL;\n\n var fptiData = void 0;\n\n if (PAYPAL && typeof PAYPAL.analytics !== 'undefined') {\n PAYPAL.core = PAYPAL.core || {};\n\n var payload = {\n baseData: window.meta.fpti,\n trackingData: trackingData,\n error: err,\n isInContext: _angular.$rootScope.miniBrowser\n };\n\n _angular2['default'].extend(payload, data || {});\n fptiData = new _builder.$FptiBuilder(payload).build().toString();\n\n // FPTI client side tracking only if we have template\n if (route && route.template && _angular2['default'].isFunction(PAYPAL.analytics.setup)) {\n PAYPAL.core.pta = PAYPAL.analytics.setup({\n data: fptiData,\n url: _beaconUrl\n });\n }\n }\n return fptiData;\n }\n };\n}).factory('$fptiError', function () {\n function stringifyErrorMessage(msg) {\n return encodeURIComponent(_angular2['default'].isString(msg) ? msg.split('\\n').slice(0, 2).join('@') // Get the first two lines of stack\n : (_angular2['default'].toJson(msg) || 'undefined').substring(0, 128));\n }\n\n return _squid.$Error.extend({\n construct: function construct(err) {\n if (!err) {\n return;\n }\n this.type = err.type;\n this.field = err.field;\n this.msg = stringifyErrorMessage(err.message || err.error);\n this.code = err.code || err.cause;\n }\n });\n});\n\n_squid.$config;\n\n_squid.$Error;\n\n_builder.$FptiBuilder;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/fpti.js\n// module id = ../node_modules/xo-tracking/dist/fpti.js\n// module chunks = main-code-split","\n\n/**\n * xo-tracking encapsulates all the details about instrumentation\n * and only register event listeners during bootstrap\n */\ndefine(['angular', './listener', './directive'], function (angular) {\n\n // Declare the dependency to register the listeners\n return angular.module('tracking', ['tracking.listener', 'tracking.directive']);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/index.js\n// module id = ../node_modules/xo-tracking/dist/index.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = require('xo-models/src/auth/index');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _model = require('./model');\n\nvar _builder = require('./builder');\n\nvar _button = require('./button');\n\nvar _fpti = require('./fpti');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n // eslint-disable-line max-statements\n var token = window.meta.token;\n // logAppName is the appname from meta.js. if the logAppName is not defined, default it to 'appNameNotDefined'.\n var appName = _squid.$meta.logAppName || 'appNameNotDefined';\n var addTrackingData = function addTrackingData(object) {\n return _squid.$util.extend(object, {\n dc: _squid.$meta.dc,\n az: _squid.$meta.az,\n cust: _index.$AuthModel.instance().buyer_id || '',\n comp: appName\n });\n };\n var cplSettings = _squid.$config.enableCPL;\n var passesCplThrottle = cplSettings && (typeof cplSettings.throttle === 'undefined' || (0, _squid.$experiment)('cpl_tracking', cplSettings.throttle, token));\n var cplEnabled = passesCplThrottle || _squid.$util.params().forceEnableCPL;\n\n function logTransition(state) {\n return !(state.trackingData && state.trackingData.suppressTransitionLog);\n }\n\n function logStateExit(state) {\n return state.trackingData && state.trackingData.trackStateExit;\n }\n\n function getBeaconUrl() {\n // Logic to switch between production/staging urls. This way we don't pollute live logs,\n // and we are able to test on stage using the fpti log viewing tool.\n return _squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage() ? 'https://tracking.qa.paypal.com/webapps/tracking/ts' // stage url\n : _squid.$config.urls && _squid.$config.urls.fptiBeaconUrl;\n }\n\n /*\n * Triggers pa.js recordClick with custom parameters\n */\n function fptiCustomRecordClick(route, customData) {\n var analyticsInstance, fptiData, fptiDataObj;\n var PAYPAL = window.PAYPAL;\n\n if (PAYPAL && typeof PAYPAL.analytics !== 'undefined') {\n PAYPAL.core = PAYPAL.core || {};\n\n analyticsInstance = new PAYPAL.analytics.Analytics();\n\n fptiData = new _builder.$FptiBuilder({\n trackingData: route.trackingData,\n isInContext: _angular.$rootScope.miniBrowser,\n comp: appName\n // ... Other flow data pass-in here to resolve page qualifier\n }).build();\n\n // Grab the fpti data object and extend with custom params\n // The fpti data obj should include pxp params as well\n fptiDataObj = fptiData._dataObj;\n $.extend(fptiDataObj, customData);\n\n analyticsInstance.setRequestData(fptiDataObj);\n analyticsInstance.recordClick({\n url: getBeaconUrl()\n });\n }\n }\n\n _angular.$rootScope.$on('trackInput', function (event, trackInput) {\n if (!trackInput) {\n return;\n }\n var customData = {\n link: trackInput && trackInput.transition,\n page: trackInput && trackInput.page\n };\n\n fptiCustomRecordClick(trackInput.currentRoute, customData);\n });\n\n _angular.$rootScope.$on('trackClick', function (event, trackClick) {\n if (!trackClick) {\n return;\n }\n var customData = {\n link: trackClick && trackClick.transition\n };\n\n fptiCustomRecordClick(trackClick.currentRoute, customData);\n });\n\n _angular.$rootScope.$on('trackSubmit', function (event, trackSubmit) {\n if (!trackSubmit) {\n return;\n }\n var currentRoute = trackSubmit && trackSubmit.currentRoute;\n var routeName = currentRoute ? currentRoute.name : 'noRoute';\n\n _logger.$logger.info('track_submit', {\n route_name: routeName\n // ID stuff here later\n });\n\n if (logTransition(currentRoute)) {\n routeName = routeName.replace(/\\./g, '_');\n var state = currentRoute.trackingData && currentRoute.trackingData.fptiState || routeName;\n var transition = trackSubmit.transition || state;\n\n _logger.$logger.info(routeName + '_exit', {\n fptiState: state,\n fptiTransition: transition\n });\n }\n\n if (trackSubmit.errors && trackSubmit.errors.length) {\n var fptiFieldErrors = JSON.stringify(trackSubmit.errors);\n\n _logger.$logger.info('checkout_fpti', {\n form_field_errors: fptiFieldErrors\n });\n }\n\n var errors = trackSubmit.errors;\n\n if (_angular2['default'].isArray(errors)) {\n errors.forEach(function (err) {\n _logger.$logger.debug('track_submit_error', err);\n if (_fpti.$fpti) {\n _fpti.$fpti.setupDataString(currentRoute, new _fpti.$fptiError({\n type: 'fieldError',\n field: err.fieldName,\n code: err.errorMessage\n }));\n }\n });\n\n if (errors.length) {\n _logger.$logger.flush(true);\n }\n }\n });\n\n _angular.$rootScope.$on('unhandled_error', function (event, exception) {\n if (_fpti.$fpti) {\n _fpti.$fpti.setupDataString(exception.currentRoute, new _fpti.$fptiError({\n type: 'pageError',\n message: exception.message,\n code: exception.cause\n }));\n }\n });\n\n _angular.$rootScope.$on('trackLink', function (event, trackLink) {\n if (!trackLink) {\n return;\n }\n\n var currentRoute = trackLink.currentRoute;\n var routeName = (currentRoute ? currentRoute.name : 'noRoute').replace(/\\./g, '_');\n var state = currentRoute.trackingData && currentRoute.trackingData.fptiState || routeName;\n\n _logger.$logger.info(routeName + '_exit', {\n fptiState: state,\n fptiTransition: trackLink.transition\n });\n });\n\n _angular.$rootScope.$on('$transition', function (event, data) {\n (0, _angular.$timeout)(function () {\n if (_fpti.$fpti) {\n var fptiData = _fpti.$fpti.setupDataString(data.toState, null, addTrackingData({\n transition_time: data.duration\n }));\n\n // This seems to conflict with CPL data, so don't fire if CPL\n if (!cplEnabled) {\n // Fire and forget button tracking beacon.\n _button.$ButtonTrackingService.fireBeacon(fptiData);\n }\n }\n });\n });\n\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState) {\n var from = fromState && fromState.name.replace(/\\./g, '_');\n var to = toState && toState.name.replace(/\\./g, '_');\n\n if (from && logTransition(fromState) && logStateExit(fromState)) {\n var trackingData = fromState.trackingData && fromState.trackingData || {};\n\n _logger.$logger.info(from + '_exit', { fptiState: trackingData.fptiState || from, fptiTransition: trackingData.fptiState || from });\n }\n\n _logger.$logger.info('state_change', {\n from: from || 'start',\n to: to || 'end'\n });\n\n // Generate a new CAL correlation_id to be shared until next flow transition (only for view states)\n if (toState.template) {\n _model.$CalDataModel.generateMetaIds();\n }\n\n _angular.$rootScope.currentState = to;\n\n if (to && logTransition(toState)) {\n _logger.$logger.info(to + '_enter', { fptiState: toState.trackingData && toState.trackingData.fptiState || to });\n }\n });\n\n _angular.$rootScope.$on('page_loaded', function (event, from, to) {\n if (from !== 'checkout_init') {\n return;\n }\n var key = _model.$FptiConstants.stateName[to] || 'review';\n var landing_page = _model.$FptiConstants.landing_page[key];\n\n _logger.$logger.info('landing_page', {\n 'from': landing_page,\n 'to': 'process_page_loaded',\n fpti_landing_page: landing_page\n });\n });\n\n _angular.$rootScope.$on('page_reloaded', function () {\n _logger.$logger.flush(true);\n _model.$CalDataModel.generateMetaIds();\n });\n\n _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState) {\n var to = toState.name.replace(/\\./g, '_');\n\n if (toState.hasResolver && to) {\n _logger.$logger.info(to + '_load');\n } else if (to) {\n _logger.$logger.info(to + '_rendering');\n }\n });\n\n _angular.$rootScope.$on('addrDiff', function (event, addrDiff) {\n if (!addrDiff) {\n return;\n }\n _logger.$logger.info('checkout_fpti' + addrDiff);\n });\n\n function getHash(url) {\n if (!url || !~url.indexOf('#')) {\n // eslint-disable-line no-bitwise\n return;\n }\n\n url = url.split('#');\n return url[url.length - 1];\n }\n\n var oldHash = window.location.hash;\n\n window.addEventListener('hashchange', function (event) {\n _logger.$logger.info('hashchange', {\n from: getHash(event.oldURL || oldHash),\n to: getHash(event.newURL || window.location.hash)\n });\n oldHash = window.location.hash;\n });\n\n $(document).on('click', function (event) {\n if (event && event.target && event.target.tagName) {\n var name = event.target.tagName.toLowerCase();\n\n if (event.target.id) {\n name += '#' + event.target.id;\n } else if (event.target.attributes && event.target.attributes['ng-model']) {\n name += ':' + event.target.attributes['ng-model'].value;\n } else if (event.target.className) {\n name += '.' + event.target.className.split(' ').join('.');\n }\n\n _logger.$logger.info('click', { el: name });\n }\n });\n\n if (cplEnabled) {\n window.fptiserverurl = getBeaconUrl();\n\n var firstInvocation = true;\n var trackPageStart = function trackPageStart() {\n if (firstInvocation) {\n firstInvocation = false;\n return;\n }\n try {\n window.PAYPAL.analytics.startCPLTracking();\n } catch (e) {\n console.log('error starting cpl tracking ' + e);\n }\n };\n\n var firstDone = true;\n var trackDone = function trackDone(beaconData) {\n window.PAYPAL.analytics.endCPLTracking({\n pageData: addTrackingData(beaconData),\n inferStart: firstDone\n });\n firstDone = false;\n };\n\n var currentRoute = null;\n\n _angular.$rootScope.$on('startLoad', function () {\n return trackPageStart();\n });\n _angular.$rootScope.$on('$stateChangeSuccess', function (e, route) {\n currentRoute = route;\n });\n\n _angular.$rootScope.$on('allLoaded', function () {\n try {\n var buildParams = {\n productOverride: window.fptiProductOverride,\n trackingData: _fpti.$fpti.getPageTrackingData(currentRoute)\n };\n var legacyFptiData = new _builder.$FptiBuilder(buildParams).build()._dataObj;\n var product = window.fptiProductOverride || 'ec';\n\n legacyFptiData.pgrp = 'main:' + product + ':hermes';\n legacyFptiData.flid = token;\n trackDone(legacyFptiData);\n } catch (e) {\n console.log('error tracking CPL data ' + e);\n }\n });\n }\n});\n\n_index.$AuthModel;\n\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$config;\n\n_squid.$experiment;\n\n_logger.$logger;\n\n_model.$CalDataModel;\n\n_model.$FptiConstants;\n\n_builder.$FptiBuilder;\n\n_button.$ButtonTrackingService;\n\n_fpti.$fpti;\n\n_fpti.$fptiError;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/listener.js\n// module id = ../node_modules/xo-tracking/dist/listener.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _uuid = require('node-uuid/uuid');\n\nvar _uuid2 = _interopRequireDefault(_uuid);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular); /* eslint-disable angular/di */\n\n\n_angular2['default'].module().constant('$FptiConstants', {\n // The prototype of buzname data object\n buznameMap: {\n flowgatename: {\n placeHolder: '',\n fptiKey: 'fltp'\n },\n 'flowname': {\n placeHolder: 'ec:hermes:',\n fptiKey: 'flnm'\n },\n 'hier1': {\n placeHolder: 'main_ec_hermes_',\n fptiKey: 'shir'\n },\n 'inout': {\n placeHolder: 'inout',\n fptiKey: 'lgin'\n },\n 'pagename': {\n placeHolder: 'main:ec:hermes',\n fptiKey: 'pgrp'\n },\n 'pagename2': {\n placeHolder: 'main:ec:hermes',\n fptiKey: 'page'\n },\n 'version': {\n placeHolder: 'hermes',\n fptiKey: 'vers'\n }\n },\n // Full list of FPTI keys indexed by readable names\n // This mapping can also be served as default decorator\n fptiKeys: {\n 'businessType': 'bztp',\n 'correlationId': 'calc', // CalDataModel\n 'cust': 'cust',\n 'errorCode': 'eccd',\n 'fieldError': 'erfd',\n 'flowgatename': 'fltp', // buzname\n 'flowname': 'flnm', // buzname\n 'loggedIn': 'lgin', // buzname\n 'merchantId': 'mrid',\n 'merchantType': 'mbtp',\n 'pageError': 'erpg',\n 'pageGoal': 'goal', // route\n 'pageGroup': 'pgrp', // buzname\n 'pageName': 'page', // buzname\n 'pageQualifer': 'qual', // buzname\n 'pageStartTime': 'pgst', // FptiBuilder\n 'pageTechnologyFlag': 'pgtf', // productConfig\n 'paymentFlowId': 'pfid',\n 'rLogId': 'teal',\n 'sessionId': 'fpti',\n 'siteHierarchy': 'shir', // buzname\n 'sourceCi': 's', // productConfig\n 'tealeaf': 'teal',\n 'templateName': 'tmpl', // route\n 'transition_time': 'transition_time',\n 'uuid': 'csci', // CalDataModel\n 'version': 'vers', // buzname\n 'visitorId': 'vid',\n 'ecToken': 'fltk', // metadata\n 'pxpExpSelected': 'xe',\n 'pxpTreatementSelected': 'xt',\n 'pxpQualifiedTreatment': 'qt',\n 'pxpContextId': 'qc',\n 'dc': 'dc',\n 'az': 'az',\n 'comp': 'comp'\n },\n landing_page: {\n login: 'LOGIN',\n econsent: 'eConsent',\n review: 'Review',\n error_page: 'error_page',\n add_card: 'add_card',\n add_bank: 'add_bank',\n billing: 'billing',\n done_page: 'done_page',\n shoppingCart: 'shoppingCart',\n emptyCart: 'emptyCart',\n soldout: 'soldout',\n openButton: 'openButton'\n },\n stateName: {\n checkout_login: 'login',\n checkout_genericError: 'error_page',\n checkout_fastlogin: 'login',\n checkout_econsent: 'econsent',\n checkout_review: 'review',\n checkout_pageAddCard_addCardFlow_addCard: 'add_card',\n checkout_updateCard_addCardFlow_addCard: 'add_card',\n checkout_pageAddFi_bank_add: 'add_bank',\n guest: 'billing',\n checkout_done: 'done_page',\n checkout_guest: 'billing',\n checkout_signup: 'billing',\n guestupgrade_genericError: 'error_page',\n checkout_multistepsignup_multistepsignupaddcard: 'billing',\n checkout_shoppingCart: 'shoppingCart',\n checkout_emptyCart: 'emptyCart',\n checkout_soldout: 'soldout',\n checkout_openButton: 'openButton'\n }\n}).factory('$FptiDataModel', ['$FptiConstants', function ($FptiConstants) {\n var productConfig = {};\n\n // TODO to read from config.json\n productConfig[$FptiConstants.fptiKeys.sourceCi] = 'ci';\n productConfig[$FptiConstants.fptiKeys.pageTechnologyFlag] = 'NodeJS';\n\n /**\n * Utilizing Decorator pattern to allow defining additional logic for specific keys\n */\n return _squid.$Class.extend('FptiDataModel', {\n init: function init() {\n this._dataObj = _angular2['default'].extend({}, productConfig);\n this._decoratorList = [];\n },\n decorators: {\n buzname: function buzname(trackingData, pageQualifier, isInContext, productOverride) {\n if (!trackingData) {\n return;\n }\n\n var buzname = trackingData.buzname;\n\n if (!buzname) {\n return;\n }\n\n var buznameDiff = buzname[pageQualifier];\n\n if (!buznameDiff) {\n return;\n }\n\n var dataObj = this._dataObj;\n var buznameMap = $FptiConstants.buznameMap;\n // read app specific place holder from config\n var placeHolderConfig = _squid.$config && _squid.$config.fpti && _squid.$config.fpti.buznameEntryPlaceHolder;\n\n Object.keys(buznameMap).forEach(function (key) {\n var buznameEntry = buznameMap[key];\n var fptiKey = buznameEntry.fptiKey;\n var placeHolder = buznameEntry.placeHolder;\n\n if (buznameDiff[key]) {\n if (placeHolderConfig && placeHolderConfig[key]) {\n placeHolder = placeHolderConfig[key];\n }\n\n if (productOverride) {\n var _placeHolder$split = placeHolder.split(':'),\n main = _placeHolder$split[0],\n hermes = _placeHolder$split[2];\n\n placeHolder = main + ':' + productOverride + ':' + hermes;\n }\n\n dataObj[fptiKey] = buznameDiff[key].replace('%', placeHolder);\n } else {\n dataObj[fptiKey] = placeHolder;\n }\n });\n dataObj[$FptiConstants.fptiKeys.pageQualifer] = pageQualifier;\n },\n\n base: function base(_base) {\n if (_base) {\n for (var key in _base) {\n if (!this._dataObj[key]) {\n this._dataObj[key] = _base[key];\n }\n }\n }\n },\n\n locale: function locale(_locale) {\n if (_locale && _locale.country) {\n this._dataObj[$FptiConstants.fptiKeys.locale] = _locale.country;\n }\n },\n\n pxptrackingdata: function pxptrackingdata(pxpData) {\n var qt = [];\n var qc = [];\n var xe = [];\n var xt = [];\n\n _squid.$util.some(pxpData, function (trackInfo) {\n var match = trackInfo && trackInfo.tracking_tags && trackInfo.tracking_tags.match('\\\\bqt=([^;]+);');\n\n if (match) {\n qt.push(match[1]);\n }\n\n match = trackInfo && trackInfo.tracking_tags && trackInfo.tracking_tags.match('\\\\bqc=([^;]+);');\n if (match) {\n qc.push(match[1]);\n }\n\n _squid.$util.some(trackInfo.treatments, function (treatment) {\n xe.push(treatment.experiment_id);\n xt.push(treatment.treatment_id);\n });\n });\n\n this._dataObj[$FptiConstants.fptiKeys.pxpQualifiedTreatment] = qt.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpContextId] = qc.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpExpSelected] = xe.join(',');\n this._dataObj[$FptiConstants.fptiKeys.pxpTreatementSelected] = xt.join(',');\n },\n\n templateName: function templateName(trackingData, pageQualifier, isInContext) {\n if (trackingData && trackingData.templateName) {\n var templateName = (trackingData.templateName || '') + (pageQualifier ? ':' + pageQualifier : '');\n\n this._dataObj[$FptiConstants.fptiKeys.templateName] = templateName;\n }\n },\n\n fieldError: function fieldError(err) {\n if (err && err.type === 'fieldError') {\n this._dataObj[$FptiConstants.fptiKeys.fieldError] = err.field;\n this._dataObj[$FptiConstants.fptiKeys.errorCode] = err.code;\n }\n },\n\n pageError: function pageError(err) {\n if (err && err.type === 'pageError') {\n\n this._dataObj[$FptiConstants.fptiKeys.pageError] = err.msg;\n this._dataObj[$FptiConstants.fptiKeys.errorCode] = err.code;\n }\n }\n\n },\n decorate: function decorate(name) {\n this._decoratorList.push({\n name: name,\n params: Array.prototype.slice.call(arguments, 1)\n });\n return this;\n },\n getDataObject: function getDataObject(isInContext) {\n var i;\n var decorator;\n\n for (i = 0; i < this._decoratorList.length; i++) {\n decorator = this._decoratorList[i];\n if (!decorator) {\n continue;\n }\n var name = decorator.name;\n var params = decorator.params;\n\n if (_angular2['default'].isFunction(this.decorators[name])) {\n // Invoke the decorator and pass in the parameter list\n this.decorators[name].apply(this, params);\n } else {\n var fptiKey = $FptiConstants.fptiKeys[name];\n\n // If the fptiKey is defined and value is present, add the k-v pair\n if (fptiKey && params && params.length > 0) {\n this._dataObj[fptiKey] = params[0];\n }\n }\n }\n\n // 'fullpage' was widely used as default key in page routs definition\n // finally replace it here if it's incontext\n var dataObj = this._dataObj;\n\n if (isInContext) {\n Object.keys(dataObj).forEach(function (k) {\n if (_angular2['default'].isString(dataObj[k])) {\n // some values can be number\n dataObj[k] = dataObj[k].replace('fullpage', 'incontext');\n }\n });\n }\n\n return this._dataObj;\n }\n });\n}]).factory('$CalDataModel', function () {\n var uuid_v4_mask = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';\n var uuid_v1_mask = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';\n\n function _generateCorrelationId() {\n var uidRandomArr = (_uuid2['default'].v4() || uuid_v4_mask).split('-');\n var uidTime = (_uuid2['default'].v1() || uuid_v1_mask).split('-');\n\n return uidTime[0] + uidRandomArr[0].substr(0, 5);\n }\n\n function _generateUUID() {\n return (_uuid2['default'].v4() || uuid_v4_mask).replace(/-/g, '');\n }\n\n var CalModel = _squid.$Model.extend({\n _calCorrId: _generateCorrelationId(),\n _uuid: _generateUUID(),\n\n generateCalCorrId: function generateCalCorrId() {\n this._calCorrId = _generateCorrelationId();\n },\n generateUUID: function generateUUID() {\n this._uuid = _generateUUID();\n },\n generateMetaIds: function generateMetaIds() {\n this.generateCalCorrId();\n this.generateUUID();\n },\n\n getCalCorrId: function getCalCorrId() {\n return this._calCorrId;\n },\n\n getUUID: function getUUID() {\n return this._uuid;\n }\n });\n\n return new CalModel();\n});\n\n_squid.$Model;\n\n_squid.$Class;\n\n_squid.$util;\n\n_squid.$config;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-tracking/dist/model.js\n// module id = ../node_modules/xo-tracking/dist/model.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _ui = require('./ui');\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Adds role='button' and tabindex='0' to anchor elements\n// so that it is keyboard navigable and recognized by screen\n// readers as a button.\n//\n// As anchors without href do not fire their click event\n// automatically on a Space or ENTER key, this directive forces\n// that functionality.\n//\n// If something is assigned to the link-button attribute, then\n// it is used as an aria-label.\n(0, _squid.$registerDirective)('link-button', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var ariaLabel = (0, _angular.$parse)(attrs.linkButton)(scope);\n var $element = (0, _jquery2['default'])(element);\n\n $element.attr('role', 'button');\n $element.attr('tabindex', '0');\n if (ariaLabel) {\n $element.attr('aria-label', ariaLabel);\n }\n $element.on('keydown', function (event) {\n // do nothing if there is an alt or ctrl key as well\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n element[0].click();\n return false;\n default:\n break;\n }\n }\n return true;\n });\n }\n };\n});\n\n// this directive gives an element characteristics of a native\n// select element in terms of keyboard navigation. It becomes reachable\n// via the tab key, reflects screenreader characteristics and\n// can be activated by any of the DOWN, SPACE or ENTER KEYS.\n(0, _squid.$registerDirective)('select-button', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var $element = (0, _jquery2['default'])(element);\n if (!attrs.hasOwnProperty('disableRole')) {\n $element.attr('role', 'button');\n }\n\n $element.attr('aria-haspopup', 'true').attr('tabindex', '0').on('keydown', function (event) {\n // do nothing if there is an alt or ctrl key as well\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.DOWN:\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n element[0].click();\n return false;\n default:\n break;\n }\n }\n return true;\n });\n }\n };\n});\n\n// this directive makes a container with links act as if it were a select dropdown\n// in terms of keyboard accessibility. The following characteristics are implemented:\n//\n// * UP/RIGHT and DOWN/lEFT KEYS navigate through the options.\n// * ESC cancels and closes the dropdown\n// * SPACE or ENTER select an option\n// * You cannot TAB out of a dropdown until you select or cancel\n//\n// in addition, the following extra characteristics are implemented\n//\n// * The TAB (and SHIFT-TAB) key will also function to move between options\n// * Upon reaching the end of the list, the focus will shift back to the first item, and vice versa\n//\n// How to use:\n// 1. The select-cancel attribute is an agnostic expression to implement the cancel / back mechanic.\n// The expression is run whenever the ESC key is pressed.\n// 2. The select-allow-tab-escape attribute can be added alongside the select-box attribute to allow\n// tabs to escape the select-box element.\n(0, _squid.$registerDirective)('select-box', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var allowTabEscape = (0, _angular.isDefined)(attrs.selectAllowTabEscape);\n\n function escapeToggle() {\n if (attrs.selectCancel) {\n (0, _angular.$parse)(attrs.selectCancel)(scope);\n scope.$apply();\n }\n }\n\n element.attr('role', 'menu');\n\n element.on('keydown.selectBox', function (event) {\n var $allTabbable = (0, _ui.findAll)(element, _ui.tabbable);\n var $origin = (0, _jquery2['default'])(event.target);\n\n if (!(event.altKey || event.ctrlKey)) {\n var index = $allTabbable.index($origin);\n\n switch (event.keyCode) {\n case _ui.KEYS.TAB:\n if (allowTabEscape && (index === 0 && event.shiftKey || index === $allTabbable.length && !event.shiftKey)) {\n // Enable default behavior to escape select-box\n escapeToggle();\n break;\n } else if (event.shiftKey) {\n index = (index - 1 + $allTabbable.length) % $allTabbable.length;\n } else {\n index = (index + 1) % $allTabbable.length;\n }\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.DOWN:\n case _ui.KEYS.RIGHT:\n index = (index + 1) % $allTabbable.length;\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.UP:\n case _ui.KEYS.LEFT:\n index = (index - 1 + $allTabbable.length) % $allTabbable.length;\n $allTabbable.eq(index).focus();\n event.preventDefault();\n break;\n case _ui.KEYS.SPACE:\n case _ui.KEYS.ENTER:\n $origin.click();\n event.preventDefault();\n break;\n case _ui.KEYS.ESC:\n escapeToggle();\n break;\n default:\n break;\n }\n }\n });\n }\n };\n});\n\n// similar to select-box, this directive restrains tabbing within a container\n// to the container itself.\n//\n// 1. modal-cancel is the equivalent of select-cancel from select-box, and\n// should define a cancellation / ESC function.\n(0, _squid.$registerDirective)('modal-box', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function escapeToggle() {\n (0, _angular.$parse)(attrs.modalCancel)(scope);\n scope.$apply();\n }\n\n // Gets the index of the element that should be focused after pressing Tab\n function getNextIndex($element, $elements, shift) {\n if (shift) {\n return ($elements.index($element) - 1 + $elements.length) % $elements.length;\n } else {\n return ($elements.index($element) + 1) % $elements.length;\n }\n }\n\n if ((0, _angular.$parse)(attrs.modalBox)(scope) !== false) {\n element.on('keydown.modalBox', function (event) {\n var $allTabbable = (0, _ui.findAll)(element, _ui.tabbable);\n var $origin = (0, _jquery2['default'])(event.target);\n\n if (!(event.altKey || event.ctrlKey)) {\n switch (event.keyCode) {\n case _ui.KEYS.TAB:\n var index = getNextIndex($origin, $allTabbable, event.shiftKey);\n $allTabbable.eq(index).focus();\n event.preventDefault();\n event.stopPropagation();\n break;\n case _ui.KEYS.ESC:\n escapeToggle();\n event.preventDefault();\n event.stopPropagation();\n break;\n default:\n break;\n }\n }\n });\n }\n }\n };\n});\n\n// A simple version of modal that doesn't rely on controlling keyboard behavior\n// as strictly. Should be used in cases where tab items are not as easily accessible\n// via JS (ie. iframes)\n// Redirects focus to container when focusin event fired on element not in container\n(0, _squid.$registerDirective)('simple-modal', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n element.attr('tabindex', '-1');\n\n var cancelFn;\n if (attrs.modalCancel) {\n cancelFn = function cancelFn() {\n (0, _angular.$parse)(attrs.modalCancel)(scope);\n scope.$apply();\n };\n }\n\n function registerModal() {\n (0, _jquery2['default'])(document).on('focusin.simple-modal', function (event) {\n if (!element[0].contains(event.target)) {\n event.stopPropagation();\n element.focus();\n }\n });\n if (cancelFn) {\n (0, _jquery2['default'])(document).on('click.simple-modal', function (event) {\n if (!element[0].contains(event.target)) {\n deregisterModal();\n cancelFn();\n }\n });\n }\n }\n\n function deregisterModal() {\n (0, _jquery2['default'])(document).off('focusin.simple-modal');\n (0, _jquery2['default'])(document).off('click.simple-modal');\n }\n\n // Watch the expression provided to simpleModal and add modal behavior when\n // expression result changes to truthy\n if ((0, _angular.isDefined)(element.attr('simpleModal'))) {\n scope.$watch(attrs['simpleModal'], function (newVal) {\n if (newVal) {\n registerModal();\n } else {\n deregisterModal();\n }\n });\n } else {\n registerModal();\n }\n\n scope.$on('$destroy', deregisterModal);\n }\n };\n});\n\n// this directive gives an element characteristics of a native\n// option element in terms of aria attributes. It must be used\n// as a child of a selectBox for proper keyboard behavior as it\n// disables default tabbing behavior.\n//\n// The expression provided to the directive is used to set the\n// aria-selected attribute when the expression evaluates to true.\n(0, _squid.$registerDirective)('select-option', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n (0, _jquery2['default'])(element).attr('role', 'menuitem');\n if ((0, _angular.$parse)(attrs.selectOption)(scope)) {\n (0, _jquery2['default'])(element).attr('aria-selected', 'true');\n }\n }\n };\n});\n\n// adapted from http://stackoverflow.com/a/24416690\n// This directive makes the element focused when the expression\n// provided _changes_ to true.\n//\n// In order to avoid conflicts with autofocus when a page first loads,\n// adding the focused-once-before attribute will enable the expression\n// only if it has been focused on before.\n//\n// * if the element itself is not focusable, then it will locate the first focusable\n// element within it.\n// * if the additional attribute focus-element is provided, it is wrapped\n// as a jQuery element (could be selector string or actual element) and focused on\n// it will be parsed when the focus-when attribute is true\n// * if the attribute focus-on is provided, then the focus-when attribute is ignored and\n// the directive listens to the event specified by focus-on\n(0, _squid.$registerDirective)('focus-when', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n\n function locateAndFocus(active) {\n (0, _angular.$timeout)(function () {\n if (active) {\n // deal with figuring out which element to focus on\n var $elementToFocus = (0, _jquery2['default'])(); // start with \"monad\" to make life easier\n var directiveElementFocusable = (0, _ui.focusable)(element[0]);\n\n // this works by fallthrough. it will try each one\n // in succession until an element is found\n if (attrs.focusElement) {\n // scenario 1 - specific element provided\n $elementToFocus = (0, _ui.filterAll)((0, _angular.$parse)(attrs.focusElement)(scope), _ui.focusable);\n }\n\n if ($elementToFocus.length === 0 && !directiveElementFocusable) {\n // scenario 2 - element with directive is not focusable\n $elementToFocus = (0, _ui.findAll)(element, _ui.focusable);\n }\n\n // default / scenario 3 - no valid targets specified or found\n if ($elementToFocus.length === 0) {\n $elementToFocus = (0, _jquery2['default'])(element);\n }\n\n $elementToFocus.first().focus();\n }\n });\n }\n\n var active = true;\n\n if ('focusedOnceBefore' in attrs) {\n active = false;\n (0, _jquery2['default'])(element).on('focus', function () {\n active = true;\n });\n }\n\n if (attrs.focusRefreshOn) {\n scope.$on((0, _angular.$parse)(attrs.focusRefreshOn)(scope), function () {\n locateAndFocus(active);\n });\n } else {\n scope.$watch(attrs.focusWhen, function (val) {\n locateAndFocus(active && val);\n });\n }\n }\n };\n});\n\n// angularUI router specific - listens to a specific transition\n// defined in two attributes, focusWhenState (this directive) and TransitionsTo\nvar FOCUS_EVENT_NAME = 'accessible-focus';\n(0, _squid.$registerDirective)('focus-when-state', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n var startState = attrs.focusWhenState;\n var endState = attrs.transitionsTo;\n var transitionMessage = startState + ' > ' + endState;\n var unregisterEventFn = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n if (fromState.name === startState && toState.name === endState) {\n scope.$broadcast(FOCUS_EVENT_NAME, transitionMessage);\n }\n });\n\n scope.$on(FOCUS_EVENT_NAME, function (event, message) {\n if (message === transitionMessage) {\n (0, _angular.$timeout)(function () {\n return element[0].focus();\n });\n }\n });\n\n // see http://stackoverflow.com/a/27016855\n scope.$on('$destroy', unregisterEventFn);\n }\n };\n});\n\n// Listens for the next state transition and focuses an element provided by selector\n// Use with links where focus is needed to return to a specific element after the transition\n(0, _squid.$registerDirective)('focus-after-transition', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n element.on('click', function () {\n var focusSelector = attrs['focusAfterTransition'];\n var cancel = _angular.$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {\n cancel();\n (0, _angular.$timeout)(function () {\n (0, _jquery2['default'])(focusSelector).focus();\n });\n });\n });\n }\n };\n});\n\n// focuses on the first focusable element on a container containing form elements\n(0, _squid.$registerDirective)('form-autofocus', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n // wait for the entire DOM to settle down first\n (0, _angular.$timeout)(function () {\n var $allFocusable = (0, _ui.findAll)(element, _ui.focusable);\n if ($allFocusable.length > 0) {\n $allFocusable.first().focus();\n }\n });\n }\n };\n});\n\n// Change element to be focusable and tabbable or unfocusable if it is\n// not typically a focusable element by removing the tabindex attribute.\n(0, _squid.$registerDirective)('focusable', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n function setFocusable(value) {\n if (value) {\n element.attr('tabindex', 0);\n } else {\n element.removeAttr('tabindex');\n }\n }\n\n if (attrs.focusable) {\n scope.$watch(attrs.focusable, function (newVal) {\n if (newVal) {\n setFocusable(true);\n } else {\n setFocusable(false);\n }\n });\n } else {\n setFocusable(true);\n }\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$timeout;\n\n_angular.$rootScope;\n\n_angular.isDefined;\n\n_ui.KEYS;\n\n_ui.focusable;\n\n_ui.tabbable;\n\n_ui.findAll;\n\n_ui.filterAll;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/accessibility/directive.js\n// module id = ../node_modules/xo-ui-components/src/accessibility/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.filterAll = exports.findAll = exports.tabbable = exports.focusable = exports.visible = exports.KEYS = undefined;\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar KEYS = {\n TAB: 0x09,\n ENTER: 0x0D,\n ESC: 0x1B,\n SPACE: 0x20,\n LEFT: 0x25,\n UP: 0x26,\n RIGHT: 0x27,\n DOWN: 0x28\n};\n\nfunction visible(element) {\n return _jquery2['default'].expr.filters.visible(element) && !(0, _jquery2['default'])(element).parents().addBack().filter(function () {\n return _jquery2['default'].css(this, 'visibility') === 'hidden';\n }).length;\n}\n\n// ripped from http://stackoverflow.com/a/7668761\n/* istanbul ignore next */\nfunction focusable(element) {\n var nodeName = element.nodeName.toLowerCase();\n var isTabIndexNotNaN = !isNaN(_jquery2['default'].attr(element, 'tabindex'));\n var map;\n var mapName;\n var img;\n\n if (nodeName === 'area') {\n map = element.parentNode;\n mapName = map.name;\n if (!element.href || !mapName || map.nodeName.toLowerCase() !== 'map') {\n return false;\n }\n img = (0, _jquery2['default'])('img[usemap=#' + mapName + ']')[0];\n return !!img && visible(img);\n }\n return (/^(input|select|textarea|button|object)$/.test(nodeName) ? // eslint-disable-line no-nested-ternary\n !element.disabled : nodeName === 'a' ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) &&\n // the element and all of its ancestors must be visible\n visible(element);\n}\n\n/* istanbul ignore next */\nfunction tabbable(element) {\n var tabIndex = _jquery2['default'].attr(element, 'tabindex');\n var isTabIndexNaN = isNaN(tabIndex);\n\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element);\n}\n\nfunction filterAll(elements, filterFn) {\n return (0, _jquery2['default'])(elements).filter(function () {\n return filterFn(this);\n });\n}\n\nfunction findAll(container, filterFn) {\n return filterAll((0, _jquery2['default'])(container).find('*'), filterFn);\n}\n\nexports.KEYS = KEYS;\nexports.visible = visible;\nexports.focusable = focusable;\nexports.tabbable = tabbable;\nexports.findAll = findAll;\nexports.filterAll = filterAll;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/accessibility/ui.js\n// module id = ../node_modules/xo-ui-components/src/accessibility/ui.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index = require('xo-models/src/user/index');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoBanner', {\n tag: 'xo-banner',\n template: _template2['default'],\n transclude: true,\n props: {\n isNmj: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n // Need buyer_id from $AuthModel first to get the URL for the user profile photo\n models: function models() {\n return {\n auth: _auth.$AuthModel.instance().retrieve()\n };\n },\n userPhoto: function userPhoto(resolvers) {\n return resolvers.models.then(function (models) {\n return {\n photoData: _index.$UserPhotoModel.instance(models.auth.buyer_id).retrieve({\n params: {\n 'min_size': 45\n }\n })['catch'](function (error) {\n _logger.$logger.info('error_retrieve_user_photo');\n return {};\n })\n };\n });\n }\n },\n lifecycle: {\n populate: function populate() {\n var avatarElement = this.$element.find('#banner-picture');\n var auth = this.models.auth;\n var photoData = this.userPhoto.photoData;\n\n // Currently only showing initials for New Member Journey\n var showInitials = auth.first_name && auth.last_name && this.props.isNmj;\n\n if (avatarElement && auth.buyer_id) {\n // The \"phantom\" avatar image is displayed by default via CSS\n // background-image property. If the request for a user's\n // profile photo returns a URL, the background-image property\n // is replaced with that URL.\n\n // Show user photo for avatar\n if (photoData && photoData.photo_url) {\n avatarElement.css('background-image', 'url(\"' + photoData.photo_url + '\")');\n _logger.$logger.info('xoBanner_user');\n }\n\n // No user photo: show user initials instead of phantom image\n if (!photoData.photo_url && showInitials) {\n avatarElement.addClass('initials');\n this.initials = '' + auth.first_name[0] + auth.last_name[0];\n _logger.$logger.info('xoBanner_initials');\n }\n } else {\n // Leave the phantom avatar as the background image\n _logger.$logger.info('xoBanner_default');\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_auth.$AuthModel;\n\n_index.$UserPhotoModel;\n\n_logger.$logger;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/banner/directive.js\n// module id = ../node_modules/xo-ui-components/src/banner/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    {{ initials }}
    \\n
    \\n
    \"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/banner/template.html\n// module id = ../node_modules/xo-ui-components/src/banner/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCardLoader = undefined;\n\nvar _squid = require('squid');\n\nrequire('./styles');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCardLoader = exports.$xoCardLoader = _squid.$Component.extend('xoCardLoader', {\n tag: 'xo-card-loader',\n template: _template2['default'],\n props: {\n message: {\n type: 'str',\n required: false\n },\n state: {\n type: 'var',\n required: false\n },\n auth: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n this.ellipsis = function () {\n var email = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n\n var MAX_EMAIL_LEN = 30;\n var MAX_DOMAIN_LEN = 20;\n var MAX_USERNAME_LEN = MAX_EMAIL_LEN - MAX_DOMAIN_LEN;\n\n if (email.length <= MAX_EMAIL_LEN) {\n return email;\n }\n\n var userNameLength = email.indexOf('@');\n var domainLength = email.length - userNameLength;\n\n if (userNameLength > MAX_USERNAME_LEN && domainLength > MAX_DOMAIN_LEN) {\n return email.replace(new RegExp('(.{' + (MAX_USERNAME_LEN - 3) + '}).*(@.{' + (MAX_DOMAIN_LEN - 4) + '}).*'), '$1...$2...');\n } else if (userNameLength > MAX_USERNAME_LEN) {\n return email.replace(new RegExp('(.{' + (MAX_EMAIL_LEN - domainLength - 3) + '}).*(@.*)'), '$1...$2');\n } else {\n return email.replace(new RegExp('(.{' + (MAX_EMAIL_LEN - 3) + '}).*'), '$1...');\n }\n };\n }\n }\n});\n\nangular.value(\"$xoCardLoader\", $xoCardLoader);\n_squid.$Component;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/card-loader/directive.js\n// module id = ../node_modules/xo-ui-components/src/card-loader/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    {{ellipsis(auth.email)}}
    \\n
    \\n
    \\n
    \\n
    {{message}}
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/card-loader/template.html\n// module id = ../node_modules/xo-ui-components/src/card-loader/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoFiIcon = undefined;\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _index = require('xo-models/src/fiMeta/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoFiIcon = exports.$xoFiIcon = _squid.$Component.extend('xoFiIcon', {\n tag: 'xo-fi-icon',\n wrapperType: 'span',\n template: _template2['default'],\n transclude: true,\n props: {\n fi: {\n type: 'var',\n required: false\n },\n className: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n fiMeta: _index2['default'].instance(_angular.$rootScope.token).fetch()\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n var updateCardArt = function updateCardArt() {\n _this.retrievedCardArt = _this.models.fiMeta.getCardArt(_this.props.fi);\n\n if (_this.retrievedCardArt) {\n _this.cardStyle = {\n 'background-image': 'url(' + _this.retrievedCardArt + ')',\n 'background-size': 'contain',\n 'background-position': 'initial'\n };\n }\n };\n\n this.$watch('props.fi', updateCardArt);\n }\n }\n});\n\nangular.value(\"$xoFiIcon\", $xoFiIcon);\n_squid.$Component;\n\n_angular.$rootScope;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/cardicon/directive.js\n// module id = ../node_modules/xo-ui-components/src/cardicon/directive.js\n// module chunks = main-code-split","module.exports = \"\\n \\n\\n\\n
    \\n
    \\n
    \\n
    \\n\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/cardicon/template.html\n// module id = ../node_modules/xo-ui-components/src/cardicon/template.html\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nrequire('./styles.less');\n\n/**\n * This directive watches the model and listens to user input to look for arabic/hebrew/right-to-left language\n * unicode chars, then adds dir=\"rtl\" or dir=\"ltr\" attribute to input field\n *\n * Add directionality to the container html div element of a input field.\n *
    \n */\n(0, _squid.$registerDirective)('directionality', function () {\n return {\n restrict: 'A',\n link: function link(scope, element) {\n var currentWatchDeregister = void 0;\n var input = element.find('input');\n\n if (!input.length) {\n listenForInputRendered();\n return;\n }\n\n // If the input has not yet been rendered inside the container, listen for dom node inserted\n // then, if the node inserted is an input, we will use that element and init the directionality\n // listeners. The first input rendered is the one that will be captured by this directive.\n function listenForInputRendered() {\n element.bind('DOMNodeInserted', checkDOMNodeInserted);\n\n function checkDOMNodeInserted(event) {\n if (event && event.target && event.target.tagName === 'INPUT') {\n element.unbind('DOMNodeInserted', checkDOMNodeInserted);\n input = angular.element(event.target);\n init();\n }\n }\n }\n\n function setDirectionality(value) {\n if (value) {\n // set directionality to 'rtl' if the value has hebrew/arabic unicode chars.\n element.toggleClass('ltrOverride', !_squid.$util.hasRTL(value));\n } else {\n element.toggleClass('ltrOverride', _angular.$document.prop('documentElement').getAttribute('dir') !== 'rtl');\n }\n }\n\n function jqueryOnKeyupHandler(event) {\n setDirectionality(event.target.value);\n }\n\n // Reset directionality listeners when we transition from ltr -> rtl locale or vice versa\n function resetDirectionalityListener() {\n // remove directionality listeners that were set on prior locale\n input.unbind('keyup', jqueryOnKeyupHandler);\n if (currentWatchDeregister) {\n currentWatchDeregister();\n }\n\n // set new directionality listeners for the current locale if 'rtl'\n if (document.documentElement.getAttribute('dir') === 'rtl') {\n (0, _angular.$timeout)(function () {\n // Watch ng-model on input to set directionality if it contains RTL char\n currentWatchDeregister = scope.$watch(input.attr('ng-model'), function (value) {\n setDirectionality(value);\n });\n // jQuery listener for cases where ng-model is not populated until post validation\n input.on('keyup', jqueryOnKeyupHandler);\n });\n }\n }\n\n function init() {\n resetDirectionalityListener();\n scope.$on('localeChange', function () {\n resetDirectionalityListener();\n });\n }\n\n init();\n }\n };\n});\n\n/**\n * This directive watches the model for arabic/hebrew/right-to-left language unicode chars, then adds dir=\"rtl\"\n * or dir=\"ltr\" attribute to the html element.\n *\n * Add directionality-text=\"<>\" to the div or span or any element containing text.\n * <{{user.name}}\n */\n(0, _squid.$registerDirective)('directionality-text', function () {\n return {\n restrict: 'A',\n link: function link(scope, element, attrs) {\n if (document.documentElement.getAttribute('dir') === 'rtl') {\n var $element = $(element);\n\n (0, _angular.$timeout)(function () {\n if (attrs.directionalityText) {\n scope.$watch(attrs.directionalityText, function () {\n $element.toggleClass('ltrOverride', !_squid.$util.hasRTL((0, _angular.$parse)(attrs.directionalityText)(scope)));\n });\n } else {\n $element.toggleClass('ltrOverride', !_squid.$util.hasRTL(element.text()));\n }\n });\n }\n }\n };\n});\n\n_squid.$util;\n\n_squid.$registerDirective;\n\n_angular.$document;\n\n_angular.$parse;\n\n_angular.$timeout;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/directionality/directive.js\n// module id = ../node_modules/xo-ui-components/src/directionality/directive.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _angularAria = require('angularAria');\n\n// Configure angular aria.\n// Note that aria configuration applies globally\n_angularAria.$ariaProvider.config({ // eslint-disable-line angular/di\n // Remove bindRoleForClick since we use ngClick for several items that shouldn't be treated as buttons.\n bindRoleForClick: false,\n\n // Remove ariaInvalid and ariaRequired as we want to handle them ourselves.\n // These attributes should only be set once the form is submitted, to match what\n // visually what we display\n ariaInvalid: false,\n ariaRequired: false,\n // Removing aria-hidden attribute for hidden elements\n ariaHidden: false\n});\n\n(0, _squid.$registerDirective)('xo-error-tooltip', function () {\n return {\n restrict: 'A',\n require: ['?^form', '?ngModel'],\n link: function link(scope, element, attrs, ctrls) {\n var formCtrl = ctrls[0],\n modelCtrl = ctrls[1];\n\n\n function shouldBeRequired() {\n if (formCtrl) {\n // If input is a checkbox and has error-text or error-key, show the error text instead of the required text.\n // error-text is a legacy thing for backward compatibility, we can get rid of this once all teams\n // adopt error-key in all input tags\n var showCheckboxRequired = !(element.attr('type') === 'checkbox' && (attrs.errorText || attrs.errorKey));\n\n return formCtrl.$submitted && modelCtrl.$error.required && showCheckboxRequired;\n } else {\n return modelCtrl.$error.required;\n }\n }\n\n function shouldBeInvalid() {\n if (formCtrl) {\n return formCtrl.$submitted && modelCtrl.$invalid;\n } else {\n return modelCtrl.$invalid;\n }\n }\n\n // Add or remove a string into a space split string (eg. aria-describedby ids, class names)\n function formatSpaceSplitString(str, id, add) {\n var strArray = void 0;\n\n if (str) {\n strArray = str.split(' ');\n } else {\n strArray = [];\n }\n\n var idIndex = strArray.indexOf(id);\n\n if (~idIndex && !add) {\n strArray.splice(idIndex, 1);\n } else if (!~idIndex && add) {\n strArray.push(id);\n }\n\n return strArray.join(' ');\n }\n\n // Add tooltip behavior after DOM settles\n (0, _angular.$timeout)(function () {\n var generateId = function generateId() {\n return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);\n };\n var requiredId = generateId();\n var invalidId = generateId();\n var requiredError = void 0;\n var invalidError = void 0;\n\n if (attrs.errorKey) {\n element.addClass('hasErrorTooltipRuleSpecific');\n invalidError = (0, _angular.$compile)('
    {{content(\"' + attrs.errorKey + '\")}}
    ')(scope);\n element.after(invalidError);\n } else if (attrs.errorText) {\n // errorText if case is for backward compatibility, we can get rid of this once\n // all teams adopt error-key in all input tags for tooltip message display\n element.addClass('hasErrorTooltipRuleSpecific');\n invalidError = $('
    ' + attrs.errorText + '
    ');\n element.after(invalidError);\n }\n\n if (attrs.required || (0, _angular.$parse)(attrs.ngRequired)(scope)) {\n element.addClass('hasErrorTooltipRequired');\n requiredError = (0, _angular.$compile)('
    {{content(\"validation.required\")}}
    ')(scope);\n element.after(requiredError);\n element.removeAttr('aria-required');\n }\n\n function setAriaAttributes() {\n var addTooltips = {\n required: false,\n invalid: false\n };\n\n // Do not associate \"Required\" error with aria-describedby\n // because this should already be read out either by \"required\"\n // attribute or \"aria-required\"=true, and only associate \"Invalid\"\n // error if \"Required\" is not showing to match visuals\n if (shouldBeRequired()) {\n addTooltips.required = true;\n } else if (shouldBeInvalid()) {\n addTooltips.invalid = true;\n }\n\n var describedby = element.attr('aria-describedby');\n\n describedby = formatSpaceSplitString(describedby, requiredId, addTooltips.required);\n describedby = formatSpaceSplitString(describedby, invalidId, addTooltips.invalid);\n element.attr('aria-describedby', describedby);\n }\n\n scope.$watch(shouldBeRequired, function (newVal) {\n setAriaAttributes();\n });\n scope.$watch(shouldBeInvalid, function (newVal) {\n element.attr('aria-invalid', newVal);\n setAriaAttributes();\n });\n\n // Set scroll so that the error message is in view when element receives focus\n element.on('focus', function (event) {\n var windowBot = $(window).scrollTop() + $(window).height();\n var requiredBot = requiredError ? requiredError.offset().top + requiredError.outerHeight() : 0;\n var invalidBot = invalidError ? invalidError.offset().top + invalidError.outerHeight() : 0;\n\n if (windowBot < Math.max(requiredBot, invalidBot)) {\n $(window).scrollTop(Math.max(requiredBot, invalidBot) - $(window).height());\n }\n });\n });\n }\n };\n});\n\n_squid.$registerDirective;\n\n_angular.$parse;\n\n_angular.$compile;\n\n_angular.$timeout;\n\n_angularAria.$ariaProvider;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/error-tooltip/directive.js\n// module id = ../node_modules/xo-ui-components/src/error-tooltip/directive.js\n// module chunks = main-code-split","\n\nvar _index = require('xo-return-to-merchant/dist/index');\n\ndefine(['squid/index', 'text!./template.html', 'xo-models/src/user/index'], function (squid, template) {\n\n squid.module('xo-escape-hatch.closeFrame.directive', ['squid', 'xomodel.user']).directive('xoCloseFrame', [function () {\n return {\n template: template,\n\n restrict: 'E',\n\n scope: {\n redirectiframe: '=?',\n redirectLightbox: '=?'\n },\n\n controller: ['$scope', '$rootScope', '$populate', '$CheckoutInputDataModel', '$window', '$CheckoutAppDataModel', '$util', '$injector', '$logger', function ($scope, $rootScope, $populate, $CheckoutInputDataModel, $window, $CheckoutAppDataModel, $util, $injector, $logger) {\n\n $populate($scope, {\n checkoutAppData: $CheckoutAppDataModel.instance($rootScope.token)\n }).then(function () {\n var cancel_url = $scope.checkoutAppData.urls.cancel_url;\n\n $scope.checkoutInputData = $CheckoutInputDataModel.instance($scope.token);\n $scope.isIFrame = $util.isIFrame();\n\n $scope.closeFrame = function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n if (window.xchild) {\n if (window.xprops.onCancel) {\n return window.xprops.onCancel({\n token: $scope.token,\n cancelUrl: cancel_url\n });\n } else {\n return window.xchild.close();\n }\n }\n\n if ($scope.redirectLightbox) {\n var result = _index.$ReturnToMerchant.postToMerchant({\n operation: 'return_to_merchant',\n returnUrl: cancel_url,\n updateParent: true\n });\n\n // Otherwise we have no choice but to return to the merchant\n if (!result) {\n $util.redirect(cancel_url);\n }\n\n // TODO - Move out helios specific logic. Apps should provide a callback instead.\n } else if ($scope.redirectiframe) {\n $window.location.replace(cancel_url);\n\n // TODO - Move out helios specific logic. Apps should provide a callback instead.\n } else {\n\n var iFrameFlow = $injector.get('$IFrameFlow');\n\n $logger.info('HELIOS_FLOW_FALLBACK'); // overall fallbacks\n $logger.info('HELIOS_FALLBACK_TO_MERCHANT');\n $logger.info('HELIOS_FALLBACK_MERCHANT_USER_CANCELLED');\n\n var url = $scope.checkoutInputData.errorUrl('user_cancelled');\n\n if ($scope.auth && $scope.auth.code) {\n url += '&code=' + $scope.auth.code;\n }\n\n iFrameFlow.findWindowAndRedirect($scope.checkoutInputData, url);\n }\n $scope.$emit('exitFrame');\n };\n });\n }]\n };\n }]);\n});\n\n_index.$ReturnToMerchant;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js\n// module id = ../node_modules/xo-ui-components/src/escape-hatch/closeFrame/directive.js\n// module chunks = main-code-split","\n\ndefine(['squid/index', 'text!./template.html'], function (squid, template) {\n\n squid.module('xo-escape-hatch.escapeHatch.directive', ['squid']).directive('xoEscapeHatch', [function () {\n return {\n template: template,\n\n restrict: 'E',\n\n controller: ['$scope', '$rootScope', '$window', '$util', '$logger', function ($scope, $rootScope, $window, $util, $logger) {\n $scope.isIFrame = $util.isIFrame();\n $scope.closeFrame = function (event) {\n var url = $window.location.href && $window.location.href.split('#')[0] || '';\n\n if (url.indexOf('proxflow') > -1) {\n url = url.replace('proxflow', 'webapps/helios');\n }\n\n url += url.slice(-1) === '&' ? 'escape_hatch=1' : '&escape_hatch=1';\n\n if (url.indexOf('hermes') > -1 || url.indexOf('checkoutnow')) {\n $logger.info('HERMES_ESCAPE_HATCH_CLICKED');\n } else {\n $logger.info('HELIOS_ESCAPE_HATCH_CLICKED');\n }\n\n $window.top.location = url;\n $scope.$emit('exitFrame');\n };\n }]\n };\n }]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js\n// module id = ../node_modules/xo-ui-components/src/escape-hatch/escapeHatch/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ExperienceComponent = undefined;\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nvar _fiMeta = require('xo-models/src/fiMeta');\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $ExperienceComponent = exports.$ExperienceComponent = _squid.$Component.extend('ExperienceComponent', {\n tag: 'experience',\n template: _template2['default'],\n transclude: true,\n props: {\n flag: {\n type: 'str',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n // temporary until experience layer develops, which should do all of this logic via flag config (something like `experienceConfig.get('flag')`)\n fiMeta: _fiMeta2['default'].instance(_angular.$rootScope.token).fetch()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var negate = this.props.flag[0] === '!';\n var fiMeta = this.models.fiMeta;\n\n // lies\n\n this.renderExperience = fiMeta && fiMeta.cardArtEnabled();\n\n if (negate) {\n this.renderExperience = !this.renderExperience;\n }\n }\n }\n});\n\nangular.value(\"$ExperienceComponent\", $ExperienceComponent);\n_squid.$Component;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/experience/directive.js\n// module id = ../node_modules/xo-ui-components/src/experience/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/experience/template.html\n// module id = ../node_modules/xo-ui-components/src/experience/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoExpiredMessage', {\n tag: 'xo-expired-message',\n template: _template2['default'],\n props: {\n token: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()\n };\n }\n // TODO: currently `xo_hermes_preferred_expired_msg_review_page` pxp has been turned off\n // however, AuthRate team plans to turn back this experiment after moratorium\n // Also, please see uncomment similar logic from Hermesnodeweb (public/pages/xo-review)\n // experiments() {\n // return {\n // showPreferredExpiredMsg: $ExpiredMsgFactory.getPreferredExpiredPxpResult()\n // };\n // }\n\n },\n actions: {\n goToManageWallet: function goToManageWallet(fiID) {\n if (fiID) {\n _logger.$logger.info('update_expired_preferred');\n _uiRouter.$state.go('checkout.review.sidebar.sidebarUpdateCard.addCardFlow.addCard', {\n planId: fiID,\n doneUri: 'checkout.review'\n });\n } else {\n _logger.$logger.info('manage_expired_cards');\n _uiRouter.$state.go('checkout.review.sidebar.sidebarManageWallet');\n }\n }\n },\n\n lifecycle: {\n populate: function populate() {\n // if (this.experiments.showPreferredExpiredMsg === 'xo_hermes_preferred_expired_msg_review_page_treatment') {\n // this.preferredExpired = this.models.checkoutSession.getDisallowedPreferred();\n // }\n }\n }\n});\n\n\n_uiRouter.$state;\n\n_squid.$Component;\n\n_logger.$logger;\n\n_index.$CheckoutSessionModel;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/expired-message/directive.js\n// module id = ../node_modules/xo-ui-components/src/expired-message/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/expired-message/template.html\n// module id = ../node_modules/xo-ui-components/src/expired-message/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _fiMeta = require('xo-models/src/fiMeta');\n\nvar _fiMeta2 = _interopRequireDefault(_fiMeta);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles.less');\n\nrequire('../cardicon/directive');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Pulling out props to iterate over keys\nvar PROPS = {\n fi: {\n required: false,\n type: 'var'\n },\n plan: {\n required: false,\n type: 'var'\n },\n // Specifically override name\n nameOverride: {\n required: false,\n type: 'var'\n },\n // Ignore different rendering for PAD\n ignorePad: {\n required: false,\n type: 'var'\n },\n // Dont render extra details\n sparse: {\n required: false,\n type: 'var'\n },\n // Requires fi to be passed in\n showAmount: {\n required: false,\n type: 'var'\n },\n // Requires fi to be passed in\n showCurrencyCode: {\n required: false,\n type: 'var'\n },\n // Requires plan to be passed in\n showAllCurrencyCodes: {\n required: false,\n type: 'var'\n }\n};\n\nexports['default'] = _squid.$Component.extend('xoFiPanel', {\n tag: 'xo-fi-panel',\n template: _template2['default'],\n transclude: true,\n props: PROPS,\n resolve: {\n models: function models() {\n return {\n fiMeta: _fiMeta2['default'].instance(_angular.$rootScope.token).fetch()\n };\n }\n },\n lifecycle: {\n populate: function populate() {\n var _this = this;\n\n render.call(this);\n // Props on scope is not iterable, so creating a group to watch from the definition\n this.$watchGroup(Object.keys(PROPS).map(function (p) {\n return 'props.' + p;\n }), function () {\n return render.call(_this);\n });\n }\n }\n});\n\n// TODO: figure out pad rendering\n\nfunction render() {\n var _props = this.props,\n fi = _props.fi,\n plan = _props.plan,\n sparse = _props.sparse,\n showAmount = _props.showAmount,\n showCurrencyCode = _props.showCurrencyCode,\n showAllCurrencyCodes = _props.showAllCurrencyCodes,\n nameOverride = _props.nameOverride,\n ignorePad = _props.ignorePad;\n var fiMeta = this.models.fiMeta;\n\n\n this.name = nameOverride || fiMeta.getName(fi);\n\n var amount = void 0;\n var currencyCodes = void 0;\n var sld = {};\n var secondLineType = void 0;\n\n if (showAmount) {\n amount = fiMeta.getAmount(fi);\n } else if (showAllCurrencyCodes) {\n currencyCodes = fiMeta.getAllCurrencyCodes(plan).join(', ');\n } else if (showCurrencyCode) {\n currencyCodes = fiMeta.getCurrencyCode(fi);\n }\n\n if (!nameOverride && fiMeta.isPad(fi) && !ignorePad) {\n secondLineType = 'pad';\n\n var mask = fiMeta.getCardMask(fi);\n\n _squid.$util.extend(sld, mask);\n } else if (fi) {\n // Try to render a card mask\n var _mask = fiMeta.getCardMask(fi);\n\n if (_mask.before || _mask.after) {\n secondLineType = 'mask';\n _squid.$util.extend(sld, _mask);\n\n if (!sparse) {\n // MEFT/IACH info is only relevant in DE\n if (_squid.$locale.country === 'DE' && fiMeta.isMeft(fi)) {\n sld.meft = true;\n } else if (_squid.$locale.country === 'DE' && (\n // HACK: when ignorePad name, pretend this is Iach\n fiMeta.isIach(fi) || ignorePad)) {\n sld.iach = true;\n } else if (fiMeta.isEcheck(fi)) {\n sld.echeck = true;\n } else if (fiMeta.wallet.isChaseLinkedCard(fi)) {\n sld.chasePay = true;\n }\n }\n }\n }\n\n _squid.$util.extend(this, {\n amount: amount,\n currencyCodes: currencyCodes,\n secondLineData: sld,\n secondLineType: secondLineType\n });\n}\n\n_angular.$rootScope;\n\n_squid.$Component;\n\n_squid.$util;\n\n_squid.$locale;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/fi-panel/directive.js\n// module id = ../node_modules/xo-ui-components/src/fi-panel/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n
    \\n
    \\n
    \\n {{content('fundingInstruments.pad')}}\\n ({{currencyCodes}})\\n \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n {{name}}\\n \\n {{secondLineData.after}}\\n
    \\n
    \\n \\n Chase Pay | \\n \\n {{secondLineData.before}}\\n {{secondLineData.after}}\\n\\n \\n {{content('fundingInstruments.meft')}}\\n \\n \\n {{content('fundingInstruments.iach')}}\\n \\n \\n {{content('fundingInstruments.eCheck')}}\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/fi-panel/template.html\n// module id = ../node_modules/xo-ui-components/src/fi-panel/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoLink', {\n tag: 'xo-link',\n template: _template2['default'],\n props: {\n onClick: {\n type: 'var',\n required: false\n },\n leftIcon: {\n type: 'str',\n required: false\n },\n rightIcon: {\n type: 'str',\n required: false\n },\n goTo: {\n type: 'str',\n required: false\n },\n label: {\n type: 'str',\n required: false\n }\n },\n\n actions: {\n onClick: function onClick(event) {\n var _props = this.props,\n onClick = _props.onClick,\n goTo = _props.goTo;\n\n\n if (onClick) {\n onClick(event);\n }\n\n if (goTo) {\n _uiRouter.$state.go(goTo);\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_uiRouter.$state;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/link/directive.js\n// module id = ../node_modules/xo-ui-components/src/link/directive.js\n// module chunks = main-code-split","module.exports = \"\\n {{props.label}}\\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/link/template.html\n// module id = ../node_modules/xo-ui-components/src/link/template.html\n// module chunks = main-code-split","\n\ndefine(['squid/index', 'text!./template.html'], function (squid, template) {\n squid.module('xo-message.directive', ['squid']).directive('xoMessage', ['$timeout', '$loader', '$rootScope', function ($timeout, $loader, $rootScope) {\n return {\n scope: {\n message: '=?', // Expected type - {msgs: [], type: \"info|error|success|warning\"}\n isgreyheader: '=?'\n },\n template: template,\n link: function link(scope, element, attrs) {\n\n // Hide and show the alerts so that messages can be registered by\n // screen reader even if they are repeats. Uses $timeout to\n // wait for DOM before showing alerts again.\n var toggleAlert = function toggleAlert() {\n var $alert = element.find('ul');\n $alert.detach();\n $timeout(function () {\n element.find('#pageLevelErrors').append($alert);\n });\n };\n\n // Toggle the alert whenever message changes by removing it and reappending it\n // to the DOM. Should fire even if message\n // is changed to the same, as assumes that the message should be reapplied.\n var cancel;\n scope.$watchCollection('message', function () {\n if ($loader.isLoading() && !cancel) {\n // If loading, toggle the alert after all loading calls have been made.\n // This is so that the alert can be read by screen reader after focus\n cancel = $rootScope.$on('allLoaded', function () {\n cancel();\n toggleAlert();\n\n cancel = null;\n });\n } else {\n toggleAlert();\n }\n });\n\n scope.$on('$destroy', function () {\n if (cancel) {\n cancel();\n }\n });\n }\n };\n }]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/message/directive.js\n// module id = ../node_modules/xo-ui-components/src/message/directive.js\n// module chunks = main-code-split","\n\nrequire('../accessibility/directive');\n\nvar _squid = require('squid');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Directives used in the template\n(0, _squid.$registerDirective)('xoModal', function () {\n return {\n template: _template2['default'],\n restrict: 'E',\n replace: true,\n transclude: true,\n scope: {\n show: '=?',\n showCloseButton: '=?',\n enableCloseOnEscape: '=?',\n onClose: '=?',\n enableMobileInterstitial: '@?',\n overrideDefaultContainer: '@?' // Boolean to determine if default styling should be applied to container\n },\n controller: ['$scope', function ($scope) {\n $scope.animate = false; // Don't animate until triggered\n $scope.showOverlay = $scope.show;\n\n var escapeKeyHandler = function escapeKeyHandler($event) {\n if ($event.keyCode === 27) {\n // Escape key maps to keycode 27\n $scope.hideModal();\n }\n };\n\n if ($scope.enableCloseOnEscape) {\n // Handle escape button as close button click\n $(document).bind('keyup', escapeKeyHandler);\n }\n\n $scope.hideModal = function ($event) {\n if ($event) {\n $event.preventDefault();\n }\n\n $scope.show = false;\n $(document).unbind('keyup', escapeKeyHandler);\n if ($scope.onClose) {\n $scope.onClose();\n }\n };\n }],\n\n link: function link($scope, elem, attrs) {\n // HACK: without this check, the modal slides down/fades out upon it being rendered\n $scope.$watch('show', function (newVal, oldVal) {\n if (oldVal !== newVal) {\n // When the show prop changes\n $scope.animate = true; // Ensure the modal is animated\n }\n });\n }\n };\n});\n\n_squid.$registerDirective;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/modal/directive.js\n// module id = ../node_modules/xo-ui-components/src/modal/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n\\t
    \\n\\t
    \\n\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t\\t{{ content('common.back') }}\\n\\t\\t
    \\n\\t
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/modal/template.html\n// module id = ../node_modules/xo-ui-components/src/modal/template.html\n// module chunks = main-code-split","\n\ndefine(['jquery', 'squid/index'], function ($, squid) {\n\n squid.module('xo-popup.directive', ['squid']).directive('xoPopup', ['$window', '$util', function ($window, $util) {\n return {\n restrict: 'A',\n\n link: function link(scope, element, attr) {\n\n element.on('click', function (event) {\n event.preventDefault();\n event.stopPropagation();\n\n var config = {\n popupUrl: attr.href,\n popupWindowName: 'popup',\n width: 835,\n height: 500,\n\n popupWindowFeatures: {\n location: 1,\n status: 1,\n scrollbars: 1,\n resizable: 1,\n toolbar: 0,\n menubar: 0\n }\n };\n\n scope.trackExternalLink(attr.id || 'external_link');\n\n var isOneTouch = $util.param('isOneTouch');\n\n if (/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)|PLAYSTATION|iPadApp/i.test($window.navigator.userAgent) && isOneTouch !== '1') {\n scope.$emit('showModal', config);\n return false;\n }\n\n if ($(element).hasClass('smallPopup')) {\n config.width = 385;\n }\n\n var left = 0;\n var top = 0;\n\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - config.width) / 2) + window.screenX;\n top = Math.round((window.outerHeight - config.height) / 2) + window.screenY;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - config.width) / 2);\n top = Math.round((window.screen.height - config.height) / 2);\n }\n\n var features = Object.keys(config.popupWindowFeatures).map(function (k) {\n return k + '=' + config.popupWindowFeatures[k];\n }).join(',');\n\n // put together WindowFeatures, since, window.open needs it as a string\n features += ',width=' + config.width + ',height=' + config.height + ',left=' + left + ',top=' + top;\n\n var popup = $window.open(config.popupUrl, config.popupWindowName, features);\n\n if (popup.focus) {\n popup.focus();\n }\n });\n },\n\n controller: ['$scope', '$logger', function ($scope, $logger) {\n $scope.trackExternalLink = function (linkName) {\n $logger.info(linkName);\n };\n }]\n };\n }]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/popup/directive.js\n// module id = ../node_modules/xo-ui-components/src/popup/directive.js\n// module chunks = main-code-split","\n\ndefine(['jquery', 'squid/index', 'text!./template.html', 'xo-beaver/dist/logger'], function ($, squid, template) {\n\n squid.module('xo-spinner.directive', ['squid', 'beaver']).directive('xoSpinner', [function () {\n\n return {\n scope: {},\n template: template,\n controller: ['$scope', '$element', '$rootScope', '$locale', '$logger', '$loader', '$timeout', function ($scope, $element, $rootScope, $locale, $logger, $loader, $timeout) {\n var $body = angular.element(document.getElementsByTagName('body'));\n var $priorActiveElement = $();\n var $capturedElement = $();\n var $header = $('header');\n var $slidingArea = $('#main');\n var $footer = $('footer');\n\n /**\n * This hides page content from any screen readers.\n * When the spinner's active, the only thing that should be read out is the \"Loading...\" text.\n *\n * The only crappy thing here is the spinner's nested deep in the content, so please excuse this jQuery crap.\n * At the very least, let's cache these selectors :|\n */\n function hidePageContentFromScreenReader(toggle) {\n $header.attr('aria-disabled', toggle);\n $slidingArea.attr('aria-disabled', toggle);\n $footer.attr('aria-disabled', toggle);\n }\n\n function preventDefault(event) {\n var _event$target = event.target;\n _event$target = _event$target === undefined ? {} : _event$target;\n var targetId = _event$target.id;\n\n // Only call preventDefault if the target is not a captcha input.\n // If the target is a captcha input we don't want to prevent the\n // user from entering the captcha code.\n\n if (targetId !== 'captchaCode') {\n event.preventDefault();\n }\n }\n\n function captureFocus(event) {\n if (!$element.has(event.target).length) {\n $capturedElement = $(event.target);\n }\n }\n\n function setLoadingMessage(message) {\n if (angular.isObject(message)) {\n $scope.message = message.heading;\n $('#spinnerMessage').css('font-size', '17.5px');\n $('#spinnerMessage').html(message.heading);\n $('#spinnerSubHeading').html(message.subHeading);\n } else {\n $scope.message = message;\n $('#spinnerMessage').html(message);\n }\n }\n\n function showSpinner() {\n $scope.loading = true;\n $logger.info('show_loading_spinner');\n $body.addClass('loading');\n\n // remember what was previously focused\n $priorActiveElement = $(':focus');\n\n $(':input, a').blur();\n\n hidePageContentFromScreenReader(true);\n\n if ($loader.firstLoad()) {\n setLoadingMessage($locale.content.get('base.processing'));\n }\n\n // focus on the message so that screen readers will let the user know the page is loading\n $(document).on('keydown', preventDefault);\n $(document).on('focusin', captureFocus);\n $timeout(function () {\n $('#spinner-message').focus();\n });\n }\n\n function hideSpinner() {\n $scope.loading = false;\n $logger.info('hide_loading_spinner');\n $('#preloaderSpinner').hide();\n $body.removeClass('loading');\n $(document).off('keydown', preventDefault);\n $(document).off('focusin', captureFocus);\n\n hidePageContentFromScreenReader(false);\n\n // Focus captured element if focus was given to an element while spinner was active.\n if ($capturedElement.length && $(document.body).has($capturedElement).length) {\n $capturedElement.focus();\n // Focus element that had focus before if it is still within the document\n } else if ($priorActiveElement.length && $(document.body).has($priorActiveElement).length) {\n $priorActiveElement.focus();\n } else {\n // If focus is not managed, default to focusing sliding area. Fixes FF and IE bug where tab focus starts from\n // the element last clicked, rather than top of page.\n $slidingArea.focus();\n }\n $priorActiveElement = $();\n $capturedElement = $();\n }\n\n var cancelStartLoad = $rootScope.$on('startLoad', showSpinner);\n var cancelAllLoaded = $rootScope.$on('allLoaded', hideSpinner);\n\n var cancelSetLoadingMessage = $rootScope.$on('loadingMessage', function (event, text) {\n setLoadingMessage(text);\n });\n\n $scope.$on('$destroy', function () {\n hideSpinner();\n cancelStartLoad();\n cancelAllLoaded();\n cancelSetLoadingMessage();\n });\n\n if ($loader.isLoading()) {\n showSpinner();\n }\n }]\n };\n }]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/spinner/directive.js\n// module id = ../node_modules/xo-ui-components/src/spinner/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nvar _utils = require('./utils');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoStickyCta', {\n tag: 'xo-sticky-cta',\n template: _template2['default'],\n transclude: true,\n props: {\n eligibility: {\n type: 'var',\n required: false\n }\n },\n resolve: {},\n lifecycle: {\n populate: function populate() {\n _logger.$logger.info('xoStickyCta_populate_' + this.eligibility);\n if (!this.eligibility) {\n return;\n }\n var position = this.eligibility;\n var stickyContent = document.getElementById('sticky-content');\n var stickyPlaceholder = document.getElementById('sticky-placeholder-' + position);\n var foundContentDom = Boolean(stickyContent);\n var placeholderIsVisible = (0, _utils.isInViewport)(stickyPlaceholder);\n\n angular.element(stickyContent).addClass('sticky-' + position + '-off');\n\n _logger.$logger.info('xoStickyCta_init', {\n foundContentDom: foundContentDom,\n placeholderIsVisible: placeholderIsVisible,\n position: position\n });\n\n /**\n * TODO: Replace sticky logic with 'position:sticky' only when\n * there is greater browser compatibility. It is more seamless.\n * When using 'position:sticky' revert 'overflow:hidden' else sticky is not possible.\n * angular.element(document.getElementById('sliding-area')).css('overflow', 'inherit');\n */\n\n /**\n * Current Logic: if the stickyContent DOM is found in html then\n * - if placeholder is visible on screen -> fix the DOM position to its regular position\n * - if placeholder is not visible on screen -> we make the DOM float\n */\n\n var isFloating = false;\n\n var bindHandler = function bindHandler(event) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n isFloating: isFloating,\n position: position,\n currentState: _angular.$rootScope.currentState\n });\n };\n\n var stateHandler = function stateHandler(event, toState, toParams, fromState) {\n /**\n * TODO:\n * try to use something like .trayOpen -> great grand child .sticky via css\n * this is required for cases when overlay or sidebar is opened.\n */\n var review = 'checkout.review';\n var to = toState && toState.name;\n var from = fromState && fromState.name;\n\n var conflict = from === to;\n var leaving = !conflict && from === review;\n var entering = !conflict && to === review;\n\n if (leaving) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n force: 'off',\n position: position\n });\n }\n if (entering) {\n isFloating = (0, _utils.stickyHandler)(stickyPlaceholder, stickyContent, {\n isFloating: isFloating,\n position: position,\n currentState: _angular.$rootScope.currentState\n });\n }\n\n _logger.$logger.info('xoStickyCta_stateChangeSuccess', { to: to, from: from, isFloating: isFloating });\n };\n\n angular.element(_angular.$window).bind('scroll', bindHandler).bind('resize', bindHandler);\n // .bind('orientationchange', bindHandler); // TODO\n\n var stateChangeListener = _angular.$rootScope.$on('$stateChangeSuccess', stateHandler);\n\n this.$on('$destroy', function () {\n _logger.$logger.info('xoStickyCta_destroy');\n angular.element(_angular.$window).unbind('scroll', bindHandler) // remove only the handlers used in this element\n // .bind('orientationchange', bindHandler) // TODO\n .unbind('resize', bindHandler); // remove only the handlers used in this element\n stateChangeListener();\n });\n }\n }\n});\n\n\n_squid.$Component;\n\n_logger.$logger;\n\n_angular.$window;\n\n_angular.$rootScope;\n\n_utils.isInViewport;\n\n_utils.stickyHandler;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/sticky-cta/directive.js\n// module id = ../node_modules/xo-ui-components/src/sticky-cta/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/sticky-cta/template.html\n// module id = ../node_modules/xo-ui-components/src/sticky-cta/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n/**\n * Checks if provided element is currently visible.\n * \n * @param {any} element: Reference to DOM object\n * @returns {Boolean}\n */\nvar isInViewport = exports.isInViewport = function isInViewport(element) {\n var bounding = element.getBoundingClientRect();\n\n return (\n // check if element is bellow top most pixel\n // check if element is on the right of left most pixel\n // check if element is above the lowest pixel on screen\n // check if element is on the left of the right most pixel\n bounding.top >= 0 && bounding.left >= 0 && bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) && bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n};\n\n/**\n * Make the element provided sticky\n * \n * @param {any} placeholder: Reference to placeholder DOM object\n * @param {any} element: Reference to DOM object\n * @param {string} position: where the element is located ('top', 'bottom').\n */\nvar makeSticky = exports.makeSticky = function makeSticky(placeholder, element, position) {\n var elementHeight = element.offsetHeight;\n\n angular.element(element).addClass('sticky').addClass('sticky-' + position).removeClass('sticky-' + position + '-off');\n angular.element(placeholder).css('height', elementHeight);\n return true;\n};\n\n/**\n * Make the element provided fixed to regular location\n * \n * @param {any} placeholder: Reference to placeholder DOM object\n * @param {any} element: Reference to DOM object\n * @param {string} position: where the element is located ('top', 'bottom').\n */\nvar removeSticky = exports.removeSticky = function removeSticky(placeholder, element, position) {\n angular.element(element).removeClass('sticky').removeClass('sticky-' + position).addClass('sticky-' + position + '-off');\n angular.element(placeholder).css('height', '');\n return false;\n};\n\n/**\n * Decides when to enable or disable sticky effect on DOM\n * \n * @param {any} stickyPlaceholder: Reference to DOM object\n * @param {any} stickyContent: Reference to DOM object \n * @param {any} context: context related to current state of DOM\n * @returns {Boolean}: Updated state of DOM\n */\nvar stickyHandler = exports.stickyHandler = function stickyHandler(stickyPlaceholder, stickyContent, context) {\n var position = context.position,\n force = context.force,\n currentState = context.currentState,\n isFloating = context.isFloating;\n\n\n if (force === 'off') {\n return removeSticky(stickyPlaceholder, stickyContent, position);\n }\n\n var alreadyFloating = isInViewport(stickyPlaceholder) && isFloating;\n var canEnable = !isInViewport(stickyPlaceholder) && !isFloating && currentState === 'checkout_review';\n\n if (alreadyFloating) {\n return removeSticky(stickyPlaceholder, stickyContent, position);\n } else if (canEnable) {\n return makeSticky(stickyPlaceholder, stickyContent, position);\n } else {\n return isFloating;\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/sticky-cta/utils.js\n// module id = ../node_modules/xo-ui-components/src/sticky-cta/utils.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction getDefaultShowEvent($el) {\n return $el.is('a') || $el.is('button') ? 'click' : 'focus';\n}\n\n// Modify the aria-describedby property to include the id when showing the element so contents are properly read\nfunction addDescribedById($el, id) {\n var describedByIds = $el.attr('aria-describedby') ? $el.attr('aria-describedby').split(' ') : [];\n\n if (!~describedByIds.indexOf(id)) {\n describedByIds.push(id);\n }\n\n $el.attr('aria-describedby', describedByIds.join(' '));\n}\n\n// Modify the aria-describedby attribute to remove the id when hiding the element so contents are no longer read\nfunction removeDescribedById($el, id) {\n var describedByIds = $el.attr('aria-describedby') || '';\n\n $el.attr('aria-describedby', describedByIds.split(' ').filter(function (existingId) {\n return existingId !== id;\n }).join(' '));\n}\n\nvar isMouseTypeEvent = function isMouseTypeEvent(type) {\n return (/mouse/.test(type)\n );\n};\n\nfunction debounceOnMouseTrigger(type, fn) {\n var isMouseType = isMouseTypeEvent(type);\n\n return function () {\n var _arguments = arguments;\n\n if (isMouseType) {\n (0, _angular.$timeout)(function () {\n return fn.apply(null, _arguments);\n }, 250);\n } else {\n fn.apply(null, arguments);\n }\n };\n}\n\nexports['default'] = _squid.$Component.extend('xoTooltip', {\n tag: 'xo-tooltip',\n template: _template2['default'],\n transclude: true,\n props: {\n trigger: {\n type: 'str',\n required: false\n },\n showEvent: {\n type: 'str',\n required: false\n },\n hideEvent: {\n type: 'str',\n required: false\n },\n displayInline: {\n type: 'var',\n required: false\n },\n align: {\n type: 'str',\n required: false\n }\n },\n lifecycle: {\n populate: function populate() {\n var $element = this.$element,\n trigger = this.trigger;\n\n var $trigger = $(trigger);\n var toolTip = $element.find('.toolTip');\n var toolTipID = this.toolTipID = 'toolTip_' + Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 7);\n var isMouseOver = false;\n\n /**\n * Toggle the show/hide state of the tooltip\n */\n var toggle = function toggle(event) {\n if (toolTip.length && toolTip.is(':visible')) {\n close(event);\n } else {\n show(event);\n }\n };\n\n /**\n * Show the tooltip, if not already shown.\n */\n var show = function show(event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n addDescribedById($trigger, toolTipID);\n\n // Show the tooltip and position the page scroll to include the element on page\n $element.show();\n toolTip.slideDown({\n progress: function progress() {\n var windowBot = $(window).scrollTop() + $(window).height();\n var toolTipBot = toolTip.offset().top + toolTip.outerHeight();\n if (toolTipBot > windowBot) {\n $(window).scrollTop(toolTipBot - $(window).height());\n }\n }\n });\n };\n\n /**\n * Hide the tooltip\n */\n var close = function close(event) {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n\n if (!isMouseOver) {\n if (toolTip.length && toolTip.is(':visible')) {\n toolTip.slideUp(100, function () {\n $element.hide();\n });\n } else {\n $element.hide();\n }\n\n removeDescribedById($trigger, toolTipID);\n }\n };\n\n /**\n * Setting up the DOM behavior for this component\n */\n // Set defaults for showEvent and hideEvent if not provided\n this.showEvent = this.showEvent || getDefaultShowEvent($element);\n this.hideEvent = this.hideEvent || 'blur';\n\n var SHOW_EVENT = this.showEvent + '.toolTip';\n var HIDE_EVENT = this.hideEvent + '.toolTip';\n\n // Initially hide the tooltip\n $element.hide();\n\n // If tooltip is clicked, don't bubble up and trigger parent handlers\n $element.on('click', function (event) {\n return event.stopPropagation();\n });\n\n // If the tooltip contains an element with a \"close\" class, treat it as a close button\n $element.on('click', '.close', close);\n\n // Track whether the mouse is on the tooltip or not\n $element.on('mouseover', function () {\n isMouseOver = true;\n });\n $element.on('mouseleave', function () {\n isMouseOver = false;\n });\n\n // Clicking anywhere on the document not on the tooltip will close the tooltip.\n // Event is not passed so that other actions are not prevented\n $(document).on('click.toolTip', function (e) {\n // Needed because when the trigger is clicked, this click handler will also be fired.\n // So without this check the tooltip will open due to the trigger click and then this\n // document event handler would immediately close it\n if (!$trigger.is(e.target)) {\n close();\n } else {\n show();\n }\n });\n\n // Register the handlers to show and hide the tooltip\n if (this.showEvent === this.hideEvent) {\n $trigger.on(SHOW_EVENT, toggle);\n $element.on(SHOW_EVENT, toggle);\n } else {\n $trigger.on(SHOW_EVENT, show);\n $trigger.on(HIDE_EVENT, debounceOnMouseTrigger(this.hideEvent, close));\n // Also allow close event to happen on the tooltip itself, for mouse type events\n $element.on(HIDE_EVENT, debounceOnMouseTrigger(this.hideEvent, close));\n }\n\n // Clean up external listeners on exit\n this.$on('$destroy', function () {\n $(document).off('click.toolTip');\n $trigger.off(SHOW_EVENT);\n $trigger.off(HIDE_EVENT);\n close();\n });\n }\n }\n});\n\n\n_angular.$timeout;\n\n_squid.$Component;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/tooltip/directive.js\n// module id = ../node_modules/xo-ui-components/src/tooltip/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/tooltip/template.html\n// module id = ../node_modules/xo-ui-components/src/tooltip/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCardLoader = undefined;\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _popupHandler = require('./popupHandler');\n\nvar _popupHandler2 = _interopRequireDefault(_popupHandler);\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCardLoader = exports.$xoCardLoader = _squid.$Component.extend('xoAssistBanner', {\n tag: 'xo-assist-banner',\n template: _template2['default'],\n props: {\n header: {\n type: 'var',\n required: false\n },\n body: {\n type: 'var',\n required: false\n },\n hideHighlight: {\n type: 'var',\n required: false\n }\n },\n lifecycle: {\n enter: function enter() {\n _logger.$logger.info('xo-assist-banner_enter');\n }\n },\n controller: ['$scope', function ($scope) {\n _logger.$logger.info('xo-assist-banner:controller');\n $scope.token = _angular.$rootScope.token;\n $scope.showFeedback = function () {\n return !_index.$DeviceInfo.isDevice();\n };\n $scope.showOL = function (event) {\n event.preventDefault();\n var placeholder = 'main:ec:hermes';\n var page = _uiRouter.$state.current.get('trackingData.buzname.fullpage.pagename2', 'unknown').replace('%', placeholder);\n var data = {\n opVars: {\n rlogId: _angular.$window.meta.rlogId || '',\n page: page || window.location.hash,\n csci: 'Unknown',\n calc: _angular.$window.meta.correlationId,\n custId: 'Unknown',\n merchantId: 'Unknown',\n token: $scope.token || 'Unknown'\n },\n locale: {\n country: _squid.$locale.country,\n languageCode: _squid.$locale.lang + '_' + _squid.$locale.country\n }\n };\n\n (0, _popupHandler2['default'])(data);\n };\n }]\n});\n\nangular.value(\"$xoCardLoader\", $xoCardLoader);\n_uiRouter.$state;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_angular.$rootScope;\n\n_angular.$window;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/user-assist-banner/directive.js\n// module id = ../node_modules/xo-ui-components/src/user-assist-banner/directive.js\n// module chunks = main-code-split","\n\ndefine([], function () {\n\n var _doc = document;\n var _w = window;\n var _tm = new Date().getTime();\n var _sH = screen.height;\n var _ht = escape(_w.location.href); // eslint-disable-line block-scoped-var,no-undef\n var _hr = escape(_doc.referrer); // eslint-disable-line block-scoped-var,no-undef\n var _sW = screen.width;\n\n function popUp(opinionlabURL) {\n _w.open(opinionlabURL, 'comments', 'width=535,height=192' + ',screenX=' + (_sW - 535) / 2 + ',screenY=' + (_sH - 192) / 2 + ',top=' + (_sH - 192) / 2 + ',left=' + (_sW - 535) / 2 + ',resizable=yes' + ',copyhistory=yes' + ',scrollbars=no');\n }\n\n function updateCustomVars(data) {\n\n var opVars = data.opVars;\n var locale = data.locale;\n\n _ht = 'https://' + locale.country + '.paypal.com/' + locale.languageCode + '/00/' + escape(opVars.page.replace(/\\s|\\//g, '_')) + '.page'; // eslint-disable-line block-scoped-var,no-undef\n\n var customVar = (opVars.rlogId || opVars.calc) + '|' + opVars.csci + '|' + opVars.page + '|' + locale.country + '|' + locale.languageCode + '|' + opVars.custId + '|' + opVars.merchantId + '|' + opVars.token + '|' + 'Unknown';\n return customVar;\n }\n\n function _fC(_u) {\n var _sp = '%3A\\\\/\\\\/';\n var _rp = '%3A//';\n var _aT = _sp + ',\\\\/,\\\\.,-,_,' + _rp + ',%2F,%2E,%2D,%5F';\n var _aA = _aT.split(',');\n\n for (var i = 0; i < 5; i++) {\n eval('_u=_u.replace(/' + _aA[i] + '/g,_aA[i+5])'); // eslint-disable-line no-eval\n }\n return _u;\n }\n\n return function (locale) {\n\n var custom_var = updateCustomVars(locale);\n\n var opinionlabURL = 'https://secure.opinionlab.com/ccc01/comment_card.asp?' + 'time1=' + _tm + '&time2=' + new Date().getTime() + '&prev=' + _fC(_hr) + '&referer=' + _fC(_ht) + '&height=' + _sH + '&width=' + _sW + '&custom_var=' + custom_var;\n popUp(opinionlabURL);\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js\n// module id = ../node_modules/xo-ui-components/src/user-assist-banner/popupHandler.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n

    {{header}}

    \\n
    \\n
    \\n

    \\n
    \\n
    \\n {{ content('common.haveFeedback') }}\\n {{ content('common.letUsKnow') }}\\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-ui-components/src/user-assist-banner/template.html\n// module id = ../node_modules/xo-ui-components/src/user-assist-banner/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().directive('xoValidation', function () {\n return {\n template: '',\n restrict: 'A',\n require: 'ngModel',\n link: function link(scope, elem, attr, ngModel) {\n var validationUtil = {\n // because IE8 doesnt have String.prototype.trim()\n trim: function trim(value) {\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n return value.replace(rtrim, '');\n },\n\n\n /**\n * Generic function that runs a given input against\n * a given regular expression\n *\n * @param {String} value input to test\n * @param {String/RegExp} regex Regular expression to test against\n * @returns {Boolean} matches or does not match given pattern\n */\n valid: function valid(value, regex) {\n if (this.empty(value)) {\n return false;\n }\n\n if (_angular2['default'].isString(regex)) {\n regex = new RegExp(regex);\n }\n\n return regex ? regex.test(value) : true;\n },\n\n\n // returns whether empty or not\n empty: function empty(value) {\n if (!value) {\n return true;\n }\n\n // IE8 and below doesn't have native .trim()\n return !this.trim(value);\n },\n\n\n // returns whether alphabetic or not\n alphabetic: function alphabetic(value) {\n return this.valid(value, /[A-Za-z]+$/);\n },\n\n\n // returns whether numeric or not\n numeric: function numeric(value) {\n var NUMERIC_REGEX = new RegExp('^[0-9]+$');\n\n return this.valid(value, NUMERIC_REGEX);\n },\n validBankAccount: function validBankAccount(value) {\n if (!scope.showIBAN) {\n return this.numeric(value);\n }\n\n return true;\n },\n validRouting: function validRouting(value) {\n if (!scope.showIBAN) {\n return this.valid(value, /^\\d{8}$/);\n }\n return true;\n },\n validIBANCode: function validIBANCode(value) {\n if (scope.showIBAN) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^([A-Z]){2}\\d{2}[A-Z0-9]{1,30}$/);\n }\n return true;\n },\n validIBAN: function validIBAN(value) {\n if (scope.showIBAN) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^DE\\d{20}$/);\n }\n\n return true;\n },\n validIBANCountry: function validIBANCountry(value) {\n value = value && value.replace(/ +/g, '');\n return !this.valid(value, /^([^D0-9][E]|[D][^E0-9]|[^D0-9][^E0-9])\\d{2}[A-Z0-9]{1,30}$/i);\n },\n\n\n // @Deprecated: This function is deprecated.\n // first two letters are the country code the rest are the bank account numbers max length 32\n validIBANWithValidCountryCode: function validIBANWithValidCountryCode(value) {\n value = value && value.replace(/ +/g, '');\n return this.valid(value, /^(AT|BE|CY|EE|FI|FR|DE|EL|IE|IT|LV|LT|LU|MT|MC|NL|PT|SK|SI|ES)\\d{3,32}$/i);\n },\n validLast4: function validLast4(value) {\n // @TODO - Unsafe regular expression, need to fix.\n var LAST_4 = /^([0-9]{4})?$/; // eslint-disable-line fasec/no-unsafe-regex\n\n return this.valid(value, LAST_4);\n },\n validStreet: function validStreet(value) {\n return this.valid(value, /^([A-Za-z0-9-. ]*)$/);\n },\n\n\n // Validating phone format with metadata from griffin\n validPhone: function validPhone(value) {\n var regex = scope.pattern;\n\n /*\n * User can enter phone format in various manner according to griffin mask\n * (00) 0000-0000\n * 00 000 0000\n * Since the griffin pattern only validates against numbers, need to trim the input\n * to only validate the numbers\n */\n value = value && value.replace(/[^0-9]/gi, '');\n return this.valid(value, regex);\n },\n validDobYear: function validDobYear(value) {\n return value !== 'YYYY';\n },\n validDobDay: function validDobDay(value) {\n return value !== 'DD';\n },\n validDobMonth: function validDobMonth(value) {\n return value !== 'MM';\n },\n validPoBox: function validPoBox(value) {\n // @TODO - Unsafe regular expression, need to fix.\n var boxRE = /\\b(((general\\s+)?post\\s+(office|mail)?)|((g\\.?)?p[-\\.]?\\s?[om][\\.-]?))\\s?(b(ox|\\.)?)?(\\s+\\d+)\\b/i; // eslint-disable-line fasec/no-unsafe-regex\n\n if (boxRE.test(value)) {\n return true;\n }\n\n return false;\n },\n validAddressSansPoBox: function validAddressSansPoBox(value) {\n var boxRE = /(p[-.]? ?[om]?[-.]? ?|post ?(office|mail)?)? ?b(.|ox)[^,]*\\d+/i;\n var cassRE = /(drawer|locker|bin|firm caller)\\s?#?[0-9]+/i;\n\n if (boxRE.test(value) || cassRE.test(value)) {\n return false;\n }\n return true;\n },\n validEmailOrPhone: function validEmailOrPhone(value) {\n if (!value) {\n return false;\n }\n\n return this.validEmail(value) || this.validPhone(value);\n },\n validEmail: function validEmail(value) {\n if (!value) {\n return false;\n }\n var trimmedValue = this.trim(value); // Trim leading and trailing whitespace\n // @TODO - Unsafe regular expression, need to fix.\n var EMAIL_REGEX = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i; // eslint-disable-line\n\n return this.valid(trimmedValue, EMAIL_REGEX) && !this.highAscii(trimmedValue);\n },\n highAscii: function highAscii(value) {\n var trimmedValue = this.trim(value);\n // @TODO - Unsafe regular expression, need to fix.\n var HIGH_ASCII_REGEX = /[^\\x00-\\x7F]/; // eslint-disable-line no-control-regex\n\n return this.valid(trimmedValue, HIGH_ASCII_REGEX);\n },\n\n\n // expected format: MM/DD/YYYY\n validDate: function validDate(value) {\n var re = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/;\n var dArr = value.split('/');\n var d = new Date(value);\n var isValid = false;\n\n if (re.test(value)) {\n isValid = d.getMonth() + 1 === dArr[0] && d.getDate() === dArr[1] && d.getFullYear() === dArr[2];\n }\n\n return isValid;\n },\n\n\n /* Expects value and state. state can be \"past\" or \"future\".\n NOTE: This function validates only month and year, not day!\n Please use validDate() if you need to validate the whole date. */\n validDateWithoutDay: function validDateWithoutDay(value, options) {\n // eslint-disable-line max-statements\n var state = options.state;\n\n value = value.replace(/\\s/g, '');\n\n if (value === '') {\n return true;\n }\n\n var split = value.split('/');\n var month = split[0];\n var year = split[1];\n var currentYear = parseInt(new Date().getFullYear().toString().substr(2, 2), 10);\n var currentMonth = parseInt(new Date().getMonth(), 10) + 1;\n var validYear = true;\n var validMonth = true;\n\n if (value.length < 5) {\n return false;\n }\n\n if (!this.validDobMonth(month)) {\n return false;\n }\n\n month = parseInt(month, 10);\n year = parseInt(year, 10);\n\n if (state === 'past') {\n validYear = year <= currentYear;\n if (!validYear) {\n return false;\n }\n if (year === currentYear) {\n validMonth = month <= currentMonth;\n }\n } else if (state === 'future') {\n validYear = year >= currentYear;\n if (!validYear) {\n return false;\n }\n if (year === currentYear) {\n validMonth = month >= currentMonth;\n }\n }\n\n if (!validYear || !validMonth) {\n return false;\n }\n\n return true;\n },\n\n\n // formats to MM/DD/YYYY\n mmddyyyy: function mmddyyyy(day, month, year) {\n if (year.length < 4) {\n year = '20' + year;\n }\n\n return this.twoDigits(month) + '/' + this.twoDigits(day) + '/' + this.twoDigits(year);\n },\n\n\n // formats to YY-MMM-DDDD\n yyyymmdd: function yyyymmdd(day, month, year) {\n if (year.length < 4) {\n year = '20' + year;\n }\n\n return year + '-' + this.twoDigits(month) + '-' + this.twoDigits(day);\n },\n\n\n // pads a number to two digits\n twoDigits: function twoDigits(value) {\n return value < 10 ? '0' + value : '' + value;\n },\n\n\n // expects YYYY-MM-DD\n legalAge: function legalAge(value) {\n if (this.empty(value)) {\n return false;\n }\n\n var dateParts = value.split('-'); // expecting YYYY-MM-DD\n var birthDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);\n var yr = 365.25 * 24 * 60 * 60 * 1000; // milliseconds in a year\n var validBD = new Date(new Date() - 18 * yr);\n\n return validBD >= birthDate;\n },\n validZip: function validZip(value, options) {\n\n var postalCodeRegex = {\n // TODO: Once this is removed from the xo-add-address template, we can remove it...\n GB: /[A-Z]{1,2}[0-9][0-9A-Z]?\\s?[0-9][A-Z]{2}/,\n /**\n * Note: These are \"nice to have\".\n * Once we add support for these countries, we can remove these.\n */\n BA: /^\\d{5}$/,\n CY: /^\\d{4}$/,\n EE: /^\\d{5}$/,\n HR: /^\\d{5}$/,\n LU: /^\\d{4}$/,\n LV: /^\\d{4}$/,\n MT: /^\\d{3,4}$/,\n SI: /^\\d{4}$/,\n SK: /^[0-9]{3}[\\s][0-9]{2}$/,\n NZ: /^\\d{4}$/,\n LT: /^\\d{5}$/,\n BG: /^\\d{4}$/,\n CZ: /^\\d{5}$/,\n GR: /^\\d{3}[\\s]\\d{2}$/,\n HU: /^\\d{4}$/,\n MX: /^\\d{5}$/\n };\n\n var country = options && options.country;\n var regex = scope.zipEntry && scope.zipEntry.validationPattern || postalCodeRegex[country];\n var isRequired = scope.zipEntry && scope.zipEntry.required;\n\n if (!isRequired && this.empty(value)) {\n return true;\n }\n\n // If there is no regex, or it's not populated yet...\n if (!regex || _angular2['default'].isString(regex) && regex.indexOf('validationPattern') > -1) {\n return !this.empty(value);\n }\n\n value = value && value.toUpperCase();\n\n if (_angular2['default'].isString(regex)) {\n if (regex.charAt(0) !== '^') {\n regex = '^' + regex;\n }\n if (regex.charAt(regex.length - 1) !== '$') {\n regex += '$';\n }\n }\n\n return this.valid(value, regex);\n },\n validExpiry: function validExpiry(value, options) {\n var $monthEl = (0, _jquery2['default'])('[ng-model=\"card.expiry_month\"]');\n var $yearEl = (0, _jquery2['default'])('[ng-model=\"card.expiry_year\"]');\n var month = $monthEl.val();\n var year = $yearEl.val();\n var isValid = false;\n var monthElName = 'card.expiry_month';\n var yearElName = 'card.expiry_year';\n var cardType = options.cardType;\n\n if (month) {\n month = $monthEl.find('option')[$monthEl.val() * 1 + 1].label;\n }\n\n if (year) {\n year = $yearEl.find('option')[$yearEl.val() * 1 + 1].label;\n }\n\n if (month && year) {\n isValid = this.validExpires(month, year);\n }\n\n var formName = $monthEl.closest('form').attr('id');\n var form = scope[formName] || scope.$parent[formName];\n var monthFieldName = monthElName;\n var yearFieldName = yearElName;\n\n if (monthFieldName.indexOf('.') !== -1) {\n monthFieldName = monthFieldName.split('.')[1];\n }\n\n if (yearFieldName.indexOf('.') !== -1) {\n yearFieldName = yearFieldName.split('.')[1];\n }\n\n var cardsDontNeedExpiry = ['COFIDIS', 'COFINOGA', 'CETELEM'];\n\n if (cardType && cardsDontNeedExpiry.indexOf(cardType) !== -1) {\n isValid = true;\n }\n\n if (form) {\n form[monthFieldName].$setValidity('validExpiry', isValid);\n form[yearFieldName].$setValidity('validExpiry', isValid);\n }\n\n return isValid;\n },\n validExpires: function validExpires(month, year) {\n var date = new Date();\n var currentYear = parseInt(date.getFullYear().toString().substr(2, 2), 10);\n var currentMonth;\n\n if (year < currentYear) {\n return false;\n } else if (year > currentYear) {\n return this.validDobMonth(month);\n }\n\n // account for display date vs. system date\n currentMonth = date.getMonth() + 1;\n return this.validDobMonth(month) && month >= currentMonth;\n },\n startDate: function startDate(value, options) {\n var valueOptions = {\n cardType: scope.card.type\n };\n\n valueOptions[elem.attr('id')] = value;\n\n return this.setStartDateValidity(valueOptions);\n },\n\n\n setExpiryValidity: function setExpiryValidity(options) {\n if (!options) {\n return true;\n }\n\n var cardType = options.cardType || '';\n var expiryValidity = this.validExpiry(null, {\n cardType: cardType\n });\n\n return expiryValidity;\n },\n\n // start date validation for Maestro card\n setStartDateValidity: function setStartDateValidity(options) {\n if (!options) {\n return true;\n }\n\n var cardType = options.cardType || '';\n var startDateValidity = true;\n var $monthEl = (0, _jquery2['default'])('#startmonth');\n var $yearEl = (0, _jquery2['default'])('#startyear');\n var month = $monthEl.val();\n var year = $yearEl.val();\n\n if (cardType === 'MAESTRO') {\n if (!month || !year) {\n startDateValidity = false;\n }\n }\n\n var formName = $monthEl.closest('form').attr('id'),\n form = scope[formName] || scope.$parent[formName];\n\n if (form) {\n form.startmonth.$setValidity('startDate', startDateValidity);\n form.startyear.$setValidity('startDate', startDateValidity);\n }\n\n return startDateValidity;\n },\n dobField: function dobField(value, options) {\n var valueOptions = {};\n var fieldMap = {\n dobDayCC: 'day',\n dobMonthCC: 'month',\n dobYearCC: 'year'\n };\n\n valueOptions.cardType = scope.card.type;\n valueOptions[fieldMap[elem.attr('id')]] = value;\n\n return this.setDOBValidity(valueOptions);\n },\n setDOBValidity: function setDOBValidity(options) {\n if (!options) {\n return true;\n }\n\n var dobEnabledCards = ['COFIDIS', 'COFINOGA', 'CETELEM'];\n var dobValidity = true;\n\n var $monthEl = (0, _jquery2['default'])('#dobMonthCC');\n var $dayEl = (0, _jquery2['default'])('#dobDayCC');\n var $yearEl = (0, _jquery2['default'])('#dobYearCC');\n\n var month = options.month || $monthEl.val();\n var year = options.year || $yearEl.val();\n var day = options.day || $dayEl.val();\n\n if (month) {\n month = $monthEl.find('option')[$monthEl.val() * 1 + 1].label;\n }\n\n if (day) {\n day = $dayEl.find('option')[$dayEl.val() * 1 + 1].label;\n }\n\n if (year) {\n year = $yearEl.find('option')[$yearEl.val() * 1 + 1].label;\n }\n\n var cardType = options.cardType;\n\n if (cardType && dobEnabledCards.indexOf(cardType) !== -1) {\n if (!month || !year || !day) {\n dobValidity = false;\n // invalidate if < 18 y/o.\n } else if (!this.legalAge(this.yyyymmdd(day, month, year))) {\n dobValidity = false;\n } else if (!this.validDate(this.mmddyyyy(day, month, year))) {\n dobValidity = false;\n }\n }\n\n var formName = $monthEl.closest('form').attr('id');\n var form = scope[formName] || scope.$parent[formName];\n\n if (form) {\n form.dobMonthCC.$setValidity('dobField', dobValidity);\n form.dobDayCC.$setValidity('dobField', dobValidity);\n form.dobYearCC.$setValidity('dobField', dobValidity);\n }\n\n return dobValidity;\n },\n validName: function validName(value) {\n return this.valid(value, /^([a-zA-Z,\\xC0-\\xFF,\\u00C0-\\u017F\\,\\-\\s\\,\\'])*$/);\n },\n isChecked: function isChecked(value, options) {\n // $.is does not exist in $\n // eslint-disable-line angular/ng_angularelement\n var $el = (0, _jquery2['default'])(options.el);\n\n return $el.is(':checked');\n },\n validRUPassport: function validRUPassport(value, options) {\n if (scope.user.countryOfResidence === 'RU') {\n return this.valid(value, /^\\d{10}$/);\n }\n return true;\n }\n };\n\n var customValidator = function customValidator(value) {\n var ruleJson = _angular2['default'].fromJson(elem.attr('xo-validation'));\n var validator = ruleJson.validator;\n var options = ruleJson.options;\n\n ngModel.$setValidity(validator, validationUtil[validator](value, options));\n\n return value;\n };\n\n ngModel.$parsers.unshift(customValidator);\n ngModel.$formatters.unshift(customValidator);\n }\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-validation/dist/directive.js\n// module id = ../node_modules/xo-validation/dist/directive.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/fi/index');\n\nvar _dist = require('xo-device-info/dist');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xo3ds', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?',\n data: '=?',\n onComplete3dsHandler: '=?'\n },\n controller: ['$scope', function ($scope) {\n var resolve3DS = _index2.$Resolve3DS.instance($scope.token);\n var checkoutAppData = _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n var _$locale$country = _squid.$locale.country,\n country = _$locale$country === undefined ? 'DEFAULT' : _$locale$country;\n\n var isIos = _dist.$DeviceInfo.getiOSVersion();\n var timeout3DSConfig = _squid.$config.timeout3DS || { 'DEFAULT': 30000 };\n var lightBoxTimeout = isIos && country === 'IN' ? 0 : timeout3DSConfig[country] || timeout3DSConfig['DEFAULT'];\n\n $scope.termUrl = '' + window.location.origin + _squid.$config.urls.baseUrl + '/process3DS';\n $scope.data = $scope.data || {};\n\n function show3DSLightBox() {\n if ($scope.show3DS) {\n var lightbox = angular.element(document.getElementById('light-box'));\n lightbox.addClass('open');\n $scope.show3DS = false;\n _angular.$rootScope.$emit('loaded');\n }\n }\n\n function shouldUpdatePaymentExperience() {\n var merchantCountry = checkoutAppData.get('merchant.merchant_country', 'US');\n return !(_squid.$config.features[country] && _squid.$config.features[country].mandatory3dsWithMerchantCountries && _squid.$config.features[country].mandatory3dsWithMerchantCountries.includes(merchantCountry));\n }\n\n function handleInitFailure(message) {\n // Since init3DS call failed. We disable the feature and proceed to checkout.\n var updateAction = shouldUpdatePaymentExperience() ? checkoutAppData.action('updatePaymentExperience', {\n data: {\n payment_experience: 'HERMESNODE',\n '3d_secure_authentication_supported': false\n },\n silent: true,\n transientError: true\n }) : _squid.$promise.resolve();\n updateAction.then(function () {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': message,\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n $scope.onComplete3dsHandler('success');\n });\n }\n\n function init3DSApi() {\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('threeDS.processing'));\n\n return resolve3DS.action('init3DS', {\n data: {\n cc_id: $scope.data.cc_id,\n flow_id: $scope.data.flow_id,\n merchant_id: $scope.data.merchant_id,\n merchant_country: $scope.data.merchant_country_code,\n currency: $scope.data.transaction_amount_currency,\n transaction_amount: $scope.data.transaction_amount_value\n },\n success: function success(response) {\n if (response.status === 'SUCCESS' && response.acsUrl) {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'prepare_3ds_challenge'\n });\n $scope.acsUrl = response.acsUrl;\n $scope.acsMethod = response.acsMethod || 'POST';\n $scope.acsPaReq = response.acsPaReq;\n\n var form = $('
    ', {\n action: $scope.acsUrl,\n method: $scope.acsMethod,\n id: 'iFrameForm',\n target: 'threeDSFrame'\n });\n form.append($('', {\n type: 'hidden',\n name: 'TermUrl',\n value: $scope.termUrl\n }));\n form.append($('', {\n type: 'hidden',\n name: 'PaReq',\n value: $scope.acsPaReq\n }));\n $('#lightBoxAcsWrapper').append(form);\n $('#iFrameForm').submit();\n\n // wait for 3DS page to load with a timeout\n\n // The $scope.show3DS in the line below is set true when the 3DS modal is eligible to be shown to user when the\n // bank page loads in its iframe, i.e., after init3DS success\n $scope.show3DS = true;\n _angular.$rootScope.$emit('loading');\n _angular.$rootScope.$emit('loadingMessage', _squid.$locale.content.get('threeDS.processing'));\n (0, _angular.$timeout)(function () {\n if ($scope.show3DS) {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: '3DS_CHALLENGE',\n 'int_error_description': 'load_3ds_issuer_page_content_timeout',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n }\n show3DSLightBox();\n }, lightBoxTimeout);\n } else {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': 'acsUrl_not_presented_on_init',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n\n // When there is no 3DS challenge page to be shown, we return success to the caller\n $scope.onComplete3dsHandler('success');\n }\n },\n error: function error() {\n handleInitFailure('unknown_error_on_init3DS');\n },\n validation: function validation() {\n handleInitFailure('validation_error_on_init3DS');\n },\n contingencies: {\n DEFAULT: function DEFAULT() {\n handleInitFailure('contingency_presented_on_init3DS');\n }\n }\n });\n }\n\n function complete3DSApi(paRes) {\n return resolve3DS.action('complete3DS', {\n data: {\n third_party_response: paRes,\n cc_id: $scope.data.cc_id,\n flow_id: $scope.data.flow_id\n },\n success: function success(response) {\n var status = void 0;\n\n if (response.status === 'SUCCESS') {\n status = 'success';\n\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge'\n });\n } else {\n status = 'decline';\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_3ds_challenge',\n 'int_error_description': 'complete3DS_decline',\n 'error_type': 'soft_decline',\n 'error_source': 'fiLifecycle'\n });\n }\n $scope.onComplete3dsHandler(status);\n }\n });\n }\n\n $scope.close3DSFrame = function () {\n _logger.$logger.info('checkout_fpti', {\n from: '3DS_CHALLENGE',\n to: 'process_user_close'\n });\n _logger.$logger.flush();\n\n var lightbox = angular.element(document.getElementById('light-box'));\n lightbox.removeClass('open');\n\n (0, _angular.$timeout)(function () {\n var lightboxMask = angular.element(document.getElementById('mask'));\n\n lightboxMask.remove();\n $scope.onComplete3dsHandler('close');\n }, 200);\n };\n\n init3DSApi();\n\n $scope.complete3DS = function (paRes) {\n complete3DSApi(paRes);\n };\n\n _angular.$window.complete3DSFrame = function (paRes) {\n $scope.complete3DS(paRes);\n };\n\n $scope.on3DSPageLoad = show3DSLightBox;\n _angular.$window.on3DSPageLoad = $scope.on3DSPageLoad;\n\n // when the esc key is pressed\n $('html').on('keyup', function (ev) {\n if (ev.which === 27) {\n $scope.close3DSFrame();\n }\n });\n }]\n };\n});\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_angular.$window;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$promise;\n\n_logger.$logger;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$Resolve3DS;\n\n_dist.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/3ds/directive.js\n// module id = ../node_modules/xo-wallet-components/src/3ds/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n\\n
    \\n
    \\n  \\n

    \\n {{ content('threeDS.iFrameTitle') }}\\n

    \\n \\n
    \\n\\n
    \\n
    \\n\\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/3ds/template.html\n// module id = ../node_modules/xo-wallet-components/src/3ds/template.html\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$AddCardFactory', function () {\n var shouldDisplayAddressBox = function shouldDisplayAddressBox(isNmjDesign1, cardModel, invalidfield) {\n var avsRetry = _squid.$util.param('avsRetry') || invalidfield;\n var redirectFromXoon = _squid.$util.param('redirectToHermes') ? '1' : '0';\n if (!cardModel || !cardModel.address) {\n return _squid.$promise.resolve(false);\n }\n if (isNmjDesign1) {\n return _squid.$promise.resolve(true);\n }\n if (avsRetry) {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.AVS': avsRetry }, 'xo_hermes_addcard_msg_xoon_redirect_avs_address_box', false, true).then(function (result) {\n return result && result.treatment_name;\n });\n }\n return _squid.$promise.resolve(false);\n };\n\n var getAddCardPxpResult = function getAddCardPxpResult() {\n var redirectFromXoon = _squid.$util.param('redirectToHermes') ? '1' : '0';\n var retry = _squid.$util.param('addFIContingency') === 'retry' ? '1' : '0';\n var avsRetry = _squid.$util.param('avsRetry') ? '1' : '0';\n if (_squid.$util.param('avsRetry')) {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.AVS': avsRetry }, '(xo_hermes_addcard_msg_)(.*)', false, true).then(function (result) {\n return result;\n });\n } else {\n return (0, _squid.$pxp)('xo_hermes_addcard_msg', { 'ctx.COUNTRY': _squid.$locale.country, 'ctx.XOON_REDIRECT': redirectFromXoon, 'ctx.RETRY': retry, 'ctx.AVS': avsRetry }, '(xo_hermes_addcard_msg_)(.*)', false, true).then(function (result) {\n return result;\n });\n }\n };\n\n var getCheckoutIncentivePxpResult = function getCheckoutIncentivePxpResult() {\n return (0, _squid.$pxp)('xo_hermes_checkout_incentive', {}, '(xo_hermes_checkout_incentive_)(.*)', false, true).then(function (result) {\n return result && result.treatment_name;\n });\n };\n\n var getIssuerDeclineElmoResult = function getIssuerDeclineElmoResult() {\n return (0, _squid.$elmo)('xo_hermesnodeweb_issuer_decline', { 'ctx.country': _squid.$locale.country }, 'Trmt_xo_hermesnodeweb_issuer_decline_1').then(function (result) {\n return result && result.treatment_name;\n });\n };\n\n return {\n shouldDisplayAddressBox: shouldDisplayAddressBox,\n getAddCardPxpResult: getAddCardPxpResult,\n getCheckoutIncentivePxpResult: getCheckoutIncentivePxpResult,\n getIssuerDeclineElmoResult: getIssuerDeclineElmoResult\n };\n});\n\n_squid.$locale;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_squid.$elmo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/add-card/addcard/factory.js\n// module id = ../node_modules/xo-wallet-components/src/add-card/addcard/factory.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CardMetaData = undefined;\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar CARD_META_DATA = {\n DEFAULT: {\n fields: {\n address: true,\n cvv: true,\n dob: false,\n expiry: true,\n issue: false,\n phone: false\n },\n length: {\n cvv: 3,\n min: 16,\n max: 16\n },\n luhn: true,\n phoneType: 'Mobile',\n spaces: '4,8,12'\n },\n\n PLCC: {\n fields: {\n expiry: false,\n cvv: false,\n address: false\n },\n length: {\n min: 10,\n max: 16\n }\n },\n\n MAESTRO: {\n pattern: /^(5018|5020|5038|4903|4911|4936|564182|545250|504834|503615|6333|6304|6759|676[1-3]|0604)/,\n length: {\n min: 12,\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n SWITCH: {\n pattern: /^(5018|5020|5038|4903|4911|4936|564182|545250|504834|503615|6333|6304|6759|676[1-3]|0604)/,\n fields: {\n issue: true\n },\n length: {\n min: 12,\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n DINERSCLUB: {\n pattern: /^(36|38|30[0-5])/,\n length: {\n min: 14,\n max: 14\n }\n },\n\n DISCOVER: {\n pattern: /^(6011|65|64[4-9]|622|36|38|30[0-5])/,\n length: {\n min: 14\n }\n },\n\n MASTERCARD: {\n pattern: /^(5[1-5]|2(2(2[1-9]|[3-9]\\d)|[3-6]\\d\\d|7[0-1]\\d|720))/\n },\n\n AMEX: {\n pattern: /^3[47]/,\n length: {\n cvv: 4,\n min: 15,\n max: 15\n },\n spaces: '4,10'\n },\n\n VISA: {\n pattern: /^4/,\n length: {\n min: 13\n },\n subTypes: {\n QIWI: {\n pattern: /^(428122|489049|469395|446942|462012)/\n }\n }\n },\n\n JCB: {\n pattern: /^(?:2131|1800|35[0-9]{2})/,\n length: {\n min: 15\n }\n },\n\n CBNATIONALE: {},\n\n CETELEM: {\n fields: {\n dob: true\n },\n length: {\n max: 19\n },\n spaces: '4,8,12,16'\n },\n\n COFIDIS: {\n fields: {\n dob: true,\n expiry: false,\n cvv: false\n },\n length: {\n min: 8,\n max: 9\n },\n spaces: '4,8',\n luhn: false\n },\n\n COFINOGA: {\n fields: {\n dob: true,\n cvv: false\n },\n length: {\n min: 17,\n max: 17\n },\n spaces: '4,8,12,16'\n },\n\n ELO: {\n pattern: /^9/,\n length: {\n min: 13\n }\n },\n\n HIPER: {\n pattern: /^6/,\n length: {\n min: 13\n }\n },\n\n HIPERCARD: {\n pattern: /^7/,\n length: {\n min: 13\n }\n },\n\n CUPCREDIT: {\n fields: {\n address: false,\n phone: true\n },\n length: {\n max: 19\n }\n },\n\n CUPAMEXCREDIT: {\n fields: {\n address: false,\n phone: true\n },\n length: {\n cvv: 4,\n min: 15,\n max: 15\n }\n },\n\n CUPDEBIT: {\n fields: {\n address: false,\n cvv: false,\n expiry: false,\n phone: true\n },\n length: {\n max: 19\n }\n },\n\n CUPAMEXDEBIT: {\n fields: {\n address: false,\n cvv: false,\n expiry: false,\n phone: true\n },\n length: {\n min: 15,\n max: 15\n }\n }\n};\n\nObject.keys(CARD_META_DATA).forEach(function (key) {\n CARD_META_DATA[key] = $.extend(true, {}, CARD_META_DATA.DEFAULT, CARD_META_DATA[key]);\n});\n\nObject.keys(CARD_META_DATA).forEach(function (key) {\n CARD_META_DATA[key].spaces = CARD_META_DATA[key].spaces.split(',').map(Number);\n});\n\nfunction getTypeByPattern(cardMetaData, types, number) {\n var result = void 0;\n types.some(function (type) {\n var metaData = cardMetaData[type];\n if (metaData && metaData.pattern && metaData.pattern.test(number)) {\n result = type;\n return true;\n }\n });\n return result;\n}\n\nvar $CardMetaData = exports.$CardMetaData = {\n getMetaData: function getMetaData(card, field) {\n var cardType = card && card.type || 'DEFAULT';\n if (cardType === 'CUP') {\n cardType = cardType + (card.dualType ? card.dualType : '');\n cardType = cardType + (['DEBIT', 'DEBITCARD'].indexOf(card.productType) > -1 ? 'DEBIT' : 'CREDIT');\n }\n return _squid.$Class.get(CARD_META_DATA[cardType], field);\n },\n getCardType: function getCardType(types, number) {\n var cardType = {};\n if (_angular2['default'].isArray(types) && number) {\n cardType.type = getTypeByPattern(CARD_META_DATA, types, number);\n var metaData = CARD_META_DATA[cardType.type];\n if (metaData && metaData.subTypes) {\n cardType.subType = getTypeByPattern(metaData.subTypes, types, number);\n }\n }\n return cardType;\n }\n};\n\n_angular2['default'].value(\"$CardMetaData\", $CardMetaData);\n_squid.$Class;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js\n// module id = ../node_modules/xo-wallet-components/src/add-card/cardMetaData/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoCvvDirective = undefined;\n\nvar _squid = require('squid');\n\nvar _cardMetaData = require('../cardMetaData');\n\nvar _template = require('./template.html');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoCvvDirective = exports.$xoCvvDirective = _squid.$Component.extend('$xoCvvDirective', {\n tag: 'xo-cvv',\n template: _template2['default'],\n\n props: {\n card: {\n type: 'var',\n required: false\n },\n showLabel: {\n type: 'var',\n required: false\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n // A boolean message to update the masking property of cvv when the pre-filling happens\n this.$on('maskCVV', function ($event, isMasked) {\n _this.maskCVV = isMasked;\n });\n this.maskCVV = (0, _squid.$feature)('maskCVV', false, _squid.$locale.country);\n this.cvvLength = function () {\n return _cardMetaData.$CardMetaData.getMetaData(_this.props.card, 'length.cvv');\n };\n this.cvvRequired = function () {\n return _this.props.card.type !== 'MAESTRO' || (0, _squid.$feature)('maestroCvvRequired', false, _squid.$locale.country);\n };\n }\n }\n});\n\nangular.value(\"$xoCvvDirective\", $xoCvvDirective);\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$feature;\n\n_cardMetaData.$CardMetaData;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/add-card/cvv/directive.js\n// module id = ../node_modules/xo-wallet-components/src/add-card/cvv/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n\\n
    \\n \\n\\n \\n \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/add-card/cvv/template.html\n// module id = ../node_modules/xo-wallet-components/src/add-card/cvv/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/user/index');\n\nrequire('xo-ui-components/src/modal/directive');\n\nvar _factory = require('../currency-conversion/factory');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _utils = require('./utils');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./styles');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCurrencyConversionOverlayDirective', {\n tag: 'xo-currency-conversion-overlay',\n template: _template2['default'],\n props: {\n token: {\n type: 'var'\n }\n },\n resolve: {\n models: function models() {\n return {\n checkoutSession: _index.$CheckoutSessionModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n cart: _index.$CheckoutCartModel.instance(this.props.token).retrieve()['catch'](_angular.noop),\n checkoutInputDataModel: _index2.$CheckoutInputDataModel.instance(this.props.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n actions: {\n onSubmit: function onSubmit() {\n var _this = this;\n\n var _models = this.models,\n checkoutSession = _models.checkoutSession,\n checkoutInputData = _models.checkoutInputData,\n ppconversion = _models.ppconversion;\n\n var fundingOptionId = checkoutInputData && checkoutInputData.funding_option_id;\n var plan = checkoutSession.plan;\n\n\n this.showOverlay = false;\n var _conversion = this.conversion,\n from_code = _conversion.from_code,\n to_code = _conversion.to_code,\n paypal = _conversion.paypal;\n\n var selectedConversionType = (0, _utils.mapConversionType)(ppconversion);\n var planConversionType = (0, _utils.mapConversionType)(paypal);\n\n if (selectedConversionType === planConversionType) {\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'cancel_currency_conversion',\n currency_conversion_from_curr: from_code,\n currency_conversion_to_curr: to_code\n } });\n // stop\n return;\n }\n\n var data = {\n conversionType: selectedConversionType,\n planId: fundingOptionId || plan.id\n };\n\n if (data.planId) {\n checkoutSession.fundingOptions.action('updateConversion', {\n data: data,\n success: function success(result) {\n if (data.planId !== plan.id) {\n // don't need to reload checkoutSession after updating the conversion of the backup funding option\n return null;\n }\n\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'process_currency_conversion',\n currency_conversion_type: selectedConversionType,\n is_conversion_shown: 1,\n currency_conversion_from_curr: _this.conversion.from_code,\n currency_conversion_to_curr: _this.conversion.to_code\n } });\n\n checkoutSession.reload({\n success: function success() {\n // Conversion object needs to be mapped again as checkoutSession is reloaded\n var plan = checkoutSession.plan; // eslint-disable-line no-shadow\n // Using let here since the conversion object may get reassigned at line 86 due to certain conditions\n\n var _plan$conversion = plan.conversion,\n conversion = _plan$conversion === undefined ? {} : _plan$conversion;\n\n _this.conversion = conversion;\n\n if (!ppconversion) {\n if (conversion.paypal) {\n _logger.$logger.info('currency_conversion_not_honored');\n } else {\n // To avoid a situation if the conversion object is not returned in the response\n conversion = plan.conversion || {\n changeable: true,\n paypal: false\n };\n }\n\n if (!conversion.from || !conversion.to) {\n _logger.$logger.info('currency_conversion_rate_missing');\n }\n }\n }\n })['catch'](function () {\n _logger.$logger.error('checkout_session_reload_failed');\n });\n }\n })['catch'](function () {\n _logger.$logger.error('update_conversion_failed');\n });\n }\n }\n },\n\n lifecycle: {\n enter: function enter() {\n var _this2 = this;\n\n this.showOverlay = false;\n\n // Close overlay function\n this.closeOverlay = function () {\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'cancel_currency_conversion',\n currency_conversion_from_curr: _this2.conversion.from_code,\n currency_conversion_to_curr: _this2.conversion.to_code\n } });\n _this2.showOverlay = false;\n };\n\n // Event listener to open the overlay\n var showConversionOverlay = _angular.$rootScope.$on('$showConversionOverlay', function () {\n _this2.isConversionOverlayRateContent = _factory.$CurrencyConversionFactory.isConversionOverlayRateContent();\n (0, _utils.logCurrencyConversion)({ options: {\n to: 'prepare_currency_conversion',\n currency_conversion_type: _this2.conversion.paypal ? 'PAYPAL' : 'VENDOR',\n is_conversion_shown: 1,\n currency_conversion_from_curr: _this2.conversion.from_code,\n currency_conversion_to_curr: _this2.conversion.to_code\n } });\n _this2.showOverlay = true;\n });\n\n this.$on('$destroy', showConversionOverlay);\n },\n populate: function populate() {\n var _models2 = this.models,\n checkoutSession = _models2.checkoutSession,\n cart = _models2.cart;\n\n this.conversion = checkoutSession.plan.conversion;\n // If there is conversion, populate scope with properties that will be rendered in UI\n if (this.conversion) {\n var conversion = this.conversion;\n this.isConversionOverlayRateContent = false;\n this.models.ppconversion = !!conversion.paypal;\n this.cartAmount = cart.purchase && cart.purchase.amounts.total.amount_formatted_currency;\n this.payPalAmount = conversion.total_converted_amount;\n this.toTargetCurrency = conversion.to_amount_forex + ' ' + conversion.to_code;\n this.fromUnitCurrency = '1 ' + checkoutSession.plan.conversion.from_code;\n }\n }\n }\n});\n\n\n_squid.$Component;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutCartModel;\n\n_index2.$CheckoutInputDataModel;\n\n_factory.$CurrencyConversionFactory;\n\n_logger.$logger;\n\n_utils.mapConversionType;\n\n_utils.logCurrencyConversion;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js\n// module id = ../node_modules/xo-wallet-components/src/currency-conversion-overlay/directive.js\n// module chunks = main-code-split","module.exports = \"\\n
    \\n \\n
    \\n

    {{content('currencyOptions.bfxConversionHeaderRateInterstitial')}}

    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n {{content('currencyOptions.bfxConversionPayPalTotal')}}\\n
    \\n {{payPalAmount}}\\n
    \\n
    \\n {{content('currencyOptions.bfxConversionIssuerTotal')}}\\n
    \\n {{cartAmount}}\\n
    \\n
    \\n

    \\n \\n {{content('currencyOptions.bfxConversionPayPalRate') + ' '}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n \\n

    \\n

    {{content('currencyOptions.bfxConversionPayPalSpreadDisclosureMember')}}

    \\n
    \\n
    \\n

    {{content('currencyOptions.bfxConversionIssuerDisclosure')}}

    \\n
    \\n \\n
    \\n\\n \\n
    \\n

    {{content('currencyOptions.bfxConversionHeaderCurrency')}}

    \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n {{content('currencyOptions.bfxConversionPayPalTotal')}}\\n
    \\n {{payPalAmount}}\\n
    \\n
    \\n {{content('currencyOptions.bfxConversionIssuerTotal')}}\\n
    \\n {{cartAmount}}\\n
    \\n
    \\n

    \\n \\n {{content('currencyOptions.bfxConversionPayPalRate') + ' '}}\\n {{content('paymentMethod.conversionRate', {currencyFrom: fromUnitCurrency, currencyTo: toTargetCurrency})}}\\n \\n

    \\n

    {{content('currencyOptions.bfxConversionPayPalSpreadDisclosureMember')}}

    \\n
    \\n
    \\n

    {{content('currencyOptions.bfxConversionIssuerDisclosure')}}

    \\n
    \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html\n// module id = ../node_modules/xo-wallet-components/src/currency-conversion-overlay/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.logCurrencyConversion = exports.mapConversionType = undefined;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar DEFAULT_LOGGING_OPTIONS = {\n from: 'CURRENCY_CONVERSION'\n};\n\nvar mapConversionType = exports.mapConversionType = function mapConversionType(type) {\n return type ? 'PAYPAL' : 'VENDOR';\n};\n\nvar logCurrencyConversion = exports.logCurrencyConversion = function logCurrencyConversion(_ref) {\n var _ref$name = _ref.name,\n name = _ref$name === undefined ? 'currency_conversion' : _ref$name,\n _ref$options = _ref.options,\n options = _ref$options === undefined ? {} : _ref$options;\n\n // ES lint does not support the spread operator syntax which throws parsing error on its encounter\n var logOptions = Object.assign({}, DEFAULT_LOGGING_OPTIONS, options);\n _logger.$logger.info(name, logOptions);\n};\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js\n// module id = ../node_modules/xo-wallet-components/src/currency-conversion-overlay/utils.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$CurrencyConversionFactory', function () {\n var showConversionOverlay = false; // Phase 2 flag that determines to show overlay or sidebar for currency conversion selection\n var showConversionOverlayRateContent = false; // Phase 2 flag that determines rate or currency variant for currency conversion overlay content\n\n // Call to get PXP treatents\n var fetchPXPTreatments = function fetchPXPTreatments() {\n return (0, _squid.$pxp)('xo_hermes_currency_conversion', 'xo_hermes_curr_conv_.*', undefined, false, true).then(function (result) {\n var treatmentName = result && result.treatment_name;\n\n showConversionOverlay = treatmentName && treatmentName.indexOf('test\\_') > -1;\n showConversionOverlayRateContent = treatmentName && treatmentName.indexOf('test\\_rate') > -1;\n });\n };\n\n /**\n * get content data for card issuer radio box container\n *\n * @param {Object} checkoutSession - $CheckoutSessionModel model\n * @param {Object} conversion - $CheckoutSessionModel conversion obj\n * @param {Object} cartModel - $CheckoutCartModel model\n */\n var getCardIssuerData = function getCardIssuerData(checkoutSession, conversion, cart) {\n var plan = checkoutSession.plan;\n var isSplitBalance = plan.isSplitBalance();\n var showConvertIssuerSplitBalContent = false;\n var disclaimer = void 0;\n var label = void 0;\n\n if (isSplitBalance) {\n // if there is BALANCE source with the same \"currency_code\" as \"cart total amount\"\n // then we should NOT show Split balance content because Planning will not exclude this Balance from the plan after replan\n showConvertIssuerSplitBalContent = !plan.sources.some(function (source) {\n return source.get('type') === 'BALANCE' && source.get('amount.currency_code') === cart.get('purchase.amounts.total.currency_code');\n });\n }\n\n if (showConvertIssuerSplitBalContent) {\n label = (0, _squid.$renderContent)('currencyOptions.convertIssuerSplitBal');\n disclaimer = (0, _squid.$renderContent)('currencyOptions.issuerFinalAmountSplitBal', {\n amt: cart.get('purchase.amounts.total.amount_formatted_currency')\n });\n } else {\n label = (0, _squid.$renderContent)('currencyOptions.convertIssuer');\n disclaimer = '' + (0, _squid.$renderContent)('currencyOptions.amount') + ' ' + (0, _squid.$renderContent)('currencyOptions.issuerFinalAmount');\n }\n\n return {\n label: label,\n disclaimer: disclaimer\n };\n };\n\n /**\n * Calculate conversion total only when:\n * 1. for PayPal rate\n * 2. there is only one plan source available (for multi source use cases, e.g Card + Balance we don't want to calc total for now)\n *\n * @param {Object} checkoutSession - $CheckoutSessionModel model\n * @param {Object} conversion - $CheckoutSessionModel conversion obj\n * @returns {String} Returns total formatted amount\n */\n var getPayPalConversionTotal = function getPayPalConversionTotal(checkoutSession, conversion) {\n var sources = checkoutSession.get('plan.sources');\n\n if (!conversion.paypal || sources && sources.length > 1) {\n return;\n }\n\n return checkoutSession.get('plan.sources.0.amount.amount_formatted_currency');\n };\n\n /**\n * Get the currency conversion PXP flag\n * @returns {Boolean} - Flag that confirms PXP treatment to show currency conversion overlay\n */\n var getConversionOverlayFlag = function getConversionOverlayFlag() {\n return showConversionOverlay;\n };\n\n /**\n * Get the currency conversion overlay content flag to determinte to render right content\n * @returns {Boolean} - Flag that confirms PXP treatment to show currency conversion overlay\n */\n var isConversionOverlayRateContent = function isConversionOverlayRateContent() {\n return showConversionOverlayRateContent;\n };\n\n return {\n getCardIssuerData: getCardIssuerData,\n getPayPalConversionTotal: getPayPalConversionTotal,\n fetchPXPTreatments: fetchPXPTreatments,\n getConversionOverlayFlag: getConversionOverlayFlag,\n isConversionOverlayRateContent: isConversionOverlayRateContent\n };\n});\n\n_squid.$renderContent;\n\n_squid.$pxp;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/currency-conversion/factory.js\n// module id = ../node_modules/xo-wallet-components/src/currency-conversion/factory.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _fi = require('xo-models/src/fi');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nangular.module().directive('xoFiLogos', function () {\n return {\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n (0, _squid.$populate)($scope, {\n cardTypes: _fi.$CardTypesModel.instance($scope.token + ':' + _squid.$locale.country, {\n token: $scope.token,\n country: _squid.$locale.country\n })\n });\n }]\n };\n});\n\n_squid.$locale;\n\n_squid.$populate;\n\n_fi.$CardTypesModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/fi-logos/directive.js\n// module id = ../node_modules/xo-wallet-components/src/fi-logos/directive.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-wallet-components/src/fi-logos/template.html\n// module id = ../node_modules/xo-wallet-components/src/fi-logos/template.html\n// module chunks = main-code-split","// It will use the native implementation if it's present and isn't buggy.\nObject.assign = require('object-assign');\n\n// array\nrequire('core-js/fn/array/find');\nrequire('core-js/fn/array/includes');\n\n// string\nrequire('core-js/fn/string/includes');\n\n\n// object\nrequire('core-js/fn/object/entries');\nrequire('core-js/fn/object/values');\n\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/xo-webpack-config/polyfills.js\n// module id = ../node_modules/xo-webpack-config/polyfills.js\n// module chunks = main-code-split","\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _middleware = require('js/lib/middleware');\n\nvar _route = require('pages/xo-checkout/route');\n\nvar _route2 = _interopRequireDefault(_route);\n\nrequire('../css/app.less');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_logger.$logger.info('app_bootstrap', {\n hash: window.location.hash\n});\n\nvar xoCheckoutRoute = new _route2['default']();\n\nxoCheckoutRoute.bootstrap('checkout.landing', _middleware.$Middleware);\n\nwindow.bootstrap = true;\n\n_logger.$logger;\n\n_middleware.$Middleware;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/app.js\n// module id = ./js/app.js\n// module chunks = main-code-split","\n\nvar _constants = require('./lib/constants');\n\n// set public path for chunks on the fly\n// more details - https://webpack.js.org/guides/public-path/#on-the-fly\n// without it - webpack doesn't know how to resolve path for assets stored in webpack -> output (.build/js)\n// in development: staticUrl will be /webapps/hermes/static in case of Hermes\n// in production: staticUrl will be pointing to CDN, e.g https://www.paypalobjects.com/web/res/6e6/9af00bdfc93477f08ba3fe44e9589\n__webpack_public_path__ = window.meta.staticUrl + '/'; // eslint-disable-line no-undef\n\n\nwindow.main = true;\n\n// Angular 1.6.9 adds a `!` as a hash prefix to the url by default.\n// This is different behavior than Angular 1.4.7 which didn't add\n// a hash prefix. The code snippet below will prevent the hash prefix\n// from being added so that after the Angular 1.6.9 upgrade the url\n// hash will remain the same.\n// Angular 1.4.7: http://.../xoonboarding?token=EC-9CC38595EA0236714#/checkout/signup\n// Angular 1.6.9 with out setting the `hashPrefix` to an empty string:\n// http://.../xoonboarding?token=EC-9CC38595EA0236714#!/checkout/signup\nangular.module('app').config(['$locationProvider', '$compileProvider', function ($locationProvider, $compileProvider) {\n $locationProvider.hashPrefix('');\n\n // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1767\n // If you want to debug an application with angular related information in\n // production environemnt, simply open up your console, and type `angular.reloadWithDebugInfo()`\n // and waits for your current page to reload\n if (process.env.NODE_ENV === 'production') {\n $compileProvider.debugInfoEnabled(false);\n }\n $compileProvider.aHrefSanitizationWhitelist(_constants.constants.regex.protocolsWithDeeplink);\n $compileProvider.cssClassDirectivesEnabled(false); // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1892\n $compileProvider.commentDirectivesEnabled(false); // https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L1863\n}]);\n\nif (!window.prefetch) {\n window.beacon('info', ['angular_bootstrap_start']);\n angular.bootstrap(document.body, ['app']);\n window.beacon('info', ['angular_bootstrap_end']);\n require('./app.js');\n}\n\n_constants.constants;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/bootstrap.js\n// module id = ./js/bootstrap.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nvar constants = exports.constants = {\n regex: {\n safeProtocols: '^\\s*(https?|s?ftp|mailto|tel|file):',\n protocolsWithDeeplink: '^\\s*(https?|s?ftp|mailto|tel|file|com\\.[a-z]+(\\.[a-z]+)*):'\n }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/constants.js\n// module id = ./js/lib/constants.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _integration = require('js/lib/integration');\n\nvar _miniBrowser = require('js/lib/miniBrowser');\n\nvar _index = require('xo-models/src/auth/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$contingencyHandler', function () {\n function showGenericError(code) {\n return function () {\n var encoded = code ? window.btoa(code) : code;\n\n _uiRouter.$state.go('checkout.genericError', {\n code: encoded\n });\n };\n }\n\n function route(path) {\n return function () {\n _uiRouter.$state.go(path, { message: arguments[0] });\n };\n }\n\n function forbidden(err) {\n throw new _squid.$Forbidden(err);\n }\n\n function fallback(product) {\n return function (err) {\n throw new _squid.$FallbackError({\n reason: err,\n product: product\n });\n };\n }\n\n function addMissingTokens(urlQuery) {\n var payload = {\n 'token': _angular.$rootScope.token || _squid.$meta.token\n };\n\n if (_squid.$meta.baToken) {\n payload.ba_token = _squid.$meta.baToken;\n }\n return _squid.$util.queryStringSplice(urlQuery, payload);\n }\n\n function handleStepupAuth(code, authModel, step_up_context) {\n authModel.stepupAuthRequired = true;\n\n var reasons = {\n VERIFY_USER_IDENTITY: 'step_up_auth_needed',\n PAYER_AUTHENTICATION_REQUIRED: 'login_required'\n };\n\n if (authModel.remembered) {\n _logger.$logger.debug('PLANNING_STEP_UP_REMEBERED_USER');\n authModel.logout().then(function () {\n _uiRouter.$state.go('checkout.login', {\n targetPage: 'ONETOUCH_GENERIC_ERROR',\n source: 'FRESH_START'\n });\n });\n } else if (step_up_context && !_angular2['default'].isObject(step_up_context)) {\n _logger.$logger.debug('PLANNING_STEP_UP_LOGIN_USER_TEST_TRAFFIC');\n var authChallengeNodeUrl = _squid.$config.urls.authChallengeNodeUrl;\n\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n var hostname = _squid.$meta.stage ? _squid.$meta.stage : _angular.$location.host();\n\n authChallengeNodeUrl = authChallengeNodeUrl.replace('www.paypal.com', hostname);\n }\n\n authChallengeNodeUrl = _squid.$util.buildURL(authChallengeNodeUrl, {\n stepupContext: step_up_context,\n stsReturnUrl: _squid.$config.ulMeta.stsReturnUrl,\n returnUri: _squid.$config.ulMeta.authChallengeReturnUri + addMissingTokens(_angular.$window.location.search) + '&atoSuccess',\n locale: _squid.$locale.lang,\n flowId: 'xo',\n flowContext: 'funding'\n });\n\n if (authChallengeNodeUrl) {\n _squid.$util.redirect(authChallengeNodeUrl);\n }\n } else {\n _logger.$logger.debug('PLANNING_STEP_UP_LOGIN_USER_CONTROL_TRAFFIC');\n throw new _squid.$FallbackError({\n reason: reasons[code],\n product: 'ux'\n });\n }\n }\n\n return function (contingency) {\n // Leave a footprint here. The subsequent state where log how it goes..\n _logger.$logger.warn('contingency_handler', contingency);\n\n return contingency.handle({\n // Route\n ECONSENT_REQUIRED: route('checkout.econsent'),\n TRAVEL_RULE_ID_REQUIRED: route('checkout.travelRule'),\n INSTANT_FUNDING_SOURCE_UPSELL_NEEDED: route('checkout.pageAddCardMeft.addCardFlow.addCard'),\n ELV_DECLINE: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_CREDIT_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_CONFIRMED_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n NEED_AUTHENTICATED_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n NEED_CREDIT_CARD_OR_BANK_ACCOUNT: route('checkout.pageAddFi.bank.add'),\n EXPIRED_CREDIT_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n NEGATIVE_BALANCE_RECOVERY: route('checkout.negativeBalanceRecovery'),\n PHONE_NUMBER_REQUIRED: route('checkout.addPhone'),\n SEPA_MANDATE_ACCEPTANCE_NEEDED: route('checkout.review'),\n TAX_ID_REQUIRED: route('checkout.addTaxId'),\n NEED_SHIPPING_ADDRESS: route('checkout.pageAddShipping.addShipping'),\n\n NEED_DEBIT_CARD: route('checkout.pageAddCard.addCardFlow.addCard'),\n EXPIRED_DEBIT_CARD: route('checkout.updateCard.addCardFlow.addCard'),\n\n PAYER_AUTHENTICATION_REQUIRED: function PAYER_AUTHENTICATION_REQUIRED() {\n _uiRouter.$state.go('checkout.login', {\n targetPage: 'PAYER_AUTHENTICATION_REQUIRED'\n });\n },\n\n // Generic Error Pages\n RESTRICTED_USER: showGenericError('RESTRICTED_USER'),\n PAYER_ACCOUNT_RESTRICTED: showGenericError('RESTRICTED_USER'),\n PAYEE_BLOCKED_TRANSACTION: showGenericError('PAYMENT_DENIED'),\n PAYMENT_ALREADY_DONE: showGenericError('PAYMENT_ALREADY_DONE'),\n DUPLICATE_INVOICE_ID: showGenericError('DUPLICATE_INVOICE_ID'),\n PAYMENT_DENIED: showGenericError('PAYMENT_DENIED'),\n PAYEE_ACCOUNT_RESTRICTED: showGenericError('PAYEE_ACCOUNT_LOCKED_OR_CLOSED'),\n INVALID_RESOURCE_ID: showGenericError('INVALID_RESOURCE_ID'),\n EXPIRED_SESSION: showGenericError('EXPIRED_SESSION'),\n PAYER_CANNOT_PAY: showGenericError('PAYER_CANNOT_PAY'),\n TRANSACTION_RECEIVING_LIMIT_EXCEEDED: showGenericError('PAYER_CANNOT_PAY'),\n PAYER_COUNTRY_NOT_ALLOWED: showGenericError('PAYER_COUNTRY_NOT_ALLOWED'),\n PAYER_COUNTRY_NOT_ALLOWED_DCF: showGenericError('HERMES_PAYER_COUNTRY_NOT_ALLOWED_DCF'),\n PAYER_COUNTRY_NOT_ENABLED: showGenericError('PAYER_COUNTRY_NOT_ENABLED'),\n PAYER_LOGIN_COUNTRY_NOT_ALLOWED: showGenericError('PAYER_LOGIN_COUNTRY_NOT_ALLOWED'),\n GAMING_FUNDING_SOURCE_VALIDATION_FAILED: showGenericError('GAMING_FUNDING_SOURCE_VALIDATION_FAILED'),\n COMPLIANCE_VIOLATION: showGenericError('COMPLIANCE_VIOLATION'),\n DOMESTIC_TRANSACTION_REQUIRED: showGenericError('DOMESTIC_TRANSACTION_REQUIRED'),\n INTERNAL_SERVICE_ERROR: showGenericError('TRANSACTION_REFUSED'),\n NEGATIVE_BALANCE_TRANSACTION_REFUSED: showGenericError('NEGATIVE_BALANCE_TRANSACTION_REFUSED'),\n ACCOUNT_CANNOT_BE_FETCHED: showGenericError('ACCOUNT_CANNOT_BE_FETCHED'),\n BAD_RESPONSE: showGenericError('DEFAULT'),\n TRANSACTION_REFUSED_LEGACY_FALLBACK: showGenericError('TRANSACTION_REFUSED'),\n RISK_DENIED: showGenericError('TRANSACTION_REFUSED'),\n UNSUPPORTED_COUNTRY: showGenericError('UNSUPPORTED_COUNTRY'),\n AGREEMENT_ALREADY_CREATED: showGenericError('AGREEMENT_ALREADY_CREATED'),\n PAYMENT_NOT_APPROVED_FOR_EXECUTION: showGenericError('DEFAULT'),\n PAYER_ACCOUNT_LOCKED_OR_CLOSED: showGenericError('DEFAULT'),\n WALLET_PREFERENCE_SET_ERROR: showGenericError('DEFAULT'),\n ISSUANCE_PIN_SERVICE_ERROR: showGenericError('DEFAULT'),\n SENDING_LIMIT_EXCEEDED: showGenericError('SENDING_LIMIT_EXCEEDED'),\n PAYEE_ACCOUNT_LOCKED_OR_CLOSED: showGenericError('PAYEE_ACCOUNT_LOCKED_OR_CLOSED'),\n UNSUPPORTED_PAYEE_CURRENCY: showGenericError('UNSUPPORTED_PAYEE_CURRENCY'),\n PAYMENT_CANNOT_BE_INITIATED: showGenericError('DEFAULT'),\n PERMISSION_DENIED: showGenericError('DEFAULT'),\n INVALID_TOKEN: showGenericError('DEFAULT'),\n INVALID_FUNDING_OPTION: showGenericError('DEFAULT'),\n VALIDATION_ERROR: showGenericError('DEFAULT'),\n SHIPPING_ADDRESS_INVALID: showGenericError('DEFAULT'),\n INVALID_ARGUMENT: showGenericError('DEFAULT'),\n CREDIT_PAYMENT_NOT_ALLOWED: showGenericError('DEFAULT'),\n MALFORMED_REQUEST: showGenericError('DEFAULT'),\n TWOFA_INACTIVE: showGenericError('DEFAULT'),\n ERROR: showGenericError('DEFAULT'),\n ISSUER_DECLINE: showGenericError('DEFAULT'),\n UNSUPPORTED_CUP_SECURECARD: showGenericError('DEFAULT'),\n STUDENT_ACCOUNT: showGenericError('STUDENT_ACCOUNT'),\n UAL_ISSUANCE_UPDATE_SCOPE_ERROR: showGenericError('DEFAULT'),\n // Forbidden\n BUYER_NOT_SET: forbidden,\n\n // Other\n TRANSACTION_REFUSED: function TRANSACTION_REFUSED(message, data) {\n var clearedRT = data.clearedRT;\n\n if (clearedRT) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CONTINGENCY',\n to: 'process_fallback',\n routing_reason: 'TRANSACTION_REFUSED'\n });\n }\n\n // always go to generic error page, even if logout fails\n _index.$AuthModel.instance().logout()['finally'](showGenericError('TRANSACTION_REFUSED'));\n },\n\n PAYER_INVALID_FOR_PAYMENT: function PAYER_INVALID_FOR_PAYMENT() {\n // Payer is not same payer checkout session was created for.\n return _index.$AuthModel.instance().logout()['finally'](function () {\n return _uiRouter.$state.go('checkout.login', {}, {\n reload: true\n });\n });\n },\n\n CANNOT_PAY_SELF: function CANNOT_PAY_SELF() {\n _index.$AuthModel.instance().meta.selfPay = true;\n _angular.$rootScope.contingency = {};\n _angular.$rootScope.contingency.message = 'CANNOT_PAY_SELF';\n\n return _index.$AuthModel.instance().logout()['finally'](function () {\n return _uiRouter.$state.go(_uiRouter.$state.current, {}, {\n reload: true\n });\n });\n },\n\n VERIFY_USER_IDENTITY: function VERIFY_USER_IDENTITY(message, data) {\n var clearedRT = data.clearedRT;\n\n if (clearedRT) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CONTINGENCY',\n to: 'process_fallback',\n routing_reason: 'VERIFY_USER_IDENTITY'\n });\n }\n\n return handleStepupAuth('VERIFY_USER_IDENTITY', _index.$AuthModel.instance(), data.step_up_context);\n },\n\n LOGIN_CONTINGENCY: function LOGIN_CONTINGENCY() {\n if (_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return _miniBrowser.$miniBrowser.frameBust(_angular.$rootScope.token);\n }\n\n return fallback('ux');\n },\n\n DEFAULT: function logUnhandledContingency() {\n _logger.$logger.warn('ui_unhandled_contingency_' + this.message);\n throw new _squid.$FallbackError({\n reason: 'unhandled_contingency',\n product: 'ux'\n });\n }\n });\n };\n});\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$Forbidden;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$util;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_index.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/contingency.js\n// module id = ./js/lib/contingency.js\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _checkout = require('xo-models/src/checkout');\n\ntry {\n var token = window.meta.token;\n\n _angular.$q.all([_checkout.$CheckoutAppDataModel.instance(token).retrieve(), _checkout.$CheckoutCartModel.instance(token).retrieve()]).then(function (_ref) {\n var appData = _ref[0],\n cart = _ref[1];\n\n if (appData.is_wps_flow()) {\n window.fptiProductOverride = 'wps';\n } else if (cart.isBilling()) {\n window.fptiProductOverride = 'billing';\n }\n })['catch'](function (e) {\n console.error(e);\n });\n} catch (e) {\n console.error(e);\n}\n\n_angular.$q;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/cplIntegration.js\n// module id = ./js/lib/cplIntegration.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$forbiddenHandler = $forbiddenHandler;\nexports.$exceptionHandler = $exceptionHandler;\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-models/src/auth/index');\n\nvar _squid = require('squid');\n\nvar _fallback = require('./fallback');\n\nvar _contingency = require('./contingency');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\n// ui-router rejects $state.go promises if the navigation is cancelled.\nvar uiRouterTransitionErrors = ['transition prevented', 'transition aborted', 'transition superseded'];\n\nfunction canBeSafelyIgnored(err) {\n return err instanceof _squid.$ShortCircuit || uiRouterTransitionErrors.includes(err.message);\n}\n\nfunction constructEventName(toState, fromState) {\n var from = fromState.name.replace(/\\./g, '_') || 'start';\n var to = toState.name.replace(/\\./g, '_') || 'end';\n\n return 'state_change_' + from + '_to_' + to;\n}\n\nfunction constructErrorPayload(_ref) {\n var err = _ref.err,\n message = _ref.message,\n cause = _ref.cause;\n\n var payload = {\n error: err.stack || err.toString(),\n message: message || err.message,\n cause: cause && cause.toString(),\n state: _uiRouter.$state.current.name,\n url: window.location.toString()\n };\n\n angular.extend(payload, err.payload || {});\n\n return payload;\n}\n\nfunction $forbiddenHandler(err) {\n _logger.$logger.warn('forbidden_handler');\n if (!err.transient) {\n _index.$AuthModel.instance().invalidate();\n\n if (_angular.$rootScope.paymentComplete) {\n throw new _squid.$Contingency('PAYMENT_ALREADY_DONE');\n }\n\n _uiRouter.$state.go('checkout.login');\n }\n}\n\nfunction handleThirdPartyErrors(err, cause) {\n var errType = (err && err.constructor && err.constructor.name || 'error').toLowerCase();\n var experience = _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n var errName = 'ui_' + experience.toLowerCase() + '_' + errType;\n var payload = constructErrorPayload({ err: err, cause: cause });\n\n _logger.$logger.error(errName, payload);\n _index.$AuthModel.instance().logout();\n _thirdPartyInfo.thirdPartyExperience.resetThirdPartyExperience();\n\n if (experience === 'VENMO_EXPERIENCE') {\n _uiRouter.$state.go('checkout.login', { venmoError: true });\n }\n\n if (experience === 'BAIDU_EXPERIENCE') {\n _uiRouter.$state.go('checkout.login', { baiduError: true });\n }\n}\n\nfunction isThirdPartyFlow() {\n return _thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token);\n}\n\nvar ERROR_HANDLERS = [{\n type: _squid.$FallbackError,\n handler: _fallback.$fallbackErrorHandler\n}, {\n type: _squid.$Contingency,\n handler: _contingency.$contingencyHandler\n}, {\n type: _squid.$Forbidden,\n handler: $forbiddenHandler\n}];\n\nfunction $exceptionHandler(err, cause) {\n if (canBeSafelyIgnored(err)) {\n if (err.message) {\n _logger.$logger.info(err.message);\n }\n return true;\n }\n\n if (_angular.$rootScope.ERROR_STATE) {\n if (_angular.$rootScope.ERROR_PREVENTED) {\n throw err;\n }\n\n return;\n }\n\n if (isThirdPartyFlow()) {\n if (err instanceof _squid.$Forbidden) {\n // forbidden errors should take you to login page\n return $forbiddenHandler(err);\n } else {\n return handleThirdPartyErrors(err, cause);\n }\n }\n\n var handled = _squid.$util.some(ERROR_HANDLERS, function (errorHandler) {\n if (err instanceof errorHandler.type) {\n errorHandler.handler(err);\n\n return true;\n }\n });\n\n if (handled) {\n return;\n } else if (!err.transient) {\n _angular.$rootScope.ERROR_STATE = err;\n }\n\n var errType = (err.constructor.name || 'error').toLowerCase();\n var errName = 'ui_unhandled_' + errType;\n var errMsg = err.message || '';\n\n if (errMsg.indexOf('infdig') > -1) {\n errName = 'infinite_digest';\n } else if (errMsg.indexOf('inprog') > -1) {\n errName = 'digest_inprog';\n } else if (errMsg.indexOf('badparse') > -1) {\n errName = 'sanitize_badparse';\n } else if (errMsg.match(/^[\\w_]+$/)) {\n errName = 'ui_unhandled_' + errMsg;\n }\n\n if (['ui_unhandled_error', 'ui_unhandled_typeerror'].indexOf(errName) > -1) {\n if (err.stack && err.stack.indexOf('framework') > -1 && err.stack.indexOf('main.js') === -1) {\n errName = 'ui_unhandled_framework_error';\n }\n }\n\n if (err.transient) {\n errName += '_transient';\n }\n\n var payload = constructErrorPayload({ err: err, message: errMsg, cause: cause });\n\n _logger.$logger.error(errName, payload);\n _logger.$logger.error('build_' + _squid.$meta.buildId + '_' + errName, payload); // release vs live traffic separation\n\n // emit the error object for subscribers like xo-tracking\n var event = _angular.$rootScope.$emit('unhandled_error', {\n err: err,\n route: (_uiRouter.$state || {}).current,\n message: payload.error,\n code: payload.cause\n });\n\n if (event.defaultPrevented) {\n _angular.$rootScope.ERROR_PREVENTED = true;\n throw err;\n } else if (!err.transient) {\n return (0, _fallback.$fallbackErrorHandler)(new _squid.$FallbackError({\n reason: errName\n }));\n }\n}\n\n_angular.$rootScope.$on('$stateChangeError', function (event, toState, toParams, fromState, fromParams, err) {\n // Set prevent default to avoid angular UI router to keep looping back to same state\n event.preventDefault();\n $exceptionHandler(err, constructEventName(toState, fromState));\n});\n\n_angular.$rootScope.$on('$windowError', function (event, details) {\n _logger.$logger.error('window_error', details, {\n unique: true\n });\n});\n\nangular.value(\"$forbiddenHandler\", $forbiddenHandler);\nangular.value(\"$exceptionHandlerLazy\", $exceptionHandler);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_index.$AuthModel;\n\n_squid.$util;\n\n_squid.$FallbackError;\n\n_squid.$Forbidden;\n\n_squid.$ShortCircuit;\n\n_squid.$Contingency;\n\n_squid.$meta;\n\n_fallback.$fallbackErrorHandler;\n\n_contingency.$contingencyHandler;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/error.js\n// module id = ./js/lib/error.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _util = require('xo-return-to-merchant/dist/util');\n\nvar _icFallback = require('./icFallback');\n\nvar _integration = require('./integration');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$fallbackErrorHandler', function () {\n return function (err) {\n var reason = err && err.reason;\n var entry_point = err && err.entryPoint;\n var params = err && err.params;\n var model = {};\n var product = err && err.product;\n var isWpsSubscription = void 0;\n\n function getFallbackUrl(urlParams, waType) {\n if (_angular.$rootScope.wps || _angular.$rootScope.invoice) {\n return (0, _squid.$populate)(model, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_squid.$meta.token)\n }).then(function () {\n // defaulting for now to ensure backward compatibility\n var base = _squid.$config.urls.fallbackUrl['buyNow'];\n\n if (model.checkoutAppData.flags.is_cart_upload_flow || waType === 'CartUpload' || waType === 'AddToCart' || model.checkoutAppData.flags.is_shopping_cart_flow || waType === 'ShoppingCart') {\n base = _squid.$config.urls.fallbackUrl['cartUpload'];\n }\n\n if (model.checkoutAppData.flags.is_invoice_flow) {\n urlParams.id = model.checkoutAppData.invoice_id;\n base = _squid.$config.urls.fallbackUrl['invoice'];\n }\n\n if (isWpsSubscription) {\n base = _squid.$config.urls.fallbackUrl['wpsSubscription'];\n }\n\n return _squid.$util.paypalURL(base, urlParams);\n });\n } else {\n return _angular.$q.when().then(function () {\n var base = _squid.$config.urls.fallbackUrl[product];\n\n return _squid.$util.paypalURL(base, urlParams);\n });\n }\n }\n\n function showGenericErrorPage(errorReason) {\n if (_angular.$rootScope.partnerIntegration) {\n _logger.$logger.info('partner_integration_fallback_to_genericErrorPage');\n }\n\n var code = errorReason || reason;\n\n code = code ? window.btoa(code) : code;\n\n _uiRouter.$state.go('checkout.genericError', {\n code: code\n });\n }\n\n function handleFallbackRedirect(url, wpsParams) {\n if (!_squid.$config.fallbackEnabled && !entry_point) {\n return _logger.$log.warn('Fallback inhibited by config', url);\n }\n\n if (_squid.$config.deploy.isLocal() && !entry_point) {\n return _logger.$log.warn('Fallback inhibited in local mode.', url);\n }\n\n _logger.$logger.log(product ? 'info' : 'error', 'fallback', {\n reason: reason,\n product: product,\n entry_point: entry_point,\n error_desc: reason,\n from: _angular.$rootScope.currentState || 'fallback',\n to: product ? 'process_fallback_' + product : 'process_fallback'\n });\n\n _logger.$logger.info('fallback_reason_' + reason, {\n reason: reason\n });\n _logger.$logger.info('build_' + _squid.$meta.buildId + '_fallback_reason_' + reason); // release vs live traffic separation\n\n if (window.xchild) {\n if (window.opener) {\n return (0, _icFallback.$incontextFallback)(window, url);\n }\n\n return _uiRouter.$state.go('checkout.framebust', { action: 'fallback', url: url });\n }\n\n _angular.$rootScope.$emit('loading');\n\n if (product === 'ux') {\n // Otherwise we can make a decision based on whether we're in the minibrowser or not\n return _angular.$rootScope.wps && !_angular.$rootScope.invoice ? _util.$ReturnToMerchant.postTo(url, wpsParams) : _util.$ReturnToMerchant.goTo(url);\n }\n\n // Safe to always return to Aries\n return _squid.$util.redirect(url);\n }\n\n function doFallback() {\n _squid.$util.assert(reason, 'expected fallback reason');\n\n product = product || 'ux';\n\n var urlParams = params || {};\n\n _angular2['default'].extend(urlParams, {\n token: _squid.$meta.token,\n fallback: 1,\n reason: reason,\n landing: entry_point,\n useraction: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token).useraction()\n });\n\n if (_angular.$rootScope.partnerIntegration) {\n urlParams.incontext = '1';\n urlParams.nolegacy = '1';\n } else if (_angular.$rootScope.miniBrowser) {\n urlParams.incontext = '1';\n }\n\n var wpsParams = void 0;\n\n if (_angular.$rootScope.wps) {\n wpsParams = _squid.$util.decodeAndParse(_squid.$meta.xclickParams);\n _logger.$logger.info('wps_fallback', {\n token: _squid.$meta.token,\n reason: reason\n });\n _logger.$logger.info('wps_fallback_reason_' + reason, {\n reason: reason\n });\n _logger.$logger.info('build_' + _squid.$meta.buildId + '_wps_fallback_reason_' + reason); // release vs live traffic separation\n }\n\n var waType = wpsParams && wpsParams.wa_type;\n\n return getFallbackUrl(urlParams, waType).then(function (url) {\n // Fallback whitelist error reason in config to determine if we should fallback or instead redirect to generic error page.\n var fallbackWhitelist = _squid.$config.fallbackWhitelist;\n var whitelist = fallbackWhitelist && fallbackWhitelist.whitelisted || [];\n\n // if error reason not in fallback whitelist, try auto-retry\n if (whitelist && whitelist.indexOf(reason) === -1) {\n var AUTORELOAD_LIMIT = 1; // can be increased later\n // get auto reload count from params - if present\n var autoReloadCount = parseInt(_squid.$util.param('arc'), 10);\n\n // if falsy (NaN or 0)...\n if (!autoReloadCount) {\n // start at zero\n autoReloadCount = 0;\n }\n // if we haven't reloaded _enough_ yet...\n if (autoReloadCount < AUTORELOAD_LIMIT) {\n // bump count\n autoReloadCount++;\n _logger.$logger.info('checkout_fpti', {\n 'from': 'error_auto_reload',\n 'to': 'restart_hermes_app',\n 'int_error_code': reason\n });\n\n // pass params, so url is augmented\n _squid.$util.replace({ arc: autoReloadCount });\n } else {\n // If auto reload didn't fix the error - redirect to error page with retry option\n var RETRY_KEY = 'retry_page_shown';\n var RETRY_PAGE_LIMIT = 3; // Only show the retry page at most 3 times\n var timesSeen = Number(sessionStorage.getItem(RETRY_KEY));\n var destination = 'RETRY';\n var transition_name = 'show_retry_page';\n\n // Reset if there's an invalid value for timesSeen for some reason\n if (!timesSeen || timesSeen < 0) {\n timesSeen = 0;\n }\n\n // Only try to go to retry page if we're within retry attempts\n if (timesSeen < RETRY_PAGE_LIMIT) {\n timesSeen++;\n sessionStorage.setItem(RETRY_KEY, timesSeen);\n } else {\n destination = 'DEFAULT';\n transition_name = 'show_error_page';\n }\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'error_auto_reload',\n 'to': transition_name,\n 'enable_refresh_prompt': reason,\n 'int_error_code': reason\n });\n return showGenericErrorPage(destination);\n }\n } else {\n _logger.$logger.info('fallback_reason_whitelisted', {\n reason: reason,\n product: product\n });\n handleFallbackRedirect(url, wpsParams);\n }\n });\n }\n\n if (product === 'error') {\n _logger.$logger.error(reason, {\n url: window.location.href\n });\n\n var _$config$urls = _squid.$config.urls,\n baseUrl = _$config$urls.baseUrl,\n errorUrl = _$config$urls.errorUrl;\n\n\n return _squid.$util.redirect(baseUrl + errorUrl);\n }\n\n if (_integration.$integration.getConfig('ERROR_AFTER_PAYMENT') && _angular.$rootScope.paymentComplete) {\n // Do not fallback. UX has no context of hermes token and will result in duplicate payment\n _logger.$logger.info('wps_error_after_payment', {\n reason: reason\n });\n\n return showGenericErrorPage('PAYMENT_ALREADY_DONE');\n }\n\n var beamPattern = /^BA-[0-9A-Z]{17}$/;\n var isBeamIntegration = _squid.$meta.baToken && beamPattern.test(_squid.$meta.baToken);\n var cartExchangeFailed = isBeamIntegration && beamPattern.test(_squid.$meta.token);\n\n if (cartExchangeFailed) {\n product = 'ux';\n }\n\n // For Beam Integration - always show generic Error when cart exchange fails.\n // On successful Cart Exchange - disable fallback until MPWEB supports BA token support.\n if (product === 'ux' && isBeamIntegration && cartExchangeFailed) {\n return showGenericErrorPage();\n }\n\n return (0, _squid.$populate)(model, {\n checkoutCart: _index.$CheckoutCartModel.instance(_squid.$meta.token),\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_squid.$meta.token)\n }).then(function () {\n isWpsSubscription = model.checkoutAppData.is_wps_subscription_flow();\n var merchantCountry = model.checkoutAppData.merchant.merchant_country;\n var isSecondButtonTxn = model.checkoutAppData.is_second_button_txn;\n\n // No fallback for Tokenized_Wallet usecases\n if (model.checkoutCart.isWalletTokenization()) {\n return showGenericErrorPage();\n }\n\n // No fallback for DE second button transactions\n if (merchantCountry === 'DE' && isSecondButtonTxn) {\n return showGenericErrorPage();\n }\n\n // Do not fallback if appdata flag dictates no fallback\n if (model.checkoutAppData.flags.disable_legacy_fallback) {\n _logger.$logger.error('fallback_inhibited_for_xo_order_tokens');\n return showGenericErrorPage();\n }\n\n // V.zero - fallback resize before do actual fallback\n if (product === 'ux' && _angular.$rootScope.partnerIntegration) {\n _logger.$logger.info('partner_integration_fallback_to_UX');\n _angular.$window.resizeTo(screen.availWidth, screen.availHeight);\n }\n\n // default do fallback (not actually fallback) - check doFallback() to understand it better\n return doFallback();\n })['catch'](showGenericErrorPage);\n };\n});\n\n_uiRouter.$state;\n\n_logger.$log;\n\n_logger.$logger;\n\n_squid.$config;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$util;\n\n_index.$CheckoutAppDataModel;\n\n_index.$CheckoutCartModel;\n\n_util.$ReturnToMerchant;\n\n_icFallback.$incontextFallback;\n\n_integration.$integration;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/fallback.js\n// module id = ./js/lib/fallback.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$incontextFallback = $incontextFallback;\n\nvar _angular = require('angular');\n\nfunction $incontextFallback(win, url) {\n _angular.$rootScope.$emit('loading');\n window.onbeforeunload = function () {};\n window.onunload = function () {};\n\n var parent = window.opener || window.parent;\n\n if (!window.xprops || !window.xprops.fallback) {\n parent.location = url;\n win.close();\n return;\n }\n\n try {\n var frame = void 0;\n\n try {\n if (typeof parent.onLegacyFallback === 'function') {\n frame = parent;\n }\n } catch (err) {\n // pass\n }\n\n if (!frame) {\n for (var i = 0, ii = parent.frames.length; i < ii; i++) {\n try {\n if (typeof parent.frames[i].onLegacyFallback === 'function') {\n frame = parent.frames[i];\n break;\n }\n } catch (err) {\n // pass\n }\n }\n }\n\n if (!frame) {\n parent.location = url;\n win.close();\n return;\n }\n\n frame.onLegacyFallback(win);\n\n window.addEventListener('unload', function () {\n var width = 970;\n var height = 900;\n var left = void 0;\n var top = void 0;\n\n if (window.outerWidth) {\n left = Math.round((window.outerWidth - width) / 2) + window.screenX;\n top = Math.round((window.outerHeight - height) / 2) + window.screenY;\n } else if (window.screen.width) {\n left = Math.round((window.screen.width - width) / 2);\n top = Math.round((window.screen.height - height) / 2);\n }\n\n window.resizeTo(width, height);\n window.moveTo(left, top);\n });\n\n win.location = url;\n } catch (err) {\n parent.location = url;\n win.close();\n }\n\n window.xprops.fallback(url);\n}\n\nangular.value(\"$incontextFallback\", $incontextFallback);\n_angular.$rootScope;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/icFallback.js\n// module id = ./js/lib/icFallback.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _error = require('./error');\n\nObject.keys(_error).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _error[key];\n }\n });\n});\n\nvar _fallback = require('./fallback');\n\nObject.keys(_fallback).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _fallback[key];\n }\n });\n});\n\nvar _contingency = require('./contingency');\n\nObject.keys(_contingency).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _contingency[key];\n }\n });\n});\n\nvar _metaBuilder = require('./metaBuilder');\n\nObject.keys(_metaBuilder).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _metaBuilder[key];\n }\n });\n});\n\nvar _middleware = require('./middleware');\n\nObject.keys(_middleware).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _middleware[key];\n }\n });\n});\n\nvar _miniBrowser = require('./miniBrowser');\n\nObject.keys(_miniBrowser).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _miniBrowser[key];\n }\n });\n});\n\nvar _security = require('./security');\n\nObject.keys(_security).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _security[key];\n }\n });\n});\n\nvar _stateChangeListener = require('./stateChangeListener');\n\nObject.keys(_stateChangeListener).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _stateChangeListener[key];\n }\n });\n});\n\nvar _cplIntegration = require('./cplIntegration');\n\nObject.keys(_cplIntegration).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function get() {\n return _cplIntegration[key];\n }\n });\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/index.js\n// module id = ./js/lib/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$CONTEXT = exports.$integration = exports.$FLOWS = undefined;\n\nvar _$DEFAULT, _$CONTEXT$FULLPAGE, _$CONTEXT$LIGHTBOX, _$integration$init;\n\nvar _squid = require('squid');\n\nObject.defineProperty(exports, '$integration', {\n enumerable: true,\n get: function get() {\n return _squid.$integration;\n }\n});\nObject.defineProperty(exports, '$CONTEXT', {\n enumerable: true,\n get: function get() {\n return _squid.$CONTEXT;\n }\n});\nvar $FLOWS = exports.$FLOWS = {\n\n // Regular end-to-end checkout flow with one entry and one exit point\n CHECKOUT: 'CHECKOUT',\n\n // Partner flow [ TODO: FACTOR THIS OUT ]\n PARTNER: 'PARTNER',\n\n // Incontext lightbox flow\n INCONTEXT_LIGHTBOX: 'INCONTEXT_LIGHTBOX',\n\n // Incontext popup flow\n INCONTEXT_POPUP: 'INCONTEXT_POPUP',\n\n // Native checkout flow\n NATIVE_CHECKOUT: 'NATIVE_CHECKOUT',\n\n // Messenger Integration flow\n MESSENGER_BA_INTEGRATION: 'MESSENGER_BA_INTEGRATION',\n\n // WPS flow\n WPS: 'WPS',\n\n // WPS Subscription flow\n WPS_SUBSCRIPTION: 'WPS_SUBSCRIPTION'\n};\n\n_squid.$integration.init($FLOWS.CHECKOUT, (_$integration$init = {}, _$integration$init[_squid.$DEFAULT] = (_$DEFAULT = {\n\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n ALLOW_ONETOUCH_TOKEN_EXCHANGE: false,\n ALLOW_PAYER_ID_RETURN_PARAM: true,\n DONE_PAGE: false,\n FALLBACK: true,\n REDIRECT_TOP: true,\n REDIRECT_QUERY_PARAM: false,\n POST_MESSAGE_PARENT: false\n}, _$DEFAULT[$FLOWS.PARTNER] = {\n\n FALLBACK: false,\n REDIRECT_TOP: false,\n POST_MESSAGE_PARENT: false\n}, _$DEFAULT[$FLOWS.INCONTEXT_LIGHTBOX] = {\n\n ALLOW_ONETOUCH_TOKEN_EXCHANGE: true,\n POST_MESSAGE_PARENT: true\n}, _$DEFAULT[$FLOWS.INCONTEXT_POPUP] = {\n\n POST_MESSAGE_PARENT: true\n}, _$DEFAULT[$FLOWS.WPS] = {\n ALLOW_PAYER_ID_RETURN_PARAM: false,\n DONE_PAGE: true,\n ERROR_AFTER_PAYMENT: true,\n POPULATE_MERCHANT_PREFERENCES: true,\n RETURN_METHOD_BASED_ON_MERCHANT_PREFS: true,\n RETURN_URL_FROM_MERCHANT_PREFS: true,\n SHOW_PAY_NOW_LABEL_ON_REVIEW: true,\n SHOW_SHIPPING_METHOD: true\n}, _$DEFAULT[$FLOWS.WPS_SUBSCRIPTION] = {\n ALLOW_PAYER_ID_RETURN_PARAM: false,\n DONE_PAGE: false,\n ERROR_AFTER_PAYMENT: true,\n POPULATE_MERCHANT_PREFERENCES: true,\n RETURN_METHOD_BASED_ON_MERCHANT_PREFS: true,\n RETURN_URL_FROM_MERCHANT_PREFS: true,\n SHOW_PAY_NOW_LABEL_ON_REVIEW: true,\n SHOW_SHIPPING_METHOD: false\n}, _$DEFAULT), _$integration$init[_squid.$CONTEXT.FULLPAGE] = (_$CONTEXT$FULLPAGE = {\n\n CAN_FRAMEBUST: false,\n CAN_FALLBACK_TO_POPUP: false,\n CAN_CLOSE_SELF: false\n\n}, _$CONTEXT$FULLPAGE[$FLOWS.NATIVE_CHECKOUT] = {\n REDIRECT_QUERY_PARAM: true\n}, _$CONTEXT$FULLPAGE[$FLOWS.PARTNER] = {\n REDIRECT_QUERY_PARAM: true\n}, _$CONTEXT$FULLPAGE), _$integration$init[_squid.$CONTEXT.LIGHTBOX] = (_$CONTEXT$LIGHTBOX = {\n\n ALLOW_AUTH: false,\n ALLOW_COLLECT_DATA: false,\n\n CAN_FRAMEBUST: true,\n CAN_FALLBACK_TO_POPUP: true,\n CAN_CLOSE_SELF: false,\n\n RETURN_FROM_DATA_COLLECTION_POPUP: false,\n\n REDIRECT_TOP: false\n\n}, _$CONTEXT$LIGHTBOX[$FLOWS.MESSENGER_BA_INTEGRATION] = {\n\n IS_MESSENGER_BA_INTEGRATION: true\n\n}, _$CONTEXT$LIGHTBOX[$FLOWS.PARTNER] = {\n\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n CAN_FALLBACK_TO_POPUP: false,\n POST_MESSAGE_PARENT: false\n}, _$CONTEXT$LIGHTBOX), _$integration$init[_squid.$CONTEXT.POPUP] = {\n ALLOW_AUTH: true,\n ALLOW_COLLECT_DATA: true,\n\n CAN_FRAMEBUST: true,\n CAN_FALLBACK_TO_POPUP: true,\n CAN_CLOSE_SELF: false\n}, _$integration$init));\n\nangular.value(\"$FLOWS\", $FLOWS);\n_squid.$integration;\n\n_squid.$DEFAULT;\n\n_squid.$CONTEXT;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/integration.js\n// module id = ./js/lib/integration.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$metaBuilder = undefined;\n\nvar _angular = require('angular');\n\nvar _model = require('xo-tracking/dist/model');\n\nvar _squid = require('squid');\n\nfunction buildMeta() {\n return {\n token: _angular.$rootScope.token || _squid.$config.token || _squid.$meta.token || _squid.$util.param('token'),\n calc: _model.$CalDataModel.getCalCorrId(),\n csci: _model.$CalDataModel.getUUID(),\n locale: {\n country: _squid.$locale && _squid.$locale.country,\n language: _squid.$locale && _squid.$locale.lang\n },\n state: 'ui_' + (_angular.$rootScope.currentState || 'checkout_init'),\n app_name: 'hermesnodeweb',\n baToken: _squid.$meta.baToken\n };\n}\n\nfunction buildContext() {\n return {\n locale: {\n country: _squid.$locale && _squid.$locale.country,\n language: _squid.$locale && _squid.$locale.lang\n }\n };\n}\n\n_squid.$Api.registerMetaBuilder(buildMeta);\n\nvar $metaBuilder = exports.$metaBuilder = {\n build: buildMeta,\n buildContext: buildContext\n};\n\nangular.value(\"$metaBuilder\", $metaBuilder);\n_angular.$rootScope;\n\n_model.$CalDataModel;\n\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$Api;\n\n_squid.$locale;\n\n_squid.$config;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/metaBuilder.js\n// module id = ./js/lib/metaBuilder.js\n// module chunks = main-code-split","\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _integration = require('js/lib/integration');\n\nvar _miniBrowser = require('js/lib/miniBrowser');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _constants = require('./constants');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _fn = require('xo-login-components/src/login/fn');\n\nvar _index2 = require('xo-models/src/auth/index');\n\nvar _index3 = require('xo-models/src/checkout/index');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nrequire('./stateChangeListener');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar getDeviceAndNetworkInfo = function getDeviceAndNetworkInfo() {\n var netInfo = navigator && navigator.connection || {};\n var memory = navigator && navigator.deviceMemory;\n return {\n type: netInfo.type, // Network type that browser uses\n effectiveType: netInfo.effectiveType, // 2g, 3g, wifi , etc\n downlink: netInfo.downlink, // Effective bandwidth estimate\n downlinkMax: netInfo.downlinkMax, // Upper bound on the downlink speed of the first network hop\n roundTripTime: netInfo.rtt, // Effective round-trip time estimate\n saveData: netInfo.saveData, // user has requested a reduced data usage mode,\n memory: memory // .5= 512Mib, 1=1024Mib, ...\n };\n};\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\n_angular2['default'].module().factory('$Middleware', function () {\n return [function angularDebug() {\n window.root = _angular.$rootScope;\n window.injector = _angular2['default'].element(document.body).injector();\n\n /**\n * Config experiment to overwrite the $apply method and use $eval instead of $apply if it would throw a digest inprog error.\n * This is mainly to address a Firefox bug with angular digest and timeouts, where timeouts can interrupt normal execution flow under certain circumstances\n * Bug described here: https://github.com/angular/angular.js/issues/10083\n *\n * Can remove as a config option if this is a stable change\n */\n if (_squid.$config.safeApply) {\n _logger.$logger.info('overwriting_angular_apply');\n var proto = Object.getPrototypeOf && Object.getPrototypeOf(_angular.$rootScope);\n\n if (!proto) {\n _logger.$logger.warn('overwriting_angular_apply_failed', {\n reason: 'failed_to_get_prototype'\n });\n } else {\n var originalApply = proto.$apply;\n // If this gets used so many times, something is probably wrong so use original apply instead\n var skipAttempts = 10;\n\n proto.$apply = function (fn) {\n if (skipAttempts && (_angular.$rootScope.$$phase === '$digest' || _angular.$rootScope.$$phase === '$apply')) {\n skipAttempts--;\n\n _logger.$logger.warn('inprog_error_skipped', {\n stack: new Error().stack\n });\n\n this.$eval(fn);\n } else {\n originalApply.call(this, fn);\n }\n };\n }\n }\n }, function waitForToken() {\n if (_squid.$util.isIFrame() && !_squid.$util.param('token') && !_squid.$meta.token) {\n return (0, _angular.$q)(function (resolve, reject) {\n _logger.$logger.info('await_token');\n\n window.addEventListener('message', function (event) {\n var message = JSON.parse(event.data);\n\n if (message.operation !== 'pass_token') {\n return;\n }\n\n var token = message.token;\n\n _logger.$logger.info('passed_token', { token: token });\n _squid.$meta.token = token;\n\n var $preloadApi = new _squid.$Api({ uri: 'preload' });\n\n $preloadApi.retrieve({\n params: { token: token }\n }).then(function (response) {\n $preloadApi.setTransientCache(response.data);\n resolve();\n })['catch'](reject);\n }, false);\n });\n }\n }, function checkToken() {\n var pattern = /^EC-[0-9A-Z]{17}$/;\n var beamPattern = /^BA-[0-9A-Z]{17}$/;\n // wps token are not preceeded with 'EC-'\n var wpsPattern = /^[0-9A-Z]{17}$/;\n var urlToken = (_squid.$util.param('token') || '').trim().slice(0, 20);\n var bodyToken = (_squid.$meta.token || '').trim().slice(0, 20);\n\n if (pattern.test(urlToken)) {\n _angular.$rootScope.token = urlToken;\n } else if (pattern.test(bodyToken)) {\n _angular.$rootScope.token = bodyToken;\n } else if (wpsPattern.test(urlToken)) {\n _logger.$logger.info('isWpsPattern');\n _angular.$rootScope.token = urlToken;\n } else if (wpsPattern.test(bodyToken)) {\n _logger.$logger.info('isWpsPattern');\n _angular.$rootScope.token = bodyToken;\n } else if (beamPattern.test(urlToken)) {\n _angular.$rootScope.token = urlToken;\n _logger.$logger.info('cart_exchange_failed', {\n token: _angular.$rootScope.token\n });\n } else if (beamPattern.test(bodyToken)) {\n _angular.$rootScope.token = bodyToken;\n _logger.$logger.info('cart_exchange_failed', {\n token: _angular.$rootScope.token\n });\n } else {\n return _angular.$q.reject(new _squid.$FallbackError({\n reason: 'no_token',\n product: 'error'\n }));\n }\n }, function resolveLocale() {\n var models = {};\n\n return (0, _squid.$populate)(models, {\n appData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n cart: _index3.$CheckoutCartModel.instance(_angular.$rootScope.token)\n })['finally'](function () {\n return _squid.$locale.retrieve({\n params: {\n ipCountry: _squid.$meta.ipcountry,\n localeTestUrlParam: _squid.$util.param('locale.test'),\n checkoutShippingCountry: models.cart.get('purchase.shipping_address.country_code'),\n merchantCountry: models.appData.get('merchant.merchant_country'),\n checkoutSessionLocale: models.appData.get('merchant.merchant_locale'),\n countryParam: _squid.$util.param('country.x'),\n localeParam: _squid.$util.param('locale.x')\n }\n });\n });\n }, function fraudentInit() {\n return _fn.$fn.init();\n }, function setupIntegration() {\n return _miniBrowser.$miniBrowser.init(_angular.$rootScope.token);\n }, function frameBust() {\n\n if (!_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return;\n }\n\n if (_integration.$integration.getConfig('ALLOW_COLLECT_DATA')) {\n return;\n }\n\n return _miniBrowser.$miniBrowser.frameBust(_angular.$rootScope.token);\n }, function tokenExchange() {\n if (!_integration.$integration.getConfig('ALLOW_ONETOUCH_TOKEN_EXCHANGE')) {\n return;\n }\n\n if (_angular.$rootScope.isPartnerIntegration || !_squid.$util.isIFrame()) {\n return;\n }\n\n var auth = _index2.$AuthModel.instance();\n\n return auth.retrieve().then(function () {\n if (auth.logged_in || auth.remembered || !auth.refresh_token) {\n return;\n }\n\n return auth.action('onetouch');\n });\n }, function xcomponent() {\n if (window.xchild) {\n window.paypalCheckout = window.xchild;\n }\n\n if (window.xprops && window.xprops.init) {\n return _angular.$q.all([_index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve(), _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token).retrieve()]).then(function (_ref) {\n var checkoutAppData = _ref[0],\n checkoutPayee = _ref[1];\n\n return window.xprops.init({\n paymentToken: _angular.$rootScope.token,\n merchantID: checkoutPayee.merchant.id,\n cancelUrl: checkoutAppData.urls.cancel_url\n });\n });\n }\n }, function xcomponentAuth() {\n if (window.xprops && window.xprops.onAuth) {\n var auth = _index2.$AuthModel.instance();\n\n return auth.retrieve().then(function () {\n if (auth.access_token && (auth.logged_in || auth.remembered)) {\n return window.xprops.onAuth({\n accessToken: auth.access_token\n });\n }\n });\n }\n }, function logPage() {\n _logger.$logger.info('href', {\n href: window.location.href,\n windowName: _angular.$window.name && _angular.$window.name.slice(0, 100)\n });\n\n var match = document.cookie.toString().match(/ectoken=([^;]+)/);\n\n if (match && match[1] === _angular.$rootScope.token) {\n _logger.$logger.info('returning_user_same_token');\n } else if (match && match[1] !== _angular.$rootScope.token) {\n _logger.$logger.info('returning_user_diff_token');\n } else {\n _logger.$logger.info('non_returning_user');\n }\n\n document.cookie = 'ectoken=' + _angular.$rootScope.token + '; expires=Fri, 31 Dec 9999 23:59:59 GMT;';\n\n if (window.performance && window.performance.navigation && _angular2['default'].isDefined(window.performance.navigation.type)) {\n var navigationType = {\n 0: 'regular',\n 1: 'reload',\n 2: 'back_forward'\n }[window.performance.navigation.type];\n\n if (navigationType) {\n _logger.$logger.info('navigation_' + navigationType);\n }\n }\n }, function handleTagManager() {\n // ****** Tag Manager Code Start Here ***********\n window.dataLayer = {\n // Two letter country code of the current page's content\n contentCountry: _squid.$locale.country.toLowerCase(),\n // Two letter locale\n contentLanguage: _squid.$locale.lang.toLowerCase()\n };\n\n var tagManagerUrl = _squid.$config.urls.tagProdUrl;\n\n // Based on the environment, Tag Manager end point can be changed.\n // For now the local and stage end points are same.\n if (_squid.$config.deploy.isLocal() || _squid.$config.deploy.isStage()) {\n tagManagerUrl = _squid.$config.urls.tagStageUrl;\n }\n\n // Load bootstrap.js asynchronously\n (function (i, s, o, g, r, a, m) {\n i['tagManagerObject'] = r;\n i[r] = i[r] || function () {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', tagManagerUrl, 'tagManager');\n }, function logoutGuest() {\n var appData = _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token);\n\n return _index2.$AuthModel.instance().retrieve().then(function (auth) {\n // For DE 2nd button transactions, guest accounts are allowed on return flow\n if (appData.get('merchant.merchant_country') === 'DE' && (appData.get('is_second_button_txn') || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit')) {\n if (_credit.$CreditDataModel.instance(_angular.$rootScope.token).getCapeKey()) {\n return;\n } else {\n return auth.action('logout');\n }\n }\n\n // if venmo transaction, we'll log the buyer back in by sending them back to the venmo app\n if (_thirdPartyInfo.thirdPartyExperience.isThirdPartyExperience(_angular.$rootScope.token)) {\n _thirdPartyInfo.thirdPartyExperience.resetThirdPartyExperience(); // removing token from experience flag\n _logger.$logger.info('venmo_login_retry');\n }\n\n if (auth.guest) {\n _logger.$logger.info('guest_logout');\n return auth.logoutAndRedirect('guest_logout');\n }\n });\n }, function checkProcessorDecline() {\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n if (appData.flags.processor_declined) {\n _logger.$logger.info('processor_decline_transaction');\n var authModel = _index2.$AuthModel.instance();\n\n if (authModel.auth_state === 'IDENTIFIED' && !_squid.$util.param('redirectToHermes')) {\n // guest\n return (0, _squid.$dispatch)('xoon', {\n token: _angular.$rootScope.token,\n hermesXoonRedirect: true\n }, {\n fromState: 'checkout_init',\n toState: 'guest',\n 'locale.x': _squid.$locale.lang + '_' + _squid.$locale.country,\n 'country.x': _squid.$locale.country\n });\n }\n\n return;\n }\n });\n }, function logStart() {\n var networkAndDeviceData = getDeviceAndNetworkInfo();\n\n return _squid.$promise.hash({\n isMiniBrowser: _miniBrowser.$miniBrowser.isMiniBrowser(),\n isDirectIntegration: _miniBrowser.$miniBrowser.getDirectIntegration(_angular.$rootScope.token),\n isIframe: _miniBrowser.$miniBrowser.isFramed()\n }).then(function (flags) {\n var app_int_type = _index.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('app_start_design', {\n 'from': 'client_middleware',\n 'to': 'process_app_start_design',\n is_directintegration: flags.isDirectIntegration ? 1 : 0,\n is_incontext: flags.isMiniBrowser || flags.isIframe ? 1 : 0,\n app_int_type: app_int_type,\n 'screen_width': _angular.$window.innerWidth,\n 'screen_height': _angular.$window.innerHeight,\n 'device_memory': networkAndDeviceData.memory,\n 'network_type': networkAndDeviceData.type,\n 'network_effectiveType': networkAndDeviceData.effectiveType,\n 'network_downlink': networkAndDeviceData.downlink,\n 'network_downlinkMax': networkAndDeviceData.downlinkMax,\n 'network_roundTripTime': networkAndDeviceData.roundTripTime,\n 'network_saveData': networkAndDeviceData.saveData\n });\n });\n }, function logPerformance() {\n if (window.enablePerformance) {\n var keys = ['connectEnd', 'connectStart', 'domComplete', 'domContentLoadedEventEnd', 'domContentLoadedEventStart', 'domInteractive', 'domLoading', 'domainLookupEnd', 'domainLookupStart', 'fetchStart', 'loadEventEnd', 'loadEventStart', 'navigationStart', 'redirectEnd', 'redirectStart', 'requestStart', 'responseEnd', 'responseStart', 'secureConnectionStart', 'unloadEventEnd', 'unloadEventStart'];\n var timing = {};\n\n _angular2['default'].forEach(keys, function (key) {\n timing[key] = parseInt(window.performance.timing[key], 10) || 0;\n });\n\n var offset = timing.connectEnd - timing.navigationStart;\n\n if (timing.connectEnd && window.clientStartTime) {\n _angular2['default'].forEach(timing, function (time, name) {\n if (time && _angular2['default'].isNumber(time)) {\n _logger.$logger.info('timing_' + name, {\n client_elapsed: time - timing.connectEnd - (window.clientStartTime - offset),\n req_elapsed: time - timing.connectEnd\n });\n }\n });\n }\n\n _logger.$logger.info('timing', timing);\n\n if (window.performance.memory) {\n _logger.$logger.info('memory', window.performance.memory);\n }\n\n if (window.performance.navigation) {\n _logger.$logger.info('navigation', window.performance.navigation);\n }\n\n if (window.performance.getEntries) {\n var logged = [];\n var logResources = function logResources() {\n _angular2['default'].forEach(window.performance.getEntries(), function (resource) {\n if (!resource || !resource.name) {\n return;\n }\n\n if (logged.indexOf(resource.name) === -1) {\n logged.push(resource.name);\n } else {\n return;\n }\n\n if (resource.initiatorType) {\n _logger.$logger.info(resource.initiatorType, resource);\n }\n });\n };\n\n logResources();\n setInterval(logResources, 500);\n }\n\n if (timing.connectEnd && timing.navigationStart && window.clientStartTime) {\n _logger.$logger.info('js_init', {\n client_elapsed: 0,\n req_elapsed: window.clientStartTime - offset\n });\n }\n } else {\n _logger.$logger.info('no_performance_data');\n }\n }, function logAuthState() {\n return _index2.$AuthModel.instance().retrieve().then(function (auth) {\n if (auth.logged_in) {\n _logger.$logger.info('user_logged_in');\n } else if (auth.remembered) {\n _logger.$logger.info('user_remembered');\n } else {\n _logger.$logger.info('user_not_logged_in');\n }\n });\n },\n\n // check for access token in the hash.\n function checkAccessToken() {\n if (window.xprops && window.xprops.accessToken) {\n return window.xprops.accessToken().then(function (accessToken) {\n _squid.$Api.addHeader('x-paypal-internal-euat', accessToken);\n return _index2.$AuthModel.instance().reload();\n });\n }\n\n var euat = _squid.$util.param('euat');\n\n if (euat) {\n var accessToken = euat === '1' ? window.location.hash.substr(2) : euat;\n\n if (accessToken) {\n _logger.$logger.info(euat === '1' ? 'access_token_from_hash' : 'access_token_from_param', {\n access_token: accessToken\n });\n\n /* if (euat === '1') {\n window.location.hash = '';\n } */\n\n var authModel = _index2.$AuthModel.instance();\n\n authModel.access_token = accessToken;\n\n if (window.xprops && window.xprops.onAuth) {\n window.xprops.onAuth({ accessToken: accessToken });\n }\n }\n }\n },\n\n // check for FraudNet for Mobile View\n function enableFraudNetForMobileWebView() {\n if (_index.$DeviceInfo.isApp()) {\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n return (0, _squid.$pxp)(_squid.$config.ulMeta.hermesnodePxpConfig, {\n 'ctx.COUNTRY': appData.merchant.merchant_country\n }, 'xo_hermesnode_fraudnet_webview_treatment', false, true).then(function (result) {\n if (result && result.treatment_name) {\n _angular.$window.enableFraudNetForMobileWebView = true;\n }\n });\n });\n }\n },\n\n // Logs if service workers are enabled\n function isServiceWorkerSupported() {\n if ('serviceWorker' in navigator) {\n _logger.$logger.info('service_worker_supported');\n } else {\n _logger.$logger.info('service_worker_not_supported');\n }\n }, function forceCookiesDisabled() {\n if (_index.$DeviceInfo.isApp()) {\n return _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token).retrieve().then(function (payee) {\n if (~_squid.$config.forceCookiesDisabled.indexOf(payee.merchant.id)) {\n _logger.$logger.info('force_cookies_disabled');\n _squid.$Api.forceCookiesDisabled = true;\n }\n });\n }\n }, function checkFramed() {\n if (_squid.$util.isIFrame()) {\n // Set this as \"framed\" mode (X icon, escape hatch, etc.)\n document.documentElement.className += ' framed';\n }\n }, function loginViaEuat() {\n // log in user via euat prior to rendering login screen.\n if (_squid.$util.param('euat') === '1') {\n var auth = _index2.$AuthModel.instance();\n\n if (auth.accessToken() && !auth.loggedIn()) {\n return auth.reload({\n headers: {\n 'x-paypal-internal-euat': auth.accessToken()\n },\n resultModel: auth,\n success: function success() {\n return delete auth.access_token;\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n }\n });\n }\n }\n }, function checkForSDK() {\n var isSDKintegration = window.name && window.name.indexOf('xcomponent__ppcheckout') === 0 || window.name.indexOf('zoid__ppcheckout') === 0 || _squid.$util.param('xcomponent') || _squid.$util.param('zoid');\n\n var sdkLoaded = window.paypal && window.xprops && window.paypal.Checkout && window.paypal.Checkout.isChild();\n\n if (isSDKintegration && !sdkLoaded) {\n throw new Error('Checkout loaded in an SDK integration, but no xprops found. Maybe the sdk script failed to load in the child window.');\n }\n }, function urlFormatCheck() {\n // To verify the kind of urls being used for cancel and return.\n // Deeplink and universal urls have potential to affect integration\n // we need to log the use cases to keep track.\n return _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token).retrieve().then(function (appData) {\n var urls = appData.urls || {};\n // 'regular' being false implies we have a non-standard format.\n var regular = new RegExp(_constants.constants.regex.safeProtocols, 'g');\n // 'modifed' is to check whether our new regex can catch all use cases.\n var modifed = new RegExp(_constants.constants.regex.protocolsWithDeeplink, 'g');\n _logger.$logger.info('url_pattern_test', {\n cancel_url: {\n regular: regular.test(urls.cancel_url),\n modifed: modifed.test(urls.cancel_url)\n },\n return_url: {\n regular: regular.test(urls.return_url),\n modifed: modifed.test(urls.return_url)\n }\n });\n });\n }];\n});\n\n_logger.$logger;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_constants.constants;\n\n_squid.$Api;\n\n_squid.$Class;\n\n_squid.$config;\n\n_squid.$dispatch;\n\n_squid.$FallbackError;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$promise;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$DeviceInfo;\n\n_fn.$fn;\n\n_index2.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutCartModel;\n\n_index3.$CheckoutPayeeModel;\n\n_credit.$CreditDataModel;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/middleware.js\n// module id = ./js/lib/middleware.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$miniBrowser = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _util = require('xo-return-to-merchant/dist/util');\n\nvar _integration = require('./integration');\n\nvar _error = require('./error');\n\nvar _$stateGo = _uiRouter.$state.go;\n\nvar logStateNotFoundAndThrow = function logStateNotFoundAndThrow(_ref) {\n var name = _ref.name,\n _ref$logName = _ref.logName,\n logName = _ref$logName === undefined ? '' : _ref$logName;\n\n _logger.$logger.error('state_not_found' + logName, {\n name: name,\n hash: window.location.hash\n });\n throw new Error('state_not_found' + logName + ': ' + name);\n};\n\n_uiRouter.$state.go = function (name, params) {\n var _this = this,\n _arguments = arguments;\n\n var stateObj = _uiRouter.$state.get(name);\n\n var stateGo = function stateGo(state) {\n if (!window.xchild) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n if (!state.loginRequired) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n // If we're allowed to collect data in this integration, we don't need this functionality\n if (_integration.$integration.getConfig('ALLOW_COLLECT_DATA')) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n var forceIframe = window.paypal && window.paypal.forceIframe && window.paypal.forceIframe();\n\n if (forceIframe) {\n return _$stateGo.apply(_this, _arguments);\n }\n\n // First check our integration supports falling back to a popup\n if (!_integration.$integration.getConfig('CAN_FALLBACK_TO_POPUP')) {\n throw _integration.$integration.error('Can not fallback to popup for data collection');\n }\n\n window.xchild.hide();\n\n var url = window.location.href.split('#')[0] + '#/' + state.name.replace(/\\./g, '/');\n var xprops = _extends({}, window.xprops);\n\n xprops.url = url;\n\n window.ppxo.Checkout.renderPopupTo(window.xchild.getParentRenderWindow(), xprops)['catch'](function (err) {\n\n if (window.ppxo.PopupOpenError && err instanceof window.ppxo.PopupOpenError) {\n window.xchild.show();\n\n _logger.$logger.warn('framebust_from_' + name.replace(/[^a-zA-Z0-9]+/g, '_'));\n\n return _$stateGo.call(_this, 'checkout.framebust', { action: 'open', url: url });\n }\n\n (0, _error.$exceptionHandler)(err);\n });\n };\n\n if (stateObj) {\n return stateGo(stateObj);\n } else if (_squid.$meta.codeSplitting) {\n // in case of code split - attempt to load route and then change the state\n return (0, _squid.lazyLoadRoute)(name, params, false)['catch'](function () {\n logStateNotFoundAndThrow({ name: name, logName: '_lazy_loading' });\n }).then(function () {\n stateObj = _uiRouter.$state.get(name);\n return stateGo(stateObj);\n });\n } else {\n logStateNotFoundAndThrow({ name: name });\n }\n};\n\nvar $miniBrowser = exports.$miniBrowser = {\n flags: {},\n config: {},\n isMiniBrowser: function isMiniBrowser() {\n return window.name && window.name.indexOf('PPFrame') === 0 && _squid.$util.isPopup() || _squid.$util.param('incontext') === '1' || window.xchild && _squid.$util.isPopup();\n },\n isFramed: function isFramed() {\n return _squid.$util.isIFrame();\n },\n getPartnerIntegration: function getPartnerIntegration(token) {\n return _squid.$promise.call(function () {\n if (window.name === 'PPFrameRedirect' || _squid.$util.param('nolegacy') === '1') {\n return true;\n }\n return _checkout.$CheckoutCartModel.instance(token).retrieve().then(function (cart) {\n return Boolean(cart.partnerIntegration);\n });\n });\n },\n getNativeCheckoutIntegration: function getNativeCheckoutIntegration(token) {\n return _squid.$promise.call(function () {\n if (_squid.$util.param('native_xo') === '1') {\n return true;\n }\n return false;\n });\n },\n getMessengerBAIntegration: function getMessengerBAIntegration(token) {\n return _squid.$promise.call(function () {\n if (window.xprops && window.xprops.experience && window.xprops.experience.messenger) {\n _logger.$logger.info('getMessengerBAIntegration == true');\n return true;\n }\n return false;\n });\n },\n getDirectIntegration: function getDirectIntegration(token) {\n return _squid.$promise.call(function () {\n if (_squid.$util.param('incontext')) {\n return true;\n }\n\n if (this.isMiniBrowser() || this.isFramed()) {\n return true;\n }\n\n if (window.location.pathname.indexOf('/checkoutnow') > -1 || window.location.pathname.indexOf('/webapps/hermes') > -1) {\n return true;\n }\n\n return this.getPartnerIntegration(token);\n }.bind(this));\n },\n getWPSIntegration: function getWPSIntegration(token) {\n return _checkout.$CheckoutAppDataModel.instance(token).retrieve().then(function (appData) {\n var isWPS = appData.is_wps_flow();\n\n // TODO: remove these, we should not use $rootScope\n _angular.$rootScope.invoice = appData.flags.is_invoice_flow;\n _angular.$rootScope.wps = isWPS;\n\n if (isWPS) {\n _logger.$logger.info('hermes_wps_flow', {\n token: _angular.$rootScope.token\n });\n } else {\n _logger.$logger.info('hermes_xo_order_flow', {\n token: _angular.$rootScope.token\n });\n }\n return isWPS;\n });\n },\n\n getWpsSubscriptionIntegration: function getWpsSubscriptionIntegration(token) {\n return _checkout.$CheckoutAppDataModel.instance(token).retrieve().then(function (appData) {\n return appData.is_wps_subscription_flow();\n });\n },\n\n getFlags: function getFlags(token) {\n _logger.$logger.info('miniBrowser_getFlags');\n return _squid.$promise.hash({\n isMiniBrowser: this.isMiniBrowser(),\n isFramed: this.isFramed(),\n isPartnerIntegration: this.getPartnerIntegration(token),\n isDirectIntegration: this.getDirectIntegration(token),\n isNativeCheckout: this.getNativeCheckoutIntegration(token),\n isMessengerBAIntegration: this.getMessengerBAIntegration(token),\n isWPSIntegration: this.getWPSIntegration(token),\n isWpsSubscription: this.getWpsSubscriptionIntegration(token)\n }).then(function (flags) {\n\n // TODO: Remove these, we should not use $rootScope\n _angular.$rootScope.miniBrowser = flags.isMiniBrowser;\n _angular.$rootScope.partnerIntegration = flags.isPartnerIntegration;\n\n if (flags.isPartnerIntegration && !window.xchild) {\n _integration.$integration.setFlow(_integration.$FLOWS.PARTNER);\n } else if (flags.isFramed) {\n _integration.$integration.setFlow(_integration.$FLOWS.INCONTEXT_LIGHTBOX);\n if (flags.isMessengerBAIntegration) {\n _integration.$integration.setFlow(_integration.$FLOWS.MESSENGER_BA_INTEGRATION);\n _logger.$logger.info('$integration.setFlow($FLOWS.MESSENGER_BA_INTEGRATION)');\n }\n } else if (flags.isMiniBrowser) {\n _integration.$integration.setFlow(_integration.$FLOWS.INCONTEXT_POPUP);\n } else if (flags.isNativeCheckout) {\n _integration.$integration.setFlow(_integration.$FLOWS.NATIVE_CHECKOUT);\n } else if (flags.isWpsSubscription) {\n _integration.$integration.setFlow(_integration.$FLOWS.WPS_SUBSCRIPTION);\n } else if (flags.isWPSIntegration) {\n _integration.$integration.setFlow(_integration.$FLOWS.WPS);\n } else {\n _integration.$integration.setFlow(_integration.$FLOWS.CHECKOUT);\n }\n\n return flags;\n });\n },\n init: function init(token) {\n var _this2 = this;\n\n _logger.$logger.info('miniBrowser_init');\n return _squid.$promise.sequential([function () {\n return _this2.enableAutoResize();\n }, function () {\n return _this2.getFlags(token);\n }, function () {\n return _this2.logIntegration(token);\n }, function () {\n return _this2.sendPostMessage(token);\n }, function () {\n return _this2.handleWindowOpenerClose();\n }]);\n },\n enableAutoResize: function enableAutoResize() {\n _angular.$rootScope.$on('allLoaded', function () {\n if (window.xchild && window.xchild.enableAutoResize) {\n window.xchild.enableAutoResize();\n }\n });\n },\n logIntegration: function logIntegration(token) {\n _logger.$logger.info('miniBrowser_logIntegration');\n return this.getFlags(token).then(function (flags) {\n var match = window.name.match(/PPFrame(\\w+)/);\n var guid = match && match[1];\n\n if (guid) {\n _logger.$logger.info('integration_guid', {\n guid: guid\n });\n }\n\n if (window.xchild || guid) {\n var beacon = new Image();\n\n beacon.src = '/webapps/hermes/api/logger?event=ppxo_uid_token&uid=' + (window.xprops ? window.xprops.uid : guid) + '&token=' + token;\n }\n\n _logger.$logger.info(flags.isMiniBrowser ? 'minibrowser_flow' : 'non_minibrowser_flow');\n _logger.$logger.info(flags.isFramed ? 'framed_flow' : 'non_framed_flow');\n _logger.$logger.info(flags.isDirectIntegration ? 'direct_integration_flow' : 'non_direct_integration_flow');\n _logger.$logger.info(flags.isPartnerIntegration ? 'partner_integration_flow' : 'non_partner_integration_flow');\n });\n },\n\n handleWindowOpenerClose: function handleWindowOpenerClose() {\n _logger.$logger.info('miniBrowser_handleWindowOpenerClose');\n if (_integration.$integration.isContext(_integration.$CONTEXT.POPUP)) {\n var interval = setInterval(function () {\n try {\n if (!window.opener || window.opener.closed) {\n clearInterval(interval);\n _logger.$logger.info('window_opener_closed');\n // TODO: close this window if opener closed?\n }\n } catch (err) {\n // pass\n }\n }, 50);\n }\n },\n\n sendPostMessage: function sendPostMessage(token) {\n if (window.xchild) {\n return;\n }\n\n return _squid.$promise.hash({\n isPartnerIntegration: this.getPartnerIntegration(token),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(token).retrieve()\n }).then(function (data) {\n if (!_integration.$integration.getConfig('POST_MESSAGE_PARENT')) {\n return;\n }\n\n var msg = void 0;\n\n try {\n msg = {\n operation: 'init',\n cancelUrl: data.checkoutAppData.urls.cancel_url,\n landingUrl: window.location.href,\n secureWindowmsg: _squid.$locale.content.scripts.secureWindowmsg\n };\n } catch (err) {\n return _logger.$logger.error('minibrowser_msg_construction_failed', {\n error: err\n });\n }\n\n if (!_util.$ReturnToMerchant.postToMerchant(msg)) {\n _logger.$logger.error('minibrowser_post_failed');\n }\n });\n },\n frameBust: function frameBust(token) {\n return _squid.$promise.hash({\n isFramed: this.isFramed()\n }).then(function (flags) {\n if (!flags.isFramed) {\n return;\n }\n\n var forceIframe = window.paypal && window.paypal.forceIframe && window.paypal.forceIframe();\n\n if (forceIframe) {\n return;\n }\n\n if (window.xchild) {\n _logger.$logger.info('frame_bust_xchild');\n _uiRouter.$state.go('checkout.framebust', { action: 'open', url: window.location.href.split('#')[0] });\n } else {\n _logger.$logger.info('frame_bust');\n _squid.$util.redirect(window.location.href, { frameBust: true });\n }\n });\n }\n};\n\nangular.value(\"$miniBrowser\", $miniBrowser);\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$promise;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.lazyLoadRoute;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_util.$ReturnToMerchant;\n\n_integration.$integration;\n\n_integration.$FLOWS;\n\n_integration.$CONTEXT;\n\n_error.$exceptionHandler;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/miniBrowser.js\n// module id = ./js/lib/miniBrowser.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nvar _index = require('xo-models/src/auth/index');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n var errorCount = 0;\n\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\n var auth = _index.$AuthModel.instance();\n\n if (toState.auth !== false && !auth.logged_in) {\n errorCount += 1;\n if (errorCount === 10) {\n _logger.$logger.error('max_state_requires_auth');\n }\n if (errorCount >= 10) {\n return;\n }\n _logger.$logger.warn('state_requires_auth', {\n stateName: toState.name\n });\n event.preventDefault();\n throw new _squid.$Forbidden('state_transition_forbidden', { fromState: fromState, toState: toState });\n }\n });\n\n (0, _angular.$interval)(function () {\n var auth = _index.$AuthModel.instance();\n\n if (auth.logged_in) {\n // disallow_login_switch is used for Google Pay - acount linking to hide \"not you\" button (see xo-hercules/auth/outputMapper) and prevent user to be logged out\n // instead we should show error page\n if (auth.disallow_login_switch) {\n _uiRouter.$state.go('checkout.genericError', {\n code: 'DEFAULT_TOKENIZED_WALLET_ERROR'\n });\n return;\n }\n\n auth.reload({ silent: true }).then(function () {\n if (_uiRouter.$state.current.auth !== false && !auth.logged_in) {\n errorCount += 1;\n if (errorCount === 10) {\n _logger.$logger.error('max_state_requires_auth');\n }\n if (errorCount >= 10) {\n return;\n }\n _logger.$logger.info('idle_timeout');\n _logger.$logger.warn('state_requires_auth', {\n stateName: _uiRouter.$state.current.name\n });\n errorCount += 1;\n throw new _squid.$Forbidden();\n }\n });\n }\n }, 30 * 60 * 1000);\n\n _squid.$util.idleTimeout(10 * 60 * 60 * 1000);\n});\n\n_uiRouter.$state;\n\n_squid.$Forbidden;\n\n_squid.$util;\n\n_logger.$logger;\n\n_index.$AuthModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/security.js\n// module id = ./js/lib/security.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _angular2 = _interopRequireDefault(_angular);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n_angular2['default'].module().run(function () {\n // Decorate the current state with the transition params\n _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {\n _uiRouter.$state.toState = toState;\n _uiRouter.$state.toParams = toParams;\n _uiRouter.$state.fromState = fromState;\n _uiRouter.$state.fromParams = fromParams;\n });\n});\n\n_uiRouter.$state;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./js/lib/stateChangeListener.js\n// module id = ./js/lib/stateChangeListener.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _wallet = require('xo-models/src/wallet');\n\n/**\n * $CardartInstrument is a resuable Angular factory service.\n * It intends to abstract away common functionalities that are\n * being used in multiple pages or components.\n *\n * Currently, $CardardInstrument is being used at:\n * - xo-review\n * - xo-select-fi\n * - xo-sidebar-manage-wallet\n * - xo-wallet\n */\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$CardArtInstrument', function () {\n var CARD = 'CARD';\n var BALANCE = 'BALANCE';\n var wallet = _wallet.$WalletModel.instance(_squid.$meta.token);\n\n var isCardArtEnable = function isCardArtEnable(fiMeta) {\n return fiMeta && fiMeta.cardArtEnabled();\n };\n\n /**\n * @param {Ojbect} instrument A future payment instrument\n * @returns {Object}\n */\n var normalizeFutureInstrument = function normalizeFutureInstrument(instrument) {\n return {\n id: instrument.instrument_id,\n type: instrument.type,\n cardArtUrl: wallet.getCardArt(instrument)\n };\n };\n\n /**\n * @param {Object} options\n * @param {Object} otpions.primaryFs A primaryFs funding options\n * @returns {Object}\n */\n var normalizeFundingOptions = function normalizeFundingOptions(_ref) {\n var primaryFs = _ref.primaryFs;\n\n if (!primaryFs) {\n return {};\n }\n\n return {\n id: primaryFs.id,\n type: primaryFs.type,\n cardArtUrl: wallet.getCardArt(primaryFs)\n };\n };\n\n /**\n * @typedef {Object} FI\n * @property {String} fi_id\n * @property {String} fi_type\n * @property {String} is_cardart_shown\n * @property {String} eligible\n *\n * @typedef {Object} CardartInstrumentation\n * @property {Array} fi\n *\n * @param {Object} options\n * @param {Array} options.plans An array of fundingOptions plans or future payment instruments\n * @returns {Object}\n */\n var normalizePayload = function normalizePayload(_ref2) {\n var _ref2$plans = _ref2.plans,\n plans = _ref2$plans === undefined ? [] : _ref2$plans;\n return {\n fi: plans.filter(function (plan, index, arr) {\n var id = arr.map(function (item) {\n return item.id;\n });\n\n return index === id.indexOf(plan.id) && plan.type !== BALANCE;\n }).map(function (_ref3) {\n var id = _ref3.id,\n type = _ref3.type,\n cardArtUrl = _ref3.cardArtUrl;\n return {\n fi_id: id,\n fi_type: 'fi_' + (type && type.toLowerCase()),\n is_cardart_shown: type === CARD && cardArtUrl ? '1' : '0',\n eligible: type === CARD && cardArtUrl ? 'cardart' : null\n };\n })\n };\n };\n\n /**\n * @param {Object} options\n * @param {Object} options.checkoutSession $CheckoutSessionModel\n * @returns {Array}\n */\n var getSelectedInstrument = function getSelectedInstrument(_ref4) {\n var checkoutSession = _ref4.checkoutSession;\n\n return checkoutSession.getSelectedStickyInstrument() ? [checkoutSession.getSelectedStickyInstrument()].map(normalizeFutureInstrument) : [];\n };\n\n /**\n * CreatePayload creates cardart instrumentation based on the following criteria:\n *\n * - showMultipleFiVariants pxp\n * - showMultipleFiVariants + 3FI pxp\n * - singleFI pxp\n *\n * @param {Object} options\n * @param {Object} options.checkoutSession $CheckoutSessionModel\n * @param {Boolean} options.isBillingNoPurchase $CheckoutCartModel.isBillingNoPurchase()\n * @param {Boolean} options.stickyEligible Default to be false\n * @param {Boolean} options.renderMultipleFi Determines whether to render multiple FIs or not\n * @param {Boolean} options.renderSingleFi Determines whether to render single FI or not\n * @param {Object} options.showMoreFiState ShowMoreFiState to determine whether we renders `Show More` expereience or not.\n * See $ShowMoreFiFactory.get() for details implementation\n * @returns {Object}\n */\n var createPayload = function createPayload(_ref5) {\n var checkoutSession = _ref5.checkoutSession,\n isBillingNoPurchase = _ref5.isBillingNoPurchase,\n _ref5$stickyEligible = _ref5.stickyEligible,\n stickyEligible = _ref5$stickyEligible === undefined ? false : _ref5$stickyEligible,\n _ref5$renderMultipleF = _ref5.renderMultipleFi,\n renderMultipleFi = _ref5$renderMultipleF === undefined ? false : _ref5$renderMultipleF,\n _ref5$renderSingleFi = _ref5.renderSingleFi,\n renderSingleFi = _ref5$renderSingleFi === undefined ? false : _ref5$renderSingleFi,\n _ref5$showMoreFiState = _ref5.showMoreFiState,\n showMoreFiState = _ref5$showMoreFiState === undefined ? {\n eligible: false,\n isTooManyFi: false,\n isShowMoreBtnClicked: false\n } : _ref5$showMoreFiState;\n var eligible = showMoreFiState.eligible,\n isTooManyFi = showMoreFiState.isTooManyFi,\n isShowMoreBtnClicked = showMoreFiState.isShowMoreBtnClicked;\n\n var plans = isBillingNoPurchase ? checkoutSession.get('futurePaymentInstruments', []).map(normalizeFutureInstrument) : (checkoutSession.getPlanList() || []).map(normalizeFundingOptions);\n\n // when we do decide to render multiple FIs experience\n if (renderMultipleFi) {\n plans = eligible && isTooManyFi // eslint-disable-line no-nested-ternary\n ? isShowMoreBtnClicked ? plans.slice(0) // If `addMore` action has been triggered, we log all FIs\n : plans.slice(0, 3) // otherwise, we only log the first 3FIs\n : plans;\n } else if (renderSingleFi) {\n // Or, render a single FI experience\n // ensure we check if we have a sticky plan\n if (stickyEligible) {\n plans = getSelectedInstrument({ checkoutSession: checkoutSession });\n } else {\n plans = plans.slice(0, 1);\n }\n }\n\n return normalizePayload({ plans: plans });\n };\n\n return {\n createPayload: createPayload,\n isCardArtEnable: isCardArtEnable\n };\n});\n\n_squid.$meta;\n\n_wallet.$WalletModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/services/cardart-instrument/index.js\n// module id = ./pages/services/cardart-instrument/index.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _integration = require('js/lib/integration');\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _gdprCookieBanner = require('xo-models/src/gdprCookieBanner');\n\nvar _dist = require('xo-device-info/dist');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _fn = require('xo-login-components/src/login/fn');\n\nvar _utils = require('xo-login-components/src/dolphin/utils');\n\nrequire('xo-ui-components/src/spinner/directive');\n\nrequire('xo-page-components/src/merchant-header/directive');\n\nrequire('xo-page-components/src/header/directive');\n\nrequire('xo-page-components/src/footer/directive');\n\nrequire('xo-page-components/src/cart/directive');\n\nrequire('xo-page-components/src/gdprCookieBanner/directive');\n\nrequire('xo-ui-components/src/directionality/directive');\n\nrequire('xo-ui-components/src/error-tooltip/directive');\n\nrequire('xo-validation/dist/directive');\n\nrequire('xo-login-components/src/login-overlay/directive');\n\nrequire('xo-login-components/src/dolphin/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nexports['default'] = _squid.$Component.extend('$xoCheckoutComponent', {\n tag: 'xo-checkout',\n template: _template2['default'],\n resolve: {\n pxp: function pxp() {\n var pxp = _squid.$config.purchaseProtectionProp && _squid.$config.purchaseProtectionProp.pxp;\n\n return {\n purchaseProtectionAlt: (0, _squid.$pxp)(pxp.pgName, pxp.patterns, undefined, false, true)\n };\n }\n },\n controller: function controller() {\n if (_angular.$location.path() === '/checkout') {\n _uiRouter.$state.go('checkout.review');\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.isMessengerBAIntegration = _integration.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n this.token = _angular.$rootScope.token;\n this.locale = _squid.$locale;\n this.redirectiframe = _angular.$rootScope.partnerIntegration;\n this.redirectLightbox = true;\n this.escapeHatchInContext = !_angular.$rootScope.partnerIntegration;\n this.displayHeader = true;\n\n this.reviewUrl = 'checkout.review';\n this.isApp = _dist.$DeviceInfo.isApp();\n\n this.isDolphinEligible = false;\n\n _angular.$document.bind('click', function (event) {\n _this.$broadcast('clickBody', event.target);\n });\n\n function rtl() {\n if ((0, _squid.$feature)('rtl')) {\n _angular.$document.prop('documentElement').setAttribute('dir', _squid.$locale.metadata.directionality);\n }\n }\n\n this.$on('metadataChange', rtl);\n rtl();\n\n _fn.$fn.trigger();\n\n this.isGdprValid = _gdprCookieBanner.isGdprValid;\n },\n populate: function populate() {\n var _this2 = this;\n\n if (this.pxp.purchaseProtectionAlt) {\n _squid.$config.features.DEFAULT.propValue = false;\n }\n\n function requiresRiskyLogin(state) {\n var auth = _auth.$AuthModel.instance();\n\n return state.loginRequired && auth.remembered;\n }\n\n function displayRiskyLogin(oldState, newState, newParams) {\n if (!_integration.$integration.getConfig('ALLOW_AUTH')) {\n _logger.$logger.info('login_overlay_suppressed');\n return;\n }\n\n var isUserinitiated = oldState.template && !oldState.name.match(/checkout\\.login/);\n\n if (isUserinitiated) {\n var stateName = newState && newState.name;\n var subFlowName = stateName && stateName.replace(/^.*\\./, '');\n\n if (subFlowName === 'sepaAgreement') {\n _uiRouter.$state.go('checkout.review');\n }\n\n _angular.$rootScope.$broadcast('$insufficientPermission', {\n oldState: oldState.name,\n newState: newState.name,\n pageOnOverlay: newState.pageOnOverlay\n });\n } else {\n var auth = _auth.$AuthModel.instance();\n var cause = newParams && newParams.message ? newParams.message : newState.name.replace(/^.*\\./, '');\n\n _logger.$logger.info('RISKY_LOGIN_TRANSITION_' + cause);\n\n var showPasswordRecovery = (0, _squid.$feature)('pomaPasswordRecovery') && auth.password_less;\n var transition = showPasswordRecovery ? 'checkout.createPassword' : 'checkout.login';\n\n _uiRouter.$state.go(transition, {\n targetPage: cause,\n showNotYou: true\n });\n }\n return false;\n }\n\n function displayHeader(stateName) {\n // We'll be hiding the header during the third party wallet flow, since the third Party will brand the flow from their end\n return !(stateName === 'checkout.thirdPartyWalletFlow');\n }\n\n var checkDolphinEligibility = function checkDolphinEligibility(stateName) {\n return (0, _utils.getDolphinEligibility)(stateName).then(function (eligibility) {\n _this2.isDolphinEligible = eligibility;\n });\n };\n\n // Check dolphin eligibility for explicit page reload\n checkDolphinEligibility(_uiRouter.$state.current && _uiRouter.$state.current.name);\n\n var cancelStateChangeEventListener = _angular.$rootScope.$on('$stateChangeStart', function (event, newState, newParams, oldState) {\n // venmo flag\n _this2.showVenmoExperience = _thirdPartyInfo.thirdPartyExperience.getExperience(_this2.token) === 'VENMO_EXPERIENCE';\n\n if (_this2.showVenmoExperience) {\n _logger.$logger.info('checkout_fpti', {\n 'is_venmo_branding': '1'\n });\n }\n\n _this2.displayHeader = displayHeader(newState && newState.name);\n\n if (requiresRiskyLogin(newState)) {\n event.preventDefault();\n displayRiskyLogin(oldState, newState, newParams);\n }\n checkDolphinEligibility(newState && newState.name);\n });\n\n this.$on('$destroy', cancelStateChangeEventListener);\n\n if (requiresRiskyLogin(_uiRouter.$state.current)) {\n displayRiskyLogin(_uiRouter.$state.current, _uiRouter.$state.current);\n }\n }\n }\n});\n\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_integration.$integration;\n\n_angular.$rootScope;\n\n_angular.$document;\n\n_angular.$location;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$pxp;\n\n_squid.$locale;\n\n_auth.$AuthModel;\n\n_gdprCookieBanner.isGdprValid;\n\n_dist.$DeviceInfo;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_fn.$fn;\n\n_utils.getDolphinEligibility;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-checkout/directive.js\n// module id = ./pages/xo-checkout/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\n\nrequire('jquery');\n\nrequire('angularPlaceHolderShim');\n\nrequire('js/lib/index');\n\nrequire('xo-tracking/dist/index');\n\nvar _index = require('squid/index');\n\nvar _middleware = require('js/lib/middleware');\n\nrequire('pages/xo-landing/route');\n\nrequire('pages/xo-login/route');\n\nrequire('pages/xo-review/route');\n\nrequire('pages/xo-end/route');\n\nrequire('./directive');\n\nexports['default'] = _index.$Route.extend('$xoCheckoutRoute', {\n path: 'checkout',\n directive: 'xo-checkout',\n titleContent: 'base.payPal',\n defaultState: 'checkout.landing',\n middleware: _middleware.$Middleware,\n children: [{\n name: '$LandingRoute'\n }, {\n name: '$LoginRoute',\n attributes: {\n token: 'token'\n }\n }, {\n name: '$PayWithSelectionRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-pay-with-selection/route');\n },\n slug: 'payWithSelection'\n }, {\n name: '$VenmoRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-venmo/route');\n },\n slug: 'venmo'\n }, {\n\n name: '$BannerInterstitialRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-credit-components/src/banner-interstitial/route');\n },\n slug: 'bannerInterstitial'\n }, {\n name: '$ThirdPartyWalletFlowRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-third-party-wallet/route');\n },\n slug: 'thirdPartyWalletFlow'\n }, {\n name: '$ThirdPartyInfoCollectFlowRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-third-party-info/route');\n },\n slug: 'thirdPartyInfoCollectFlow'\n }, {\n name: '$GenericErrorRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-generic-error/route');\n },\n slug: 'genericError'\n }, {\n name: '$ChooseCreditOfferRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-credit-components/src/choose-credit-offer/route');\n },\n slug: 'chooseCreditOffer'\n }, {\n name: '$RedirectToCapeRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-credit-components/src/redirect-to-cape/route');\n },\n slug: 'redirectToCape'\n }, {\n name: '$GenericMessageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-generic-message/route');\n },\n slug: 'genericMessage'\n }, {\n name: '$FullpageOnetouchUpsellRoute',\n lazyRoute: function lazyRoute() {\n return import('xo-login-components/src/fullpage-onetouch-upsell/route');\n },\n slug: 'FullpageOnetouchUpsell'\n }, {\n name: '$OneTouchUpsellRoute',\n attributes: {\n 'token': 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-login-components/src/onetouch-interstitial/route');\n },\n slug: 'oneTouchUpsell'\n }, {\n name: '$SelectFiRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-select-fi/route');\n },\n slug: 'selectFi'\n }, {\n name: '$ReviewRoute'\n }, {\n name: '$AuthorizationMessageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-authorization-message/route');\n },\n slug: 'authorizationmessage'\n }, {\n name: '$AddPhoneRoute',\n lazyRoute: function lazyRoute() {\n return import('xo-form-components/src/phone/route');\n },\n slug: 'addPhone'\n }, {\n name: '$AddCardPageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-card/route');\n },\n slug: 'pageAddCard'\n }, {\n name: '$AddFiPageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-fi/route');\n },\n slug: 'pageAddFi'\n }, {\n name: '$xoTokenizationInfoPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-tokenization-info/route');\n },\n slug: 'tokenizationInfo'\n }, {\n name: '$xoPinSetupPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-pin-setup/route');\n },\n slug: 'pinSetup'\n }, {\n name: '$AddCardMeftRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-card-meft/route');\n },\n slug: 'pageAddCardMeft'\n }, {\n name: '$AddTaxIdRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-tax-id/route');\n },\n slug: 'addTaxId'\n }, {\n name: '$TravelRuleRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-travel-rule/route');\n },\n slug: 'travelRule'\n }, {\n name: '$AddNationalIdRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-national-id/route');\n },\n slug: 'addNationalId'\n }, {\n name: '$UpdateCardPageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-update-card/route');\n },\n slug: 'updateCard'\n }, {\n name: '$AddShippingPageRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-add-shipping/route');\n },\n slug: 'pageAddShipping'\n }, {\n name: '$xoSoldOutPageRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-inventory-soldout/route');\n },\n slug: 'soldout'\n }, {\n name: '$xoEConsentPageRoute',\n props: function props() {\n var _this = this;\n\n return {\n token: this.token,\n success: function success() {\n return _this.goto('this.review');\n }\n };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-eConsent/route');\n },\n slug: 'econsent'\n\n }, {\n name: '$xoNbrDEPageRoute',\n props: function props() {\n return { token: this.token };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-nbr/route');\n },\n slug: 'negativeBalanceRecovery'\n\n }, {\n name: '$xoFrameBustRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-framebust/route');\n },\n slug: 'framebust'\n }, {\n name: '$SepaPageRoute',\n attributes: {\n token: 'token'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-sepa/route');\n },\n slug: 'sepapage'\n }, {\n name: '$PayRoute',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-pay/route');\n },\n slug: 'pay'\n }, {\n name: '$EndRoute',\n slug: 'end'\n }, {\n name: '$xoDeGuest',\n lazyRoute: function lazyRoute() {\n return import('pages/xo-de-guest/route');\n },\n slug: 'xoDeGuest'\n }, {\n name: '$BMLDisplay',\n attributes: {\n 'review-url': 'reviewUrl'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-credit-components/src/bml-display/route');\n },\n slug: 'bmldisplay'\n }, {\n name: '$DoneRoute',\n lazyRoute: function lazyRoute() {\n return import('xo-page-components/src/done/route');\n },\n slug: 'done'\n }, {\n name: '$xoPageCreatePasswordRoute',\n props: function props() {\n return {\n token: this.token\n };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-create-password/route');\n },\n slug: 'createPassword'\n }]\n});\n\n\n_index.$Route;\n\n_middleware.$Middleware;\nmodule.exports = exports['default'];\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-checkout/route.js\n// module id = ./pages/xo-checkout/route.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n
    \\n\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-checkout/template.html\n// module id = ./pages/xo-checkout/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$EndRoute = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _util = require('xo-return-to-merchant/dist/util');\n\nvar _returnParams = require('xo-page-components/src/returnParams');\n\nvar _profilemanagement = require('xo-models/src/profilemanagement');\n\nvar $EndRoute = exports.$EndRoute = _squid.$ComponentRoute.extend('EndRoute', {\n path: 'end',\n trackingData: {\n fptiState: 'back_to_merchant',\n trackStateExit: true\n },\n resolve: {\n action: function action() {\n function returnMethod(merchantPreferences) {\n if (_squid.$integration.getConfig('RETURN_METHOD_BASED_ON_MERCHANT_PREFS') && merchantPreferences) {\n return merchantPreferences.returnMethod();\n } else {\n return 'GET';\n }\n }\n\n function returnUrl(checkoutAppData, merchantPreferences, checkoutCart) {\n var return_uri = checkoutAppData.urls && checkoutAppData.urls.return_url;\n\n if (checkoutAppData.is_wps_subscription_flow()) {\n return _squid.$config.urls.wpsSubscriptionReturnUrl;\n }\n\n if (checkoutCart.isSubscriptionsV1()) {\n return _squid.$config.urls.subscriptionsV1ReturnUrl;\n }\n\n // When \"redirect_uri\" is passed as a query param\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM')) {\n return _squid.$util.param('redirect_uri') || return_uri;\n }\n\n if (_squid.$integration.getConfig('RETURN_URL_FROM_MERCHANT_PREFS') && merchantPreferences) {\n return return_uri || merchantPreferences.returnUrl();\n }\n\n // By default, use return_uri from checkout session\n return return_uri;\n }\n\n function returnParams(checkoutCart, checkoutSession, checkoutAppData, returnToMerchantMethod) {\n var paramsForSubscription = {\n token: _squid.$meta.token,\n mfid: _squid.$meta.mfid,\n mode: 'member',\n 'country.x': _squid.$locale.country,\n 'locale.x': _squid.$locale.lang + '_' + _squid.$locale.country\n };\n\n if (checkoutAppData.is_wps_subscription_flow()) {\n return paramsForSubscription;\n }\n\n var params = {};\n\n if (checkoutCart.isSubscriptionsV1()) {\n params = _extends({}, paramsForSubscription);\n }\n\n // Don't post PayerID for RT without purchase\n if (_squid.$integration.getConfig('ALLOW_PAYER_ID_RETURN_PARAM') && !checkoutCart.isBillingNoPurchase()) {\n params.PayerID = checkoutSession.payer.id;\n }\n\n var billingData = checkoutCart.billing;\n\n if (billingData && billingData.ba_token && !checkoutAppData.legacy_billing_integration) {\n params.ba_token = billingData.ba_token;\n }\n\n if (_squid.$integration.isFlow('WPS')) {\n var isCartUpload = checkoutAppData.flags.is_cart_upload_flow || checkoutAppData.flags.is_shopping_cart_flow;\n\n params = (0, _returnParams.$returnParams)(checkoutCart, checkoutSession, returnToMerchantMethod, 'WPS', isCartUpload);\n }\n\n // When \"redirect_uri\" is passed as a query param\n if (_squid.$integration.getConfig('REDIRECT_QUERY_PARAM') && _squid.$util.param('redirect_uri')) {\n params.intent = checkoutCart.payment_action;\n params.opType = 'payment';\n params.return_uri = _squid.$util.buildURL(checkoutAppData.urls.return_url, params);\n params.paymentId = checkoutAppData.payment_id;\n\n // token needs to be appended here after buildURL, to ensure it's not added twice to return_url\n params.token = _angular.$rootScope.token;\n }\n\n return params;\n }\n\n function getMerchantPreferences(dataModel) {\n if (_squid.$integration.getConfig('POPULATE_MERCHANT_PREFERENCES')) {\n return (0, _squid.$populate)(dataModel, {\n merchantPreferences: _profilemanagement.$MerchantPreferenceModel.instance(dataModel.payee.merchant.id)\n });\n } else {\n return _angular.$q.when();\n }\n }\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutSession: _index.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token)\n }).then(function () {\n return getMerchantPreferences(models);\n }).then(function () {\n var url = returnUrl(models.checkoutAppData, models.merchantPreferences, models.checkoutCart);\n var returnToMerchantMethod = returnMethod(models.merchantPreferences);\n var params = returnParams(models.checkoutCart, models.checkoutSession, models.checkoutAppData, returnToMerchantMethod);\n\n if (models.checkoutAppData.is_wps_subscription_flow() || models.checkoutCart.isSubscriptionsV1()) {\n _squid.$util.redirect(_squid.$util.paypalURL(url, params));\n }\n\n // if V4 in-context integration, we'll call the onAuthorize handler.\n if (window.xchild) {\n _logger.$logger.done();\n _angular.$rootScope.$emit('loading');\n\n var xparams = {\n paymentToken: _angular.$rootScope.token,\n orderID: _angular.$rootScope.token,\n billingToken: params['ba_token'],\n payerID: params['PayerID'],\n paymentID: params['paymentId'] || models.checkoutAppData.payment_id,\n intent: models.checkoutCart.payment_action\n };\n\n if (url) {\n xparams.returnUrl = _squid.$util.buildURL(url, params);\n }\n return window.xprops.onAuthorize(xparams);\n }\n\n if (returnToMerchantMethod === 'POST') {\n _util.$ReturnToMerchant.postTo(url, params);\n } else {\n // if PDT is disabled don't send params in the url\n if (models.merchantPreferences && !models.merchantPreferences.pdtEnabled()) {\n return _util.$ReturnToMerchant.goTo(url);\n }\n _util.$ReturnToMerchant.goTo(_squid.$util.buildURL(url, params));\n }\n\n return _squid.$unresolved;\n });\n }\n }\n});\n\nangular.value(\"$EndRoute\", $EndRoute);\n_angular.$q;\n\n_angular.$rootScope;\n\n_logger.$logger;\n\n_squid.$meta;\n\n_squid.$util;\n\n_squid.$config;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$unresolved;\n\n_squid.$integration;\n\n_squid.$ComponentRoute;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$CheckoutSessionModel;\n\n_index.$CheckoutAppDataModel;\n\n_util.$ReturnToMerchant;\n\n_returnParams.$returnParams;\n\n_profilemanagement.$MerchantPreferenceModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-end/route.js\n// module id = ./pages/xo-end/route.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$LandingRoute = undefined;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/credit/index');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _inventory = require('xo-models/src/inventory');\n\nvar $LandingRoute = exports.$LandingRoute = _squid.$ComponentRoute.extend('$LandingRoute', {\n path: 'landing',\n trackingData: {\n fptiState: 'landing',\n trackStateExit: true\n },\n auth: false,\n resolve: {\n\n action: function action() {\n\n var models = {};\n\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index.$CheckoutCartModel.instance(_angular.$rootScope.token),\n auth: _auth.$AuthModel.instance(),\n checkoutPayeeModel: _index.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n flowEligibility: _index.$FlowEligibilityModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n localeCountry: _squid.$locale.country, // We need this till we completely migrate to server side locale resolution\n braintreeInegration: _squid.$util.param('bt_int_type') === '2' ? 'SFAuthSession' : '',\n fundingSource: _squid.$util.param('fundingSource')\n }\n })\n }).then(function () {\n var forced_signup_offered = models.flowEligibility.guest ? 0 : 1;\n\n _logger.$logger.info('checkout_fpti', { 'from': 'LANDING_PAGE_PARAM', 'forced_signup_offered': forced_signup_offered });\n\n var landingFlow = function landingFlow() {\n var merchantCountry = models.checkoutAppData.get('merchant.merchant_country', 'US');\n var supportBlockNonDomesticShipping = (0, _squid.$feature)('supportBlockNonDomesticShipping', false, merchantCountry);\n var prefillShippingAddress = models.checkoutCart.get('purchase.shipping_address');\n var blockNonDomesticShipping = models.checkoutAppData.get('flags.block_non_domestic_shipping');\n var allowChangeShipping = models.checkoutAppData.get('flags.allow_change_shipping');\n\n if (supportBlockNonDomesticShipping && blockNonDomesticShipping) {\n _logger.$logger.info('block_non_domestic_shipping', {\n block_non_domestic_shipping: blockNonDomesticShipping,\n allow_change_shipping: allowChangeShipping,\n setec_shipping_country_code: prefillShippingAddress\n });\n }\n\n var shouldBlockBuyer = supportBlockNonDomesticShipping && blockNonDomesticShipping && !allowChangeShipping && prefillShippingAddress && prefillShippingAddress.country_code !== merchantCountry && prefillShippingAddress.country_code !== '';\n\n if (shouldBlockBuyer) {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_NON_DOMESTIC_SHIPPING'\n }\n };\n }\n\n var isPayPalCredit = models.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n if (isPayPalCredit) {\n return (0, _squid.$pxp)('xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_treatment', false, true).then(function (res) {\n var bypassCYCO2ndButtonTreatment = res && res.treatment_name;\n _logger.$logger.info('checkout_fpti', {\n 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn': bypassCYCO2ndButtonTreatment ? 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_treatment' : 'xo_hermesnodeweb_gb_ppc_cyco_bypass_2nd_btn_control'\n });\n\n var creditDataModel = _credit.$CreditDataModel.instance(_angular.$rootScope.token);\n var isCapeReturnKey = creditDataModel.getCapeKey();\n var offers = new _index2.$CreditInstallmentOptionsModel({\n id: _angular.$rootScope.token,\n payee: models.checkoutPayeeModel,\n checkoutCart: models.checkoutCart,\n checkoutAppData: models.checkoutAppData,\n isMemberCredit: true\n });\n var isInstallmentEligible = models.flowEligibility && models.flowEligibility.installment;\n var country = models.checkoutAppData.get('merchant.merchant_country');\n var installmentOptions = void 0;\n\n return offers.save({\n cache: true,\n success: function success(result) {\n installmentOptions = offers.getInstallmentOptionsPresent();\n\n if (result && result.conversion_info && result.conversion_info.converted_transaction_amount) {\n _logger.$logger.info('xo_landing_ppc_conversion_info_present');\n creditDataModel.setCartAmountAndCurrency({\n cart_amount: result.conversion_info.converted_transaction_amount.value,\n cart_currency: result.conversion_info.converted_transaction_amount.currency_code\n });\n }\n\n if (isCapeReturnKey) {\n _logger.$logger.info('ppc_return_flow');\n if (country === 'DE') {\n return 'checkout.xoDeGuest';\n }\n return 'checkout.login';\n } else if (bypassCYCO2ndButtonTreatment) {\n // Treatment behavior - bypass CYCO if no installments\n if (installmentOptions && (country === 'US' && isInstallmentEligible || country !== 'US')) {\n _logger.$logger.info('ppc_second_btn_cyco');\n return 'checkout.chooseCreditOffer';\n } else if (country === 'DE') {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_PPC_INELIGIBLE_USER'\n }\n };\n } else {\n _logger.$logger.info('ppc_second_btn_no_installments');\n return 'checkout.login';\n }\n } else if (!bypassCYCO2ndButtonTreatment) {\n // Control behavior\n if (country === 'GB' || isInstallmentEligible && installmentOptions) {\n _logger.$logger.info('ppc_second_btn_acquisition');\n return 'checkout.chooseCreditOffer';\n } else if (country === 'DE') {\n if (installmentOptions) {\n return 'checkout.chooseCreditOffer';\n } else {\n return {\n to: 'checkout.genericError',\n params: {\n code: 'BLOCK_PPC_INELIGIBLE_USER'\n }\n };\n }\n } else {\n _logger.$logger.info('ppc_second_btn_resuse');\n return 'checkout.login';\n }\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n // Check error message === currencyNotCompatible\n return 'checkout.login';\n }\n }\n });\n });\n }\n\n return 'checkout.login';\n };\n\n var cartHasInventory = models.checkoutCart.get('cartHasInventory');\n\n if (_squid.$config.enableInventoryWPS && cartHasInventory) {\n var inventoryModel = _inventory.$InventoryModel.instance(_angular.$rootScope.token);\n var inventoryInput = {\n items: models.checkoutCart.get('purchase.items'),\n merchantId: models.checkoutPayeeModel.getId()\n };\n\n return inventoryModel.action('getInventory', {\n data: inventoryInput,\n success: function success(inventoryResponse) {\n if (inventoryResponse.showSoldoutPage) {\n return {\n to: 'checkout.soldout',\n params: {\n items: encodeURIComponent(inventoryResponse.soldoutItems),\n soldOutUrl: encodeURIComponent(inventoryResponse.soldoutUrl)\n }\n };\n } else {\n inventoryModel.setInvetoryItems(inventoryResponse);\n return landingFlow();\n }\n }\n });\n } else {\n return landingFlow();\n }\n });\n }\n }\n});\n\nangular.value(\"$LandingRoute\", $LandingRoute);\n_angular.$rootScope;\n\n_logger.$logger;\n\n_auth.$AuthModel;\n\n_squid.$Class;\n\n_squid.$ComponentRoute;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$util;\n\n_index.$CheckoutCartModel;\n\n_index.$CheckoutPayeeModel;\n\n_index.$FlowEligibilityModel;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$CreditInstallmentOptionsModel;\n\n_credit.$CreditDataModel;\n\n_inventory.$InventoryModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-landing/route.js\n// module id = ./pages/xo-landing/route.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoLoginPageComponent = undefined;\n\nvar _angular = require('angular');\n\nvar _integration = require('js/lib/integration');\n\nvar _miniBrowser = require('js/lib/miniBrowser');\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-device-info/dist/index');\n\nvar _kmliUpsell = require('xo-login-components/src/onetouch-interstitial/kmliUpsell');\n\nvar _index2 = require('xo-models/src/app/index');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _index3 = require('xo-models/src/checkout/index');\n\nvar _index4 = require('xo-models/src/fi/index');\n\nvar _marketingoffer = require('xo-models/src/marketingoffer');\n\nvar _newMember = require('xo-models/src/newMember');\n\nvar _user = require('xo-models/src/user');\n\nvar _index5 = require('xo-return-to-merchant/dist/index');\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nrequire('xo-title/dist/directive');\n\nrequire('xo-form-components/src/language-options/directive');\n\nrequire('xo-login-components/src/login/handler/directive');\n\nrequire('xo-ui-components/src/card-loader/directive');\n\nrequire('xo-ui-components/src/message/directive');\n\nrequire('xo-page-components/src/value-props/directive');\n\nrequire('xo-login-components/src/unified-login/directive');\n\nvar _utils = require('xo-member-components/src/vaulting/utils');\n\nvar _loginEligibility = require('./loginEligibility');\n\nrequire('./onboarding/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nrequire('./tokenized-wallet-loader/directive');\n\nvar _factory = require('./tokenized-wallet-loader/factory');\n\nvar _util = require('./util');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoLoginPageComponent = exports.$xoLoginPageComponent = _squid.$Component.extend('$xoLoginPageComponent', {\n tag: 'xo-login-page',\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n link: function link() {\n _logger.$logger.info('login_link');\n },\n lifecycle: {\n populate: function populate() {\n var $scope = this;\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = $scope.checkoutAppData.merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_hide_cart_logo_treatment', false, true).then(function (result) {\n var treatmentName = result && result.treatment_name || '';\n\n if (treatmentName) {\n _logger.$logger.info('xo_hermesnode_hide_cart_logo_treatment');\n $('.cartContainer').hide();\n $('.merchantHeader > .headerWrapper').hide();\n }\n });\n });\n },\n exit: function exit() {\n var $scope = this;\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var country = $scope.checkoutAppData.merchant.merchant_country;\n\n return (0, _squid.$pxp)('xo_hermesnode_config', { 'ctx.COUNTRY': country }, 'xo_hermesnode_hide_cart_logo_treatment', false, true).then(function (result) {\n var treatmentName = result && result.treatment_name || '';\n\n if (treatmentName) {\n $('.cartContainer').show();\n $('.merchantHeader > .headerWrapper').show();\n }\n });\n });\n }\n },\n rootEvents: {\n allLoaded: function allLoaded() {\n if (!_integration.$integration.getConfig('ALLOW_AUTH')) {\n if (_integration.$integration.getConfig('CAN_FRAMEBUST')) {\n return _miniBrowser.$miniBrowser.frameBust(this.props.token);\n } else {\n throw _integration.$integration.error('Can not framebust');\n }\n }\n }\n },\n controller: ['$scope', function ($scope) {\n _logger.$logger.info('login_controller');\n\n var fptiHardErrors = ['RESTRICTED_USER', 'PAYEE_BLOCKED_TRANSACTION', 'PAYMENT_ALREADY_DONE', 'PAYMENT_DENIED', 'PAYEE_ACCOUNT_RESTRICTED', 'INVALID_RESOURCE_ID', 'EXPIRED_SESSION', 'PAYER_COUNTRY_NOT_ALLOWED', 'PAYER_LOGIN_COUNTRY_NOT_ALLOWED', 'GAMING_FUNDING_SOURCE_VALIDATION_FAILED'];\n\n var memberSegmentMapper = {\n NEW_MEMBER: 'NEW_XO_MEMBER',\n YOUNG_MEMBER: 'YOUNG_XO_MEMBER',\n EXISTING_MEMBER: 'EXISTING_XO_MEMBER'\n };\n\n var ROUTE_MAPPING = {\n ECONSENT_REQUIRED: 'checkout.econsent'\n };\n\n $scope.ulEligibility = false;\n $scope.isWalletTokenization = false;\n\n /* If we detect a back/forward button click to land on the app, do not auto-login. In this case, the buyer\n is attempting to navigate to a specific page, so we should not auto-redirect them.\n This also fixes an issue with users:\n - Authorizing the checkout session\n - Redirecting to the merchant\n - Hitting back and landing on login page\n - Calling create on checkout and overwriting the authorization\n - Hitting forward and landing again on merchant page\n */\n\n if (window.performance && window.performance.navigation && window.performance.navigation.type === 2) {\n _angular.$rootScope.forceLogin = true;\n }\n\n if (!_angular.$rootScope.forceLogin) {\n $scope.autoLogin = true;\n }\n\n _angular.$rootScope.forceLogin = true;\n $scope.hideGuest = _uiRouter.$stateParams.targetPage === 'PAYER_AUTHENTICATION_REQUIRED' || _uiRouter.$stateParams.showNotYou;\n $scope.promptlogin = $scope.hideGuest && !(0, _squid.$feature)('riskyLoginContingency');\n\n // log statement for mobile webview\n if (_index.$DeviceInfo.isApp()) {\n _logger.$logger.debug('HERMES_IN_MOBILE_WEBVIEW');\n }\n\n if (!_miniBrowser.$miniBrowser.isMiniBrowser() && _squid.$locale.country === 'BR') {\n var brPxp = _squid.$config.pxpExperiments.BR.xo_br_hermesnode_login_design;\n\n (0, _squid.$pxpFactors)(brPxp.pgName, brPxp.params, brPxp.pattern).then(function (result) {\n $scope.loginDesignExp = result;\n });\n }\n\n $scope.onContingency = function (name, contingency) {\n if (!ROUTE_MAPPING[name]) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n\n _uiRouter.$state.go(ROUTE_MAPPING[name]);\n };\n\n $scope.checkoutSession = _index3.$CheckoutSessionModel.instance(_angular.$rootScope.token);\n $scope.eConsent = _user.$EConsentModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletEligibility = _index2.$TokenizedWalletEligibilityModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletPin = _index2.$TokenizedWalletPinModel.instance(_angular.$rootScope.token);\n $scope.tokenizedWalletMsbOffer = _index2.$TokenizedWalletMsbOfferModel.instance(_angular.$rootScope.token);\n $scope.walletPreferences = _index4.$WalletPreferences.instance(_angular.$rootScope.token);\n $scope.memberSegment = _marketingoffer.$MemberSegmentModel.instance();\n $scope.dependencyEligibility = true;\n\n var isValidGamingContingencies = function isValidGamingContingencies(err) {\n // Map usRMG specific error cause to EOL message.\n var endOfLineErrorList = ['GAMER_INELIGIBLE', 'GAMER_FI_INELIGIBLE', 'GAMER_FI_UNCONFIRMED', 'GAMER_ACCOUNT_UNVERIFIED', 'GAMER_INVALID_ACCOUNT_TYPE', 'GAMER_LOGIN_OUT_OF_COUNTRY', 'GAMING_INVALID_PAYMENT_FLOW', 'GAMER_RESIDENCE_OUT_OF_COUNTRY', 'GAMER_NO_VALID_FUNDING_INSTRUMENT'];\n\n return err && err.cause && endOfLineErrorList.indexOf(err.cause) > -1;\n };\n\n var isUSGambling = function isUSGambling(_ref) {\n var err = _ref.err;\n\n var isUSBuyer = _squid.$locale.country === 'US';\n var isUSmerchant = $scope.checkoutAppData && $scope.checkoutAppData.get('merchant.merchant_country') === 'US';\n\n return isUSBuyer && isUSmerchant && $scope.checkoutPayeeModel.isGambling() && isValidGamingContingencies(err);\n };\n\n // preloading most popular routes where after setbuyer\n // we should keep the balance here to prevent over loading non needed javascript\n // basically the most popular routes should be added here\n var preloadCodeSplitRoutes = function preloadCodeSplitRoutes() {\n if (_squid.$meta.codeSplitting) {\n Promise.all([import('pages/xo-select-fi/route'), import('pages/xo-add-card/route')])['catch'](function (err) {\n _logger.$logger.info('code_split_setbuyer_routes_preload_failed', {\n error: err && err.message\n });\n });\n }\n };\n\n $scope.setBuyer = function () {\n var fptiData = {\n from: 'CREATE_XO_SESSION',\n to: 'process_create_xo_session'\n };\n\n function handleContingency(name, err) {\n _logger.$logger.info('[xo login handleContingency]', {\n name: name,\n err: err\n });\n\n // Check if negative case has been previously handled.\n if (!$scope.dependencyEligibility) {\n return;\n }\n\n var errorCode = err.cause || name;\n\n fptiData.int_error_code = errorCode;\n fptiData.error_source = 'paymentapiplatformserv';\n fptiData.error_type = fptiHardErrors.indexOf(errorCode) > -1 ? 'hard_decline' : 'soft_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n // NOTE: curently `GAMER_INELIGIBLE` is only designed for DE gambling\n // however, this new Contingency is expected to expand to all gambling\n // countries moving forward.\n if (isUSGambling({ err: err }) || errorCode === 'GAMER_INELIGIBLE') {\n // US gambling buyer & merchant should get EOL\n // for certain compliance Contingencies\n return _uiRouter.$state.go('checkout.genericError', {\n code: errorCode\n });\n }\n\n if (name !== 'NEED_AUTHENTICATED_CARD') {\n throw err;\n }\n\n // come from guest or have alternate FI options, go to review\n if (_squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon' || err && err.resolution && err.resolution.data && err.resolution.data.alternate_options) {\n _uiRouter.$state.go('checkout.review');\n } else {\n // else go to addCard\n _uiRouter.$state.go('checkout.updateCard.addCardFlow.addCard');\n }\n }\n\n function handleNoValidTopupFiContingency(name, err) {\n // Check if negative case has been previously handled.\n if (!$scope.dependencyEligibility) {\n return;\n }\n if ($scope.isWalletTokenization) {\n fptiData.int_error_code = err.cause;\n fptiData.error_source = 'paymentapiplatformserv';\n fptiData.error_type = fptiHardErrors.indexOf(err.cause) > -1 ? 'hard_decline' : 'soft_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n $scope.checkoutSession.contingency = name;\n\n _factory.$TokenizedWalledLoaderFactory.goToTokenizationInfoPage();\n } else {\n handleContingency(name, err);\n }\n }\n\n _logger.$logger.info('checkout_fpti', {\n from: 'CREATE_XO_SESSION',\n to: 'prepare_create_xo_session'\n });\n\n $scope.isWalletTokenization = $scope.checkoutCart.isWalletTokenization();\n\n if ($scope.isWalletTokenization) {\n _angular.$rootScope.$emit('allLoaded');\n }\n\n $scope.eConsent.retrieve({\n batch: {\n name: 'setbuyer',\n silent: $scope.isWalletTokenization,\n id: 'eConsent',\n dependencies: []\n },\n contingencies: {\n ECONSENT_REQUIRED: function ECONSENT_REQUIRED(name, err) {\n if ($scope.dependencyEligibility) {\n $scope.dependencyEligibility = false;\n _logger.$logger.debug('ULLOGIN_ECONSENT_REQUIRED');\n _uiRouter.$state.go('checkout.econsent');\n }\n }\n }\n });\n\n if ($scope.isWalletTokenization) {\n // these params are coming from Mayfly (see xo-hermes-app/apis/tokenizedWalletInfo)\n var _$scope$tokenizedWall = $scope.tokenizedWalletInfoModel,\n wallet_id = _$scope$tokenizedWall.wallet_id,\n external_device_id = _$scope$tokenizedWall.external_device_id,\n tr_client_id = _$scope$tokenizedWall.tr_client_id,\n product_name = _$scope$tokenizedWall.product_name;\n\n var subject = $scope.tokenizedWalletInfoModel.getSubject();\n\n // TODO: move to TokenizedWalletInfoModel\n var WALLET_BRANDS = {\n 'google': 'APAY',\n 'Samsung': 'SAMSUNGPAY'\n };\n\n var params = {\n wallet_brand: WALLET_BRANDS[subject],\n tenant_id: 'Hermes',\n wallet_id: wallet_id,\n external_device_id: external_device_id,\n subject: subject,\n tr_client_id: tr_client_id,\n product_name: product_name\n };\n\n if (_squid.$meta.query && _squid.$meta.query.wallet_id) {\n params.wallet_id = _squid.$meta.query.wallet_id;\n }\n if (_squid.$meta.query && _squid.$meta.query.jwt) {\n params.jwt = _squid.$meta.query.jwt;\n }\n\n $scope.tokenizedWalletEligibility.retrieve({\n params: params,\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletLightEligibility',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n if (!result.eligible) {\n var msg = 'tokenized_wallet_ineligible_for_provisioning';\n\n _logger.$logger.info(msg);\n\n if ($scope.dependencyEligibility) {\n $scope.dependencyEligibility = false;\n var code = void 0;\n\n fptiData.int_error_code = result.reason;\n fptiData.error_source = 'paymenttokenserv';\n fptiData.error_type = 'hard_decline';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n switch (result.reason) {\n case 'WALLET_ID_ALREADY_PROVISIONED':\n code = 'ANDROID_PAY_ALREADY_PROVISIONED';\n break;\n\n case 'COUNTRY_NOT_SUPPORTED':\n code = 'ANDROID_PAY_COUNTRY_NOT_SUPPORTED';\n break;\n\n default:\n code = 'ANDROID_PAY_ELIGIBILITY_ERROR';\n break;\n }\n code = window.btoa(code);\n\n _uiRouter.$state.go('checkout.genericError', { code: code });\n }\n }\n }\n });\n\n $scope.tokenizedWalletPin.retrieve({\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletPin',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n if (result.pinId) {\n _logger.$logger.info('tokenized_wallet_get_pin_set', {\n pinOrigin: result.pinOrigin,\n pinId: result.pinId\n });\n } else {\n _logger.$logger.info('tokenized_wallet_get_pin_not_set', {\n pinKey: result.suggestedKey ? result.suggestedKey : 'unavailable'\n });\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('tokenized_wallet_get_pin_error');\n return _uiRouter.$state.go('checkout.genericError', { code: 'DEFAULT' });\n }\n }\n });\n\n $scope.tokenizedWalletMsbOffer.retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken\n },\n batch: {\n name: 'setbuyer',\n id: 'tokenizedWalletMsbOffer',\n silent: $scope.isWalletTokenization,\n dependencies: ['eConsent']\n },\n success: function success(result) {\n var msg = 'tokenized_wallet_msb_offer';\n\n if (result && result.enabled) {\n _logger.$logger.info(msg + '_enabled', result);\n } else {\n _logger.$logger.info(msg + '_disabled');\n }\n }\n });\n }\n\n if (_squid.$config.enableNewMemberDecisioning) {\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'prepare_cep_descisioning'\n });\n\n $scope.memberSegment.save({\n data: $scope.memberSegmentData,\n batch: {\n name: 'setbuyer',\n id: 'memberSegment',\n silent: true,\n dependencies: $scope.ulEligibility ? ['securityCtx'] : []\n },\n success: function success(result) {\n var memberSegment = memberSegmentMapper[result.memberSegment] || result.memberSegment;\n\n _logger.$logger.info('cep_member_decisioning_success', {\n segment: memberSegment,\n creditOffer: result.creditOffer\n });\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'process_cep_descisioning',\n cep_response: memberSegment + ':' + result.creditOffer\n });\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('cep_member_decisioning_failed');\n _logger.$logger.info('checkout_fpti', {\n from: 'CEP_decisioning',\n to: 'process_cep_descisioning',\n int_error_code: 'SERVICE_ERROR',\n error_source: 'marketingofferreadserv',\n error_type: 'soft_decline'\n });\n }\n }\n });\n }\n\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n $scope.checkoutSession.action('create', {\n data: {\n preselected_fi_type: isPayPalCredit ? 'credit' : undefined,\n // user_selected_funding_source is referenced by xo-hermes-checkout, where it retrieves the product_name in it and passes it to the CreateXO api.\n user_selected_funding_source: $scope.userSelectedFundingSource,\n clear_installments: true\n },\n batch: {\n name: 'setbuyer',\n id: 'createCheckoutSession',\n silent: $scope.isWalletTokenization,\n dependencies: !$scope.isWalletTokenization ? ['eConsent'] : ['eConsent', 'tokenizedWalletLightEligibility', 'tokenizedWalletPin', 'tokenizedWalletMsbOffer']\n },\n success: function success(result) {\n fptiData.available_plan_count = $scope.checkoutSession.getPlanList() ? $scope.checkoutSession.getPlanList().length : '0';\n _logger.$logger.info('checkout_fpti', fptiData);\n\n if (!$scope.dependencyEligibility) {\n return;\n }\n\n if ($scope.auth.password_less && $scope.checkoutCart.isBilling()) {\n if ((0, _squid.$feature)('pomaPasswordRecovery')) {\n _uiRouter.$state.go('checkout.createPassword', { targetPage: 'BILLING_AGREEMENTS' });\n }\n return;\n }\n\n if (isPayPalCredit) {\n return _util.$capeRedirectUtil.handleCapeRouting(result, $scope.checkoutCart, _angular.$rootScope.token);\n }\n\n if ($scope.isWalletTokenization) {\n // no need to check upsell for wallet tokenization flows\n // just set planDone prop for \"\" component\n $scope.planDone = true;\n return;\n }\n\n return _kmliUpsell.$KmliUpsell.eligible(_angular.$rootScope.token).then(function (eligibility) {\n var isEligible = eligibility && eligibility.interstitial ? eligibility.interstitial : {};\n\n if (isEligible.eligible) {\n var stateName = isEligible.type === 'member' ? 'KMLI_UPSELL' : 'KMLI_reactivation';\n\n _logger.$logger.info('checkout_fpti', {\n from: stateName,\n to: 'prepare_kmli_upsell'\n });\n\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_inter_optin'\n });\n return _uiRouter.$state.go('checkout.oneTouchUpsell', { oneTouchFlowName: 'checkout' });\n }\n\n if ($scope.auth.rtExchanged && (0, _squid.$feature)('rmSpinnerText')) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['login.loggedInWithOneTouch']\n };\n }\n\n if ($scope.checkoutSession.negBals) {\n return _uiRouter.$state.go('checkout.negativeBalanceRecovery');\n } else {\n (0, _utils.checkVaultingEligibility)().then(function (eligible) {\n if (eligible) {\n (0, _utils.authorize)($scope.checkoutSession, $scope.checkoutAppData).then(function (authorizePage) {\n return _uiRouter.$state.go(authorizePage);\n })['catch'](function (err) {\n // eslint-disable-line handle-callback-err\n _uiRouter.$state.go('checkout.review');\n });\n } else {\n _uiRouter.$state.go('checkout.review');\n }\n });\n }\n });\n },\n contingencies: {\n // override contingency.js handler with custom logic to support both xoon/hermes flows\n NEED_DEBIT_CARD: handleNoValidTopupFiContingency,\n EXPIRED_DEBIT_CARD: handleNoValidTopupFiContingency,\n DEFAULT: handleContingency\n }\n })['finally'](function () {\n // selectedInstallmentsData does not come from checkoutSession response from PAPS, so we need to keep track of this state ourselves.\n // We pass clear_installments when calling the checkout session API, so we need to reflect that this is being cleared.\n // See https://engineering.paypalcorp.com/jira/browse/PPPLMER-58580\n delete $scope.checkoutSession.selectedInstallmentData;\n });\n\n preloadCodeSplitRoutes();\n };\n\n /**\n * This call is made after the buyer is logged in, and before the CreateXO api call.\n * So that we can retrieve the tokenized funding capabilities for the buyer country.\n */\n $scope.getTokenizedFundingCapabilities = function () {\n return _index2.$TokenizedFundingCapabilitiesModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken,\n country: $scope.auth.country\n }\n }).then(function (result) {\n if (result.isDirectFundingEnabled()) {\n $scope.userSelectedFundingSource = {\n product_name: result.getProductName()\n };\n }\n });\n };\n\n $scope.preSetBuyerCalls = function () {\n var apiCalls = [];\n\n if ($scope.checkoutCart.isWalletTokenization()) {\n apiCalls.push($scope.getTokenizedFundingCapabilities());\n }\n return _angular.$q.all(apiCalls);\n };\n\n // Sorry for the indirection here. There's postAuth, so \"preAuth\" compliments it well (easier on the brain)\n $scope.preAuth = function () {\n if ($scope.ulEligibility) {\n // For UL, batch up eConsent, xoSession\n $scope.preSetBuyerCalls().then(function () {\n return $scope.setBuyer();\n });\n }\n };\n\n $scope.onSuccess = function () {\n if ($scope.ulEligibility) {\n // If the experiment is enabled, we already have what we need, so /quit.\n return;\n }\n $scope.preSetBuyerCalls().then(function () {\n return $scope.setBuyer();\n });\n };\n\n (0, _squid.$populate)($scope, {\n flowEligibility: _index3.$FlowEligibilityModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n geolocation: _squid.$meta.geolocation,\n localeCountry: _squid.$locale.country, // We need this till we completely migrate to server side locale resolution\n braintreeInegration: _squid.$util.param('bt_int_type') === '2' ? 'SFAuthSession' : '',\n fundingSource: _squid.$util.param('fundingSource')\n }\n }),\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _index3.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _index3.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutPayeeModel: _index3.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n tokenizedWalletInfoModel: _index2.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve()\n }).then(function () {\n return _newMember.$NewMemberEligibility.instance().getMemberSegmentParameters(_angular.$rootScope.token).then(function (data) {\n $scope.memberSegmentData = data;\n // Set flag to indicate all data is loaded\n $scope.populateComplete = true;\n return;\n });\n }).then(function () {\n // If the refresh token is present, the one touch experience must be preserved and the user must not\n // be presented with the venmo experience\n if (!$scope.auth.refresh_token) {\n var merchant_name = $scope.checkoutAppData.merchant.brand_name || $scope.checkoutAppData.merchant.merchant_name || $scope.checkoutAppData.merchant.merchant_email;\n\n $scope.infoVenmo = {\n msgs: [(0, _squid.$renderContent)('landing.venmoAvailableSoon', { 'merchant': merchant_name })],\n type: 'info'\n };\n\n if (!_uiRouter.$stateParams.venmoError && $scope.flowEligibility.venmo) {\n return _uiRouter.$state.go('checkout.payWithSelection');\n } else if (!_uiRouter.$stateParams.venmoError && _thirdPartyInfo.thirdPartyInfo.isVenmoCookiePresent()) {\n $scope.showVenmoAvailableSoonMsg = true;\n }\n\n if (_uiRouter.$stateParams.venmoError && _squid.$util.param('marketplaces_venmo_client') === '1') {\n var cancel_url = $scope.checkoutAppData.urls.cancel_url;\n\n _index5.$ReturnToMerchant.goTo(cancel_url);\n }\n\n // Baidu eligibility checks. Pending pxp throttle\n return _thirdPartyInfo.thirdPartyInfo.isBaiduEligible().then(function (baiduEligible) {\n if (!_uiRouter.$stateParams.baiduError && baiduEligible) {\n return (0, _squid.$pxp)('xo_hermesnode_baidu', {\n 'ctx.COUNTRY': $scope.checkoutAppData.get('merchant.merchant_country'),\n 'uid': $scope.checkoutPayeeModel.getId()\n }, '(xo_hermesnodeweb_baidu)(.*)').then(function (result) {\n if (result && result.treatment_name === 'xo_hermesnodeweb_baidu_treatment_4660') {\n return _uiRouter.$state.go('checkout.payWithSelection');\n }\n });\n }\n });\n }\n if ($scope.flowEligibility.guest) {\n return;\n }\n\n $('.paypalHeaderWrapper').removeClass('paypalCredit');\n $('.paypalHeaderWrapper').removeClass('paypalCreditTnc');\n }).then(function () {\n var initKmliAndDeleteAT = function initKmliAndDeleteAT() {\n delete $scope.auth.access_token;\n _kmliUpsell.$KmliUpsell.init({});\n };\n\n // reload auth model for use cases where user is not logged in and access_token is in the hash\n // happens already in the middleware\n // basically if there is a param \"euat\" - there will be access token in the hash\n // otherwise I don't think we need to reload Auth model if user is logged in already\n if ($scope.auth.accessToken() && !$scope.auth.loggedIn()) {\n return $scope.auth.reload({\n headers: {\n 'x-paypal-internal-euat': $scope.auth.accessToken()\n },\n resultModel: $scope.auth,\n success: function success() {\n initKmliAndDeleteAT();\n },\n contingencies: {\n DEFAULT: function DEFAULT(name) {\n throw new _squid.$FallbackError({\n reason: name.toLowerCase(),\n product: 'ux'\n });\n }\n }\n });\n } else if ($scope.auth.loggedIn()) {\n initKmliAndDeleteAT();\n }\n }).then(function () {\n return (0, _loginEligibility.$loginEligibility)(_angular.$rootScope.token, !$scope.autoLogin).then(function (result) {\n if (result === 'unifiedLogin') {\n $scope.ulEligibility = true;\n } else if (result === 'apsIntegration') {\n $scope.apsIntegration = 'apsIntegration';\n } else if (result === 'apsIntegrationRM') {\n $scope.apsIntegration = 'apsIntegrationRM';\n }\n }).then(function () {\n var reinitDisplay = function reinitDisplay() {\n $scope.promptlogin = false;\n $scope.hideGuest = false;\n $scope.autoLogin = true;\n delete _uiRouter.$stateParams.targetPage;\n delete _uiRouter.$stateParams.showNotYou;\n };\n\n $scope.logout = $scope.promptlogin ? function () {\n _logger.$logger.info('not_you_logout');\n _logger.$logger.info('checkout_fpti', {\n from: 'LOGIN_UL',\n to: 'login_with_diff_user'\n });\n $scope.auth.logoutAndRedirect('NOT_YOU');\n } : function () {\n _logger.$logger.info('logout_switch_display');\n reinitDisplay();\n };\n });\n });\n }]\n});\n\nangular.value(\"$xoLoginPageComponent\", $xoLoginPageComponent);\n_angular.$q;\n\n_angular.$rootScope;\n\n_integration.$integration;\n\n_miniBrowser.$miniBrowser;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$pxpFactors;\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_logger.$logger;\n\n_index.$DeviceInfo;\n\n_kmliUpsell.$KmliUpsell;\n\n_index2.$TokenizedFundingCapabilitiesModel;\n\n_index2.$TokenizedWalletEligibilityModel;\n\n_index2.$TokenizedWalletInfoModel;\n\n_index2.$TokenizedWalletMsbOfferModel;\n\n_index2.$TokenizedWalletPinModel;\n\n_auth.$AuthModel;\n\n_index3.$CheckoutAppDataModel;\n\n_index3.$CheckoutCartModel;\n\n_index3.$CheckoutPayeeModel;\n\n_index3.$CheckoutSessionModel;\n\n_index3.$FlowEligibilityModel;\n\n_index4.$WalletPreferences;\n\n_marketingoffer.$MemberSegmentModel;\n\n_newMember.$NewMemberEligibility;\n\n_user.$EConsentModel;\n\n_index5.$ReturnToMerchant;\n\n_thirdPartyInfo.thirdPartyInfo;\n\n_utils.checkVaultingEligibility;\n\n_utils.authorize;\n\n_loginEligibility.$loginEligibility;\n\n_factory.$TokenizedWalledLoaderFactory;\n\n_util.$capeRedirectUtil;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/directive.js\n// module id = ./pages/xo-login/directive.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$guestThrottle = $guestThrottle;\n\nvar _angular = require('angular');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _index = require('xo-models/src/checkout/index');\n\nfunction $guestThrottle(flowName, token, lang, country, mfid) {\n var models = {};\n\n function redirectToXoon() {\n return (0, _squid.$dispatch)('xoon', {\n exp: flowName,\n token: token,\n 'locale.x': lang + '_' + country,\n 'country.x': country,\n mfid: mfid\n });\n }\n\n function fallback(product, reason, params) {\n throw new _squid.$FallbackError({\n product: product || 'ux',\n reason: reason,\n entryPoint: flowName,\n params: params\n });\n }\n\n function checkWpsSubscriptionGuestEnabled() {\n return (0, _squid.$pxp)('xo_subscription_hermes_xoon', 'xo_subscription_treatment_xoon', undefined, false, true).then(function (result) {\n var treatmentName = result && result.treatment_name;\n\n return treatmentName === 'xo_subscription_treatment_xoon';\n });\n }\n\n function isGuestFlowEnabled() {\n return (0, _squid.$populate)(models, {\n checkoutAppData: _index.$CheckoutAppDataModel.instance(token).retrieve()\n }).then(function () {\n var appData = models.checkoutAppData;\n\n // For WPS subscription flows , enable guest flows if treatment name is returned else fallback\n if (appData && appData.is_wps_subscription_flow()) {\n return checkWpsSubscriptionGuestEnabled();\n } else {\n return _angular.$q.resolve(true);\n }\n });\n }\n\n return isGuestFlowEnabled().then(function (res) {\n if (!res) {\n _logger.$logger.info(flowName + '_to_ux_wps');\n return fallback('ux', flowName + '_to_ux_wps');\n }\n return redirectToXoon();\n });\n}\n\nangular.value(\"$guestThrottle\", $guestThrottle);\n_angular.$q;\n\n_logger.$logger;\n\n_squid.$dispatch;\n\n_squid.$populate;\n\n_squid.$FallbackError;\n\n_squid.$pxp;\n\n_index.$CheckoutAppDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/guestThrottle.js\n// module id = ./pages/xo-login/guestThrottle.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$forceLoginExperience = $forceLoginExperience;\nexports.$loginEligibility = $loginEligibility;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _index = require('xo-models/src/checkout/index');\n\nvar _index2 = require('xo-models/src/auth/index');\n\nvar _index3 = require('xo-device-info/dist/index');\n\nfunction $forceLoginExperience(auth, merchant_country, forcedLogin) {\n var ULParam = _squid.$util.param('ul');\n\n if (auth.loggedIn() && !auth.stepupAuthRequired && !forcedLogin) {\n var ulReturn = _squid.$util.param('ulReturn');\n\n return {\n experience: 'apsIntegration',\n reason: ulReturn ? 'ulReturn' : 'sessionActive'\n };\n } else if (ULParam === '0' && !_squid.$config.deploy.isLive()) {\n return {\n experience: 'apsIntegration',\n reason: 'ulParamDisabled'\n };\n } else if (ULParam && ULParam.match(/[12]/)) {\n return {\n experience: 'unifiedLogin',\n reason: 'ulParam'\n };\n } else if (ULParam === '3') {\n return {\n experience: 'apsIntegrationRM',\n reason: 'ulParamApsRM'\n };\n } else if (auth.refreshToken()) {\n return {\n experience: 'unifiedLogin',\n reason: 'rememberedUser'\n };\n } else if (_squid.$meta.corp && _squid.$config.ulMeta.allowKMLIForInternalIP && (0, _squid.$feature)('enableOneTouchInternalIP', false, merchant_country)) {\n return {\n experience: 'unifiedLogin',\n reason: 'internalIP'\n };\n }\n}\n\nfunction $loginEligibility(token, forcedLogin) {\n var $scope = {};\n\n $scope.token = token;\n\n var routingReason = void 0;\n\n return (0, _squid.$populate)($scope, {\n auth: _index2.$AuthModel.instance(),\n checkoutAppData: _index.$CheckoutAppDataModel.instance($scope.token)\n }).then(function () {\n var forceLoginExperience = $forceLoginExperience($scope.auth, $scope.checkoutAppData.merchant.merchant_country, forcedLogin);\n var isIneligible = angular.isDefined(forceLoginExperience);\n\n // Check login param for hercules, otherwise, always using UL\n if (isIneligible) {\n routingReason = forceLoginExperience.reason;\n return forceLoginExperience.experience;\n } else {\n return 'unifiedLogin';\n }\n }).then(function (finalLoginExperience) {\n _logger.$logger.debug(finalLoginExperience === 'unifiedLogin' ? 'ULLOGIN_ELIGIBLE' : 'ULLOGIN_NOT_ELIGIBLE', {\n userGroup: [routingReason],\n routing_reason: routingReason\n });\n\n var app_int_type = _index3.$DeviceInfo.getAppIntegrationType();\n\n _logger.$logger.info('checkout_fpti', {\n 'from': 'UL_ELG_CHK',\n 'to': 'process_ul_elg_chk',\n 'routing_reason': routingReason,\n 'app_int_type': app_int_type\n });\n\n return finalLoginExperience;\n });\n}\n\nangular.value(\"$forceLoginExperience\", $forceLoginExperience);\nangular.value(\"$loginEligibility\", $loginEligibility);\n_squid.$util;\n\n_squid.$meta;\n\n_squid.$config;\n\n_squid.$feature;\n\n_squid.$populate;\n\n_logger.$logger;\n\n_index.$CheckoutAppDataModel;\n\n_index2.$AuthModel;\n\n_index3.$DeviceInfo;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/loginEligibility.js\n// module id = ./pages/xo-login/loginEligibility.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoOnboardingSectionComponent = undefined;\n\nvar _uiRouter = require('uiRouter');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _squid = require('squid');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _guestThrottle = require('../guestThrottle');\n\nvar _paypalplus = require('../paypalplus');\n\nrequire('xo-wallet-components/src/fi-logos/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar $xoOnboardingSectionComponent = exports.$xoOnboardingSectionComponent = _squid.$Component.extend('$xoOnboardingSectionComponent', {\n tag: 'xo-onboarding-section',\n template: _template2['default'],\n scope: {\n token: '=?'\n },\n controller: ['$scope', function ($scope) {\n function throttleOnboardingFlow(flow) {\n return (0, _guestThrottle.$guestThrottle)(flow, $scope.token, _squid.$locale.lang, _squid.$locale.country, _squid.$meta.mfid);\n }\n\n $scope.signupThrottle = function () {\n if ($scope.forceCAPESignup) {\n _uiRouter.$state.go('checkout.redirectToCape');\n } else {\n throttleOnboardingFlow('signup');\n }\n };\n\n $scope.guestThrottle = function () {\n throttleOnboardingFlow('guest');\n };\n\n function getFlowEligibility() {\n return _checkout.$FlowEligibilityModel.instance($scope.token).retrieve({\n params: {\n 'localeCountry': _squid.$locale.country\n }\n }).then(function (flowEligibility) {\n $scope.flowEligibility = flowEligibility;\n });\n }\n\n function getButtonLabelTreatment() {\n $scope.newUserVariant = false;\n $scope.newUserVariantWithText = false;\n\n return (0, _squid.$pxp)('xo_hermes_new_user', { 'ctx.COUNTRY': _squid.$locale.country }, 'xo_hermes_new_user_treatment_(a|b)', false, true).then(function (t) {\n if (t) {\n $scope.newUserVariant = true;\n if (t.treatment_name === 'xo_hermes_new_user_treatment_b') {\n $scope.newUserVariantWithText = true;\n }\n }\n });\n }\n\n (0, _squid.$populate)($scope, {\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance($scope.token)\n }).then(function () {\n return getFlowEligibility();\n }).then(function () {\n return getButtonLabelTreatment();\n }).then(function () {\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n $scope.creditDataModel = _credit.$CreditDataModel.instance($scope.token);\n $scope.forceCAPESignup = isPayPalCredit && !$scope.creditDataModel.payInFull;\n\n var useForcedSignupFlow = (0, _paypalplus.$isPayPalPlus)($scope.token) || $scope.forceCAPESignup;\n var guest = $scope.flowEligibility.guest;\n var signup = $scope.flowEligibility.signup;\n\n $scope.showGuestBtn = !useForcedSignupFlow && guest;\n $scope.showSignupBtn = useForcedSignupFlow || !guest && signup;\n $scope.hideOrSeparator = !$scope.showGuestBtn && !$scope.showSignupBtn;\n });\n }]\n});\n\nangular.value(\"$xoOnboardingSectionComponent\", $xoOnboardingSectionComponent);\n_uiRouter.$state;\n\n_credit.$CreditDataModel;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$FlowEligibilityModel;\n\n_guestThrottle.$guestThrottle;\n\n_paypalplus.$isPayPalPlus;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/onboarding/directive.js\n// module id = ./pages/xo-login/onboarding/directive.js\n// module chunks = main-code-split","module.exports = \"\\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/onboarding/template.html\n// module id = ./pages/xo-login/onboarding/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$isPayPalPlus = $isPayPalPlus;\n\nvar _index = require('xo-models/src/checkout/index');\n\nfunction $isPayPalPlus(token) {\n var checkoutAppDataModel = _index.$CheckoutAppDataModel.instance(token);\n var experienceInitiator = checkoutAppDataModel.get('flags.payment_experience_initiator');\n return experienceInitiator === 'PAYPAL_PLUS';\n}\n\nangular.value(\"$isPayPalPlus\", $isPayPalPlus);\n_index.$CheckoutAppDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/paypalplus.js\n// module id = ./pages/xo-login/paypalplus.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$LoginRoute = undefined;\n\nvar _squid = require('squid');\n\nrequire('./directive');\n\nvar $LoginRoute = exports.$LoginRoute = _squid.$ComponentRoute.extend('$LoginRoute', {\n path: 'login',\n directive: 'xo-login-page',\n query: ['venmoError'],\n params: {\n targetPage: null,\n source: null,\n showNotYou: null\n },\n auth: false,\n titleContent: 'base.logIn',\n trackingData: {\n fptiState: 'login',\n suppressTransitionLog: true, // We will be suppressing the Server Side Tracking for this page\n templateName: 'login.dust',\n pageGoal: 'Payment Start',\n buzname: {\n 'fullpage': {\n 'pagename': '%::fullpage-login',\n 'pagename2': '%::fullpage-login:member:hermes:',\n 'version': 'member:%:'\n },\n 'ulLogin': {\n 'pagename': '%::fullpage-ullogin',\n 'pagename2': '%::fullpage-ullogin:member:hermes:',\n 'version': 'member:%:'\n // More page qualifiers come here...\n } }\n },\n children: []\n});\n\nangular.value(\"$LoginRoute\", $LoginRoute);\n_squid.$ComponentRoute;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/route.js\n// module id = ./pages/xo-login/route.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n
    \\n
    \\n\\n \\n\\n \\n\\n \\n\\n \\n\\n
    \\n
    \\n \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/template.html\n// module id = ./pages/xo-login/template.html\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoTokenizedWalletLoader = undefined;\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _angular = require('angular');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _app = require('xo-models/src/app');\n\nvar _factory = require('./factory');\n\nrequire('xo-ui-components/src/card-loader/directive');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar ANIMATION_STATUSES = {\n NOT_STARTED: 'notStarted',\n PENDING: 'pending',\n COMPLETED: 'completed'\n};\n\n// card loader component - used only in tokenized wallet flows.\nvar $xoTokenizedWalletLoader = exports.$xoTokenizedWalletLoader = _squid.$Component.extend('$xoTokenizedWalletLoader', {\n tag: 'xo-tokenized-wallet-loader',\n template: _template2['default'],\n props: {\n planDone: {\n type: 'var',\n required: false\n }\n },\n resolve: {\n models: function models() {\n return {\n tokenizedWalletInfoModel: _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve()['catch'](_angular.noop)\n };\n }\n },\n lifecycle: {\n enter: function enter() {\n var _this = this;\n\n this.auth = _auth.$AuthModel.instance();\n // start animation of the card\n this.setbuyerProgress = ANIMATION_STATUSES.NOT_STARTED;\n _logger.$logger.info('tokenized_wallet', {\n from: 'adding_pp_ap_animation',\n to: 'prepare_adding_pp_ap_animation',\n context_id: _angular.$rootScope.token,\n context_type: 'EC-Token',\n billing_token: _squid.$meta.baToken\n });\n\n // sets animation state to 80%\n (0, _angular.$timeout)(function () {\n _this.setbuyerProgress = ANIMATION_STATUSES.PENDING;\n _logger.$logger.info('tokenized_wallet', {\n from: 'adding_pp_ap_animation',\n to: 'process_adding_pp_ap_animation',\n context_id: _angular.$rootScope.token,\n context_type: 'EC-Token',\n billing_token: _squid.$meta.baToken\n });\n }, 300);\n\n // watch when planning is completed in xo-login/directive\n // to redirect to \"checkout.tokenizationInfo\" page\n this.$watch('planDone', function (planDone) {\n if (planDone) {\n _factory.$TokenizedWalledLoaderFactory.goToTokenizationInfoPage();\n }\n });\n },\n populate: function populate() {\n this.cardLoaderMessage = _factory.$TokenizedWalledLoaderFactory.getCardLoaderMessage(this.models.tokenizedWalletInfoModel);\n this.logoClass = this.models.tokenizedWalletInfoModel.getSubject();\n }\n }\n});\n\nangular.value(\"$xoTokenizedWalletLoader\", $xoTokenizedWalletLoader);\n_squid.$Component;\n\n_squid.$meta;\n\n_logger.$logger;\n\n_angular.$timeout;\n\n_angular.$rootScope;\n\n_angular.noop;\n\n_auth.$AuthModel;\n\n_app.$TokenizedWalletInfoModel;\n\n_factory.$TokenizedWalledLoaderFactory;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/tokenized-wallet-loader/directive.js\n// module id = ./pages/xo-login/tokenized-wallet-loader/directive.js\n// module chunks = main-code-split","\n\nvar _uiRouter = require('uiRouter');\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _logger = require('xo-beaver/dist/logger');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$TokenizedWalledLoaderFactory', function () {\n var goToTokenizationInfoPage = function goToTokenizationInfoPage() {\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'PP_AndroidPay_Info',\n 'to': 'prepare_PP_AndroidPay_Info',\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'EC-Token',\n 'billing_token': _squid.$meta.baToken\n });\n $('#outerWrapper').addClass('tokenization');\n _uiRouter.$state.go('checkout.tokenizationInfo');\n };\n\n var getCardLoaderMessage = function getCardLoaderMessage(tokenizedWalletInfoModel) {\n return (0, _squid.$renderContent)('topup.commonAdding', {\n type: tokenizedWalletInfoModel.brandName()\n }).toString();\n };\n\n return {\n goToTokenizationInfoPage: goToTokenizationInfoPage,\n getCardLoaderMessage: getCardLoaderMessage\n };\n});\n\n_uiRouter.$state;\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$renderContent;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/tokenized-wallet-loader/factory.js\n// module id = ./pages/xo-login/tokenized-wallet-loader/factory.js\n// module chunks = main-code-split","module.exports = \"
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/tokenized-wallet-loader/template.html\n// module id = ./pages/xo-login/tokenized-wallet-loader/template.html\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _checkout = require('xo-models/src/checkout');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$capeRedirectUtil', function () {\n return {\n handleCapeRouting: function handleCapeRouting(checkoutSession, checkoutCart, token) {\n var fundingInstruments = void 0;\n var isCreditInWallet = void 0;\n\n if (checkoutCart.isBillingNoPurchase()) {\n fundingInstruments = checkoutSession.futurePaymentInstruments;\n isCreditInWallet = checkoutSession.futurePayment && checkoutSession.futurePayment.isCreditInWallet;\n } else {\n fundingInstruments = checkoutSession.fundingOptions && checkoutSession.fundingOptions.instruments;\n isCreditInWallet = fundingInstruments && _squid.$util.find(fundingInstruments, function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n }\n\n var checkoutAppData = _checkout.$CheckoutAppDataModel.instance(token);\n var creditDataModel = _credit.$CreditDataModel.instance(token);\n var installmentModel = _credit.$CreditInstallmentModel.instance(token);\n\n var isCapeReturnKey = creditDataModel.getCapeKey();\n var isCapeReturn = isCapeReturnKey && _squid.$util.param('success');\n var isPPCEligible = checkoutSession.creditOffer;\n\n if (_squid.$locale.country !== checkoutAppData.get('merchant.merchant_country')) {\n creditDataModel.setCrossBorder(true);\n }\n\n function handleRedirect() {\n // User does not have any FI in wallet but they choose to pay in full.\n // Show add card contingency page instead of redirecting to CAPE.\n if (checkoutSession.isCreditPromoted && !fundingInstruments && creditDataModel.payInFull || !fundingInstruments && !isPPCEligible) {\n return _uiRouter.$state.go('checkout.pageAddCard.addCardFlow.addCard');\n }\n\n // Handle case where it was timeout and status is to go back to cape\n else if (isCreditInWallet || isCapeReturn || creditDataModel.payInFull) {\n return _uiRouter.$state.go('checkout.review');\n }\n\n // Handle acquisition customer send to CAPE\n else if (!isCreditInWallet && isPPCEligible) {\n return _uiRouter.$state.go('checkout.redirectToCape');\n } else {\n // show error message\n return _uiRouter.$state.go('checkout.review');\n }\n }\n\n // 2nd button, cross border, installment offer selected in API -- we cannot honor any offer the user chose, so must clear offer\n if (checkoutAppData.is_second_button_txn && creditDataModel.isCrossBorder() && installmentModel.get('meta.populated')) {\n installmentModel.action('delete', {\n success: function success(result) {\n _logger.$logger.info('patch_cart_installment_success');\n _credit.$CreditInstallmentModel.create(token); // Clear cache for this token\n handleRedirect();\n },\n error: function error(err) {\n _logger.$logger.error('patch_cart_installment_fail', err);\n _uiRouter.$state.go('checkout.genericError', {\n code: 'DELETE_CREDIT_OPTION_ERROR'\n });\n }\n });\n } else {\n handleRedirect();\n }\n }\n };\n});\n\n_squid.$util;\n\n_squid.$locale;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n_credit.$CreditDataModel;\n\n_credit.$CreditInstallmentModel;\n\n_checkout.$CheckoutAppDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-login/util.js\n// module id = ./pages/xo-login/util.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$xoReviewPageComponent = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _jquery = require('jquery');\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _uiRouter = require('uiRouter');\n\nvar _index = require('js/lib/index');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _integration = require('js/lib/integration');\n\nvar _index2 = require('xo-device-info/dist/index');\n\nvar _ul = require('xo-login-components/src/unified-login/ul');\n\nvar _pxp = require('xo-page-components/src/cart/lib/pxp');\n\nvar _marketingoffer = require('xo-models/src/marketingoffer/');\n\nvar _angular = require('angular');\n\nvar _kmliUpsell = require('xo-login-components/src/onetouch-interstitial/kmliUpsell');\n\nvar _utils = require('xo-member-components/src/rewards-checkbox/utils');\n\nvar _squid = require('squid');\n\nvar _fbMessenger = require('xo-page-components/src/constants/fbMessenger');\n\nvar _fbMessenger2 = _interopRequireDefault(_fbMessenger);\n\nvar _thirdPartyInfo = require('xo-third-party-components/src/thirdParty-info');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _fiApis = require('xo-models/src/fi/lib/fiApis');\n\nvar _eligibility = require('xo-models/src/eligibility');\n\nvar _index3 = require('xo-models/src/fiMeta/index');\n\nvar _index4 = _interopRequireDefault(_index3);\n\nvar _choice = require('xo-models/src/choice');\n\nvar _fiMessages = require('xo-models/src/fi/lib/fiMessages');\n\nvar _donation = require('xo-models/src/donation');\n\nvar _bml = require('xo-models/src/bml');\n\nvar _credit = require('xo-models/src/credit');\n\nvar _fi = require('xo-models/src/fi');\n\nvar _app = require('xo-models/src/app');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _experiments = require('xo-models/src/experiments');\n\nvar Experiments = _interopRequireWildcard(_experiments);\n\nvar _marketingoffer2 = require('xo-models/src/marketingoffer');\n\nvar _newMember = require('xo-models/src/newMember');\n\nvar _shippingMethod = require('xo-models/src/shippingMethod');\n\nvar _user = require('xo-models/src/user');\n\nvar _factory = require('xo-member-components/src/give-at-checkout/factory');\n\nvar _factory2 = require('xo-member-components/src/no-balance/factory');\n\nvar _factory3 = require('xo-member-components/src/rewards-checkbox/factory');\n\nvar _factory4 = require('xo-member-components/src/show-more-fi/factory');\n\nvar _factory5 = require('xo-wallet-components/src/add-card/addcard/factory');\n\nrequire('xo-title/dist/directive');\n\nrequire('xo-styles/dist/lib/toggle');\n\nrequire('xo-return-to-merchant/dist/util');\n\nrequire('xo-wallet-components/src/3ds/directive');\n\nrequire('xo-address-components/src/address-display/directive');\n\nrequire('xo-form-components/src/select-shipping-method/directive');\n\nrequire('xo-credit-components/src/offer/directive');\n\nrequire('xo-credit-components/src/xo-offer-top-banner/directive');\n\nrequire('xo-credit-components/src/bml-display/xo-bml-popup/directive');\n\nrequire('xo-credit-components/src/offer/xo-credit-example-uk/directive');\n\nrequire('xo-member-components/src/no-balance/directive');\n\nrequire('xo-member-components/src/review-topup/directive');\n\nrequire('xo-member-components/src/review-address/directive');\n\nrequire('xo-member-components/src/review-paywith/directive');\n\nrequire('xo-member-components/src/give-at-checkout/directive');\n\nrequire('xo-member-components/src/review-shipping-options/directive');\n\nrequire('xo-page-components/src/notYou/directive');\n\nrequire('xo-page-components/src/value-props/directive');\n\nrequire('xo-page-components/src/marketingOffers/directive');\n\nrequire('xo-page-components/src/messenger-plugin/directive');\n\nrequire('xo-third-party-components/src/review-paywith-baidu/directive');\n\nrequire('xo-third-party-components/src/review-paywith-venmo/directive');\n\nrequire('xo-ui-components/src/banner/directive');\n\nrequire('xo-ui-components/src/message/directive');\n\nrequire('xo-ui-components/src/sticky-cta/directive');\n\nrequire('xo-ui-components/src/expired-message/directive');\n\nrequire('xo-ui-components/src/user-assist-banner/directive');\n\nvar _cardartInstrument = require('../services/cardart-instrument');\n\nvar _factory6 = require('../xo-select-fi/factory');\n\nvar _factory7 = require('./factory');\n\nvar _tokenizedFactory = require('./tokenizedFactory');\n\nvar _shippingChangeFeature = require('./lib/shippingChangeFeature.js');\n\nvar _template = require('./template');\n\nvar _template2 = _interopRequireDefault(_template);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// Create payload that contains relevant data about the checkout state at review page\nfunction createReviewFptiPayload(_ref) {\n var checkoutSession = _ref.checkoutSession,\n _ref$isProcessTransit = _ref.isProcessTransition,\n isProcessTransition = _ref$isProcessTransit === undefined ? false : _ref$isProcessTransit;\n\n var payload = {\n shipping_address_id: checkoutSession.get('shipping.id')\n };\n\n if (checkoutSession.get('plan.conversion') && !isProcessTransition) {\n payload.currency_conversion_type = checkoutSession.get('plan.conversion.paypal') ? 'PAYPAL' : 'VENDOR';\n payload.is_conversion_shown = checkoutSession.get('plan.conversion.changeable') ? 1 : 0;\n payload.currency_conversion_from_curr = checkoutSession.get('plan.conversion.from_code');\n payload.currency_conversion_to_curr = checkoutSession.get('plan.conversion.to_code');\n } else if (checkoutSession.get('plan.conversion') && isProcessTransition) {\n payload.currency_conversion_selected = checkoutSession.get('plan.conversion.paypal') ? 'PAYPAL' : 'VENDOR';\n payload.currency_conversion_from_curr = checkoutSession.get('plan.conversion.from_code');\n payload.currency_conversion_to_curr = checkoutSession.get('plan.conversion.to_code');\n }\n if (_factory3.$RewardsCheckboxFactory.rewardsFound()) {\n var contentKeys = _factory3.$RewardsCheckboxFactory.getContentKeys(checkoutSession.plan);\n\n payload.fi_id = (0, _utils.getInstrumentID)(checkoutSession.plan);\n payload.rewards_type = contentKeys.issuerName;\n payload.rewards_amt = contentKeys.value.rewardAmount; // monetary amount\n if (!isProcessTransition) {\n payload.rewards_fi = _factory3.$RewardsCheckboxFactory.toString();\n }\n }\n return payload;\n}\n\nvar $xoReviewPageComponent = exports.$xoReviewPageComponent = _squid.$Component.extend('$xoReviewPageComponent', {\n tag: 'xo-review-page',\n template: _template2['default'],\n scope: {\n redirectiframe: '=?',\n redirectLightbox: '=?'\n },\n actions: {\n updatePreferredFi: function updatePreferredFi(logger) {\n if (this.makeFiPreferred && this.makeFiPreferred.selected) {\n var PreferredFi = new _fi.$PreferredFi({\n preferred: [this.makeFiPreferred.fiId]\n });\n\n logger.info('checkout_fpti', { 'pref_fi_set': '1' });\n return PreferredFi.save({\n transientError: true,\n contingencies: {\n DEFAULT: function DEFAULT() {}\n }\n });\n }\n\n logger.info('checkout_fpti', { 'pref_fi_set': '0' });\n\n return _angular.$q.when();\n }\n },\n lifecycle: {\n reenter: function reenter() {\n var msgKeys = this.checkoutSession.get('message.msgKeys', []);\n\n if (msgKeys.indexOf('confirmUpop.confirmUpopOrChooseAltMethod') === -1) {\n this.showUnconfirmedUpopMsg = !!this.checkoutSession.unconfirmed_upop;\n }\n\n // Reset the selectedmethod indicator and state change listener\n if (this.setupMultipleFi) {\n this.setupMultipleFi();\n }\n\n var instrumentId = this.checkoutSession.get('fundingOptions.plans.0.primaryFs.id');\n\n // If FS has changed due to an update, reset the preferred FI checkbox\n if (this.makeFiPreferred && this.makeFiPreferred.fiId !== instrumentId) {\n _logger.$logger.info('checkout_fpti', { 'pref_fi_option_shown': '1' });\n this.makeFiPreferred.selected = false;\n }\n\n this.topupError = false; // set default value to false (hide error when enter)\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'prepare_review'\n }, createReviewFptiPayload({ checkoutSession: this.checkoutSession })));\n\n // TODO: turn off `xo_hermes_preferred_expired_msg_review_page` since currently\n // it's not running. However, AuthRate team will be running this experiement again\n // this.showExpiredMsg = $ExpiredMsgFactory.showExpiredMsg(\n // this.isNmj,\n // this.checkoutSession\n // );\n\n // if (this.showExpiredMsg) {\n // $ExpiredMsgFactory.getPreferredExpiredPxpResult().then(result => {\n // this.isNmjexpired = result === 'xo_hermes_preferred_expired_msg_review_page_nmj_treatment' ? true : false;\n // this.preferredExpired = this.checkoutSession.getDisallowedPreferred();\n // });\n // }\n\n this.checkForIxoShippingMethods();\n },\n populate: function populate() {\n if (this.checkoutCart.isWalletTokenization()) {\n (0, _jquery2['default'])('#outerWrapper').addClass('tokenization topup');\n var windowHeight = window.innerHeight || document.documentElement && document.documentElement.clientHeight;\n var footerHeaderHeight = document.querySelector('xo-header .paypalHeader').clientHeight + document.querySelector('xo-footer .footer').clientHeight;\n\n document.querySelector('.review .reviewTopup').style.minHeight = windowHeight - footerHeaderHeight - 5 + 'px'; // 5px for header/footer alignment\n }\n },\n exit: function exit() {\n if (this.checkoutCart.isWalletTokenization()) {\n (0, _jquery2['default'])('.tokenization').removeClass('topup');\n }\n _factory3.$RewardsCheckboxFactory.destroy();\n }\n },\n controller: ['$scope', '$element', function ($scope, $element) {\n $scope.choiceBalanceCheckboxState = _factory6.$BalanceFactory.get();\n $scope.tokenizedFactoryState = _tokenizedFactory.$TokenizedFactory.get();\n $scope.noBalanceFactoryState = _factory2.$NoBalanceFactory.get();\n\n $scope.creditSharedInfo = _credit.$CreditSharedInfoModel.instance();\n\n $scope.isThirdPartyWalletExperience = function () {\n var experience = _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n\n return experience === 'BAIDU_EXPERIENCE' || experience === 'VENMO_EXPERIENCE';\n };\n\n $scope.determineThirdPartyWalletExperience = function () {\n return _thirdPartyInfo.thirdPartyExperience.getExperience(_angular.$rootScope.token);\n };\n\n $scope.creditParentContext = {\n populated: false,\n newMember: {},\n showCreditOffer: true // Flag for experimenting with display of the Credit Offer based on CEP\n };\n\n $scope.memberSegment = _marketingoffer2.$MemberSegmentModel.instance();\n\n $scope.showCreditPlacement = function () {\n // for xo-offer handling\n $scope.creditParentContext.newMember.creditOffer = $scope.memberSegment && $scope.memberSegment.creditOffer;\n\n var show = !$scope.isThirdPartyWalletExperience() && $scope.creditParentContext.populated && $scope.creditParentContext.showCreditOffer && !_angular.$rootScope.showFiSelectPage && ($scope.checkoutSession.creditOffer || $scope.isPPCReuseAndNotSelected());\n\n return show;\n };\n $scope.isProcessorDeclineExperiment = false;\n\n var applyNewMemberVariant = function applyNewMemberVariant() {\n return _newMember.$NewMemberEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n // feature flag for one page nmj experience\n var isNmjDesign1 = $scope.isNmjDesign1 = variant === 'one_page';\n // feature flag for one page nmj design 2 experience\n var isNmjDesign2 = $scope.isNmjDesign2 = variant === 'design_2';\n // feature flag for one page nmj design 3 experience\n var isNmjDesign3 = $scope.isNmjDesign3 = variant === 'design_3';\n // umbrella flag for nmj experience\n var isNmj = $scope.isNmj = isNmjDesign1 || isNmjDesign2 || isNmjDesign3;\n\n $scope.showViewYourPaymentRights = (isNmjDesign2 || isNmjDesign3) && _squid.$locale.country === 'US';\n $scope.showGreyHeader = $scope.isNmjDesign2 || $scope.isNmjDesign3;\n $scope.nmjExperience = {\n one_page: $scope.isNmjDesign1,\n design_2: $scope.isNmjDesign2,\n design_3: $scope.isNmjDesign3\n };\n\n // set assist-banner content based on type of nmj flow - if any\n var isPayNow = $scope.useraction === 'commit';\n var userName = $scope.auth.first_name ? $scope.auth.first_name : $scope.auth.email;\n\n if (isNmjDesign1) {\n $scope.assistBannerHeader = _squid.$locale.content.get('memberReview.assistHeader_1page');\n $scope.assistBannerBody = _squid.$locale.content.get(isPayNow ? 'memberReview.assistBody_paynow_1page' : 'memberReview.assistBody_continue_1page');\n } else if ($scope.showGreyHeader) {\n if (isPayNow) {\n $scope.headerMsg = (0, _squid.$renderContent)('memberReview.nmjDesign2HeaderMsgPayNow', { userName: userName });\n } else {\n $scope.headerMsg = (0, _squid.$renderContent)('memberReview.nmjDesign2HeaderMsgContinue', { userName: userName });\n }\n }\n $scope.creditParentContext.newMember.variant = variant;\n $scope.creditParentContext.newMember.useCEPDecision = isNmj;\n $scope.creditParentContext.populated = true;\n $scope.showPaypalPolicy = !$scope.isThirdPartyWalletExperience() && $scope.showPaypalPolicies && !$scope.showViewYourPaymentRights;\n $scope.showPaymentRights = !$scope.isThirdPartyWalletExperience() && $scope.showPaypalPolicies && $scope.showViewYourPaymentRights;\n _logger.$logger.info('member_ryi_variant_' + (variant || 'unknown'), {\n isNmj: isNmj,\n variant: variant\n });\n triggerPersonalizedBanner();\n });\n };\n\n var triggerPersonalizedBanner = function triggerPersonalizedBanner() {\n $scope.personalizedBanner.trigger();\n };\n\n if ($scope.isThirdPartyWalletExperience()) {\n // log buyer type for third Party usecases\n _logger.$logger.info('buyer_info', {\n fpti_buyer_type: $scope.determineThirdPartyWalletExperience() === 'VENMO_EXPERIENCE' ? 'Guestuser_venmo' : 'nonloginmember_benteley'\n });\n } else {\n // log existing buyer\n _logger.$logger.info('buyer_info', { fpti_buyer_type: 'Existinguser' });\n }\n\n // ----------------- OUTRO PXP VARS - START -------------------- //\n // NOTES: `xo_hermes_exit_msg` pxp has ramped to 100% and will always\n // return `xo_hermes_exit_msg_option5` treatment.\n // See: https://engineering.paypalcorp.com/pxptool/configuration?exptId=2609&version=9\n var pxpMerchNameLimit = 20; // max length of the merchant name\n var pxpMerchName = void 0; // the brand or merchant name - resolved after retrieving appdata\n\n // ----------------- OUTRO PXP VARS - END -------------------- //\n $scope.token = _angular.$rootScope.token;\n $scope.backUri = 'checkout.review';\n $scope.installmentNotSelected = false;\n $scope.installment = {\n showBanner: false,\n showCYCO: false,\n showCreditExample: false\n };\n\n /* Flag to determine whether merchant supports callback shipping options for given address\n 1. Default : true\n 2. shippingRegionSupported : false -> Show shipping region not supported error in review page and do not allow Pay\n */\n $scope.instantUpdateFeature = {\n shippingRegionSupported: true\n };\n $scope.shippingChangeFeature = {};\n\n var initAndCallOnShippingChange = function initAndCallOnShippingChange() {\n $scope.shippingChangeFeature = (0, _shippingChangeFeature.createShippingChangeFeature)($scope.token, $scope.checkoutCart, $scope.checkoutSession, $scope.checkoutAppData, function () {\n return $scope.checkForIxoShippingMethods();\n });\n $scope.shippingChangeFeature.callOnShippingChange();\n };\n\n // PAD Toggle feature\n $scope.padToggleFeature = {\n applicable: false,\n checkboxEnabled: false,\n showCheckbox: false,\n defaultPlan: false,\n pxpControlEnabled: false,\n fptiLogged: false,\n multiFiCheckboxStates: {}\n };\n\n // 'continue' or 'pay now' button text\n $scope.payButtonText = function () {\n return '';\n };\n $scope.isGCcountry = (_squid.$config.giftCardSupportedCountries || '').indexOf(_squid.$locale.country) > -1;\n $scope.showPaypalPolicies = (0, _squid.$featureCountries)('showPaypalPolicies').indexOf(_squid.$locale.country) > -1;\n $scope.makeAddrPreferred = {\n shown: false,\n selected: false\n };\n $scope.showPolicyAgreement = (0, _squid.$feature)('showPolicyAgreement');\n\n var _ref2 = window.xprops || {},\n _ref2$experience = _ref2.experience,\n experience = _ref2$experience === undefined ? { facebook: false, autoBA: false } : _ref2$experience;\n\n $scope.isFacebookBAIntegration = experience.facebook;\n $scope.isMessengerBAIntegration = _integration.$integration.getConfig('IS_MESSENGER_BA_INTEGRATION');\n $scope.isPrechecked = _fbMessenger2['default'].PRECHECKED_COUNTRIES.indexOf(_squid.$locale.country) >= 0;\n\n $scope.personalizedBanner = {\n show: false,\n trigger: function trigger() {\n var isOneTouchBanner = $scope.auth.rememberedOT() && (0, _squid.$feature)('oneTouchPersonalization');\n var newMemberDesign1 = $scope.isNmjDesign1;\n\n $scope.personalizedBanner.show = newMemberDesign1 || isOneTouchBanner;\n }\n };\n\n $scope.optin_toggle = {\n isEnabled: false,\n value: false,\n showExpandedTerms: true,\n setValue: function setValue(val) {\n this.value = val;\n // this.showExpandedTerms = false; // hide terms upon user interaction\n _logger.$logger.debug('ryi_optin_toggle_setValue', {\n value: this.value,\n showExpandedTerms: this.showExpandedTerms\n });\n }\n };\n _logger.$logger.debug('kmliUpsell review: init');\n _kmliUpsell.$KmliUpsell.init(_angular.$rootScope.token, false, true);\n var creditBannerRegister = _angular.$rootScope.$on('allLoaded', function () {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T1' });\n creditBannerRegister();\n });\n _angular.$rootScope.$on('$destroy', creditBannerRegister);\n\n function optInUser() {\n // eslint-disable-line no-unused-vars\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_optin'\n });\n $scope.optin_toggle.setValue(true);\n var optinSource = 'checkoutToggle';\n var silentSpinner = true;\n\n return _ul.$ul.optInToOneTouch(_angular.$rootScope.token, _squid.$locale.country, _squid.$locale.lang, silentSpinner, {\n 'stateName': 'OT_Toggle',\n 'transInfix': 'process_optin'\n }, optinSource).then(function (res) {\n _logger.$logger.debug('ryi_optin_toggle_process_optin');\n })['catch'](function (err) {\n // eslint-disable-line handle-callback-err\n _logger.$logger.debug('ryi_optin_toggle_process_optin_Error', {\n 'int_error_description': err && err.message\n });\n });\n }\n\n function optOutUser() {\n // eslint-disable-line no-unused-vars\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'prepare_optout'\n });\n return $scope.auth.action('optout', { silent: true }).then(function (res) {\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'process_optout'\n });\n $scope.$applyAsync(function () {\n var bannerElement = $element.find('.oneTouchBanner');\n\n bannerElement.addClass('leave_animation');\n _logger.$logger.debug('ryi_optin bannerElement animate');\n (0, _angular.$timeout)(function () {\n $scope.optin_toggle.setValue(false);\n $scope.optin_toggle.isEnabled = false;\n }, 1400);\n });\n })['catch'](function (err) {\n _logger.$logger.info('ryi_optin', {\n 'from': 'OT_Toggle',\n 'to': 'process_optout',\n 'error_source': 'identityauthorizationserv',\n 'int_error_code': 'optout_failure',\n 'int_error_description': err && err.message\n });\n });\n }\n\n $scope.onTouchToggle = function (value) {\n _logger.$logger.debug('optin_toggle_change_attempt', {\n 'ryi_optin': $scope.optin_toggle,\n 'remembered': $scope.auth.remembered,\n 'value': value\n });\n if ($scope.optin_toggle.isEnabled) {\n if (value) {\n optInUser();\n } else {\n optOutUser();\n }\n }\n };\n\n $scope.tagFamilyComputer = function () {\n // creates a log to tag device as family computer.\n // if we can distinguish between single user, family computer and shared computer\n // we may be able to offer a way to switch accounts\n var buyer_id = $scope.auth.buyer_id;\n var logPayload = {\n localStorageEnabled: false,\n isMobile: _index2.$DeviceInfo.isMobile()\n };\n\n if (_squid.$util.localStorageEnabled()) {\n var family_device_key = 'family_device_test';\n var public_device_key = 'public_device_test';\n\n logPayload.localStorageEnabled = true;\n\n var objStr = localStorage.getItem(family_device_key);\n var publicDeviceTest = localStorage.getItem(public_device_key);\n\n if (publicDeviceTest === 'true') {\n // dont overuse localStorage there is a size limit\n localStorage.removeItem(family_device_key);\n logPayload.isPublicDevice = true;\n } else {\n var buyerList = objStr ? JSON.parse(objStr) : [];\n\n if (buyerList.indexOf(buyer_id) === -1) {\n buyerList.push(buyer_id);\n }\n // assuming 5 or less users on a device as family computer\n logPayload.isFamilyDevice = Boolean(buyerList.length > 1 && buyerList.length < 6);\n logPayload.isPublicDevice = Boolean(buyerList.length > 20);\n logPayload.userCount = buyerList.length;\n objStr = JSON.stringify(buyerList);\n localStorage.setItem(family_device_key, objStr);\n localStorage.setItem(public_device_key, logPayload.isPublicDevice.toString());\n }\n }\n var eligibility_reason = 'localStorage:' + logPayload.localStorageEnabled + '_isPublicDevice:' + logPayload.isPublicDevice + '_isFamilyDevice:' + logPayload.isFamilyDevice + '_userCount:' + logPayload.userCount;\n\n _logger.$logger.debug('family_device_test', logPayload);\n _logger.$logger.info('checkout_fpti', {\n 'from': 'family_device_test',\n 'to': 'process_elg_chk',\n 'eligibility_reason': eligibility_reason\n });\n };\n\n function stickyCTA() {\n return _eligibility.$stickyCTA.instance().getEligibility().then(function (eligibility) {\n $scope.stickyEligibility = eligibility;\n });\n }\n\n // Format the informal name if populated\n function setInformalName() {\n if ($scope.auth) {\n $scope.formattedNameInformal = (0, _squid.formatNameInformal)({\n first_name: $scope.auth.first_name,\n last_name: $scope.auth.last_name\n }) || $scope.auth.email;\n }\n }\n\n function donationAuthorize() {\n var _$GiveAtCheckoutFacto = _factory.$GiveAtCheckoutFactory.get(),\n donateCheckboxSelected = _$GiveAtCheckoutFacto.donateCheckboxSelected,\n charity = _$GiveAtCheckoutFacto.charity,\n tracking = _$GiveAtCheckoutFacto.tracking;\n\n if (donateCheckboxSelected) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GIVE_AT_CHECKOUT',\n to: 'process_give_at_checkout',\n gac_model: charity.model_id,\n gac_npid: charity.nonprofit_id\n });\n\n if (tracking && tracking.click_url) {\n _marketingoffer.$fireMORSBeacon.fireBeacon(tracking.click_url);\n }\n\n return _donation.$GiveAtCheckoutModel.instance().action('donationAuthorize', {\n data: {\n 'ec_token': _angular.$rootScope.token,\n 'nonprofit_id': charity.nonprofit_id,\n 'charity_name': charity.name,\n 'money': {\n 'value': charity.amount,\n 'currency_code': charity.currency\n }\n },\n success: function success() {\n return _logger.$logger.info('donation_authorize_success', {});\n },\n error: function error() {\n return _logger.$logger.error('donation_authorize_failure');\n }\n });\n }\n }\n\n function updateAddressAsPreferred() {\n if ($scope.makeAddrPreferred.shown) {\n _logger.$logger.info('makeAddrPreferred.shown', {});\n }\n\n if ($scope.makeAddrPreferred.selected) {\n _logger.$logger.info('makeAddrPreferred.selected', {});\n // Ignore all errors from setPreferred api, by passing transientError as true\n return $scope.checkoutSession.shipping.action('setPreferred', {\n transientError: true\n });\n }\n return _angular.$q.when();\n }\n\n function setStickyInstrument() {\n if (!_squid.$config.features.DEFAULT.enableStickyFunding) {\n return _angular.$q.when();\n }\n\n // If the currently selected plan is not saved in the checkoutSession, make the call to save it.\n // For BA no purchase cases, the only way we track it is in the checkout session, so it should already be saved (selected id will equal sticky id).\n // For all other purchase cases, we need to look at the first in fundingOptions and match it to futurePaymentInstruments\n var savedSticky = $scope.checkoutSession.selectedFuturePaymentInstrument;\n var selectedSticky = $scope.checkoutSession.getSelectedStickyInstrument();\n\n // selectedSticky will not be populated if this isn't a billing case.\n if (!selectedSticky) {\n return _angular.$q.when();\n }\n\n // If we haven't saved the selected sticky instrument yet,\n // make the API call to save it\n if (!savedSticky || savedSticky.instrument_id !== selectedSticky.instrument_id) {\n return $scope.checkoutSession.action('setStickyFI', {\n data: {\n instrument_id: selectedSticky.instrument_id\n }\n });\n }\n return _angular.$q.when();\n }\n\n function linkAuthConsent() {\n /* Check if its BA flow and we have merchant consent code */\n if ($scope.checkoutCart.isBilling() && $scope.checkoutCart.billing) {\n // Getting merchant account's billing consent code i.e. legal_text_code\n var billingConsentCode = $scope.checkoutCart.billing.consent_code;\n var FB_CONSENT_CODE = 'facebookp2p';\n var authConsentModel = _user.$AuthConsentModel.instance();\n\n if (billingConsentCode === FB_CONSENT_CODE) {\n return authConsentModel.action('link', {\n data: {\n 'ba_token': _squid.$meta.baToken\n },\n success: function success() {\n return _logger.$logger.info('link_authconsent_success', {});\n }\n });\n }\n }\n }\n\n function setWalletTopupPreferences() {\n if ($scope.checkoutCart.isWalletTokenization()) {\n $scope.walletPreferences = _fi.$WalletPreferences.instance(_angular.$rootScope.token);\n return $scope.walletPreferences.save();\n }\n }\n\n function isValidPinSetup() {\n if ($scope.walletPinModel && $scope.walletPinModel.isSetupEligible()) {\n if (!$scope.walletPinModel.userPin) {\n return false;\n }\n }\n return true;\n }\n\n function prepareTokenizedWallet() {\n if ($scope.checkoutCart.isWalletTokenization()) {\n return (0, _squid.$populate)($scope, {\n walletPreferences: _fi.$WalletPreferences.instance(_angular.$rootScope.token),\n walletPinModel: _app.$TokenizedWalletPinModel.instance(_angular.$rootScope.token),\n tokenizedFundingCapabilitiesModel: _app.$TokenizedFundingCapabilitiesModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n tokenizedWalletToken: $scope.checkoutCart.tokenizedWalletToken,\n country: $scope.auth.country\n }\n })\n }).then(function (result) {\n var fundingInstrument = $scope.walletPreferences.getPreferred();\n var instrument_id = fundingInstrument.instrument_id;\n var defaultTopupFI = _squid.$util.find($scope.checkoutSession.topupFundingSources, function (fs) {\n return fs.instrument_id === instrument_id;\n }) || {};\n var defaultDirectFI = _squid.$util.find($scope.checkoutSession.futurePaymentInstruments, function (fs) {\n return fs.instrument_id === instrument_id;\n }) || {};\n var pinStatus = 'default_pin_unavailable';\n\n if ($scope.walletPinModel.isPinIdPresent()) {\n pinStatus = 'already_exist';\n } else if ($scope.walletPinModel.getPinOrigin() !== 'UNSET') {\n pinStatus = 'pin_error';\n } else if ($scope.walletPinModel.getSuggestedPin()) {\n pinStatus = 'default_pin_available';\n }\n\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'prepare_review',\n 'context_id': $scope.token,\n 'context_type': 'EC-Token',\n 'billing_token': _squid.$meta.baToken,\n 'default_topup_fi': defaultTopupFI.type,\n 'default_direct_fi': defaultDirectFI.type,\n 'pin': pinStatus,\n 'flag': $scope.checkoutSession.get('sepa_mandate.bankId') ? 'sepa' : undefined\n });\n });\n }\n return _angular.$q.when();\n }\n\n function checkJSV4PaymentDetails() {\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.getPaymentDetails && ($scope.ixoShippingMethods || this.ixoShippingMethods)) {\n return window.xprops.supplement.getPaymentDetails($scope.checkoutAppData.get('payment_id')).then(function (details) {\n if (!(details && details.selected_shipping_method)) {\n $scope.checkoutSession.message = {\n type: 'error',\n msgKeys: ['shipping.bopisErrorMessage']\n };\n throw new Error('IXO_CANNOT_CHECKOUT_WITHOUT_SHIPPING_SELECTION');\n } else {\n delete $scope.checkoutSession.message;\n }\n });\n }\n return _angular.$q.when();\n }\n\n function show3DSLightbox() {\n var cc_id = $scope.checkoutSession.get('resolve_3ds.ccId');\n var plans = $scope.checkoutSession.get('plan.sources', null);\n var plan = plans && plans.filter(function (e) {\n return e.instrument_id === cc_id;\n })[0].amount || null;\n\n $scope.resolve_3ds_data = {\n cc_id: cc_id,\n flow_id: 'HERMES',\n merchant_id: $scope.payee.get('merchant.id'),\n merchant_country_code: $scope.checkoutAppData.get('merchant.merchant_country'),\n transaction_amount_currency: plan && plan.currency_code || null,\n transaction_amount_value: plan && plan.amount || null\n };\n $scope.launch3DSResolver = true;\n }\n\n function setProcessorDeclineMessage(checkoutSession) {\n var declinedInstruments = checkoutSession.declinedInstruments;\n if (declinedInstruments && declinedInstruments.length > 0) {\n _factory5.$AddCardFactory.getIssuerDeclineElmoResult().then(function (treatment) {\n $scope.isProcessorDeclineExperiment = treatment === 'Trmt_xo_hermesnodeweb_issuer_decline_1';\n var processorDeclinedMsg = _fiMessages.$fiMessages.processorDeclinedMsg($scope.checkoutSession, true, treatment, $scope.auth, $scope.fiMeta.wallet, $scope.formattedNameInformal);\n\n if (processorDeclinedMsg) {\n $scope.checkoutSession.message = {\n type: processorDeclinedMsg.type,\n msgs: [processorDeclinedMsg.msg]\n };\n }\n });\n }\n }\n\n function getPadToggleStatus() {\n var toggleStatus = 'NA'; // NOT APPLICABLE status\n\n if (_factory7.$PADFactory.isPadToggleFeatureApplicable($scope.padToggleFeature, $scope.isPadToggleEnabled)) {\n if ($scope.padToggleFeature.checkboxEnabled) {\n toggleStatus = 'ON';\n } else {\n toggleStatus = 'OFF';\n }\n }\n return toggleStatus;\n }\n\n /**\n * `Exit message` feature is currently only applied to:\n * 1) Only in US\n * 2) user action **not** \"commit\"\n * 3) not a billing agreement\n * 4) `DONE_PAGE` integration is false\n * @returns {boolean}\n */\n var applyExitMessage = function applyExitMessage() {\n return _squid.$locale.country === 'US' && $scope.useraction !== 'commit' && !$scope.checkoutCart.isBilling() && !_integration.$integration.getConfig('DONE_PAGE');\n };\n\n function authorize() {\n if ($scope.checkoutSession.resolve_3ds) {\n return show3DSLightbox();\n }\n\n function isXoonUpopRedirect() {\n if (!($scope.checkoutSession && $scope.checkoutSession.get('errorData.resolution.data.fi.type'))) {\n return false;\n }\n\n return _squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon' && $scope.checkoutSession.errorData.resolution.name === 'PAYER_TO_AUTHENTICATE_CARD' && !$scope.checkoutSession.errorData.resolution.data.alternate_options && $scope.checkoutSession.errorData.resolution.data.fi.type.toUpperCase() === 'CUP';\n }\n\n if ($scope.checkoutSession.unconfirmed_upop || isXoonUpopRedirect()) {\n var card = void 0;\n\n if ($scope.checkoutSession.unconfirmed_upop) {\n card = $scope.checkoutSession.unconfirmed_upop;\n } else {\n card = $scope.checkoutSession.errorData.resolution.data;\n }\n\n $scope.cardModel = new _fi.$AddCardModel({});\n $scope.cardModel.id = card.fundingId;\n $scope.cardModel.card = new _fi.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n _uiRouter.$state.go('.confirmUpop');\n return;\n }\n\n // Currently, exit message will only be applicable to US. If we'd like\n // to expand exit message feature to other countries, we will need\n // translation from other countries.\n if (applyExitMessage()) {\n // HACK - REMOVE and REFACTOR ONCE DONE\n // overload base.processing in strings\n // since quid is hardcoded to use string each time\n // required only for testing - remove and refactor,\n // to properly allow for dynamic spinner messages\n\n // resolve merchant name\n var merchantName = pxpMerchName;\n // flag when name is missing or longer than 20 chars\n var badMerchantName = !merchantName || merchantName.length > pxpMerchNameLimit;\n var outroMsg = badMerchantName ? 'We’re sending you back to the merchant to complete this purchase.' : 'We\\u2019re sending you back to ' + merchantName + ' to complete this purchase.';\n\n // capture current route\n var reviewRoute = _uiRouter.$state.current;\n\n // listen to !startLoad\n // this is the only way we can then manipulate the spinner\n var cancelOutroOverride = _angular.$rootScope.$on('startLoad', function () {\n // if this is the review route...\n // this is needed, in case the session has ended\n // at this point, we need this listener to do nothing\n if (_uiRouter.$state.current === reviewRoute) {\n // force spinner styling and content\n // this is delayed, because (for some reason)\n // the spinner isn't in the DOM _yet_,\n // even though #showSpinner() fired... UGH!\n (0, _angular.$timeout)(function () {\n var spinnerMessageEl = (0, _jquery2['default'])('#spinner-message');\n\n if (spinnerMessageEl) {\n spinnerMessageEl = spinnerMessageEl.css({\n width: '130%',\n marginLeft: '-15%'\n });\n if (spinnerMessageEl) {\n // setting here, since `ng-bind-html` didn't work in spinner directive\n spinnerMessageEl.html(outroMsg);\n }\n }\n }, 1);\n } else {\n // (otherwise) when no longer the review route...\n // this means something happened before redirect\n // likely an expired session\n // In that case we'll remove this listener\n // It will just be re-added, in the next redirect attempt\n cancelOutroOverride();\n }\n });\n }\n\n var cardBackup = $scope.checkoutSession.cardBackup.getPlan();\n\n _logger.$logger.info('checkout_fpti', {\n from: 'processor_decline_retry',\n to: 'processor_decline_retry_eligibility',\n 'is_bkp_funding_chosen': cardBackup && cardBackup.planId ? 1 : 0\n });\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'process_review'\n }, createReviewFptiPayload({ checkoutSession: $scope.checkoutSession, isProcessTransition: true })));\n\n var isGoogleAccountLinking = _tokenizedFactory.$TokenizedFactory.isGoogleAccountLinking();\n\n // for Google account linking - make a batch call which includes \"authorize\" call first call\n // and updateIssuaceScope as second\n if (isGoogleAccountLinking) {\n _tokenizedFactory.$TokenizedFactory.updateIssuanceScope();\n }\n\n return $scope.checkoutSession.action('authorize', {\n batch: isGoogleAccountLinking && _tokenizedFactory.$TokenizedFactory.getAuthorizeBatch(),\n data: {\n alternateFundingOptionId: cardBackup && cardBackup.planId\n },\n success: function success() {\n if ($scope.checkoutSession.get('plan.paypal_credit')) {\n _logger.$logger.info('checkout_fpti', { 'ppc_reuse_status': 'success' });\n }\n\n var padToggleStatus = getPadToggleStatus();\n\n if (padToggleStatus === 'ON') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOnSuccess'\n });\n } else if (padToggleStatus === 'OFF') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOffSuccess'\n });\n }\n\n // for all tokenized flows except google account linking - log FPTI in authorize sucess callback\n if (!isGoogleAccountLinking && $scope.checkoutCart.isWalletTokenization()) {\n _tokenizedFactory.$TokenizedFactory.logProcessReviewToFPTI();\n }\n\n // Just in case, cancel the state change listener checking if updateFs needs to be called\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n if ($scope.checkoutSession.get('sepa_mandate.bankId')) {\n return _uiRouter.$state.go('checkout.sepapage');\n }\n\n // xchild = V4 Incontext Integration. Do not initiate Payment.\n if (!window.xchild && $scope.checkoutAppData.doec_on_approve()) {\n return _uiRouter.$state.go('checkout.pay');\n }\n\n // for all flows except google account linking - go to end of checkout\n // for google account linking - redirect happens in \"updateIssuanceScope\" call (see tokenizedFactory)\n if (!isGoogleAccountLinking) {\n return _uiRouter.$state.go('checkout.end');\n }\n },\n contingencies: {\n // Smart $x authorization check on the card fails\n CREDIT_CARD_AUTH_FAILED: function CREDIT_CARD_AUTH_FAILED() {\n $scope.checkoutSession.invalidate();\n $scope.checkoutSession.smartDollarAuthFailed = true;\n if ($scope.checkoutSession.selectedFuturePaymentInstrument) {\n // Invalidate the saved FI selection to avoid display of stale selection on review page.\n delete $scope.checkoutSession.selectedFuturePaymentInstrument;\n }\n return $scope.checkoutSession.action('create', {\n success: function success() {\n $scope.checkoutSession.smartDollarAuthFailed = false;\n $scope.errorHandlerHelper.addPageError('payment.authFailureMultipleFIs');\n return _uiRouter.$state.go('checkout.review', { message: 'CREDIT_CARD_AUTH_FAILED' });\n }\n });\n }\n }\n });\n }\n\n function setShowShippingMethodProperty() {\n return (0, _squid.$populate)($scope, {\n shippingRulesSummary: _shippingMethod.$ShippingRuleSummaryModel.instance(_angular.$rootScope.token).retrieve({\n params: {\n merchant_id: $scope.payee.get('merchant.id'),\n currency_code: $scope.checkoutCart.get('purchase.amounts.total.currency_code')\n }\n })\n }).then(function () {\n if ($scope.shippingRulesSummary.isSnTEnabled) {\n _logger.$logger.info('shipping_rules_summary_snt_enabled');\n } else {\n _logger.$logger.info('shipping_rules_summary_snt_disabled');\n }\n $scope.showShippingMethod = $scope.shippingRulesSummary.isSnTEnabled || $scope.isInstantUpdateAPIFlow;\n return;\n });\n }\n\n function show3DSDeclineMsg(declineAfter3DSAccept) {\n // Instrument number of available plans for 3DS decline case.\n var numberOfPlans = $scope.checkoutSession.getPlanList() ? $scope.checkoutSession.getPlanList().length : 0;\n\n _logger.$logger.info('3DS_decline_plan_count', { 'plans': numberOfPlans });\n\n var key = 'threeDS.memberDecline';\n\n if (declineAfter3DSAccept) {\n key = 'threeDS.memberDeclineAfter3DSAccept';\n }\n\n var card = $scope.checkoutSession && $scope.checkoutSession.resolve_3ds;\n\n if (card) {\n var msg = (0, _squid.$renderContent)(key, {\n cardType: card.type,\n last4: card.number\n });\n\n $scope.checkoutSession.message = {\n msgs: [msg],\n type: 'warning'\n };\n }\n }\n\n /**\n * call patchXO API to clear the 3DS contingency and then call authorize API.\n */\n function clear3DSContingency() {\n var resolve_3ds = $scope.checkoutSession.resolve_3ds || {};\n\n return $scope.checkoutSession.action('clear3DSContingency', {\n data: {\n ccId: resolve_3ds.ccId\n },\n success: function success() {\n // Clear3DSContingency can change the plan ids, so reset the multipleFi indicator after this is called\n if ($scope.setupMultipleFi) {\n $scope.setupMultipleFi();\n }\n\n if (!$scope.checkoutSession.resolve_3ds) {\n return authorize();\n } else {\n // Symphony is not able to clear the 3DS contingency\n show3DSDeclineMsg(true);\n }\n }\n });\n }\n\n $scope.onComplete3DSHandler = function (status) {\n $scope.launch3DSResolver = false;\n if (status === 'success') {\n return clear3DSContingency();\n } else if (status === 'decline') {\n // 3DS got declined\n show3DSDeclineMsg();\n }\n };\n\n $scope.upopCallbacks = {\n onConfirmUpopSuccess: function onConfirmUpopSuccess() {\n _uiRouter.$state.go('checkout.review');\n return $scope.checkoutSession.action('clearContingency', {\n data: {\n contingency: 'UNCONFIRMED_UPOP',\n ccId: $scope.checkoutSession.get('unconfirmed_upop.fundingId') || $scope.checkoutSession.get('errorData.resolution.data.fundingId')\n },\n success: function success() {\n if (!$scope.checkoutSession.unconfirmed_upop) {\n return authorize();\n } else {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['confirmUpop.confirmUpopOrChooseAltMethod']\n };\n }\n }\n });\n },\n onConfirmUpopCancel: function onConfirmUpopCancel() {\n _uiRouter.$state.go('checkout.review');\n $scope.showUnconfirmedUpopMsg = false;\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['confirmUpop.confirmUpopOrChooseAltMethod']\n };\n }\n };\n\n $scope.errorHandlerHelper = {};\n $scope.errorHandlerHelper.addPageError = function (contentKey, dynamicValuesInContent) {\n var messages = [];\n var msg = void 0;\n\n if (dynamicValuesInContent) {\n msg = (0, _squid.$renderContent)(contentKey, dynamicValuesInContent);\n } else {\n msg = _squid.$locale.content.get(contentKey);\n }\n\n messages.push(msg);\n $scope.checkoutSession.message = {\n msgs: messages,\n type: 'error'\n };\n };\n\n $scope.errorHandlerHelper.clearPageErrors = function () {\n $scope.checkoutSession.message = '';\n };\n\n $scope.returnFromCape = function (isCapeReturnKey) {\n return $scope.creditDataModel.action('readCreditKey', {\n data: {\n capeKey: isCapeReturnKey\n },\n success: function success(res) {\n // if CAPE includes this field inside the mayfly payload, we will show-up a warning message\n // on the top of the page ('offers.bmlInWalletDeniedMsg') regarding the declined credit application\n if (res.show_cape_declined_msg) {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['offers.bmlInWalletDeniedMsg']\n };\n }\n\n if (res.financial_instrument_id) {\n var financial_instrument_id = res.financial_instrument_id.indexOf('BC') !== 0 ? 'BC' + res.financial_instrument_id : res.financial_instrument_id;\n\n return $scope.checkoutSession.fundingOptions.action('update', {\n resultModel: $scope.checkoutSession,\n data: {\n planId: financial_instrument_id\n },\n success: function success(result) {\n $scope.checkoutSession.message = {\n type: 'success',\n msgKeys: ['offers.bmlInWalletSuccessMsg']\n };\n\n if ($scope.setupMultipleFi) {\n $scope.setupMultipleFi();\n }\n }\n });\n }\n\n // User does not have any FI in wallet and they choose to pay in full.\n else if (!$scope.checkoutSession.get('plan.sources') && $scope.checkoutSession.isCreditPromoted) {\n _uiRouter.$state.go('checkout.pageAddCard.addCardFlow.addCard');\n } else if ($scope.creditDataModel.isCapeInternalServiceError()) {\n // Todo Show error message from CAPE\n return _angular.$q.when();\n } else {\n return _angular.$q.when();\n }\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('read_cape_key_failure');\n return _angular.$q.when();\n }\n }\n });\n };\n\n var ifPadThenUpdatePlan = function ifPadThenUpdatePlan(selectedMethodPlanId) {\n // For pad toggle feature with Choice Multi FI experience, we look up the plan ID here\n var padOrIachPlanId = _factory7.$PADFactory.isPadToggleFeatureApplicable($scope.padToggleFeature, $scope.isPadToggleEnabled) && _factory7.$PADFactory.getPadOrIachBankPlanId({\n selectedMethodPlanId: selectedMethodPlanId,\n fundingOptions: $scope.checkoutSession.fundingOptions,\n multiFiCheckboxStates: $scope.padToggleFeature.multiFiCheckboxStates\n });\n\n return padOrIachPlanId ? padOrIachPlanId : selectedMethodPlanId;\n };\n\n /**\n * Decides the plan to use based on\n * Pad, Credit, Rewards and any other\n * bussiness logic\n *\n * @returns planID\n */\n var decidePlanSelection = function decidePlanSelection() {\n // TODO: Consider moving this to a generic wallet/plan factory\n // this will avoid repetition in RYI, SelectFI and PayWith\n var defaultPlan = $scope.checkoutSession.get('plan.sources') && $scope.checkoutSession.get('plan.sources')[0];\n var hasRewards = _factory3.$RewardsCheckboxFactory.isRewardsPlan($scope.checkoutSession.plan);\n var selectedMethodPlanId = (0, _utils.getSelectedPlan)($scope.selectedmethod, $scope.checkoutSession);\n\n if (!$scope.selectedmethod && !hasRewards) {\n return '';\n }\n\n selectedMethodPlanId = ifPadThenUpdatePlan(selectedMethodPlanId);\n selectedMethodPlanId = _factory3.$RewardsCheckboxFactory.ifRewardsThenUpdatePlan(selectedMethodPlanId, $scope.selectedmethod, $scope.checkoutSession);\n\n // If the plan is already selected, we don't need to duplicate the call\n if (selectedMethodPlanId === (defaultPlan && defaultPlan.id)) {\n return '';\n }\n\n // This is handled in onPay\n if (selectedMethodPlanId === 'applyForPPCRadio') {\n return '';\n }\n return selectedMethodPlanId;\n };\n\n /**\n * Given a plan id perform a selection\n * and handle any errors/contingencies\n *\n * @returns planID\n */\n var doPlanSelection = function doPlanSelection(selectedMethodPlanId) {\n return $scope.checkoutSession.fundingOptions.action('select', {\n data: {\n planId: selectedMethodPlanId\n },\n success: function success(result) {\n $scope.checkoutSession.populate(result);\n\n // for multi fi use case after replan we need to reset index to 0\n // since selected instrument will always be first\n if ($scope.selectedmethod) {\n $scope.selectedmethod.index = 0;\n }\n },\n contingencies: {\n NEED_AUTHENTICATED_CARD: function NEED_AUTHENTICATED_CARD(name, result) {\n // Route to the Confirm Upop page\n if (result && result.resolution) {\n var card = result.resolution.data;\n\n if (card.fundingId && card.fi && card.fi.type) {\n $scope.cardModel = new _fi.$AddCardModel();\n $scope.cardModel.id = card.fundingId;\n $scope.cardModel.card = new _fi.$CardModel({\n number: 'xxxx-xxxx-xxxx-' + card.fi.number,\n type: card.fi.type.toUpperCase(),\n productType: card.fi.productType\n });\n }\n }\n\n // Before routing to confirm Upop route, we cancel the state change listener so that we don't call updateFS. At this point, the user has already made their selection, so this is unneeded.\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n // Route to the Confirm Upop page. We'll hold on to this deferred promise until the confirmation flow is finished, so we can then continue the chain or cancel out\n var upopResult = _angular.$q.defer();\n\n // Create the handlers for Upop, specifically for this flow. They will act on the deferred promise when the flow is completed\n $scope.upopCallbacks.isOnUpdate = true;\n $scope.upopCallbacks.onUpdateSuccess = function () {\n // On confirmed, update the checkout session then continue\n return $scope.checkoutSession.fundingOptions.action('update', {\n resultModel: $scope.checkoutSession,\n silent: true,\n data: {\n planId: $scope.cardModel.id\n },\n success: function success() {\n if ($scope.checkoutSession.cvvData) {\n $scope.checkoutSession.set('cvvData.security_code', $scope.cardModel.get('card.security_code'));\n }\n\n // Reset the callback flag\n $scope.upopCallbacks.isOnUpdate = false;\n $scope.setupMultipleFi();\n // Return to this route, resolve the promise\n _uiRouter.$state.go('checkout.review');\n upopResult.resolve();\n }\n });\n };\n $scope.upopCallbacks.onUpdateCancel = function () {\n // Break the promise chain and return to the review page\n $scope.upopCallbacks.isOnUpdate = false;\n $scope.setupMultipleFi();\n upopResult.reject();\n $scope.upopCallbacks.onConfirmUpopCancel();\n };\n\n _uiRouter.$state.go('.confirmUpop');\n return upopResult.promise;\n }\n }\n });\n };\n\n // For the multiple FI variant of the choice experiment:\n // Update the funding option in the plan based on the user's stored selection\n var updateFS = function updateFS() {\n // Decide plan to select based on priority and bussness logic\n var selectedMethodPlanId = decidePlanSelection();\n\n // Perform a selection only if required\n return selectedMethodPlanId ? doPlanSelection(selectedMethodPlanId) : _angular.$q.when();\n };\n\n // The following functions are all used in the `$q.all` promise chain below\n var populateScope = function populateScope() {\n return (0, _squid.$populate)($scope, {\n auth: _auth.$AuthModel.instance(),\n checkoutAppData: _checkout.$CheckoutAppDataModel.instance(_angular.$rootScope.token),\n checkoutCart: _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token),\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token),\n payee: _checkout.$CheckoutPayeeModel.instance(_angular.$rootScope.token),\n tokenizedWalletInfoModel: _app.$TokenizedWalletInfoModel.instance(_angular.$rootScope.token).retrieve(),\n fiMeta: _index4['default'].instance(_angular.$rootScope.token).fetch()['catch'](_angular.noop)\n });\n };\n\n var initializePadToggleSupport = function initializePadToggleSupport() {\n if ($scope.checkoutSession.fundingOptions.isPadToggleApplicable()) {\n return Experiments.padToggleFeatureSupported().then(function (result) {\n $scope.isPadToggleEnabled = result;\n });\n } else {\n return _angular.$q.when($scope.isPadToggleEnabled = false);\n }\n };\n\n var applyChoiceExperimentVariant = function applyChoiceExperimentVariant() {\n $scope.tagFamilyComputer();\n // Get the choice experiment variant to determine what needs to be shown in the UI\n return _choice.$ChoiceEligibility.instance().getVariant($scope.token).then(function (variant) {\n $scope.choiceVariant = variant;\n var checkboxVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.preferredCheckbox || [];\n var multipleFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.multipleFi || [];\n var selectFiVariants = _squid.$config.choiceExperiment && _squid.$config.choiceExperiment.selectFi || [];\n\n if (checkboxVariants.indexOf(variant) !== -1 && !$scope.checkoutCart.isBilling()) {\n // Do setup for preferred checkbox\n $scope.makeFiPreferred = {\n selected: false\n };\n }\n\n $scope.showMultipleFiVariants = multipleFiVariants.indexOf(variant) !== -1;\n\n if ($scope.showMultipleFiVariants) {\n var planList = $scope.checkoutSession.get('plan.sources');\n var defaultPlanId = planList && planList[0] && planList[0].id;\n\n // Do the setup for the multipleFiVariant\n $scope.setupMultipleFi = function () {\n $scope.selectedmethod = {\n index: 0,\n planId: defaultPlanId\n };\n\n if ($scope.cancelUpdateListener) {\n $scope.cancelUpdateListener();\n }\n\n // Before changing state, persist the change that the user selected\n var stateChangeListener = _angular.$rootScope.$on('$stateChangeStart', function (event, toState, toParams) {\n $scope.cancelUpdateListener();\n\n // ensure we only listen to state changes initiated from the review page\n if (_uiRouter.$state.fromState.name !== 'checkout.review') {\n return;\n }\n\n // ignore if the FI selection hasn't been updated\n if (defaultPlanId === $scope.selectedmethod && $scope.selectedmethod.planId) {\n return;\n }\n\n event.preventDefault();\n updateFS().then(function () {\n return _uiRouter.$state.go(toState, toParams);\n });\n });\n\n // If the checkout session changes, also change the planId according to the selected index in case plan ids were changed. Save the listener to destroy the handler when changing routes or re-calling setupMultipleFi\n var fundingOptionsListener = $scope.$watch('checkoutSession.fundingOptions', function (newVal, oldVal) {\n if (!newVal) {\n return;\n }\n\n $scope.selectedmethod.planId = newVal.get('plans.' + $scope.selectedmethod.index + '.planId');\n });\n\n $scope.cancelUpdateListener = function () {\n stateChangeListener();\n fundingOptionsListener();\n };\n\n $scope.$on('$destroy', $scope.cancelUpdateListener);\n };\n\n $scope.setupMultipleFi();\n }\n\n if (selectFiVariants.indexOf(variant) !== -1) {\n $scope.selectFiVariant = true;\n }\n })['catch'](function (err) {\n // TODO: Check what happens to PXP errors\n _logger.$logger.error('choice_eligibility_error', err);\n });\n };\n\n var applyMerchantName = function applyMerchantName() {\n // resolve merchant name now, just in case we're in a matching treatment\n pxpMerchName = $scope.checkoutAppData.merchant.brand_name || $scope.checkoutAppData.merchant.merchant_name;\n };\n\n // if IXO is providing shipping methods, we'll send them to xo-review-shipping-options component\n $scope.checkForIxoShippingMethods = function () {\n if (window.xprops && window.xprops.supplement && window.xprops.supplement.getPaymentOptions) {\n return window.xprops.supplement.getPaymentOptions($scope.checkoutAppData.get('payment_id')).then(function (payment) {\n var paymentTransaction = payment && payment.transactions && payment.transactions[0];\n\n $scope.ixoShippingMethods = paymentTransaction && paymentTransaction.item_list && paymentTransaction.item_list.shipping_options;\n if ($scope.ixoShippingMethods) {\n _logger.$logger.info('incontext_shipping_options_exist');\n }\n });\n }\n };\n\n /**\n * Set up $watch for if `showMore` button has been clicked.\n * When `showMore` button has been clicked, we also need to\n * log all FIs that has a cardart FI\n */\n $scope.$watch(function () {\n return _factory4.$ShowMoreFiFactory.get().isShowMoreBtnClicked;\n }, function (clickedMore) {\n // ensure `showMore` button has been clicked for 3FIs pxp\n if (clickedMore) {\n logSessionDetails();\n }\n });\n\n var showGAC = function showGAC() {\n _factory.$GiveAtCheckoutFactory.decideEligibility().then(function (result) {\n $scope.isDonation = _factory.$GiveAtCheckoutFactory.get().eligible;\n var charity = _factory.$GiveAtCheckoutFactory.get().charity;\n\n if (_factory.$GiveAtCheckoutFactory.get().eligible) {\n _logger.$logger.info('checkout_fpti', {\n from: 'GIVE_AT_CHECKOUT',\n to: 'prepare_give_at_checkout',\n gac_model: charity.model_id,\n gac_npid: charity.nonprofit_id\n });\n }\n });\n };\n\n /**\n * Cardart instrumentation for review page comes in a few variations, and\n * it all depends on the pxp result. Following logSessionDetails()\n * logs cardart instrumentation based on:\n *\n * - showMultipleFiVariants pxp\n * - showMultipleFiVariants + 3FI pxp\n * - singleFI pxp\n *\n * See $CardArtInstrument.createPayload() for detailed implementation & explanation\n */\n var logSessionDetails = function logSessionDetails() {\n var isCardArtExp = _cardartInstrument.$CardArtInstrument.isCardArtEnable($scope.fiMeta) && !$scope.isThirdPartyWalletExperience();\n var renderMultipleFi = $scope.showMultipleFiVariants;\n var isBillingNoPurchase = $scope.checkoutCart.isBillingNoPurchase();\n var isBilling = $scope.checkoutCart.isBilling();\n var disableStickyForMerchant = _squid.$config.disableMerchantForStickyBA.indexOf($scope.payee.get('merchant.id')) > -1;\n var stickyEligible = isBilling && !disableStickyForMerchant;\n\n _logger.$logger.info('checkout_fpti', _extends({\n from: 'REVIEW',\n to: 'prepare_review'\n }, createReviewFptiPayload({ checkoutSession: $scope.checkoutSession }), isCardArtExp ? _cardartInstrument.$CardArtInstrument.createPayload({\n stickyEligible: stickyEligible,\n isBillingNoPurchase: isBillingNoPurchase,\n renderMultipleFi: renderMultipleFi,\n checkoutSession: $scope.checkoutSession,\n renderSingleFi: !$scope.showMultipleFiVariants,\n showMoreFiState: _factory4.$ShowMoreFiFactory.get()\n }) : null));\n // Log details about checkout session\n };\n\n // Reg E - Regulation E compliance guide mandates invoicing payers see a disclaimer message during payment review when RTR is present.\n // The Remittance Transfer Rule (RTR) is a rule published by the Consumer Financial Protection Bureau.\n // It applies to companies processing remittance transfers of more than $15 USD from a US-based consumer (Sender) to a foreign-based receiver (Recipient).\n var applyInvoicingRegEDetails = function applyInvoicingRegEDetails() {\n // Show invoicing RegE compliance message if its invoicing flow only and if RTR is present\n $scope.showInvoicingRegEMsg = $scope.checkoutAppData.flags.is_invoice_flow && $scope.checkoutSession.showRemittanceDisclosure ? true : false;\n _logger.$logger.info('show_invoicing_regE_msg', $scope.showInvoicingRegEMsg);\n\n if ($scope.showInvoicingRegEMsg) {\n var totalAmount = $scope.checkoutCart.purchase.amounts.total.amount_formatted_currency;\n var merchantName = $scope.checkoutAppData.merchant.brand_name;\n\n // The RegE message differs for cases with and without currency conversion\n if ($scope.checkoutSession.plan.hasConversion()) {\n var total = 0;\n var planSources = $scope.checkoutSession.get('plan.sources');\n var currencyCode = planSources[0].amount.currency_code;\n\n planSources.forEach(function (source) {\n if (currencyCode !== source.amount.currency_code) {\n $scope.showInvoicingRegEMsg = false;\n return;\n }\n\n total = total + Number(source.amount.amount);\n });\n\n var totalInvoicePaymentAmount = (0, _squid.formatCurrency)(total, currencyCode);\n\n $scope.invoicingRegEMsg = (0, _squid.$renderContent)('memberReview.invRegEMsgWithCurrConv', {\n merchantName: merchantName,\n amountInPayerCurrency: totalInvoicePaymentAmount,\n amountInInvCurrency: totalAmount\n });\n } else {\n $scope.invoicingRegEMsg = (0, _squid.$renderContent)('memberReview.invRegEMsg', {\n merchantName: merchantName,\n amount: totalAmount\n });\n }\n }\n };\n\n var applyKmliUpsellEligibility = function applyKmliUpsellEligibility() {\n if (_squid.$util.param('redirectToHermesOnUpopCancel') === 'xoon') {\n var fiModel = $scope.checkoutSession.get('plan.sources');\n\n if (fiModel && fiModel.length && fiModel[0].card_type === 'CHINA_UNION_PAY') {\n $scope.checkoutSession.message = {\n msgKeys: ['confirmUpop.confirmUpopToPay'],\n type: 'warning'\n };\n }\n }\n\n _kmliUpsell.$KmliUpsell.eligible().then(function (eligibility) {\n eligibility.interstitial = eligibility.interstitial ? eligibility.interstitial : {};\n $scope.optin_toggle.isEnabled = eligibility.banner;\n $scope.optin_toggle.value = $scope.auth.rememberedOT() // came in as OneTouch user\n || $scope.auth.isKmliSet // used to set toggle value via interstial\n || $scope.auth.loggedIn() && $scope.auth.refreshToken(); // FirstTime OT (check this for webview case)\n delete $scope.auth.isKmliSet;\n\n $scope.optin_toggle.showExpandedTerms = false; // collapse by default;\n var cookiePayload = {};\n\n if (eligibility.interstitial.eligible) {\n // show optin interstitial only once per user per version\n cookiePayload.ot_inter_shown = eligibility.interstitial.pxpVersion; // cookieList.push({ name: 'ot_inter_shown', value: eligibility.interstitial.pxpVersion });\n }\n if (Object.keys(cookiePayload).length > 0) {\n $scope.auth.action('updateAuthExperience', {\n silent: true,\n data: cookiePayload\n }).then(function (res) {\n _logger.$logger.debug('optin_toggle_cookie_drop_success', res);\n })['catch'](function (err) {\n _logger.$logger.debug('optin_toggle_cookie_drop_err', err);\n });\n }\n _logger.$logger.info('optin_toggle_init', $scope.optin_toggle);\n });\n\n $scope.personalizedBanner.trigger();\n $scope.showRemittanceDisclosure = _index2.$DeviceInfo.isMobile() && $scope.checkoutSession.showRemittanceDisclosure ? true : false;\n };\n\n // applyCreditOptions could potentially redirect out of the RYI.\n var applyCreditOptions = function applyCreditOptions() {\n $scope.creditDataModel = _credit.$CreditDataModel.instance($scope.token);\n var isChangeInstallments = $scope.creditDataModel.isChangeStatus();\n var isCapeReturnKey = $scope.creditDataModel.getCapeKey();\n var isCapeReturn = isCapeReturnKey && _squid.$util.param('success');\n\n if (isChangeInstallments && $scope.creditDataModel && !$scope.creditDataModel.payInFull) {\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n }\n if (isCapeReturn) {\n $scope.returnFromCape(isCapeReturnKey);\n }\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && ($scope.checkoutSession.get('plan.paypal_credit') || isCapeReturnKey)) {\n $scope.creditOptions = _credit.$CreditInstallmentModel.instance($scope.token);\n $scope.creditOptions.retrieve().then(function () {\n $scope.creditOptions.apr = String($scope.creditOptions.apr);\n });\n }\n\n $scope.cartCurrency = $scope.checkoutCart.get('purchase.amounts.total.currency_code');\n\n // this function returns true if plan sources contains exactly PPCredit & Incentive\n $scope.isCreditIncentiveOption = function () {\n var plans = $scope.checkoutSession.get('plan.sources', null);\n\n if (plans && plans.length === 2 && plans.filter(function (fi) {\n return fi.type === 'BILL_ME_LATER';\n }).length === 1 && plans.filter(function (fi) {\n return fi.type === 'INCENTIVE';\n }).length === 1) {\n return true;\n } else {\n return false;\n }\n };\n\n $scope.isPPCReuseAndNotSelected = function () {\n var plans = $scope.checkoutSession.get('fundingOptions.instruments', null);\n if (plans && plans.filter(function (fi) {\n return fi.name === 'BILL_ME_LATER' && !fi.selected;\n }).length === 1) {\n return true;\n } else {\n return false;\n }\n };\n\n // if PPCredit & Incentive are showing in the page together with installments we will hide installment details\n $scope.showInstallmentOptionWithoutIncentives = function () {\n if ($scope.creditOptions.creditType === 'INST') {\n if (!$scope.isCreditIncentiveOption()) {\n return true;\n }\n }\n return false;\n };\n\n $scope.showInstallmentOption = function () {\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutSession.get('plan.paypal_credit') && $scope.creditOptions && $scope.creditOptions.creditType) {\n if ($scope.creditOptions.creditType === 'INST') {\n $scope.installmentInfo = {\n monthlyPaymentAmt: (0, _squid.formatCurrency)($scope.creditOptions.monthlyPayment, $scope.cartCurrency),\n totalInterestAmt: (0, _squid.formatCurrency)($scope.creditOptions.totalInterest, $scope.cartCurrency),\n totalPaymentAmt: (0, _squid.formatCurrency)($scope.creditOptions.totalPayment, $scope.cartCurrency)\n };\n }\n return true;\n } else {\n return false;\n }\n };\n\n // if PPCredit & Incentive are showing in the page together with installments, we will:\n // 1. add a warning message in the top of the page as the installment option selected in cyco page\n // is not available with PayPal incentives balance.\n // 2. hide installment options (see above method showInstallmentOptionWithoutIncentives())\n if ($scope.showInstallmentOption() && $scope.creditOptions.creditType === 'INST' && $scope.isCreditIncentiveOption()) {\n $scope.checkoutSession.message = {\n type: 'warning',\n msgKeys: ['offers.bmlInWalletInvalidInstallmentsMsg']\n };\n } else if ($scope.checkoutSession.message && $scope.checkoutSession.message.msgKeys && $scope.checkoutSession.message.msgKeys[0] === 'offers.bmlInWalletInvalidInstallmentsMsg') {\n // Remove error message in review page if was showing before changing payment method\n $scope.checkoutSession.message = null;\n }\n\n $scope.showCYCO = function () {\n $scope.checkoutSession.message = null;\n _uiRouter.$state.go('checkout.chooseCreditOffer');\n };\n\n if (_angular.$window.location.search.search('atoSuccess') !== -1) {\n _logger.$logger.debug('PLANNING_ATO_SUCCESS');\n var atoMsg = _squid.$locale.content.get('memberReview.stepupAuthSuccess');\n\n if (atoMsg) {\n $scope.checkoutSession.message = {\n msgs: [atoMsg],\n type: 'success'\n };\n }\n }\n\n $scope.$on('localeChange', setInformalName);\n setInformalName();\n\n $scope.showNotYou = $scope.auth && $scope.auth.showNotYou();\n\n if (_squid.$util.param('redirectToHermesOn3DSDecline')) {\n // check and show the 3DS decline message when the app is redirected from Xoon app\n show3DSDeclineMsg();\n }\n\n $scope.showAuthMsg = ['authorize', 'order'].indexOf($scope.checkoutCart.get('payment_action')) > -1 && !$scope.checkoutSession.get('plan.paypal_credit');\n\n if ($scope.showAuthMsg) {\n /*\n new compliance message for AS1 / AS2 is not for US which displays LearnMore Link\n have this scope variable set based on country\n */\n $scope.showAuthMsgLearnMore = _squid.$locale.country !== 'US' ? true : false;\n }\n\n $scope.showUnconfirmedUpopMsg = !!$scope.checkoutSession.unconfirmed_upop;\n\n $scope.useraction = $scope.checkoutAppData.useraction() && $scope.checkoutAppData.useraction().toLowerCase();\n\n // Non-AU merchants are subjected to PXP test when user action is not commit and line item details\n // are not available and purchase amount is not zero.\n var noLineItemDetails = $scope.useraction !== 'commit' && $scope.checkoutCart.get('purchase.items.length', 0) === 0;\n\n var fundingInstruments = $scope.checkoutSession.get('fundingOptions.instruments', []);\n var isCreditInWallet = false;\n\n if ($scope.checkoutCart.isBillingNoPurchase()) {\n isCreditInWallet = $scope.checkoutSession.get('futurePayment.isCreditInWallet');\n } else {\n isCreditInWallet = fundingInstruments.find(function (fi) {\n return fi.name === 'BILL_ME_LATER';\n });\n }\n\n var isPPCEligible = $scope.checkoutSession && $scope.checkoutSession.creditOffer;\n var isPayPalCredit = $scope.checkoutAppData.is_second_button_txn || _squid.$Class.get(window, 'xprops.fundingSource') === 'credit';\n\n _logger.$logger.debug('creditInstallmentOffer ' + $scope.checkoutSession.creditInstallmentOffer + ', ' + 'creditOffer ' + $scope.checkoutSession.creditOffer + ', ' + isCreditInWallet + ', ' + isPayPalCredit);\n\n if ($scope.checkoutSession.creditOffer) {\n if (!_angular.$rootScope.bml) {\n _angular.$rootScope.bml = new _bml.$BMLModel();\n }\n _angular.$rootScope.bmlApply = new _bml.$ApplyForBMLModel();\n }\n // the second button user is ineligible for PPC and has not selected to \"pay with paypal\"\n else if (isPayPalCredit && !isPPCEligible && !$scope.creditDataModel.payInFull && !isCapeReturn) {\n\n // no credit in wallet\n if (!isCreditInWallet) {\n $scope.checkoutSession.message = {\n type: 'info',\n msgKeys: ['offers.bmlIneligibleHeader', 'offers.bmlIneligibleContent']\n };\n\n _logger.$logger.info('checkout_fpti', {\n from: 'Login',\n to: 'Review',\n error_type: 'second_btn_ineligible'\n });\n }\n // 2nd button, cross border, user saw CYCO page -- we cannot honor any offer the user chose\n else if ($scope.creditDataModel.isCrossBorder() && $scope.creditDataModel.hasSelectedCYCOOffer()) {\n var msg = (0, _squid.$renderContent)('offers.bmlCrossBorderIneligibleContent', {\n merchantCountry: $scope.checkoutAppData.get('merchant.merchant_country')\n });\n $scope.checkoutSession.message = {\n msgs: [msg],\n type: 'warning'\n };\n }\n }\n\n $scope.showSoftDescriptor = !$scope.checkoutAppData.flags.hide_soft_descriptor && $scope.checkoutCart.get('purchaseUnits.length', 0) <= 1;\n\n return (0, _pxp.$pxpCartAmt)($scope.checkoutAppData.get('merchant.merchant_country'), $scope.payee.get('merchant.id', ''), noLineItemDetails, $scope.checkoutCart.isPurchase()).then(function (showAmount) {\n $scope.showAmt = showAmount;\n });\n };\n\n var applyNegativeBalanceStatus = function applyNegativeBalanceStatus() {\n var checkoutSession = $scope.checkoutSession;\n var negBals = checkoutSession.negBals;\n var nbrMsgContentKey = void 0;\n var tokenHash = void 0;\n\n if (negBals) {\n nbrMsgContentKey = 'memberReview.nbrMsg';\n tokenHash = {\n neg_bal: (0, _squid.formatCurrency)(negBals[0].amount, negBals[0].currency_code, false),\n merchantName: $scope.checkoutAppData.get('merchant.brand_name')\n };\n\n if (negBals.length > 1) {\n nbrMsgContentKey += 'Plural';\n tokenHash.neg_bal2 = (0, _squid.formatCurrency)(negBals[1].amount, negBals[1].currency_code, false);\n }\n\n checkoutSession.message = {\n type: 'warning',\n msgs: [(0, _squid.$renderContent)(nbrMsgContentKey, tokenHash)]\n };\n }\n };\n\n var applyBrPxp = function applyBrPxp() {\n if (!_index.$miniBrowser.isMiniBrowser() && _squid.$locale.country === 'BR') {\n var brPxp = _squid.$config.pxpExperiments.BR.xo_br_hermesnode_ryi_design;\n\n return (0, _squid.$pxpFactors)(brPxp.pgName, brPxp.params, brPxp.pattern, false, true).then(function (result) {\n $scope.ryiDesignExp = result;\n });\n }\n };\n\n var applyShowShippingMethod = function applyShowShippingMethod() {\n $scope.isInstantUpdateAPIFlow = $scope.checkoutCart && $scope.checkoutCart.get('instantUpdateIntegration');\n $scope.showShippingMethod = $scope.isInstantUpdateAPIFlow ? true : false;\n if (_integration.$integration.getConfig('SHOW_SHIPPING_METHOD')) {\n return setShowShippingMethodProperty();\n }\n };\n\n var applyPayButtonOption = function applyPayButtonOption() {\n $scope.cancel = $scope.checkoutAppData.urls.cancel_url;\n $scope.merchantMsg = $scope.checkoutCart.getBillingDescription();\n\n var isBilling = $scope.checkoutCart.isBilling();\n var merchant = $scope.checkoutAppData.merchant;\n var isWPSSubscriptionFlow = $scope.checkoutAppData.is_wps_subscription_flow();\n var isSubscriptionsV1 = $scope.checkoutCart.isSubscriptionsV1();\n\n $scope.merchantName = merchant.brand_name || merchant.merchant_name;\n\n // Determine whether the button type is a Pay button or Continue button\n $scope.buttonLabelIsPay = $scope.useraction === 'commit' || _integration.$integration.getConfig('SHOW_PAY_NOW_LABEL_ON_REVIEW');\n\n // log paybuttonText as paynow or continue\n // irrespective of PAD, credit, etc\n _logger.$logger.info('checkout_fpti', {\n 'ryp_button_text': $scope.buttonLabelIsPay ? 'paynnow_y' : 'paynnow_n'\n });\n\n // show shipping address based on merchant passed in parameter\n $scope.showShippingAddress = Boolean(!$scope.checkoutAppData.flags.hide_shipping_address && $scope.checkoutAppData.flags.shipping_address_required && $scope.checkoutSession.shipping);\n\n // review page 'continue' or 'pay now' button logic to return the button text\n $scope.payButtonText = function () {\n if ($scope.selectedmethod && $scope.selectedmethod.planId === 'applyForPPCRadio') {\n return _squid.$locale.content.get('applyForBml.bmlApplyHeadline');\n }\n\n if (isWPSSubscriptionFlow || isSubscriptionsV1) {\n return _squid.$locale.content.get('memberReview.agreeAndSubscribeLabel');\n }\n\n if (isBilling) {\n if ($scope.buttonLabelIsPay) {\n return _squid.$locale.content.get('memberReview.agreeAndPayLabel');\n } else {\n return _squid.$locale.content.get('memberReview.agreeAndContinueLabel');\n }\n } else if (getPadToggleStatus() === 'ON') {\n return _squid.$locale.content.get('memberReview.padLabel');\n } else if ($scope.buttonLabelIsPay) {\n if ($scope.checkoutSession.unconfirmed_upop) {\n return _squid.$locale.content.get('memberReview.pay');\n } else {\n $scope.payButton = 'paynnow_y';\n return _squid.$locale.content.get('memberReview.payLabel');\n }\n } else {\n $scope.payButton = 'paynnow_n';\n return _squid.$locale.content.get('memberReview.continueLabel');\n }\n };\n\n $scope.onRedeemGC = function () {\n throw new _squid.$FallbackError({\n reason: 'redeem_coupon_feature_not_supported',\n product: 'ux'\n });\n };\n\n // Check if processor decline message needs to be set\n setProcessorDeclineMessage($scope.checkoutSession);\n\n $scope.promotion = {\n type: null,\n name: ''\n };\n\n var plccOffer = $scope.checkoutSession && $scope.checkoutSession.plccOffer;\n\n if (plccOffer) {\n $scope.promotion.logoUrl = plccOffer.product_logo;\n $scope.promotion.name = plccOffer.product_name;\n }\n\n $scope.onFBBANotNow = function () {\n var _$scope$checkoutSessi = $scope.checkoutSession.payer;\n _$scope$checkoutSessi = _$scope$checkoutSessi === undefined ? {} : _$scope$checkoutSessi;\n var payerId = _$scope$checkoutSessi.id;\n\n var isUnchecked = _squid.$util.sessionStorageEnabled() && window.sessionStorage.getItem('checkboxPluginState') === 'unchecked';\n\n _logger.$logger.info('checkout_fpti', {\n buyer_country: _squid.$locale.country,\n buyer_id: payerId,\n context_id: $scope.token,\n design: 'fbmessenger',\n from: 'BILLING_AGREEMENT',\n to: 'process_billing_agreement',\n eligibility_reason: isUnchecked ? 'checkbox_plugin_unchecked' : 'checkbox_plugin_checked',\n click_source: 'not_now'\n });\n\n window.xchild.close();\n\n if (experience.autoBA) {\n window.top.location.replace('fbiab://paypal/abort');\n }\n };\n\n $scope.onPay = function (result) {\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T4' });\n // Track NMJ variations.\n var payEventName = void 0;\n\n if ($scope.isNmjDesign1) {\n payEventName = 'member_ryi_onPayVariant_nmj_design1_page';\n } else if ($scope.isNmjDesign2) {\n payEventName = 'member_ryi_onPayVariant_nmj_design2_page';\n } else if ($scope.isNmjDesign3) {\n payEventName = 'member_ryi_onPayVariant_nmj_design3_page';\n } else {\n payEventName = 'member_ryi_onPayVariant_control';\n }\n\n _logger.$logger.info(payEventName);\n\n if (!isValidPinSetup()) {\n $scope.topupError = true;\n _logger.$logger.debug('pin_missing');\n _uiRouter.$state.go('checkout.pinSetup');\n return;\n }\n\n if ($scope.checkoutSession.installments && $scope.checkoutSession.installments.length > 1 && !$scope.checkoutSession.selectedInstallmentData) {\n $scope.installmentNotSelected = true;\n return;\n }\n\n if ($scope.isInstantUpdateAPIFlow && !$scope.instantUpdateFeature.shippingRegionSupported) {\n return;\n }\n\n // Determine whether or not to prevent going forward based on the status of the onShippingChange callback\n if ($scope.shippingChangeFeature && $scope.shippingChangeFeature.status) {\n switch ($scope.shippingChangeFeature.status) {\n case $scope.shippingChangeFeature.enums.LOADING:\n case $scope.shippingChangeFeature.enums.REJECTED:\n case $scope.shippingChangeFeature.enums.FAILED:\n return;\n default:\n }\n }\n\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.checkoutSession.get('plan.paypal_credit') && $scope.installment.showCYCO && $scope.creditOptions && !$scope.creditOptions.creditType) {\n return _uiRouter.$state.go('checkout.chooseCreditOffer');\n }\n // \"Paying\" by applying for PPC\n if ($scope.selectedmethod && $scope.selectedmethod.planId === 'applyForPPCRadio') {\n if ((0, _squid.$feature)('creditInstallmentOffers') && $scope.installment && $scope.installment.installmentOptionsPresent) {\n return _uiRouter.$state.go('checkout.chooseCreditOffer');\n } else {\n return _uiRouter.$state.go('checkout.redirectToCape');\n }\n }\n // Address Normalization Checks\n if ($scope.checkoutAppData.get('flags.allow_change_shipping', false) && (0, _squid.$feature)('shippingAddressNormalization') && $scope.checkoutSession.get('shipping.normalization_status') === 'UNKNOWN') {\n\n return _uiRouter.$state.go('checkout.review.sidebar.updateShipping');\n }\n\n var padToggleStatus = getPadToggleStatus();\n\n if (padToggleStatus === 'ON') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOnSubmit'\n });\n } else if (padToggleStatus === 'OFF') {\n _logger.$logger.info('checkout_fpti', {\n 'pad_toggle_status': 'padToggleOffSubmit'\n });\n }\n\n /**\n * Call updateFS so that if user has made a change in the multiple FI on RYI variant, we select their instrument before doing other logic\n * Call patchCvv first, if error, need buyers to input again\n * Call to set Sticky Funding Instrument for Billing Agreement.\n * We have to ensure the sticky call happens before authorize due to symphony spec.\n * We need to wait for the response from updateAddressAsPreferred before calling authorize */\n\n var preAuthorizeError = void 0;\n\n return updateFS()\n // Make PAPS patch calls sequentially. Concurrent patch calls are currently not supported\n .then(function () {\n return checkJSV4PaymentDetails();\n }).then(function () {\n return _tokenizedFactory.$TokenizedFactory.tokenizedOnPayCalls($scope.checkoutCart, $scope.checkoutSession, $scope.tokenizedWalletInfoModel, $scope.walletPinModel);\n }).then(function () {\n return _fiApis.$fiApis.patchCvv($scope.checkoutSession);\n }).then(function () {\n return setStickyInstrument();\n })\n // Other calls that won't affect the checkout session. Multiple patch calls to PAPS should not be made here\n .then(function () {\n return _angular.$q.all([updateAddressAsPreferred(), // This is a patch call to PAPS\n setWalletTopupPreferences(), linkAuthConsent(), $scope.actions.updatePreferredFi(_logger.$logger), donationAuthorize()])['catch'](function (err) {\n // should we have more elaborate error handling here?\n if ($scope.checkoutCart.isWalletTokenization()) {\n if (err && err.message === 'WALLET_PREFERENCE_SET_ERROR') {\n preAuthorizeError = err;\n }\n }\n _logger.$logger.error('onPay() error', err);\n })['finally'](function () {\n if (preAuthorizeError) {\n var code = 'ANDROID_PAY_SET_WALLET_PREFERENCE_ERROR';\n code = window.btoa(code);\n _uiRouter.$state.go('checkout.genericError', { code: code });\n } else {\n return authorize();\n }\n });\n }, function (err) {\n if ($scope.ixoShippingMethods && err.message === 'IXO_CANNOT_CHECKOUT_WITHOUT_SHIPPING_SELECTION') {\n return;\n }\n\n if ($scope.checkoutCart.isWalletTokenization()) {\n if (err && err.message === 'ISSUANCE_PIN_SERVICE_ERROR') {\n var code = 'ANDROID_PAY_SET_PIN_ERROR';\n code = window.btoa(code);\n _uiRouter.$state.go('checkout.genericError', { code: code });\n return;\n }\n }\n _logger.$logger.error('onPay() patchCvv error', err);\n });\n };\n\n /* This is used for a BML 'popup' that opens covering the whole review page,\n hiding the rest of the review page when its open. */\n $scope.bmlPopupOpen = false;\n $scope.showBmlPopup = function () {\n $scope.bmlPopupOpen = true;\n };\n $scope.hideBmlPopup = function () {\n $scope.bmlPopupOpen = false;\n };\n };\n\n var checkForReviewLaterTextTreatment = function checkForReviewLaterTextTreatment() {\n $scope.showReviewLaterText = true;\n // only get pxp if buttonlabel is not pay and for billingWithOutPurchase\n if ($scope.useraction !== 'commit' && !_integration.$integration.getConfig('SHOW_PAY_NOW_LABEL_ON_REVIEW') && $scope.checkoutCart.isBillingNoPurchase()) {\n _logger.$logger.info('billing_no_purchase_review_later_text_removal_ramp');\n return (0, _squid.$pxp)('review_later_text', 'showreviewlater_treatment', undefined, false, true).then(function (result) {\n if (result && result.treatment_name) {\n _logger.$logger.info('billing_no_purchase_review_later_text_removal_treatment');\n $scope.showReviewLaterText = false;\n }\n });\n }\n };\n\n var initBillingNoPurchasePlans = function initBillingNoPurchasePlans() {\n var isBillingNoPurchase = $scope.checkoutCart && $scope.checkoutCart.isBillingNoPurchase();\n\n $scope.plans = isBillingNoPurchase ? $scope.checkoutSession.get('futurePaymentInstruments') : $scope.checkoutSession.getPlanList();\n };\n\n var showBillingMessage = function showBillingMessage() {\n var isIndiaDomesticBilling = $scope.checkoutCart.isBilling() && _squid.$locale.country === 'IN' && $scope.checkoutAppData.get('merchant.merchant_country', 'US') === 'IN';\n var merchant = $scope.checkoutAppData.get('merchant');\n var merchantName = merchant.brand_name || merchant.merchant_name || 'Merchant';\n\n if (isIndiaDomesticBilling) {\n $scope.checkoutSession.message = {\n type: 'info',\n msgs: [(0, _squid.$renderContent)('memberReview.billingMerchant', { merchantName: merchantName })]\n };\n }\n };\n\n var showMoreFiInit = function showMoreFiInit() {\n var showMoreFiEligibility = _factory4.$ShowMoreFiFactory.decideEligibility({ plans: $scope.plans });\n\n if (showMoreFiEligibility) {\n showMoreFiEligibility.then(function () {\n _factory4.$ShowMoreFiFactory.init($scope.plans);\n });\n }\n };\n\n // TODO: please talk with AuthRate team on `xo_hermes_preferred_expired_msg_review_page` pxp when\n // they decide to turn the experiement on next year!\n // https://engineering.paypalcorp.com/pxptool/history?exptId=3935\n // const showExpiredMsgInit = () => {\n // $scope.showExpiredMsg = $ExpiredMsgFactory.showExpiredMsg($scope.isNmj, $scope.checkoutSession);\n // if ($scope.showExpiredMsg) {\n // $ExpiredMsgFactory.getPreferredExpiredPxpResult().then(result => {\n // $scope.isNmjexpired = result === 'xo_hermes_preferred_expired_msg_review_page_nmj_treatment' ? true : false;\n // $scope.preferredExpired = $scope.checkoutSession.getDisallowedPreferred();\n // });\n // }\n // };\n\n // lazy load some of the most popular routes to increase loading time\n var preloadCodeSplitRoutes = function preloadCodeSplitRoutes() {\n if (_squid.$meta.codeSplitting) {\n var routes = [];\n\n if (_integration.$integration.isFlow('WPS')) {\n routes.push.apply(routes, [import('pages/xo-pay/route'), // eslint-disable-line\n import('xo-page-components/src/done/route') // eslint-disable-line\n ]);\n }\n\n routes.push.apply(routes, [import('pages/xo-sidebar/route')]);\n\n // preload checkout.genericMessage route which is shown when transaction is completed\n // on devices. So basically user will see `Thanks for using PayPal!` and `You can close this tab at any time.`\n // and at the same time there will be client side redirect\n // https://github.paypal.com/Checkout/xo-return-to-merchant/blob/master/dist/util.js#L44\n // May help reduce noise in case of code split when it's trying to first download the js chunk and then make redirect\n // which may take longer than usual\n if (_index2.$DeviceInfo.isDevice()) {\n routes.push(import('pages/xo-generic-message/route'));\n }\n\n Promise.all(routes)['catch'](function (err) {\n _logger.$logger.info('code_split_review_routes_preload_failed', {\n error: err && err.message\n });\n });\n }\n };\n\n var applyCreditBannerPlaceholder = function applyCreditBannerPlaceholder() {\n var placeholderExperimentName = 'xo_hermes_ppc_banner_placeholder';\n var placeholderTreatmentName = 'xo_hermes_ppc_banner_placeholder_treatment';\n\n $scope.isPlaceholderTreatment = false;\n (0, _squid.$pxp)(placeholderExperimentName, {}, placeholderTreatmentName, false, true).then(function (result) {\n var _$logger$info;\n\n $scope.isPlaceholderTreatment = result && result.treatment_name === placeholderTreatmentName || false;\n _logger.$logger.info('checkout_fpti', (_$logger$info = {}, _$logger$info[placeholderExperimentName] = result && result.treatment_name, _$logger$info));\n });\n };\n\n _logger.$logger.debug('xo_credit_banner_monitoring', { tag: 'T0' });\n\n /**\n * This promise chain renders critical content in the page. Avoid\n * the temptation to tack on another `.then` to this promise chain.\n *\n * If you are making a critical network request, consider putting\n * function inside the `$q.all` array so it can be run in parallel\n * and not slow down page rendering.\n *\n * If your function requires values available on `$scope` after\n * the critical functions in `$q.all` are complete, put your\n * function in the following `.then` block.\n *\n * Otherwise, your function can likely go somewhere else.\n */\n populateScope().then(function () {\n stickyCTA();\n _factory3.$RewardsCheckboxFactory.buildCache();\n // applyCreditOptions could potentially redirect out of the RYI.\n // Seperate it out from the rest of the pack to avoid unnecessary code execution\n applyCreditOptions();\n triggerPersonalizedBanner();\n applyMerchantName();\n applyPayButtonOption();\n applyChoiceExperimentVariant();\n applyNegativeBalanceStatus();\n applyKmliUpsellEligibility();\n applyShowShippingMethod();\n applyInvoicingRegEDetails();\n $scope.checkForIxoShippingMethods();\n checkForReviewLaterTextTreatment();\n initAndCallOnShippingChange();\n initBillingNoPurchasePlans();\n showBillingMessage();\n applyBrPxp();\n initializePadToggleSupport();\n showGAC();\n _factory2.$NoBalanceFactory.decideEligibility();\n prepareTokenizedWallet();\n applyNewMemberVariant().then(function () {\n // TODO: see comment from above in regards to run this pxp again\n // showExpiredMsgInit();\n });\n showMoreFiInit();\n logSessionDetails();\n preloadCodeSplitRoutes();\n applyCreditBannerPlaceholder();\n });\n (0, _jquery2['default'])('.paypalHeaderWrapper').removeClass('paypalCredit');\n (0, _jquery2['default'])('.paypalHeaderWrapper').removeClass('paypalCreditTnc');\n\n $scope.onComplete = function (params) {\n if (params) {\n _logger.$logger.debug('ryi_optin_isKmliSet_' + params.isKmliSet);\n if (params.isKmliSet) {\n $scope.optin_toggle.setValue(true);\n }\n }\n _uiRouter.$state.go('checkout.review');\n };\n\n $scope.propValueObj = {};\n if ((0, _squid.$feature)('propValue')) {\n $scope.propValueObj.propHeader = 'memberReview.propHead';\n $scope.propValueObj.propVal = 'memberReview.propVal';\n $scope.propValueObj.propImage = 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_shield_bags.png';\n } else {\n $scope.propValueObj.propHeader = 'login.propHeadAlt';\n $scope.propValueObj.propVal = 'login.propValAlt';\n $scope.propValueObj.propImage = 'https://www.paypalobjects.com/images/checkout/hermes/scr_vp_fprd_wallet_card_v3.png';\n }\n }]\n});\n\nangular.value(\"$xoReviewPageComponent\", $xoReviewPageComponent);\n_uiRouter.$state;\n\n_index.$miniBrowser;\n\n_logger.$logger;\n\n_integration.$integration;\n\n_index2.$DeviceInfo;\n\n_ul.$ul;\n\n_pxp.$pxpCartAmt;\n\n_marketingoffer.$fireMORSBeacon;\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_angular.$timeout;\n\n_angular.$window;\n\n_angular.noop;\n\n_kmliUpsell.$KmliUpsell;\n\n_utils.getSelectedPlan;\n\n_utils.getInstrumentID;\n\n_squid.$Class;\n\n_squid.$Component;\n\n_squid.$config;\n\n_squid.$FallbackError;\n\n_squid.$feature;\n\n_squid.$featureCountries;\n\n_squid.$locale;\n\n_squid.$meta;\n\n_squid.$populate;\n\n_squid.$pxp;\n\n_squid.$pxpFactors;\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_squid.formatCurrency;\n\n_squid.formatNameInformal;\n\n_thirdPartyInfo.thirdPartyExperience;\n\n_auth.$AuthModel;\n\n_fiApis.$fiApis;\n\n_eligibility.$stickyCTA;\n\n_choice.$ChoiceEligibility;\n\n_fiMessages.$fiMessages;\n\n_donation.$GiveAtCheckoutModel;\n\n_bml.$ApplyForBMLModel;\n\n_bml.$BMLModel;\n\n_credit.$CreditDataModel;\n\n_credit.$CreditInstallmentModel;\n\n_credit.$CreditSharedInfoModel;\n\n_fi.$AddCardModel;\n\n_fi.$CardModel;\n\n_fi.$PreferredFi;\n\n_fi.$WalletPreferences;\n\n_app.$TokenizedFundingCapabilitiesModel;\n\n_app.$TokenizedWalletInfoModel;\n\n_app.$TokenizedWalletPinModel;\n\n_checkout.$CheckoutAppDataModel;\n\n_checkout.$CheckoutCartModel;\n\n_checkout.$CheckoutPayeeModel;\n\n_checkout.$CheckoutSessionModel;\n\n_marketingoffer2.$MemberSegmentModel;\n\n_newMember.$NewMemberEligibility;\n\n_shippingMethod.$ShippingRuleSummaryModel;\n\n_user.$AuthConsentModel;\n\n_factory.$GiveAtCheckoutFactory;\n\n_factory2.$NoBalanceFactory;\n\n_factory3.$RewardsCheckboxFactory;\n\n_factory4.$ShowMoreFiFactory;\n\n_factory5.$AddCardFactory;\n\n_cardartInstrument.$CardArtInstrument;\n\n_factory6.$BalanceFactory;\n\n_factory7.$PADFactory;\n\n_tokenizedFactory.$TokenizedFactory;\n\n_shippingChangeFeature.createShippingChangeFeature;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/directive.js\n// module id = ./pages/xo-review/directive.js\n// module chunks = main-code-split","\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$PADFactory', function () {\n\n /**\n *\n * get PAD or IACH plan id based on selected plan id and PAD toggle status\n * if selected plan is IACH and toggle is on -> use associated PAD plan id\n * if selected plan is IACH and toggle is off -> use it's ID\n * if selected plan is PAD and toggle is on -> use it's ID\n * if selected plan is PAD and toggle is off -> use associated IACH plan id\n */\n var getPadOrIachBankPlanId = function getPadOrIachBankPlanId(_ref) {\n var selectedMethodPlanId = _ref.selectedMethodPlanId,\n fundingOptions = _ref.fundingOptions,\n multiFiCheckboxStates = _ref.multiFiCheckboxStates;\n\n var plan = fundingOptions.getPlanByPlanId(selectedMethodPlanId);\n var padOrIachPlanId = void 0;\n\n if (fundingOptions.isPAD(plan) || fundingOptions.isIACH(plan)) {\n if (multiFiCheckboxStates[plan.primaryFs.id]) {\n padOrIachPlanId = fundingOptions.getPadOrIachPlanIdBySelectedPlan({ plan: plan, isPadToggleSelected: true });\n } else {\n padOrIachPlanId = fundingOptions.getPadOrIachPlanIdBySelectedPlan({ plan: plan, isPadToggleSelected: false });\n }\n }\n return padOrIachPlanId;\n };\n\n // check if PAD feature is applicable\n var isPadToggleFeatureApplicable = function isPadToggleFeatureApplicable(padToggleFeature, isPadToggleEnabled) {\n return padToggleFeature.applicable && isPadToggleEnabled;\n };\n\n return {\n getPadOrIachBankPlanId: getPadOrIachBankPlanId,\n isPadToggleFeatureApplicable: isPadToggleFeatureApplicable\n };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/factory.js\n// module id = ./pages/xo-review/factory.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.createShippingChangeFeature = undefined;\n\nvar _squid = require('squid');\n\nvar _factory = require('xo-shipping-change/src/factory');\n\nvar _uiRouter = require('uiRouter');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar createShippingChangeFeature = exports.createShippingChangeFeature = function createShippingChangeFeature(token, checkoutCart, checkoutSession, checkoutAppData) {\n var callbackFn = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _squid.$util.noop;\n\n var feature = {\n enums: {\n LOADING: 'loading',\n REJECTED: 'rejected',\n UPDATED: 'updated',\n FAILED: 'failed'\n },\n status: null,\n shippingChangeFactory: (0, _factory.$ShippingChangeFactory)(token, checkoutAppData, checkoutSession, checkoutCart),\n callOnShippingChange: _squid.$util.noop\n };\n\n feature.callOnShippingChange = function () {\n var doneFn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _squid.$util.noop;\n\n if (!window.xprops || !window.xprops.onShippingChange) {\n return doneFn();\n }\n\n var successFn = function successFn() {\n var updatedMsg = (0, _squid.$renderContent)('shippingCallback.updated', {\n amount: checkoutCart.get('purchase.amounts.total.amount_formatted_currency')\n });\n\n feature.status = feature.enums.UPDATED;\n checkoutSession.message = {\n msgs: [updatedMsg],\n type: 'info'\n };\n };\n\n var rejectFn = function rejectFn() {\n var rejectedMsg = (0, _squid.$renderContent)('shippingMethod.shippingRegionUnsupported', {\n merchant: checkoutAppData.getMerchantDisplayName()\n });\n\n feature.status = feature.enums.REJECTED;\n checkoutSession.message = {\n msgs: [rejectedMsg],\n type: 'warning'\n };\n };\n\n var loadingMsg = _squid.$locale.content.get('shippingCallback.loading');\n\n _squid.$event.emit('loading');\n _squid.$event.emit('loadingMessage', loadingMsg);\n\n return feature.shippingChangeFactory.getPayload().then(function (payload) {\n _logger.$logger.info('shipping_change_payload_recieved', payload);\n\n return feature.shippingChangeFactory.callOnShippingChange(payload);\n }).then(function (_ref) {\n var cartHasChanged = _ref.cartHasChanged,\n rejected = _ref.rejected;\n\n\n _logger.$logger.info('shipping_change_called', { cartHasChanged: cartHasChanged, rejected: rejected });\n\n callbackFn();\n\n if (rejected) {\n return rejectFn();\n } else if (cartHasChanged) {\n return successFn();\n } else {\n // If the callback was not rejected, and the cart\n // was not changed we can remove any statuses\n // that prevent finishing checkout.\n feature.status = null;\n }\n }).then(doneFn)['catch'](function (err) {\n _logger.$logger.error('shipping_change_error', err);\n\n feature.status = feature.enums.FAILED;\n _uiRouter.$state.go('checkout.genericError');\n })['finally'](function () {\n _squid.$event.emit('loaded');\n });\n };\n\n return feature;\n};\n\n_squid.$renderContent;\n\n_squid.$util;\n\n_squid.$locale;\n\n_squid.$event;\n\n_factory.$ShippingChangeFactory;\n\n_uiRouter.$state;\n\n_logger.$logger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/lib/shippingChangeFeature.js\n// module id = ./pages/xo-review/lib/shippingChangeFeature.js\n// module chunks = main-code-split","\n\nexports.__esModule = true;\nexports.$ReviewRoute = undefined;\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _squid = require('squid');\n\nvar _angular = require('angular');\n\nvar _uiRouter = require('uiRouter');\n\nvar _directive = require('./directive');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _choice = require('xo-models/src/choice');\n\nvar _credit = require('xo-models/src/credit');\n\nvar $ReviewRoute = exports.$ReviewRoute = _squid.$ComponentRoute.extend('$ReviewRoute', {\n\n path: 'review',\n directive: _directive.$xoReviewPageComponent,\n titleContent: 'memberReview.memberReviewTitle',\n params: { message: null },\n trackingData: {\n fptiState: 'review',\n templateName: 'memberReview.dust',\n pageGoal: 'Payment Review',\n buzname: {\n 'fullpage': {\n 'pagename': '%::fullpage-review',\n 'pagename2': '%::fullpage-review:member:hermes:',\n 'version': 'member:%:'\n // More page qualifiers come here...\n } }\n },\n\n resolve: {\n action: function action() {\n\n // Determine if we should instead route to the selectFi choice experiment page\n if (!(0, _squid.$feature)('choiceExperiment')) {\n return;\n }\n\n var _$config$choiceExperi = _squid.$config.choiceExperiment;\n _$config$choiceExperi = _$config$choiceExperi === undefined ? {} : _$config$choiceExperi;\n var _$config$choiceExperi2 = _$config$choiceExperi.selectFi,\n fiPageVariants = _$config$choiceExperi2 === undefined ? [] : _$config$choiceExperi2,\n _$config$choiceExperi3 = _$config$choiceExperi.skipSelectFi,\n skipFiPageVariants = _$config$choiceExperi3 === undefined ? [] : _$config$choiceExperi3;\n var fromState = _uiRouter.$state.fromState;\n\n var skipStates = ['checkout.review', 'checkout.selectFi', 'checkout.authorizationmessage', 'checkout.pageAddCard.addCardFlow.addCard', 'checkout.chooseCreditOffer'];\n\n // Is review route hit a result of CREDIT_CARD_AUTH_FAILED, i.e. smart $x auth check failure?\n var isFromCcAuthFailure = _uiRouter.$stateParams.message && _uiRouter.$stateParams.message === 'CREDIT_CARD_AUTH_FAILED';\n if (!isFromCcAuthFailure && (!fromState.name ||\n // Current state contains one of the skip states (can be nested)\n skipStates.some(function (state) {\n return fromState.name.indexOf(state) !== -1;\n }))) {\n return;\n }\n\n // If returning from credit application, skip the selectFi page\n var isCapeReturnKey = _credit.$CreditDataModel.instance(_angular.$rootScope.token).getCapeKey();\n\n if (isCapeReturnKey) {\n return;\n }\n\n return _choice.$ChoiceEligibility.instance().getVariant(_angular.$rootScope.token).then(function (variant) {\n // Check if variant is selectFi variant\n if (fiPageVariants.indexOf(variant) === -1) {\n return;\n }\n\n var models = {};\n\n // Check that there is more than one plan to choose from, or that plan is not preferred\n return (0, _squid.$populate)(models, {\n checkoutSession: _checkout.$CheckoutSessionModel.instance(_angular.$rootScope.token)\n }).then(function () {\n var plans = models.checkoutSession.get('fundingOptions.plans');\n var isPreferredDefault = skipFiPageVariants.indexOf(variant) > -1 && plans && plans[0].primaryFs.isPreferred;\n var stickyPlans = models.checkoutSession.futurePaymentInstruments;\n\n if (!isPreferredDefault && (plans && plans.length > 1 || stickyPlans && stickyPlans.length > 1)) {\n return {\n to: 'checkout.selectFi',\n newState: true\n };\n } else {\n _logger.$logger.info('skip_selectFi', {\n reason: isPreferredDefault ? 'default_is_preferred' : 'not_enough_plans'\n });\n return;\n }\n });\n });\n }\n },\n\n children: [{\n name: '$SidebarRoute',\n attributes: {\n 'back-uri': 'backUri',\n 'shipping-change-feature': 'shippingChangeFeature',\n 'promotion': 'promotion',\n 'update': 'update',\n 'token': 'token',\n 'installment': 'installment'\n },\n lazyRoute: function lazyRoute() {\n return import('pages/xo-sidebar/route');\n },\n slug: 'sidebar'\n }, {\n name: '$OneTouchUpsellRoute',\n attributes: {\n 'token': 'token',\n 'on-complete': 'onComplete'\n },\n lazyRoute: function lazyRoute() {\n return import('xo-login-components/src/onetouch-interstitial/route');\n },\n slug: 'oneTouchUpsell'\n }, {\n name: '$xoConfirmUpopRoute',\n props: function props() {\n var props = {\n token: this.token,\n cardmodel: this.cardModel\n };\n\n if (this.upopCallbacks.isOnUpdate) {\n props.onSuccess = this.upopCallbacks.onUpdateSuccess;\n props.onCancel = this.upopCallbacks.onUpdateCancel;\n } else {\n props.onSuccess = this.upopCallbacks.onConfirmUpopSuccess;\n props.onCancel = this.upopCallbacks.onConfirmUpopCancel;\n }\n\n return props;\n },\n\n lazyRoute: function lazyRoute() {\n return import('xo-wallet-components/src/confirm-upop/route');\n },\n slug: 'confirmUpop'\n }, {\n name: '$SidepageRoute',\n props: function props() {\n return {\n token: this.token\n };\n },\n\n lazyRoute: function lazyRoute() {\n return import('pages/xo-sidepage/route');\n },\n slug: 'sidepage'\n }]\n});\n\nangular.value(\"$ReviewRoute\", $ReviewRoute);\n_logger.$logger;\n\n_squid.$ComponentRoute;\n\n_squid.$feature;\n\n_squid.$config;\n\n_squid.$populate;\n\n_angular.$rootScope;\n\n_uiRouter.$state;\n\n_uiRouter.$stateParams;\n\n_directive.$xoReviewPageComponent;\n\n_checkout.$CheckoutSessionModel;\n\n_choice.$ChoiceEligibility;\n\n_credit.$CreditDataModel;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/route.js\n// module id = ./pages/xo-review/route.js\n// module chunks = main-code-split","module.exports = \"
    \\n \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n \\n \\n \\n

    \\n {{ content('common.reviewLater')}}\\n

    \\n\\n
    \\n\\n
    {{ content('memberReview.bankChargeDisclaimer')}}
    \\n\\n
    \\n

    {{ content('memberReview.billingRequired') }}\\n

    \\n

    \\n\\n
    \\n {{ content('memberReview.authUser') }}\\n \\n {{ content('memberReview.learnMore') }}\\n {{content('authUserLearnMore.authUserTitle')}}\\n \\n
    \\n
    \\n \\n\\n \\n
    \\n
    \\n \\n
    \\n \\n

    \\n {{ content('memberReview.hiUser_welcome', {userName: formattedNameInformal}) }}\\n {{ content('memberReview.loggedInWithOneTouch', {userName: formattedNameInformal, lastName: auth.last_name, firstName: auth.first_name}) }}\\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

    \\n
    \\n \\n \\n
    \\n
    \\n

    \\n
    \\n
    \\n \\n

    \\n {{ headerMsg }}\\n \\n \\n \\n

    \\n
    \\n
    \\n \\n \\n
    \\n

    \\n {{ content('memberReview.hiUser', {userName: formattedNameInformal}) }}\\n \\n \\n \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n

    {{ content('memberReview.autoLoginOn') }}

    \\n\\n
    \\n

    \\n

    \\n {{ content('memberReview.securityInfoOT') }} {{ content('common.hide') }}\\n

    \\n
    \\n
    \\n

    \\n {{ content('memberReview.sharedDevicesOT') }}\\n Details\\n

    \\n
    \\n
    \\n
    \\n \\n \\n
    \\n
    \\n\\n \\n \\n
    \\n \\n \\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('memberReview.merchantMsgHeader', { merchantName: merchantName }) }}\\n

    \\n \\n

    \\n {{ content('messenger.fbHeader') }}\\n

    \\n

    \\n {{ content('messenger.baHeader') }}\\n

    \\n
    \\n \\n {{ merchantMsg }}\\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n \\n \\n
    \\n\\n
    \\n
    \\n

    \\n {{content('chooseCreditOption.reviewPaymentPlan')}}\\n

    \\n
    \\n

    \\n

    \\n
    \\n\\n
    \\n

    \\n
    \\n
    \\n

    \\n
    \\n \\n {{ content('common.change') }}\\n \\n \\n
    \\n
    \\n\\n
    \\n
    \\n \\n \\n
    \\n\\n \\n\\n
    \\n \\n \\n \\n \\n
    \\n\\n
    \\n \\n \\n \\n \\n
    \\n\\n

    {{ content('messenger.disclaimer') }}

    \\n\\n
    \\n \\n \\n
    \\n\\n
    \\n \\n
    \\n\\n
    \\n {{ content('memberReview.rtrMsg', { merchantName: checkoutAppData.merchant.brand_name }) }}\\n
    \\n\\n \\n
    \\n
    \\n \\n
    \\n
    \\n \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n
    \\n \\n \\n\\n
    \\n \\n \\n
    \\n\\n \\n
    \\n
    {{ invoicingRegEMsg }}
    \\n
    \\n\\n

    \\n {{ content('confirmUpop.confirmUpopToPay')}}\\n

    \\n\\n

    \\n

    \\n\\n
    \\n \\n

    {{ content('messenger.pluginHeader') }}

    \\n
    \\n \\n

    \\n
    \\n
    \\n\\n
    \\n \\n
    \\n
    \\n\\n \\n \\n\\n \\n \\n \\n

    \\n {{ content('common.reviewLater')}}\\n

    \\n\\n
    \\n\\n
    {{ content('memberReview.bankChargeDisclaimer')}}
    \\n\\n
    \\n

    {{ content('memberReview.billingRequired') }}\\n

    \\n

    \\n\\n
    \\n {{ content('memberReview.authUser') }}\\n \\n {{ content('memberReview.learnMore') }}\\n {{content('authUserLearnMore.authUserTitle')}}\\n \\n
    \\n
    \\n \\n\\n \\n \\n\\n
    \\n\\n \\n\\n
    \\n

    \\n {{ content('fundingInstruments.bmlLearnMoreDesc') }}\\n

    \\n\\n \\n
    \\n\\n
    \\n\\n \\n \\n\\n \\n \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n {{content('review.pinError')}}\\n
    \\n \\n
    \\n {{content('review.tokenizationInfo', {type: tokenizedWalletInfoModel.brandName()})}}\\n
    \\n\\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/template.html\n// module id = ./pages/xo-review/template.html\n// module chunks = main-code-split","\n\nvar _angular = require('angular');\n\nvar _squid = require('squid');\n\nvar _fi = require('xo-models/src/fi');\n\nvar _logger = require('xo-beaver/dist/logger');\n\nvar _user = require('xo-models/src/user');\n\nvar _auth = require('xo-models/src/auth');\n\nvar _checkout = require('xo-models/src/checkout');\n\nvar _uiRouter = require('uiRouter');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$TokenizedFactory', function () {\n\n var state = {\n reviewTopupErrorMessage: {},\n tokenizationFlags: {\n sepaAgree: false\n }\n };\n\n var get = function get() {\n return state;\n };\n\n var AUTHORIZE_AND_UPDATE_SCOPE_BATCH = 'authorizeAndUpdateScope';\n var AUTHORIZE_CALL = 'authorize';\n\n /**\n * PatchXO api call for tokenization flows\n */\n var tokenizationPatchXO = function tokenizationPatchXO(checkoutSession, instrumentId) {\n return checkoutSession.action('setTopupFI', {\n data: {\n instrument_id: instrumentId\n }\n });\n };\n\n /**\n * Agree Sepa Mandate:\n * When user has clicked on the checkbox, call SepaAccept api, then calls PatchXO\n * When user has not clicked on the checkbox, show page level error message\n */\n var agreeSepaMandate = function agreeSepaMandate(checkoutCart, checkoutSession, tokenizedWalletInfoModel) {\n if (checkoutCart.isWalletTokenization()) {\n var bankId = checkoutSession.get('sepa_mandate.bankId');\n if (bankId && state.tokenizationFlags.sepaAgree) {\n // User agreed to the Sepa mandate by clicking on the checkbox\n return _fi.$SepaModel.instance().action('sepaAccept', {\n data: {\n bank: {\n id: bankId\n }\n },\n success: function success() {\n // Patch XO after Sepa agreed by user, so as to update PAPS\n return tokenizationPatchXO(checkoutSession, bankId);\n }\n });\n } else if (bankId) {\n // User did not agree to the Sepa mandate\n var msg = (0, _squid.$renderContent)('tokenization.agreeToSepaMsg', {\n type: tokenizedWalletInfoModel.brandName()\n });\n\n state.reviewTopupErrorMessage = {\n msgs: [msg],\n type: 'warning'\n };\n return _angular.$q.reject();\n }\n }\n return _angular.$q.when();\n };\n\n /**\n * Save the pin when its available\n */\n var setTokenizedWalletPin = function setTokenizedWalletPin(walletPinModel) {\n if (walletPinModel) {\n var pinModel = {\n data: {\n pin: walletPinModel.userPin\n },\n contingencies: {\n DEFAULT: function DEFAULT(name, err) {\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'process_review',\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'BA-Token',\n 'billing_token': _squid.$meta.baToken,\n 'int_error_code': 'pin_setup_contingencies',\n 'int_error_description': err,\n 'error_source': 'issuancemanagementserv'\n });\n\n throw err;\n }\n }\n };\n\n if (walletPinModel.isSetupEligible()) {\n if (walletPinModel.isPinIdPresent()) {\n pinModel.data.pinId = walletPinModel.getPinId();\n }\n return walletPinModel.save(pinModel);\n }\n }\n return _angular.$q.when();\n };\n\n var tokenizedOnPayCalls = function tokenizedOnPayCalls(checkoutCart, checkoutSession, tokenizedWalletInfoModel, walletPinModel) {\n return agreeSepaMandate(checkoutCart, checkoutSession, tokenizedWalletInfoModel).then(function () {\n return setTokenizedWalletPin(walletPinModel);\n });\n };\n\n /**\n * log FPTI event after authorize or authorizeAndUpdateScope call\n */\n var logProcessReviewToFPTI = function logProcessReviewToFPTI() {\n var _$WalletPreferences$i = _fi.$WalletPreferences.instance(_angular.$rootScope.token),\n _$WalletPreferences$i2 = _$WalletPreferences$i.topup,\n topup = _$WalletPreferences$i2 === undefined ? {} : _$WalletPreferences$i2,\n _$WalletPreferences$i3 = _$WalletPreferences$i.direct,\n direct = _$WalletPreferences$i3 === undefined ? {} : _$WalletPreferences$i3,\n currency = _$WalletPreferences$i.currency;\n\n _logger.$logger.info('tokenized_wallet', {\n 'from': 'TopUp_REVIEW',\n 'to': 'process_review',\n 'topup_amt': topup.amount,\n 'chosen_topup_fi': topup.fundingSource && topup.fundingSource.type,\n 'chosen_direct_fi': direct.fundingSource && direct.fundingSource.type,\n 'currency_code': currency || topup.currency,\n 'context_id': _angular.$rootScope.token,\n 'context_type': 'BA-Token',\n 'billing_token': _squid.$meta.baToken\n });\n };\n\n /**\n * Update user's scope with \"issuance\" scope for Google account linking flow\n * Call must be triggered only after successfull \"authorize\" call\n *\n * If successfull - redirect back to success url\n *\n * If there is a contingency (UAL_ISSUANCE_UPDATE_SCOPE_ERROR) - go to default tokenized wallet error page (see public/js/lib/contingency.js)\n *\n * To improve latency - batch it with \"authorize\" call\n */\n var updateIssuanceScope = function updateIssuanceScope() {\n var authConsentModel = _user.$AuthConsentModel.instance();\n\n return authConsentModel.action('updateIssuanceScope', {\n batch: {\n name: AUTHORIZE_AND_UPDATE_SCOPE_BATCH,\n id: 'updateIssuanceScope',\n dependencies: [AUTHORIZE_CALL]\n },\n data: {\n 'ba_token': _squid.$meta.baToken\n },\n success: function success() {\n _logger.$logger.info('ual_update_issuance_scope_success');\n logProcessReviewToFPTI();\n\n return _uiRouter.$state.go('checkout.end');\n }\n });\n };\n\n /**\n * Check if flow is Google account linking\n */\n var isGoogleAccountLinking = function isGoogleAccountLinking() {\n var checkoutCart = _checkout.$CheckoutCartModel.instance(_angular.$rootScope.token);\n var auth = _auth.$AuthModel.instance();\n\n return checkoutCart.isWalletTokenization() && auth.logged_in && auth.disallow_login_switch;\n };\n\n /**\n * Construct batch object for \"authorize\" call\n */\n var getAuthorizeBatch = function getAuthorizeBatch() {\n return {\n name: AUTHORIZE_AND_UPDATE_SCOPE_BATCH,\n id: AUTHORIZE_CALL,\n dependencies: []\n };\n };\n\n return {\n get: get,\n agreeSepaMandate: agreeSepaMandate,\n setTokenizedWalletPin: setTokenizedWalletPin,\n tokenizedOnPayCalls: tokenizedOnPayCalls,\n updateIssuanceScope: updateIssuanceScope,\n isGoogleAccountLinking: isGoogleAccountLinking,\n logProcessReviewToFPTI: logProcessReviewToFPTI,\n getAuthorizeBatch: getAuthorizeBatch\n };\n});\n\n_angular.$q;\n\n_angular.$rootScope;\n\n_squid.$meta;\n\n_squid.$renderContent;\n\n_fi.$SepaModel;\n\n_logger.$logger;\n\n_user.$AuthConsentModel;\n\n_auth.$AuthModel;\n\n_fi.$WalletPreferences;\n\n_checkout.$CheckoutCartModel;\n\n_uiRouter.$state;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-review/tokenizedFactory.js\n// module id = ./pages/xo-review/tokenizedFactory.js\n// module chunks = main-code-split","\n\nvar _squid = require('squid');\n\n(function exportProviders(angular) {\n angular && angular.exportProviders(module, exports, __dirname, __filename);\n})(window.angular);\n\nangular.module().factory('$BalanceFactory', function () {\n // initial choiceBalanceState checkbox is unselected\n var state = {\n checkbox: undefined\n };\n\n var get = function get() {\n return state;\n };\n\n var set = function set(data) {\n return _squid.$util.extend(state, data);\n };\n\n var getPadAndCheckboxStatus = function getPadAndCheckboxStatus() {\n var balanceList = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var planList = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n\n var isChecked = balanceList.some(function (balance) {\n return balance.checked;\n });\n var hasPad = planList.some(function (plan) {\n return plan.primaryFs.subtype === 'PAD';\n });\n\n return {\n isChecked: isChecked,\n hasPad: hasPad\n };\n };\n\n return {\n get: get,\n set: set,\n getPadAndCheckboxStatus: getPadAndCheckboxStatus\n };\n});\n\n_squid.$util;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./pages/xo-select-fi/factory.js\n// module id = ./pages/xo-select-fi/factory.js\n// module chunks = main-code-split"],"sourceRoot":""}