<!DOCTYPE html>
<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]-->
<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]-->
<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]-->
<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]-->
<head>


  <meta charset="utf-8" />

    
  
  <link href='//fonts.googleapis.com/css?family=Arvo:400,700' rel='stylesheet' type='text/css'>
    

  
  
  <link href='//fonts.googleapis.com/css?family=Glegoo' rel='stylesheet' type='text/css'>
  

  
  
  <link href='//fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'>
    

  
  
  <link href='//fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>
     

  
  
  <link href='//fonts.googleapis.com/css?family=Lobster+Two:400,700' rel='stylesheet' type='text/css'>
     

  
  
  <link href='//fonts.googleapis.com/css?family=Montserrat:400,700' rel='stylesheet' type='text/css'>
    

  
  
  <link href='//fonts.googleapis.com/css?family=Noticia+Text:400,700' rel='stylesheet' type='text/css'>
       

  
  
  <link href='//fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
    

  
  
  <link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700' rel='stylesheet' type='text/css'>
  

  
  
  <link href='//fonts.googleapis.com/css?family=Oswald:400,300,700' rel='stylesheet' type='text/css'>
  

  
  
  <link href='//fonts.googleapis.com/css?family=PT+Sans:400,700' rel='stylesheet' type='text/css'>
      

  
  
  <link href='//fonts.googleapis.com/css?family=PT+Sans+Narrow:400,700' rel='stylesheet' type='text/css'>
   

  
  
  <link href='//fonts.googleapis.com/css?family=Questrial' rel='stylesheet' type='text/css'>
     

  
  
  <link href='//fonts.googleapis.com/css?family=Raleway:400,300,700' rel='stylesheet' type='text/css'>
      

  
  
  <link href='//fonts.googleapis.com/css?family=Roboto:400,500,300' rel='stylesheet' type='text/css'>
   

  
  
  <link href='//fonts.googleapis.com/css?family=Josefin+Sans:400,600,700,300' rel='stylesheet' type='text/css'>
   

  
  
  <link href='//fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,300,700' rel='stylesheet' type='text/css'>
   
  

<meta property="og:type" content="website">
<meta property="og:title" content="News and Fun Stuff from 11:11 Enterprises Wallets">
<meta property="og:url" content="https://www.eleveneleven.net/blogs/blog">


<meta property="og:image" content="http://cdn.shopify.com/s/files/1/0092/8272/t/6/assets/logo.png?166">
<meta property="og:image:secure_url" content="https://cdn.shopify.com/s/files/1/0092/8272/t/6/assets/logo.png?166">


<meta property="og:site_name" content="11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, &amp; More">



<meta name="twitter:card" content="summary">


<meta name="twitter:site" content="@">



  <!-- Basic Page Needs
================================================== -->

  <title>
    News and Fun Stuff from 11:11 Enterprises Wallets &ndash; 11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, &amp; More
  </title>
  
  <link rel="canonical" href="https://www.eleveneleven.net/blogs/blog" />


  <!-- CSS
================================================== -->

  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/stylesheet.css?166" rel="stylesheet" type="text/css" media="all" />
  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/custom.css?166" rel="stylesheet" type="text/css" media="all" />
  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/jquery.fs.selecter.css?166" rel="stylesheet" type="text/css" media="all" />
  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/font-awesome.css?166" rel="stylesheet" type="text/css" media="all" />
  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/queries.css?166" rel="stylesheet" type="text/css" media="all" />
  <link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/jquery.fancybox.css?166" rel="stylesheet" type="text/css" media="all" />

  <!--[if IE 8 ]><link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/ie8.css?166" rel="stylesheet" type="text/css" media="all" /><![endif]-->

  <!--[if IE 7]>
<link href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/font-awesome-ie7.css?166" rel="stylesheet" type="text/css" media="all" />
<![endif]-->

  <!-- JS
================================================== -->

  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/theme.js?166" type="text/javascript"></script> 
  <script src="//cdn.shopify.com/s/assets/themes_support/option_selection-fe6b72c2bbdd3369ac0bfefe8648e3c889efca213baefd4cfb0dd9363563831f.js" type="text/javascript"></script>  


  

  

  <script src="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/instafeed.js?166" type="text/javascript"></script>


  <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

  <meta name="viewport" content="width=device-width, initial-scale=1">

  <!-- Favicons
================================================== -->

  <link rel="shortcut icon" href="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/favicon.png?166">

  

  <script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script><meta name="p:domain_verify" content="4346472f157125ab65fd8d7eeab339eb">
<meta name="google-site-verification" content="MHvg3fKyHVTD0wB7ivLDIRMlDb_X7HlQCSlki2GehLM">
<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/928272/digital_wallets/dialog">
<meta name="shopify-checkout-api-token" content="c6e14ad91ef7b3caf0a681b735f62f6d">
<meta id="in-context-paypal-metadata" data-shop-id="928272" data-venmo-supported="true" data-environment="production" data-locale="en_US" data-paypal-v4="true" data-currency="USD">
<link rel="alternate" type="application/atom+xml" title="Feed" href="http://feedproxy.google.com/PassportHolderCardHolder1111Enterprises-Blog" />
<link rel="next" href="/blogs/blog?page=2">
<style media="all">.additional-checkout-button{border:0 !important;border-radius:5px !important;display:inline-block;margin:0 0 10px;padding:0 24px !important;max-width:100%;min-width:150px !important;line-height:44px !important;text-align:center !important}.additional-checkout-button+.additional-checkout-button{margin-left:10px}.additional-checkout-button:last-child{margin-bottom:0}.additional-checkout-button span{font-size:14px !important}.additional-checkout-button img{display:inline-block !important;height:1.3em !important;margin:0 !important;vertical-align:middle !important;width:auto !important}@media (max-width: 500px){.additional-checkout-button{display:block;margin-left:0 !important;padding:0 10px !important;width:100%}}.additional-checkout-button--apple-pay{background-color:#000 !important;color:#fff !important;display:none;font-family:-apple-system, Helvetica Neue, sans-serif !important;min-width:150px !important;white-space:nowrap !important}.additional-checkout-button--apple-pay:hover,.additional-checkout-button--apple-pay:active,.additional-checkout-button--apple-pay:visited{color:#fff !important;text-decoration:none !important}.additional-checkout-button--apple-pay .additional-checkout-button__logo{background:-webkit-named-image(apple-pay-logo-white) center center no-repeat !important;background-size:auto 100% !important;display:inline-block !important;vertical-align:middle !important;width:3em !important;height:1.3em !important}@media (max-width: 500px){.additional-checkout-button--apple-pay{display:none}}.additional-checkout-button--google-pay{line-height:0 !important;padding:0 !important;border-radius:unset !important;width:80px !important}@media (max-width: 500px){.additional-checkout-button--google-pay{width:100% !important}}.gpay-iframe{height:44px !important;width:100%  !important;cursor:pointer;vertical-align:middle !important}.additional-checkout-button--paypal-express{background-color:#ffc439 !important}.additional-checkout-button--paypal,.additional-checkout-button--venmo{vertical-align:top;line-height:0 !important;padding:0 !important}.additional-checkout-button--amazon{background-color:#fad676 !important;position:relative !important}.additional-checkout-button--amazon .additional-checkout-button__logo{-webkit-transform:translateY(4px) !important;transform:translateY(4px) !important}.additional-checkout-button--amazon .alt-payment-list-amazon-button-image{max-height:none !important;opacity:0 !important;position:absolute !important;top:0 !important;left:0 !important;width:100% !important;height:100% !important}.additional-checkout-button-visually-hidden{border:0 !important;clip:rect(0, 0, 0, 0) !important;clip:rect(0 0 0 0) !important;width:1px !important;height:1px !important;margin:-2px !important;overflow:hidden !important;padding:0 !important;position:absolute !important}
</style>
<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":928272,"countryCode":"US","currencyCode":"USD","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/928272","merchantName":"11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, \u0026 More","requiredBillingContactFields":["postalAddress","email","phone"],"requiredShippingContactFields":["postalAddress","email","phone"],"shippingType":"shipping","supportedNetworks":["visa","masterCard","amex","discover"],"total":{"type":"pending","label":"11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, \u0026 More","amount":"1.00"}}</script>
<script id="shopify-features" type="application/json">{"accessToken":"c6e14ad91ef7b3caf0a681b735f62f6d","betas":[],"domain":"www.eleveneleven.net","predictiveSearch":true,"shopId":928272,"smart_payment_buttons_url":"https:\/\/cdn.shopifycloud.com\/payment-sheet\/assets\/latest\/spb.en.js","dynamic_checkout_cart_url":"https:\/\/cdn.shopifycloud.com\/payment-sheet\/assets\/latest\/dynamic-checkout-cart.en.js"}</script>
<script>var Shopify = Shopify || {};
Shopify.shop = "1111enterprises.myshopify.com";
Shopify.currency = {"active":"USD","rate":"1.0"};
Shopify.theme = {"name":"Icon","id":159117450,"theme_store_id":686,"role":"main"};
Shopify.theme.handle = "null";
Shopify.theme.style = {"id":null,"handle":null};</script>
<script>window.ShopifyPay = window.ShopifyPay || {};
window.ShopifyPay.apiHost = "pay.shopify.com";</script>
<script>(function() {
  function asyncLoad() {
    var urls = ["https:\/\/www.improvedcontactform.com\/icf.js?shop=1111enterprises.myshopify.com","\/\/d1liekpayvooaz.cloudfront.net\/apps\/customizery\/customizery.js?shop=1111enterprises.myshopify.com","https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/2af0340195b469129d0d04ab2\/127ad06ceeb3c2d872c9184f4.js?shop=1111enterprises.myshopify.com","https:\/\/duw6wk4ou1qt.cloudfront.net\/static\/js\/external\/shopify-product-customizer.js?v=0.15\u0026shop=1111enterprises.myshopify.com"];
    for (var i = 0; i < urls.length; i++) {
      var s = document.createElement('script');
      s.type = 'text/javascript';
      s.async = true;
      s.src = urls[i];
      var x = document.getElementsByTagName('script')[0];
      x.parentNode.insertBefore(s, x);
    }
  };
  if(window.attachEvent) {
    window.attachEvent('onload', asyncLoad);
  } else {
    window.addEventListener('load', asyncLoad, false);
  }
})();</script>
<script id="__st">var __st={"a":928272,"offset":-25200,"reqid":"9d97e482-912d-402a-baf1-c5a8bdf0c8f4","pageurl":"www.eleveneleven.net\/blogs\/blog?feed=rss2","s":"blogs-1262572","u":"41cee8e67df4","p":"blog","rtyp":"blog","rid":1262572};</script>
<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
<script>window['GoogleAnalyticsObject'] = 'ga';
window['ga'] = window['ga'] || function() {
  (window['ga'].q = window['ga'].q || []).push(arguments);
};
window['ga'].l = 1 * new Date();</script>
<script>var _gaUTrackerOptions = {'allowLinker': true};ga('create', 'UA-8223193-1', 'auto', _gaUTrackerOptions);ga('send', 'pageview');
      (function(){
        ga('require', 'linker');
        function addListener(element, type, callback) {
          if (element.addEventListener) {
            element.addEventListener(type, callback);
          }
          else if (element.attachEvent) {
            element.attachEvent('on' + type, callback);
          }
        }
        function decorate(event) {
          event = event || window.event;
          var target = event.target || event.srcElement;
          if (target && (target.action || target.href)) {
            ga(function (tracker) {
              var linkerParam = tracker.get('linkerParam');
              document.cookie = '_shopify_ga=' + linkerParam + '; ' + 'path=/';
            });
          }
        }
        addListener(window, 'load', function(){
          for (var i=0; i<document.forms.length; i++) {
            if(document.forms[i].action && document.forms[i].action.indexOf('/cart') >= 0) {
              addListener(document.forms[i], 'submit', decorate);
            }
          }
          for (var i=0; i<document.links.length; i++) {
            if(document.links[i].href && document.links[i].href.indexOf('/checkout') >= 0) {
              addListener(document.links[i], 'click', decorate);
            }
          }
        })
      }());
    </script>
<script>window.ShopifyAnalytics = window.ShopifyAnalytics || {};
window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
window.ShopifyAnalytics.meta.currency = 'USD';
var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":1262572}};
for (var attr in meta) {
  window.ShopifyAnalytics.meta[attr] = meta[attr];
}</script>
<script>window.ShopifyAnalytics.merchantGoogleAnalytics = function() {
  
};
</script>
<script class="analytics">(function () {
  var customDocumentWrite = function(content) {
    var jquery = null;

    if (window.jQuery) {
      jquery = window.jQuery;
    } else if (window.Checkout && window.Checkout.$) {
      jquery = window.Checkout.$;
    }

    if (jquery) {
      jquery('body').append(content);
    }
  };

  var isDuplicatedThankYouPageView = function() {
    return document.cookie.indexOf('loggedConversion=' + window.location.pathname) !== -1;
  }

  var setCookieIfThankYouPage = function() {
    if (window.location.pathname.indexOf('/checkouts') !== -1 &&
        window.location.pathname.indexOf('/thank_you') !== -1) {

      var twoMonthsFromNow = new Date(Date.now());
      twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2);

      document.cookie = 'loggedConversion=' + window.location.pathname + '; expires=' + twoMonthsFromNow;
    }
  }

  var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || [];
  if (trekkie.integrations) {
    return;
  }
  trekkie.methods = [
    'identify',
    'page',
    'ready',
    'track',
    'trackForm',
    'trackLink'
  ];
  trekkie.factory = function(method) {
    return function() {
      var args = Array.prototype.slice.call(arguments);
      args.unshift(method);
      trekkie.push(args);
      return trekkie;
    };
  };
  for (var i = 0; i < trekkie.methods.length; i++) {
    var key = trekkie.methods[i];
    trekkie[key] = trekkie.factory(key);
  }
  trekkie.load = function(config) {
    trekkie.config = config;
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.onerror = function(e) {
      (new Image()).src = '//v.shopify.com/internal_errors/track?error=trekkie_load';
    };
    script.async = true;
    script.src = 'https://cdn.shopify.com/s/javascripts/tricorder/trekkie.storefront.min.js?v=2017.09.05.1';
    var first = document.getElementsByTagName('script')[0];
    first.parentNode.insertBefore(script, first);
  };
  trekkie.load(
    {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":928272,"isMerchantRequest":null,"themeId":159117450,"themeCityHash":"15183369565879075564","contentLanguage":"en"}},"Performance":{"navigationTimingApiMeasurementsEnabled":true,"navigationTimingApiMeasurementsSampleRate":1},"Facebook Pixel":{"pixelIds":["1785363871719249"],"agent":"plshopify1.2"},"Pinterest Pixel":{"pixelId":"2612763050721"},"Session Attribution":{}}
  );

  var loaded = false;
  trekkie.ready(function() {
    if (loaded) return;
    loaded = true;

    window.ShopifyAnalytics.lib = window.trekkie;
    

    var originalDocumentWrite = document.write;
    document.write = customDocumentWrite;
    try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {};
    document.write = originalDocumentWrite;

    if (!isDuplicatedThankYouPageView()) {
      setCookieIfThankYouPage();
      
        window.ShopifyAnalytics.lib.page(
          null,
          {"pageType":"blog","resourceType":"blog","resourceId":1262572}
        );
      
      
    }
  });

  
      var eventsListenerScript = document.createElement('script');
      eventsListenerScript.async = true;
      eventsListenerScript.src = "//cdn.shopify.com/s/assets/shop_events_listener-acf771159f9849ef6e5265782c99efe8b99406214c96a4373224ecafe285d7bb.js";
      document.getElementsByTagName('head')[0].appendChild(eventsListenerScript);
    
})();</script>
<script crossorigin="anonymous" defer="defer" src="//cdn.shopify.com/s/assets/shopify_pay/storefront-f95c62afca18778ed8677facd32818c864b5e4938cba1769e8d8ba0b541d41dc.js?v=20190107"></script>
<script integrity="sha256-qzPTa4Ven/Yc2yyXr9BKZWCTXSrPTCnbGdWsxA7YCw0=" defer="defer" src="//cdn.shopify.com/s/assets/storefront/features-ab33d36b855e9ff61cdb2c97afd04a6560935d2acf4c29db19d5acc40ed80b0d.js" crossorigin="anonymous"></script>
<script async="async" src="https://www.google-analytics.com/analytics.js"></script>
<script defer="defer" src="//cdn.shopify.com/s/assets/themes_support/ga_urchin_forms-99e991855b3d8ddc69e625c68ab0579dd9927b611c2ec4943d396c72e3af0849.js"></script>


<style id="shopify-dynamic-checkout-cart">@media screen and (min-width: 750px) {
  #dynamic-checkout-cart {
    min-height: 50px;
  }
}

@media screen and (max-width: 750px) {
  #dynamic-checkout-cart {
    min-height: 180px;
  }
}
</style>
<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>

  <link rel="next" href="/next"/>
  <link rel="prev" href="/prev"/>

</head>


<body class="gridlock shifter blog">
  <div id="CartDrawer" class="drawer drawer--right">
  <div class="drawer__header">
    <div class="table-cell">
    <h3>My Cart</h3>
    </div>
    <div class="table-cell">
    <span class="drawer__close js-drawer-close">
        Close
    </span>
    </div>
  </div>
  <div id="CartContainer"></div>
</div>

  <div class="shifter-page is-moved-by-drawer" id="PageContainer">  
    <div class="page-wrap">
      
      
  <header class="scrollheader">
    <div class="bannertop gridlock-fluid">
      <div class="row">
        
        <div class="desktop-6 tablet-3 mobile-3" id="banner-message">
          FREE SHIPPING on orders over $30
        </div>
        

        <ul id="cart" class="desktop-6 tablet-3 mobile-hide right">                  
          <li class="seeks"><a id="inline" href="#search_popup" class="open_popup"><i class="icon-search"></i></a>
            </li>
          
          <li class="cust">
            
            <a href="/account/login">Account</a>
            
          </li>
          
          <li>
            <a href="/cart" >
              <span class="cart-words">My Cart</span>
              &nbsp;<i class="icon-shopping-cart"></i> 
              <span class="CartCount">0</span>
              &nbsp;<span class="CartCost">$0.00</span>
            </a>     
        </ul>
        <!-- Shown on Mobile Only -->
<ul id="cart" class="mobile-3 mobile-only">                  
  <li class="seeks"><a id="inline" href="#search_popup" class="open_popup"><i class="icon-search"></i></a>
    </li>
  
  <li class="cust">
    
    <a href="/account/login">Account</a>
    
  </li>
  
  <li>
    <a href="/cart" class="site-header__cart-toggle js-drawer-open-right" aria-controls="CartDrawer" aria-expanded="false">
      <span class="cart-words">My Cart</span>
      &nbsp;<i class="icon-shopping-cart"></i> 
      <span class="CartCount">0</span>
    </a> 
  </li>       
  <li class="wider"><span class="shifter-handle">Menu</span></li>
</ul>  
      </div>
    </div> 
    <div id="navigation" class="gridlock-fluid">
      <div class="row">
        <div class="nav-container desktop-12 tablet-6 mobile-3">
          <div id="logo" class="mobile-3">       
            
            <a href="/"><img src="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/logo.png?166" alt="11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, &amp; More" style="border: 0;"/></a>
                 
          </div> 
          <nav>
            <ul id="main-nav" role="navigation"> 
              
              
 


<li><a href="/collections/passport-holder" title="">Passports</a></li>

              
              
 


<li><a href="/collections/luggage-tags" title="">Luggage Tags</a></li>

              
              
 


<li class="dropdown"><a href="/collections/tri-fold-wallets" class="dlinks">Wallets</a>  
  
  
  <ul class="megamenu">
    <div class="mega-container">
      <!-- Start Megamenu Inner Links -->
      <li class="desktop-2 tablet-1">
        <h4>Wallets</h4>

        <ul class="mega-stack">
          
          
          <li><a href="/collections/cardholders">Card Holders</a></li>    
          
          
          <li><a href="/collections/checkbook-covers">Checkbook Covers</a></li>    
          
          
          <li><a href="/collections/tri-fold-wallets">Tri-Fold Wallet</a></li>    
          
          
          <li><a href="/collections/bi-fold-wallets">Bi-Fold Photo Wallet</a></li>    
          
          
          <li><a href="/collections/condom-cases">Condom Cases</a></li>    
          
        </ul>
      </li> 
      
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/tri-fold-wallets/products/climate-zones-map-tri-fold-wallet" title="Climate Zones Map Tri-Fold Wallet">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/tw1772.main_medium.jpeg?v=1323464335" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/climate-zones-map-tri-fold-wallet">Climate Zones Map Tri-Fold Wallet</a></p>
          <div class="price">
            <a href="/products/climate-zones-map-tri-fold-wallet">
              
              <div class="prod-price">$14.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/tri-fold-wallets/products/cosmic-water-ski-tri-fold-wallet" title="Cosmic Water Ski Tri-Fold Wallet">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/tw2344.PT1_medium.jpg?v=1397684586" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/cosmic-water-ski-tri-fold-wallet">Cosmic Water Ski Tri-Fold Wallet</a></p>
          <div class="price">
            <a href="/products/cosmic-water-ski-tri-fold-wallet">
              
              <div class="prod-price">$14.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/tri-fold-wallets/products/crystal-visions-tri-fold-wallet" title="Crystal Visions Tri-Fold Wallet">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/tw2300.main_medium.jpeg?v=1350457435" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/crystal-visions-tri-fold-wallet">Crystal Visions Tri-Fold Wallet</a></p>
          <div class="price">
            <a href="/products/crystal-visions-tri-fold-wallet">
              
              <div class="prod-price">$14.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/tri-fold-wallets/products/dare-vintage-tri-fold-wallet" title="Dare Vintage Tri-Fold Wallet">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/tw508.PT1_medium.jpeg?v=1315242390" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/dare-vintage-tri-fold-wallet">Dare Vintage Tri-Fold Wallet</a></p>
          <div class="price">
            <a href="/products/dare-vintage-tri-fold-wallet">
              
              <div class="prod-price">$14.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/tri-fold-wallets/products/dog-stamps-trifold-wallet" title="Dog Stamps Trifold Wallet">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/tw1735.main_medium.jpeg?v=1315242336" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/dog-stamps-trifold-wallet">Dog Stamps Trifold Wallet</a></p>
          <div class="price">
            <a href="/products/dog-stamps-trifold-wallet">
              
              <div class="prod-price">$14.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
              
    </div>
  </ul>
  
