1<!DOCTYPE html> 2<html lang="en-US" > 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1.0"> 6<!-- WP_HEAD() START --> 7<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Lato:100,200,300,400,500,600,700,800,900|Lato:100,200,300,400,500,600,700,800,900" > 8<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:100,200,300,400,500,600,700,800,900|Lato:100,200,300,400,500,600,700,800,900"> 9<meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> 10 11 <!-- This site is optimized with the Yoast SEO plugin v28.2 - https://yoast.com/product/yoast-seo-wordpress/ --> 12 <title>Instantiations – Custom Software Development</title> 13 <meta name="description" content="Since 1988, weâve been building and maintaining custom software solutions for the diverse and evolutionary needs of global businesses." /> 14 <link rel="canonical" href="https://www.instantiations.com/" /> 15 <meta property="og:locale" content="en_US" /> 16 <meta property="og:type" content="website" /> 17 <meta property="og:title" content="Instantiations – Custom Software Development" /> 18 <meta property="og:description" content="Since 1988, weâve been building and maintaining custom software solutions for the diverse and evolutionary needs of global businesses." /> 19 <meta property="og:url" content="https://www.instantiations.com/" /> 20 <meta property="og:site_name" content="Instantiations" /> 21 <meta property="article:modified_time" content="2022-04-29T21:17:57+00:00" /> 22 <meta property="og:image" content="https://www.instantiations.com/wp-content/uploads/2021/03/default-social-og-banner-1024x535.png" /> 23 <meta property="og:image:width" content="1024" /> 24 <meta property="og:image:height" content="535" /> 25 <meta property="og:image:type" content="image/png" /> 26 <meta name="twitter:card" content="summary_large_image" /> 27 <meta name="twitter:image" content="https://www.instantiations.com/wp-content/uploads/2021/03/default-social-og-banner.png" /> 28 <meta name="twitter:site" content="@instantiations" /> 29
29<script type="application/ld+json" class="yoast-schema-graph">{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.instantiations.com\/","url":"https:\/\/www.instantiations.com\/","name":"Instantiations – Custom Software Development","isPartOf":{"@id":"https:\/\/www.instantiations.com\/#website"},"about":{"@id":"https:\/\/www.instantiations.com\/#organization"},"datePublished":"2021-03-01T14:00:00+00:00","dateModified":"2022-04-29T21:17:57+00:00","description":"Since 1988, weâve been building and maintaining custom software solutions for the diverse and evolutionary needs of global businesses.","breadcrumb":{"@id":"https:\/\/www.instantiations.com\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.instantiations.com\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.instantiations.com\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home"}]},{"@type":"WebSite","@id":"https:\/\/www.instantiations.com\/#website","url":"https:\/\/www.instantiations.com\/","name":"Instantiations","description":"Custom Software Development","publisher":{"@id":"https:\/\/www.instantiations.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.instantiations.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.instantiations.com\/#organization","name":"Instantiations","url":"https:\/\/www.instantiations.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.instantiations.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.instantiations.com\/wp-content\/uploads\/2021\/03\/instantiations-logo-lg-bg-wht.png","contentUrl":"https:\/\/www.instantiations.com\/wp-content\/uploads\/2021\/03\/instantiations-logo-lg-bg-wht.png","width":972,"height":245,"caption":"Instantiations"},"image":{"@id":"https:\/\/www.instantiations.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/instantiations","https:\/\/www.linkedin.com\/company\/instantiations","https:\/\/www.youtube.com\/channel\/UCT7_T8mr_DxC5uIx5wBoitQ"]}]}</script>
29 30 <!-- / Yoast SEO plugin. --> 31 32 33<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://www.instantiations.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.instantiations.com%2F" /> 34<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://www.instantiations.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.instantiations.com%2F&format=xml" /> 35<style id='wp-img-auto-sizes-contain-inline-css' type='text/css'> 36img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px} 37/*# sourceURL=wp-img-auto-sizes-contain-inline-css */ 38</style> 39<style id='wp-block-library-inline-css' type='text/css'> 40:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
40--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}.has-text-align-center{text-align:center}.has-text-align-left{text-align:left}.has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style*=border-top-color]){border-top-style:solid}html :where([style*=border-right-color]){border-right-style:solid}html :where([style*=border-bottom-color]){border-bottom-style:solid}html :where([style*=border-left-color]){border-left-style:solid}html :where([style*=border-width]){border-style:solid}html :where([style*=border-top-width]){border-top-style:solid}html :where([style*=border-right-width]){border-right-style:solid}html :where([style*=border-bottom-width]){border-bottom-style:solid}html :where([style*=border-left-width]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}} 41/*wp_block_styles_on_demand_placeholder:6abf23ed0887c*/ 42/*# sourceURL=wp-block-library-inline-css */ 43</style> 44<style id='classic-theme-styles-inline-css' type='text/css'> 45/*! This file is auto-generated */ 46.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 47/*# sourceURL=/wp-includes/css/classic-themes.min.css */ 48</style> 49<link rel='stylesheet' id='oxygen-css' href='https://www.instantiations.com/wp-content/plugins/oxygen/component-framework/oxygen.css?ver=4.9.7' type='text/css' media='all' />
50<script type="text/javascript" src="https://www.instantiations.com/wp-includes/js/jquery/jquery.min.js?ver=3.7.1" id="jquery-core-js"></script>
50 51<link rel="https://api.w.org/" href="https://www.instantiations.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://www.instantiations.com/wp-json/wp/v2/pages/14" /> 52<link rel='shortlink' href='https://www.instantiations.com/' /> 53<link rel="icon" href="https://www.instantiations.com/wp-content/uploads/2021/01/cropped-fav-icon-lg-32x32.png" sizes="32x32" /> 54<link rel="icon" href="https://www.instantiations.com/wp-content/uploads/2021/01/cropped-fav-icon-lg-192x192.png" sizes="192x192" /> 55<link rel="apple-touch-icon" href="https://www.instantiations.com/wp-content/uploads/2021/01/cropped-fav-icon-lg-180x180.png" /> 56<meta name="msapplication-TileImage" content="https://www.instantiations.com/wp-content/uploads/2021/01/cropped-fav-icon-lg-270x270.png" /> 57<link rel='stylesheet' id='oxygen-cache-10-css' href='//www.instantiations.com/wp-content/uploads/oxygen/css/10.css?cache=1790605905&ver=6.9.9' type='text/css' media='all' /> 58<link rel='stylesheet' id='oxygen-cache-305-css' href='//www.instantiations.com/wp-content/uploads/oxygen/css/305.css?cache=1790605903&ver=6.9.9' type='text/css' media='all' /> 59<link rel='stylesheet' id='oxygen-cache-14-css' href='//www.instantiations.com/wp-content/uploads/oxygen/css/14.css?cache=1790605901&ver=6.9.9' type='text/css' media='all' /> 60<link rel='stylesheet' id='oxygen-universal-styles-css' href='//www.instantiations.com/wp-content/uploads/oxygen/css/universal.css?cache=1790606051&ver=6.9.9' type='text/css' media='all' /> 61<!-- END OF WP_HEAD() --> 62</head> 63<body class="home wp-singular page-template-default page page-id-14 wp-theme-oxygen-is-not-a-theme wp-embed-responsive oxygen-body" > 64 65 66 67 68 <div id="code_block-210-10" class="ct-code-block" ><!-- --></div><div id="code_block-212-10" class="ct-code-block" ><style>/* EmojiSymbols Font (c)blockworks - Kenichi Kaneko http://emojisymbols.com/ */ @font-face {font-family: "EmojiSymbols";src: url('/wp-includes/fonts/EmojiSymbols-Regular.woff') format('woff');text-decoration: none;font-style: normal;}</style></div><div id="code_block-205-10" class="ct-code-block" ><a href="#content" class="skip btn-skip-nav" style="position:absolute;top:-50px;left:5px;">SKIP TO CONTENT</a></div><div id="code_block-164-10" class="ct-code-block" ><div id="ie-bar" style="display:none"> 69 <div id="ie-bar-inner"> 70 You're using an "Internet Explorer" web browser that's no longer supported.<br> 71 This website will not function correctly when using when using Internet Explorer,<br> 72 so please upgrade to a modern web browser, like Edge, Chrome, or Firefox. 73 </div> 74</div></div><header id="_header-1-10" class="oxy-header-wrapper oxy-overlay-header oxy-header" ><div id="top" class="oxy-header-row" ><div class="oxy-header-container"><div id="_header_left-3-10" class="oxy-header-left" ><a id="link-133-10" class="ct-link" href="/" ><img id="image-38-10" alt="Instantiations Logo" src="/wp-content/uploads/2021/01/instantiations-logo-rgb-light-bg-dkblue-txt.svg" class="ct-image "/></a></div><div id="_header_center-4-10" class="oxy-header-center" ><div id="code_block-135-10" class="ct-code-block" ><!-- --></div> 75 <div id="main-menu" class="oxy-pro-menu " ><div class="oxy-pro-menu-mobile-open-icon " data-off-canvas-alignment=""><svg id="main-menu-open-icon"><use xlink:href="#FontAwesomeicon-bars"></use></svg></div> 76 77 78 <div class="oxy-pro-menu-container oxy-pro-menu-dropdown-links-visible-on-mobile oxy-pro-menu-dropdown-links-toggle oxy-pro-menu-show-dropdown" data-aos-duration="400" 79 80 data-oxy-pro-menu-dropdown-animation="fade" 81 data-oxy-pro-menu-dropdown-animation-duration=".25" 82 data-entire-parent-toggles-dropdown="true" 83 84 85 data-oxy-pro-menu-dropdown-animation-duration="0.25" 86 87 data-oxy-pro-menu-dropdown-links-on-mobile="toggle"> 88 89 <div class="menu-main-menu-container"><ul id="menu-main-menu" class="oxy-pro-menu-list"><li id="menu-item-34" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-34"><a href="https://www.instantiations.com/vast-platform/">VAST Platform</a> 90<ul class="sub-menu"> 91 <li id="menu-item-295" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-295"><a href="/vast-platform/">Overview</a></li> 92 <li id="menu-item-3265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3265"><a href="https://www.instantiations.com/vast-platform/whats-new/">What's New</a></li> 93 <li id="menu-item-296" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-296"><a href="https://www.instantiations.com/vast-platform/features/">Features</a></li> 94 <li id="menu-item-4352" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4352"><a href="https://www.instantiations.com/vast-platform/vast-ai-assistant/">VAST AI Assistant</a></li> 95 <li id="menu-item-235" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-235"><a href="https://www.instantiations.com/vast-platform/add-ons/">Add-Ons</a></li>
96 <li id="menu-item-3889" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3889"><a href="https://www.instantiations.com/vast-platform/vast-compliance-package/">VAST Compliance Package</a></li> 97 <li id="menu-item-3919" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3919"><a href="https://www.instantiations.com/vast-platform/vast-training/">VAST Training</a></li> 98 <li id="menu-item-115" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-115"><a href="https://www.instantiations.com/vast-platform/support-plans/">Support Plans</a></li> 99 <li id="menu-item-168" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-168"><a href="https://www.instantiations.com/vast-platform/pricing/">Pricing</a></li> 100 <li id="menu-item-397" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-397"><a href="https://www.instantiations.com/vast-platform/version-history/">Version History</a></li> 101 <li id="menu-item-396" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-396"><a href="https://www.instantiations.com/vast-platform/product-roadmap/">Product Roadmap</a></li> 102 <li id="menu-item-1700" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1700"><a href="https://www.instantiations.com/visualage-to-vast/">VisualAge to VAST</a></li> 103 <li id="menu-item-3396" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3396"><a href="https://www.instantiations.com/vast-platform/vast-community-hub/">VAST Community Hub</a></li> 104 <li id="menu-item-120" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-120"><a target="_blank" href="https://groups.google.com/g/va-smalltalk">VAST Community Forum</a></li> 105 <li id="menu-item-298" class="menubold menu-item menu-item-type-custom menu-item-object-custom menu-item-298"><a target="_blank" href="https://vast-support.instantiations.com/">VAST Support Portal</a></li> 106 <li id="menu-item-3372" class="menu-indent menu-item menu-item-type-custom menu-item-object-custom menu-item-3372"><a target="_blank" href="https://vast-support.instantiations.com/support/solutions/24000015032">⸠Documentation</a></li> 107 <li id="menu-item-330" class="menu-indent menu-item menu-item-type-custom menu-item-object-custom menu-item-330"><a target="_blank" href="https://www.instantiations.com/vast-support/documentation/FAQ/">⸠FAQ</a></li> 108 <li id="menu-item-3552" class="menu-indent menu-indent-login menu-item menu-item-type-custom menu-item-object-custom menu-item-3552"><a target="_blank" href="https://vast-support.instantiations.com/support/tickets/new">⸠Get Support</a></li> 109 <li id="menu-item-122" class="menu-indent menu-indent-login menu-item menu-item-type-custom menu-item-object-custom menu-item-122"><a target="_blank" href="https://vast-support.instantiations.com/support/solutions/24000010833">⸠Licensed Downloads</a></li> 110 <li id="menu-item-121" class="menu-indent menu-indent-login menu-item menu-item-type-custom menu-item-object-custom menu-item-121"><a target="_blank" href="https://vast-support.instantiations.com/support/catalog/items/15">⸠Download Trial</a></li> 111 <li id="menu-item-3373" class="menu-indent menu-indent-login menu-item menu-item-type-custom menu-item-object-custom menu-item-3373"><a target="_blank" href="https://vast-support.instantiations.com/support/catalog/items/18">⸠ECAP</a></li> 112</ul> 113</li> 114<li id="menu-item-3257" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-3257"><a href="https://www.instantiations.com/fintech/">Fintech</a> 115<ul class="sub-menu"> 116 <li id="menu-item-3371" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3371"><a href="/fintech/">Overview</a></li> 117 <li id="menu-item-3164" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3164"><a target="_blank" href="https://fintech-support.instantiations.com/">Fintech Support Portal</a></li> 118</ul> 119</li> 120<li id="menu-item-33" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-33"><a href="https://www.instantiations.com/services/">Services</a> 121<ul class="sub-menu"> 122 <li id="menu-item-299" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-299"><a href="/services/">Overview</a></li> 123 <li id="menu-item-93" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-93"><a href="https://www.instantiations.com/services/custom-development/">Custom Development</a></li> 124 <li id="menu-item-92" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-92"><a href="https://www.instantiations.com/services/consulting-training/">Consulting & Training</a></li> 125 <li id="menu-item-1452" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1452"><a href="https://www.instantiations.com/services/iot/">Internet of Things (IoT)</a></li> 126 <li id="menu-item-3386" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3386"><a href="https://www.instantiations.com/services/open-source-development/">Open Source Development</a></li> 127</ul> 128</li> 129<li id="menu-item-19" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-19"><a href="https://www.instantiations.com/news/">News</a></li> 130<li id="menu-item-31" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-31"><a href="https://www.instantiations.com/company/">Company</a> 131<ul class="sub-menu"> 132 <li id="menu-item-237" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-237"><a href="/company/">About</a></li> 133 <li id="menu-item-100" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-100"><a href="https://www.instantiations.com/company/history/">History</a></li> 134 <li id="menu-item-4271" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4271"><a href="https://www.instantiations.com/company/careers/">Careers</a></li> 135 <li id="menu-item-4059" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4059"><a href="https://www.instantiations.com/company/responsible-evolution/">Responsible Evolution</a></li> 136 <li id="menu-item-4242" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4242"><a href="https://www.instantiations.com/company/security-and-compliance/">Security and Compliance</a></li> 137 <li id="menu-item-99" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-99"><a href="https://www.instantiations.com/company/management-team/">Management Team</a></li> 138 <li id="menu-item-236" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-236"><a href="https://www.instantiations.com/company/partners/">Partners</a></li> 139</ul> 140</li> 141<li id="menu-item-37" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-37"><a href="https://www.instantiations.com/contact/">Contact</a></li> 142</ul></div> 143 <div class="oxy-pro-menu-mobile-close-icon"><svg id="svg-main-menu"><use xlink:href="#FontAwesomeicon-close"></use></svg></div> 144 145 </div> 146 147 </div> 148 149
149<script type="text/javascript"> 150 jQuery('#main-menu .oxy-pro-menu-show-dropdown .menu-item-has-children > a', 'body').each(function(){ 151 jQuery(this).append('<div class="oxy-pro-menu-dropdown-icon-click-area"><svg class="oxy-pro-menu-dropdown-icon"><use xlink:href="#FontAwesomeicon-caret-down"></use></svg></div>'); 152 }); 153 jQuery('#main-menu .oxy-pro-menu-show-dropdown .menu-item:not(.menu-item-has-children) > a', 'body').each(function(){ 154 jQuery(this).append('<div class="oxy-pro-menu-dropdown-icon-click-area"></div>'); 155 }); </script>
155</div><div id="_header_right-5-10" class="oxy-header-right" ><div id="fancy_icon-50-10" class="ct-fancy-icon" ><svg id="svg-fancy_icon-50-10"><use xlink:href="#FontAwesomeicon-search"></use></svg></div></div></div></div></header> 156 <div tabindex="-1" class="oxy-modal-backdrop top " 157 style="background-color: rgba(0,56,101,0.33);" 158 data-trigger="user_clicks_element" data-trigger-selector="#fancy_icon-50-10" data-trigger-time="5" data-trigger-time-unit="seconds" data-close-automatically="no" data-close-after-time="10" data-close-after-time-unit="seconds" data-trigger_scroll_amount="50" data-trigger_scroll_direction="down" data-scroll_to_selector="" data-time_inactive="60" data-time-inactive-unit="seconds" data-number_of_clicks="3" data-close_on_esc="on" data-number_of_page_views="3" data-close-after-form-submit="no" data-open-again="always_show" data-open-again-after-days="3" > 159 160 <div id="modal-52-10" class="ct-modal" ><div id="text_block-209-10" class="ct-text-block" >Search</div><div id="code_block-55-10" class="ct-code-block" >
160<script async src="//cse.google.com/cse.js?cx=3b00ab17ad5b3eaa1"></script>
160 161<div class="gcse-search"></div></div><div id="fancy_icon-56-10" class="ct-fancy-icon oxy-close-modal" ><svg id="svg-fancy_icon-56-10"><use xlink:href="#FontAwesomeicon-close"></use></svg></div></div> 162 </div> 163 <div id="content" class="ct-div-block " ></div><div id='inner_content-9-305' class='ct-inner-content'><section id="section-220-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="div_block-221-14" class="ct-div-block" ><div id="new_columns-284-14" class="ct-new-columns" ><div id="div_block-285-14" class="ct-div-block" ><h1 id="headline-318-14" class="ct-headline">Responsible <span id="span-320-14" class="ct-span" >Evolution</span><span id="span-319-14" class="ct-span" >®</span></h1><h2 id="headline-287-14" class="ct-headline">Since 1988, weâve delivered custom software solutions guided by Responsible Evolution to modernize, extend and sustain mission-critical systems for global businesses.</h2><a id="link_button-288-14" class="ct-link-button btn-default-rev" href="/news/responsible-evolution/" >Learn More</a></div><div id="div_block-289-14" class="ct-div-block" ><div id="home-hero-abstract" class="ct-code-block" ><picture> 164 <source srcset="/wp-content/uploads/2021/01/hero-abstract-home-50-b.webp" type="image/webp"> 165 <source srcset="/wp-content/uploads/2021/01/hero-abstract-home.png" type="image/png"> 166 <img src="/wp-content/uploads/2021/01/hero-abstract-home.png" alt="Constant Refinement: Abstract Illustration"> 167</picture></div></div></div></div><div id="div_block-224-14" class="ct-div-block" ><div id="div_block-225-14" class="ct-div-block" ></div></div></div></section><section id="section-36-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-37-14" class="ct-new-columns" ><div id="div_block-38-14" class="ct-div-block" ><img id="image-40-14" alt="Companies that work with Instantiations" src="/wp-content/uploads/2025/03/website-logo-group-vertical-b.png" class="ct-image"/></div><div id="div_block-39-14" class="ct-div-block" ><h3 id="headline-41-14" class="ct-headline fifty-fifty-headline">Trusted by top organizations<br>around the world</h3><div id="text_block-42-14" class="ct-text-block" >From individual developers to large enterprise development teams, Instantiations' software and services have helped to maintain and improve mission-critical systems used by hundreds of businesses in dozens of countries.</div></div></div></div></section><section id="section-305-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="div_block-306-14" class="ct-div-block" ><img id="image-307-14" alt="Joachim Tuchel testimonial photo" src="/wp-content/uploads/2021/02/joachim-tuchel-photo-f.jpg" class="ct-image"/><div id="text_block-308-14" class="ct-text-block" >"Instantiations has always proven to be a helpful, reliable partner in solving our problems or those of our customers. They always look for the best solution to satisfy both technical and business needs."</div><div id="text_block-309-14" class="ct-text-block" >Joachim Tuchel</div><div id="text_block-310-14" class="ct-text-block" >Founder, objektfabrik</div></div></div></section><section id="section-312-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="div_block-313-14" class="ct-div-block" ><img id="image-314-14" alt="Adriaan van Os testimonial photo" src="/wp-content/uploads/2021/02/adriaan-van-os-photo-fb.jpg" class="ct-image"/><div id="text_block-315-14" class="ct-text-block" >âInstantiations is as committed to our success as we are.â</div><div id="text_block-316-14" class="ct-text-block" >Adriaan van Os</div><div id="text_block-317-14" class="ct-text-block" >Developer, OHRA</div></div></div></section><section id="section-267-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="div_block-268-14" class="ct-div-block" ><h3 id="headline-269-14" class="ct-headline">Making an impact in software development</h3><div id="text_block-270-14" class="ct-text-block" >Whether itâs development tooling for the Smalltalk or Java<span id="span-271-14" class="ct-span sup-scrpt" >®</span> communities, or new ventures into Dartâ¢, Flutterâ¢, and Toit, Instantiations has a history of making its mark in software engineering.</div><div id="new_columns-272-14" class="ct-new-columns" ><div id="div_block-273-14" class="ct-div-block" ><img id="image-274-14" alt="Smalltalk icon" src="/wp-content/uploads/2022/04/smalltalk-plain-a.svg" class="ct-image home-lang-icon"/></div><div id="div_block-275-14" class="ct-div-block" ><img id="image-276-14" alt="Java icon" src="/wp-content/uploads/2021/01/java-plain.svg" class="ct-image home-lang-icon"/></div><div id="div_block-277-14" class="ct-div-block" ><img id="image-278-14" alt="Flutter icon" src="/wp-content/uploads/2021/01/flutter-plain.svg" class="ct-image home-lang-icon"/></div><div id="div_block-279-14" class="ct-div-block" ><img id="image-280-14" alt="Toit icon" src="/wp-content/uploads/2022/04/toit-plain.svg" class="ct-image home-lang-icon"/></div></div></div><div id="div_block-281-14" class="ct-div-block" ><div id="div_block-282-14" class="ct-div-block" ></div></div></div></section><section id="section-84-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-85-14" class="ct-new-columns" ><div id="div_block-86-14" class="ct-div-block" ><div id="animated-render-blue" class="ct-code-block" ><picture> 168 <source srcset="/wp-content/uploads/2026/02/hero-abstract-vast-2026-90q.webp" type="image/webp"> 169 <source srcset="/wp-content/uploads/2026/02/hero-abstract-vast-2026.png" t
169ype="image/png"> 170 <img src="/wp-content/uploads/2026/02/hero-abstract-vast-2026.png" alt="VAST 2026 - Abstract Illustration"> 171</picture> 172</div></div><div id="div_block-88-14" class="ct-div-block" ><img id="image-105-14" alt="" src="/wp-content/uploads/2026/02/vast-icon-banner_15.0.0.png" class="ct-image"/><h3 id="headline-89-14" class="ct-headline fifty-fifty-headline">Design it. Build it. Deploy it.</h3><div id="text_block-90-14" class="ct-text-block" >Create object-oriented software that's stable, easy to maintain, and deploys smoothly â all from the same comprehensive development environment.<br><br>Since its release in 2005, the VAST Platform (VA Smalltalk) has built upon the foundation provided by IBM<span id="span-251-14" class="ct-span sup-scrpt" >®</span> VisualAge<span id="span-253-14" class="ct-span sup-scrpt" >®</span> Smalltalk and has continued to grow in power and flexibility through ongoing research and development. Today, VAST brings AI-assisted development directly into the IDE with the <a href="https://www.instantiations.com/vast-platform/vast-ai-assistant/">VAST Platform AI Assistant</a>, helping developers understand code, investigate live systems, debug more efficiently, and accelerate development while staying in control of their workflow.<br><br>From traditional servers, to cloud services, and IoT (Internet of Things) devices, VAST can be deployed across multiple operating systems, processor architectures, and hardware configurations.<br></div><div id="div_block-237-14" class="ct-div-block" ><a id="link_button-91-14" class="ct-link-button btn-default" href="/vast-platform/" target="_self" >OVERVIEW</a><a id="link_button-239-14" class="ct-link-button btn-default" href="https://trial.instantiations.com/" target="_self" >DOWNLOAD TRIAL</a></div></div></div></div></section><section id="section-254-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-255-14" class="ct-new-columns" ><div id="div_block-256-14" class="ct-div-block" ><h3 id="headline-257-14" class="ct-headline fifty-fifty-headline">Augment your team</h3><div id="text_block-258-14" class="ct-text-block" >Get help hitting your next deadline or solving a set of tough issues. Whatever tasks need completion, our engineering team will help you reach your software development goals.<br></div><a id="link_button-259-14" class="ct-link-button btn-default" href="/services/custom-development/" >Learn More</a></div><div id="div_block-260-14" class="ct-div-block" ><img id="image-261-14" alt="Remotes sessions for team augmentation" src="/wp-content/uploads/2021/02/team-augment.jpg" class="ct-image"/></div></div></div></section><section id="section-143-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-144-14" class="ct-new-columns" ><div id="div_block-145-14" class="ct-div-block" ><img id="image-146-14" alt="Custom Rust Development example for Unicode" src="/wp-content/uploads/2021/02/cust-dev-home-rust-an.gif" class="ct-image feature-img-border"/></div><div id="div_block-147-14" class="ct-div-block" ><h3 id="headline-148-14" class="ct-headline fifty-fifty-headline">Go beyond open source</h3><div id="text_block-149-14" class="ct-text-block" >When your needs cannot be met by open source software, a custom solution is the best option. We build software to your exact needs and specifications, and we can fully support it after it's completed.<br></div><a id="link_button-150-14" class="ct-link-button btn-default" href="/services/custom-development/" >Learn more</a></div></div></div></section><section id="section-112-14" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-113-14" class="ct-new-columns" ><div id="div_block-116-14" class="ct-div-block" ><h3 id="headline-117-14" class="ct-headline fifty-fifty-headline">Knowledge on-demand</h3><div id="text_block-118-14" class="ct-text-block" >Keep pace with constantly evolving software development standards and approaches. We offer consulting, on-site and remote training, seminars, and continuing education for you (or your team) to keep up-to-date.<br></div><a id="link_button-119-14" class="ct-link-button btn-default" href="/services/consulting-training/" >Learn More</a></div><div id="div_block-114-14" class="ct-div-block" ><img id="image-115-14" alt="Mariano Martinez Peck presenting" src="/wp-content/uploads/2021/01/seminar-image-mp.jpg" class="ct-image"/></div></div></div></section></div><section id="section-2-305" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="div_block-3-305" class="ct-div-block" ><h2 id="headline-4-305" class="ct-headline">Together, we can build something great.</h2><a id="link_button-5-305" class="ct-link-button btn-default" href="/contact/" >GET STARTED</a></div><div id="div_block-6-305" class="ct-div-block" ><div id="div_block-7-305" class="ct-div-block" ></div></div></div></section><section id="section-36-10" class=" ct-section" ><div class="ct-section-inner-wrap"><div id="new_columns-97-10" class="ct-new-columns" ><div id="div_block-98-10" class="ct-div-block" ><a id="link-207-10" class="ct-link" href="/" ><img id="image-45-10" alt="Instantiations Icon" src="/wp-content/uploads/2021/01/instantiations-icon-rgb.svg" class="ct-image"/></a><div id="text_block-70-10" class="ct-text-block" >© Instantiations, Inc. All rights reserved. 'Instantiations', 'Responsible Evolution', and the 'intersecting circle design' are registered trademarks of Instantiations, Inc. in the United States. All product names, trademarks, and registered trademarks are property of their respective owners. Company, product, and service names not owned by Instantiations are used for identification purposes only. Use of these names, trademarks, and brands does not imply endorsement.<br></div></div><div id="div_block-100-10" class="ct-div-block" ><div id="div_block-165-10" class="ct-div-block" ><nav id="_nav_menu-89-10" class="oxy-nav-menu oxy-nav-menu-dropdowns oxy-nav-menu-dropdown-arrow" ><div class='oxy-menu-toggle'><div class='oxy-nav-menu-hamburger-wrap'><div class='oxy-nav-menu-hamburger'><div class='oxy-nav-menu-hamburger-line'></div><div class='oxy-nav-menu-hamburger-line'></div><div class='oxy-nav-menu-hamburger-line'></div></div></div></div><div class="menu-footer-menu-1-container"><ul id="menu-footer-menu-1" class="oxy-nav-menu-list"><li id="menu-item-136" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-136"><a href="https://www.instantiations.com/subscribe/">Subscribe</a></li> 173<li id="menu-item-135" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-135"><a href="https://www.instantiations.com/contact/">Contact</a></li> 174<li id="menu-item-167" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-167"><a rel="privacy-policy" href="https://www.instantiations.com/privacy/">Privacy Policy</a></li> 175<li id="menu-item-4275" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-4275"><a href="https://www.instantiations.com/ai-governance/">AI Governance</a></li> 176</ul></div></nav></div><div id="div_block-99-10" class="ct-div-block" ><a id="link-117-10" class="ct-link footer-social-link" href="https://x.com/instantiations" target="_blank" ><div id="code_block-127-10" class="ct-code-block footer-social" ><svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path d="M98.69812,10.67112h18.33559l-40.25858,45.83898,47.03478,62.18157h-36.91035l-28.89849-37.78726-33.08379,37.78726H6.58169l42.65018-49.02778L4.19009,10.67112h37.82712l26.10829,34.51874,30.57261-34.51874ZM92.28
176066,107.92948h10.1643L36.67598,21.03472h-10.92164l66.52631,86.89476Z" /></svg></div></a><a id="link-118-10" class="ct-link footer-social-link" href="https://www.linkedin.com/company/instantiations" target="_blank" ><div id="code_block-128-10" class="ct-code-block footer-social" ><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 177 viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve"> 178 179<path d="M102.4566,102.4794H86.2764v-25.354c0-6.046-0.1229-13.8265-8.4316-13.8265 180 c-8.4361,0-9.7246,6.5786-9.7246,13.3804v25.8001H51.9399V50.3419h15.5429v7.1068h0.2094 181 c2.1716-4.0974,7.4528-8.4225,15.3426-8.4225c16.3943,0,19.4264,10.7899,19.4264,24.835v28.6182H102.4566z M33.6654,43.2078 182 c-5.2083,0-9.3922-4.2158-9.3922-9.4013c0-5.181,4.1885-9.3922,9.3922-9.3922c5.1901,0,9.3968,4.2112,9.3968,9.3922 183 C43.0621,38.992,38.8509,43.2078,33.6654,43.2078z M41.7783,102.4794H25.5525V50.3419h16.2258V102.4794z M110.5513,9.3676H17.4305 184 c-4.4571,0-8.0628,3.5238-8.0628,7.8716v93.5215c0,4.3524,3.6057,7.8716,8.0628,7.8716h93.1072 185 c4.4525,0,8.0947-3.5192,8.0947-7.8716V17.2393c0-4.3478-3.6422-7.8716-8.0947-7.8716H110.5513z"/> 186</svg></div></a><a id="link-120-10" class="ct-link footer-social-link" href="https://github.com/instantiations" target="_blank" ><div id="code_block-131-10" class="ct-code-block footer-social" ><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 187 viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve"> 188 189<path d="M64,4.1906c-33.8837,0-61.328,27.4596-61.328,61.328c0,27.1019,17.5705,50.0845,41.933,58.1849 190 c3.0664,0.5775,4.1907-1.3186,4.1907-2.9489c0-1.4565-0.0511-5.3151-0.0767-10.4258c-17.0594,3.7001-20.6573-8.2282-20.6573-8.2282 191 c-2.7904-7.0783-6.8227-8.9692-6.8227-8.9692c-5.5553-3.8023,0.4293-3.7257,0.4293-3.7257 192 c6.1583,0.4293,9.3934,6.3168,9.3934,6.3168c5.4684,9.3781,14.3559,6.6694,17.8618,5.1004c0.552-3.9659,2.1311-6.6694,3.8841-8.2026 193 c-13.6199-1.5332-27.9349-6.8074-27.9349-30.3062c0-6.695,2.3765-12.1634,6.3117-16.4563 194 c-0.6899-1.5485-2.7598-7.7835,0.5366-16.2315c0,0,5.1362-1.6456,16.8652,6.2861c4.9062-1.3645,10.1191-2.0392,15.332-2.0698 195 c5.2129,0.0307,10.4258,0.7053,15.332,2.0698c11.6523-7.9318,16.7885-6.2861,16.7885-6.2861 196 c3.2964,8.4479,1.2266,14.6829,0.6133,16.2315c3.9097,4.293,6.2861,9.7614,6.2861,16.4563 197 c0,23.5602-14.3354,28.7475-27.9809,30.2551c2.1465,1.8398,4.1396,5.6013,4.1396,11.3457c0,8.2077-0.0767,14.8005-0.0767,16.7936 198 c0,1.6099,1.0732,3.5264,4.2163,2.9131c24.5363-8.0442,42.0914-31.0422,42.0914-58.1031C125.328,31.6502,97.8684,4.1906,64,4.1906" 199 /> 200</svg> 201</div></a><a id="link-121-10" class="ct-link footer-social-link" href="https://www.youtube.com/channel/UCT7_T8mr_DxC5uIx5wBoitQ" target="_blank" ><div id="code_block-130-10" class="ct-code-block footer-social" ><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 202 viewBox="0 0 128 128" style="enable-background:new 0 0 128 128;" xml:space="preserve"> 203 204<path d="M123.9487,33.7797c-1.4749-5.2849-5.6047-9.4147-10.8896-10.8896c-9.7527-2.6129-49.0033-2.6129-49.0033-2.6129 205 s-39.1516-0.0522-49.0034,2.6129C9.7674,24.365,5.6376,28.4948,4.1627,33.7797C2.314,43.7646,1.4025,53.9003,1.4403,64.0548 206 C1.4097,74.1709,2.3211,84.268,4.1627,94.2151c1.4749,5.2849,5.6047,9.4147,10.8896,10.8896 207 c9.7423,2.6181,49.0033,2.6181,49.0033,2.6181s39.1464,0,49.0034-2.6181c5.2849-1.4749,9.4147-5.6047,10.8896-10.8896 208 c1.8032-9.9508,2.6761-20.0477,2.6077-30.1603C126.6319,53.9039,125.7589,43.7682,123.9487,33.7797z M51.5284,82.7831v-37.514 209 l32.6689,18.7857L51.5284,82.7831z"/> 210</svg> 211</div></a></div><div id="div_block-201-10" class="ct-div-block" ><nav id="_nav_menu-202-10" class="oxy-nav-menu oxy-nav-menu-dropdowns oxy-nav-menu-dropdown-arrow" ><div class='oxy-menu-toggle'><div class='oxy-nav-menu-hamburger-wrap'><div class='oxy-nav-menu-hamburger'><div class='oxy-nav-menu-hamburger-line'></div><div class='oxy-nav-menu-hamburger-line'></div><div class='oxy-nav-menu-hamburger-line'></div></div></div></div><div class="menu-footer-menu-2-container"><ul id="menu-footer-menu-2" class="oxy-nav-menu-list"><li id="menu-item-125" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-125"><a href="https://www.instantiations.com/vast-platform/">VAST Platform</a></li> 212<li id="menu-item-3370" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-3370"><a href="https://www.instantiations.com/fintech/">Fintech</a></li> 213<li id="menu-item-124" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-124"><a href="https://www.instantiations.com/services/">Services</a></li> 214<li id="menu-item-126" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-126"><a href="https://www.instantiations.com/news/">News</a></li> 215<li id="menu-item-127" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-127"><a href="https://www.instantiations.com/company/">Company</a></li> 216</ul></div></nav></div><div id="code_block-116-10" class="ct-code-block" ><!-- --></div></div></div></div></section><div id="code_block-138-10" class="ct-code-block" ><!-- --></div><div id="code_block-136-10" class="ct-code-block" ><!-- --></div><header id="_header-172-10" class="oxy-header-wrapper oxy-sticky-header oxy-overlay-header oxy-header" ><div id="_header_row-173-10" class="oxygen-show-in-sticky-only oxy-header-row" title="Back to top"><div class="oxy-header-container"><div id="_header_left-174-10" class="oxy-header-left" ></div><div id="_header_center-175-10" class="oxy-header-center" ></div><div id="_header_right-176-10" class="oxy-header-right" ><div id="code_block-200-10" class="ct-code-block" ><!-- --></div><a id="div_block-183-10" class="ct-link" href="#top" ><div id="code_block-189-10" class="ct-code-block" ><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path d="M288.662 352H31.338c-17.818 0-26.741-21.543-14.142-34.142l128.662-128.662c7.81-7.81 20.474-7.81 28.284 0l128.662 128.662c12.6 12.599 3.676 34.142-14.142 34.142z"/></svg></div></a></div></div></div></header> 217
217<script type="text/javascript"> 218 jQuery(document).ready(function() { 219 var selector = "#_header-172-10", 220 scrollval = parseInt("1080"); 221 if (!scrollval || scrollval < 1) { 222 jQuery("body").css("margin-top", jQuery(selector).outerHeight()); 223 jQuery(selector).addClass("oxy-sticky-header-active"); 224 } 225 else { 226 var scrollTopOld = 0; 227 jQuery(window).scroll(function() { 228 if (!jQuery('body').hasClass('oxy-nav-menu-prevent-overflow')) { 229 if (jQuery(this).scrollTop() > scrollval 230 ) { 231 if ( 232 !jQuery(selector).hasClass("oxy-sticky-header-active")) { 233 if (jQuery(selector).css('position')!='absolute') { 234 jQuery("body").css("margin-top", jQuery(selector).outerHeight()); 235 } 236 jQuery(selector) 237 .addClass("oxy-sticky-header-active") 238 .addClass("oxy-sticky-header-fade-in"); 239 } 240 } 241 else { 242 jQuery(selector) 243 .removeClass("oxy-sticky-header-fade-in") 244 .removeClass("oxy-sticky-header-active"); 245 if (jQuery(selector).css('position')!='absolute') { 246 jQuery("body").css("margin-top", ""); 247 } 248 } 249 scrollTopOld = jQuery(this).scrollTop(); 250 } 251 }) 252 } 253 }); 254 </script>
254<div id="code_block-211-10" class="ct-code-block" ></div> <!-- WP_FOOTER -->
255<script type="speculationrules"> 256{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/twentytwenty/*","/wp-content/themes/oxygen-is-not-a-theme/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 257</script>
vendor: 1 bytes, line 257
257
258<script>jQuery(document).on('click','a[href*="#"]',function(t){if(jQuery(t.target).closest('.wc-tabs').length>0){return}if(jQuery(this).is('[href="#"]')||jQuery(this).is('[href="#0"]')||jQuery(this).is('[href*="replytocom"]')){return};if(location.pathname.replace(/^\//,"")==this.pathname.replace(/^\//,"")&&location.hostname==this.hostname){var e=jQuery(this.hash);(e=e.length?e:jQuery("[name="+this.hash.slice(1)+"]")).length&&(t.preventDefault(),jQuery("html, body").animate({scrollTop:e.offset().top-0},1000))}});</script>
258<script type="text/javascript" id="ct_custom_js_100056">jQuery("#fancy_icon-56-10").click(function() { 259 jQuery(".gsst_a").click(); 260});</script>
260 261<style>.ct-FontAwesomeicon-search{width:0.92857142857143em}</style> 262<style>.ct-FontAwesomeicon-close{width:0.78571428571429em}</style> 263<style>.ct-FontAwesomeicon-bars{width:0.85714285714286em}</style> 264<style>.ct-FontAwesomeicon-caret-down{width:0.57142857142857em}</style> 265<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1"><defs><symbol id="FontAwesomeicon-search" viewBox="0 0 26 28"><title>search</title><path d="M18 13c0-3.859-3.141-7-7-7s-7 3.141-7 7 3.141 7 7 7 7-3.141 7-7zM26 26c0 1.094-0.906 2-2 2-0.531 0-1.047-0.219-1.406-0.594l-5.359-5.344c-1.828 1.266-4.016 1.937-6.234 1.937-6.078 0-11-4.922-11-11s4.922-11 11-11 11 4.922 11 11c0 2.219-0.672 4.406-1.937 6.234l5.359 5.359c0.359 0.359 0.578 0.875 0.578 1.406z"/></symbol><symbol id="FontAwesomeicon-close" viewBox="0 0 22 28"><title>close</title><path d="M20.281 20.656c0 0.391-0.156 0.781-0.438 1.062l-2.125 2.125c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-4.594-4.594-4.594 4.594c-0.281 0.281-0.672 0.438-1.062 0.438s-0.781-0.156-1.062-0.438l-2.125-2.125c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l4.594-4.594-4.594-4.594c-0.281-0.281-0.438-0.672-0.438-1.062s0.156-0.781 0.438-1.062l2.125-2.125c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l4.594 4.594 4.594-4.594c0.281-0.281 0.672-0.438 1.062-0.438s0.781 0.156 1.062 0.438l2.125 2.125c0.281 0.281 0.438 0.672 0.438 1.062s-0.156 0.781-0.438 1.062l-4.594 4.594 4.594 4.594c0.281 0.281 0.438 0.672 0.438 1.062z"/></symbol><symbol id="FontAwesomeicon-bars" viewBox="0 0 24 28"><title>bars</title><path d="M24 21v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 13v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1zM24 5v2c0 0.547-0.453 1-1 1h-22c-0.547 0-1-0.453-1-1v-2c0-0.547 0.453-1 1-1h22c0.547 0 1 0.453 1 1z"/></symbol><symbol id="FontAwesomeicon-caret-down" viewBox="0 0 16 28"><title>caret-down</title><path d="M16 11c0 0.266-0.109 0.516-0.297 0.703l-7 7c-0.187 0.187-0.438 0.297-0.703 0.297s-0.516-0.109-0.703-0.297l-7-7c-0.187-0.187-0.297-0.438-0.297-0.703 0-0.547 0.453-1 1-1h14c0.547 0 1 0.453 1 1z"/></symbol></defs></svg> 266
266<script type="text/javascript"> 267 268 function oxygen_init_pro_menu() { 269 jQuery('.oxy-pro-menu-container').each(function(){ 270 271 // dropdowns 272 var menu = jQuery(this), 273 animation = menu.data('oxy-pro-menu-dropdown-animation'), 274 animationDuration = menu.data('oxy-pro-menu-dropdown-animation-duration'); 275 276 jQuery('.sub-menu', menu).attr('data-aos',animation); 277 jQuery('.sub-menu', menu).attr('data-aos-duration',animationDuration*1000); 278 279 oxygen_offcanvas_menu_init(menu); 280 jQuery(window).resize(function(){ 281 oxygen_offcanvas_menu_init(menu); 282 }); 283 284 // let certain CSS rules know menu being initialized 285 // "10" timeout is extra just in case, "0" would be enough 286 setTimeout(function() {menu.addClass('oxy-pro-menu-init');}, 10); 287 }); 288 } 289 290 jQuery(document).ready(oxygen_init_pro_menu); 291 document.addEventListener('oxygen-ajax-element-loaded', oxygen_init_pro_menu, false); 292 293 let proMenuMouseDown = false; 294 295 jQuery(".oxygen-body") 296 .on("mousedown", '.oxy-pro-menu-show-dropdown:not(.oxy-pro-menu-open-container) .menu-item-has-children', function(e) { 297 proMenuMouseDown = true; 298 }) 299 300 .on("mouseup", '.oxy-pro-menu-show-dropdown:not(.oxy-pro-menu-open-container) .menu-item-has-children', function(e) { 301 proMenuMouseDown = false; 302 }) 303 304 .on('mouseenter focusin', '.oxy-pro-menu-show-dropdown:not(.oxy-pro-menu-open-container) .menu-item-has-children', function(e) { 305 if( proMenuMouseDown ) return; 306 307 var subMenu = jQuery(this).children('.sub-menu'); 308 subMenu.addClass('aos-animate oxy-pro-menu-dropdown-animating').removeClass('sub-menu-left'); 309 310 var duration = jQuery(this).parents('.oxy-pro-menu-container').data('oxy-pro-menu-dropdown-animation-duration'); 311 312 setTimeout(function() {subMenu.removeClass('oxy-pro-menu-dropdown-animating')}, duration*1000); 313 314 var offset = subMenu.offset(), 315 width = subMenu.width(), 316 docWidth = jQuery(window).width(); 317 318 if (offset.left+width > docWidth) { 319 subMenu.addClass('sub-menu-left'); 320 } 321 }) 322 323 .on('mouseleave focusout', '.oxy-pro-menu-show-dropdown .menu-item-has-children', function( e ) { 324 if( jQuery(this).is(':hover') ) return; 325 326 jQuery(this).children('.sub-menu').removeClass('aos-animate'); 327 328 var subMenu = jQuery(this).children('.sub-menu'); 329 //subMenu.addClass('oxy-pro-menu-dropdown-animating-out'); 330 331 var duration = jQuery(this).parents('.oxy-pro-menu-container').data('oxy-pro-menu-dropdown-animation-duration'); 332 setTimeout(function() {subMenu.removeClass('oxy-pro-menu-dropdown-animating-out')}, duration*1000); 333 }) 334 335 // open icon click 336 .on('click', '.oxy-pro-menu-mobile-open-icon', function() { 337 var menu = jQuery(this).parents('.oxy-pro-menu'); 338 // off canvas 339 if (jQuery(this).hasClass('oxy-pro-menu-off-canvas-trigger')) { 340 oxygen_offcanvas_menu_run(menu); 341 } 342 // regular
343 else { 344 menu.addClass('oxy-pro-menu-open'); 345 jQuery(this).siblings('.oxy-pro-menu-container').addClass('oxy-pro-menu-open-container'); 346 jQuery('body').addClass('oxy-nav-menu-prevent-overflow'); 347 jQuery('html').addClass('oxy-nav-menu-prevent-overflow'); 348 349 oxygen_pro_menu_set_static_width(menu); 350 } 351 // remove animation and collapse 352 jQuery('.sub-menu', menu).attr('data-aos',''); 353 jQuery('.oxy-pro-menu-dropdown-toggle .sub-menu', menu).slideUp(0); 354 }); 355 356 function oxygen_pro_menu_set_static_width(menu) { 357 var menuItemWidth = jQuery(".oxy-pro-menu-list > .menu-item", menu).width(); 358 jQuery(".oxy-pro-menu-open-container > div:first-child, .oxy-pro-menu-off-canvas-container > div:first-child", menu).width(menuItemWidth); 359 } 360 361 function oxygen_pro_menu_unset_static_width(menu) { 362 jQuery(".oxy-pro-menu-container > div:first-child", menu).width(""); 363 } 364 365 // close icon click 366 jQuery('body').on('click', '.oxy-pro-menu-mobile-close-icon', function(e) { 367 368 var menu = jQuery(this).parents('.oxy-pro-menu'); 369 370 menu.removeClass('oxy-pro-menu-open'); 371 jQuery(this).parents('.oxy-pro-menu-container').removeClass('oxy-pro-menu-open-container'); 372 jQuery('.oxy-nav-menu-prevent-overflow').removeClass('oxy-nav-menu-prevent-overflow'); 373 374 if (jQuery(this).parent('.oxy-pro-menu-container').hasClass('oxy-pro-menu-off-canvas-container')) { 375 oxygen_offcanvas_menu_run(menu); 376 } 377 378 oxygen_pro_menu_unset_static_width(menu); 379 }); 380 381 // dropdown toggle icon click 382 jQuery('body').on( 383 'touchstart click', 384 '.oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-off-canvas-container .menu-item-has-children > a > .oxy-pro-menu-dropdown-icon-click-area,'+ 385 '.oxy-pro-menu-dropdown-links-toggle.oxy-pro-menu-open-container .menu-item-has-children > a > .oxy-pro-menu-dropdown-icon-click-area', 386 function(e) { 387 e.preventDefault(); 388 389 // fix for iOS false triggering submenu clicks 390 jQuery('.sub-menu').css('pointer-events', 'none'); 391 setTimeout( function() { 392 jQuery('.sub-menu').css('pointer-events', 'initial'); 393 }, 500); 394 395 // workaround to stop click event from triggering after touchstart 396 if (window.oxygenProMenuIconTouched === true) { 397 window.oxygenProMenuIconTouched = false; 398 return; 399 } 400 if (e.type==='touchstart') { 401 window.oxygenProMenuIconTouched = true; 402 } 403 oxygen_pro_menu_toggle_dropdown(this); 404 } 405 ); 406 407 function oxygen_pro_menu_toggle_dropdown(trigger) { 408 409 var duration = jQuery(trigger).parents('.oxy-pro-menu-container').data('oxy-pro-menu-dropdown-animation-duration'); 410 411 jQuery(trigger).closest('.menu-item-has-children').children('.sub-menu').slideToggle({ 412 start: function () { 413 jQuery(this).css({ 414 display: "flex" 415 }) 416 }, 417 duration: duration*1000 418 }); 419 } 420 421 // fullscreen menu link click 422 var selector = '.oxy-pro-menu-open .menu-item a'; 423 jQuery('body').on('click', selector, function(event){ 424 425 if (jQuery(event.target).closest('.oxy-pro-menu-dropdown-icon-click-area').length > 0) { 426 // toggle icon clicked, no need to hide the menu 427 return; 428 } 429 else if ((jQuery(this).attr("href") === "#" || jQuery(this).closest(".oxy-pro-menu-container").data("entire-parent-toggles-dropdown")) && 430 jQuery(this).parent().hasClass('menu-item-has-children')) { 431 // empty href don't lead anywhere, treat it as toggle trigger 432 oxygen_pro_menu_toggle_dropdown(event.target); 433 // keep anchor links behavior as is, and prevent regular links from page reload 434 if (jQuery(this).attr("href").indexOf("#")!==0) { 435 return false;
436 } 437 } 438 439 // hide the menu and follow the anchor 440 if (jQuery(this).attr("href").indexOf("#")===0) { 441 jQuery('.oxy-pro-menu-open').removeClass('oxy-pro-menu-open'); 442 jQuery('.oxy-pro-menu-open-container').removeClass('oxy-pro-menu-open-container'); 443 jQuery('.oxy-nav-menu-prevent-overflow').removeClass('oxy-nav-menu-prevent-overflow'); 444 } 445 446 }); 447 448 // off-canvas menu link click 449 var selector = '.oxy-pro-menu-off-canvas .menu-item a'; 450 jQuery('body').on('click', selector, function(event){ 451 if (jQuery(event.target).closest('.oxy-pro-menu-dropdown-icon-click-area').length > 0) { 452 // toggle icon clicked, no need to trigger it 453 return; 454 } 455 else if ((jQuery(this).attr("href") === "#" || jQuery(this).closest(".oxy-pro-menu-container").data("entire-parent-toggles-dropdown")) && 456 jQuery(this).parent().hasClass('menu-item-has-children')) { 457 // empty href don't lead anywhere, treat it as toggle trigger 458 oxygen_pro_menu_toggle_dropdown(event.target); 459 // keep anchor links behavior as is, and prevent regular links from page reload 460 if (jQuery(this).attr("href").indexOf("#")!==0) { 461 return false; 462 } 463 } 464 }); 465 466 // off canvas 467 function oxygen_offcanvas_menu_init(menu) { 468 469 // only init off-canvas animation if trigger icon is visible i.e. mobile menu in action 470 var offCanvasActive = jQuery(menu).siblings('.oxy-pro-menu-off-canvas-trigger').css('display'); 471 if (offCanvasActive!=='none') { 472 var animation = menu.data('oxy-pro-menu-off-canvas-animation'); 473 setTimeout(function() {menu.attr('data-aos', animation);}, 10); 474 } 475 else { 476 // remove AOS 477 menu.attr('data-aos', ''); 478 }; 479 } 480 481 function oxygen_offcanvas_menu_run(menu) { 482 483 var container = menu.find(".oxy-pro-menu-container"); 484 485 if (!container.attr('data-aos')) { 486 // initialize animation 487 setTimeout(function() {oxygen_offcanvas_menu_toggle(menu, container)}, 0); 488 } 489 else { 490 oxygen_offcanvas_menu_toggle(menu, container); 491 } 492 } 493 494 var oxygen_offcanvas_menu_toggle_in_progress = false; 495 496 function oxygen_offcanvas_menu_toggle(menu, container) { 497 498 if (oxygen_offcanvas_menu_toggle_in_progress) { 499 return; 500 } 501 502 container.toggleClass('aos-animate'); 503 504 if (container.hasClass('oxy-pro-menu-off-canvas-container')) { 505 506 oxygen_offcanvas_menu_toggle_in_progress = true; 507 508 var animation = container.data('oxy-pro-menu-off-canvas-animation'), 509 timeout = container.data('aos-duration'); 510 511 if (!animation){ 512 timeout = 0; 513 } 514 515 setTimeout(function() { 516 container.removeClass('oxy-pro-menu-off-canvas-container') 517 menu.removeClass('oxy-pro-menu-off-canvas'); 518 oxygen_offcanvas_menu_toggle_in_progress = false; 519 }, timeout); 520 } 521 else { 522 container.addClass('oxy-pro-menu-off-canvas-container'); 523 menu.addClass('oxy-pro-menu-off-canvas'); 524 oxygen_pro_menu_set_static_width(menu); 525 } 526 } 527 </script>
527 528 529 530
530<script type="text/javascript"> 531 532 // Initialize Oxygen Modals 533 jQuery(document).ready(function() { 534 535 function showModal( modal ) { 536 var $modal = jQuery( modal ); 537 $modal.addClass("live"); 538 var modalId = $modal[0].querySelector('.ct-modal').id; 539 540 var focusable = modal.querySelector('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type="text"]:not([disabled]), input[type="radio"]:not([disabled]), input[type="checkbox"]:not([disabled]), select:not([disabled])'); 541 542 if(focusable) { 543 setTimeout(() => { 544 focusable.focus(); 545 }, 500); 546 } else { 547 setTimeout(() => { 548 $modal.focus(); 549 }, 500) 550 } 551 552 // Check if this modal can be shown according to settings and last shown time 553 // Current and last time in milliseconds 554 var currentTime = new Date().getTime(); 555 var lastShownTime = localStorage && localStorage['oxy-' + modalId + '-last-shown-time'] ? JSON.parse( localStorage['oxy-' + modalId + '-last-shown-time'] ) : false; 556 // manual triggers aren't affected by last shown time 557 if( $modal.data( 'trigger' ) != 'user_clicks_element' ) { 558 switch( $modal.data( 'open-again' ) ) { 559 case 'never_show_again': 560 // if it was shown at least once, don't show it again 561 if( lastShownTime !== false ) return; 562 break; 563 case 'show_again_after': 564 var settingDays = parseInt( $modal.data( 'open-again-after-days' ) ); 565 var actualDays = ( currentTime - lastShownTime ) / ( 60*60*24*1000 ); 566 if( actualDays < settingDays ) return; 567 break; 568 default: 569 //always show 570 break; 571 } 572 } 573 574 // Body manipulation to prevent scrolling while modal is active, and maintain scroll position. 575 document.querySelector('body').style.top = `-${window.scrollY}px`; 576 document.querySelector('body').classList.add('oxy-modal-active'); 577 578 // save current time as last shown time 579 if( localStorage ) localStorage['oxy-' + modalId + '-last-shown-time'] = JSON.stringify( currentTime ); 580 581 // trick to make jQuery fadeIn with flex 582 $modal.css("display", "flex"); 583 $modal.hide(); 584 // trick to force AOS trigger on elements inside the modal 585 $modal.find(".aos-animate").removeClass("aos-animate").addClass("aos-animate-disabled"); 586 587 // show the modal 588 $modal.fadeIn(250, function(){ 589 // trick to force AOS trigger on elements inside the modal 590 $modal.find(".aos-animate-disabled").removeClass("aos-animate-disabled").addClass("aos-animate"); 591 }); 592 593 594 if( $modal.data( 'close-automatically' ) == 'yes' ) { 595 var time = parseInt( $modal.data( 'close-after-time' ) ); 596 if( $modal.data( 'close-after-time-unit' ) == 'seconds' ) { 597 time = parseInt( parseFloat( $modal.data( 'close-after-time' ) ) * 1000 ); 598 } 599 setTimeout( function(){ 600 hideModal(modal); 601 }, time ); 602 } 603 604 // close modal automatically after form submit (Non-AJAX) 605 if( $modal.data( 'close-after-form-submit' ) == 'yes' && $modal.data("trigger") == "after_specified_time" ) { 606 607 // WPForms 608 // WPForms replaces the form with a confirmation message on page refresh 609 if( $modal.find(".wpforms-confirmation-container-full").length > 0 ) { 610 setTimeout(function () { 611 hideModal(modal); 612 }, 3000); 613 } 614 615 // Formidable Forms 616 // Formidable Forms replaces the form with a confirmation message on page refresh 617 if( $modal.find(".frm_message").length > 0 ) { 618 setTimeout(function () { 619 hideModal(modal); 620 }, 3000); 621 } 622 623 // Caldera Forms 624 // Caldera Forms replaces the form with a confirmation message on page refresh 625 if( $modal.find(".caldera-grid .alert-success").length > 0 ) { 626 setTimeout(function () { 627 hideModal(modal); 628 }, 3000); 629 } 630 631 } 632 } 633 634 window.oxyShowModal = showModal; 635 636 var hideModal = function ( modal ) { 637 638 // Body manipulation for scroll prevention and maintaining scroll position 639 var scrollY = document.querySelector('body').style.top; 640 document.querySelector('body').classList.remove('oxy-modal-active'); 641 document.querySelector('body').style.top = ''; 642 window.scrollTo(0, parseInt(scrollY || '0') * -1); 643 644 // The function may be called by third party code, without argument, so we must close the first visible modal 645 if( typeof modal === 'undefined' ) { 646 var openModals = jQuery(".oxy-modal-backdrop.live"); 647 if( openModals.length == 0 ) return; 648 modal = openModals[0]; 649 } 650 651 var $modal = jQuery( modal ); 652 // refresh any iframe so media embedded this way is stopped
653 $modal.find( 'iframe').each(function(index){ 654 this.src = this.src; 655 }); 656 // HTML5 videos can be stopped easily 657 $modal.find( 'video' ).each(function(index){ 658 this.pause(); 659 }); 660 // If there are any forms in the modal, reset them 661 $modal.find("form").each(function(index){ 662 this.reset(); 663 }); 664 665 $modal.find(".aos-animate").removeClass("aos-animate").addClass("aos-animate-disabled"); 666 667 $modal.fadeOut(400, function(){ 668 $modal.removeClass("live"); 669 $modal.find(".aos-animate-disabled").removeClass("aos-animate-disabled").addClass("aos-animate"); 670 }); 671 }; 672 673 window.oxyCloseModal = hideModal; 674 675 jQuery( ".oxy-modal-backdrop" ).each(function( index ) { 676 677 var modal = this; 678 679 (function( modal ){ 680 var $modal = jQuery( modal ); 681 682 var exitIntentFunction = function( e ){ 683 if( e.target.tagName == 'SELECT' ) { return; } 684 if( e.clientY <= 0 ) { 685 showModal( modal ); 686 document.removeEventListener( "mouseleave", exitIntentFunction ); 687 document.removeEventListener( "mouseout", exitIntentFunction ); 688 } 689 } 690 691 switch ( jQuery( modal ).data("trigger") ) { 692 693 case "on_exit_intent": 694 document.addEventListener( "mouseleave", exitIntentFunction, false); 695 document.addEventListener( "mouseout", exitIntentFunction, false); 696 break; 697 698 case "user_clicks_element": 699 jQuery( jQuery( modal ).data( 'trigger-selector' ) ).click( function( event ) { 700 showModal( modal ); 701 event.preventDefault(); 702 } ); 703 break; 704 705 case "after_specified_time": 706 var time = parseInt( jQuery( modal ).data( 'trigger-time' ) ); 707 if( jQuery( modal ).data( 'trigger-time-unit' ) == 'seconds' ) { 708 time = parseInt( parseFloat( jQuery( modal ).data( 'trigger-time' ) ) * 1000 ); 709 } 710 setTimeout( function(){ 711 showModal( modal ); 712 }, time ); 713 break; 714 715 case "after_scrolled_amount": 716 window.addEventListener("scroll", function scrollDetection(){ 717 var winheight= window.innerHeight || (document.documentElement || document.body).clientHeight; 718 var docheight = jQuery(document).height(); 719 var scrollTop = window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop; 720 var isScrollUp = false; 721 var oxyPreviousScrollTop = parseInt( jQuery( modal ).data( 'previous_scroll_top' ) ); 722 if( !isNaN( oxyPreviousScrollTop ) ) { 723 if( oxyPreviousScrollTop > scrollTop) isScrollUp = true; 724 } 725 jQuery( modal ).data( 'previous_scroll_top', scrollTop ); 726 var trackLength = docheight - winheight; 727 var pctScrolled = Math.floor(scrollTop/trackLength * 100); 728 if( isNaN( pctScrolled ) ) pctScrolled = 0; 729 730 if( 731 ( isScrollUp && jQuery( modal ).data( 'trigger_scroll_direction' ) == 'up' ) || 732 ( !isScrollUp && jQuery( modal ).data( 'trigger_scroll_direction' ) == 'down' && pctScrolled >= parseInt( jQuery( modal ).data( 'trigger_scroll_amount' ) ) ) 733 ) { 734 showModal( modal ); 735 window.removeEventListener( "scroll", scrollDetection ); 736 } 737 }, false); 738 break; 739 case "on_scroll_to_element": 740 window.addEventListener("scroll", function scrollDetection(){ 741 var $element = jQuery( jQuery( modal ).data( 'scroll_to_selector' ) ); 742 if( $element.length == 0 ) { 743 window.removeEventListener( "scroll", scrollDetection ); 744 return; 745 } 746 747 var top_of_element = $element.offset().top; 748 var bottom_of_element = $element.offset().top + $element.outerHeight(); 749 var bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).innerHeight(); 750 var top_of_screen = jQuery(window).scrollTop(); 751 752 if ((bottom_of_screen > bottom_of_element - $element.outerHeight() /2 ) && (top_of_screen < top_of_element + $element.outerHeight() /2 )){ 753 showModal( modal ); 754 window.removeEventListener( "scroll", scrollDetection ); 755 } 756 }, false); 757 break; 758 case "after_number_of_clicks": 759 document.addEventListener("click", function clickDetection(){ 760 var number_of_clicks = parseInt( jQuery( modal ).data( 'number_of_clicks' ) ); 761 762 var clicks_performed = isNaN( parseInt( jQuery( modal ).data( 'clicks_performed' ) ) ) ? 1 : parseInt( jQuery( modal ).data( 'clicks_performed' ) ) + 1; 763 764 jQuery( modal ).data( 'clicks_performed', clicks_performed ); 765 766 if ( clicks_performed == number_of_clicks ){ 767 showModal( modal ); 768 document.removeEventListener( "click", clickDetection ); 769 } 770 }, false); 771 break; 772 case "after_time_inactive": 773 var time = parseInt( jQuery( modal ).data( 'time_inactive' ) ); 774 if( jQuery( modal ).data( 'time-inactive-unit' ) == 'seconds' ) { 775 time = parseInt( parseFloat( jQuery( modal ).data( 'time_inactive' ) ) * 1000 ); 776 } 777 var activityDetected = function(){ 778 jQuery( modal ).data( 'millis_idle', 0 ); 779 }; 780 document.addEventListener( "click", activityDetected); 781 document.addEventListener( "mousemove", activityDetected); 782 document.addEventListener( "keypress", activityDetected); 783 document.addEventListener( "scroll", activityDetected); 784 785 var idleInterval = setInterval(function(){ 786 var millis_idle = isNaN( parseInt( jQuery( modal ).data( 'millis_idle' ) ) ) ? 100 : parseInt( jQuery( modal ).data( 'millis_idle' ) ) + 100; 787 jQuery( modal ).data( 'millis_idle', millis_idle ); 788 if( millis_idle > time ){ 789 clearInterval( idleInterval ); 790 document.removeEventListener( "click", activityDetected ); 791 document.removeEventListener( "mousemove", activityDetected ); 792 document.removeEventListener( "keypress", activityDetected ); 793 document.removeEventListener( "scroll", activityDetected ); 794 showModal( modal ); 795 } 796 }, 100); 797 break; 798 799 case "after_number_of_page_views": 800 var modalId = modal.querySelector('.ct-modal').id; 801 var pageViews = localStorage && localStorage['oxy-' + modalId + '-page-views'] ? parseInt( localStorage['oxy-' + modalId + '-page-views'] ) : 0; 802 pageViews++; 803 if( localStorage ) localStorage['oxy-' + modalId + '-page-views'] = pageViews; 804 if( parseInt( jQuery( modal ).data( 'number_of_page_views' ) ) == pageViews ) { 805 if( localStorage ) localStorage['oxy-' + modalId + '-page-views'] = 0; 806 showModal( modal ); 807 } 808 break; 809 810 } 811 812 // add event handler to close modal automatically after AJAX form submit 813 if( $modal.data( 'close-after-form-submit' ) == 'yes' ) { 814 815 // Contact Form 7 816 if (typeof wpcf7 !== 'undefined') { 817 $modal.find('div.wpcf7').each(function () { 818 var $form = jQuery(this).find('form'); 819 this.addEventListener('wpcf7submit', function (event) { 820 if (event.detail.contactFormId == $form.attr("id")) { 821 setTimeout(function () { 822 hideModal(modal); 823 }, 3000); 824 } 825 }, false); 826 }); 827 } 828 829 // Caldera Forms 830 document.addEventListener( "cf.submission", function(event){ 831 // Pending, Caldera AJAX form submissions aren't working since Oxygen 2.2, see: https://github.com/soflyy/oxygen/issues/1638 832 }); 833 834 // Ninja Forms 835 jQuery(document).on("nfFormSubmitResponse", function(event, response){ 836 // Only close the modal if the event was triggered from a Ninja Form inside the modal 837 if( $modal.find("#nf-form-" + response.id + "-cont").length > 0 ) { 838 setTimeout(function () { 839 hideModal(modal); 840 }, 3000); 841 } 842 }); 843 844 } 845 846 })( modal ); 847 848 }); 849 850 // handle clicks on modal backdrop and on .oxy-close-modal 851 jQuery("body").on('click touchend', '.oxy-modal-backdrop, .oxy-close-modal', function( event ) { 852 853 var $this = jQuery( this ); 854 var $target = jQuery( event.target ); 855 856 // Click event in the modal div and it's children is propagated to the backdrop 857 if( !$target.hasClass( 'oxy-modal-backdrop' ) && !$this.hasClass( 'oxy-close-modal' ) ) { 858 //event.stopPropagation(); 859 return; 860 } 861 862 if( $target.hasClass( 'oxy-modal-backdrop' ) && $this.hasClass( 'oxy-not-closable' ) ) { 863 return; 864 } 865 866 if( $this.hasClass( 'oxy-close-modal' ) ) event.preventDefault(); 867 868 var $modal = $this.hasClass( 'oxy-close-modal' ) ? $this.closest('.oxy-modal-backdrop') : $this; 869 hideModal( $modal[0] ); 870 }); 871 872 jQuery(document).keyup( function(e){ 873 if( e.key == 'Escape' ){ 874 jQuery(".oxy-modal-backdrop:visible").each(function(index){ 875 if( jQuery(this).data("close_on_esc") == 'on' ) hideModal(this); 876 }); 877 } 878 } ); 879 880 }); 881 882 </script>
882 883 884 885
885<script type="text/javascript"> 886 jQuery(document).ready(function() { 887 jQuery('body').on('click', '.oxy-menu-toggle', function() { 888 jQuery(this).parent('.oxy-nav-menu').toggleClass('oxy-nav-menu-open'); 889 jQuery('body').toggleClass('oxy-nav-menu-prevent-overflow'); 890 jQuery('html').toggleClass('oxy-nav-menu-prevent-overflow'); 891 }); 892 var selector = '.oxy-nav-menu-open .menu-item a[href*="#"]'; 893 jQuery('body').on('click', selector, function(){ 894 jQuery('.oxy-nav-menu-open').removeClass('oxy-nav-menu-open'); 895 jQuery('body').removeClass('oxy-nav-menu-prevent-overflow'); 896 jQuery('html').removeClass('oxy-nav-menu-prevent-overflow'); 897 jQuery(this).click(); 898 }); 899 }); 900 </script>
900 901 902
902<script type="text/javascript" src="https://www.instantiations.com/wp-content/plugins/oxygen/component-framework/vendor/aos/aos.js?ver=1" id="oxygen-aos-js"></script>
vendor: 1 bytes, line 902
902
903<script type="text/javascript" id="ct-footer-js"> 904 AOS.init({ 905 }) 906 907 jQuery('body').addClass('oxygen-aos-enabled'); 908 909 910 </script>
910<style type="text/css" id="ct_code_block_css_100210">/* Styles for users who prefer dark mode at the OS level */ 911@media (prefers-color-scheme: dark) { 912 /* defaults to dark theme */ 913 body { 914 /* color: #003865; */ 915 background-color: #FFFFFF; 916 } 917 input 918 { 919 background-color: #FFFFFF; 920 color: #003865; 921 } 922}</style>
923<script type="text/javascript" id="ct_code_block_js_100205"> jQuery( document ).ready(function() { 924 // bind a click event to the 'skip' link 925 jQuery(".skip").click(function(event){ 926 927 // strip the leading hash and declare 928 // the content we're skipping to 929 var skipTo="#"+this.href.split('#')[1]; 930 931 // Setting 'tabindex' to -1 takes an element out of normal 932 // tab flow but allows it to be focused via javascript 933 jQuery(skipTo).attr('tabindex', -1).on('blur focusout', function () { 934 935 // when focus leaves this element, 936 // remove the tabindex attribute 937 jQuery(this).removeAttr('tabindex'); 938 939 }).focus(); // focus on the content container 940 }); 941 });</script>
941 942<style type="text/css" id="ct_code_block_css_100205"> .skip { 943 transition:top .5s; 944 z-index:1000; 945 } 946 947 a.skip:active, 948 a.skip:focus, 949 a.skip:hover { 950 top:5px !important; 951 }</style>
952<script type="text/javascript" id="ct_code_block_js_100164">jQuery(function($){ 953 954 var ua = window.navigator.userAgent; 955 var msie = ua.indexOf("MSIE"); 956 var trident = ua.indexOf("Trident"); 957 958 if (msie > 0 || trident > 0) { 959 //console.log("This is IE"); 960 $("#ie-bar").css("display", "block"); 961 962 } else { 963 //console.log("This is not IE"); 964 965 }; 966 967});</script>
967 968<style type="text/css" id="ct_code_block_css_100164">#ie-bar 969{ 970 display:none; 971 width:100%; 972 background-color:#ec0046; 973 padding:10px; 974 position:relative; 975 976} 977 978#ie-bar-inner 979{ 980 width:600px; 981 text-align:center; 982 display:block; 983 margin:auto; 984 z-index:999; 985 font-weight:700; 986 font-size:16px; 987 line-height:20px; 988 color:#ffffff; 989}</style> 990<style type="text/css" id="ct_code_block_css_100135">.oxy-pro-menu .oxy-pro-menu-mobile-close-icon { 991 top: 20px; 992 right: 20px; 993 left:auto; 994} 995 996 997#top .oxy-header-center 998{ 999display:flex; 1000justify-content:flex-start; 1001} 1002 1003/*.current-menu-item 1004{ 1005 border-bottom:3px solid #ec0042; 1006}*/</style> 1007<style type="text/css" id="ct_code_block_css_100055">#code_block-55-10 1008{ 1009 margin-top:5px; 1010 margin-left:17px; 1011} 1012 1013 1014/* Google Search result modifications */ 1015 1016.gs-title, .gs-webResult.gs-result a.gs-title b, .gs-webResult.gs-result a.gs-title:hover b 1017{ 1018 font-family:'Lato' !important; 1019 font-size:32px !important; 1020 transition:color .25s; 1021} 1022 1023.gsc-url-top 1024{ 1025 font-family:'Lato' !important; 1026 1027} 1028 1029.gsc-control-cse .gsc-table-result 1030{ 1031 font-family:'Lato' !important; 1032 1033} 1034 1035.gsc-search-button-v2, .gsc-search-button-v2:hover, .gsc-search-button-v2:focus 1036{ 1037 border:none; 1038 background-color:transparent; 1039 padding: 6px 6px 6px 6px; 1040 margin-right:19px; 1041} 1042 1043.gsc-search-button-v2 svg 1044{ 1045 width:23px; 1046 height:23px; 1047 cursor:pointer; 1048 transition:fill .25s; 1049} 1050 1051.gsc-search-button-v2 svg:hover 1052{ 1053 fill:#ec0046; 1054 transition:fill .25s; 1055} 1056 1057.gsc-webResult.gsc-result 1058{ 1059 padding: 30px 0; !important; 1060} 1061 1062 1063.gsc-results .gsc-cursor-box .gsc-cursor-current-page 1064{ 1065 color: #ec0046; 1066} 1067 1068.gsc-adBlock, .gcsc-find-more-on-google-root, .gcsc-more-maybe-branding-root 1069{ 1070 display:none !important; 1071} 1072 1073/* search and close icons */ 1074 1075svg#svg-fancy_icon-50-10, svg#svg-fancy_icon-56-10{ 1076 1077transition:fill .25s; 1078 1079} 1080 1081svg#svg-fancy_icon-50-10:hover, svg#svg-fancy_icon-56-10:hover{ 1082 1083fill: #ec0046; 1084transition:fill .25s; 1085 1086} 1087 1088form.gsc-search-box { 1089 max-width: 100% 1090} 1091 1092.gsc-wrapper 1093{ 1094 max-width: 1180px; 1095 width: 66%; 1096}</style> 1097<style type="text/css" id="ct_code_block_css_290">#home-hero-abstract 1098{ 1099 position: relative; 1100 max-width: 100%; 1101 margin-top: -345px; 1102 1103} 1104 1105 1106 1107 1108 1109@media only screen and (max-width: 1400px) { 1110 1111 #home-hero-abstract 1112 { 1113 max-width: 133%; 1114 margin-top: calc(-50vw + 581px); 1115 } 1116 1117} 1118 1119 1120 1121@media only screen and (max-width: 1199px) { 1122 1123 #home-hero-abstract 1124 { 1125 right:-25%; 1126 margin-top:-30%; 1127 } 1128} 1129 1130 1131 1132@media only screen and (max-width: 900px) { 1133 1134 #home-hero-abstract 1135 { 1136 left:-10%; 1137 margin-top:-25%; 1138 } 1139} 1140 1141@media only screen and (max-width: 767px) { 1142 #home-hero-abstract 1143 { 1144 left:-25%; 1145 margin-top:-12%; 1146 } 1147 1148 #home-hero-abstract img 1149 { 1150 height:700px; 1151 } 1152 1153 1154} 1155 1156 1157@media only screen and (max-width: 479px) { 1158 #home-hero-abstract 1159 { 1160 margin-top:70%; 1161 } 1162 1163} 1164 1165@media only screen and (max-width: 321px) { 1166 1167 1168}</style> 1169<style type="text/css" id="ct_code_block_css_263">#animated-render-blue { 1170 1171 1172} 1173 1174#animated-render-blue img{ 1175 max-width: 100%; 1176} 1177 1178 1179@media only screen and (max-width: 1399px) { 1180 1181 1182} 1183 1184 1185 1186@media only screen and (max-width: 1199px) { 1187 #animated-render-blue img 1188 { 1189 margin-top: -25px; 1190 } 1191 1192} 1193 1194@media only screen and (max-width: 767px) { 1195 1196 1197} 1198 1199 1200@media only screen and (max-width: 479px) { 1201 1202 #animated-render-blue img 1203 { 1204 margin-top: -25px; 1205 } 1206} 1207 1208 1209@media only screen and (max-width: 321px) { 1210 1211 #animated-render-blue img 1212 { 1213 margin-top: -100px; 1214 } 1215}</style> 1216<style type="text/css" id="ct_code_block_css_100127">.footer-social-link svg { 1217 transition:all .25s; 1218 opacity:.75; 1219 fill:#003865; 1220} 1221 1222 1223.footer-social-link svg:hover{ 1224 1225 transition:all .25s; 1226 opacity:1; 1227 fill:#ec0046; 1228 1229} 1230</style> 1231<style type="text/css" id="ct_code_block_css_100116">@media (max-width:1199px) 1232{ 1233#_nav_menu-89-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a, #_nav_menu-80-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a, 1234 #_nav_menu-202-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a, #_nav_menu-202-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a{ 1235 justify-content:center; 1236} 1237#_nav_menu-89-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a:hover, #_nav_menu-80-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a:hover, 1238 #_nav_menu-202-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a:hover, #_nav_menu-202-10.oxy-nav-menu:not(.oxy-nav-menu-open) .menu-item a:hover{ 1239 justify-content:center; 1240} 1241 1242#_nav_menu-89-10 .oxy-nav-menu-list, #_nav_menu-80-10 .oxy-nav-menu-list, 1243#_nav_menu-202-10 .oxy-nav-menu-list, #_nav_menu-202-10 .oxy-nav-menu-list { 1244 flex-direction: row; 1245 1246} 1247 1248 1249@media (max-width:767px) 1250{ 1251 1252#_nav_menu-89-10 .oxy-nav-menu-list, #_nav_menu-80-10 .oxy-nav-menu-list, 1253 #_nav_menu-202-10 .oxy-nav-menu-list, #_nav_menu-202-10 .oxy-nav-menu-list 1254 { 1255 flex-direction: column; 1256 1257}</style> 1258<style type="text/css" id="ct_code_block_css_100138">/* Styles for Cookie Pop-up */ 1259 1260/* GDPR Cookie dialog */ 1261 1262.gdprcookie { 1263 position: fixed; 1264 color: #fff; 1265 font-size: 13px; 1266 line-height: 18px; 1267 right: 1.5rem; 1268 bottom: 1.5rem; 1269 max-width: 28em; 1270 padding: 1rem; 1271 background: #003865; 1272 /* box-shadow: 1px 1px 10px 3px rgb(0 56 101 / 25%);*/ 1273 z-index:99999; 1274 font-family: Lato; 1275} 1276 1277@media only screen and (max-width: 479px) { 1278 .gdprcookie { 1279 max-width: 30em; 1280 left: 1.25rem; 1281 right: 1.25rem; 1282 bottom: 1.25rem; 1283 } 1284} 1285 1286.gdprcookie ul 1287{ 1288 1289 display:inline-block; 1290} 1291 1292.gdprcookie div:first-of-type{ 1293 font-size: 17px; 1294 font-weight:700; 1295 line-height:15px; 1296} 1297 1298.gdprcookie p{ 1299 font-size: 13px; 1300 font-weight:400; 1301 line-height: 18px; 1302 margin-bottom:20px; 1303} 1304 1305.gdprcookie-types div:first-of-type { 1306 1307 font-size: 13px; 1308 font-weight:700; 1309 line-height:15px; 1310 margin-bottom:10px; 1311} 1312.gdprcookie a { 1313 color: #fff; 1314 text-decoration:underline; 1315 transition:color .25s; 1316} 1317 1318.gdprcookie a:hover { 1319 color:#fff; 1320 transition:color .25s; 1321 text-decoration:none; 1322} 1323 1324 1325/* GDPR Cookie buttons */ 1326 1327.gdprcookie-buttons { 1328 text-align: center; 1329 width:100%; 1330} 1331.gdprcookie-buttons button { 1332 color: #FFF; 1333 font-family: inherit; 1334 font-size: 13px; 1335 padding: 4px 6px; 1336 letter-spacing: .5px; 1337 border:1px solid #FFF; 1338 border-radius: 30px; 1339 margin-right:2%; 1340 cursor: pointer; 1341 transition:color .25s; 1342 width:48%; 1343 background:#003865; 1344 font-weight:400; 1345 text-transform: uppercase; 1346} 1347 1348.gdprcookie-buttons button:last-of-type{ 1349 margin-right:0; 1350} 1351 1352.gdprcookie-buttons button:hover { 1353 color: #003865; 1354 transition:all .25s; 1355 border: 1px solid #fff; 1356 background-color: #fff; 1357} 1358 1359.gdprcookie-buttons button:disabled { 1360 color: #fff; 1361 cursor:default; 1362 border:1px solid #fff; 1363 background:transparent; 1364 opacity:.33; 1365} 1366 1367#cookiecontrol 1368{ 1369 border-width:0; 1370} 1371 1372/* GDPR Cookie types */ 1373 1374.gdprcookie-types ul { 1375 overflow: hidden; 1376 padding: 0; 1377 margin: 0 0 15px 0; 1378 width:100%; 1379} 1380.gdprcookie-types li:first-child { 1381 display: block; 1382 list-style: none; 1383 float: left; 1384 width: 40%; 1385 padding: 0; 1386 margin: 0; 1387 list-style-type:none; 1388} 1389 1390.gdprcookie-types li:nth-child(2) { 1391 display: block; 1392 list-style: none; 1393 float: left; 1394 width: 60%; 1395 padding: 0; 1396 margin: 0; 1397 list-style-type:none; 1398} 1399 1400.gdprcookie-types input[type=checkbox] { 1401 margin-right: .25rem; 1402 font-size:20px; 1403}</style>
1404<script type="text/javascript" id="ct_code_block_js_100136">/*! 1405 * gdpr-cookie - A jQuery plugin to manage cookie settings in compliance with EU law 1406 * 1407 * Copyright (c) 2018 Martijn Saly 1408 * 1409 * Licensed under the MIT license: 1410 * http://www.opensource.org/licenses/mit-license.php 1411 * 1412 * Version: 0.2.0 1413 * 1414 */ 1415;(function(root, factory) { 1416 if (typeof define === "function" && define.amd) { 1417 // AMD 1418 define([ "jquery" ], factory); 1419 } 1420 else if (typeof module === "object" && module.exports) { 1421 // CommonJS 1422 module.exports = function( root, jQuery ) { 1423 if (jQuery === undefined) { 1424 if (typeof window !== "undefined") { 1425 jQuery = require("jquery"); 1426 } 1427 else { 1428 jQuery = require("jquery")(root); 1429 } 1430 } 1431 factory(jQuery); 1432 return jQuery; 1433 }; 1434 } 1435 else { 1436 // Plain 1437 factory(root.jQuery); 1438 } 1439}(this, function($) { 1440 "use strict"; 1441 1442 var settings, showing = false, display, isAdvanced = false, seenAdvanced = false; 1443 1444 var setCookie = function(name, value, expires) { 1445 var d = new Date(); 1446 d.setTime(d.getTime() + expires * 24 * 60 * 60 * 1000); 1447 // ";SameSite=Strict" was added to adhere to the new browser rules for cookies, GS 1448 document.cookie = name + "=" + value + ";expires=" + d.toUTCString() + ";path=/" + ";SameSite=Strict" + ";domain=instantiations.com"; 1449 return getCookie(name); 1450 }; 1451 1452 var getCookie = function(name) { 1453 var ca = decodeURIComponent(document.cookie).split(";"); 1454 name += "="; 1455 for (var i = 0; i < ca.length; i++) { 1456 var c = ca[i]; 1457 while (c.charAt(0) == " ") { 1458 c = c.substring(1); 1459 } 1460 if (c.indexOf(name) === 0) { 1461 return c.substring(name.length, c.length); 1462 } 1463 } 1464 }; 1465 1466 var validateCookieName = function(name) { 1467 // Cookie name may consist of \u0021-\u007e, excluding whitespace and characters , ; =
1468 return name.replace(/[^\u0021-\u007e]|[,;=\s]/g, ""); 1469 }; 1470 1471 var getPreferences = function() { 1472 var preferences = getCookie(settings.cookieName); 1473 try { 1474 preferences = JSON.parse(preferences); 1475 } 1476 catch(ex) { 1477 return; 1478 } 1479 1480 if (!Array.isArray(preferences) || !preferences.length) { 1481 return; 1482 } 1483 1484 var knownTypes = settings.cookieTypes.map(function(type) { 1485 return type.value; 1486 }); 1487 preferences = preferences.filter(function(pref) { 1488 return knownTypes.indexOf(pref) >= 0; 1489 }); 1490 1491 return preferences; 1492 }; 1493 1494 $.gdprcookie = { }; 1495 1496 $.gdprcookie.init = function(options) { 1497 1498 // Define defaults 1499 var defaultSettings = { 1500 cookieTypes: [ 1501 { 1502 type: "Essential", 1503 value: "essential", 1504 description: "These are cookies that are essential for the website to work correctly.", 1505 checked: true, 1506 }, 1507 { 1508 type: "Site Preferences", 1509 value: "preferences", 1510 description: "These are cookies that are related to your site preferences, e.g. remembering your username, site colours, etc.", 1511 checked: true, 1512 }, 1513 { 1514 type: "Analytics", 1515 value: "analytics", 1516 description: "Cookies related to site visits, browser types, etc.", 1517 checked: true, 1518 }, 1519 { 1520 type: "Marketing", 1521 value: "marketing", 1522 description: "Cookies related to marketing, e.g. newsletters, social media, etc", 1523 checked: true, 1524 } 1525 ], 1526 title: "Cookies & privacy", 1527 subtitle: "Select cookies to accept", 1528 message: "Cookies enable you to use shopping carts and to personalize your experience on our sites, tell us which parts of our websites people have visited, help us measure the effectiveness of ads and web searches, and give us insights into user behaviour so we can improve our communications and products.", 1529 submessage: "", 1530 delay: 0, // delay in milliseconds 1531 expires: 30, // expiration date 1532 cookieName: "cookieControlPrefs", 1533 acceptReload: false, 1534 acceptBeforeAdvanced: [ "essential" ], 1535 acceptAfterAdvanced: [ "essential" ], 1536 allowUnadvanced: false, 1537 switchAdvanced: false, 1538 acceptBtnLabel: "Accept cookies", 1539 advancedBtnLabel: "Customize cookies", 1540 unadvancedBtnLabel: "Back", 1541 customShowMessage: undefined, 1542 customHideMessage: undefined, 1543 customShowChecks: undefined, 1544 customHideChecks: undefined 1545 }; 1546 1547 // Set defaults 1548 settings = $.extend(defaultSettings, window.GdprCookieSettings, options); 1549 1550 // Coerce into a string because this is poured into innerHTML 1551 settings.message = String(settings.message); 1552 1553 // Coerce into a positive number because it is passed to setTimeout 1554 settings.delay = Math.max(0, +settings.delay) || 0; 1555 1556 // Coerce into a positive whole number between 0 and 730 (2-ish years), to ensure a well-formed cookie value 1557 settings.expires = Math.round(Math.min(Math.max(0, +settings.expires), 730)) || 0; 1558 1559 // Coerce cookieTypes into an array containing plain objects 1560 if (Array.isArray(settings.cookieTypes)) { 1561 settings.cookieTypes = settings.cookieTypes.filter(function(cookieType) { 1562 return $.isPlainObject(cookieType); 1563 }); 1564 if (!settings.cookieTypes.length) { 1565 settings.cookieTypes = defaultSettings.cookieTypes; 1566 } 1567 } 1568 else { 1569 settings.cookieTypes = defaultSettings.cookieTypes; 1570 } 1571 1572 // Coerce into a string and valid cookie name 1573 settings.cookieName = validateCookieName(String(settings.cookieName || "")) || "cookieControlPrefs"; 1574 1575 // Coerce acceptBeforeAdvanced and acceptAfterAdvanced into arrays of str
1575ings, that exist in settings.cookieTypes[].value 1576 var coerce = (function() { 1577 var values = settings.cookieTypes.map(function(cookieType) { return cookieType.value; }), 1578 exists = function(item) { return values.indexOf(item) >= 0; }; 1579 1580 return function(setting) { 1581 // Convert a single string into an array of 1 1582 setting = typeof setting === "string" ? [ setting ] : setting; 1583 1584 // If it's an array, make sure it only contains known cookie types 1585 return Array.isArray(setting) ? setting.map(String).filter(exists) : undefined; 1586 }; 1587 }()); 1588 settings.acceptBeforeAdvanced = coerce(settings.acceptBeforeAdvanced); 1589 settings.acceptAfterAdvanced = coerce(settings.acceptAfterAdvanced); 1590 1591 $(function() { display(); }); 1592 }; 1593 1594 display = function(alwaysShow) { 1595 if (showing) { 1596 return; 1597 } 1598 1599 var body = $("body"), 1600 myCookiePrefs = getPreferences(); 1601 1602 var elements = { 1603 container: undefined, 1604 introContainer: undefined, 1605 types: undefined, 1606 typesContainer: undefined, 1607 buttons: { 1608 accept: undefined, 1609 advanced: undefined 1610 }, 1611 allChecks: [ ], 1612 nonessentialChecks: [ ] 1613 }; 1614 1615 var hide = function(canreload) { 1616 if (elements.container) { 1617 if ($.isFunction(settings.customHideMessage)) { 1618 settings.customHideMessage.call(elements.container, elements.container); 1619 showing = false; 1620 } 1621 else { 1622 elements.container.fadeOut("fast", function() { 1623 $(this).remove(); 1624 showing = false; 1625 }); 1626 } 1627 } 1628 if (canreload && settings.acceptReload) { 1629 document.location.reload(); 1630 } 1631 }; 1632 1633 if (!Array.isArray(myCookiePrefs) || !myCookiePrefs.length) { 1634 myCookiePrefs = undefined; 1635 } 1636 1637 if (alwaysShow || !myCookiePrefs) { 1638 elements.types = $("<ul/>").append( 1639 $.map(settings.cookieTypes, function(field, index) { 1640 if (!field.type || !field.value) { 1641 return; 1642 } 1643 var isEssential = field.value === "essential", 1644 isChecked; 1645 1646 if (Array.isArray(myCookiePrefs)) { 1647 isChecked = myCookiePrefs.indexOf(field.value) >= 0; 1648 } 1649 else { 1650 isChecked = field.checked === true; 1651 } 1652 1653 var input = $("<input/>", { 1654 type: "checkbox", 1655 id: "gdpr-cookietype-" + index, 1656 name: "gdpr[]", 1657 value: field.value, 1658 1659 // The essential cookies checkbox is checked and cannot be unchecked 1660 checked: isEssential || isChecked, 1661 disabled: isEssential 1662 }); 1663 1664 elements.allChecks.push(input.get(0)); 1665 if (!isEssential) { 1666 elements.nonessentialChecks.push(input.get(0)); 1667 } 1668 1669 var label = $("<label/>", { 1670 "for": "gdpr-cookietype-" + index, 1671 text: field.type, 1672 title: field.description 1673 }); 1674 1675 return $("<li/>").append([ 1676 input.get(0), 1677 label.get(0) 1678 ]).get(0); 1679 }) 1680 ); 1681 elements.allChecks = $(elements.allChecks); 1682 elements.nonessentialChecks = $(elements.nonessentialChecks); 1683 1684 // When accept button is clicked drop cookie 1685 var acceptClick = function() { 1686 var prefsFromCheckboxes = function() { 1687 return elements.allChecks 1688 .filter(function() { return this.checked || this.disabled; }) 1689 .map(function() { return this.value; }) 1690 .get(); 1691 }; 1692 var prefsOutsideAdvanced = function(where) { 1693 var setting = "accept" + where + "Advanced"; 1694 return Array.isArray(settings[setting]) ? settings[setting] : prefsFromCheckboxes(); 1695 }; 1696 1697 // Hide the cookie message 1698 hide(true); 1699 1700 // Save user cookie preferences (in a cookie!) 1701 var prefs = isAdvanced ? prefsFromCheckboxes() : prefsOutsideAdvanced(seenAdvanced ? "After" : "Before");
1702 setCookie(settings.cookieName, JSON.stringify(prefs), settings.expires); 1703 1704 // Trigger cookie accept event 1705 body.trigger("gdpr:accept"); 1706 }; 1707 1708 // Toggle advanced cookie options 1709 var advancedClick = function() { 1710 var showAdvanced = function() { 1711 if (!settings.allowUnadvanced) { 1712 elements.buttons.advanced.prop("disabled", true); 1713 } 1714 1715 if ($.isFunction(settings.customShowChecks)) { 1716 settings.customShowChecks.call(elements.typesContainer, elements.typesContainer, elements.introContainer); 1717 } 1718 else { 1719 if (settings.switchAdvanced) { 1720 elements.introContainer.slideUp("fast"); 1721 } 1722 elements.typesContainer.slideDown("fast"); 1723 } 1724 1725 isAdvanced = seenAdvanced = true; 1726 if (settings.allowUnadvanced && settings.unadvancedBtnLabel && settings.advancedBtnLabel !== settings.unadvancedBtnLabel) { 1727 elements.buttons.advanced.text(settings.unadvancedBtnLabel); 1728 } 1729 1730 // Trigger advanced show event 1731 body.trigger("gdpr:advanced"); 1732 }; 1733 var hideAdvanced = function() { 1734 if ($.isFunction(settings.customHideChecks)) { 1735 settings.customHideChecks.call(elements.typesContainer, elements.typesContainer, elements.introContainer); 1736 } 1737 else { 1738 if (settings.switchAdvanced) { 1739 elements.introContainer.slideDown("fast"); 1740 } 1741 elements.typesContainer.slideUp("fast"); 1742 } 1743 1744 isAdvanced = false; 1745 if (settings.allowUnadvanced && settings.unadvancedBtnLabel && settings.advancedBtnLabel !== settings.unadvancedBtnLabel) { 1746 elements.buttons.advanced.text(settings.advancedBtnLabel); 1747 } 1748 1749 // Trigger advanced show event 1750 body.trigger("gdpr:unadvanced"); 1751 }; 1752 1753 if (isAdvanced) { 1754 if (settings.allowUnadvanced) { 1755 hideAdvanced(); 1756 } 1757 } 1758 else { 1759 showAdvanced(); 1760 } 1761 }; 1762 1763 // Build cookie message to display later on 1764 var cookieMessage = (elements.container = $("<div class=gdprcookie>")).append([ 1765 (elements.introContainer = $("<div class=gdprcookie-intro>")).append([ 1766 settings.title ? $("<div/>", { text: settings.title }).get(0) : undefined, 1767 settings.message ? $("<p/>", { html: settings.message }).get(0) : undefined 1768 ]).get(0), 1769 (elements.typesContainer = $("<div class=gdprcookie-types>")).hide().append([ 1770 settings.subtitle ? $("<div/>", { text: settings.subtitle }).get(0) : undefined, 1771 settings.submessage ? $("<p/>", { html: settings.submessage }).get(0) : undefined, 1772 elements.types.get(0) 1773 ]).get(0), 1774 $("<div class=gdprcookie-buttons>").append([ 1775 (elements.buttons.accept = $("<button/>", { type: "button", text: settings.acceptBtnLabel, click: acceptClick })).get(0), 1776 (elements.buttons.advanced = $("<button/>", { type: "button", text: settings.advancedBtnLabel, click: advancedClick })).get(0) 1777 ]).get(0) 1778 ]); 1779 1780 var show = function() { 1781 body.append(cookieMessage); 1782 showing = true; 1783 isAdvanced = seenAdvanced = false; 1784 if ($.isFunction(settings.customShowMessage)) { 1785 settings.customShowMessage.call(elements.container, elements.container); 1786 } 1787 else { 1788 elements.container.hide().fadeIn("slow"); 1789 } 1790 1791 // Trigger container show event 1792 body.trigger("gdpr:show"); 1793 }; 1794 1795 if (!settings.delay || alwaysShow) { 1796 show(); 1797 } 1798 else { 1799 window.setTimeout(show, settings.delay); 1800 } 1801 } 1802 else { 1803 hide(false); 1804 } 1805 }; 1806 1807 $.gdprcookie.display = function() { 1808 display(true); 1809 }; 1810 1811 // Method to check if user cookie preference exists 1812 $.gdprcookie.preference = function(value) { 1813 var preferences = getPreferences(); 1814 1815 if (value === "essential") { 1816 return true; 1817 } 1818 else if (!preferences) { 1819 return false;
1820 } 1821 else if (value !== undefined) { 1822 return preferences.indexOf(value) >= 0; 1823 } 1824 return preferences; 1825 }; 1826 1827 // Protection against malicious scripts, e.g. monkey patching 1828 $.gdprcookie = Object.freeze($.gdprcookie); 1829 1830})); 1831 1832 1833 1834 1835 1836 1837// LOOK HERE FOR GA TAG AND CUSTOMIZATIONS 1838 1839 1840 1841 1842//customizations for the gdpr cookie functionality 1843 1844// runs the function that loads Google Analytics if cookie is appropriately set. 1845 1846jQuery.gdprcookie.init({ 1847 cookieTypes: [ 1848 { 1849 type: "Essential", 1850 value: "essential", 1851 description: "Cookies that are essential for this website to function correctly." 1852 }, 1853 { 1854 type: "Analytics (Optional)", 1855 value: "analytics", 1856 description: "Cookies related to site visits, browser types, etc.", 1857 checked: true 1858 } 1859 ], 1860 title: "Cookies & Privacy", 1861 subtitle: "Select which cookies to accept", 1862 message: "Cookies tell us which parts of our website are visited and give us anonymous insights into user behavior so we can make improvements. For more information, please view our
1862<a href=\"https://www.instantiations.com/privacy/\">Privacy Policy</a>.", 1863 delay: 0, 1864 expires: 30, 1865 cookieName: "cookiePrefs", 1866 acceptBeforeAdvanced: [ "essential", "analytics" ], 1867 acceptBtnLabel: "Accept Cookies", 1868 advancedBtnLabel: "Cookie Settings...", 1869}); 1870 1871 1872function cookieUpd() { 1873 //console.log("cookieUpd function ran"); 1874 if (jQuery.gdprcookie.preference("analytics") === true) { 1875 //console.log("This shows analytics are accepted."); 1876 jQuery("body").append("
1876<script async id=\"GA\" async src=\"https://www.googletagmanager.com/gtag/js?id=UA-163862464-2\"><\/script>"); 1877
vendor: 151 bytes, lines 1877-1880
1877window.dataLayer = window.dataLayer || []; 1878 function gtag(){dataLayer.push(arguments);} 1879 gtag('js', new Date()); 1880 gtag('config', '
1880UA-163862464-2
vendor: 11 bytes, lines 1880-1881
1880'); 1881
1881gtag('config', 'G-STB801QCLR'); 1882 1883 //for Google Tag Manager 1884 jQuery("head").append("
1884<script id=\"GT1\">
vendor: 325 bytes, line 1884
1884(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
1884GTM-NNKRTSC
vendor: 3 bytes, line 1884
1884');
1884<\/script>"); 1885 1886 jQuery("body").append("<noscript id=\"GT2\"><iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-NNKRTSC\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>"); 1887 1888 //for linkedin insights 1889 jQuery("body").append("<div id=\"LII\">
1889<script type=\"text/javascript\">_linkedin_partner_id =\"3533298\";window._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];window._linkedin_data_partner_ids.push(_linkedin_partner_id);<\/script>
1889<script type=\"text/javascript\">(function (l) {if (!l) {window.lintrk = function (a, b) { window.lintrk.q.push([a, b]) };window.lintrk.q = []}var s = document.getElementsByTagName(\"script\")[0];var b = document.createElement(\"script\");b.type = \"text/javascript\"; b.async = true;b.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";s.parentNode.insertBefore(b, s);})(window.lintrk);<\/script><noscript><img height=\"1\" width=\"1\" style=\"display:none;\" alt=\"\" src=\"https://px.ads.linkedin.com/collect/?pid=3533298&fmt=gif\" \/><\/noscript><\/div>"); 1890 1891 //Hotjar Tracking Code 1892 jQuery("body").append("<div id=\"HJ\">
1892<script>
vendor: 102 bytes, line 1892
1892(function(h,o,t,j,a,r){h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)};h._hjSettings={hjid:
18922704905
vendor: 216 bytes, line 1892
1892,hjsv:6};a=o.getElementsByTagName('head')[0];r=o.createElement('script');r.async=1;r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv;a.appendChild(r);})(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv=');
1892<\/script><\/div>"); 1893 1894 //Hubspot Tracking Code 1895 jQuery("body").append("<div id=\"HBSPT\">
1895<script type=\"text/javascript\" id=\"hs-script-loader\" async defer src=\"//js-na2.hs-scripts.com/243925808.js\"><\/script><\/div>"); 1896 1897 1898 1899 } else{ 1900 //console.log("This shows only essentials are accepted or no cookies set at all."); 1901 jQuery("#GA").remove(); 1902 jQuery("#LII").remove(); 1903 jQuery("#HJ").remove(); 1904 jQuery("#GT1").remove(); 1905 jQuery("#GT2").remove(); 1906 jQuery("#HBSPT").remove(); 1907 }; 1908}; 1909 1910jQuery("#cookiecontrol").click(function(){ 1911 jQuery.gdprcookie.display(); 1912}); 1913 1914 1915jQuery(document.body) 1916 .on("gdpr:show", function() { 1917 //console.log("Cookie dialog is shown"); 1918 }) 1919 .on("gdpr:accept", function() { 1920 var preferences = jQuery.gdprcookie.preference(); 1921 //console.log("Preferences saved:", preferences); 1922 cookieUpd(); 1923 1924 }) 1925 .on("gdpr:advanced", function() { 1926 //console.log("Advanced button was pressed"); 1927 }); 1928 1929 1930// this function runs on document ready on all pages 1931jQuery(cookieUpd());</script>
1931 1932<style type="text/css" id="ct_code_block_css_100200">#div_block-183-10 svg 1933{ 1934 transition:all .25s; 1935 opacity:.66; 1936 fill:#003865; 1937} 1938 1939#div_block-183-10:hover svg 1940{ 1941 fill:#ec0046; 1942 opacity:1; 1943 transition:all .25s; 1944}</style> 1945<style type="text/css" id="ct_code_block_css_100189">#code_block-189-10 1946{ 1947 width:14px; 1948 height:14px; 1949 position:relative; 1950 top:-5px; 1951}</style> 1952<style type="text/css" id="ct_code_block_css_100211">code[class*="language-"], pre[class*="language-"] { 1953 1954font-family: monospace, monospace !important; 1955white-space: pre-wrap; 1956} 1957 1958@media screen and (max-width: 767px) { 1959pre[class*="language-"] { 1960 max-width:335px; 1961} 1962}</style> 1963<!-- /WP_FOOTER --> 1964</body> 1965</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.