</li>


              
              
 


<li class="dropdown"><a href="/collections/notebooks" class="dlinks">Notebooks</a>  
  
  
  <ul class="megamenu">
    <div class="mega-container">
      <!-- Start Megamenu Inner Links -->
      <li class="desktop-2 tablet-1">
        <h4>Notebooks</h4>

        <ul class="mega-stack">
          
          
          <li><a href="/collections/notebooks">Pocket Notebooks</a></li>    
          
          
          <li><a href="/collections/medium-notebooks">Large Notebooks</a></li>    
          
          
          <li><a href="/collections/large-notebook">Extra-Large Notebooks</a></li>    
          
        </ul>
      </li> 
      
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/notebooks/products/flower-fields-3" title="Flower Fields">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/2609mmnb-front_61a4244b-ab99-4f48-b2f5-1a6a1a586115_medium.jpg?v=1535574436" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/flower-fields-3">Flower Fields</a></p>
          <div class="price">
            <a href="/products/flower-fields-3">
              
              <div class="prod-price"> From $9.99 - $18.99 </div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/notebooks/products/veggie-cherubs-journal-diary-notebook-w-moleskine-cahier-pocket-cover" title="Veggie Cherubs Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/smnb2515.PT1_medium.jpeg?v=1442872188" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/veggie-cherubs-journal-diary-notebook-w-moleskine-cahier-pocket-cover">Veggie Cherubs Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover</a></p>
          <div class="price">
            <a href="/products/veggie-cherubs-journal-diary-notebook-w-moleskine-cahier-pocket-cover">
              
              <div class="onsale">$14.99</div>
              <div class="was">$15.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/notebooks/products/heirloom-vegetables-journal-diary-notebook-w-moleskine-cahier-pocket-cover" title="Heirloom Vegetables Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/smnb2514.PT1_medium.jpeg?v=1442872178" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/heirloom-vegetables-journal-diary-notebook-w-moleskine-cahier-pocket-cover">Heirloom Vegetables Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover</a></p>
          <div class="price">
            <a href="/products/heirloom-vegetables-journal-diary-notebook-w-moleskine-cahier-pocket-cover">
              
              <div class="onsale">$14.99</div>
              <div class="was">$15.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/notebooks/products/taos-flying-saucer-cattle-journal-diary-notebook-w-moleskine-cahier-pocket-cover" title="Taos Flying Saucer Cattle Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/smnb2512.PT1_medium.jpeg?v=1442872169" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/taos-flying-saucer-cattle-journal-diary-notebook-w-moleskine-cahier-pocket-cover">Taos Flying Saucer Cattle Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover</a></p>
          <div class="price">
            <a href="/products/taos-flying-saucer-cattle-journal-diary-notebook-w-moleskine-cahier-pocket-cover">
              
              <div class="onsale">$14.99</div>
              <div class="was">$15.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
      
      <li class="desktop-2 product-index">
        <div class="ci">
          <a href="/collections/notebooks/products/going-bananas-journal-diary-notebook-w-moleskine-cahier-pocket-cover" title="Going Bananas Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover">
            <img src="//cdn.shopify.com/s/files/1/0092/8272/products/smnb2511.PT1_medium.jpeg?v=1442872160" alt="" />
          </a>
        </div>
        <div class="product-details">  
          <p><a href="/products/going-bananas-journal-diary-notebook-w-moleskine-cahier-pocket-cover">Going Bananas Journal (Diary, Notebook) w/ Moleskine Cahier Pocket Cover</a></p>
          <div class="price">
            <a href="/products/going-bananas-journal-diary-notebook-w-moleskine-cahier-pocket-cover">
              
              <div class="onsale">$14.99</div>
              <div class="was">$15.99</div>
              	
            </a>
          </div>          
        </div>
      </li>
              
    </div>
  </ul>
  
</li>


              
              
 


<li><a href="/collections/limited-edition-t-shirts" title="">Limited Edition</a></li>

              
              
 


<li><a href="/pages/custom-products-easy" title="">Custom</a></li>

              
            </ul>        
          </nav>
        </div>
      </div>  
    </div>
  </header>
  <div id="phantom"></div>  



            
      
      <div id="content" class="row">	
        	
        <div class="section-title desktop-12 mobile-3">
  <h1>11:11 Enterprises Blog<a class="fr" target="_blank" href="https://www.eleveneleven.net/blogs/blog.atom"><i class="icon-rss icon-2x"></i></a></h1>
</div>




<div id="blog-sidebar" class="desktop-2 mobile-3">

  <h4>Recent Posts</h4>
  <ul id="blog-recent">
    
    <li><a href="/blogs/blog/my-mission-joy" title="">My Mission : JOY</a></li>
    
    <li><a href="/blogs/blog/11-11-x-starwater-yoga-travel-mats" title="">11:11 x Starwater Yoga - Travel Mats !</a></li>
    
    <li><a href="/blogs/blog/summer-2018-update" title="">Late Summer 2018 update</a></li>
    
    <li><a href="/blogs/blog/our-new-collection-is-here" title="">Introducing the Joyful Gold Collection</a></li>
    
    <li><a href="/blogs/blog/summer-updates" title="">Starwater Yoga !</a></li>
    
    <li><a href="/blogs/blog/2017-vibes" title="">2017 Vibes</a></li>
    
    <li><a href="/blogs/blog/action-cookies-interview-with-jamila-tazewell" title="">Action Cookies Interview with Jamila Tazewell</a></li>
    
    <li><a href="/blogs/blog/50-percent-off-sssalllleeeee" title="">50 Percent Off SSSALLLLEEEEE</a></li>
    
    <li><a href="/blogs/blog/new-website-yay" title="">NEW WEBSITE YAY !</a></li>
    
    <li><a href="/blogs/blog/new-designs-in-progress" title="">new designs in progress!</a></li>
    
    <li><a href="/blogs/blog/we-are-hiring" title="">We are Hiring !</a></li>
    
    <li><a href="/blogs/blog/summer" title="">Summer !</a></li>
    
    <li><a href="/blogs/blog/139408775-happy-spring" title="">Happy Spring !!!</a></li>
    
    <li><a href="/blogs/blog/87195143-introducing-travel-yoga-mats" title="">Introducing TRAVEL yoga mats !</a></li>
    
    <li><a href="/blogs/blog/87111239-renegade-craft-la-this-weekend" title="">Renegade Craft LA - this weekend</a></li>
    
    <li><a href="/blogs/blog/56380225-yoga-mat-giveaway-time" title="">Yoga Mat Giveaway Time !</a></li>
    
    <li><a href="/blogs/blog/50115905-collection-no-32" title="">Collection no. 32</a></li>
    
    <li><a href="/blogs/blog/48437633-new-collections-coming-soon" title="">New collections coming soon!!!</a></li>
    
    <li><a href="/blogs/blog/44449793-paris-color-patterns" title="">Paris Color + Patterns</a></li>
    
    <li><a href="/blogs/blog/30665217-custom-products-launch" title="">custom products launch !</a></li>
    
    <li><a href="/blogs/blog/28615297-were-hiring" title="">We're Hiring !</a></li>
    
    <li><a href="/blogs/blog/18634709-creative-adventures" title="">Creative Adventures</a></li>
    
    <li><a href="/blogs/blog/16587641-happy-new-year" title="">Happy New Year !</a></li>
    
    <li><a href="/blogs/blog/15778053-upcoming-holiday-shopping-events" title="">Upcoming Holiday Shopping Events!</a></li>
    
    <li><a href="/blogs/blog/15559801-i-spill-my-secrets" title="">I spill my 'secrets' ..</a></li>
    
    <li><a href="/blogs/blog/15537001-crazy-past-few-months" title="">Crazy past few months !</a></li>
    
    <li><a href="/blogs/blog/15019289-summer-time-travels" title="">Summer time travels !</a></li>
    
    <li><a href="/blogs/blog/14848625-summer-show-schedule" title="">Summer Show Schedule !</a></li>
    
    <li><a href="/blogs/blog/14526717-yoga-mat-giveaway" title="">YOGA MAT GIVEAWAY</a></li>
    
    <li><a href="/blogs/blog/14321545-its-june-already" title="">It's June already ?!</a></li>
    
    <li><a href="/blogs/blog/13998665-unique-la-this-weekend" title="">Unique LA this weekend !!!</a></li>
    
    <li><a href="/blogs/blog/13884317-spring-is-here" title="">SPRING is HERE</a></li>
    
    <li><a href="/blogs/blog/13462001-inspiration-and-new-collection-update" title="">Inspiration and New Collection Update</a></li>
    
    <li><a href="/blogs/blog/12490569-magic-days" title="">Magic days</a></li>
    
    <li><a href="/blogs/blog/8449381-luggage-tags-sneak-peek" title="">luggage tags sneak peek !!!!!!!!!!!!</a></li>
    
    <li><a href="/blogs/blog/12230177-introducing-jamilastarwater-com" title="">Introducing JamilaStarwater.com</a></li>
    
    <li><a href="/blogs/blog/12206393-sneak-peek-25-brand-new-patterns" title="">SNEAK PEEK : 25 brand new patterns</a></li>
    
    <li><a href="/blogs/blog/11906829-the-new-passport-holder-design-bonanza" title="">The New Passport Holder Design Bonanza !!</a></li>
    
    <li><a href="/blogs/blog/11591693-happy-2014" title="">HAPPY 2014 !</a></li>
    
    <li><a href="/blogs/blog/10608881-thank-you" title="">Thank you !!!!!!!!!!!!!!!</a></li>
    
    <li><a href="/blogs/blog/10558781-cyber-sale-today-only" title="">CYBER SALE TODAY ONLY</a></li>
    
    <li><a href="/blogs/blog/10500125-this-holiday-season" title="">This holiday season...</a></li>
    
    <li><a href="/blogs/blog/10500109-what-is-a-black-friday" title="">What is a Black Friday ?</a></li>
    
    <li><a href="/blogs/blog/9996109-upcoming-holiday-craft-shows" title="">upcoming holiday craft shows!</a></li>
    
    <li><a href="/blogs/blog/9997593-flip-tumble-bags" title="">Flip + Tumble bags</a></li>
    
    <li><a href="/blogs/blog/9999261-introducing-a-surprise-in-every-box" title="">Introducing.. a Surprise in every Box!</a></li>
    
    <li><a href="/blogs/blog/8449823-thirteen-bird-theme-passport-holders" title="">Thirteen (!!) Bird Theme Passport Holders</a></li>
    
    <li><a href="/blogs/blog/9995385-the-secret-of-the-donut" title="">The Secret of the Donut</a></li>
    
    <li><a href="/blogs/blog/9994633-11-11-near-you" title="">11:11 near you!</a></li>
    
    <li><a href="/blogs/blog/9807832-luggage-tag-favorites" title="">Luggage Tag Favorites</a></li>
    
  </ul>

  <h4>Filter Article Tags</h4>
  <ul id="blog-tags">
    
    <li><a href="/blogs/blog/tagged/11-11">11:11</a></li>
    
    <li><a href="/blogs/blog/tagged/11-11-design-collections">11:11 design collections</a></li>
    
    <li><a href="/blogs/blog/tagged/collage-fun">Collage Fun</a></li>
    
    <li><a href="/blogs/blog/tagged/craft-shows">Craft Shows</a></li>
    
    <li><a href="/blogs/blog/tagged/deep-thoughts">Deep Thoughts</a></li>
    
    <li><a href="/blogs/blog/tagged/diy">DIY</a></li>
    
    <li><a href="/blogs/blog/tagged/food-porn-and-recipes">Food Porn and Recipes</a></li>
    
    <li><a href="/blogs/blog/tagged/inspiration">Inspiration</a></li>
    
    <li><a href="/blogs/blog/tagged/interview">Interview</a></li>
    
    <li><a href="/blogs/blog/tagged/picture-of-the-day">Picture of the Day</a></li>
    
    <li><a href="/blogs/blog/tagged/small-biz-tidbits">Small Biz Tidbits</a></li>
    
    <li><a href="/blogs/blog/tagged/supermarket-safari">Supermarket Safari</a></li>
    
    <li><a href="/blogs/blog/tagged/travel-dreams">Travel Dreams</a></li>
    
    <li><a href="/blogs/blog/tagged/web-treasures">Web Treasures</a></li>
    
    <li><a href="/blogs/blog/tagged/yoga-awesomeness">Yoga + Awesomeness</a></li>
    
  </ul>    


  

  

</div>



<ul id="blog-articles" class="desktop-10 mobile-3">
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/my-mission-joy">My Mission : JOY</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/my-mission-joy">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog-update3_grande_4c7f850b-3db3-406f-b46c-468a051eb85e_grande.jpg?v=1552783373" alt="My Mission : JOY">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Mar 19, 2019">Mar 19, 2019</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Hi ! My mission with 11:11 ( and Starwater Yoga too)  is to spread joy through inspired imagery. Images effect the mind in powerful ways. Small things can have big...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/11-11-x-starwater-yoga-travel-mats">11:11 x Starwater Yoga - Travel Mats !</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/11-11-x-starwater-yoga-travel-mats">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog-travelmats_grande.jpg?v=1539490966" alt="11:11 x Starwater Yoga - Travel Mats !">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 13, 2018">Oct 13, 2018</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We are so happy to announce that our sister brand Starwater Yoga is finally launching their new Travel Yoga mats via Indiegogo !! They have already funded over 70% of...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/summer-2018-update">Late Summer 2018 update</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/summer-2018-update">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog-update_grande.jpg?v=1535239881" alt="Late Summer 2018 update">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Aug 25, 2018">Aug 25, 2018</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Just dipping in here once or twice a year to share bits of inspiration and news because lets be honest.. who reads blogs anymore? But for the handful of you...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/our-new-collection-is-here">Introducing the Joyful Gold Collection</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/our-new-collection-is-here">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog-joyful_grande.jpg?v=1511754058" alt="Introducing the Joyful Gold Collection">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 26, 2017">Nov 26, 2017</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Hi ! Well, its been quite a run these past two months getting Starwater Yoga up and out in to the world. If you haven't checked out our new brand's...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/summer-updates">Starwater Yoga !</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/summer-updates">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog1_grande.jpg?v=1499216298" alt="Starwater Yoga !">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jul 04, 2017">Jul 04, 2017</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Hi Friends ! Just wanted to let you know that we are getting close to relaunching our Starwater Yoga brand as it's own business later this summer. My goal is...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/2017-vibes">2017 Vibes</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/2017-vibes">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/1111blog2_grande.jpg?v=1499216401" alt="2017 Vibes">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jan 12, 2017">Jan 12, 2017</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">*Wishing for you* rest, relaxation and inspiration as we enter into this very exciting and intense new year. We are in organization and envisioning mode here at 11:11, planning some new...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/action-cookies-interview-with-jamila-tazewell">Action Cookies Interview with Jamila Tazewell</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/action-cookies-interview-with-jamila-tazewell">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/tumblr_inline_ohgsy07WjK1r6onkr_500_grande.png?v=1480567376" alt="Action Cookies Interview with Jamila Tazewell">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 30, 2016">Nov 30, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Check out this interview on my amazing cousin's blog - Ashley Wade is the owner of an amazing cookie company here in LA called Action Cookies and she interviewed me...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/50-percent-off-sssalllleeeee">50 Percent Off SSSALLLLEEEEE</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/50-percent-off-sssalllleeeee">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/sale-small_grande.jpg?v=1480120725" alt="50 Percent Off SSSALLLLEEEEE">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 25, 2016">Nov 25, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">It's time to clear out tons of inventory and you are in luck because ... this is the first time in 13 years we have offered 50% OFF EVERYTHING ON...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/new-website-yay">NEW WEBSITE YAY !</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/new-website-yay">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/TIJUANA-Colorful-Donkey-Cart-Zebra-Mexico-Vintage-Postcard_grande.jpg?v=1474160270" alt="NEW WEBSITE YAY !">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Sep 17, 2016">Sep 17, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I honestly can't believe it took me this long to give the website a makeover.. I have been asleep at the wheel, apparently. Oh well.. I'm awake now! And super...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/new-designs-in-progress">new designs in progress!</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/new-designs-in-progress">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/cats_grande.jpg?v=1474137285" alt="new designs in progress!">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Sep 14, 2016">Sep 14, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Hi! I'm in the middle of a big design push. It is usually my favorite part but right now I'm feeling a little stuck to be honest. I wanted to...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/we-are-hiring">We are Hiring !</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/we-are-hiring">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/airmail-graphicsfairy002a_grande.jpg?v=1474137377" alt="We are Hiring !">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jul 26, 2016">Jul 26, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We are looking for a wonderful person to join our team as a Production Coordinator at our office here in West Los Angeles.. If this sounds like it could be...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/summer">Summer !</a></h3>
  <div class="article-content">
    
    <a href="/blogs/blog/summer">
      <img class="article-image" src="//cdn.shopify.com/s/files/1/0092/8272/articles/Screen_Shot_2016-09-17_at_11.39.15_AM_grande.png?v=1474137591" alt="Summer !">
    </a>
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jul 18, 2016">Jul 18, 2016</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Hi ! Long time no see :) I'm just taking it one day at a time over here, finding the beauty. There has been a lot of travel in new...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/139408775-happy-spring">Happy Spring !!!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Mar 21, 2016">Mar 21, 2016</time></span>
    
    
    <span class="comment-count">1 comment</span>
     
 
    <div class="clear"></div>
    <div class="rte">I'm soooooooo happy it's spring time !! I have been working less and playing more. That is a whole new thing for me but its the only antidote to burnout I...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/87195143-introducing-travel-yoga-mats">Introducing TRAVEL yoga mats !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Dec 09, 2015">Dec 09, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I'm so pleased to announce the launch of our new travel yoga mats! These beauties weigh only 2 pounds and fold up small, making them a perfect addition to your...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/87111239-renegade-craft-la-this-weekend">Renegade Craft LA - this weekend</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Dec 09, 2015">Dec 09, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Come by and see us at booth #159 this weekend in Los Angeles! We will have tons of inventory on sale for your shopping pleasure and it's always a good...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/56380225-yoga-mat-giveaway-time">Yoga Mat Giveaway Time !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 11, 2015">Nov 11, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Enter to win a FREE STARWATER YOGA MAT ! For real ! It is so easy : Like us on Facebook and SHARE the Giveaway post with the hashtag #1111YOGAGIVEAWAY AND...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/50115905-collection-no-32">Collection no. 32</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 20, 2015">Oct 20, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">....... Well Happy Birthday to meeeee! This collection is finally available online. There are no words to express the relief I feel in having made it to this point. Running...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/48437633-new-collections-coming-soon">New collections coming soon!!!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 15, 2015">Oct 15, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">..... It's going to be my first new collection in a year an a half so you can imagine I'm pretty excited.. I also think, LIKE ALWAYS, that it's my...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/44449793-paris-color-patterns">Paris Color + Patterns</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Sep 13, 2015">Sep 13, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We recently spent 6 days exploring Paris before heading off to other parts of France. It was one of the most visually enriching experiences of my life.  OUI MERCI Luxembourg Gardens...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/30665217-custom-products-launch">custom products launch !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jun 04, 2015">Jun 04, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">It's been a real long time coming ... we are so excited to finally share with our community what we've been up to so far this year. We have completely...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/28615297-were-hiring">We're Hiring !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="May 15, 2015">May 15, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Seeking bright, organized, reliable and WONDERFUL person to join our team as an OFFICE COORDINATOR. Please spread the word to Los Angeles based friends who may fit this description, Thanks...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/18634709-creative-adventures">Creative Adventures</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Apr 21, 2015">Apr 21, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Now that it's springtime I am feeling like it's (finally) time to come out of hibernation mode and start sharing what I've been up to. I had the great fortune...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/16587641-happy-new-year">Happy New Year !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jan 20, 2015">Jan 20, 2015</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I hope your new year is filled with vibrant color and love.... From top to bottom : Plastic flower inspiration at Micheal's Craft, NYE after the balloon drop at the...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/15778053-upcoming-holiday-shopping-events">Upcoming Holiday Shopping Events!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 13, 2014">Nov 13, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We'll be at  Unique LA Dec 6 and 7th in downtown LA.. Then the following weekend we will be at the Renegade Craft Show in Grand Park in Downtown LA...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/15559801-i-spill-my-secrets">I spill my 'secrets' ..</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 15, 2014">Oct 15, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I was reluctant to agree to this podcast interview but of course it ended up being really fun. Because who doesn't like talking about themselves right!? LOL. I enjoyed walking...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/15537001-crazy-past-few-months">Crazy past few months !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 08, 2014">Oct 08, 2014</time></span>
    
    
    <span class="comment-count">1 comment</span>
     
 
    <div class="clear"></div>
    <div class="rte">Since I last posted we have done two Renegade shows, a week long Kundalini yoga training course, MOVED OUR ENTIRE HOME AND OFFICE, went on a cruise with the inlaws,...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/15019289-summer-time-travels">Summer time travels !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Aug 01, 2014">Aug 01, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">HELLO !!!! . We've been lucky to travel a little bit this summer - here are a few pics from our adventures... . We stayed for a week on a...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/14848625-summer-show-schedule">Summer Show Schedule !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jul 14, 2014">Jul 14, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Coming up this weekend ! This is always a great show and we are really looking fwd to it. Packing the car up with all kinds of new stuff (...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/14526717-yoga-mat-giveaway">YOGA MAT GIVEAWAY</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jun 18, 2014">Jun 18, 2014</time></span>
    
    
    <span class="comment-count">3 comments</span>
     
 
    <div class="clear"></div>
    <div class="rte">Would you like to win a STARWATER YOGA MAT for zero dollars !? I thought so! Enter to win below -- it's super easy.  I'm hoping this gets shared far...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/14321545-its-june-already">It's June already ?!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jun 02, 2014">Jun 02, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">insta pic of my hotel room nightstand while I was in SF for the Maker Faire ! Gotta have my crystals and magic zebra notebook to super charge the sleep...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/13998665-unique-la-this-weekend">Unique LA this weekend !!!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Apr 30, 2014">Apr 30, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We are working hard over here to get ready for Unique LA this weekend!! If you are in Los Angeles I would love to see you there! We'll have our...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/13884317-spring-is-here">SPRING is HERE</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Apr 24, 2014">Apr 24, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">  I am *SUPERLATIVELY* thrilled to officially launch the  2014 Spring / Summer Collection prints today -- all 26 of them! Please have a look at this link ------------------&gt;  here...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/13462001-inspiration-and-new-collection-update">Inspiration and New Collection Update</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Apr 07, 2014">Apr 07, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I love this lady I saw this and remembered the telephone pole used to be a tree! I have a thing for old TV's on the side of the road...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/12490569-magic-days">Magic days</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Feb 24, 2014">Feb 24, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I'm teaching Kundalini yoga at Ra Ma Yoga in Venice now! parking lot selfie in my yoga barbie outfit california poppies closing for the evening i adore the baked goods...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/8449381-luggage-tags-sneak-peek">luggage tags sneak peek !!!!!!!!!!!!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Feb 21, 2014">Feb 21, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">on my way to visit my parents back east a few weeks ago i had 5 hours to spare so i finally was able to work on the luggage tag...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/12230177-introducing-jamilastarwater-com">Introducing JamilaStarwater.com</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Feb 11, 2014">Feb 11, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">  I have been working on a new website for over 9 months now and I'm super excited to finally share it with you! JamilaStarwater.com is all about exploring design,...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/12206393-sneak-peek-25-brand-new-patterns">SNEAK PEEK : 25 brand new patterns</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Feb 10, 2014">Feb 10, 2014</time></span>
    
    
    <span class="comment-count">4 comments</span>
     
 
    <div class="clear"></div>
    <div class="rte">Here are some screen shots to show you the results of my designing blitz ! I'm sooo excited to show you the designs in real life on our products --...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/11906829-the-new-passport-holder-design-bonanza">The New Passport Holder Design Bonanza !!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jan 28, 2014">Jan 28, 2014</time></span>
    
    
    <span class="comment-count">2 comments</span>
     
 
    <div class="clear"></div>
    <div class="rte">So I am on a mission to design at least 30 new passport holders within the next week. I already have a good jump start, but it is going to...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/11591693-happy-2014">HAPPY 2014 !</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Jan 14, 2014">Jan 14, 2014</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I hope you have been as lazy as possible these last few weeks (like me). After a crazy holiday season it's been all I can do to just get dressed...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/10608881-thank-you">Thank you !!!!!!!!!!!!!!!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Dec 04, 2013">Dec 04, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Just a quick thank you to everyone that is shopping on this here website for your holiday gifts. Your orders mean the world to us!!!!!!!!! WE LOVE YOUR BUSINESS !!!!...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/10558781-cyber-sale-today-only">CYBER SALE TODAY ONLY</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Dec 02, 2013">Dec 02, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">CYBER MONDAY! * Get 10% off on $25 or more - Use code MEGT1CX3W at checkout Get 20% off on $50 or more - Use code B8ZRT6HHY at checkout *...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/10500125-this-holiday-season">This holiday season...</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 29, 2013">Nov 29, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte"></div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/10500109-what-is-a-black-friday">What is a Black Friday ?</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 29, 2013">Nov 29, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">( I don't usually re post my mailing list emails to my blog but today i couldn't resist ! also - there is a SALE!) BUY ! WHY ?As someone...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9996109-upcoming-holiday-craft-shows">upcoming holiday craft shows!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 14, 2013">Nov 14, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">We are  busy preparing for our holiday shows happening this December in San Francisco and Los Angeles! On the weekend of Dec 7+8 we will be at the San Francisco...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9997593-flip-tumble-bags">Flip + Tumble bags</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 12, 2013">Nov 12, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I was so excited when we started selling these excellent bags last year on our website. They are the only reusable grocery bags that easily fold up into a cute...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9999261-introducing-a-surprise-in-every-box">Introducing.. a Surprise in every Box!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 11, 2013">Nov 11, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">  We made this commercial in 2010 but are releasing it today for the first time - on 11/11/13 ! This gem got delayed in post production a little bit...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/8449823-thirteen-bird-theme-passport-holders">Thirteen (!!) Bird Theme Passport Holders</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 08, 2013">Nov 08, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">I am pretty sure we offer the most bird themed passport holders of any small California based accessories company.. or maybe any company.. anywhere?! ! I decided to round them...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9995385-the-secret-of-the-donut">The Secret of the Donut</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 08, 2013">Nov 08, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">Ok first of all. DONUTS. ARE. SO. BEAUTIFUL. That is why I had to make this new donut secret print. I freaking love the way donuts look. Ok I love...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9994633-11-11-near-you">11:11 near you!</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Nov 07, 2013">Nov 07, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">  I made this little PSA last year for facebook and since we are heading in to the holiday shopping season I thought it would be a good time to...</div>

  </div>
</div>
  
	<div class="single-article desktop-6 tablet-3 mobile-3">

  <h3><a href="/blogs/blog/9807832-luggage-tag-favorites">Luggage Tag Favorites</a></h3>
  <div class="article-content">
    
  </div>       

  <div class="article-body">
    
    <span class="posted">Posted on <time datetime="Oct 24, 2013">Oct 24, 2013</time></span>
     
 
    <div class="clear"></div>
    <div class="rte">It's time to book your tickets for holiday traveling!! Therefore... you need these. haha. I made a little round up for you of my fav luggage tags from the 12...</div>

  </div>
</div>
  
</ul> 

<div class="clear"></div>


  <div id="pagination" class="desktop-12 mobile-3"> 
    <span class="count">Showing items 1-50 of 607.</span>
    
    
    
    
    <span class="current">1</span>
    
    
    
    
    <a href="/blogs/blog?page=2" title="">2</a>
    
    
    
    <a href="/blogs/blog?page=3" title="">3</a>
    
    
    
    
    &hellip;
    
    
    
    
    <a href="/blogs/blog?page=13" title="">13</a>
    
    
    
    <a href="/blogs/blog?page=2" title="">></a>
    
  </div>







  
      </div>
      

    </div>
    

    <footer>
      <div id="footer-wrapper">	
        <div id="footer" class="row">
          
          
          
           
                  
          
          <div class="desktop-6 tablet-half mobile-half">
            <h4>Navigation</h4>
            <ul>
              
              <li><a href="/pages/about" title="">About Us</a></li>
              
              <li><a href="/pages/shipping-info" title="">Shipping + Returns</a></li>
              
              <li><a href="/pages/international-orders-2" title="">International Orders</a></li>
              
              <li><a href="/pages/product-demos" title="">Product Demos</a></li>
              
              <li><a href="/pages/faq" title="">FAQ</a></li>
              
              <li><a href="/pages/word-up" title="">Testimonials</a></li>
              
              <li><a href="/pages/stores-1" title="">Stores</a></li>
              
              <li><a href="/pages/wholesale" title="">Wholesale Info</a></li>
              
              <li><a href="/pages/contact" title="">Contact</a></li>
              
              <li><a href="/blogs/blog" title="">11:11 Blog</a></li>
              
            </ul>
          </div>
          
          
          <div class="desktop-6 tablet-half mobile-3">
            <h4>Connect</h4>
            <div id="footer_signup">
              <p>Join our mailing list & get 20% off your first purchase! YAY!</p>
              <form action="//eleveneleven.us2.list-manage.com/subscribe/post?u=2af0340195b469129d0d04ab2&amp;id=448bc62e62" method="post" id="footer-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank">
                <input value="" name="EMAIL" class="email" id="footer-EMAIL" placeholder="Enter Your Email Address" required="" type="email">
                <input value="Join" name="subscribe" id="footer-subscribe" class="button" type="submit">
              </form>
            </div> 
          </div>      
          
          <div class="clear"></div>
          <ul id="footer-icons" class="desktop-12 tablet-6 mobile-3">
            <li><a href="http://www.facebook.com/1111enterprises/" target="_blank"><i class="icon-facebook icon-2x"></i></a></li>
            
            <li><a href="http://www.pinterest.com/1111enterprises/" target="_blank"><i class="icon-pinterest icon-2x"></i></a></li>
            
            
            
            <li><a href="//instagram.com/1111enterprises" target="_blank"><i class="icon-instagram icon-2x"></i></a></li>
            
          </ul>      
          <div class="clear"></div>
          <div class="credit desktop-12 tablet-6 mobile-3">
            <p>
              Copyright &copy; 2019 <a href="/" title="">11:11 Enterprises - Passport Holders, Card Holders, Wallets, Notebooks, &amp; More</a> • 
              <a href="//www.shopifythemes.net" target="_blank" title="Shopify theme">Shopify Theme</a>
              by Underground Media • 
              <a target="_blank" rel="nofollow" href="https://www.shopify.com?utm_campaign=poweredby&amp;utm_medium=shopify&amp;utm_source=onlinestore">Ecommerce Software by Shopify</a>
            </p>
          </div>
        </div> 
      </div>
    </footer>

    

<div style="display:none">
  <div id="subscribe_popup" class="row">
    
    <div class="left fifty">
      <img src="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/popup-image.jpg?166">
    </div>
    

    <div class="right fifty">
      <h3>Hello You!</h3>
      <p>Enter your email address for stock alerts, discounts, promotions and more!</p>    
      <!-- BEGIN #subs-container -->
      <div id="subs-container" class="clearfix">
        <div id="mc_embed_signup">
          <form action="//eleveneleven.us2.list-manage.com/subscribe/post?u=2af0340195b469129d0d04ab2&amp;id=448bc62e62" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank">
            <input value="" name="EMAIL" class="email" id="mce-EMAIL" placeholder="Enter Your Email Address" required="" type="email">
            <input value="Join" name="subscribe" id="mc-embedded-subscribe" class="button" type="submit">
          </form>
        </div>  
      </div>
      <div class="clear"></div>
      <ul id="footer-icons">
        <li><a href="http://www.facebook.com/1111enterprises/" target="_blank"><i class="icon-facebook icon-2x"></i></a></li>
        
        <li><a href="http://www.pinterest.com/1111enterprises/" target="_blank"><i class="icon-pinterest icon-2x"></i></a></li>
        
        
        
        <li><a href="http://instagram.com/1111enterprises" target="_blank"><i class="icon-instagram icon-2x"></i></a></li>
      </ul> 
    </div>
  </div>
</div>


    <div style='display:none'>
      <div id='search_popup' style='padding:30px;'>
        <p class="box-title">SEARCH THIS STORE<p>
        <!-- BEGIN #subs-container -->
        <div id="subs-container" class="clearfix">
          <div id="search">
            <form action="/search" method="get">
              <input type="text" name="q" id="q" placeholder="Enter your search terms" />
            </form>
          </div>  
        </div>
      </div>
    </div>    
  </div>  

	<nav class="shifter-navigation">
  <div class="search">
    <form action="/search" method="get">
      <input type="text" name="q" id="q" placeholder="Enter your search terms" />
    </form>           
  </div>
  <script type="text/javascript">
    $(document).ready(function($) {
      $('#accordion').find('.accordion-toggle').click(function(){

        //Expand or collapse this panel
        $(this).next().slideToggle('fast');

        //Hide the other panels
        $(".accordion-content").not($(this).next()).slideUp('fast');

      });

      $('#accordion').find('.accordion-toggle2').click(function(){

        //Expand or collapse this panel
        $(this).addClass('open');
        $(this).next().slideToggle('fast');

        //Hide the other panels

        $(".accordion-content2").not($(this).next()).slideUp('fast');

      });        


    });
  </script>    

  <ul id="accordion">    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li><a href="/collections/passport-holder" title="">Passports</a></li>
    
    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li><a href="/collections/luggage-tags" title="">Luggage Tags</a></li>
    
    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li class="accordion-toggle">Wallets</li>
    <div class="accordion-content">
      <ul class="sub">
        
        
        
        <li><a href="/collections/cardholders">Card Holders</a></li>
        
        
        
        
        <li><a href="/collections/checkbook-covers">Checkbook Covers</a></li>
        
        
        
        
        <li><a href="/collections/tri-fold-wallets">Tri-Fold Wallet</a></li>
        
        
        
        
        <li><a href="/collections/bi-fold-wallets">Bi-Fold Photo Wallet</a></li>
        
        
        
        
        <li><a href="/collections/condom-cases">Condom Cases</a></li>
        
        
      </ul>
    </div>
    
    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li class="accordion-toggle">Notebooks</li>
    <div class="accordion-content">
      <ul class="sub">
        
        
        
        <li><a href="/collections/notebooks">Pocket Notebooks</a></li>
        
        
        
        
        <li><a href="/collections/medium-notebooks">Large Notebooks</a></li>
        
        
        
        
        <li><a href="/collections/large-notebook">Extra-Large Notebooks</a></li>
        
        
      </ul>
    </div>
    
    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li><a href="/collections/limited-edition-t-shirts" title="">Limited Edition</a></li>
    
    
    
    <!-- If we are dealing with a mega navigation -->

          
    <!-- If we are not dealing with the mega navigation -->    
    
    
    <li><a href="/pages/custom-products-easy" title="">Custom</a></li>
    
    
      
  </ul>     


</nav> 



  <a href="#" class="scrollup"><i class="icon-angle-up icon-2x"></i> TOP</a>

  <!-- Begin Recently Viewed Products -->
  <script type="text/javascript" charset="utf-8">
    //<![CDATA[

    // Including api.jquery.js conditionnally.
    if (typeof Shopify.resizeImage === 'undefined') {
      document.write("\u003cscript src=\"\/\/cdn.shopify.com\/s\/assets\/themes_support\/api.jquery-e94e010e92e659b566dbc436fdfe5242764380e00398907a14955ba301a4749f.js\" type=\"text\/javascript\"\u003e\u003c\/script\u003e");
    }

    //]]>
  </script>

  <script src="//ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js" type="text/javascript"></script>
  <script src="//cdn.shopify.com/s/files/1/0092/8272/t/6/assets/jquery.products.min.js?166" type="text/javascript"></script>

    

  <div id="fb-root"></div>
  <script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=127142210767229";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

  

  



      
    


<div id="un-modal-background-for-full-img">
  <div id="un-modal-content-for-full-img">
    <span id="un-modal-close-btn-for-full-img">x</span>
    <img src="#" class="upsell-product-image-for-full-img">
    <div id="un-modal-description-for-full-img"></div>
    <a href="#" id="upsell-popup-close-link-for-full-img"></a>
  </div>
</div>

<div id="un-modal-background">
<div id="un-modal-content">
  <span id="un-modal-close-btn">x</span>
  <h2 id="un-modal-title"></h2>
  <div id="un-modal-description"></div>
  <div id="un-table-wrapper">
  <table id="upsell-product-table">
  </table>
  </div>
  <a href="#" id="upsell-popup-close-link"></a>
</div>
</div>

<script type="text/javascript">

  if(typeof window.un === "undefined"){
    window.un = {};
  }

  
  
  

  window.un.cache = {};
  window.un.cache.products = {};
  window.un.cache.collections = {};
  
  
  	window.un.cart = {"token":"d5db4da2a92692297de4c08b46432a67","note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"USD","items_subtotal_price":0,"cart_level_discount_applications":[]}
    window.un.cart.items = [];

    
    
    if (typeof window.un.cart.items == "object") {
      for (var i=0; i<window.un.cart.items.length; i++) {
        ["sku", "vendor", "url", "image", "handle", "product_type", "product_description"].map(function(a) {
          delete window.un.cart.items[i][a]
        })
      }
    }
   
</script>

<script type="text/javascript">window.un.datastore={"shop":{"id":null,"shopify_domain":"1111enterprises.myshopify.com","app_enabled":true,"primary_domain":"www.eleveneleven.net","timezone":"Eastern Time (US \u0026 Canada)","currency":"USD","money_format":"${{amount}}","money_with_currency_format":"${{amount}} USD","custom_css":"","theme_id":12,"hide_offer_if_already_declined":true,"max_products_to_show":3,"max_products_per_category_to_show":3,"num_days_before_showing_offer_again":1,"add_to_cart_button_bg_color":"","add_to_cart_button_text_color":"","add_to_cart_button_font_family":"","no_thanks_text_color":"","product_title_text_color":"","regular_price_text_color":"","sale_price_text_color":"","popup_bg_color":"","popup_title_text_color":"","popup_description_text_color":"","popup_font_family":"","add_to_cart_button_text":"Add to Cart","added_to_cart_button_text":"Added to Cart","no_thanks_text":"No thanks","add_to_cart_form_selector":"","add_to_cart_button_selector":"","variant_selector":"","swatch_selector":"","checkout_button_selector":"","cart_form_selector":"","quantity_selector":"","quantity_button_selector":"","mutation_classes":"","mutation_ids":"","line_item_discount_amount_message":"You saved {{discount_amount}} on each","line_item_set_price_message":"Only {{set_price}} each","line_item_message_key":"Special Offer","cart_subtotal_selector":"","discount_title":"Special Discount","redirecting_to_checkout_text":"Redirecting you to checkout","ajax_cart_integration_enabled":true,"ajax_line_item_total_price_selector":"","ajax_line_item_unit_price_selector":"","cart_item_key_var":"","hide_express_checkout_buttons":true,"sold_out_button_text":"Sold Out","cart_bar_enabled":true,"cart_bar_text":"You're saving money on your order.","cart_bar_bg_color":"","cart_bar_text_color":"","cart_bar_padding":null,"cart_bar_font_size":null,"cart_bar_font_family":"","cart_bar_placement_selector":"","cart_bar_placement_position":"","cart_bar_ajax_placement_selector":"","cart_bar_ajax_placement_position":"","cart_bar_border_radius":null,"cart_bar_fade_in_duration":null,"cart_bar_fade_out_duration":null,"cart_bar_display_duration":null,"enabled_on_homepage":true,"enabled_on_collection_pages":true,"insufficient_stock_message":"Only {quantity} in stock","remove_upsell_products_if_original_product_removed":true,"remove_upsell_products_if_trigger_products_removed":false,"prevent_upsell_product_qty_change":true,"removing_original_product_will_remove_upsell_products_warning":"Warning: Removing {{original_product}} from your cart will also remove your special offers: {{upsell_products}}. Continue?","removing_trigger_products_will_remove_upsell_products_warning":"Warning: Removing {{trigger_products}} from your cart will also remove your special offers: {{upsell_products}}. Continue?"},"offers":[{"upsell_products":[{"id":null,"shopify_product_id":3950491304049,"handle":"christmas-in-the-summertime-giveaway"}],"upsell_collections":[],"trigger_products":[],"trigger_collections":[],"product_pages":[],"collection_pages":[],"id":3247,"shop_id":3885,"offer_name":"Christmas in July (+August) Giveaway!","discount_type":"no_discount","discount_fixed_amount":null,"discount_price":null,"discount_percent":null,"trigger_event":"add_to_cart","popup_title":"","popup_description":"","popup_success_message":null,"start_date":"2019-07-17T00:00:00.000Z","end_date":"2019-09-03T06:59:00.000Z","disable_for_logged_in_customers":false,"created_at":"2019-07-16T22:13:12.980Z","updated_at":"2019-08-30T23:13:19.489Z","offer_enabled":true,"upsell_qty":1,"trigger_qty":1,"required_minimum_cart_value":2500,"hide_out_of_stock_products":false,"hide_products_already_in_cart":false,"show_quantity_field":false,"show_variant_field":false,"close_popup_on_atc":false,"product_links_enabled":true,"product_image_setting":"show_product_image"},{"upsell_products":[{"id":null,"shopify_product_id":159622371,"handle":"star-chart-covered-moleskine-cahier-pocket-notebook"}],"upsell_collections":[],"trigger_products":[],"trigger_collections":[],"product_pages":[],"collection_pages":[],"id":6086,"shop_id":3885,"offer_name":"Star Chart Pocket Notebook","discount_type":"set_price","discount_fixed_amount":null,"discount_price":0,"discount_percent":null,"trigger_event":"add_to_cart","popup_title":"Free Star Chart pocket notebook with your purchase of $40 or more","popup_description":"","popup_success_message":null,"start_date":"2019-08-30T03:49:00.000Z","end_date":"2019-09-03T06:59:00.000Z","disable_for_logged_in_customers":false,"created_at":"2019-08-30T18:52:25.917Z","updated_at":"2019-08-30T23:14:23.214Z","offer_enabled":true,"upsell_qty":1,"trigger_qty":1,"required_minimum_cart_value":4000,"hide_out_of_stock_products":false,"hide_products_already_in_cart":false,"show_quantity_field":false,"show_variant_field":true,"close_popup_on_atc":false,"product_links_enabled":false,"product_image_setting":"show_product_image"}],"theme_setting":{"id":12,"theme_name":"Default","cart_subtotal_selector":".cart__subtotal:visible, h2.subtotal:visible, p.subtotal_amount:visible, span.total:visible, .mini-cart__total-price:visible, .cart__total:visible, #cartform div.align-right h2:visible, .ajaxcart__subtotal:visible, .cart-total:visible, #basket-right h4:visible, .subtotal .price:visible, .cart-footer__subtotal:visible, .cart-subtotal--price:visible, .cart-drawer__subtotal-price:visible","checkout_button_selector":"input[type='submit'].action_button.right:visible,input[name='checkout']:visible,button[name='checkout']:visible,[href$='checkout']:visible,input[name='goto_pp']:visible,button[name='goto_pp']:visible,input[name='goto_gc']:visible,button[name='goto_gc']:visible,.additional-checkout-button:visible,.google-wallet-button-holder:visible,.amazon-payments-pay-button:visible","add_to_cart_form_selector":"form[action=\"/cart/add\"]","add_to_cart_button_selector":"form[action^='/cart/add']:first [type=submit]:visible:first","quantity_selector":"input.cart-item__qty-input, input.quantity, input[name='updates[]'], input[id^='updates_'], input[id^='Updates_'], input[name^='updates_'], input.cart__qty-input, input.count, input.js-qty__input, input.js-qty__num, input.quantity-selector, input.cart__quantity-selector, input.js--num, input.cart-drawer__item-quantity","cart_form_selector":"form[action$='cart']","quantity_button_selector":"form[action=\"/cart\"] .js--qty-adjuster, form[action=\"/cart\"] .js-qty__adjust","variant_selector":"form[action^='/cart/add']:first select:visible, .radio-wrapper fieldset, form[action^='/cart/add']:first input[type='radio']","swatch_selector":".swatchColor, .panda-swatch, button.swatch, div.swatch-element, div.swatch-item, .product-variant ul li, div.swatches-container ul.options li a, div.template--product-variants-container div.product-variant-group label","mutation_ids":"","mutation_classes":"","line_item_unit_price_selector":"{{ item.price | money }},{{ item.original_price | money }}","line_item_total_price_selector":"{{ item.line_price | money }},{{ item.original_line_price | money }}","custom_css":"","created_at":"2019-04-23T22:36:47.165Z","updated_at":"2019-05-21T17:02:22.353Z","ajax_line_item_total_price_selector":"","ajax_line_item_unit_price_selector":"","cart_item_key_var":"","cart_bar_placement_selector":"form[action$='cart']:first","cart_bar_placement_position":"prepend","cart_bar_ajax_placement_selector":"","cart_bar_ajax_placement_position":""}};</script>



<script id="upsell-popup-product-row" type="text/x-handlebars-template">
<tr class="upsell-product-row" id="upsell-product-{{upsell_product_id}}">
  {{#if show_full_product_image }}
    <td>
      <img src="{{upsell_product_img_src}}" class="upsell-product-image popup-cursor">
    </td>
    {{else if show_product_image}}
    <td>
      <img src="{{upsell_product_img_src}}" class="upsell-product-image">
    </td>
  {{/if}}
  <td>
    {{#if product_links_enabled }}
      <a href="{{upsell_product_link}}" target="_blank">
        <span class="upsell-product-title">{{upsell_product_title}}</span>
      </a>
    {{else}}
      <span class="upsell-product-title">{{upsell_product_title}}</span>
    {{/if}}
    {{#if upsell_hide_quantity_field}}
        <span class="upsell-product-qty">x {{upsell_product_qty}}</span>
    {{/if}}
    <br />
    <span class="upsell-product-original-price">{{upsell_product_original_price}}</span>
    <span class="upsell-product-price">{{upsell_product_price}}</span>
    {{#if upsell_show_variant_field}}
        <div class="upsell-product-variant-container">{{{upsell_product_variants}}}</div>
    {{/if}}
  </td>
  {{#if upsell_show_quantity_field}}
      <td>
        <input type="number" name="quantity" value="{{upsell_product_qty}}" min="1" class="upsell-now-quantity-field" pattern="[0-9]*" data-variant-id="{{upsell_variant_id}}" id="upsell-now-qty-{{upsell_variant_id}}"
        data-product-id="{{upsell_product_id}}">
      </td>
  {{/if}}
  <td>
    {{#if upsell_product_out_of_stock}}
        <button class="upsell-product-add-to-cart upsell-product-disabled" data-id="{{upsell_variant_id}}" data-quantity="{{upsell_product_qty}}"
        data-product-id={{upsell_product_id}}
        disabled>{{upsell_product_sold_out_text}}</button>
    {{/if}}
    {{#if upsell_product_in_stock}}
        <button class="upsell-product-add-to-cart" data-id="{{upsell_variant_id}}" data-quantity="{{upsell_product_qty}}" data-product-id={{upsell_product_id}}
        >{{upsell_product_add_to_cart_text}}</button>
    {{/if}}
  </td>
</tr>
</script>

<script type="text/javascript">
/**!

 @license
 handlebars v4.1.0

Copyright (C) 2011-2017 by Yehuda Katz

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.1.0";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;","=":"&#x3D;"},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g=0,h=b.length;g<h;g++){var i=b[g].part,j=b[g].original!==i;if(d+=(b[g].separator||"")+i,j||".."!==i&&"."!==i&&"this"!==i)e.push(i);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)this.options.knownHelpers[d]=c[d];return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return"constructor"===b?["(",a,".propertyIsEnumerable('constructor') ? ",a,".constructor : undefined",")"]:e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n  ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend("  + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));
for(var h=b.length;c<h;c++)this.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add(["  ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});

var unHandleBars = Handlebars.create();
</script>
<script>
var loadScript = function (url, callback) {

    /* JavaScript that will load the jQuery library on Google's CDN.
       We recommend this code: http://snipplr.com/view/18756/loadscript/.
       Once the jQuery library is loaded, the function passed as argument,
       callback, will be executed. */

    var script = document.createElement("script");
    script.type = "text/javascript";

    if (script.readyState) { //IE
        script.onreadystatechange = function () {
            if (script.readyState == "loaded" ||
                script.readyState == "complete") {
                script.onreadystatechange = null;
                callback();
            }
        };
    }
    else { //Others
        script.onload = function () {
            callback();
        };
    }

    script.src = url;
    document.getElementsByTagName("head")[0].appendChild(script);

};

var myFrontendJavascriptUN = function ($) {
    var helper = new Helper();
    var shop = helper.getShopInDatastore();
    var cart = new Cart();

    var ORIGINAL_PRODUCT_PERM_LINK_NAME = "_un_discounted_line_item_original_product_link_perm_";
    var ORIGINAL_PRODUCT_TEMP_LINK_NAME = "_un_discounted_line_item_original_product_link_temp_";

    var CART_REMOVE_BUTTON_SELECTOR = '.btn-link, .remove, a:contains(emove), .cart__remove a, .cart-drawer__item-delete, [data-cart-item-delete], .un-remove-btn';

    function Helper(){
        var self = this;

        var log = function(message){
            if(typeof un.debug === "undefined"){
                un.debug = [];
            }
            un.debug.push(message);
        };

        var stringChecker = function(stringToCheck) {
            return (typeof stringToCheck === "string") && stringToCheck !== "";
        };

        var objectChecker = function(objectToCheck) {
            return (typeof objectToCheck !== "undefined") && objectToCheck != null && objectToCheck !== false
        };

        var arrayChecker = function(arrayToCheck) {
            return (typeof arrayToCheck !== "undefined") && arrayToCheck != null && arrayToCheck.length > 0
        };

        var unFormatCents = function(cents, format) {
            if (typeof cents == "undefined" || cents == null) { return ""; }
            if (typeof cents == "string" && cents.length == 0) { return ""; }

            var moneyRegex = /\{\{\s*(\w+)\s*\}\}/;
            if (typeof cents == "string") {
                cents = cents.replace(".", "");
            }

            function defOpt(opt, def) { return typeof opt == "undefined" ? def : opt; }

            function displayDelims(n, p, t, d) {
                p = defOpt(p, 2);
                t = defOpt(t, ",");
                d = defOpt(d, ".");
                if (isNaN(n) || n == null) {
                    return 0;
                }
                n = (n / 100).toFixed(p);
                var parts = n.split("."),
                    dollars = parts[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1" + t),
                    cents = parts[1] ? d + parts[1] : "";
                return dollars + cents;
            }

            var val = "";
            switch (format.match(moneyRegex)[1]) {
                case "amount":
                    val = displayDelims(cents, 2);
                    break;
                case "amount_no_decimals":
                    val = displayDelims(cents, 0);
                    break;
                case "amount_no_decimals_with_comma_separator":
                    val = displayDelims(cents, 0, ".", ",");
                    break;
                case "amount_with_comma_separator":
                    val = displayDelims(cents, 2, ".", ",");
                    break;
            }
            return format.replace(moneyRegex, val);
        };

        var unFormatPercent = function(decimalPercent) {
            return Math.round(decimalPercent * 100) + "%";
        };

        var getShopifyDomain = function() {
            if((typeof un.datastore.shop.shopify_domain !== "undefined") && un.datastore.shop.shopify_domain.length > 0){
                var shopifyDomain = un.datastore.shop.shopify_domain;
            }else {
                shopifyDomain = "1111enterprises.myshopify.com";
            }
            return shopifyDomain;
        };

        var getServerAddress = function() {
            if(getShopifyDomain() === "un-chris-local.myshopify.com"){
                return "https://wod.ngrok.io";
            }else{
                return "https://upsell-now.herokuapp.com";
            }
        };

        var checkDatastore = function() {
            return !(typeof window.un === "undefined" || typeof window.un.datastore === "undefined");
        };

        var checkSettingsInDatastore = function() {
            return getShopInDatastore() && (getOffersInDatastore()).length > 0;
        };

        var getShopInDatastore = function(){
            if (checkDatastore() && typeof window.un.datastore.shop !== "undefined") {
                return window.un.datastore.shop;
            }
            else {
                return false;
            }
        };

        var getOffersInDatastore = function() {
            if (checkDatastore() && typeof window.un.datastore.offers !== "undefined") {
                return window.un.datastore.offers;
            }
            else {
                return [];
            }
        };

        var getOfferObjects = function() {
            if (typeof window.un !== "undefined" && typeof window.un.offers !== "undefined") {
                return window.un.offers;
            }
            else {
                return [];
            }
        };

        var getOfferById = function(offerId){
            var offer = false;
            var offers = self.getOfferObjects();
            if(helper.arrayChecker(offers)){
                $.each(offers,function(index, offerElement){
                    if(offerId === offerElement.id){
                        offer = offerElement;
                    }
                });
            }
            return offer;
        };

        //Detect product page
        var onProductPage = function() {
            return window.location.href.indexOf("/products") !== -1;
        };

        //Detect product page
        var onCartPage = function() {
            return window.location.href.indexOf("/cart") !== -1;
        };

        //Detect collection page
        var onCollectionPage = function() {
            return window.location.href.indexOf("/collections") !== -1
        };

        //Detect home page
        var onHomePage = function() {
            return window.location.pathname === "/";
        };

        var enabledOnHomePage = function(){
            return window.un.datastore.shop.enabled_on_homepage;
        };

        var enabledOnCollectionPage = function(){
            return window.un.datastore.shop.enabled_on_collection_pages;
        };

        var enabledOnCurrentPage = function(){
            return (helper.onHomePage() && helper.enabledOnHomePage())
                || (helper.onCollectionPage() && helper.enabledOnCollectionPage())
                || (!helper.onHomePage() && !helper.onCollectionPage());
        };

        var getQuantityDesired = function(){
            var quantityDesired = 1;
            if($("form[action=\"/cart/add\"]:first").find("input[name=quantity]:visible").length > 0){
                quantityDesired = $("form[action=\"/cart/add\"]:first").find("input[name=quantity]:visible").val();
            }
            return quantityDesired;
        };

        var mergeThemeAndShopSettings = function(){
            var theme_setting = window.un.datastore.theme_setting,
                shop = window.un.datastore.shop,
                mergeMapping = [
                    ["cart_subtotal_selector", "cart_subtotal_selector"],
                    ["checkout_button_selector", "checkout_button_selector"],
                    ["add_to_cart_form_selector", "add_to_cart_form_selector"],
                    ["add_to_cart_button_selector", "add_to_cart_button_selector"],
                    ["quantity_selector", "quantity_selector"],
                    ["cart_form_selector", "cart_form_selector"],
                    ["quantity_button_selector", "quantity_button_selector"],
                    ["variant_selector", "variant_selector"],
                    ["swatch_selector", "swatch_selector"],
                    ["mutation_ids", "mutation_ids"],
                    ["mutation_classes", "mutation_classes"],
                    ["cart_bar_placement_selector", "cart_bar_placement_selector"],
                    ["cart_bar_placement_position", "cart_bar_placement_position"],
                    ["cart_bar_ajax_placement_selector", "cart_bar_ajax_placement_selector"],
                    ["cart_bar_ajax_placement_position", "cart_bar_ajax_placement_position"],
                ];

            $.each(mergeMapping, function (index, mapping) {
                shop[mapping[0]] = self.mergeValues(shop[mapping[0]], theme_setting[mapping[1]]);
            });

            if (shop.custom_css == null) {
                shop.custom_css = "";
            }

            if (stringChecker(theme_setting.custom_css)) {
                shop.custom_css = shop.custom_css + "\r\n" + theme_setting.custom_css;
            }

            if (stringChecker(shop.custom_css)) {
                $("head").append("<style type=\"text/css\">" + shop.custom_css + "</style>");
            }

            window.un.datastore.shop = shop;
            window.un.addedToCart = {};
        };

        var mergeValues = function(firstValue, secondValue) {
            if (stringChecker(firstValue)) {
                return firstValue;
            }
            else {
                return secondValue;
            }
        };

        var setCookie = function (cookieName, cvalue, exdays) {
            var d = new Date();
            d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
            var expires = "expires="+d.toUTCString();
            document.cookie = cookieName + "=" + cvalue + ";" + expires + ";path=/";
        };

        var expireCookie = function (cookieName) {
            var d = new Date();
            d.setTime(d.getTime() - (30 * 24 * 60 * 60 * 1000));
            var expires = "expires="+d.toUTCString();
            document.cookie = cookieName + "=;" + expires + ";path=/";
        };

        var getCookie = function (cookieName) {
            var name = cookieName + "=";
            var ca = document.cookie.split(';');
            for(var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        };

        var getCookiesWithPartialName = function (cookieName) {
            var matchingCookies = [];
            var name = cookieName;
            var ca = document.cookie.split(';');
            for(var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    matchingCookies.push(c);
                }
            }
            return matchingCookies;
        };

        var getCurrentVariantId = function() {
            var currentVariant = (location.search).match(/variant=([0-9]+)/);
            if (currentVariant != null) {
                return currentVariant[1];
            } else {
                if ($(shop.add_to_cart_form_selector).find("select[name=\"id\"], input[name=\"id\"]").attr("type") === "radio") {
                    return $(shop.add_to_cart_form_selector).find("input[name=\"id\"]:checked").val();
                }
                else {
                    return $(shop.add_to_cart_form_selector).find("select[name=\"id\"], input[name=\"id\"]").val();
                }
            }
        };

        var getOfferIdForItemKeyFromCookie = function(itemKey){
            var offerId = self.getCookie("_un_discounted_line_item_" + itemKey);
            if(offerId === ""){
                return false;
            }else{
                if(offerId.indexOf("_") > -1){
                    return parseInt(offerId.split("_")[0]);
                }else{
                    return parseInt(offerId);
                }
            }
        };

        var getQuantityForItemKeyFromCookie = function(itemKey){
            var offerId = self.getCookie("_un_discounted_line_item_" + itemKey);
            if(offerId === ""){
                return false;
            }else{
                if(offerId.indexOf("_") > -1){
                    return parseInt(offerId.split("_")[1]);
                }else{
                    return false;
                }
            }
        };

        var enableSpinner = function(spinnerTarget) {
            var opts = {
                top: "-50px",
                left: "50%",
                position: "relative"
            };

            if (typeof Spinner === "function") {
                var spinner = new Spinner(opts).spin().el;
                $(spinnerTarget).first().after(spinner);
            }
        };

        var disableSpinner = function() {
            $(".spinner").remove();
        };

        var applyDisabledStyles = function(elementSelector){
            $(elementSelector).css("background","#EEEEEE");
            $(elementSelector).css("color","#FFFFFF");
            $(elementSelector).css("border","1px solid #DDDDDD");
        };

        var outOfStock = function(product){
            return !product.available;
        };

        var applyStyle = function(className, cssProperty, cssValue){
            if(helper.stringChecker(cssValue)) {
                $(className).css(cssProperty,cssValue);
            }
        };

        var notInDebugMode = function(){
            return window.location.href.indexOf("upsell-now-debug") < 0;
        };

        var noNegative = function (amount){
            if (amount < 0){
              return 0;
            }else {
              return amount;
            }
        };

        var checkMutations = function(mutation, typeOfCheck) {
            return this.checkMutationIds(mutation, typeOfCheck) || this.checkMutationClasses(mutation, typeOfCheck);
        };

        var checkMutationClasses = function(mutation, typeOfCheck) {
            var classArray = [], classFound = false;
            if (typeOfCheck === "ajaxCart") {
                classArray = ["drawer", "cart-drawer__item-list", "cart-item__qty", "mm-opened", "cart-sidebar", "opened", "cart-preview", "ajaxcart__inner", "cart--is-visible"];
            }
            $.each(classArray, function (index, className) {
                if (typeof mutation.target.classList !== "undefined" && mutation.target.classList.contains(className)) {
                    classFound = true;
                }
            });
            return classFound;
        };

        var checkMutationIds = function(mutation, typeOfCheck) {
            var idArray = [];
            if (typeOfCheck === "ajaxCart") {
                idArray = ["ajaxifyCart", "cart-loading", "AjaxifyCart", "layer-addcart-modal"];
            }
            return idArray.indexOf(mutation.target.id) > -1;
        };

        var arrayify = function(element){
            if(typeof element === "string"){
                var newArray = [];
                newArray.push(element);
                return newArray;
            }else{
                return element;
            }
        };

        var getDiscountedLineItemsFromCookies = function(){
            var discountedLineItems = helper.getCookiesWithPartialName("_un_discounted_line_item_");
            discountedLineItems = discountedLineItems.filter(function(item){
                return item.indexOf(ORIGINAL_PRODUCT_TEMP_LINK_NAME) < 0 && item.indexOf(ORIGINAL_PRODUCT_PERM_LINK_NAME) < 0;
            });
            return discountedLineItems;
        };

        this.stringChecker = stringChecker;
        this.objectChecker = objectChecker;
        this.arrayChecker = arrayChecker;
        this.unFormatCents = unFormatCents;
        this.unFormatPercent = unFormatPercent;
        this.getShopifyDomain = getShopifyDomain;
        this.getServerAddress = getServerAddress;
        this.checkDatastore = checkDatastore;
        this.checkSettingsInDatastore = checkSettingsInDatastore;
        this.getShopInDatastore = getShopInDatastore;
        this.getOffersInDatastore = getOffersInDatastore;
        this.getOfferObjects = getOfferObjects;
        this.onProductPage = onProductPage;
        this.onCartPage = onCartPage;
        this.onCollectionPage = onCollectionPage;
        this.onHomePage = onHomePage;
        this.enabledOnHomePage = enabledOnHomePage;
        this.enabledOnCollectionPage = enabledOnCollectionPage;
        this.getQuantityDesired = getQuantityDesired;
        this.mergeThemeAndShopSettings = mergeThemeAndShopSettings;
        this.mergeValues = mergeValues;
        this.setCookie = setCookie;
        this.expireCookie = expireCookie;
        this.getCookie = getCookie;
        this.getCookiesWithPartialName = getCookiesWithPartialName;
        this.getOfferIdForItemKeyFromCookie = getOfferIdForItemKeyFromCookie;
        this.getQuantityForItemKeyFromCookie = getQuantityForItemKeyFromCookie;
        this.enableSpinner = enableSpinner;
        this.disableSpinner = disableSpinner;
        this.applyDisabledStyles = applyDisabledStyles;
        this.outOfStock = outOfStock;
        this.applyStyle = applyStyle;
        this.log = log;
        this.notInDebugMode = notInDebugMode;
        this.noNegative = noNegative;
        this.enabledOnCurrentPage = enabledOnCurrentPage;
        this.getCurrentVariantId = getCurrentVariantId;
        this.checkMutations = checkMutations;
        this.checkMutationClasses = checkMutationClasses;
        this.checkMutationIds = checkMutationIds;
        this.arrayify = arrayify;
        this.getDiscountedLineItemsFromCookies = getDiscountedLineItemsFromCookies;
        this.getOfferById = getOfferById;
    }

    function BundleEnforcer(offers){
        var self = this;

        var startBundleEnforcer = function(){
            self.checkBundleIntegrity();
        };

        var checkBundleIntegrity = function(){
            cart.updateCart(function(){
                self.switchTempOriginalProductLinksToLineItemKeys();
                self.clearOldLineItemKeys();
                if(shop.remove_upsell_products_if_original_product_removed) {
                    helper.log("Checking for original products");
                    self.initAjaxCartMutationObserver();
                    self.disableRemoveButtonClickListeners();
                    self.createRemoveButtonClickEventListener();
                    self.checkIfOriginalProductStillInCart();
                }
                if(shop.remove_upsell_products_if_trigger_products_removed){
                    helper.log("Checking for trigger product requirements");
                    self.checkTriggerProductRequirements();
                }
                if(shop.prevent_upsell_product_qty_change){
                    helper.log("Checking for upsell product quantity changes");
                    self.checkUpsellProductQtys();
                }
            });
        };

        var checkTriggerProductRequirements = function(){
            var discountedLineItems = helper.getDiscountedLineItemsFromCookies();
            var lineItemsToRemove = [];
            $.each(discountedLineItems,function(index,lineItem){
                var cookieName = lineItem.substring(0, lineItem.indexOf("="));
                var lineItemKey = cookieName.substring(cookieName.lastIndexOf("_")+1);
                var offerId = helper.getOfferIdForItemKeyFromCookie(lineItemKey);
                if(offerId){
                    var offer = helper.getOfferById(offerId);
                    if(offer){
                        if(!offer.checkIfTriggerProductsInCart()){
                            helper.log("Trigger products req not met for " + offerId + ". Removing associated upsell items.");
                            lineItemsToRemove.push(lineItemKey);
                        }
                    }
                }
            });
            if(lineItemsToRemove.length > 0){
                helper.log("Removing line items:" + lineItemsToRemove);
                cart.removeLineItemKeysFromCart(lineItemsToRemove);
            }
        };

        var clearOldLineItemKeys = function(){
            var discountedLineItems = helper.getDiscountedLineItemsFromCookies();
            $.each(discountedLineItems,function(index,lineItem){
                var cookieName = lineItem.substring(0, lineItem.indexOf("="));
                var lineItemKey = cookieName.substring(cookieName.lastIndexOf("_")+1);
                if(!cart.hasLineItemKey(lineItemKey)){
                    helper.expireCookie(cookieName);
                }
            });
        };

        var checkUpsellProductQtys = function(){
            var discountedLineItems = helper.getDiscountedLineItemsFromCookies();
            $.each(discountedLineItems,function(index, lineItem){
                var cookieName = lineItem.substring(0, lineItem.indexOf("="));
                var lineItemKey = cookieName.substring(cookieName.lastIndexOf("_")+1);
                var quantityAdded = helper.getQuantityForItemKeyFromCookie(lineItemKey);
                var quantityInCart = cart.getLineItemQuantity(lineItemKey);
                if(quantityAdded !== quantityInCart){
                    helper.log("Upsell product quantity changed for: " + lineItemKey + ". Resetting quantity.");
                    cart.changeQuantity(lineItemKey, quantityAdded);
                }
            });
        };

        var checkIfOriginalProductStillInCart = function(){
            var permLinks = helper.getCookiesWithPartialName(ORIGINAL_PRODUCT_PERM_LINK_NAME);
            $.each(permLinks,function(index, link) {
                var originalProductLineItemKey = link.substring(link.lastIndexOf("_")+1, link.indexOf("="));
                var upsellProductLineItemKeys = link.substring(link.indexOf("=")+1).split(",");
                if(!cart.hasLineItemKey(originalProductLineItemKey)){
                    helper.log("Original product line item key missing from cart. Removing upsell items.");
                    upsellProductLineItemKeys = helper.arrayify(upsellProductLineItemKeys);
                    helper.expireCookie(link.substring(0,link.indexOf("=")));
                    cart.removeLineItemKeysFromCart(upsellProductLineItemKeys);
                }else{
                    helper.log("Original product line item key found in cart.");
                }
            });
        };

        var switchTempOriginalProductLinksToLineItemKeys = function(){
            var originalProductToUpsellKeyMap = self.generateOriginalProductVariantIdToUpsellKeyMap();
            self.setOriginalProductLineItemKeyToUpsellItemKeysCookie(originalProductToUpsellKeyMap);
            self.clearTempOriginalProductLinkCookies();
        };

        var generateOriginalProductVariantIdToUpsellKeyMap = function(){
            var tempLinks = helper.getCookiesWithPartialName(ORIGINAL_PRODUCT_TEMP_LINK_NAME);
            var originalProductToUpsellKeyMap = {};
            $.each(tempLinks,function(index, link){
                var upsellLineItemKey = link.substring(ORIGINAL_PRODUCT_TEMP_LINK_NAME.length, link.indexOf("="));
                var originalProductVariantId = link.substring(link.indexOf("=")+1, link.length);
                if(!helper.objectChecker(originalProductToUpsellKeyMap[originalProductVariantId])){
                    originalProductToUpsellKeyMap[originalProductVariantId] = [];
                }
                originalProductToUpsellKeyMap[originalProductVariantId].push(upsellLineItemKey);
            });
            return originalProductToUpsellKeyMap;
        };

        var setOriginalProductLineItemKeyToUpsellItemKeysCookie = function(originalProductToUpsellKeyMap){
            $.each(Object.keys(originalProductToUpsellKeyMap), function(index, originalProductVariantId){
                var originalProductLineItemKey = cart.getLastLineItemKeyForVariantId(originalProductVariantId);
                if(originalProductLineItemKey){
                    var upsellKeyString = originalProductToUpsellKeyMap[originalProductVariantId].join(',');
                    if(helper.stringChecker(upsellKeyString) && helper.stringChecker(originalProductLineItemKey)){
                        helper.setCookie(ORIGINAL_PRODUCT_PERM_LINK_NAME + originalProductLineItemKey, upsellKeyString, 30);
                    }
                }
            });
        };

        var clearTempOriginalProductLinkCookies = function(){
            var tempLinks = helper.getCookiesWithPartialName(ORIGINAL_PRODUCT_TEMP_LINK_NAME);
            $.each(tempLinks,function(index, link) {
                var cookieName = link.substring(0, link.indexOf("="));
                helper.expireCookie(cookieName);
            });
        };

        var createRemoveButtonClickEventListener = function(){
            $(document).on('click', CART_REMOVE_BUTTON_SELECTOR, function (event) {
                event.stopPropagation();
                event.preventDefault();
                event.stopImmediatePropagation();
                cart.updateCart(function () {
                    self.switchTempOriginalProductLinksToLineItemKeys();
                    self.handleRemoveButtonClick(event);
                });
                return false;
            });
        };

        var initAjaxCartMutationObserver = function(){
            var trigger = false;
            var observer = new MutationObserver(function (mutations) {
                mutations.forEach(function (mutation) {
                    if (!trigger && helper.checkMutations(mutation, "ajaxCart")) {
                        setTimeout(function () {
                            helper.log("Ajax cart mutation triggered.");
                            self.disableRemoveButtonClickListeners();
                            self.checkBundleIntegrity();
                        }, 250);
                        trigger = true;
                    }
                });
                setTimeout(function () {
                    trigger = false;
                }, 2000);
            });

            var observerConfig = {
                attributes: true,
                childList: true,
                characterData: true,
                subtree: true
            };

            var targetNode = document.body;
            observer.observe(targetNode, observerConfig);
        };

        var disableRemoveButtonClickListeners = function(){
            //Narrative theme
            $('.cart-item__remove, .cart-drawer__item-delete').removeAttr("data-cart-item-delete");
            $.each($('.cart-item__remove'),function(index,element){
                $(element).replaceWith($(element).clone().removeClass("cart-item__remove").addClass("un-remove-btn"));
            });
        };

        var handleRemoveButtonClick = function(event){
            var originalProductKey = self.getRemovedLineItemKeyFromLink(event);
            if (originalProductKey) {
                var upsellProductKeys = helper.getCookie(ORIGINAL_PRODUCT_PERM_LINK_NAME + originalProductKey);
                if (helper.stringChecker(upsellProductKeys)) {
                    helper.log("Found upsell cookie, displaying warning");
                    self.showUpsellProductRemovalWarning(originalProductKey, upsellProductKeys);
                }else{
                    helper.log("Couldn't find upsell item cookie for removed item.");
                    var lineItemKeys = [];
                    lineItemKeys.push(originalProductKey);
                    cart.removeLineItemKeysFromCart(lineItemKeys);
                }
            }else{
                helper.log("Couldn't find line item key for removed item.");
            }
        };

        var showUpsellProductRemovalWarning = function(originalProductKey, upsellProductKeys){
            var originalProductName = self.convertProductKeysToProductNames(originalProductKey)[0];
            var upsellLineItemKeyArray = upsellProductKeys.split(",");
            var upsellProductNamesArray = self.convertProductKeysToProductNames(upsellLineItemKeyArray);
            if(upsellProductNamesArray.length > 0){
                var upsellProductNames = upsellProductNamesArray.join(", ");
                var originalProductDeletionWarning = shop.removing_original_product_will_remove_upsell_products_warning.replace("{{original_product}}", originalProductName).replace("{{upsell_products}}", upsellProductNames);
                originalProductDeletionWarning = $('<div/>').html(originalProductDeletionWarning).text();
                var r = confirm(originalProductDeletionWarning);
                if (r) {
                    var lineItemKeys = [];
                    lineItemKeys.push(originalProductKey);
                    lineItemKeys = lineItemKeys.concat(upsellLineItemKeyArray);
                    helper.expireCookie(ORIGINAL_PRODUCT_PERM_LINK_NAME + originalProductKey);
                    cart.removeLineItemKeysFromCart(lineItemKeys);
                }
            }else{
                helper.log("No upsell items associated with line item key. Clearing cookie and removing item from cart.")
                var lineItemKeys = [];
                lineItemKeys.push(originalProductKey);
                helper.expireCookie(ORIGINAL_PRODUCT_PERM_LINK_NAME + originalProductKey);
                cart.removeLineItemKeysFromCart(lineItemKeys);
            }
        };

        var convertProductKeysToProductNames = function(lineItemKeyArray){
            var productNameArray = [];
            if(typeof lineItemKeyArray === "string"){
                var productName = cart.getProductTitleFromLineItemKey(lineItemKeyArray);
                if(helper.stringChecker(productName)){
                    productNameArray.push(productName);
                }
            }else if(typeof lineItemKeyArray === "object"){
                $.each(lineItemKeyArray, function(index, lineItemKey){
                    var productName = cart.getProductTitleFromLineItemKey(lineItemKey);
                    if(helper.stringChecker(productName)){
                        productNameArray.push(productName);
                    }
                });
            }
            return productNameArray;
        };

        var getRemovedLineItemKeyFromLink = function(event){
            var lineItemKey = false;
            //Debut theme
            var href = $(event.target).attr("href");
            if(!helper.stringChecker(href)){
                href = $(event.target).parent().attr("href");
            }
            if(helper.stringChecker(href) && href.indexOf("line=") >= 0){
                var lineNumber = /line=([0-9]+)/g.exec(href)[1] - 1;
                lineItemKey = un.cart.items[lineNumber].key;
            }else{
                //Narrative theme's AJAX cart
                lineItemKey = $(event.target).parents(".cart-drawer__item").data("cart-item-id");
            }
            //Jumpstart theme
            if(!helper.stringChecker(lineItemKey)){
                lineItemKey = $(event.target).parents(".cart-row").data("id");
            }
            return lineItemKey;
        };


        this.offers = offers;

        this.startBundleEnforcer = startBundleEnforcer;
        this.switchTempOriginalProductLinksToLineItemKeys = switchTempOriginalProductLinksToLineItemKeys;
        this.createRemoveButtonClickEventListener = createRemoveButtonClickEventListener;
        this.handleRemoveButtonClick = handleRemoveButtonClick;
        this.clearTempOriginalProductLinkCookies = clearTempOriginalProductLinkCookies;
        this.generateOriginalProductVariantIdToUpsellKeyMap = generateOriginalProductVariantIdToUpsellKeyMap;
        this.setOriginalProductLineItemKeyToUpsellItemKeysCookie = setOriginalProductLineItemKeyToUpsellItemKeysCookie;
        this.getRemovedLineItemKeyFromLink = getRemovedLineItemKeyFromLink;
        this.showUpsellProductRemovalWarning = showUpsellProductRemovalWarning;
        this.convertProductKeysToProductNames = convertProductKeysToProductNames;
        this.initAjaxCartMutationObserver = initAjaxCartMutationObserver;
        this.disableRemoveButtonClickListeners = disableRemoveButtonClickListeners;
        this.checkBundleIntegrity = checkBundleIntegrity;
        this.checkIfOriginalProductStillInCart = checkIfOriginalProductStillInCart;
        this.checkUpsellProductQtys = checkUpsellProductQtys;
        this.clearOldLineItemKeys = clearOldLineItemKeys;
        this.checkTriggerProductRequirements = checkTriggerProductRequirements;
    }

    function DiscountApplier(offers){
        var self = this;

        var applyOfferDiscountsToCart = function(){
            self.checkIfItemsWereAddedViaUpsellPopup();
            self.updateCartPageWithDiscounts();
            self.initRefreshCartPageEventHandler();
        };

        var updateCartPageWithDiscounts = function(){
            self.updateDiscountedSubtotal();
            self.updateLineItemPrices();
            self.updateLineItemTotals();

            if(shop.cart_bar_enabled && helper.objectChecker(un.cart.un_total_discount) && un.cart.un_total_discount > 0){
                self.showCartBar();
            }
        };

        var showCartBar = function(){
            if($("#un-cart-bar-page").length === 0){
                self.addBarToPage(shop.cart_bar_placement_selector, shop.cart_bar_placement_position, "un-cart-bar-page");
            }
            if($("#un-cart-bar-ajax").length === 0 && shop.ajax_cart_integration_enabled) {
                self.addBarToPage(shop.cart_bar_ajax_placement_selector, shop.cart_bar_ajax_placement_position, "un-cart-bar-ajax");
            }
            self.applyBarStyles();
        };

        var applyBarStyles = function(){
            if(helper.stringChecker(shop.cart_bar_font_family)){
                $("head").append("<link href=\"https://fonts.googleapis.com/css?family=" + shop.cart_bar_font_family + "\" rel=\"stylesheet\">");
                $(".un-cart-bar").css("font-family", shop.cart_bar_font_family.replace(/\+/g," ") + ", sans-serif");
            }

            helper.applyStyle(".un-cart-bar","background-color",shop.cart_bar_bg_color);
            helper.applyStyle(".un-cart-bar","color",shop.cart_bar_text_color);
            helper.applyStyle(".un-cart-bar","padding",shop.cart_bar_padding);
            helper.applyStyle(".un-cart-bar","font-size",shop.cart_bar_font_size);
            helper.applyStyle(".un-cart-bar","border-radius",shop.cart_bar_border_radius);
        };

        var addBarToPage = function(placementSelector, placementPosition, idTag){

            var barHtml = "<div class=\"un-cart-bar\" style=\"display: none;\" id=\"" + idTag + "\">" + shop.cart_bar_text + "</div>";
            var fadeIn = shop.cart_bar_fade_in_duration || 0;
            var fadeOut = shop.cart_bar_fade_out_duration || 0;
            var displayDuration = shop.cart_bar_display_duration || 0;

            if(!helper.stringChecker(placementPosition) || placementPosition === "after"){
                $(placementSelector).after(barHtml);
            }else if(placementPosition === "before"){
                $(placementSelector).before(barHtml);
            }else if(placementPosition === "prepend"){
                $(placementSelector).prepend(barHtml);
            }else if(placementPosition === "append"){
                $(placementSelector).append(barHtml);
            }

            $(".un-cart-bar").fadeIn(fadeIn * 1000);
            if(displayDuration > 0){
                setTimeout(function(){
                    $(".un-cart-bar").fadeOut(fadeOut * 1000);
                    }, displayDuration * 1000);
            }
        };

        var initRefreshCartPageEventHandler = function(){
            if(helper.stringChecker(shop.cart_form_selector)) {
                if(helper.stringChecker(shop.quantity_selector)) {
                    $(document).on("change", shop.quantity_selector, function (e) {
                        setTimeout(function () {
                            $(shop.cart_form_selector).submit();
                        }, 1500);
                    });
                }
                if(helper.stringChecker(shop.quantity_button_selector)) {
                    $(document).on("click", shop.quantity_button_selector, function (e) {
                        setTimeout(function () {
                            $(shop.cart_form_selector).submit();
                        }, 1500);
                    });
                }
            }
        };

        var updateDiscountedSubtotal = function () {
            var discountedSubtotal = getDiscountedSubtotal();
            $(shop.cart_subtotal_selector).html(helper.unFormatCents(discountedSubtotal, shop.money_with_currency_format));
        };

        var getDiscountedSubtotal = function(){
            var totalDiscount = 0;
            $.each(un.cart.items,function(index,item){
                if(helper.objectChecker(item.un_total_discount_value)){
                    totalDiscount += item.un_total_discount_value;
                }
            });
            un.cart.un_total_discount = totalDiscount;
            return un.cart.total_price - totalDiscount;
        };

        var updateLineItemPrices = function () {
            var priceElements = $(".un-line-item-unit-price");
            $.each(un.cart.items,function(index,item){
                if(helper.objectChecker(item.un_discount_value)){
                    $.each(priceElements, function(index, priceElement){
                        if($(priceElement).data("id") === item.key){
                            $(priceElement).html(helper.unFormatCents(item.un_discounted_price, shop.money_format));
                        }
                    });
                }
            });
        };

        var updateLineItemTotals = function () {
            var priceElements = $(".un-line-item-total");
            $.each(un.cart.items,function(index,item){
                if(helper.objectChecker(item.un_discount_value)){
                    $.each(priceElements, function(index, priceElement){
                        if($(priceElement).data("id") === item.key){
                            var discountedLineTotal = item.line_price - item.un_total_discount_value;
                            $(priceElement).html(helper.unFormatCents(discountedLineTotal, shop.money_format));
                        }
                    });
                }
            });
        };

        var checkIfItemsWereAddedViaUpsellPopup = function(){
            if(helper.objectChecker(window.un.cart.items)) {
                $.each(window.un.cart.items, function (index, item) {
                    var offerId = helper.getOfferIdForItemKeyFromCookie(item.key);
                    if(offerId) {
                        var offer = Offer.getActiveOfferById(offerId);
                        if (helper.objectChecker(offer)) {
                            self.applyOfferDiscountToItem(item, offer);
                        }
                    }
                });
            }
        };

        var applyOfferDiscountToItem = function(item, offer){
            if(offer.discountType === "percentage_discount"){
                item.appliedDiscount = self.percentageDiscountHash(item, offer);
                item.un_discount_value = item.appliedDiscount.discount_amount * 100;
                item.un_total_discount_value = item.appliedDiscount.total_discount_amount * 100;
                item.un_discounted_price = item.price - item.un_discount_value;
            }else if(offer.discountType === "fixed_amount_discount"){
                item.appliedDiscount = self.fixedAmountDiscountHash(item, offer);
                item.un_discount_value = offer.discountFixedAmount;
                item.un_total_discount_value = item.appliedDiscount.total_discount_amount;
                item.un_discounted_price = item.price - offer.discountFixedAmount;

            }else if(offer.discountType === "set_price"){
                item.appliedDiscount = self.setPriceDiscountHash(item, offer);
                item.un_discount_value = item.price - offer.discountPrice;
                item.un_total_discount_value = item.appliedDiscount.total_discount_amount;
                item.un_discounted_price = offer.discountPrice;
            }
        };

        var fixedAmountDiscountHash = function (item, offer) {
            var discountAmount = Math.floor(offer.discountFixedAmount),
                appliedDiscount = {};

            if (discountAmount > item["price"]) {
                discountAmount = item["price"];
            }

            appliedDiscount["discount_amount"] = discountAmount;
            appliedDiscount["total_discount_amount"] = discountAmount * item["quantity"];
            appliedDiscount["value_type"] = "fixed_amount";
            appliedDiscount["description"] = shop.discount_title;
            appliedDiscount["title"] = shop.discount_title;
            appliedDiscount["value"] = discountAmount / 100.00;
            appliedDiscount["amount"] = discountAmount * item["quantity"] / 100.00;

            return appliedDiscount;
        };

        var percentageDiscountHash = function (item, offer) {
            var appliedDiscount = {};

            var itemPrice = item["price"] / 100;
            appliedDiscount["value"] = Math.floor(offer.discountPercent);
            appliedDiscount["discount_amount"] = Math.floor(itemPrice * appliedDiscount["value"]) / 100;
            appliedDiscount["total_discount_amount"] = Math.floor(itemPrice * appliedDiscount["value"] * item["quantity"]) / 100;
            appliedDiscount["value_type"] = "percentage";
            appliedDiscount["description"] = shop.discount_title;
            appliedDiscount["title"] = shop.discount_title;
            appliedDiscount["amount"] = Math.floor(itemPrice * appliedDiscount["value"] * item["quantity"]) / 100;

            return appliedDiscount;
        };

        var setPriceDiscountHash = function(item, offer){
            var discountAmount = Math.floor(item.price - offer.discountPrice),
                appliedDiscount = {};

            appliedDiscount["discount_amount"] = discountAmount;
            appliedDiscount["total_discount_amount"] = discountAmount * item["quantity"];
            appliedDiscount["value_type"] = "fixed_amount";
            appliedDiscount["description"] = shop.discount_title;
            appliedDiscount["title"] = shop.discount_title;
            appliedDiscount["value"] = discountAmount / 100.00;
            appliedDiscount["amount"] = discountAmount * item["quantity"] / 100.00;

            return appliedDiscount;
        };

        var checkMutationIds = function (mutation) {
            var idArray = ["ajaxifyCart", "cart-loading", "AjaxifyCart", "layer-addcart-modal"];

            if (helper.stringChecker(shop.mutation_ids)) {
                var spacelessIds = shop.mutation_ids.replace(/ /g, '');
                var shopMutationIdsArray = spacelessIds.split(",");
                idArray = idArray.concat(shopMutationIdsArray);
            }

            if(idArray.indexOf(mutation.target.id) !== -1) {
                return true;
            }else{
                return false;
            }
        };

        var checkMutationClasses = function (mutation) {

            var classArray = ["drawer", "cart-drawer__item-list", "ajaxcart__footer--fixed", "cart-item__qty", "mm-opened", "cart-sidebar", "opened", "cart-preview", "mfp-ready"];

            if (helper.stringChecker(shop.mutation_classes)) {
                var spacelessClasses = shop.mutation_classes.replace(/ /g, '');
                var shopMutationClassArray = spacelessClasses.split(",");
                classArray = classArray.concat(shopMutationClassArray);
            }

            var classFound = false;
            $.each(classArray, function (index, className) {
                if (typeof mutation.target.classList !== "undefined" && mutation.target.classList.contains(className)) {
                    classFound = true;
                }
            });
            return classFound;

        };

        var checkMutations = function (mutation) {
            return checkMutationIds(mutation) || checkMutationClasses(mutation);
        };

        var initAjaxCartObserver = function () {
            var trigger = false;
            var observer = new MutationObserver(function (mutations) {
                mutations.forEach(function (mutation) {
                    //console.log(mutation);
                    if (!trigger && checkMutations(mutation)) {
                        setTimeout(function () {
                            cart.updateCart(function(){
                                self.applyOfferDiscountsToCart();
                                Offer.createCheckoutEventListener();
                            });
                        }, 250);
                        trigger = true;
                    }
                });
                setTimeout(function () {
                    trigger = false;
                }, 2000);
            });

            // Notify me of everything!
            var observerConfig = {
                attributes: true,
                childList: true,
                characterData: true,
                subtree: true
            };

            // Node, config
            // In this case we'll listen to all changes to body and child nodes
            var targetNode = document.body;
            observer.observe(targetNode, observerConfig);
        };

        this.offers = offers;

        this.applyOfferDiscountsToCart = applyOfferDiscountsToCart;
        this.checkIfItemsWereAddedViaUpsellPopup = checkIfItemsWereAddedViaUpsellPopup;
        this.applyOfferDiscountToItem = applyOfferDiscountToItem;
        this.updateDiscountedSubtotal = updateDiscountedSubtotal;
        this.updateLineItemPrices = updateLineItemPrices;
        this.updateLineItemTotals = updateLineItemTotals;
        this.fixedAmountDiscountHash = fixedAmountDiscountHash;
        this.percentageDiscountHash = percentageDiscountHash;
        this.setPriceDiscountHash = setPriceDiscountHash;
        this.updateCartPageWithDiscounts = updateCartPageWithDiscounts;
        this.initRefreshCartPageEventHandler = initRefreshCartPageEventHandler;
        this.initAjaxCartObserver = initAjaxCartObserver;
        this.showCartBar = showCartBar;
        this.addBarToPage = addBarToPage;
        this.applyBarStyles = applyBarStyles;
    }

    function Cart(){
        var self = this;

        var addToCart = function(variantId,qty,lineItemDiscountPropertyArray, _callback){
            window.un.addedToCart[variantId] = true;

            var addToCartData = {
                quantity: qty,
                id: variantId
            };

            if(lineItemDiscountPropertyArray.length > 0){
                addToCartData.properties = lineItemDiscountPropertyArray[0];
            }

            $.ajax({
                cache: false,
                type: "POST",
                url: "/cart/add.js",
                data: addToCartData,
                dataType: "json",
            }).done(function(response) {
                _callback(response);
            });
        };

        var notYetAddedToCart = function(variantId){
            return (typeof window.un.addedToCart[variantId] === "undefined");
        };

        var updateCart = function (callback) {
            $.ajax({
                cache: false,
                type: "GET",
                url: "https://" + window.location.hostname + "/cart?view=upsell-now-cart",
                //NOTE: We have to do it this way. If we set datatype/contenttype to json then Shopify defaults to it's own JSON template view bypassing our cart helper which means collection IDs are missing from cart helper response.
                //dataType: 'json',
                //contentType: "application/json; charset=utf-8",
                success: function (data) {
                    window.un.cart = JSON.parse(data);
                    callback();
                }
            });
        };

        var createDraftOrder = function () {
            var draftOrder = {};
            draftOrder.line_items = JSON.stringify(self.getLineItemsHash());

            draftOrder.order_notes = "";

            if ($("#CartSpecialInstructions:visible").length > 0) {
                draftOrder.order_notes = $("#CartSpecialInstructions:visible").val();
            }

            if($("#cartSpecialInstructions:visible").length > 0) {
                draftOrder.order_notes += $("#cartSpecialInstructions:visible").val();
            }

            if($("#cartSpecialInstructionsFromPopup:visible").length > 0) {
                draftOrder.order_notes += $("#cartSpecialInstructionsFromPopup:visible").val();
            }

            if(draftOrder.order_notes === "" && $("textarea[name='note']:visible:first").length > 0){
                draftOrder.order_notes += $("textarea[name='note']:visible:first").val();
            }

            return draftOrder;
        };

        var getLineItemsHash = function () {
            var lineItemsHash = [];

            $.each(window.un.cart.items, function (index, item) {
                lineItemsHash.push(self.getLineItemHash(item));
            });

            return lineItemsHash;
        };

        var getLineItemHash = function (item) {
            var lineItemHash = {};

            lineItemHash["title"] = item.title;
            lineItemHash["variant_id"] = item.variant_id;
            lineItemHash["product_id"] = item.product_id;
            lineItemHash["image"] = item.image;
            lineItemHash["quantity"] = item.quantity;
            lineItemHash["grams"] = item.grams;
            lineItemHash["requires_shipping"] = item.requires_shipping;
            lineItemHash["price"] = item.price / 100.00;

            lineItemHash["properties"] = self.getLineItemPropertiesArray(item);

            if(helper.objectChecker(item.appliedDiscount)) {
                lineItemHash["applied_discount"] = item.appliedDiscount;
            }

            return lineItemHash;
        };

        var getLineItemPropertiesArray = function (item) {
            var lineItemPropertiesArray = [];

            if (item.properties != null) {
                $.each(Object.keys(item.properties), function (index, propertyKey) {
                    var lineItemProperty = {};
                    lineItemProperty["name"] = propertyKey;
                    lineItemProperty["value"] = item.properties[propertyKey];
                    lineItemPropertiesArray.push(lineItemProperty);
                });
            }

            return lineItemPropertiesArray;
        };

        var hasDiscounts = function () {
            var hasDiscounts = false;
            $.each(window.un.cart.items, function(index, item){
                if(helper.objectChecker(item.appliedDiscount)){
                    hasDiscounts = true;
                }
            });
            return hasDiscounts;
        };

        var getAndSendToCheckoutUrl = function (draftOrder) {
            $.ajax({
                cache: false,
                type: "POST",
                url: helper.getServerAddress() + "/get_checkout_url?shopify_domain=" + helper.getShopifyDomain(),
                data: JSON.stringify(draftOrder),
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                    if (data["invoice_url"]) {
                        window.location.href = data["invoice_url"].replace("checkout.shopify.com", shop.primary_domain);
                    }else {
                        alert("An error occured, and we're unable to process your order at this time. Please contact customer service for assistance. ");
                    }
                }
            });
        };

        var inCart = function(productId){
            var productInCart = false;
            $.each(un.cart.items,function(index,item){
                if(item.product_id.toString() === productId){
                    productInCart = true;
                }
            });
            return productInCart;
        };

        var hasLineItemKey = function(lineItemKey){
            var productInCart = false;
            $.each(un.cart.items,function(index,item){
                if(item.key === lineItemKey){
                    productInCart = true;
                }
            });
            return productInCart;
        };

        var getLineItem = function(lineItemKey){
            var lineItem = false;
            $.each(un.cart.items,function(index,item){
                if(item.key === lineItemKey){
                    lineItem = item;
                }
            });
            return lineItem;
        };

        var getLineItemQuantity = function(lineItemKey){
            var lineItem = self.getLineItem(lineItemKey);
            if(lineItem){
                return lineItem.quantity;
            }else{
                return false;
            }
        };

        var getLastLineItemKeyForVariantId = function(variantId){
            var lineItemKey = false;
            $.each(un.cart.items,function(index,item){
                if(item.variant_id.toString() === variantId.toString()){
                    lineItemKey = item.key;
                }
            });
            return lineItemKey;
        };

        var getProductTitleFromLineItemKey = function(lineItemKey){
            var productTitle = false;
            $.each(un.cart.items,function(index,item){
                if(item.key.toString() === lineItemKey){
                    productTitle = item.title;
                }
            });
            return productTitle;
        };

        var removeLineItemKeysFromCart = function(lineItemKeys){
            var updateHash = self.createUpdateQtyHash(lineItemKeys,0);
            $.ajax({
                cache: false,
                type: "POST",
                url: "/cart/update.js",
                data: {updates: updateHash},
                dataType: "json",
            }).done(function(response) {
                self.redirectToCartPage();
            });
        };

        var changeQuantity = function(lineItemKey, quantity){
            var lineItemKeys = helper.arrayify(lineItemKey);
            var updateHash = self.createUpdateQtyHash(lineItemKeys,quantity);
            $.ajax({
                cache: false,
                type: "POST",
                url: "/cart/update.js",
                data: {updates: updateHash},
                dataType: "json",
            }).done(function(response) {
                self.redirectToCartPage();
            });
        };

        var createUpdateQtyHash = function(lineItemKeys,newQuantity){
            var updateHash = {};
            $.each(lineItemKeys, function(index, lineItemKey){
                updateHash[lineItemKey] = newQuantity;
            });
            return updateHash;
        };

        var redirectToCartPage = function(){
            setTimeout(function () {
                window.location.href = "/cart";
            }, 250);
        };

        this.updateCart = updateCart;
        this.changeQuantity = changeQuantity;
        this.addToCart = addToCart;
        this.createDraftOrder = createDraftOrder;
        this.getLineItemsHash = getLineItemsHash;
        this.getLineItemHash = getLineItemHash;
        this.getLineItemPropertiesArray = getLineItemPropertiesArray;
        this.hasDiscounts = hasDiscounts;
        this.getAndSendToCheckoutUrl = getAndSendToCheckoutUrl;
        this.inCart = inCart;
        this.notYetAddedToCart = notYetAddedToCart;
        this.getLastLineItemKeyForVariantId = getLastLineItemKeyForVariantId;
        this.getProductTitleFromLineItemKey = getProductTitleFromLineItemKey;
        this.removeLineItemKeysFromCart = removeLineItemKeysFromCart;
        this.redirectToCartPage = redirectToCartPage;
        this.createUpdateQtyHash = createUpdateQtyHash;
        this.hasLineItemKey = hasLineItemKey;
        this.getLineItem = getLineItem;
        this.getLineItemQuantity = getLineItemQuantity;
    }

    Cart.checkoutEventHandler = function () {

        if(helper.stringChecker(shop.redirecting_to_checkout_text)) {
            $(shop.checkout_button_selector).after("<span id='un-checkout-redirect-msg'>" + shop.redirecting_to_checkout_text + "</span>");
        }

        cart.updateCart(function(){
            var discountApplier = new DiscountApplier(window.un.offers);
            discountApplier.applyOfferDiscountsToCart();
            var bundleEnforcer = new BundleEnforcer(window.un.offers);
            bundleEnforcer.startBundleEnforcer();
            window.un.cartCheckedForDiscounts = true;
            if(helper.notInDebugMode()) {
                if (cart.hasDiscounts() || helper.getShopifyDomain() === "asoflattetest.myshopify.com") {
                    var draftOrder = cart.createDraftOrder();
                    cart.getAndSendToCheckoutUrl(draftOrder);
                } else {
                    $(shop.checkout_button_selector).trigger("click");
                }
            }
        });
    };

    function Popup(offer){
        var self = this;
        var unClosedOfferCookieName = "_un_closed_offer_" + offer.id.toString();

        var show = function(){
            $("#un-modal-title").text(offer.popupTitle);
            $("#un-modal-description").text(offer.popupDescription);
            $("#upsell-popup-close-link").text(shop.no_thanks_text);
            self.printProductRows();

            $("#un-modal-background").addClass("un-manual-modal-container");

            self.initializeAddToCartButtons();
            self.initializeVariantFields();
            self.initializeCloseButtons();
            self.applyStyles();
        };

        var initializeCloseButtons = function(){
            $(window).click(function (event) {
                if (!self.fullsizeImageModalOpenedOnPage() && event.target.classList.contains("un-manual-modal-container")) {
                    self.close();
                }
                self.closeImagePopupOnClickOutside();
            });

            $("#un-modal-close-btn, #upsell-popup-close-link").click(function(){
                self.close();
            });

            self.initializeAddToCartButtons();
            self.initializeVariantFields();
            self.initializeQuantityFields();
            self.applyStyles();
        };

        var atcPopupClose = function(){
            $("#un-modal-background").removeClass("un-manual-modal-container");
            if(!window.un.atcPopupClosed) {
                window.un.atcPopupClosed = true;
                $(shop.add_to_cart_button_selector).trigger("click");
            }
            if(shop.hide_offer_if_already_declined) {
                helper.setCookie(unClosedOfferCookieName, offer.id, shop.num_days_before_showing_offer_again);
            }
        };

        var closeImagePopupOnClickOutside = function(){
            if(self.fullsizeImageModalOpenedOnPage()){
                if($("#un-modal-background-for-full-img").hasClass('opened')){
                    $("#un-modal-background-for-full-img").removeClass('opened');
                    $("#un-modal-background-for-full-img").removeClass('un-manual-modal-container');
                }
                else{
                    $("#un-modal-background-for-full-img").addClass('opened');
                }
            }
        };

        var checkoutPopupClose = function(){
            $("#un-modal-background").removeClass("un-manual-modal-container");
            window.un.checkoutPopupClosed = true;
            if(shop.hide_offer_if_already_declined) {
                helper.setCookie(unClosedOfferCookieName, offer.id, shop.num_days_before_showing_offer_again);
            }
            Cart.checkoutEventHandler();
        };

        var printProductRows = function(){
            $("#upsell-product-table").html("");
            $.each(offer.productsForPopup, function(index, product){
                var source = $("#upsell-popup-product-row").html();
                var prices = self.getPrices(product.originalPrice, product.price);
                var outOfStock = helper.outOfStock(product);
                var title = $('<div/>').html(product.title).text();
                var originalPrice = $('<div/>').html(prices[0]).text();
                var price = $('<div/>').html(prices[1]).text();
                var variantHTML = self.getVariantFieldHTML(product);
                var productLink = self.getProductLink(product);
                var showVariantFieldForThisProduct = offer.showVariantField;
                var upsellProductQty = self.getUpsellProductQty(product, offer);
                var showProductImage = self.getProductImageSetting(offer.productImageSetting);
                var showFullSizedProductImage = self.showFullSizeProductImage(offer);
                if(product.variants.length < 2){
                    showVariantFieldForThisProduct = false;
                }

                var context = {
                    show_product_image: showProductImage,
                    upsell_product_img_src: product.imgSrc,
                    upsell_product_title: title,
                    upsell_product_qty: upsellProductQty,
                    upsell_product_original_price: originalPrice,
                    upsell_product_price: price,
                    upsell_product_id: product.productId,
                    upsell_variant_id: product.variantId,
                    upsell_product_out_of_stock: outOfStock,
                    upsell_product_in_stock: !outOfStock,
                    upsell_product_add_to_cart_text: shop.add_to_cart_button_text,
                    upsell_product_sold_out_text: shop.sold_out_button_text,
                    upsell_show_quantity_field: offer.showQuantityField,
                    upsell_hide_quantity_field: !offer.showQuantityField,
                    upsell_show_variant_field: showVariantFieldForThisProduct,
                    upsell_product_variants: variantHTML,
                    upsell_product_link: productLink,
                    product_links_enabled: offer.productLinksEnabled,
                    show_full_product_image: showFullSizedProductImage
                };
                var template = unHandleBars.compile(source);
                var html = template(context);
                $("#upsell-product-table").append(html);
            });
        };

        var getPrices = function(originalPrice, price){
            var prices = [];
            if(offer.discountType !== "no_discount"){
                prices[0] = helper.unFormatCents(price, shop.money_format);
                prices[1] = helper.unFormatCents(self.getDiscountedPrice(price), shop.money_format);
            }else{
                if(typeof parseInt(originalPrice) === "number"){
                    prices[0] = helper.unFormatCents(originalPrice, shop.money_format);
                }else{
                    prices[0] = false;
                }
                prices[1] = helper.unFormatCents(price, shop.money_format);
            }
            return prices;
        };

        var getDiscountedPrice = function(price){
            var discountedPrice = 0;
            var discountType = offer.discountType;
            if(discountType === "percentage_discount"){
                discountedPrice = Math.floor(price * (1 - (offer.discountPercent / 100)));
            }else if(discountType === "fixed_amount_discount"){
                discountedPrice = price - (offer.discountFixedAmount);
            }else if(discountType === "set_price") {
                discountedPrice = offer.discountPrice;
            }
            if(discountedPrice < 0){
                discountedPrice = 0;
            }
            return discountedPrice;
        };

        var initializeAddToCartButtons = function(){
            $(document).on('click', '.upsell-product-add-to-cart', function(event) {
                var variantId = $(event.target).data("id");
                var productId = $(event.target).data("product-id");
                if(cart.notYetAddedToCart(variantId)) {
                    $(event.target).text(shop.added_to_cart_button_text).val(shop.added_to_cart_button_text);
                    $(event.target).addClass("disabled");
                    if ($("#upsell-now-qty-" + variantId).length > 0) {
                        var quantity = $("#upsell-now-qty-" + variantId).val();
                    } else if (offer.showQuantityField) {
                        var quantity = $(".upsell-now-quantity-field[data-product-id='" + productId + "']").val();
                    } else {
                        var quantity = $(event.target).data("quantity");
                    }

                    var lineItemDiscountPropertyArray = offer.getLineItemDiscountPropertyArray();
                    cart.addToCart(variantId, quantity, lineItemDiscountPropertyArray, function (jsonResponse) {
                        var lineItemKey = jsonResponse["key"];
                        var originalProductVariantId = helper.getCurrentVariantId();
                        if (lineItemDiscountPropertyArray.length > 0) {
                            helper.setCookie("_un_discounted_line_item_" + lineItemKey, offer.id.toString() + "_" + quantity, 30);
                            helper.setCookie("_un_discounted_line_item_original_product_link_temp_" + lineItemKey, originalProductVariantId, 30);
                        }
                        if (offer.closePopupOnATC) {
                            self.close();
                        }
                    });
                    event.stopPropagation();
                    event.preventDefault();
                }
            });
        };

        var applyStyles = function(){
            if(helper.stringChecker(shop.add_to_cart_button_font_family)){
                $("head").append("<link href=\"https://fonts.googleapis.com/css?family=" + shop.add_to_cart_button_font_family + "\" rel=\"stylesheet\">");
                $("body #upsell-product-table .upsell-product-add-to-cart").css("font-family", shop.add_to_cart_button_font_family.replace(/\+/g," ") + ", sans-serif");
            }

            if(helper.stringChecker(shop.popup_font_family)){
                $("head").append("<link href=\"https://fonts.googleapis.com/css?family=" + shop.popup_font_family + "\" rel=\"stylesheet\">");
                $("body #un-modal-content").css("font-family", shop.popup_font_family.replace(/\+/g," ") + ", sans-serif");
            }

            helper.applyStyle("#upsell-product-table .upsell-product-add-to-cart","background-color",shop.add_to_cart_button_bg_color);
            helper.applyStyle("#upsell-product-table .upsell-product-add-to-cart","color",shop.add_to_cart_button_text_color);
            helper.applyStyle("#upsell-popup-close-link","color",shop.no_thanks_text_color);
            helper.applyStyle(".upsell-product-title","color",shop.product_title_text_color);
            helper.applyStyle(".upsell-product-original-price","color",shop.regular_price_text_color);
            helper.applyStyle(".upsell-product-price","color",shop.sale_price_text_color);
            helper.applyStyle("#un-modal-content","background-color",shop.popup_bg_color);
            helper.applyStyle("#un-modal-title","color",shop.popup_title_text_color);
            helper.applyStyle("#un-modal-description","color",shop.popup_description_text_color);
        };

        var getVariantFieldHTML = function(product){
            var fieldHTML = "";
            var firstOption = true;
            var selected = "";
            if(self.offer.showVariantField && product.variants.length > 1){
                fieldHTML = "<select class=\"upsell-product-variant-field\" data-id=\"" + product.productId +"\">";
                $.each(product.variants,function(index,variant){
                    if(variant.available && firstOption){
                        selected = "SELECTED";
                        firstOption = false;
                    }else{
                        selected = "";
                    }
                    fieldHTML += "<option value=\"" + variant.id + "\" " + selected + ">" + variant.title + "</option>";
                });
                fieldHTML += "</select>";
            }
            return fieldHTML;
        };

        var initializeVariantFields = function(){
            if(self.offer.showVariantField) {
                $(document).on("change", ".upsell-product-variant-field", function (event) {
                    var productId = $(event.target).data("id").toString();
                    var newVariantId = $(event.target).find(":selected").val();
                    var variantData = self.offer.getPopupProductVariantData(productId, newVariantId);
                    if (variantData !== false) {
                        self.swapPricesInRow(productId, variantData);
                        self.swapButtonIdAndStatusInRow(productId, variantData);
                        self.validateQuantityFieldOnChangeOfVariant(productId, variantData);
                    }
                });
            }
        };

        var initializeQuantityFields = function(){
           if(self.offer.showQuantityField) {
                $(document).on("change", ".upsell-now-quantity-field", function (event) {
                    var quantityField = $(this);
                    var productId = $(this).data("product-id").toString();
                    var newVariantId = self.getVariantId(productId);
                    var variantData = self.offer.getPopupProductVariantData(productId, newVariantId);
                    if (variantData !== false) {
                        if (!self.variantPresentInCart(newVariantId, variantData)) {
                            self.verifyIsUpsellQtyGreaterThanInventoryQty(quantityField, variantData, newVariantId);
                        }
                        else {
                            self.cartAndInventoryStocklimitChecker(newVariantId, quantityField, variantData);
                        }
                    }
                });
           }
        };

        var getVariantId = function(productId){
            var button = $("#upsell-product-" + productId + " .upsell-product-add-to-cart");
            var variantId = button.data('id');
            if ($("#upsell-product-" + productId + " .upsell-product-variant-field").length > 0){
                variantId = $(".upsell-product-variant-field[data-id='" + productId +"']").val();
            }
            return variantId.toString();
        };

        var swapPricesInRow = function(productId, variantData){
            var prices = self.getPrices(variantData.originalPrice, variantData.price);
            var originalPrice = $('<div/>').html(prices[0]).text();
            var price = $('<div/>').html(prices[1]).text();

            $("#upsell-product-" + productId + " .upsell-product-original-price").html(originalPrice);
            $("#upsell-product-" + productId + " .upsell-product-price").html(price);
        };

        var swapButtonIdAndStatusInRow = function(productId, variantData){
            var button = $("#upsell-product-" + productId + " .upsell-product-add-to-cart");
            $(button).data("id", variantData.id);
            if (variantData.available) {
                $(button).text(shop.add_to_cart_button_text);
                $(button).removeClass("disabled");
                $(button).prop("disabled", false);
            } else {
                $(button).text(shop.sold_out_button_text);
                $(button).addClass("disabled");
                $(button).prop("disabled", true);
            }
        };

        var validateQuantityFieldOnChangeOfVariant = function(productId, variantData){
            var newVariantId = variantData.id;
            var quantityField = $(".upsell-now-quantity-field[data-product-id='" + productId +"']");
            self.hideInsufficientStockWarning(quantityField);
            if (!self.variantPresentInCart(newVariantId, variantData)) {
                self.verifyIsUpsellQtyGreaterThanInventoryQty(quantityField, variantData, newVariantId);
            }
            else{
                self.cartAndInventoryStocklimitChecker(newVariantId, quantityField, variantData);
            }
        };

        var getProductImageSetting = function(imgSetting){
            return (imgSetting === 'show_product_image');
        };

        var getProductLink = function(upsellProduct){
            return "https://" + window.Shopify.shop + "/products/" + upsellProduct.handle;
        };

        var showFullSizeProductImage = function(offer){
            if (offer.productImageSetting === 'show_product_image_with_zoom'){
                self.initalizeFullSizeImageModal();
                return true;
            }
            else {
                return false;
            }
        };

        var initalizeFullSizeImageModal = function(offer){
            $(document).on("click", "#un-modal-background img", function() {
                var img = $(this).attr("src").replace("100x100", "600x600");
                $(".upsell-product-image-for-full-img").attr("src", img);
                $("#un-modal-background-for-full-img").addClass('un-manual-modal-container');
            });
            $("#un-modal-close-btn-for-full-img, #upsell-popup-close-link-for-full-img").click(function(){
                $("#un-modal-background-for-full-img").removeClass('un-manual-modal-container');
                $("#un-modal-background-for-full-img").removeClass('opened');
            });
        };

        var fullsizeImageModalOpenedOnPage = function(){
            var imageModal = document.getElementById("un-modal-background-for-full-img");
            return (imageModal !== null && imageModal.classList.contains("un-manual-modal-container"))
        };

        var cartAndInventoryStocklimitChecker = function(newVariantId, quantityField, variantData){
            var upsellQuantity = parseInt(quantityField.val());
            $.each(un.cart.items, function (index, cartItem) {
                if (cartItem.variant_id === parseInt(newVariantId)){
                    var totalQty = cartItem.quantity + upsellQuantity;
                    if (self.isUpsellQtyGreaterThanInventoryAndCartQty(totalQty, variantData)) {
                        var expectedQty = helper.noNegative(parseInt(variantData.inventoryQuantity) - cartItem.quantity);
                        self.showInsufficientStockWarning(variantData, quantityField, expectedQty, newVariantId);
                    }
                    else {
                        self.hideInsufficientStockWarning(quantityField);
                    }
                    return false;
                }
            });
        };

        var isUpsellQtyGreaterThanInventoryAndCartQty = function(cartQty, product){
            return (cartQty > parseInt(product.inventoryQuantity)) && helper.stringChecker(product.inventoryManagement);
        };

        var showInsufficientStockWarning = function(variantData, quantityField, expectedQty, newVariantId){
            var stockInsufficientMessage = shop.insufficient_stock_message;
            var warningMsg = stockInsufficientMessage.replace("{quantity}", expectedQty)
            self.hideInsufficientStockWarning(quantityField);
            quantityField.after("<span class='qty-alert-popup-field upsell-now-qty-alert-"+ quantityField.data('product-id') +"'>"+ warningMsg +"</span>");
            quantityField.val(expectedQty);
        };

        var getUpsellProductQty = function(product, offer){
            var validQty = offer.upsellQty;
            if (offer.showQuantityField){
                if (validQty > parseInt(product.inventoryQuantity)){
                    validQty = helper.noNegative(parseInt(product.inventoryQuantity));
                }
                $.each(un.cart.items, function (index, cartItem) {
                    if (parseInt(product.variantId) === cartItem.variant_id){
                        var totalQty = offer.upsellQty + cartItem.quantity;
                        if (self.isUpsellQtyGreaterThanInventoryAndCartQty(totalQty, product)){
                            validQty = helper.noNegative(parseInt(product.inventoryQuantity) - cartItem.quantity);
                        }
                        return false;
                    }
                });
            }
            return validQty;
        };

        var hideInsufficientStockWarning = function(quantityField){
            $(".upsell-now-qty-alert-" + quantityField.data('product-id')).remove();
        };

        var variantPresentInCart = function(newVariantId){
            var isVariantPresent = false;
            $.each(un.cart.items, function (index, cartItem) {
                if (cartItem.variant_id === parseInt(newVariantId)){
                    isVariantPresent = true;
                    return false;
                }
            });
            return isVariantPresent;
        };

        var verifyIsUpsellQtyGreaterThanInventoryQty = function(quantityField, variantData, newVariantId){
            if (parseInt(quantityField.val()) > variantData.inventoryQuantity){
                var expectedQty = helper.noNegative(parseInt(variantData.inventoryQuantity));
                self.showInsufficientStockWarning(variantData, quantityField, expectedQty, newVariantId);
            }
            else{
                self.hideInsufficientStockWarning(quantityField);
            }
        };

        this.offer = offer;
        this.show = show;

        if(offer.triggerEvent === "add_to_cart") {
            this.close = atcPopupClose;
        }else if(offer.triggerEvent === "checkout"){
            this.close = checkoutPopupClose;
        }

        this.printProductRows = printProductRows;
        this.getPrices = getPrices;
        this.getDiscountedPrice = getDiscountedPrice;
        this.initializeAddToCartButtons = initializeAddToCartButtons;
        this.applyStyles = applyStyles;
        this.getVariantFieldHTML = getVariantFieldHTML;
        this.initializeVariantFields = initializeVariantFields;
        this.initializeQuantityFields =  initializeQuantityFields
        this.swapPricesInRow = swapPricesInRow;
        this.swapButtonIdAndStatusInRow = swapButtonIdAndStatusInRow;
        this.getProductImageSetting = getProductImageSetting;
        this.getProductLink = getProductLink;
        this.cartAndInventoryStocklimitChecker = cartAndInventoryStocklimitChecker;
        this.getUpsellProductQty = getUpsellProductQty;
        this.showInsufficientStockWarning = showInsufficientStockWarning;
        this.validateQuantityFieldOnChangeOfVariant = validateQuantityFieldOnChangeOfVariant;
        this.hideInsufficientStockWarning = hideInsufficientStockWarning;
        this.variantPresentInCart = variantPresentInCart;
        this.verifyIsUpsellQtyGreaterThanInventoryQty = verifyIsUpsellQtyGreaterThanInventoryQty;
        this.isUpsellQtyGreaterThanInventoryAndCartQty = isUpsellQtyGreaterThanInventoryAndCartQty;
        this.getVariantId = getVariantId;
        this.showFullSizeProductImage = showFullSizeProductImage;
        this.initalizeFullSizeImageModal = initalizeFullSizeImageModal;
        this.fullsizeImageModalOpenedOnPage = fullsizeImageModalOpenedOnPage;
        this.initializeCloseButtons = initializeCloseButtons;
        this.closeImagePopupOnClickOutside = closeImagePopupOnClickOutside;
    }

    function ProductGetter(callback, offer){
        var self = this;

        var getProducts = function(productHandles,collectionHandles,maxNumberOfProducts,maxNumberOfProductsPerCollection, shopifyDomain){
            self.productHandles = productHandles;
            self.shopifyDomain = shopifyDomain;
            self.collectionHandles = collectionHandles;
            self.maxNumberOfProducts = maxNumberOfProducts;
            self.maxNumberOfProductsPerCollection = maxNumberOfProductsPerCollection;
            self.productsArray = [];

            if(productHandles.length > 0) {
                helper.log("Getting upsell products for offer " + self.offer.id);
                self.ajaxCallToGetProduct(0);
            }else{
                self.getProductsFromSelectedCollections();
            }
        };

        var ajaxCallToGetProduct = function(currentIndex){
            var selectedProduct = self.productHandles[currentIndex];
            if(!self.inProductCache(selectedProduct.shopify_product_id)){
                $.ajax({
                    cache: true,
                    type: "GET",
                    url: "https://" + self.shopifyDomain + "/products/" + selectedProduct["handle"] + "?view=upsell-now-product",
                    success: function (data) {
                        self.setCachedProduct(data, selectedProduct.shopify_product_id);
                        self.processProductData(data, currentIndex);
                    }
                });
            }
            else{
                self.processProductData(self.getCachedProduct(selectedProduct.shopify_product_id), currentIndex);
            }
        };

        var processProductData = function(data, currentIndex){
            data = JSON.parse(data);
            var newPreviewProduct = self.createNewProduct(data);
            if(newPreviewProduct && helper.outOfStock(newPreviewProduct) && self.offer.hideOutOfStockProducts){
                newPreviewProduct = false;
                helper.log("Not adding " + newPreviewProduct.title + " to popup for offer " + self.offer.id + " because it's out of stock and hide out of stock products is enabled.");
            }
            if(newPreviewProduct && cart.inCart(newPreviewProduct.productId) && self.offer.hideProductsAlreadyInCart){
                newPreviewProduct = false;
                helper.log("Not adding " + newPreviewProduct.title + " to popup for offer " + self.offer.id + " because it's in the cart and hide products in cart is enabled.");
            }
            if (newPreviewProduct) {
                helper.log("Adding " + newPreviewProduct.title + " to popup for offer " + self.offer.id + ".");
                self.productsArray.push(newPreviewProduct);
            }
            if(self.productsArray.length === self.maxNumberOfProducts){
                self.callback(self.productsArray);
            }else if(currentIndex < self.productHandles.length - 1){
                currentIndex += 1;
                self.ajaxCallToGetProduct(currentIndex);
            }else if(self.productsArray.length < self.maxNumberOfProducts && (currentIndex === self.productHandles.length - 1)){
                self.getProductsFromSelectedCollections();
            }
        };

        var getProductsFromSelectedCollections = function(){
            if(self.collectionHandles.length > 0) {
                helper.log("Getting upsell products from upsell collections for offer " + self.offer.id);
                self.ajaxCallToGetCollection(0);
            }else{
                self.callback(this.productsArray);
            }
        };

        var ajaxCallToGetCollection = function(currentIndex){
            var selectedCollection = self.collectionHandles[currentIndex];
            if(!self.inCollectionCache(selectedCollection.shopify_collection_id)) {
                $.ajax({
                    cache: true,
                    type: "GET",
                    url: "https://" + self.shopifyDomain + "/collections/" + selectedCollection["handle"] + "?view=upsell-now-collection",
                    success: function (data) {
                        self.setCachedCollection(data, selectedCollection.shopify_collection_id);
                        self.processCollectionData(data, currentIndex);
                    }
                });
            }else{
                self.processCollectionData(self.getCachedCollection(selectedCollection.shopify_collection_id), currentIndex);
            }
        };

        var processCollectionData = function(data, currentIndex){
            data = JSON.parse(data);
            var productsFromCollection = 0;
            $.each(data,function(index,productFromCollection){
                if(!self.inProductsArray(productFromCollection) && self.productsArray.length < self.maxNumberOfProducts && productsFromCollection < self.maxNumberOfProductsPerCollection){
                    var newProduct = self.createNewProduct(productFromCollection);
                    if(newProduct && helper.outOfStock(newProduct) && self.offer.hideOutOfStockProducts){
                        newProduct = false;
                        helper.log("Not adding " + newProduct.title + " to popup for offer " + self.offer.id + " because it's out of stock and hide out of stock products is enabled.");
                    }
                    if(newProduct && cart.inCart(newProduct) && self.offer.hideProductsAlreadyInCart){
                        newProduct = false;
                        helper.log("Not adding " + newProduct.title + " to popup for offer " + self.offer.id + " because it's in the cart and hide products in cart is enabled.");
                    }
                    if(newProduct){
                        helper.log("Adding " + newProduct.title + " to popup for offer " + self.offer.id + ".");
                        self.productsArray.push(newProduct);
                        productsFromCollection += 1;
                    }
                }
            });

            var maxProductsReached = (self.productsArray.length === self.maxNumberOfProducts);
            var noMoreCollections = (currentIndex === self.collectionHandles.length - 1);
            var moreCollections = (currentIndex < self.collectionHandles.length - 1);

            if(maxProductsReached || noMoreCollections){
                self.callback(self.productsArray);
            }else if(moreCollections){
                currentIndex += 1;
                ajaxCallToGetCollection(currentIndex);
            }
        };

        var inProductsArray = function(productToCheckFor){
            var productFound = false;
            $.each(self.productsArray, function(index, popupProduct){
                if(productToCheckFor.handle === popupProduct.handle){
                    productFound = true;
                }
            });
            return productFound;
        };

        var createNewProduct = function(product){
            var popupProduct = {};
            popupProduct.title = product.title;
            popupProduct.originalPrice = product.original_price;
            popupProduct.price = product.price;
            popupProduct.variantId = product.variant_id;
            popupProduct.inventoryQuantity = product.inventory_quantity;
            popupProduct.inventoryManagement = product.inventory_management;
            popupProduct.inventoryPolicy = product.inventory_policy;
            popupProduct.productId = product.id;
            popupProduct.available = product.available;
            popupProduct.handle = product.handle;
            popupProduct.variants = createVariantArray(product.variants);
            if(product.img != null){
                popupProduct.imgSrc = product.img;
            }else{
                popupProduct.imgSrc = false;
            }
            return popupProduct;
        };

        var createVariantArray = function(variants){
            var variantArray = [];
            $.each(variants,function(index,variant){
                var variantForArray = {};
                variantForArray.originalPrice = variant.original_price;
                variantForArray.price = variant.price;
                variantForArray.title = variant.variant_title;
                variantForArray.id = variant.variant_id;
                variantForArray.inventoryQuantity = variant.inventory_quantity;
                variantForArray.inventoryPolicy = variant.inventory_policy;
                variantForArray.inventoryManagement = variant.inventory_management;
                variantForArray.available = variant.available;
                variantArray.push(variantForArray);
            });
            return variantArray;
        };

        var inCollectionCache = function(collectionId){
            return (typeof window.un.cache.collections[collectionId] !== "undefined");
        };

        var getCachedCollection = function(collectionId){
            return window.un.cache.collections[collectionId];
        };

        var setCachedCollection = function(collection, collectionId){
            if (helper.objectChecker(window.un.cache) && helper.objectChecker(window.un.cache.collections)){
                window.un.cache.collections[collectionId] = collection;
            }
        };

        var inProductCache = function(productId){
            return (typeof window.un.cache.products[productId] !== 'undefined');
        };

        var getCachedProduct = function(productId){
            return window.un.cache.products[productId];
        };

        var setCachedProduct = function(product, productId){
            if (helper.objectChecker(window.un.cache) && helper.objectChecker(window.un.cache.products)){
                window.un.cache.products[productId] = product;
            }
        };

        this.getProducts = getProducts;
        this.ajaxCallToGetProduct = ajaxCallToGetProduct;
        this.processProductData = processProductData;
        this.getProductsFromSelectedCollections = getProductsFromSelectedCollections;
        this.ajaxCallToGetCollection = ajaxCallToGetCollection;
        this.processCollectionData = processCollectionData;
        this.createNewProduct = createNewProduct;
        this.inProductsArray = inProductsArray;
        this.createVariantArray = createVariantArray;
        this.inCollectionCache = inCollectionCache;
        this.getCachedCollection = getCachedCollection;
        this.setCachedCollection = setCachedCollection;
        this.inProductCache = inProductCache;
        this.getCachedProduct = getCachedProduct;
        this.setCachedProduct = setCachedProduct;

        this.callback = callback;
        this.offer = offer;
    }

    function Offer(args) {
        var self = this;

        var baseRequirementsMet = function(){
            var checkoutOfferOrATCOfferOnProductPage = self.triggerEvent === "checkout" || helper.onProductPage();
            var withinStartEndDate = self.withinStartEndDate();
            var notDisabledForCustomers = !self.disabledForCustomers();

            !checkoutOfferOrATCOfferOnProductPage ? helper.log("Offer " + self.id + " not qualified because is ATC and we're not on a product page.") : null;
            !withinStartEndDate ? helper.log("Offer " + self.id + " not qualified because outside start/end date.") : null;
            !notDisabledForCustomers ? helper.log("Offer " + self.id + " not qualified because customer is logged in and offer disabled for logged-in customers.") : null;

            return checkoutOfferOrATCOfferOnProductPage && withinStartEndDate && notDisabledForCustomers;
        };

        var disabledForCustomers = function(){
            return self.disableForLoggedInCustomers && helper.objectChecker(window.un.customer_id);
        };

        var withinStartEndDate = function(){
            return !self.beforeStartDate() && !self.afterEndDate();
        };

        var beforeStartDate = function(){
            if(helper.stringChecker(self.startDate)){
                var startDate = new Date(self.startDate);
                var currentDate = new Date();
                return currentDate < startDate;
            }else{
                return false;
            }
        };

        var afterEndDate = function(){
            if(helper.stringChecker(self.endDate)){
                var endDate = new Date(self.endDate);
                var currentDate = new Date();
                return currentDate > endDate;
            }else{
                return false;
            }
        };

        var triggerProductRequirementsMet = function () {
            var triggerProductInCart = self.checkIfTriggerProductsInCart();
            var onSelectedProductPage = self.checkIfOnSelectedProductPage();
            var requiredCartValueMet = self.checkIfRequiredCartValueMet();

            var message = "Upsell offer reqs failed because:";
            !triggerProductInCart ? message += " trigger products not in card," : null;
            !onSelectedProductPage ? message += " not on selected product page," : null;
            !requiredCartValueMet ? message += " required cart value not met," : null;
            if(message !== "Upsell offer reqs failed because:"){
                helper.log(message);
            }

            return triggerProductInCart && onSelectedProductPage && requiredCartValueMet;
        };

        var checkIfRequiredCartValueMet = function() {
            var unTotalDiscount = 0;
            if(typeof un.cart.un_total_discount !== "undefined"){
                if(!Number.isNaN(un.cart.un_total_discount)){
                    unTotalDiscount = un.cart.un_total_discount;
                }
            }
            return self.requiredMinimumCartValue <= (un.cart.total_price - unTotalDiscount);
        };

        var checkIfOnSelectedProductPage = function () {
            var onSelectedProductPage = false;
            if(self.triggerEvent === "checkout" || helper.onCartPage()) {
                onSelectedProductPage = true;
            }else if(self.productPages.length === 0 && self.collectionPages.length === 0){
                onSelectedProductPage = true;
            }else if(helper.objectChecker(un.product) && helper.objectChecker(un.product_collections)){
                var currentProduct = {};
                currentProduct.product_id = un.product.id;
                currentProduct.collection_ids = un.product_collections;
                onSelectedProductPage = self.itemInProductArray(currentProduct,self.productPages) ||
                self.itemInCollectionArray(currentProduct,self.collectionPages);
            }
            return onSelectedProductPage;
        };

        var checkIfTriggerProductsInCart = function () {
            var triggerProductInCart = false;
            if(self.triggerProducts.length === 0 && self.triggerCollections.length === 0){
                triggerProductInCart = true;
            }else {
                $.each(un.cart.items, function (index, cartItem) {
                    if (cartItem.quantity >= self.triggerQty) {
                        if (itemInProductArray(cartItem, self.triggerProducts) ||
                            itemInCollectionArray(cartItem, self.triggerCollections)) {
                            triggerProductInCart = true;
                        }
                    }
                });
            }
            return triggerProductInCart;
        };

        var appliesToItem = function (item) {
            return self.itemInProductArray(item, self.upsellProducts) || self.itemInCollectionArray(item, self.upsellCollections);
        };

        var itemInProductArray = function (item, productArray) {
            var productFound = false;
            $.each(productArray, function(index, upsellProduct){
                if(item.product_id === upsellProduct.shopify_product_id){
                    productFound = true;
                }
            });
            return productFound;
        };

        var itemInCollectionArray = function (item, collectionArray) {
            var collectionFound = false;
            $.each(item.collection_ids, function(index, collectionId){
                $.each(collectionArray, function(index, upsellCollection){
                    if(collectionId === upsellCollection.shopify_collection_id){
                        collectionFound = true;
                    }
                });
            });
            return collectionFound;
        };

        var getLineItemDiscountPropertyArray = function () {
            var lineItemDiscountPropertyArray = [];
            var lineItemDiscount = {};
            if(self.discountType === "percentage_discount"){
                lineItemDiscount[shop.line_item_message_key] = shop.line_item_discount_amount_message.replace("{{discount_amount}}", helper.unFormatPercent(self.discountPercent / 100));
                lineItemDiscountPropertyArray.push(lineItemDiscount);
            }else if(self.discountType === "fixed_amount_discount"){
                var discountAmount = $('<div/>').html(helper.unFormatCents(self.discountFixedAmount, shop.money_format)).text();
                lineItemDiscount[shop.line_item_message_key] = shop.line_item_discount_amount_message.replace("{{discount_amount}}", discountAmount);
                lineItemDiscountPropertyArray.push(lineItemDiscount);
            }else if(self.discountType === "set_price"){
                var discountedPrice = $('<div/>').html(helper.unFormatCents(self.discountPrice, shop.money_format)).text();
                lineItemDiscount[shop.line_item_message_key] = shop.line_item_set_price_message.replace("{{set_price}}", discountedPrice);
                lineItemDiscountPropertyArray.push(lineItemDiscount);
            }
            return lineItemDiscountPropertyArray;
        };

        var storeProductsCallback = function (popupProducts){
            self.productsForPopup = popupProducts;
        };

        var getProductsForPopup = function () {
            self.productGetter.getProducts(self.upsellProducts, self.upsellCollections, shop.max_products_to_show, shop.max_products_per_category_to_show, shop.shopify_domain);
        };

        var notDeclined = function () {
            var notDeclined = true;
            if(shop.hide_offer_if_already_declined === true && self.getCookie("_un_closed_offer_" + self.id.toString()) !== ""){
                notDeclined = false;
            }
            return notDeclined;
        };

        var getCookie = function (cookieName) {
            var name = cookieName + "=";
            var ca = document.cookie.split(';');
            for(var i = 0; i < ca.length; i++) {
                var c = ca[i];
                while (c.charAt(0) == ' ') {
                    c = c.substring(1);
                }
                if (c.indexOf(name) == 0) {
                    return c.substring(name.length, c.length);
                }
            }
            return "";
        };

        var hasValidProducts = function(){
            return self.productsForPopup.length > 0;
        };

        var getPopupProductVariantData = function(productId,variantId){
            var variantData = false;
            $.each(self.productsForPopup,function(index,product){
                if(product.productId === productId){
                    $.each(product.variants, function(index, variant){
                       if(variant.id === variantId){
                           variantData = variant;
                       }
                    });
                }
            });
            return variantData;
        };

        this.upsellProducts = args["upsell_products"] || [];
        this.upsellCollections = args["upsell_collections"] || [];
        this.triggerProducts = args["trigger_products"] || [];
        this.triggerCollections = args["trigger_collections"] || [];
        this.productPages = args["product_pages"] || [];
        this.collectionPages = args["collection_pages"] || [];

        this.id = args["id"];
        this.offerEnabled = args["offer_enabled"] || true;
        this.productLinksEnabled = args["product_links_enabled"] || false;
        this.offerName = args["offer_name"] || "";
        this.discountType = args["discount_type"] || 0;
        this.discountFixedAmount = args["discount_fixed_amount"] || "";
        this.discountPrice = args["discount_price"] || "";
        this.discountPercent = args["discount_percent"] || "";
        this.triggerEvent = args["trigger_event"] || "";
        this.popupTitle = args["popup_title"] || "";
        this.popupDescription = args["popup_description"] || "";
        this.popupSuccessMessage = args["popup_success_message"] || "";
        this.startDate = args["start_date"] || "";
        this.endDate = args["end_date"] || "";
        this.disableForLoggedInCustomers = args["disable_for_logged_in_customers"] || false;
        this.upsellQty = args["upsell_qty"] || 1;
        this.triggerQty = args["trigger_qty"] || 0;
        this.requiredMinimumCartValue = args["required_minimum_cart_value"] || 0;
        this.productsForPopup = [];
        this.hideOutOfStockProducts = args["hide_out_of_stock_products"] || false;
        this.hideProductsAlreadyInCart = args["hide_products_already_in_cart"] || false;
        this.showQuantityField = args["show_quantity_field"] || false;
        this.showVariantField = args["show_variant_field"];
        this.closePopupOnATC = args["close_popup_on_atc"] || false;
        this.productImageSetting = args["product_image_setting"] || "show_product_image";
        this.storeProductsCallback = storeProductsCallback;

        this.triggerProductRequirementsMet = triggerProductRequirementsMet;
        this.appliesToItem = appliesToItem;
        this.getLineItemDiscountPropertyArray = getLineItemDiscountPropertyArray;
        this.getProductsForPopup = getProductsForPopup;
        this.itemInProductArray = itemInProductArray;
        this.itemInCollectionArray = itemInCollectionArray;
        this.checkIfTriggerProductsInCart = checkIfTriggerProductsInCart;
        this.checkIfOnSelectedProductPage = checkIfOnSelectedProductPage;
        this.notDeclined = notDeclined;
        this.getCookie = getCookie;
        this.beforeStartDate = beforeStartDate;
        this.afterEndDate = afterEndDate;
        this.withinStartEndDate = withinStartEndDate;
        this.disabledForCustomers = disabledForCustomers;
        this.baseRequirementsMet = baseRequirementsMet;
        this.checkIfRequiredCartValueMet = checkIfRequiredCartValueMet;
        this.hasValidProducts = hasValidProducts;
        this.getPopupProductVariantData = getPopupProductVariantData;

        if(this.baseRequirementsMet() && this.triggerProductRequirementsMet() && this.notDeclined()) {
            helper.log("Loading products for offer: " + this.id);
            this.productGetter = new ProductGetter(self.storeProductsCallback, self);
            this.getProductsForPopup();
        }else{
            helper.log("Requirements check failed. Not loading products for offer: " + this.id);
        }
    }

    Offer.createOfferObjects = function() {
        window.un.offers = [];
        window.un.qualifyingATCOffers = [];
        window.un.qualifyingCheckoutOffers = [];
        $.each(helper.getOffersInDatastore(), function (index, offer) {
            window.un.offers.push(new Offer(offer));
        });
        return helper.arrayChecker(window.un.offers);
    };

    Offer.createATCEventListener = function(){
        Offer.removeThemeSpecificAtcEventListeners();
        $(document).on("click",shop.add_to_cart_button_selector,function() {
            if(typeof un.atcPopupClosed === "undefined") {
                helper.log("ATC event triggered");
                Offer.atcEventHandler();
                return false;
            }
        });
    };

    Offer.removeThemeSpecificAtcEventListeners = function(){
        //Simple theme
        $.each($('.product-single__meta .product-form #AddToCart'),function(index,element){
            $(element).replaceWith($(element).clone().addClass("un-cloned-atc-btn"));
        });
    };

    Offer.createCheckoutEventListener = function(){
        $(document).on("click",shop.checkout_button_selector,function() {
            if (typeof un.checkingOut === "undefined") {
                helper.log("Checkout event triggered");
                un.checkingOut = true;
                helper.enableSpinner(shop.checkout_button_selector);
                helper.applyDisabledStyles(shop.checkout_button_selector);
                $(shop.checkout_button_selector).addClass("un-disabled-btn");
                if (typeof un.checkoutPopupClosed === "undefined") {
                    Offer.checkoutEventHandler();
                    return false;
                }
            }
        });
    };

    Offer.atcEventHandler = function(){
        var firstActiveOffer = Offer.getFirstActiveOffer(window.un.qualifyingATCOffers);
        if(firstActiveOffer){
            helper.log("Showing ATC popup for offer " + firstActiveOffer.id);
            var popup = new Popup(firstActiveOffer);
            popup.show();
        }else{
            if(helper.notInDebugMode()){
                if(!window.un.atcPopupClosed) {
                    window.un.atcPopupClosed = true;
                    $(shop.add_to_cart_button_selector).trigger("click");
                }
            }
        }
    };

    Offer.checkoutEventHandler = function(){
        var firstActiveOffer = Offer.getFirstActiveOffer(window.un.qualifyingCheckoutOffers);
        if(firstActiveOffer){
            helper.log("Showing checkout popup for offer " + firstActiveOffer.id);
            var popup = new Popup(firstActiveOffer);
            popup.show();
        }else{
            if(helper.notInDebugMode()) {
                window.un.checkoutPopupClosed = true;
                Cart.checkoutEventHandler();
            }
        }
    };


    Offer.getFirstActiveOffer = function(offerArray){
        var firstActiveOffer = false;
        $.each(offerArray,function(index, offer){
            helper.log("Examining offer " + offer.id + " (" + offer.triggerEvent + ").");
            var reqsMet = offer.triggerProductRequirementsMet();
            var notDeclined = offer.notDeclined();
            var hasValidProducts = offer.hasValidProducts();
            if(reqsMet && notDeclined && hasValidProducts){
                firstActiveOffer = offer;
                helper.log("Offer " + offer.id + " passed.");
                return false;
            }else{
                var message = "Offer " + offer.id + " failed because:";
                !reqsMet ? message += " upsell offer reqs not met," : null;
                !notDeclined ? message += " offer has been previously declined," : null;
                !hasValidProducts ? message += " no valid products to show in popup," : null;
                helper.log(message);
            }
        });
        if(firstActiveOffer){
            helper.log("Returning offer " + firstActiveOffer.id.toString());
        }else{
            helper.log("No valid offers");
        }
        return firstActiveOffer;
    };

    Offer.getOfferForItem = function(item, offers){
        var offerForItem = false;
        $.each(offers,function(index, offer){
            if(offer.triggerProductRequirementsMet() && offer.appliesToItem(item)){
                offerForItem = offer;
            }
        });
        return offerForItem;
    };

    Offer.getActiveOfferById = function(offerId){
        var foundOffer = false;
        $.each(un.offers,function(index,offer){
            if(offer.id.toString() === offerId){
                foundOffer = offer;
            }
        });
        return foundOffer;
    };

    function runUpsellNow() {
        if (Offer.createOfferObjects()) {
            setupEnv();
            if(helper.onProductPage()){
                loadProductPage();
            }
            //Always load cart page since they might have an AJAX cart outside the cart page
            cart.updateCart(loadCartPage);
        }
    }

    function setupEnv(){
        $.getScript("https://cdnjs.cloudflare.com/ajax/libs/spin.js/2.3.2/spin.min.js");
        if(shop.hide_express_checkout_buttons){
            $("head").append("<style type=\"text/css\">.additional-checkout-button,.google-wallet-button-holder,.amazon-payments-pay-button,.shopify-payment-button{\n" +
                "display:none !important;\n" +
                "}</style>");
        }
    }

    function loadProductPage(){
        $.each(window.un.offers, function(index, offer){
            if(offer.triggerEvent === "add_to_cart" && offer.baseRequirementsMet()){
                window.un.qualifyingATCOffers.push(offer);
            }
        });
        if(window.un.qualifyingATCOffers.length > 0){
            Offer.createATCEventListener();
        }
    }

    function loadCartPage(){
        $.each(window.un.offers, function(index, offer){
            if(offer.triggerEvent === "checkout" && offer.baseRequirementsMet()){
                window.un.qualifyingCheckoutOffers.push(offer);
            }
        });
        Offer.createCheckoutEventListener();
        var discountApplier = new DiscountApplier(window.un.offers);
        discountApplier.applyOfferDiscountsToCart();
        var bundleEnforcer = new BundleEnforcer(window.un.offers);
        bundleEnforcer.startBundleEnforcer();
        if (shop.ajax_cart_integration_enabled) {
            discountApplier.initAjaxCartObserver();
        }
    }

    $(document).ready(function () {
        if (helper.objectChecker(window.un) && typeof window.un.running === "undefined") {
            window.un.running = true;
            if (helper.checkSettingsInDatastore()) {
                helper.mergeThemeAndShopSettings();
                if(helper.enabledOnCurrentPage()) {
                    runUpsellNow();
                }
            }
        }
    });
};

if ((typeof jQuery === "undefined") || (typeof jQuery.fn === "undefined") || (typeof jQuery.fn.jquery === "undefined") || (parseFloat(jQuery.fn.jquery) < 1.7)) {
    loadScript("//ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js", function () {
        var jQuery321 = jQuery.noConflict(true);
        myFrontendJavascriptUN(jQuery321);
    });
}
else {
    myFrontendJavascriptUN(jQuery);
}

</script>

<style>
#un-modal-title{
    margin-bottom: 10px;
    text-align:center;
    font-size:26px;
    color:black;
}
#un-modal-description{
    font-size:14px;
    line-height:21px;
    color:black;
}

/*Un modal for full image start*/
#un-modal-background-for-full-img {
    display:none;
    width:100%;
    margin-bottom:20px;
    z-index: 100000;
}

#un-modal-content-for-full-img{
    background-color: transparent;
    margin: 5% auto;
    position: relative;
    border-radius: 0;
    max-height: 100%;
}
#un-modal-close-btn-for-full-img{
    font-size: 20px;
    line-height: 34px;
    color: #000;
    cursor: pointer;
    position: absolute;
    right: -15px;
    top: -15px;
    height: 40px;
    width: 40px;
    text-align: center;
    border-radius: 50%;
    background-color: rgba(255, 255, 255, 0.88);
    border: 1px solid #ccc;
}

#upsell-popup-close-link-for-full-img{
    color: #bbbbbb;
    font-size:14px;
}

#upsell-popup-close-link-for-full-img:hover{
    background-color:transparent;
}

.upsell-product-image-for-full-img{
    margin: 0 auto;
    display: block;
}
/*Un modal for full image end*/
#un-modal-background {
    display:none;
    background-color: rgba(0,0,0,0.8);
    width:100%;
    margin-bottom:20px;
}
.un-manual-modal-container{
    display: flex !important; /* Hidden by default */
    align-items:center;
    position: fixed; /* Stay in place */
    z-index: 9999; /* Sit on top */
    left: 0;
    top: 0;
    width: 100%; /* Full width */
    height: 100%; /* Full height */
    overflow: auto; /* Enable scroll if needed */
    background-color: rgb(0,0,0); /* Fallback color */
    background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
#un-modal-content{
    background-color: #fefefe;
    margin: 5% auto; /* 15% from the top and centered */
    padding: 20px;
    border: 1px solid #888;
    border-radius:5px;
    width: 80%; /* Could be more or less, depending on screen size */
    max-width:600px;
    text-align:center;
    max-height:80%;
}
#un-modal-close-btn{
    float:right;
    font-size:20px;
    color: #bbbbbb;
    cursor:pointer;
    margin-top: -20px;
    margin-right: -10px;
}
#upsell-product-table{
    margin-top:10px;
    margin-bottom:10px;
    width: calc(100% - 10px);
}
#upsell-product-table td{
    padding:10px;
    border:0px;
    position: relative;
}
#upsell-product-table tr{
    border-bottom:1px solid #eeeeee;
}
.upsell-product-title{
    font-size: 18px;
    color: #c90000;
}
#upsell-product-table td:nth-child(2){
    line-height:24px;
}
.upsell-product-qty{
    font-size: 14px;
    margin-left: 10px;
    color: black;
}
.upsell-product-price, .upsell-product-original-price{
    margin-top: 5px;
    display: inline-block;
}
.upsell-product-original-price{
    text-decoration: line-through;
    font-size: 12px;
    color:black;
}
.upsell-product-price{
    font-size:16px;
    color:black;
}
.upsell-product-image{
    max-height:60px;
    margin: 0 auto;
    display: block;
}
#upsell-product-table .upsell-product-add-to-cart{
    background:#c90000;
    color:white;
    height:auto;
    font-size:13px;
    display: block;
    width: 120px;
    border: 0px;
    border-radius: 3px;
}
#upsell-popup-close-link{
    color: #bbbbbb;
    font-size:14px;
}
#upsell-popup-close-link:hover{
    background-color:transparent;
}
#upsell-product-table .disabled, #upsell-product-table .upsell-product-add-to-cart.disabled, #upsell-product-table .upsell-product-add-to-cart.disabled:hover{
    background: #f4f6f8 !important;
    color: #919eab !important;
    border: 1px solid #c4cdd5 !important;
}
#un-checkout-redirect-msg{
    display:block;
    clear:both;
    color:#c90000;
    font-weight:bold;
}
.spinner{
    z-index:999 !important;
}
#un-table-wrapper{
    overflow-y: auto;
    max-height: 300px;
    margin-top:10px;
    margin-bottom:10px;
}
#upsell-product-table .upsell-product-disabled{
    background: #cccccc;
}
input.upsell-now-quantity-field{
    width:60px;
    display: block;
}
select.upsell-product-variant-field{
    margin: 10px 10px 5px 0;
    padding: 2px 10px;
    display: block;
}
.un-cart-bar{
    text-align: center;
    padding: 5px;
    margin-top: 10px;
    margin-bottom: 10px;
    font-size: 16px;
    background-color: #37ad29;
    color: #FFFFFF;
    display: none;
}
.popup-cursor{
    cursor: pointer;
}
@media only screen and (max-width: 600px) {
    body #un-modal-title{
        font-size: 18px;
        line-height:24px;
    }
    body #upsell-product-table .upsell-product-add-to-cart{
        width:60px;
    }
    body #upsell-product-table td{
        padding:4px;
    }
    body .upsell-product-title{
        font-size: 12px;
    }
    body #upsell-product-table td:nth-child(2){
        line-height:16px;
    }
    body .upsell-product-image {
        max-height: 70% !important;
        max-width: 100px !important;
        width: 45px !important;
    }
    body #upsell-product-table .upsell-product-add-to-cart{
        font-size: 10px !important;
        padding: 2px !important;
        line-height: 14px  !important;
        margin: 0px !important;
    }
    body .upsell-product-price{
        font-size: 14px;
    }
    body .upsell-now-quantity-field{
        width: 35px !important;
        font-size: 10px !important;
        padding: 2px 6px !important;
        margin: 0px !important;
        line-height: 14px !important;
    }
    select.upsell-product-variant-field{
        font-size: 10px !important;
        padding: 2px 4px !important;
        margin: 5px 5px 5px 0 !important;
        font-weight: normal !important;
        height: 22px !important;
        line-height: 18px !important;
        text-indent: 0px !important;
    }
    body #un-modal-description{
        font-size: 12px;
        line-height: 18px;
    }
    #un-modal-background-for-full-img {
        background-color: #000;
        padding-right: 15px;
        padding-left: 15px;
    }
    #un-modal-content-for-full-img {
        max-width: 100%;
    }
    .upsell-product-image-for-full-img{
        max-width: 100%;
    }
}

@media only screen and (max-width: 320px) {
    body .upsell-product-image, body .upsell-now-quantity-field {
        display:none !important;
    }
    body #un-modal-title {
        font-size: 14px;
        line-height:18px;
    }
    body #un-modal-description{
        font-size: 12px;
        line-height: 16px;
    }
    body #upsell-product-table td{
        padding:2px;
    }
}

.qty-alert-popup-field{
    background-color: #c90000;
    font-size: 10px;
    line-height: 14px;
    margin-top: -5px;
    display: block;
    color: #fff;
    padding: 0 5px;
    border-radius: 3px;
    position: absolute;
    max-width: 200px;
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

@media only screen and (max-width: 602px) and (min-width: 300px){
    .qty-alert-popup-field{
        margin-top: 10px;
    }
}

</style>
  </body>
</html>
