+
+ {% if current_school.apps.instructor_led_training.active? %}
+ {% if current_person.upcoming_registered_events.any? %}
+ {% include "events" %}
+ {% else %}
+ {% include "events_empty" %}
+ {% endif %}
+ {% endif %}
+
+ {% if my_content.learning_paths? %}
+ {% include "my_paths" %}
+ {% endif %}
+
+
+
+
+ {% comment %} {% include "filters" with "" %} {% endcomment %}
+ {% if current_school.filtering_enabled? and current_person.filterable_categories.count > 0 %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% for course in my_content.courses %}
+ {% if course.progress < 100 and course.progress > 0 %}
+ {% include "course" %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+
+
+
Completed Courses
+
+
+
+
+
+
+
+ {% comment %} {% include "filters" with "" %} {% endcomment %}
+ {% if current_school.filtering_enabled? and current_person.filterable_categories.count > 0 %}
+
+ {% else %}
+
+ {% endif %}
+
+ {% for course in my_content.courses %}
+ {% if course.progress == 100 %}
+ {% include "course" %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+
+
diff --git a/Custom_Templates/customer_templates/Howard-Hanna/styles.css.liquid b/Custom_Templates/customer_templates/Howard-Hanna/styles.css.liquid
new file mode 100644
index 00000000..d04836b5
--- /dev/null
+++ b/Custom_Templates/customer_templates/Howard-Hanna/styles.css.liquid
@@ -0,0 +1,399 @@
+body {
+ background: white !important;
+ color: black !important;
+}
+
+ @font-face {
+ font-family:"avenir";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir+Next.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-condensed";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir+Next+Condensed.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-bold";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Bold.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-cn-it";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-CnIt.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-demi";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Demi.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-heavy";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Heavy.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-regular";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Regular.ttf") format("truetype");
+ }
+
+
+ body {
+ font-family: "avenir", sans-serif !important;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-family: "avenir", sans-serif !important;
+ }
+
+ .uk-navbar-nav>li>a {
+ font-family: "avenir", sans-serif !important;
+ }
+
+html *:not(i) {
+ font-family: "avenir" !important;
+ letter-spacing: 0.01em !important;
+}
+
+.footer-bottom {
+ background-color: white !important;
+}
+.header-lines {
+ background: white !important;
+ height: auto !important;
+}
+
+.hh-search .search {
+ line-height: 30px !important;
+ width: 110px;
+}
+
+.preview-banner {
+ display: none;
+}
+
+.decorative-font {
+ font-family: "avenir" !important;
+}
+
+.hero__image {
+ background-position: center !important;
+}
+
+.hh-cat-header {
+ font-size: 2em !important;
+ font-weight: 100 !important;
+}
+.course-details__desc {
+ min-height: 9em !important;
+}
+.hh-cat-header h2 {
+ border-bottom: 1px solid #b8b8b8;
+ font-size: 0.9em !important;
+ font-family: "avenir" !important;
+
+}
+
+h1, h2, h3 {
+ font-family: "avenir" !important;
+}
+
+.workshop__course-title-text,
+.uk-button-link {
+ color: black !important;
+}
+
+/* 1079 */
+@media screen and (max-width: 1214px) {
+ .marketing-nav__logo {
+ margin-top: 19px !important;
+ }
+ .marketing-nav__logo a img {
+ width: 250px !important;
+ }
+
+}
+.school-website-header {
+ background: white !important;
+}
+#mobile-search {
+ height: 100px
+}
+.uk-offcanvas-bar {
+ background: transparent !important;
+}
+.marketing-button--small {
+ color: white !important;
+}
+h2 {
+ color: black !important;
+}
+
+.hh-mobile-nav {
+ display: none;
+}
+@media screen and (max-width: 969px) {
+ .hh-mobile-nav {
+ display: block !important;
+ }
+ .hh-desktop-nav {
+ display: none !important;
+ }
+}
+
+
+@media screen and (max-width: 550px) {
+ .marketing-nav__logo {
+ margin-top: 25px !important;
+ }
+ .marketing-nav__logo a img {
+ width: 200px !important;
+ }
+
+}
+
+@media screen and (min-width: 1040px) {
+ .heading--hero {
+ margin-top: 1em !important;
+ }
+}
+
+
+@media screen and (max-width: 1080px) {
+ .heading--hero {
+ margin-top: 0.6em !important;
+ }
+}
+
+@media screen and (max-width: 620px) {
+ .heading--hero {
+ margin-top: 0 !important;
+ }
+}
+
+@media screen and (max-width: 641px) {
+ .hero__image {
+ background-size: contain !important;
+ background-repeat-x: no-repeat !important;
+ background-repeat-y: no-repeat !important;
+ background-position: bottom !important;
+ }
+ nav.hh-margin-t {
+ margin-top: 0 !important;
+ }
+}
+
+.hero__image {
+ background-repeat: no-repeat !important;
+}
+
+@media screen and (max-width: 607px) {
+ .hero__image {
+ height: 24em !important;
+ }
+}
+
+.course-details__desc {
+ padding-top: 7px !important;
+}
+
+.templates-header a {
+ color: #0061df !important;
+}
+
+.marketing-nav__item--user {
+ color: black !important;
+}
+.footer-bottom__links>a {
+ color: black !important;
+}
+
+.marketing-button {
+ background-color: #000000 !important;
+}
+
+.styled-links::before {
+ display: none !important;
+}
+
+.hh-margin-b {
+ margin-bottom: 30px !important;
+}
+.hh-margin-t {
+ margin-top: 30px !important;
+}
+
+.hh-padding-b {
+ padding-bottom: 30px !important;
+}
+.hh-padding-t {
+ padding-top: 30px !important;
+}
+
+@media screen and (min-width: 46.875em) {
+ .workshop__item .grid__item--tablet-up-third,
+ .hh-desc {
+ width: 58% !important;
+ }
+}
+
+.course-details__name {
+ min-height: 2.8em !important;
+}
+
+.marketing-nav__item {
+ font-size: 15px !important;
+}
+.slick-prev:before, .slick-next:before {
+ color: #09529b !important;
+}
+.searchables {
+ display:none
+}
+
+.marketing-nav__logo__shopify,.marketing-nav__hamburger,.marketing-nav__arrow,.drawer__close-button{background-repeat:no-repeat;background-size:contain}.marketing-nav__logo__shopify{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%20608%20173.7%22%3E%3Cpath%20fill=%22%2395BF47%22%20d=%22M130.6%2033c-.1-.9-.9-1.3-1.5-1.4-.6-.1-13.7-1-13.7-1s-9.1-9-10-10c-1-1-2.9-.7-3.7-.5-.1%200-2%20.6-5.1%201.6C93.7%2013%2088.3%205%2078.9%205h-.8c-2.7-3.5-6-5.1-8.8-5.1C47.4%200%2037%2027.3%2033.7%2041.2c-8.5%202.6-14.5%204.5-15.3%204.7-4.7%201.5-4.9%201.6-5.5%206.1C12.4%2055.5%200%20151.5%200%20151.5l96.7%2018.1%2052.4-11.3c0-.1-18.4-124.4-18.5-125.3zm-39.3-9.6c-2.4.8-5.2%201.6-8.2%202.5v-1.8c0-5.4-.8-9.8-2-13.2%204.9.7%208.2%206.2%2010.2%2012.5zM75.2%2012c1.3%203.4%202.2%208.2%202.2%2014.7v.9c-5.3%201.6-11.1%203.4-16.9%205.2%203.3-12.4%209.4-18.5%2014.7-20.8zm-6.5-6.1c.9%200%201.9.3%202.8.9-7%203.3-14.5%2011.6-17.7%2028.2-4.6%201.4-9.2%202.8-13.4%204.1C44.2%2026.5%2053%205.9%2068.7%205.9z%22/%3E%3Cpath%20fill=%22%235E8E3E%22%20d=%22M129.1%2031.6c-.6-.1-13.7-1-13.7-1s-9.1-9-10-10c-.4-.4-.9-.6-1.4-.6l-7.3%20149.6%2052.4-11.3S130.7%2033.9%20130.6%2033.1c-.1-.9-.9-1.4-1.5-1.5z%22/%3E%3Cpath%20fill=%22%23FFF%22%20d=%22M78.9%2060.6l-6.5%2019.2s-5.7-3-12.6-3c-10.2%200-10.7%206.4-10.7%208%200%208.8%2022.9%2012.1%2022.9%2032.7%200%2016.2-10.3%2026.6-24.1%2026.6-16.6%200-25.1-10.3-25.1-10.3l4.4-14.7s8.7%207.5%2016.1%207.5c4.8%200%206.8-3.8%206.8-6.6%200-11.5-18.8-12-18.8-30.8C31.3%2073.4%2042.7%2058%2065.6%2058c9%20.1%2013.3%202.6%2013.3%202.6z%22/%3E%3Cpath%20d=%22M210.2%2096.6c-5.2-2.8-7.9-5.2-7.9-8.5%200-4.2%203.7-6.9%209.6-6.9%206.8%200%2012.8%202.8%2012.8%202.8l4.8-14.6s-4.4-3.4-17.3-3.4c-18%200-30.5%2010.3-30.5%2024.8%200%208.2%205.8%2014.5%2013.6%2019%206.3%203.6%208.5%206.1%208.5%209.9%200%203.9-3.1%207-9%207-8.7%200-16.9-4.5-16.9-4.5l-5.1%2014.6s7.6%205.1%2020.3%205.1c18.5%200%2031.8-9.1%2031.8-25.5.1-8.9-6.6-15.1-14.7-19.8zM284%2065.9c-9.1%200-16.3%204.3-21.8%2010.9l-.3-.1%207.9-41.4h-20.6l-20%20105.3h20.6l6.9-36c2.7-13.6%209.7-22%2016.3-22%204.6%200%206.4%203.1%206.4%207.6%200%202.8-.3%206.3-.9%209.1l-7.8%2041.2h20.6l8.1-42.6c.9-4.5%201.5-9.9%201.5-13.4-.1-11.6-6.2-18.6-16.9-18.6zm63.4%200c-24.8%200-41.2%2022.4-41.2%2047.3%200%2016%209.9%2028.8%2028.4%2028.8%2024.3%200%2040.8-21.8%2040.8-47.3%200-14.8-8.7-28.8-28-28.8zm-10.1%2060.3c-7%200-10-6-10-13.4%200-11.8%206.1-31.1%2017.3-31.1%207.3%200%209.7%206.3%209.7%2012.4%200%2012.7-6.1%2032.1-17%2032.1zm90.8-60.3c-13.9%200-21.8%2012.2-21.8%2012.2h-.3l1.2-11H389c-.9%207.5-2.5%2018.8-4.2%2027.3l-14.3%2075.4H391l5.7-30.5h.4s4.2%202.7%2012.1%202.7c24.2%200%2040-24.8%2040-49.9.1-13.8-6.1-26.2-21.1-26.2zm-19.7%2060.6c-5.4%200-8.5-3-8.5-3l3.4-19.3c2.4-12.8%209.1-21.4%2016.3-21.4%206.3%200%208.2%205.8%208.2%2011.3%200%2013.4-7.9%2032.4-19.4%2032.4zm70.3-90.2c-6.6%200-11.8%205.2-11.8%2011.9%200%206.1%203.9%2010.3%209.7%2010.3h.3c6.4%200%2011.9-4.3%2012.1-11.9%200-6-4-10.3-10.3-10.3zm-28.8%20104.2h20.6l14-73h-20.7m73.1-.1h-14.3l.7-3.4c1.2-7%205.4-13.3%2012.2-13.3%203.7%200%206.6%201%206.6%201l4-16.1s-3.6-1.8-11.2-1.8c-7.3%200-14.6%202.1-20.2%206.9-7%206-10.3%2014.6-11.9%2023.3l-.6%203.4h-9.6l-3%2015.5h9.6l-10.9%2057.6H509l10.9-57.6h14.2l2.8-15.5zm49.6.1s-12.9%2032.5-18.7%2050.2h-.3c-.4-5.7-5.1-50.2-5.1-50.2h-21.7l12.4%2067c.3%201.5.1%202.4-.4%203.4-2.4%204.6-6.4%209.1-11.2%2012.4-3.9%202.8-8.2%204.6-11.6%205.8l5.7%2017.5c4.2-.9%2012.8-4.3%2020.2-11.2%209.4-8.8%2018.1-22.4%2027-40.9l25.2-54h-21.5z%22/%3E%3C/svg%3E")}.marketing-nav__hamburger,.drawer__close-button{background-size:1.25em;background-position:center}.marketing-nav__hamburger{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2020%2020%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23212b35%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M19%2011H1c-.552%200-1-.447-1-1s.448-1%201-1h18c.552%200%201%20.447%201%201s-.448%201-1%201zm0-7H1c-.552%200-1-.447-1-1s.448-1%201-1h18c.552%200%201%20.447%201%201s-.448%201-1%201zm0%2014H1c-.552%200-1-.447-1-1s.448-1%201-1h18c.552%200%201%20.447%201%201s-.448%201-1%201z%22/%3E%3C/svg%3E%0A")}.drawer__close-button{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2020%2020%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23212b35%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M11.414%2010l6.293-6.293c.39-.39.39-1.023%200-1.414s-1.023-.39-1.414%200L10%208.586%203.707%202.293c-.39-.39-1.023-.39-1.414%200s-.39%201.023%200%201.414L8.586%2010l-6.293%206.293c-.39.39-.39%201.023%200%201.414.195.195.45.293.707.293s.512-.098.707-.293L10%2011.414l6.293%206.293c.195.195.45.293.707.293s.512-.098.707-.293c.39-.39.39-1.023%200-1.414L11.414%2010z%22/%3E%3C/svg%3E%0A")}.marketing-nav__arrow{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2010%205%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23919eab%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M0,0l5,5l5-5H0z%22/%3E%3C/svg%3E%0A")}.marketing-nav__item:hover .marketing-nav__arrow,.marketing-nav__item:focus .marketing-nav__arrow,.js-is-active .marketing-nav__item .marketing-nav__arrow{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2010%205%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23212b35%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M0,0l5,5l5-5H0z%22/%3E%3C/svg%3E%0A")}.marketing-nav__external-indicator{-webkit-transition:background-image 300ms;transition:background-image 300ms;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%207%207%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23919eab%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M7,7V0H0L7,7z%22/%3E%3C/svg%3E%0A")}.marketing-nav__item:hover .marketing-nav__external-indicator,.marketing-nav__item:focus .marketing-nav__external-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%207%207%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23212b35%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M7,7V0H0L7,7z%22/%3E%3C/svg%3E%0A")}.marketing-nav__secondary .marketing-nav__item:hover .marketing-nav__external-indicator,.marketing-nav__secondary .marketing-nav__item:focus .marketing-nav__external-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%207%207%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23212b35%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M7,7V0H0L7,7z%22/%3E%3C/svg%3E%0A")}.drawer .marketing-nav__external-indicator,.marketing-nav__secondary .marketing-nav__external-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%207%207%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23919eab%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M7,7V0H0L7,7z%22/%3E%3C/svg%3E%0A")}*,*::before,*::after{-webkit-box-sizing:border-box;box-sizing:border-box}main{display:block;background-color:#ffffff}p,ul,ol{margin:0;padding:0}ul,ol{list-style:none}cite{font-style:normal}h1,h2,h3,h4,h5{margin-top:0}figure{margin-left:0;margin-right:0}audio,canvas,img,video{vertical-align:middle}fieldset{border:0;margin:0;padding:0}textarea{resize:vertical}@media screen and (max-width: 67.4375em){input,textarea,select{font-size:1em}}.clearfix::after{content:'';display:table;clear:both}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.showvisuallyhidden,.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.is-transitioning{display:block !important;visibility:visible !important}.js-focus-hidden:focus{outline:none}a,button,[role='button'],input,label,select,textarea{-ms-touch-action:manipulation;touch-action:manipulation}button{background:none;margin:0;padding:0;border:0;border-radius:0;display:inline-block;cursor:pointer;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit}button::-moz-focus-inner,input[type='button']::-moz-focus-inner,input[type='submit']::-moz-focus-inner,input[type='reset']::-moz-focus-inner{padding:0;border:0}button:-moz-focusring,input[type='button']:-moz-focusring,input[type='submit']:-moz-focusring,input[type='reset']:-moz-focusring{outline:1px dotted ButtonText}#PageContainer{overflow:hidden;max-width:1600px;margin-left:auto;margin-right:auto}main{margin-left:auto;margin-right:auto;position:relative}main::after{content:'';display:table;clear:both}.page-container{margin-left:auto;margin-right:auto;position:relative;max-width:1600px}.page-container::after{content:'';display:table;clear:both}.page-width{margin-left:auto;margin-right:auto;position:relative;padding-left:30px;padding-right:30px}.page-width::after{content:'';display:table;clear:both}@media screen and (min-width: 67.5em){.page-width{width:990px}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.page-width{width:750px}}@media screen and (min-width: 67.5em){.page-width--fluid{width:100%;max-width:1230px}}@font-face{font-family:"ShopifySans";src:url("https://cdn.shopify.com/shopify-marketing_assets/static/ShopifySans--light.woff2") format("woff2");font-style:normal;font-weight:300;font-display:swap}@font-face{font-family:"ShopifySans";src:url("https://cdn.shopify.com/shopify-marketing_assets/static/ShopifySans--regular.woff2") format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:"ShopifySans";src:url("https://cdn.shopify.com/shopify-marketing_assets/static/ShopifySans--medium.woff2") format("woff2");font-style:normal;font-weight:500;font-display:swap}@font-face{font-family:"ShopifySans";src:url("https://cdn.shopify.com/shopify-marketing_assets/static/ShopifySans--bold.woff2") format("woff2");font-style:normal;font-weight:700;font-display:swap}@font-face{font-family:"ShopifySans";src:url("https://cdn.shopify.com/shopify-marketing_assets/static/ShopifySans--black.woff2") format("woff2");font-style:normal;font-weight:900;font-display:swap}body{-moz-osx-font-smoothing:grayscale;margin:0;padding:0;background:#ffffff;font-size:1em;line-height:1.5;color:#ffffff;font-weight:400}.heading--jumbo{-webkit-font-kerning:normal;font-kerning:normal;-webkit-font-variant-ligatures:common-ligatures contextual discretionary-ligatures;font-variant-ligatures:common-ligatures contextual discretionary-ligatures;-webkit-font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;margin-bottom:0.5555555556em;color:#212b35;font-size:2.25em;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif;letter-spacing:-0.025em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.heading--jumbo{font-size:2.25em;margin-bottom:0.5555555556em}}@media screen and (min-width: 67.5em){.heading--jumbo{font-size:3.75em;margin-bottom:0.4em}}h1,.heading--1{-webkit-font-kerning:normal;font-kerning:normal;-webkit-font-variant-ligatures:common-ligatures contextual discretionary-ligatures;font-variant-ligatures:common-ligatures contextual discretionary-ligatures;-webkit-font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;margin-bottom:0.7142857143em;color:#212b35;font-size:1.75em;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif;letter-spacing:-0.025em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){h1,.heading--1{font-size:1.75em;margin-bottom:0.4166666667em}}@media screen and (min-width: 67.5em){h1,.heading--1{font-size:3em;margin-bottom:0.25em}}h2,.heading--2{-webkit-font-kerning:normal;font-kerning:normal;-webkit-font-variant-ligatures:common-ligatures contextual discretionary-ligatures;font-variant-ligatures:common-ligatures contextual discretionary-ligatures;-webkit-font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';font-feature-settings:'kern', 'liga', 'clig', 'calt', 'dlig';-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;margin-bottom:0.8333333333em;color:#202e78;font-size:1.5em;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){h2,.heading--2{font-size:1.5em;margin-bottom:0.8333333333em}}@media screen and (min-width: 67.5em){h2,.heading--2{font-size:2.25em;margin-bottom:0.5em}}h3,.heading--3{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;font-size:1.25em;margin-bottom:0.9em;color:#212b35;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){h3,.heading--3{font-size:1.25em;margin-bottom:0.9em}}@media screen and (min-width: 67.5em){h3,.heading--3{font-size:1.2em;margin-bottom:0.8333333333em}}h4,.heading--4{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;margin-bottom:1.25em;color:#212b35;font-size:1em;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){h4,.heading--4{font-size:1em;margin-bottom:1.25em}}@media screen and (min-width: 67.5em){h4,.heading--4{font-size:1.125em;margin-bottom:1.1111111111em}}h5,.heading--5{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;margin-bottom:1.4285714286em;color:#212b35;font-size:0.875em;line-height:1.222;font-weight:700;font-family:ShopifySans, Helvetica, Arial, sans-serif;text-transform:uppercase;letter-spacing:0.05em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){h5,.heading--5{font-size:0.875em;margin-bottom:1.4285714286em}}@media screen and (min-width: 67.5em){h5,.heading--5{font-size:0.875em;margin-bottom:1.4285714286em}}a{text-decoration:none;cursor:pointer;color:#5c6ac4}.text-minor{font-size:0.75em}.text-major{font-size:1.125em}@media screen and (min-width: 67.5em){.text-major{font-size:1.25em}}.body-link{color:#5c6ac4;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.body-link:hover,.body-link:focus{color:#4655bc}.body-link:focus{outline:0;background-color:rgba(92,106,196,0.125)}.body-link--base{color:#ffffff;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.body-link--base:hover,.body-link--base:focus{color:#566470}.body-link--base:focus{outline:0;background-color:rgba(99,115,129,0.125)}.body-link--reverse{color:#ffffff;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.body-link--reverse:hover,.body-link--reverse:focus{color:#f0f0f0}.body-link--reverse:focus{outline:0;background-color:rgba(255,255,255,0.125)}.body-link--blue{color:#206882;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.body-link--blue:hover,.body-link--blue:focus{color:#1a5469}.body-link--blue:focus{outline:0;background-color:rgba(32,104,130,0.125)}main p,main ul,main ol{margin-bottom:0.9375em;line-height:1.5;font-size:1em}main p>a{color:#5c6ac4;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}main p>a:hover,main p>a:focus{color:#4655bc}main p>a:focus{outline:0;background-color:rgba(92,106,196,0.125)}.marketing-quote{margin:30px 0}.marketing-quote__content{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:300;margin:0;padding:0.6666666667em 0 0.6666666667em 30px;font-size:1.5em;color:#000000;border-left:solid 2px #dfe3e8}.marketing-quote__footer{text-align:right}.heading-container{text-align:center}.section-intro{border:1px solid rgba(0,0,0,0.2);border-width:1px 0;padding:2.25em 0}.section-intro::after{content:'';display:table;clear:both}.numbered-list{list-style:decimal;list-style-position:outside;margin-left:2.5em}.numbered-list li{margin-bottom:0.5em}.bulleted-list{list-style:disc;list-style-position:outside;margin-left:1.25em}.bulleted-list li{margin-bottom:0.5em}:lang(ja){font-family:'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', 'メイリオ', Meiryo, 'MS Pゴシック', sans-serif;-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-variant-ligatures:normal;font-variant-ligatures:normal}.grid-container{margin-left:auto;margin-right:auto;position:relative}.grid-container::after{content:'';display:table;clear:both}@media screen and (min-width: 46.875em){.grid-container--equal-height{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}@media screen and (min-width: 67.5em){.grid-8{width:930px}.grid-push-8{margin-left:960px}.grid-7{width:810px;margin-right:30px}.grid-push-7{margin-left:840px}.grid-6{width:690px;margin-right:30px}.grid-push-6{margin-left:720px}.grid-5{width:570px;margin-right:30px}.grid-push-5{margin-left:600px}.grid-4{width:450px;margin-right:30px}.grid-push-4{margin-left:480px}.grid-3{width:330px;margin-right:30px}.grid-push-3{margin-left:360px}.grid-2{width:210px;margin-right:30px}.grid-push-2{margin-left:240px}.grid-1{width:90px;margin-right:30px}.grid-push-1{margin-left:120px}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid-8{width:690px}.grid-push-8{margin-left:720px}.grid-7{width:600px;margin-right:30px}.grid-push-7{margin-left:630px}.grid-6{width:510px;margin-right:30px}.grid-push-6{margin-left:540px}.grid-5{width:420px;margin-right:30px}.grid-push-5{margin-left:450px}.grid-4{width:330px;margin-right:30px}.grid-push-4{margin-left:360px}.grid-3{width:240px;margin-right:30px}.grid-push-3{margin-left:270px}.grid-2{width:150px;margin-right:30px}.grid-push-2{margin-left:180px}.grid-1{width:60px;margin-right:30px}.grid-push-1{margin-left:90px}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid--tablet-8{width:690px}.grid--tablet-push-8{margin-left:720px}.grid--tablet-7{width:600px;margin-right:30px}.grid--tablet-push-7{margin-left:630px}.grid--tablet-6{width:510px;margin-right:30px}.grid--tablet-push-6{margin-left:540px}.grid--tablet-5{width:420px;margin-right:30px}.grid--tablet-push-5{margin-left:450px}.grid--tablet-4{width:330px;margin-right:30px}.grid--tablet-push-4{margin-left:360px}.grid--tablet-3{width:240px;margin-right:30px}.grid--tablet-push-3{margin-left:270px}.grid--tablet-2{width:150px;margin-right:30px}.grid--tablet-push-2{margin-left:180px}.grid--tablet-1{width:60px;margin-right:30px}.grid--tablet-push-1{margin-left:90px}}.grid-item{float:left;position:relative}@media screen and (min-width: 46.875em){.grid-container--halves .grid-item:nth-child(2n){margin-right:0}.grid-container--halves .grid-item:nth-child(2n+1){clear:left}.grid-container--thirds .grid-item:nth-child(3n){margin-right:0}.grid-container--thirds .grid-item:nth-child(3n+1){clear:left}.grid-container--quarters .grid-item:nth-child(4n){margin-right:0}.grid-container--quarters .grid-item:nth-child(4n+1){clear:left}.grid-container--eights .grid-item:nth-child(8n){margin-right:0}.grid-container--eights .grid-item:nth-child(8n+1){clear:left}}@media screen and (max-width: 46.8125em){.grid-item{float:none}.grid-item.grid--mobile{float:left;display:block;margin-right:6.6666666667%;width:46.6666666667%;float:left}.grid-item.grid--mobile:last-child{margin-right:0}.grid-item.grid--mobile:nth-child(2n){margin-right:0}.grid-item.grid--mobile:nth-child(2n+1){clear:left}.grid-item.grid--mobile.grid--last+.grid-item{clear:none}}.grid--last{margin-right:0 !important}.grid--last+.grid-item{clear:both}@media screen and (min-width: 46.875em){.grid-item--fluid__quarter{float:left;display:block;margin-right:3.2258064516%;width:22.5806451613%}.grid-item--fluid__quarter:last-child{margin-right:0}.grid-item--fluid__third{float:left;display:block;margin-right:2.1276595745%;width:31.914893617%}.grid-item--fluid__third:last-child{margin-right:0}.grid-item--fluid__two-thirds{float:left;display:block;margin-right:2.1276595745%;width:65.9574468085%}.grid-item--fluid__two-thirds:last-child{margin-right:0}.grid-item--fluid__half{float:left;display:block;margin-right:3.2258064516%;width:48.3870967742%}.grid-item--fluid__half:last-child{margin-right:0}}@media screen and (min-width: 67.5em){.grid-container--wide{width:1440px;padding-left:255px;padding-right:255px;margin-left:-255px}.grid-item--wide.grid-8,.grid-8.grid--wide-right,.grid-8.grid--wide-left{width:1185px}.grid-item--wide.grid-7,.grid-7.grid--wide-right,.grid-7.grid--wide-left{width:1065px}.grid-item--wide.grid-6,.grid-6.grid--wide-right,.grid-6.grid--wide-left{width:945px}.grid-item--wide.grid-5,.grid-5.grid--wide-right,.grid-5.grid--wide-left{width:825px}.grid-item--wide.grid-4,.grid-4.grid--wide-right,.grid-4.grid--wide-left{width:705px}.grid-item--wide.grid-3,.grid-3.grid--wide-right,.grid-3.grid--wide-left{width:585px}.grid-item--wide.grid-2,.grid-2.grid--wide-right,.grid-2.grid--wide-left{width:465px}.grid-item--wide.grid-1,.grid-1.grid--wide-right,.grid-1.grid--wide-left{width:345px}.grid--wide-left{margin-left:-255px}.grid--wide-right{margin-right:-255px}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid--wide-right{margin-right:0}}@media screen and (min-width: 46.875em){.grid-item--flush-half{width:50%}.grid-item--flush-third{width:33.3333333333%}.grid-item--flush-quarter{width:25%}}.grid-item--bordered{border-bottom:1px solid #dfe3e8}@media screen and (max-width: 46.8125em){.grid-item--bordered:last-child{border-bottom:0}}@media screen and (min-width: 46.875em){.grid-item--bordered{border-right:1px solid #dfe3e8}.grid-container--thirds .grid-item--bordered:nth-child(3n){border-right:0}.grid-container--thirds .grid-item--bordered:nth-last-child(-n+3){border-bottom:0}.grid-container--quarters .grid-item--bordered:nth-child(4n){border-right:0}.grid-container--quarters .grid-item--bordered:nth-last-child(-n+4){border-bottom:0}.grid-container--halves .grid-item--bordered:nth-child(2n){border-right:0}.grid-container--halves .grid-item--bordered:nth-last-child(-n+2){border-bottom:0}}@media screen and (min-width: 46.875em){.grid-item--margin-bottom{margin-bottom:1.875em}}@media screen and (min-width: 67.5em){.grid-content-10{float:left;display:block;margin-right:2.5641025641%;width:100%}.grid-content-10:last-child{margin-right:0}.grid-content-push-10{margin-left:102.5641025641%}.grid-content-9{float:left;display:block;margin-right:2.5641025641%;width:89.7435897436%}.grid-content-9:last-child{margin-right:0}.grid-content-push-9{margin-left:92.3076923077%}.grid-content-8{float:left;display:block;margin-right:2.5641025641%;width:79.4871794872%}.grid-content-8:last-child{margin-right:0}.grid-content-push-8{margin-left:82.0512820513%}.grid-content-7{float:left;display:block;margin-right:2.5641025641%;width:69.2307692308%}.grid-content-7:last-child{margin-right:0}.grid-content-push-7{margin-left:71.7948717949%}.grid-content-6{float:left;display:block;margin-right:2.5641025641%;width:58.9743589744%}.grid-content-6:last-child{margin-right:0}.grid-content-push-6{margin-left:61.5384615385%}.grid-content-5{float:left;display:block;margin-right:2.5641025641%;width:48.7179487179%}.grid-content-5:last-child{margin-right:0}.grid-content-push-5{margin-left:51.2820512821%}.grid-content-4{float:left;display:block;margin-right:2.5641025641%;width:38.4615384615%}.grid-content-4:last-child{margin-right:0}.grid-content-push-4{margin-left:41.0256410256%}.grid-content-3{float:left;display:block;margin-right:2.5641025641%;width:28.2051282051%}.grid-content-3:last-child{margin-right:0}.grid-content-push-3{margin-left:30.7692307692%}.grid-content-2{float:left;display:block;margin-right:2.5641025641%;width:17.9487179487%}.grid-content-2:last-child{margin-right:0}.grid-content-push-2{margin-left:20.5128205128%}.grid-content-1{float:left;display:block;margin-right:2.5641025641%;width:7.6923076923%}.grid-content-1:last-child{margin-right:0}.grid-content-push-1{margin-left:10.2564102564%}.grid-content--desktop-push-1{margin-left:10.2564102564%}.grid-content--desktop-push-2{margin-left:20.5128205128%}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid-content-10{width:690px}.grid-content-push-10{margin-left:720px}.grid-content-9{width:618px;margin-right:30px}.grid-content-push-9{margin-left:648px}.grid-content-8{width:546px;margin-right:30px}.grid-content-push-8{margin-left:576px}.grid-content-7{width:474px;margin-right:30px}.grid-content-push-7{margin-left:504px}.grid-content-6{width:402px;margin-right:30px}.grid-content-push-6{margin-left:432px}.grid-content-5{width:330px;margin-right:30px}.grid-content-push-5{margin-left:360px}.grid-content-4{width:258px;margin-right:30px}.grid-content-push-4{margin-left:288px}.grid-content-3{width:186px;margin-right:30px}.grid-content-push-3{margin-left:216px}.grid-content-2{width:114px;margin-right:30px}.grid-content-push-2{margin-left:144px}.grid-content-1{width:42px;margin-right:30px}.grid-content-push-1{margin-left:72px}.grid-content--tablet-10{width:690px}.grid-content--tablet-push-10{margin-left:720px}.grid-content--tablet-9{width:618px;margin-right:30px}.grid-content--tablet-push-9{margin-left:648px}.grid-content--tablet-8{width:546px;margin-right:30px}.grid-content--tablet-push-8{margin-left:576px}.grid-content--tablet-7{width:474px;margin-right:30px}.grid-content--tablet-push-7{margin-left:504px}.grid-content--tablet-6{width:402px;margin-right:30px}.grid-content--tablet-push-6{margin-left:432px}.grid-content--tablet-5{width:330px;margin-right:30px}.grid-content--tablet-push-5{margin-left:360px}.grid-content--tablet-4{width:258px;margin-right:30px}.grid-content--tablet-push-4{margin-left:288px}.grid-content--tablet-3{width:186px;margin-right:30px}.grid-content--tablet-push-3{margin-left:216px}.grid-content--tablet-2{width:114px;margin-right:30px}.grid-content--tablet-push-2{margin-left:144px}.grid-content--tablet-1{width:42px;margin-right:30px}.grid-content--tablet-push-1{margin-left:72px}}.grid{padding-left:5%;padding-right:5%}.grid:not(.grid--vertically-centered)::after{content:'';display:table;clear:both}@media screen and (min-width: 100em){.grid{padding-left:80px;padding-right:80px}}.grid .grid{padding-left:0;padding-right:0;margin-left:-4px;margin-right:-4px}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid .grid{margin-left:-9px;margin-right:-9px}}@media screen and (min-width: 67.5em){.grid .grid{margin-left:-18px;margin-right:-18px}}.grid--bleed{padding-left:0;padding-right:0}.grid--layout-mode{padding-left:0;padding-right:0}.grid--layout-mode .grid{margin-left:0;margin-right:0}.grid--layout-mode .grid__item{padding-left:0;padding-right:0}.grid--equal-height,.grid--vertically-centered{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid--vertically-centered{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.grid__item{position:relative;width:100%;float:left;padding-left:4px;padding-right:4px}@media screen and (min-width: 67.5em){.grid__item{padding-left:18px;padding-right:18px}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.grid__item{padding-left:9px;padding-right:9px}}.grid__item--mobile-up-1{width:25%}.grid__item--mobile-up-2{width:50%}.grid__item--mobile-up-3{width:75%}.grid__item--mobile-up-4{width:100%}.grid__item--mobile-up-full{width:100%}.grid__item--mobile-up-half{width:50%}.grid__item--mobile-up-third{width:33.3333333333%}.grid__item--mobile-up-two-thirds{width:66.6666666667%}.grid__item--mobile-up-quarter{width:25%}.grid__item--mobile-up-three-quarters{width:75%}.grid__item--mobile-up-align-center{float:none;clear:left;margin-left:auto;margin-right:auto}.grid__item--mobile-up-align-left{float:left;clear:none;margin-left:0;margin-right:0}.grid__item--mobile-up-offset-1{margin-left:25%}.grid__item--mobile-up-offset-2{margin-left:50%}.grid__item--mobile-up-push-1{left:25%}.grid__item--mobile-up-pull-1{right:25%}.grid__item--mobile-up-push-2{left:50%}.grid__item--mobile-up-pull-2{right:50%}.grid__item--mobile-up-push-3{left:75%}.grid__item--mobile-up-pull-3{right:75%}.grid__item--mobile-up-push-4{left:100%}.grid__item--mobile-up-pull-4{right:100%}.grid__item--mobile-up-push-full{left:100%}.grid__item--mobile-up-pull-full{right:100%}.grid__item--mobile-up-push-half{left:50%}.grid__item--mobile-up-pull-half{right:50%}.grid__item--mobile-up-push-third{left:33.3333333333%}.grid__item--mobile-up-pull-third{right:33.3333333333%}.grid__item--mobile-up-push-two-thirds{left:66.6666666667%}.grid__item--mobile-up-pull-two-thirds{right:66.6666666667%}.grid__item--mobile-up-push-quarter{left:25%}.grid__item--mobile-up-pull-quarter{right:25%}.grid__item--mobile-up-push-three-quarters{left:75%}.grid__item--mobile-up-pull-three-quarters{right:75%}[class*='grid__item--mobile-up-push']{right:auto}[class*='grid__item--mobile-up-pull']{left:auto}@media screen and (min-width: 46.875em){.grid__item--tablet-up-1{width:16.6666666667%}.grid__item--tablet-up-2{width:33.3333333333%}.grid__item--tablet-up-3{width:50%}.grid__item--tablet-up-4{width:66.6666666667%}.grid__item--tablet-up-5{width:83.3333333333%}.grid__item--tablet-up-6{width:100%}.grid__item--tablet-up-full{width:100%}.grid__item--tablet-up-half{width:50%}.grid__item--tablet-up-third{width:33.3333333333%}.grid__item--tablet-up-two-thirds{width:66.6666666667%}.grid__item--tablet-up-quarter{width:25%}.grid__item--tablet-up-three-quarters{width:75%}.grid__item--tablet-up-align-center{float:none;clear:left;margin-left:auto;margin-right:auto}.grid__item--tablet-up-align-left{float:left;clear:none;margin-left:0;margin-right:0}.grid__item--tablet-up-offset-1{margin-left:16.6666666667%}.grid__item--tablet-up-offset-2{margin-left:33.3333333333%}.grid__item--tablet-up-offset-3{margin-left:50%}.grid__item--tablet-up-push-reset{left:inherit}.grid__item--tablet-up-pull-reset{right:inherit}.grid__item--tablet-up-push-1{left:16.6666666667%}.grid__item--tablet-up-pull-1{right:16.6666666667%}.grid__item--tablet-up-push-2{left:33.3333333333%}.grid__item--tablet-up-pull-2{right:33.3333333333%}.grid__item--tablet-up-push-3{left:50%}.grid__item--tablet-up-pull-3{right:50%}.grid__item--tablet-up-push-4{left:66.6666666667%}.grid__item--tablet-up-pull-4{right:66.6666666667%}.grid__item--tablet-up-push-5{left:83.3333333333%}.grid__item--tablet-up-pull-5{right:83.3333333333%}.grid__item--tablet-up-push-6{left:100%}.grid__item--tablet-up-pull-6{right:100%}.grid__item--tablet-up-push-full{left:100%}.grid__item--tablet-up-pull-full{right:100%}.grid__item--tablet-up-push-half{left:50%}.grid__item--tablet-up-pull-half{right:50%}.grid__item--tablet-up-push-third{left:33.3333333333%}.grid__item--tablet-up-pull-third{right:33.3333333333%}.grid__item--tablet-up-push-two-thirds{left:66.6666666667%}.grid__item--tablet-up-pull-two-thirds{right:66.6666666667%}.grid__item--tablet-up-push-quarter{left:25%}.grid__item--tablet-up-pull-quarter{right:25%}.grid__item--tablet-up-push-three-quarters{left:75%}.grid__item--tablet-up-pull-three-quarters{right:75%}[class*='grid__item--tablet-up-push']{right:auto}[class*='grid__item--tablet-up-pull']{left:auto}}@media screen and (min-width: 67.5em){.grid__item--desktop-up-1{width:8.3333333333%}.grid__item--desktop-up-2{width:16.6666666667%}.grid__item--desktop-up-3{width:25%}.grid__item--desktop-up-4{width:33.3333333333%}.grid__item--desktop-up-5{width:41.6666666667%}.grid__item--desktop-up-6{width:50%}.grid__item--desktop-up-7{width:58.3333333333%}.grid__item--desktop-up-8{width:66.6666666667%}.grid__item--desktop-up-9{width:75%}.grid__item--desktop-up-10{width:83.3333333333%}.grid__item--desktop-up-11{width:91.6666666667%}.grid__item--desktop-up-12{width:100%}.grid__item--desktop-up-full{width:100%}.grid__item--desktop-up-half{width:50%}.grid__item--desktop-up-third{width:33.3333333333%}.grid__item--desktop-up-two-thirds{width:66.6666666667%}.grid__item--desktop-up-quarter{width:25%}.grid__item--desktop-up-three-quarters{width:75%}.grid__item--desktop-up-align-center{float:none;clear:left;margin-left:auto;margin-right:auto}.grid__item--desktop-up-align-left{float:left;clear:none;margin-left:0;margin-right:0}.grid__item--desktop-up-offset-1{margin-left:8.3333333333%}.grid__item--desktop-up-offset-2{margin-left:16.6666666667%}.grid__item--desktop-up-offset-3{margin-left:25%}.grid__item--desktop-up-offset-4{margin-left:33.3333333333%}.grid__item--desktop-up-offset-5{margin-left:41.6666666667%}.grid__item--desktop-up-offset-6{margin-left:50%}.grid__item--desktop-up-push-reset{left:inherit}.grid__item--desktop-up-pull-reset{right:inherit}.grid__item--desktop-up-push-1{left:8.3333333333%}.grid__item--desktop-up-pull-1{right:8.3333333333%}.grid__item--desktop-up-push-2{left:16.6666666667%}.grid__item--desktop-up-pull-2{right:16.6666666667%}.grid__item--desktop-up-push-3{left:25%}.grid__item--desktop-up-pull-3{right:25%}.grid__item--desktop-up-push-4{left:33.3333333333%}.grid__item--desktop-up-pull-4{right:33.3333333333%}.grid__item--desktop-up-push-5{left:41.6666666667%}.grid__item--desktop-up-pull-5{right:41.6666666667%}.grid__item--desktop-up-push-6{left:50%}.grid__item--desktop-up-pull-6{right:50%}.grid__item--desktop-up-push-7{left:58.3333333333%}.grid__item--desktop-up-pull-7{right:58.3333333333%}.grid__item--desktop-up-push-8{left:66.6666666667%}.grid__item--desktop-up-pull-8{right:66.6666666667%}.grid__item--desktop-up-push-9{left:75%}.grid__item--desktop-up-pull-9{right:75%}.grid__item--desktop-up-push-10{left:83.3333333333%}.grid__item--desktop-up-pull-10{right:83.3333333333%}.grid__item--desktop-up-push-11{left:91.6666666667%}.grid__item--desktop-up-pull-11{right:91.6666666667%}.grid__item--desktop-up-push-12{left:100%}.grid__item--desktop-up-pull-12{right:100%}.grid__item--desktop-up-push-full{left:100%}.grid__item--desktop-up-pull-full{right:100%}.grid__item--desktop-up-push-half{left:50%}.grid__item--desktop-up-pull-half{right:50%}.grid__item--desktop-up-push-third{left:33.3333333333%}.grid__item--desktop-up-pull-third{right:33.3333333333%}.grid__item--desktop-up-push-two-thirds{left:66.6666666667%}.grid__item--desktop-up-pull-two-thirds{right:66.6666666667%}.grid__item--desktop-up-push-quarter{left:25%}.grid__item--desktop-up-pull-quarter{right:25%}.grid__item--desktop-up-push-three-quarters{left:75%}.grid__item--desktop-up-pull-three-quarters{right:75%}[class*='grid__item--desktop-up-push']{right:auto}[class*='grid__item--desktop-up-pull']{left:auto}}.marketing-button{display:inline-block;padding:1.0625em 1.875em;border-radius:5px;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:700;font-size:1em;line-height:1.133;-webkit-font-smoothing:antialiased;-webkit-transition:150ms ease;transition:150ms ease;-webkit-transition-property:background-color border-color color;transition-property:background-color border-color color;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#5c6ac4;color:#ffffff;border-width:0;border-style:solid;border-color:transparent}.marketing-button,.marketing-button:hover,.marketing-button:focus{text-decoration:none}.marketing-button:focus{outline:0}@media screen and (min-width: 46.875em){.marketing-button+.marketing-button{margin-left:15px}}.marketing-button:hover,.marketing-button:focus{background-color:#202e78;color:#ffffff}.marketing-button:active{background-color:#000639;color:#ffffff;border-color:#000639}.marketing-button:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(92,106,196,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(92,106,196,0.5)}.marketing-button[disabled],.marketing-form--is-loading .marketing-button{-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#919ea9;color:#ffffff;cursor:not-allowed}.marketing-button[disabled]:hover,.marketing-button[disabled]:focus,.marketing-form--is-loading .marketing-button:hover,.marketing-form--is-loading .marketing-button:focus{background-color:#808f9c;color:#ffffff}.marketing-button[disabled]:active,.marketing-form--is-loading .marketing-button:active{background-color:#748593;color:#ffffff}.marketing-button[disabled]:hover,.marketing-form--is-loading .marketing-button:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button[disabled]:focus,.marketing-form--is-loading .marketing-button:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(145,158,169,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(145,158,169,0.5)}.marketing-button[disabled]:hover,.marketing-button[disabled]:focus,.marketing-button[disabled]:active,.marketing-form--is-loading .marketing-button:hover,.marketing-form--is-loading .marketing-button:focus,.marketing-form--is-loading .marketing-button:active{background-color:#919ea9}.marketing-form--is-loading button.marketing-button{position:relative}.marketing-form--is-loading button.marketing-button,.marketing-form--is-loading button.marketing-button:hover,.marketing-form--is-loading button.marketing-button:focus{color:#919ea9}.marketing-form--is-loading button.marketing-button::after{content:'';display:block;width:24px;height:24px;position:absolute;top:50%;left:50%;margin-left:-12px;margin-top:-12px;border-radius:50%;border:3px solid #ffffff;border-top-color:transparent;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.marketing-button--block{width:100%;padding-left:0;padding-right:0}.marketing-button--secondary{-webkit-box-shadow:none;box-shadow:none;background-color:transparent;color:#5c6ac4;border-width:0.125em;border-style:solid;border-color:#5c6ac4;padding:1em 1.75em}.marketing-button--secondary:hover,.marketing-button--secondary:focus{background-color:#5c6ac4;color:#ffffff}.marketing-button--secondary:active{background-color:#202e78;color:#ffffff;border-color:#202e78}.marketing-button--secondary:hover{-webkit-box-shadow:none;box-shadow:none}.marketing-button--secondary:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(92,106,196,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(92,106,196,0.5)}.marketing-button--small{padding:0.8125em 1.1875em}.marketing-button--small.marketing-button--secondary{padding:0.6875em 1.0625em}.marketing-button--skin-teal{-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#47c1bf;color:#ffffff}.marketing-button--skin-teal:hover,.marketing-button--skin-teal:focus{background-color:#00848e;color:#ffffff}.marketing-button--skin-teal:active{background-color:#003135;color:#ffffff}.marketing-button--skin-teal:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button--skin-teal:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(71,193,191,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(71,193,191,0.5)}.marketing-button--skin-salmon{-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#fb8b8a;color:#ffffff}.marketing-button--skin-salmon:hover,.marketing-button--skin-salmon:focus{background-color:#a65c5b;color:#ffffff}.marketing-button--skin-salmon:active{background-color:#452626;color:#ffffff}.marketing-button--skin-salmon:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button--skin-salmon:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(251,139,138,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(251,139,138,0.5)}.marketing-button--skin-lowlight{-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#30373b;color:#ffffff}.marketing-button--skin-lowlight:hover,.marketing-button--skin-lowlight:focus{background-color:#22272a;color:#ffffff}.marketing-button--skin-lowlight:active{background-color:#191d1f;color:#ffffff}.marketing-button--skin-lowlight:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button--skin-lowlight:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(48,55,59,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(48,55,59,0.5)}.marketing-button--skin-light{-webkit-box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 15px 0 rgba(0,0,0,0.15);background-color:#ffffff;color:#5c6ac4}.marketing-button--skin-light:hover,.marketing-button--skin-light:focus{background-color:#f0f0f0;color:#5c6ac4}.marketing-button--skin-light:active{background-color:#e6e6e6;color:#5c6ac4}.marketing-button--skin-light:hover{-webkit-box-shadow:0 5px 25px 0 rgba(0,0,0,0.25);box-shadow:0 5px 25px 0 rgba(0,0,0,0.25)}.marketing-button--skin-light:focus{-webkit-box-shadow:0 0 0.1875em 0.1875em rgba(255,255,255,0.5);box-shadow:0 0 0.1875em 0.1875em rgba(255,255,255,0.5)}.marketing-button--skin-reset{margin:0;padding:0;border:0;border-radius:0;color:inherit;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.marketing-button--skin-reset:focus,.marketing-button--skin-reset:hover,.marketing-button--skin-reset:active{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.marketing-button--skin-reset:focus,.marketing-button--skin-reset:hover{color:#5c6ac4}.marketing-button--skin-reset:active{color:#202e78}.marketing-button-wrapper{display:inline}@media screen and (min-width: 46.875em){.marketing-form--inline{text-align:center}}.marketing-form--inline .marketing-input-wrapper{text-align:left}@media screen and (min-width: 46.875em){.marketing-form--inline .marketing-input-wrapper{margin-bottom:0}}.marketing-form--inline__heading{text-align:center}.marketing-form--lowlight .marketing-radio-label,.marketing-form--lowlight .marketing-checkbox-label{color:#ffffff}.marketing-form__hidden-on-success.js-is-hidden{display:none}.marketing-form__fallback-cta{color:#454f5b}.marketing-input-wrapper{position:relative;display:block;margin-bottom:15px}.marketing-input-wrapper .marketing-select-wrapper,.marketing-input-wrapper .marketing-input,.marketing-input-wrapper .marketing-textarea{margin-bottom:0}.marketing-input-wrapper.js-is-hidden{display:none}.marketing-input,.marketing-textarea,.marketing-select-wrapper>select{display:inline-block;height:3.2em;width:100%;margin:0 0 15px;padding:1em 1em;color:#30373b;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-size:1em;-webkit-box-shadow:0 0 0 1px #c4cdd5;box-shadow:0 0 0 1px #c4cdd5;border:0;border-radius:5px;background-color:#ffffff;-webkit-transition:padding 150ms;transition:padding 150ms;-webkit-appearance:none;-moz-appearance:none;appearance:none}.marketing-block--lowlight .marketing-input,.marketing-form--lowlight .marketing-input,.page-block--lowlight .marketing-input,.marketing-block--lowlight .marketing-textarea,.marketing-form--lowlight .marketing-textarea,.page-block--lowlight .marketing-textarea,.marketing-block--lowlight .marketing-select-wrapper>select,.marketing-form--lowlight .marketing-select-wrapper>select,.page-block--lowlight .marketing-select-wrapper>select{-webkit-box-shadow:none;box-shadow:none}.js-is-filled .marketing-input,.js-is-filled .marketing-textarea,.js-is-filled .marketing-select-wrapper>select{padding-top:1.5em;padding-bottom:0.5em}.marketing-input:focus,.marketing-input.focus,.marketing-textarea:focus,.marketing-textarea.focus,.marketing-select-wrapper>select:focus,.marketing-select-wrapper>select.focus{color:#000000;outline:0;-webkit-box-shadow:0 0 0 2px #5c6ac4;box-shadow:0 0 0 2px #5c6ac4}.marketing-input:focus+.marketing-form__messages .error+.suggest,.marketing-input.focus+.marketing-form__messages .error+.suggest,.marketing-textarea:focus+.marketing-form__messages .error+.suggest,.marketing-textarea.focus+.marketing-form__messages .error+.suggest,.marketing-select-wrapper>select:focus+.marketing-form__messages .error+.suggest,.marketing-select-wrapper>select.focus+.marketing-form__messages .error+.suggest{display:none}.marketing-input:focus+.marketing-form__messages .error+.is-visible,.marketing-input.focus+.marketing-form__messages .error+.is-visible,.marketing-textarea:focus+.marketing-form__messages .error+.is-visible,.marketing-textarea.focus+.marketing-form__messages .error+.is-visible,.marketing-select-wrapper>select:focus+.marketing-form__messages .error+.is-visible,.marketing-select-wrapper>select.focus+.marketing-form__messages .error+.is-visible{display:block}.marketing-input[disabled],.marketing-textarea[disabled],.marketing-select-wrapper>select[disabled]{background-color:#dfe3e8}.marketing-input::-webkit-input-placeholder,.marketing-textarea::-webkit-input-placeholder{color:#ffffff}.marketing-input:-ms-input-placeholder,.marketing-textarea:-ms-input-placeholder{color:#ffffff}.marketing-input::-ms-input-placeholder,.marketing-textarea::-ms-input-placeholder{color:#ffffff}.marketing-input::placeholder,.marketing-textarea::placeholder{color:#ffffff}.marketing-input--error,.marketing-block--lowlight .marketing-input--error,.marketing-form--lowlight .marketing-input--error,.page-block--lowlight .marketing-input--error{-webkit-box-shadow:0 0 0 2px #eb644d;box-shadow:0 0 0 2px #eb644d}.marketing-textarea{height:auto;min-height:3.2em}.marketing-select-wrapper{position:relative;display:block;margin-bottom:15px}.marketing-select-wrapper>select{margin:0;padding-top:1.375em;padding-bottom:0.375em;padding-right:3em}.marketing-select-wrapper>select::-ms-expand{display:none}.marketing-select-wrapper::after{content:'';display:block;position:absolute;top:50%;right:2.5em;height:1.25em;width:1px;background-color:#c4cdd5;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.marketing-select-wrapper::before{pointer-events:none;content:'';background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20baseProfile=%22tiny%22%20viewBox=%220%200%2010.289%206.563%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23919eab%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M5.212%206.563L0%201.423%201.404%200l3.788%203.735L8.865.01l1.424%201.404%22/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:100% auto;background-position:center;height:0.75em;width:0.75em;margin-bottom:-0.5625em;display:block;position:absolute;top:50%;right:1em;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.marketing-label{display:block;margin-bottom:0.6153846154em;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:700;font-size:0.8125em;color:#454f5b}.marketing-label--in-field{position:absolute;left:1rem;top:0.5rem;font-size:0.6875em;font-weight:400;pointer-events:none;z-index:10}.marketing-label--floating{opacity:0;-webkit-transform:translateY(3px);-ms-transform:translateY(3px);transform:translateY(3px);-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:opacity, transform;transition-property:opacity, transform, -webkit-transform;-webkit-transition-duration:150ms;transition-duration:150ms}.js-is-filled .marketing-label--floating{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.marketing-label--hidden{display:inline}.marketing-form__messages{font-size:0.8125em;font-weight:500}.marketing-form__messages .error,.marketing-form__messages .success,.marketing-form__messages .suggest{display:block;padding:0.6153846154em 0 0}.marketing-form__messages .error{color:#eb644d}.marketing-form__messages .error a{color:#eb644d;border-bottom:1px solid #eb644d}.marketing-form__messages .success{display:none;color:#5c6ac4}.marketing-form__messages .success a{color:#eb644d;border-bottom:1px solid #eb644d}.marketing-form__messages .success.is-visible,.marketing-form--has-success .marketing-form__messages .success{display:block}.marketing-form__messages .suggest{display:none;color:#ffffff}.marketing-block--lowlight .marketing-form__messages .suggest,.marketing-form--lowlight .marketing-form__messages .suggest,.page-block--lowlight .marketing-form__messages .suggest{color:#ffffff}.marketing-form__messages .suggest.is-visible{display:block}.marketing-form__ajax-success{display:none}.marketing-form__ajax-success.js-is-visible{display:block}.marketing-checkbox,.marketing-radio{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;margin-bottom:15px;float:left}.marketing-checkbox:checked+label::after,.marketing-radio:checked+label::after{position:absolute;left:0;top:0;content:''}.marketing-checkbox:focus+label::before,.marketing-radio:focus+label::before,.marketing-checkbox:focus:checked+label::before,.marketing-radio:focus:checked+label::before{outline:none;border-color:#5c6ac4;-webkit-box-shadow:0 0 4px 0 #5c6ac4;box-shadow:0 0 4px 0 #5c6ac4}.marketing-checkbox-label,.marketing-radio-label{display:block;text-align:left;position:relative;margin-bottom:15px;padding-left:30px;line-height:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.marketing-checkbox-label:hover::before,.marketing-radio-label:hover::before{border-color:#5c6ac4}.marketing-checkbox-label::before,.marketing-radio-label::before{content:'';position:absolute;left:0;top:0;height:20px;width:20px;background-color:#ffffff;border:1px solid #c4cdd5;border-radius:5px;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.2);box-shadow:inset 0 1px 3px rgba(0,0,0,0.2);-webkit-transition:border-color 150ms ease;transition:border-color 150ms ease}.marketing-checkbox--large+label,.marketing-radio--large+label{padding-left:42px;line-height:32px}.marketing-checkbox--large+label::before,.marketing-radio--large+label::before{width:32px;height:32px}.marketing-checkbox:checked+label::before{background-color:#5c6ac4;border-color:#5c6ac4;-webkit-box-shadow:none;box-shadow:none}.marketing-checkbox:checked+label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2040.7%2040%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23ffffff%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M16.7%2030l-7.4-7.9c-.8-.8-.6-2%20.4-2.6%201-.6%202.4-.5%203.1.3l3.7%204%2011.3-13c.7-.8%202.1-1%203.1-.4s1.2%201.8.5%202.6L16.7%2030z%22/%3E%3C/svg%3E");width:20px;height:20px}.marketing-checkbox--large:checked+label::after{width:32px;height:32px}.marketing-radio:checked+label::after{left:5px;top:5px;width:10px;height:10px;border-radius:10px;background-color:#5c6ac4}.marketing-radio:checked+label::before{border-color:#5c6ac4}.marketing-radio-label::before{border-radius:50%}.marketing-radio--large:checked+label::after{left:8px;top:8px;width:16px;height:16px;border-radius:50%}.marketing-checkbox-label--inline,.marketing-radio-label--inline{margin-right:0.9375em;margin-bottom:0;display:inline-block}.icon{display:inline-block;height:1em;width:0.8em;background-size:contain;background-position:center center;background-repeat:no-repeat}.icon--size-large{width:60px;height:60px}.icon--size-small{width:40px;height:40px}.icon--primary{fill:#5c6ac4}.icon--grey{fill:#919ea9}.icon--black{fill:#000000}.icon--white{fill:#ffffff}.icon--yellow{fill:#fdd991}.icon--green{fill:#58b44b}.icon--blue{fill:#368aa9}.icon--blue_light{fill:#479ccf}.icon--blue_fb{fill:#385a98}.icon--blue_twitter{fill:#55acee}.icon--blue_linkedin{fill:#0976b4}.icon--red_pinterest{fill:#bd081c}.icon--fill-primary{fill:#5c6ac4}.icon--fill-grey{fill:#919ea9}.icon--fill-black{fill:#000000}.icon--fill-white{fill:#ffffff}.icon--fill-yellow{fill:#fdd991}.icon--fill-green{fill:#58b44b}.icon--fill-blue{fill:#368aa9}.icon--fill-blue_light{fill:#479ccf}.icon--fill-blue_fb{fill:#385a98}.icon--fill-blue_twitter{fill:#55acee}.icon--fill-blue_linkedin{fill:#0976b4}.icon--fill-red_pinterest{fill:#bd081c}.icon-arrow-left{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2024%2011%22%3E%3Cpath%20d=%22M5.5%200c.1%200%20.3%200%20.4.1.1.2.1.6-.1.8L1.2%205.5l4.6%204.6c.2.2.2.5%200%20.7-.2.2-.5.2-.7%200l-5-5c-.1-.2-.1-.5%200-.7l5-5c.1-.1.3-.1.4-.1z%22/%3E%3Cpath%20d=%22M.5%205h23c.2%200%20.5.2.5.5s-.3.5-.5.5H.5C.2%206%200%205.8%200%205.5S.2%205%20.5%205z%22/%3E%3C/svg%3E");background-repeat:no-repeat}.icon-arrow-right{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2024%2011%22%3E%3Cpath%20d=%22M18.5%2011c-.1%200-.3%200-.4-.1-.2-.2-.2-.5%200-.7l4.6-4.6L18.1%201c-.2-.2-.2-.5%200-.7.2-.2.5-.2.7%200l5%205c.2.2.2.5%200%20.7l-5%205c-.1-.1-.2%200-.3%200z%22/%3E%3Cpath%20d=%22M23.5%206H.5C.2%206%200%205.8%200%205.5S.2%205%20.5%205h23c.2%200%20.5.2.5.5s-.3.5-.5.5z%22/%3E%3C/svg%3E");background-repeat:no-repeat}.icon-close-white{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2044%2044%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23ffffff%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M39.196%2043.3L1.154%205.256l3.89-3.89%2038.04%2038.043z%22/%3E%3Cpath%20d=%22M.54%2039.413L38.58%201.37l3.89%203.89L4.428%2043.302z%22/%3E%3C/svg%3E");background-repeat:no-repeat}.icon-close-black{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2044%2044%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23000000%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M39.196%2043.3L1.154%205.256l3.89-3.89%2038.04%2038.043z%22/%3E%3Cpath%20d=%22M.54%2039.413L38.58%201.37l3.89%203.89L4.428%2043.302z%22/%3E%3C/svg%3E");background-repeat:no-repeat}.icon-close{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2044%2044%22%3E%3Cpath%20d=%22M39.196%2043.3L1.154%205.256l3.89-3.89%2038.04%2038.043z%22/%3E%3Cpath%20d=%22M.54%2039.413L38.58%201.37l3.89%203.89L4.428%2043.302z%22/%3E%3C/svg%3E");background-repeat:no-repeat}img{max-width:100%}a img{border:0}img[data-srcset]{opacity:0;-webkit-transition:opacity 150ms linear;transition:opacity 150ms linear}img[data-srcset].lazyloaded{opacity:1}.marketing-nav-wrapper{max-width:1600px;margin:0 auto}.marketing-nav{width:100%;position:relative;clear:both}.marketing-nav .popover-wrapper{display:block;cursor:auto}.marketing-nav .popover{width:auto;min-width:calc(100% + 12px);top:45px;left:0;margin-top:0;-webkit-transform:none;-ms-transform:none;transform:none}@media screen and (min-width: 67.5em){.marketing-nav .popover{top:65px}}.marketing-nav .popover::before,.marketing-nav .popover::after{content:none}.marketing-nav .popover-content{padding:12px 24px 12px 0;-webkit-box-shadow:0 5px 30px 5px rgba(69,79,91,0.2);box-shadow:0 5px 30px 5px rgba(69,79,91,0.2);border-radius:5px;background-color:#ffffff}.marketing-nav__primary{padding-left:calc(5% + 4px);padding-right:calc(5% + 4px);background-color:#ffffff;border-bottom:1px solid #dfe3e8;height:60px}@media screen and (min-width: 46.875em){.marketing-nav__primary{padding-left:calc(5% + 9px);padding-right:calc(5% + 9px)}}@media screen and (min-width: 67.5em){.marketing-nav__primary{padding-left:calc(5% + 18px);padding-right:calc(5% + 18px);height:80px}}.marketing-nav__items>li{position:relative;display:block}@media screen and (min-width: 46.875em){.marketing-nav__items>li{float:left;line-height:60px}}@media screen and (min-width: 67.5em){.marketing-nav__items>li{line-height:80px}}.marketing-nav__item{display:block;white-space:nowrap;color:#212b35;font-size:0.9375em;font-weight:400;font-family:ShopifySans, Helvetica, Arial, sans-serif;-webkit-transition-property:border-color, fill;transition-property:border-color, fill;-webkit-transition-duration:300ms;transition-duration:300ms}.marketing-nav__item:hover,.marketing-nav__item:focus{color:#212b35}.marketing-nav__item:active,.marketing-nav__item.marketing-nav__item--active{color:#212b35}.marketing-nav__item--primary{font-size:0.9375em;font-weight:700;color:#212b35}@media screen and (min-width: 46.875em){.marketing-nav__item--primary{margin-left:12px;margin-right:12px;padding-left:0;padding-right:0;border-bottom:3px solid transparent}.marketing-nav__item--primary:hover,.marketing-nav__item--primary:focus{border-bottom-color:#919eab}.marketing-nav__item--primary:active,.marketing-nav__item--primary.marketing-nav__item--active{border-bottom-color:#212b35}}.marketing-nav__item--primary:hover,.marketing-nav__item--primary:focus{color:#212b35;font-weight:700}.marketing-nav__item--primary:active,.marketing-nav__item--primary.marketing-nav__item--active{color:#212b35;font-weight:700}.marketing-nav__item--user{font-size:0.9375em;font-weight:700;color: white}@media screen and (min-width: 46.875em){.marketing-nav__item--user{margin-left:12px;margin-right:12px;padding-left:0;padding-right:0;border-bottom:3px solid transparent}.marketing-nav__item--user:hover,.marketing-nav__item--user:focus{border-bottom-color:#919eab}.marketing-nav__item--user:active,.marketing-nav__item--user.marketing-nav__item--active{border-bottom-color:#212b35}}.marketing-nav__item--user:hover,.marketing-nav__item--user:focus{color:#212b35;font-weight:700}.marketing-nav__item--user:active,.marketing-nav__item--user.marketing-nav__item--active{color:#212b35;font-weight:700}.marketing-nav__item--secondary{font-size:0.9375em;font-weight:700;color:#ffffff}@media screen and (min-width: 46.875em){.marketing-nav__item--secondary{margin-left:12px;margin-right:12px;padding-left:0;padding-right:0;border-bottom:3px solid transparent}.marketing-nav__item--secondary:hover,.marketing-nav__item--secondary:focus{border-bottom-color:#919eab}.marketing-nav__item--secondary:active,.marketing-nav__item--secondary.marketing-nav__item--active{border-bottom-color:#212b35}}.marketing-nav__item--secondary:hover,.marketing-nav__item--secondary:focus{color:#212b35;font-weight:700}.marketing-nav__item--secondary:active,.marketing-nav__item--secondary.marketing-nav__item--active{color:#212b35;font-weight:700}.marketing-nav__item--child{font-size:0.9375em;font-weight:700;color:#ffffff}@media screen and (min-width: 46.875em){.marketing-nav__item--child{margin-left:0;margin-right:0;padding-left:24px;padding-right:24px}}.marketing-nav__item--child:hover,.marketing-nav__item--child:focus{color:#212b35;font-weight:700}.marketing-nav__item--child:active,.marketing-nav__item--child.marketing-nav__item--active{color:#212b35;font-weight:700}.marketing-nav__item--primary{background-color:transparent;letter-spacing:0.05em;text-transform:uppercase}.marketing-nav__item--primary:hover,.marketing-nav__item--primary:focus{background-color:transparent}.popover-wrapper.js-is-active>.marketing-nav__item--primary{background-color:#ffffff;color:#212b35}.popover-wrapper.js-is-active>.marketing-nav__item--primary:focus{outline:0}.marketing-nav__item--primary.popover-trigger:hover{border-bottom:1px solid #dfe3e8}.popover-wrapper>.marketing-nav__item--primary{-webkit-transition:none;transition:none}@media screen and (min-width: 46.875em){.marketing-nav__item--primary,.marketing-nav__item--user{height:60px}}@media screen and (min-width: 67.5em){.marketing-nav__item--primary,.marketing-nav__item--user{height:80px}}@media screen and (max-width: 46.8125em){.marketing-nav__item--secondary{padding-top:6px;padding-bottom:6px;padding-left:calc(5% - 3px);border-left:3px solid transparent}.marketing-nav__item--secondary:hover,.marketing-nav__item--secondary:focus{border-left-color:#919eab}.marketing-nav__item--secondary:active,.marketing-nav__item--secondary.marketing-nav__item--active{border-left-color:#212b35}}@media screen and (min-width: 46.875em){.marketing-nav__item--secondary{height:60px}}@media screen and (min-width: 67.5em){.marketing-nav__item--secondary{height:70px}}.marketing-nav__item--child{padding-top:9px;padding-bottom:9px;line-height:1}@media screen and (min-width: 67.5em){.marketing-nav__item--child{padding-left:calc(24px - 3px);border-left:3px solid transparent}.marketing-nav__item--child:hover,.marketing-nav__item--child:focus{border-left-color:#919eab}.marketing-nav__item--child:active,.marketing-nav__item--child.marketing-nav__item--active{border-left-color:#212b35}}.marketing-nav__user{float:right}.marketing-nav__button{margin-left:12px;padding-left:1.25em;padding-right:1.25em}.marketing-nav__secondary{position:relative;z-index:1;min-height:60px;background-color:#ffffff;border-bottom:1px solid #dfe3e8}@media screen and (max-width: 46.8125em){.marketing-nav__secondary{border-top:1px solid #dfe3e8}}@media screen and (min-width: 67.5em){.marketing-nav__secondary{min-height:70px}}@media screen and (max-width: 46.8125em){.marketing-nav__secondary .marketing-nav__items{display:none;position:absolute;z-index:10;width:100%;top:60px;left:0;padding-top:6px;padding-bottom:6px;border-bottom:1px solid #dfe3e8;background-color:#ffffff}}@media screen and (min-width: 46.875em){.marketing-nav__secondary .marketing-nav__items{display:block !important;margin-left:-12px;padding-left:calc(5% + 9px);padding-right:calc(5% + 9px)}.marketing-nav__secondary .marketing-nav__items::after{content:'';display:table;clear:both}}@media screen and (min-width: 67.5em){.marketing-nav__secondary .marketing-nav__items{padding-left:calc(5% + 18px);padding-right:calc(5% + 18px)}}@media screen and (min-width: 46.875em){.marketing-nav__secondary .marketing-nav__items>li{line-height:60px}}@media screen and (min-width: 67.5em){.marketing-nav__secondary .marketing-nav__items>li{line-height:70px}}.marketing-nav__secondary__button{width:100%;padding-left:5%;text-align:left;font-size:0.9375em;line-height:60px;color:#212b35}.marketing-nav__logo{float:left}@media screen and (min-width: 67.5em){.marketing-nav__logo{margin-right:1.5625em}}@media screen and (max-width: 67.4375em){.marketing-nav__logo--centered{float:none;overflow:hidden}.marketing-nav__logo--centered .marketing-nav__logo__shopify{margin-left:auto;margin-right:auto}}.marketing-nav__logo .icon,.marketing-nav__hamburger .icon{width:100%;height:100%}.marketing-nav__logo__shopify{display:block;width:111px;height:32px;margin-top:12px}@media screen and (min-width: 67.5em){.marketing-nav__logo__shopify{width:125px;height:36px;margin-top:20px}}.marketing-nav__hamburger{float:right;-webkit-box-sizing:content-box;box-sizing:content-box;width:1.25em;height:1.25em;padding:0.625em;margin-right:-0.625em;fill:#212b35;position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.marketing-nav__hamburger::-moz-focus-inner{padding:0;border:0}.marketing-nav__arrow,.marketing-nav__external-indicator{display:inline-block;fill:#919eab}.marketing-nav__item--primary .marketing-nav__arrow,.marketing-nav__item--primary .marketing-nav__external-indicator{fill:#919eab}.js-is-active .marketing-nav__item--primary .marketing-nav__arrow,.marketing-nav__item--primary:hover .marketing-nav__arrow,.marketing-nav__item--primary:focus .marketing-nav__arrow,.marketing-nav__item--primary:active .marketing-nav__arrow,.js-is-active .marketing-nav__item--primary .marketing-nav__external-indicator,.marketing-nav__item--primary:hover .marketing-nav__external-indicator,.marketing-nav__item--primary:focus .marketing-nav__external-indicator,.marketing-nav__item--primary:active .marketing-nav__external-indicator{fill:#212b35}.marketing-nav__item--user .marketing-nav__arrow,.marketing-nav__item--user .marketing-nav__external-indicator{fill:#919eab}.js-is-active .marketing-nav__item--user .marketing-nav__arrow,.marketing-nav__item--user:hover .marketing-nav__arrow,.marketing-nav__item--user:focus .marketing-nav__arrow,.marketing-nav__item--user:active .marketing-nav__arrow,.js-is-active .marketing-nav__item--user .marketing-nav__external-indicator,.marketing-nav__item--user:hover .marketing-nav__external-indicator,.marketing-nav__item--user:focus .marketing-nav__external-indicator,.marketing-nav__item--user:active .marketing-nav__external-indicator{fill:#212b35}.marketing-nav__item--secondary .marketing-nav__arrow,.marketing-nav__item--secondary .marketing-nav__external-indicator{fill:#919eab}.js-is-active .marketing-nav__item--secondary .marketing-nav__arrow,.marketing-nav__item--secondary:hover .marketing-nav__arrow,.marketing-nav__item--secondary:focus .marketing-nav__arrow,.marketing-nav__item--secondary:active .marketing-nav__arrow,.js-is-active .marketing-nav__item--secondary .marketing-nav__external-indicator,.marketing-nav__item--secondary:hover .marketing-nav__external-indicator,.marketing-nav__item--secondary:focus .marketing-nav__external-indicator,.marketing-nav__item--secondary:active .marketing-nav__external-indicator{fill:#212b35}.marketing-nav__arrow{vertical-align:middle;width:10px;height:5px;margin-left:5px}.marketing-nav__item--primary .marketing-nav__arrow{width:10px;height:5px;margin-left:5px;margin-top:-3px}.marketing-nav__item--secondary .marketing-nav__arrow{width:10px;height:5px;margin-left:5px;margin-top:-3px}@media screen and (max-width: 46.8125em){.marketing-nav__secondary .marketing-nav__arrow{position:absolute;top:50%;right:5%;margin-top:-3px}}.marketing-nav__external-indicator{vertical-align:middle;width:7px;height:7px;margin-left:2px;-webkit-transition:fill 300ms;transition:fill 300ms}.marketing-nav__item--primary .marketing-nav__external-indicator{width:7px;height:7px;margin-left:2px;margin-top:-8px}.marketing-nav__item--user .marketing-nav__external-indicator{width:7px;height:7px;margin-left:2px;margin-top:-8px}.marketing-nav__item--secondary .marketing-nav__external-indicator{width:7px;height:7px;margin-left:2px;margin-top:-8px}.marketing-nav__item--child .marketing-nav__external-indicator{width:7px;height:7px;margin-left:2px;margin-top:-8px}.skip-to-main.focusable:focus{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:400;position:absolute;color:#000000;height:60px;line-height:60px;padding:0 15px;background:#ffffff;z-index:1001}@media screen and (min-width: 67.5em){.skip-to-main.focusable:focus{height:80px;line-height:80px}}.footer--main{margin-left:auto;margin-right:auto;position:relative;background:#000639}.footer--main::after{content:'';display:table;clear:both}.footer-section{margin-bottom:1.875em}.footer-section::after{content:'';display:table;clear:both}.footer-heading{margin:0 0 0.5625em;color:#ffffff;letter-spacing:normal}.footer-link{display:block;font-size:0.875em;padding:0.375em 0;color:#919eab;-webkit-transition:color 300ms ease-in-out;transition:color 300ms ease-in-out}.footer-link:hover,.footer-link:focus{color:#ffffff}.footer-top{padding-bottom:1.5625em}@media screen and (max-width: 46.8125em){.footer-top{padding-top:1.5625em}}.footer-top+.footer-bottom{border-top:1px solid rgba(223,227,232,0.1)}.footer-bottom{padding-top:1.875em;padding-bottom:1.875em}.footer-bottom::after{content:'';display:table;clear:both}.footer-bottom a{color:#919eab;-webkit-transition:color 300ms ease-in-out;transition:color 300ms ease-in-out}@media screen and (min-width: 67.5em){.footer-bottom a{line-height:1.875em}}.footer-bottom a:hover{color:#ffffff}.footer-bottom__links>a{color:#ffffff;line-height:1.875em;white-space:nowrap}@media screen and (min-width: 46.875em){.footer-bottom__links>a{margin-left:15px}}@media screen and (max-width: 46.8125em){.footer-bottom__links>a{display:block}}.footer-bottom__links>a:hover,.footer-bottom__links>a:focus{color:#ffffff}.footer-country-select{margin-bottom:0;display:inline-block;position:relative;width:auto;line-height:1.875em}@media screen and (min-width: 46.875em){.footer-country-select{margin-left:15px}}.footer-country-select .popover{width:auto;position:relative}.footer-country-select .popover::before,.footer-country-select .popover::after{display:none}.footer-country-select__trigger{color:#ffffff;-webkit-transition:color 300ms ease-in-out;transition:color 300ms ease-in-out}.footer-country-select__trigger:hover,.footer-country-select__trigger:focus{color:#ffffff}.footer-country-select__trigger:hover .footer-country-select__globe,.footer-country-select__trigger:hover .footer-country-select__arrow,.footer-country-select__trigger:focus .footer-country-select__globe,.footer-country-select__trigger:focus .footer-country-select__arrow{fill:#ffffff}.footer-country-select__popover.js-is-active .footer-country-select__arrow{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.footer-country-select__globe,.footer-country-select__arrow{fill:#ffffff;-webkit-transition:fill 300ms ease-in-out;transition:fill 300ms ease-in-out;display:inline-block;vertical-align:middle}.footer-country-select__globe{width:1em;height:1em;margin-bottom:0.1875em}.footer-country-select__arrow{margin-bottom:0.1875em;width:0.75em;height:0.75em}.footer-country-select__text{padding-left:0.375em;padding-right:0.375em}.footer-country-select__content.popover-content{padding:12px 24px 12px;position:absolute;bottom:25px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);-webkit-column-count:2;column-count:2;-webkit-box-shadow:0 5px 30px 5px rgba(69,79,91,0.2);box-shadow:0 5px 30px 5px rgba(69,79,91,0.2);border-radius:5px;background-color:#ffffff}@media screen and (min-width: 46.875em){.footer-country-select__content.popover-content{padding-left:0;-webkit-transform:none;-ms-transform:none;transform:none;right:0;left:auto}}.footer-country-select__content.popover-content li{display:inline-block;width:100%}.footer-country-select__content.popover-content a{color:#ffffff;font-weight:700;line-height:1;padding:9px 24px 9px 21px;border-left:3px solid transparent;margin-left:0;margin-right:0;white-space:nowrap;display:block}@media screen and (max-width: 46.8125em){.footer-country-select__content.popover-content a{font-size:0.875em;padding-right:10px;padding-left:7px;line-height:1.2}}.footer-country-select__content.popover-content a:hover,.footer-country-select__content.popover-content a:focus{color:#212b35;border-left-color:#919eab}.footer-country-select__content.popover-content a:active{border-left-color:#212b35}.footer-social__icon{display:inline-block;width:1.125em;height:1.125em;margin-top:0.3125em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.footer-social__icon{width:1em;height:1em}}.footer-social__icon+.footer-social__icon{margin-left:0.5em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.footer-social__icon+.footer-social__icon{margin-left:0.3125em}}.footer-social__icon .icon{width:100%;height:100%;fill:#ffffff;-webkit-transition:fill 300ms ease-in-out;transition:fill 300ms ease-in-out}.footer-social__icon:hover .icon,.footer-social__icon:focus .icon{fill:#ffffff}.footer-nav{border-bottom:1px solid rgba(223,227,232,0.1);margin-bottom:1.5625em}@media screen and (max-width: 46.8125em){.footer-nav{text-align:center;padding-bottom:1.5625em}}.footer-nav a{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:700;font-size:1em;margin-right:0.9375em;color:#ffffff;display:inline-block}@media screen and (max-width: 46.8125em){.footer-nav a{margin-right:0.46875em;margin-left:0.46875em;padding-top:0.3125em}}@media screen and (min-width: 46.875em){.footer-nav a{line-height:70px;border-bottom:2px solid #000639;-webkit-transition-property:border-color, fill;transition-property:border-color, fill;-webkit-transition-duration:300ms;transition-duration:300ms}.footer-nav a:hover,.footer-nav a:focus{color:#ffffff;border-color:#ffffff}}.footer-column--nameless{margin-top:1.65em}.drawer{display:none;position:fixed;overflow-y:scroll;overflow-x:hidden;-webkit-overflow-scrolling:touch;z-index:1000;top:0;bottom:0;width:18.75em;max-width:100%;-webkit-transition:-webkit-transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);transition:-webkit-transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);transition:transform 0.4s cubic-bezier(0.4, 0, 0.2, 1),-webkit-transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);background-color:#ffffff;font-size:1.1428571429em;font-family:ShopifySans, Helvetica, Arial, sans-serif}@media screen and (prefers-reduced-motion: reduce){.drawer{-webkit-transition:none;transition:none;-webkit-animation:none;animation:none}}.js-drawer-open .drawer{display:block;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.drawer .marketing-nav__logo__shopify{margin-top:0}.drawer--left{left:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%)}.drawer--right{right:0;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%)}.drawer--powered-by-shopify .drawer__items--primary{padding-top:0;border-top:0}.drawer__inner{position:relative;min-height:100%;padding-right:30px;padding-bottom:30px;padding-left:30px}@media screen and (max-width: 67.4375em){.drawer__inner .marketing-form__button{width:100%}}.drawer__top{position:relative;height:60px;padding-top:15px;padding-bottom:15px}.drawer__close-button{display:block;-webkit-box-sizing:content-box;box-sizing:content-box;width:1.25em;height:1.25em;padding:0.625em;fill:#212b35;position:absolute;top:50%;right:-0.625em;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.drawer__close-button .icon{width:100%;height:100%}.drawer__items{padding-top:15px;border-top:1px solid #dfe3e8}.drawer__items+.drawer__items{margin-top:15px}.drawer__items--nested{margin-bottom:15px;padding-top:0;border-top:0;border-left:1px solid #dfe3e8}.drawer__items--nested .drawer__items--nested{margin-left:1.0625em}.drawer__item{display:block;width:100%;color:#454f59;font-size:1em;font-weight:500;padding-top:0.625em;padding-bottom:0.625em;text-align:left;line-height:1;-webkit-transition:color 300ms;transition:color 300ms}.drawer__item:hover,.drawer__item:focus{color:#000000;font-weight:500}.drawer__item.drawer__item--active{color:#000000;font-weight:500}.drawer__items--nested .drawer__item{margin-left:-1px;padding-left:1.0625em;border-left:3px solid transparent}.drawer__items--nested .drawer__item.drawer__item--active{border-left-color:currentColor}.drawer__items--corporate .drawer__item{color:#919ea9;font-weight:500}.drawer__items--corporate .drawer__item:hover,.drawer__items--corporate .drawer__item:focus{color:#000000;font-weight:500}.drawer__items--corporate .drawer__item.drawer__item--active{color:#000000;font-weight:500}.drawer__items--user .drawer__item{color:#454f59;font-weight:500}.drawer__items--user .drawer__item:hover,.drawer__items--user .drawer__item:focus{color:#000000;font-weight:500}.drawer__items--user .drawer__item.drawer__item--active{color:#000000;font-weight:500}.drawer__item--primary{font-size:1em;font-weight:700;text-transform:uppercase;padding-top:15px;padding-bottom:15px}.drawer__item--primary,.drawer__item--primary a{color:#000000}.drawer__item--primary:hover,.drawer__item--primary:focus{color:#000000;font-weight:700}.drawer__item--primary.drawer__item--active{color:#000000;font-weight:700}.drawer__item--primary .marketing-nav__arrow{vertical-align:20%;margin-left:0.3571428571em}.drawer__item--signup{color:#5c6ac4;border:0;background-color:transparent;padding-left:0;padding-right:0}#PageContainer::before{position:fixed;top:0;left:0;width:100%;height:100%;visibility:hidden;opacity:0;background-color:rgba(0,0,0,0.6);-webkit-transition:visibility 0.4s linear,opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1);transition:visibility 0.4s linear,opacity 0.4s cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translateZ(0);transform:translateZ(0);content:'';z-index:999}.js-drawer-open{overflow:hidden}.js-drawer-open #PageContainer::before{visibility:visible;opacity:1}.signup-modal__content{width:100%}@media screen and (min-width: 67.5em){.signup-modal__content{max-width:50%;margin:0 auto}}.signup-modal__content .marketing-form__button{float:right}body>.signup--hidden{display:none}.subdomain{position:relative}.stateful-form .marketing-input::-ms-clear{display:none}.stateful-form .js-has-error .marketing-input{-webkit-box-shadow:0 0 0 2px #eb644d;box-shadow:0 0 0 2px #eb644d}.stateful-form .js-has-hint .marketing-input{-webkit-box-shadow:0 0 0 2px #b7ecec;box-shadow:0 0 0 2px #b7ecec}.stateful-form .js-is-pending::after{content:'';display:block;width:18px;height:18px;position:absolute;top:50%;left:50%;margin-left:-9px;margin-top:-9px;border-radius:50%;border:3px solid #454f59;border-top-color:transparent;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear;z-index:10;right:1.25em;left:auto;-webkit-animation-duration:0.5s;animation-duration:0.5s}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.stateful-form .marketing-input{position:relative;z-index:1}.stateful-form .js-is-hidden{display:none}.stateful-form .marketing-form__messages{-webkit-transform:translateY(-2px);-ms-transform:translateY(-2px);transform:translateY(-2px);padding-top:2px;font-size:1em;max-height:0;overflow:hidden;display:block}@media screen and (min-width: 46.875em){.stateful-form .marketing-form__messages{-webkit-transition:max-height 300ms;transition:max-height 300ms}}.stateful-form .marketing-form__messages .error{color:#ffffff;display:block;font-size:0.75em;padding:0.4166666667em 1em;position:relative;min-height:2em}.stateful-form .marketing-form__messages .error.hide{display:none}.stateful-form .marketing-form__messages .error a,.stateful-form .marketing-form__messages .error button{color:#ffffff;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.stateful-form .marketing-form__messages .error a:hover,.stateful-form .marketing-form__messages .error a:focus,.stateful-form .marketing-form__messages .error button:hover,.stateful-form .marketing-form__messages .error button:focus{color:#f0f0f0}.stateful-form .marketing-form__messages .error a:focus,.stateful-form .marketing-form__messages .error button:focus{outline:0;background-color:rgba(255,255,255,0.125)}.stateful-form .marketing-form__messages .suggest{color:#000000;display:block;font-size:0.75em;padding:0.4166666667em 1em;position:relative;min-height:2em}.stateful-form .marketing-form__messages .suggest.hide{display:none}.stateful-form .marketing-form__messages .suggest a,.stateful-form .marketing-form__messages .suggest button{color:#000000;text-decoration:underline;-webkit-text-decoration-line:underline;text-decoration-line:underline;-webkit-text-decoration-style:solid;text-decoration-style:solid;-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor;text-decoration-skip-ink:auto;-webkit-transition:color 150ms;transition:color 150ms}.stateful-form .marketing-form__messages .suggest a:hover,.stateful-form .marketing-form__messages .suggest a:focus,.stateful-form .marketing-form__messages .suggest button:hover,.stateful-form .marketing-form__messages .suggest button:focus{color:black}.stateful-form .marketing-form__messages .suggest a:focus,.stateful-form .marketing-form__messages .suggest button:focus{outline:0;background-color:rgba(0,0,0,0.125)}.stateful-form .js-has-error .marketing-form__messages{background-color:#eb644d;-webkit-box-shadow:0 0 0 2px #eb644d;box-shadow:0 0 0 2px #eb644d;border-radius:0 0 5px 5px;max-height:90px}@media screen and (min-width: 46.875em){.stateful-form .js-has-error .marketing-form__messages{-webkit-transition:max-height 300ms;transition:max-height 300ms}}.stateful-form .js-has-hint .marketing-form__messages{background-color:#b7ecec;-webkit-box-shadow:0 0 0 2px #b7ecec;box-shadow:0 0 0 2px #b7ecec;border-radius:0 0 5px 5px;max-height:90px}@media screen and (min-width: 46.875em){.stateful-form .js-has-hint .marketing-form__messages{-webkit-transition:max-height 300ms;transition:max-height 300ms}}.stateful-form .js-is-pending .marketing-input{-webkit-box-shadow:0 0 0 1px #c4cdd5;box-shadow:0 0 0 1px #c4cdd5}.stateful-form .js-is-pending .marketing-form__messages{max-height:0;-webkit-box-shadow:none;box-shadow:none}@media screen and (min-width: 46.875em){.stateful-form .js-is-pending .marketing-form__messages{-webkit-transition:all 300ms;transition:all 300ms}}.page-block{padding:5.625em 0;border-color:#dfe3e8}.page-block--white{background:#ffffff;color:#454f59}.page-block--light{background:#f4f6f8;color:#212b37}.page-block--lowlight{background-color:#30373b;color:#919ea9}.page-block--blue{background-color:#f6fafd;color:#212b37}.page-block--border-top{border-top-width:1px;border-top-style:solid}@media screen and (max-width: 46.8125em){.page-block{padding:3.75em 0}}.page-block--lowlight .section-heading__heading{color:#ffffff}.page-block--lowlight .section-heading__subhead{color:#000000}.page-block--image{background-position:top center;background-repeat:no-repeat;background-size:cover;position:relative}.page-block--image>.page-width{height:100%;z-index:1}.section-block{padding-top:2.8125em;padding-bottom:2.8125em;border-color:#dfe3e8}.section-block--border-top{border-top-width:1px;border-top-style:solid}.section-block--white{background:#ffffff;color:#454f59}.section-block--light{background:#f4f6f8;color:#212b37}.section-block--lowlight{background-color:#30373b;color:#919ea9}.section-block--blue{background-color:#f6fafd;color:#212b37}@media screen and (max-width: 46.8125em){.section-block{padding-top:1.875em;padding-bottom:1.875em}}.page-width .section-block:first-child:not(:only-child){padding-top:0}.page-width .section-block:last-child:not(:only-child){padding-bottom:0}.section{padding:3.75em 0}@media screen and (min-width: 46.875em){.section{padding-top:5.625em;padding-bottom:5.625em}}.section .section:first-child:not(:only-child){padding-top:0}.section .section:last-child:not(:only-child){padding-bottom:0}.section--tight{padding:1.875em 0}@media screen and (min-width: 46.875em){.section--tight{padding-top:2.8125em;padding-bottom:2.8125em}}.section--padding-top-only{padding-bottom:0}.section--padding-bottom-only{padding-top:0}.section--border{border-top:1px solid #dfe3e8}.section--image{background-position:top center;background-repeat:no-repeat;background-size:cover;position:relative}.section-heading{margin-bottom:2.8125em;text-align:center}@media screen and (min-width: 67.5em){.section-heading{margin-bottom:3.75em}}.section-heading--lowlight .section-heading__heading{color:#ffffff}.section-heading--lowlight .section-heading__subhead{color:#000000}.section-heading--lowlight .section-heading__kicker{color:#dfe3e8}.section-heading--tight{margin-bottom:1.5625em}.section-heading--tight .section-heading__heading{margin-bottom:0.25em}.section-heading--tight .section-heading__subhead{margin-bottom:0}.section-heading--tight .section-heading__kicker{margin-bottom:0.75em}.section-heading__subhead{font-weight:400;color:#000000}.section-heading__kicker{font-weight:700;color:#ffffff}.section-heading__kicker.section-heading__kicker--has-icon{display:inline-block;margin-bottom:0;vertical-align:middle}.section-heading__icon-wrapper{margin-bottom:0.625em}.section-heading__icon{width:1.75em;height:1.75em;margin-right:0.625em;vertical-align:middle}@media screen and (min-width: 46.875em){.section-heading--left{text-align:left}}.block{display:block;border-color:#dfe3e8;margin-bottom:2.8125em}.block__icon,.block__image{margin-bottom:0.9375em}.block--padded{padding:30px}.block--padded .block__content:last-child,.block--padded .block__cta:last-child{margin-bottom:0}.block--rounded{border-radius:5px}.block--bordered{border-width:1px;border-style:solid}.block--lowlight .block__icon{fill:#ffffff}.block--lowlight .block__heading{color:#ffffff}.block--lowlight .block__content{color:#dfe3e8}.block--lowlight .block__cta a{color:#ffffff}.block__content{margin-bottom:0.9375em}.marketing-block{display:block;border-color:#dfe3e8}.marketing-block--white{background:#ffffff;color:#454f59}.marketing-block--light{background:#f4f6f8;color:#212b37}.marketing-block--lowlight{background-color:#30373b;color:#919ea9}.marketing-block--blue{background-color:#f6fafd;color:#212b37}@media screen and (max-width: 46.8125em){.marketing-block{margin-bottom:2.8125em;width:100%}}.marketing-block .icon{margin-bottom:0.75em}.marketing-block--bordered{border-width:1px;border-style:solid}.marketing-block--light{border-width:1px;border-style:solid}.marketing-block--blue{border:1px solid #479ccf}.marketing-block--padded{padding:1.875em}.marketing-block--rounded{border-radius:5px}.marketing-block__content p:last-child{margin-bottom:0}.marketing-block__img img{width:100%}.bullet{display:table;margin-bottom:1.875em;position:relative}.bullet__icon{padding-right:15px;display:table-cell;vertical-align:top}.bullet__content{padding-top:8px;margin-bottom:0;display:table-cell;vertical-align:top;width:100%}.marketing-bullet-list{margin-bottom:1.875em;padding-top:1.875em}.marketing-bullet-list:last-child{margin-bottom:-1.875em}.marketing-bullet{list-style:none;margin-bottom:1.875em;position:relative}.marketing-bullet::after{content:'';display:table;clear:both}.marketing-bullet .icon{display:block;margin-bottom:0;float:left;margin-right:15px}.marketing-bullet--without-heading .marketing-bullet__content{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:300;position:absolute;left:75px;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%);font-size:1.125em;line-height:1}.marketing-bullet__content-wrapper{overflow:hidden;display:block;float:none;position:static}@media screen and (max-width: 46.8125em){.marketing-bullet__content-wrapper{margin-bottom:0;text-align:left;width:inherit}}@media screen and (max-width: 46.8125em){.media__center--mobile{text-align:center}}@media screen and (min-width: 67.5em){.media__offset{margin-top:2.8125em}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.media__offset{margin-top:0.9375em}}@media screen and (max-width: 46.8125em){.media__image{text-align:center}}@media screen and (max-width: 46.8125em){.media__last{margin-top:1.875em}}@media screen and (min-width: 46.875em){.media--flex-centered{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.media--flex-centered .media__right{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.media--flex-centered .media__offset{margin-top:0}}@media screen and (min-width: 46.875em){.media__right{float:right;margin-right:0}}@media screen and (min-width: 46.875em){.media__image--wide-left img,.media__image--wide-left .lazyload-image{float:right}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.media__image--wide-left img,.media__image--wide-left .lazyload-image{max-width:none}}@media screen and (max-width: 46.8125em){.media__image--wide-left--mobile img{margin-left:-30px}}@media screen and (min-width: 46.875em){.media__image--wide-right img,.media__image--wide-right .lazyload-image{float:left}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.media__image--wide-right img,.media__image--wide-right .lazyload-image{max-width:none}}@media screen and (min-width: 46.875em){.media__image--wide-left .lazyload-image,.media__image--wide-right .lazyload-image{overflow:visible}}@media screen and (max-width: 46.8125em){.media__image--wide-right--mobile{text-align:right}.media__image--wide-right--mobile img{margin-right:-30px}}@media screen and (min-width: 46.875em){.media__image--bottom img,.media__image--bottom .lazyload-image{margin-bottom:-5.625em}}@media screen and (min-width: 46.875em){.media__image--bottom .lazyload-image img{margin-bottom:0}}@media screen and (min-width: 46.875em){.media__image--top img,.media__image--top .lazyload-image{margin-top:-5.625em}}@media screen and (min-width: 46.875em){.media__image--top .lazyload-image img{margin-top:0}}@media screen and (min-width: 67.5em){.media__image--top--desktop img,.media__image--top--desktop .lazyload-image{margin-top:-5.625em}}@media screen and (min-width: 67.5em){.media__image--top--desktop .lazyload-image img{margin-top:0}}@media screen and (min-width: 67.5em){.media__image--bottom--desktop img{margin-bottom:-5.625em}}@media screen and (min-width: 67.5em){.media__image--bottom--desktop img,.media__image--bottom--desktop .lazyload-image{margin-bottom:-5.625em}}@media screen and (min-width: 67.5em){.media__image--bottom--desktop .lazyload-image img{margin-bottom:0}}@media screen and (max-width: 46.8125em){.media__image--bottom--mobile img,.media__image--bottom--mobile .lazyload-image{margin-bottom:-3.75em}}@media screen and (max-width: 46.8125em){.media__image--bottom--mobile .lazyload-image img{margin-bottom:0}}@media screen and (min-width: 46.875em){.media__image--right-tight{margin-left:-15em}}@media screen and (min-width: 67.5em){.media__image--overflow img{max-width:none}}.lazyload-image{-webkit-box-sizing:content-box;box-sizing:content-box;display:block;overflow:hidden;position:relative;width:100%;margin:auto}.lazyload-image img{display:block}.lazyload-image .lazyload-image__placeholder{display:block;width:100%;height:0}.lazyload{display:block;height:0;overflow:hidden}.flash-container{position:relative}.flash-container+.flash-container{margin-top:1.875em}.flash{padding:0.9375em 3.0625em 0.9375em 3.5em;min-height:3.75em;border:0.125em solid;border-radius:5px}.flash h1,.flash h2,.flash h3,.flash h4,.flash h5,.flash h6,.flash .long-form-content li::before{color:currentColor}.flash--notice,.flash--info{background-color:#f4f6f8;border-color:#dfe3e8;color:#454f59}.flash--notice,.flash--notice .long-form-content,.flash--info,.flash--info .long-form-content{color:#454f59}.flash--error,.flash--alert{background-color:rgba(235,100,77,0.05)}.flash--error,.flash--error .long-form-content,.flash--alert,.flash--alert .long-form-content{color:#eb644d}.flash--success{background-color:rgba(88,180,75,0.05);border-color:#58b44b}.flash--success,.flash--success .long-form-content{color:#58b44b}.icon--flash{position:absolute;top:0.9375em;left:0.9375em;width:1.625em;height:1.625em;fill:currentColor}.flash__close{position:absolute;top:0;right:0;padding:0.9375em;opacity:0.8;-webkit-transition:opacity 300ms ease-in-out;transition:opacity 300ms ease-in-out}.flash__close svg{width:0.9375em;height:0.9375em;fill:currentColor}.flash__close:hover,.flash__close:focus{opacity:1}.flash__close:active{opacity:0.8}.flash__content.long-form-content{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:500;margin:0}.flash__content.long-form-content .heading{margin-top:-0.125em}.flash__content.long-form-content>*:last-child{margin-bottom:0}@media screen and (max-width: 46.8125em){.hero{text-align:center}}.hero .hero__inner{padding-top:10%;padding-bottom:10%}.hero .hero__image{width:100%;height:auto}.spot-image--small{width:60px}.spot-image--medium{width:85px}.spot-image--large{width:120px}.cookies-notice{z-index:1000;position:fixed;right:0;bottom:0;left:0;-webkit-transform:translateY(100%);-ms-transform:translateY(100%);transform:translateY(100%);padding:15px 0;background-color:#000000;opacity:0;visibility:hidden;-webkit-transition:all 300ms ease-in-out;transition:all 300ms ease-in-out;-webkit-text-size-adjust:100%}.js-is-loaded .cookies-notice.js-is-active{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0);opacity:1;visibility:visible}@media screen and (min-width: 46.875em){.cookies-notice{padding-top:20px;padding-bottom:20px}}.cookies-notice__body{padding-right:15px;font-size:0.875em;line-height:1.5}@media screen and (max-width: 46.8125em){.cookies-notice__body{margin-bottom:15px}}@media screen and (min-width: 46.875em){.cookies-notice__body{float:left;width:80%;font-size:0.8125em}}.cookies-notice__body,.cookies-notice__body a{color:#ffffff}@media screen and (max-width: 46.8125em){.cookies-notice__cta{float:right;font-size:0.875em}}@media screen and (min-width: 46.875em){.cookies-notice__cta{float:left;width:20%;text-align:right}}.background-video,.background-video--fallback{opacity:0;visibility:hidden;z-index:-1;position:absolute;bottom:0;left:50%;min-height:100%;min-width:100%;max-width:none;overflow:hidden;-webkit-transition:opacity 1s ease-in;transition:opacity 1s ease-in;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}@media screen and (max-width: 46.8125em){.background-video,.background-video--fallback{min-width:0;min-height:0;height:100%;opacity:1}}.background-video.js-is-active,.background-video--fallback.js-is-active{opacity:1;visibility:visible;z-index:0}.inline-video,.inline-video--fallback{display:block;max-width:100%;height:auto}.responsive-video-wrapper{position:relative;height:0;padding-top:56.25%}.responsive-video-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%}.icon-caret-right{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%22-242.1%20245.6%206.6%2010.3%22%3E%3Cpath%20d=%22M-235.6%20250.7l-5.1%205.2-1.4-1.4%203.7-3.8-3.7-3.7%201.4-1.4%22/%3E%3C/svg%3E");background-repeat:no-repeat}.icon-caret-left{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%22-189.8%20245.6%20499.8%20792%22%3E%3Cpath%20d=%22M202.3%20245.6L310%20353.3%2025.5%20637.8%20310%20929.9l-107.7%20107.7-392.1-399.8%22/%3E%3C/svg%3E");background-repeat:no-repeat}.paginated-carousel{position:relative}.paginated-carousel .carousel-item{position:relative}@media screen and (max-width: 46.8125em){.paginated-carousel .carousel-item{position:absolute;top:0;display:none;float:none;width:auto;margin-right:0;opacity:0;-webkit-transform:translateX(50px);-ms-transform:translateX(50px);transform:translateX(50px);-webkit-transition:all 300ms ease;transition:all 300ms ease}.paginated-carousel .carousel-item.js-is-active{position:static;display:block;opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.paginated-carousel .carousel-nav{opacity:0;-webkit-transition:opacity 300ms ease;transition:opacity 300ms ease}.js-is-loaded .paginated-carousel .carousel-nav{opacity:1}.paginated-carousel .carousel-nav-items{text-align:center}.paginated-carousel .carousel-nav-item{width:0.8125em;height:0.8125em;margin:0 0.25em;line-height:1.25em;vertical-align:middle;background-color:#919ea9;border-radius:50%}.paginated-carousel .carousel-nav-item.js-is-active{background:#000000}.paginated-carousel .carousel-arrow-left,.paginated-carousel .carousel-arrow-right{position:absolute;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.paginated-carousel .carousel-arrow-left{left:0}.paginated-carousel .carousel-arrow-right{right:0}.inline-cta__heading{font-weight:400;color:#454f59}@media screen and (min-width: 46.875em){.inline-cta__heading{display:inline-block}}@media screen and (min-width: 46.875em){.inline-cta__button{margin-left:30px}}@media screen and (min-width: 46.875em){.marketing-input-button-pair__input,.marketing-input-button-pair__button{float:left}}@media screen and (max-width: 46.8125em){.marketing-input-wrapper .marketing-input-button-pair__input{margin-bottom:15px}}@media screen and (min-width: 46.875em){.marketing-input-button-pair__input{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;margin-right:10px}}.marketing-input-button-pair__button{-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}@media screen and (max-width: 46.8125em){.marketing-input-button-pair__button{width:100%}}.marketing-input-button__field-wrapper::after{content:'';display:table;clear:both}@media screen and (min-width: 46.875em){.marketing-input-button__field-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}@media screen and (min-width: 46.875em){.js-is-sticky-init .sticky-menu-content{float:right}}.js-is-sticky-container .sticky-menu{position:fixed;top:0}.js-is-abs-container .sticky-menu{position:absolute;bottom:0;top:auto}@media screen and (min-width: 67.5em){.page--has-secondary-nav .js-is-abs-container .sticky-menu{top:auto}}.js-is-abs-container .in-page-menu{margin-bottom:0}.in-page-menu{list-style:none;margin-bottom:30px}.in-page-menu a{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ShopifySans, Helvetica, Arial, sans-serif;font-weight:400;color:#454f59;font-size:1em;display:block;-webkit-transition:all 150ms;transition:all 150ms}.in-page-menu a:hover,.in-page-menu a:focus{color:#000000}.in-page-menu a.js-is-active{color:#000000;border-color:#000000}.in-page-menu--vertical{border-left:1px solid #dfe3e8}.in-page-menu--vertical a{margin-left:-1px;border-left:3px solid transparent;padding:0.625em 0 0.625em 1.0625em}.in-page-menu--horizontal a{border-bottom:2px solid transparent;margin-right:0.9375em;-webkit-transition-property:border, color;transition-property:border, color;-webkit-transition-duration:300ms;transition-duration:300ms;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out}.in-page-menu--horizontal li{display:inline-block}@media screen and (max-width: 46.8125em){.accordion-item--mobile.js-is-active .accordion-link::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2044%2044%22%3E%3Cpath%20d=%22M4%2021.4h35.8v4.3H4z%22/%3E%3C/svg%3E")}.accordion-item--mobile .accordion-link{position:relative;cursor:pointer;display:block;width:100%;text-align:left;min-height:1.25em;padding-right:1.25em}.accordion-item--mobile .accordion-link::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20viewBox=%220%200%2044%2044%22%3E%3Cpath%20d=%22M4%2020.4h35.8v4.3H4z%22/%3E%3Cpath%20d=%22M19.7%204.7H24v35.8h-4.3z%22/%3E%3C/svg%3E");content:'';position:absolute;right:0;top:1px;width:1.25em;height:1.25em}.accordion-item--mobile .accordion-content{display:none}}.accordion-item .accordion-content{display:none}.js-modal-open #SiteNavContainer,.js-modal-open #PageContainer{display:none}.modal-container{display:none;min-height:100vh;left:0;opacity:0;padding:0 0 65px;top:0;width:100%;text-align:center;-webkit-overflow-scrolling:touch;z-index:-1;-webkit-transition:opacity 150ms;transition:opacity 150ms}@media screen and (max-width: 46.8125em){.modal-container{padding:0 0 30px}}.modal-container.is-transitioning{z-index:1000;position:fixed}.modal-container.js-is-active{display:block;opacity:1;visibility:visible;z-index:1000}.modal-container button:-moz-focusring,.modal-container a:-moz-focusring{outline:solid #ffffff 2px}.modal-container--lowlight{background:#2a2c2e;color:#ffffff}.modal-container--highlight{background:#ffffff;color:#2a2c2e}.modal__header{position:fixed;top:0;width:100%;z-index:1}.modal__controls{text-align:right}.modal__close{margin:0.625em -0.625em 0 0;padding:0.625em;opacity:0.7;-webkit-transition:opacity 300ms ease;transition:opacity 300ms ease}.modal__close:hover{opacity:1}.modal__close .icon-close-white{height:16px;width:16px}.modal{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000;padding-top:130px;position:relative;text-align:left;-webkit-transition:all 150ms ease-out;transition:all 150ms ease-out;-webkit-transform:scale(0.85);-ms-transform:scale(0.85);transform:scale(0.85)}@media screen and (max-width: 46.8125em){.modal{padding:60px 30px 0}}.js-is-active .modal{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.modal:focus{outline:none}.modal__heading{color:inherit}.popover-wrapper{position:relative;cursor:pointer;display:inline-block}.popover-wrapper.js-is-active .popover{display:block;opacity:1}.popover{position:absolute;z-index:1001;display:none;opacity:0;width:13.75em;text-align:left;background-clip:padding-box;-webkit-transition:opacity 300ms;transition:opacity 300ms}@media screen and (max-width: 46.8125em){.popover{-webkit-transform:translate(-50%, -100%);-ms-transform:translate(-50%, -100%);transform:translate(-50%, -100%);top:-10px;left:50%}}.popover::after{content:'';position:absolute;display:block;width:0;height:0;border:transparent solid 10px}@media screen and (max-width: 46.8125em){.popover::after{left:50%;border-bottom-width:0;margin-left:-10px;border-top-color:#ffffff}}.popover::before{content:'';position:absolute;display:block;width:0;height:0;border:transparent solid 12px;z-index:-1}@media screen and (max-width: 46.8125em){.popover::before{left:50%;border-bottom-width:0;margin-left:-9px}}@media screen and (min-width: 46.875em){.popover--top{-webkit-transform:translate(-50%, -100%);-ms-transform:translate(-50%, -100%);transform:translate(-50%, -100%);top:-10px;left:50%}.popover--top::after,.popover--top::before{left:50%;border-bottom-width:0}.popover--top::after{border-top-color:#ffffff;margin-left:-10px}.popover--top::before{border-top-color:rgba(69,79,89,0.3);bottom:-11px;margin-left:-12px}}@media screen and (min-width: 46.875em){.popover--right{left:100%;top:50%;margin-left:20px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.popover--right::after,.popover--right::before{top:50%;border-left-width:0}.popover--right::after{border-right-color:#ffffff;bottom:-10px;left:-10px;margin-top:-10px}.popover--right::before{border-right-color:rgba(69,79,89,0.3);bottom:-11px;left:-11px;margin-top:-12px}}@media screen and (min-width: 46.875em){.popover--left{right:100%;top:50%;margin-right:20px;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);transform:translateY(-50%)}.popover--left::after,.popover--left::before{top:50%;border-right-width:0}.popover--left::after{border-left-color:#ffffff;right:-10px;bottom:-10px;margin-top:-10px}.popover--left::before{border-left-color:rgba(69,79,89,0.3);right:-11px;bottom:-11px;margin-top:-12px}}@media screen and (min-width: 46.875em){.popover--bottom{left:50%;margin-top:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}.popover--bottom::after,.popover--bottom::before{left:50%;border-top-width:0}.popover--bottom::after{border-bottom-color:#ffffff;top:-10px;margin-left:-10px}.popover--bottom::before{border-bottom-color:rgba(69,79,89,0.3);top:-11px;margin-left:-12px}}@media screen and (max-width: 46.8125em){.popover-wrapper--dark .popover::after{border-top-color:rgba(48,55,59,0.95)}}@media screen and (min-width: 46.875em){.popover-wrapper--dark .popover--top::after{border-top-color:rgba(48,55,59,0.95)}}@media screen and (min-width: 46.875em){.popover-wrapper--dark .popover--right::after{border-right-color:rgba(48,55,59,0.95)}}@media screen and (min-width: 46.875em){.popover-wrapper--dark .popover--bottom::after{border-bottom-color:rgba(48,55,59,0.95)}}@media screen and (min-width: 46.875em){.popover-wrapper--dark .popover--left::after{border-left-color:rgba(48,55,59,0.95)}}.popover-wrapper--dark .popover-content{background-color:rgba(48,55,59,0.95);color:#ffffff}.popover-content{background-color:#ffffff;padding:0.5em 0.625em;border-radius:5px;-webkit-box-shadow:0 0 0.125em 0.0625em rgba(69,79,89,0.4);box-shadow:0 0 0.125em 0.0625em rgba(69,79,89,0.4)}.popover-dropdown .popover-content{padding:0.9375em 1.875em}.popover-dropdown .popover-content li{display:block;line-height:1em}.popover-dropdown .popover-content a,.popover-dropdown .popover-content button{display:block;position:relative;color:#454f59;padding:0.625em 0}.popover-dropdown .popover-content a:hover,.popover-dropdown .popover-content a:focus,.popover-dropdown .popover-content a.active,.popover-dropdown .popover-content button:hover,.popover-dropdown .popover-content button:focus,.popover-dropdown .popover-content button.active{color:#000000}.popover-dropdown .popover__arrow::after{position:absolute;right:0;top:50%;margin-top:-0.1875em;width:10px;height:0.75em;content:'';background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20baseProfile=%22tiny%22%20viewBox=%220%200%2010.289%206.563%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23c4cdd5%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M5.212%206.563L0%201.423%201.404%200l3.788%203.735L8.865.01l1.424%201.404%22/%3E%3C/svg%3E");background-size:100% auto;background-repeat:no-repeat}.popover-dropdown.js-is-active .popover__arrow{color:#ffffff}.popover-dropdown.js-is-active .popover__arrow::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20baseProfile=%22tiny%22%20viewBox=%220%200%2010.289%206.563%22%3E%3Cstyle%20type=%22text/css%22%3Ecircle,%20ellipse,%20line,%20path,%20polygon,%20polyline,%20rect,%20text%20%7B%20fill:%20%23ffffff%20!important;%20%7D%3C/style%3E%3Cpath%20d=%22M5.212%206.563L0%201.423%201.404%200l3.788%203.735L8.865.01l1.424%201.404%22/%3E%3C/svg%3E")}.js-window-loading{opacity:0;-webkit-transition:opacity 300ms ease-in-out;transition:opacity 300ms ease-in-out}.js-is-loaded .js-window-loading{opacity:1}.responsive-svg{height:0;position:relative}.responsive-svg svg{position:absolute;top:0;right:0;width:100%;height:100%}.display--mobile,.display--tablet,.display--desktop{display:none !important}@media screen and (min-width: 67.5em){.display--desktop{display:block !important}.hide--desktop{display:none !important}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.display--tablet{display:block !important}.hide--tablet{display:none !important}}@media screen and (max-width: 46.8125em){.display--mobile{display:block !important}.hide--mobile{display:none !important}}.gutter-bottom{margin-bottom:30px}.gutter-bottom--reset{margin-bottom:0 !important}.gutter-bottom--half{margin-bottom:15px}@media screen and (max-width: 46.8125em){.gutter-bottom--reset--mobile{margin-bottom:0 !important}.gutter-bottom--mobile{margin-bottom:30px}}@media screen and (max-width: 67.4375em){.gutter-bottom--tablet-down{margin-bottom:30px}}.text-center{text-align:center}@media screen and (max-width: 46.8125em){.text-center--mobile{text-align:center}}@media screen and (min-width: 46.875em){.text-center--tablet-up{text-align:center}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.text-center--tablet-only{text-align:center}}@media screen and (max-width: 67.4375em){.text-center--tablet-down{text-align:center}}@media screen and (min-width: 67.5em){.text-center--desktop-up{text-align:center}}.text-left{text-align:left}@media screen and (max-width: 46.8125em){.text-left--mobile{text-align:left}}@media screen and (min-width: 46.875em){.text-left--tablet-up{text-align:left}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.text-left--tablet-only{text-align:left}}@media screen and (max-width: 67.4375em){.text-left--tablet-down{text-align:left}}@media screen and (min-width: 67.5em){.text-left--desktop-up{text-align:left}}.text-right{text-align:right}@media screen and (max-width: 46.8125em){.text-right--mobile{text-align:right}}@media screen and (min-width: 46.875em){.text-right--tablet-up{text-align:right}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.text-right--tablet-only{text-align:right}}@media screen and (max-width: 67.4375em){.text-right--tablet-down{text-align:right}}@media screen and (min-width: 67.5em){.text-right--desktop-up{text-align:right}}.color-primary{color:#5c6ac4}.background-primary{background-color:#5c6ac4}.background-light{background:#f4f6f8}.background-lowlight{background:#000639}.background-grey-darkest{background-color:#eaeff3}.color-grey-darkest{color:#eaeff3}.background-grey-lightest{background-color:#dfe3e8}.color-grey-lightest{color:#dfe3e8}.background-grey-lighter{background-color:#c4cdd5}.color-grey-lighter{color:#c4cdd5}.background-grey-light{background-color:#919ea9}.color-grey-light{color:#919ea9}.background-grey-lightish{background-color:#64737f}.color-grey-lightish{color:#64737f}.background-grey{background-color:#454f59}.color-grey{color:#454f59}.background-grey-dark{background-color:#212b37}.color-grey-dark{color:#212b37}.background-indigo-lightest{background-color:#f4f5fa}.color-indigo-lightest{color:#f4f5fa}.background-indigo-light{background-color:#b3bcf5}.color-indigo-light{color:#b3bcf5}.background-indigo{background-color:#5c6ac4}.color-indigo{color:#5c6ac4}.background-indigo-dark{background-color:#202e78}.background-indigo-darkest{background-color:#000639}.color-indigo-darkest{color:#000639}.background-salmon-lightest{background-color:#fae1e1}.color-salmon-lightest{color:#fae1e1}.background-salmon-light{background-color:#fabcbb}.color-salmon-light{color:#fabcbb}.background-salmon{background-color:#fb8b8a}.color-salmon{color:#fb8b8a}.background-salmon-dark{background-color:#a65c5b}.color-salmon-dark{color:#a65c5b}.background-salmon-darkest{background-color:#452626}.color-salmon-darkest{color:#452626}.background-teal-lightest{background-color:#e0f5f5}.color-teal-lightest{color:#e0f5f5}.background-teal-light{background-color:#b7ecec}.color-teal-light{color:#b7ecec}.background-teal{background-color:#47c1bf}.color-teal{color:#47c1bf}.background-teal-dark{background-color:#00848e}.color-teal-dark{color:#00848e}.background-teal-darkest{background-color:#003135}.color-teal-darkest{color:#003135}.background-yellow-lightest{background-color:#fdeed1}.color-yellow-lightest{color:#fdeed1}.background-yellow-light{background-color:#ffe6b3}.color-yellow-light{color:#ffe6b3}.background-yellow{background-color:#fdd991}.color-yellow{color:#fdd991}.background-yellow-dark{background-color:#cd9157}.color-yellow-dark{color:#cd9157}.background-yellow-darkest{background-color:#6f451f}.color-yellow-darkest{color:#6f451f}.background-ink-lightest{background-color:#919eab}.color-ink-lightest{color:#919eab}.background-ink-lighter{background-color:#ffffff}.color-ink-lighter{color:#ffffff}.background-ink-light{background-color:#454f5b}.color-ink-light{color:#454f5b}.background-ink{background-color:#212b35}.color-ink{color:#212b35}.background-sky-lighter{background-color:#f9fafb}.color-sky-lighter{color:#f9fafb}.background-sky-light{background-color:#f4f6f8}.color-sky-light{color:#f4f6f8}.background-sky{background-color:#dfe3e8}.color-sky{color:#dfe3e8}.background-sky-dark{background-color:#c4cdd5}.color-sky-dark{color:#c4cdd5}.background-black{background-color:#000000}.color-black{color:#000000}.background-white{background-color:#ffffff}.color-white{color:#ffffff}.background-green{background-color:#58b44b}.color-green{color:#58b44b}.background-red{background-color:#eb644d}.color-red{color:#eb644d}.background-facebook{background-color:#385a98}.color-facebook{color:#385a98}.background-twitter{background-color:#55acee}.color-twitter{color:#55acee}.background-linkedin{background-color:#0976b4}.color-linkedin{color:#0976b4}.background-pinterest{background-color:#bd081c}.color-pinterest{color:#bd081c}.background-blue-lightest{background-color:#f6fafd}.color-blue-lightest{color:#f6fafd}.background-blue-lighter{background-color:#00baff}.color-blue-lighter{color:#00baff}.background-blue-light{background-color:#479ccf}.color-blue-light{color:#479ccf}.background-blue{background-color:#368aa9}.color-blue{color:#368aa9}.background-blue-dark{background-color:#206882}.color-blue-dark{color:#206882}.background-slate{background-color:#30373b}.color-slate{color:#30373b}.background-slate-dark{background-color:#2a2c2e}.color-slate-dark{color:#2a2c2e}.background-slate-darkest{background-color:#222222}.color-slate-darkest{color:#222222}.marketing-nav__primary{border-bottom:0}@media screen and (min-width: 67.5em){.marketing-nav__primary{background-color:transparent}}.marketing-nav__logo__academy{width:14.75em;height:2em;background-image:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3cdefs%3e%3cpath id='a' d='M.344.392h14.709v19.82H.344z'/%3e%3cpath id='c' d='M0 .163h19.26V31.79H0z'/%3e%3c/defs%3e%3cg fill='none' fill-rule='evenodd'%3e%3cpath d='M39.592 18.452c-.984-.53-1.49-.975-1.49-1.589 0-.78.702-1.282 1.8-1.282 1.277 0 2.418.53 2.418.53l.9-2.732s-.828-.642-3.262-.642c-3.39 0-5.738 1.924-5.738 4.628 0 1.533 1.097 2.704 2.56 3.54 1.18.67 1.603 1.144 1.603 1.84 0 .725-.591 1.31-1.688 1.31-1.634 0-3.178-.836-3.178-.836l-.956 2.732s1.426.948 3.825.948c3.488 0 5.99-1.7 5.99-4.767 0-1.645-1.265-2.815-2.784-3.68M53.485 12.71c-1.715 0-3.065.808-4.106 2.035l-.056-.028 1.49-7.722h-3.88l-3.77 19.653h3.882l1.294-6.718c.506-2.537 1.828-4.098 3.065-4.098.872 0 1.21.585 1.21 1.422 0 .53-.056 1.17-.17 1.7l-1.462 7.694h3.882l1.518-7.945c.169-.836.282-1.84.282-2.509 0-2.174-1.154-3.484-3.179-3.484M63.526 23.972c-1.322 0-1.884-1.115-1.884-2.51 0-2.201 1.153-5.798 3.262-5.798 1.378 0 1.828 1.171 1.828 2.315 0 2.369-1.153 5.993-3.206 5.993m1.913-11.262c-4.67 0-7.763 4.181-7.763 8.837 0 2.982 1.856 5.38 5.344 5.38 4.584 0 7.678-4.07 7.678-8.837 0-2.76-1.632-5.38-5.26-5.38M76.913 24.028c-1.007 0-1.603-.558-1.603-.558l.647-3.596c.45-2.398 1.716-3.986 3.066-3.986 1.181 0 1.546 1.087 1.546 2.118 0 2.481-1.49 6.022-3.656 6.022m3.713-11.318c-2.62 0-4.106 2.286-4.106 2.286h-.056l.224-2.063h-3.43a81.247 81.247 0 0 1-.788 5.101l-2.7 14.078h3.881l1.069-5.687h.084s.797.502 2.278.502c4.557 0 7.538-4.628 7.538-9.311 0-2.592-1.154-4.906-3.994-4.906M90.16 7.19a2.205 2.205 0 0 0-2.222 2.23c0 1.143.732 1.924 1.829 1.924h.056c1.21 0 2.25-.809 2.278-2.23 0-1.115-.76-1.924-1.94-1.924M84.732 26.648h3.881l2.644-13.632h-3.91zM101.128 12.989h-2.7l.141-.642c.225-1.31 1.013-2.48 2.307-2.48.69 0 1.237.194 1.237.194l.76-3.01s-.676-.335-2.11-.335c-1.378 0-2.756.39-3.797 1.282-1.322 1.115-1.94 2.732-2.25 4.35l-.113.64h-1.799l-.563 2.9h1.8l-2.053 10.76h3.881l2.053-10.76h2.672l.534-2.9z' fill='%23000'/%3e%3cg transform='translate(99.463 12.624)'%3e%3cmask id='b' fill='%23fff'%3e%3cuse xlink:href='%23a'/%3e%3c/mask%3e%3cpath d='M11.003.392s-2.426 6.06-3.515 9.367h-.056C7.357 8.694 6.475.392 6.475.392H2.397l2.335 12.517c.056.279.028.446-.085.64-.45.865-1.21 1.702-2.11 2.315-.73.53-1.546.864-2.193 1.087l1.069 3.262c.787-.168 2.419-.809 3.797-2.091 1.772-1.645 3.403-4.182 5.09-7.639L15.053.392h-4.05z' fill='%23000' mask='url(%23b)'/%3e%3c/g%3e%3cpath d='M18.479 32.024l9.607-2.07S24.621 6.736 24.599 6.577a.308.308 0 0 0-.278-.258c-.116-.01-2.571-.189-2.571-.189s-1.705-1.678-1.892-1.864a.41.41 0 0 0-.163-.095l-1.216 27.853z' fill='%23000'/%3e%3cg transform='translate(0 .25)'%3e%3cmask id='d' fill='%23fff'%3e%3cuse xlink:href='%23c'/%3e%3c/mask%3e%3cpath d='M15.293 2.206c.911.114 1.518 1.142 1.909 2.324l-1.541.473v-.33c0-1.01-.14-1.822-.368-2.467zM13.65 15.064s-1.067-.564-2.374-.564c-1.916 0-2.012 1.192-2.012 1.493 0 1.639 4.31 2.266 4.31 6.105 0 3.02-1.933 4.965-4.539 4.965-3.127 0-4.726-1.93-4.726-1.93l.837-2.74S6.79 23.79 8.176 23.79c.906 0 1.275-.708 1.275-1.224 0-2.138-3.536-2.233-3.536-5.746 0-2.957 2.141-5.818 6.463-5.818 1.665 0 2.488.473 2.488.473l-1.217 3.588zm-.71-13.806c.178 0 .357.06.528.177-1.32.616-2.735 2.167-3.333 5.263l-2.515.773c.7-2.362 2.361-6.213 5.32-6.213zm1.642 3.899v.177l-3.184.977c.613-2.345 1.762-3.477 2.766-3.905.254.63.418 1.533.418 2.751zm4.678-1.25a1.014 1.014 0 0 0-.096.022l-.954.292c-.57-1.624-1.575-3.117-3.343-3.117-.05 0-.1.002-.15.005-.503-.66-1.126-.946-1.664-.946-4.119 0-6.087 5.105-6.704 7.698l-2.883.886c-.893.278-.921.306-1.039 1.14C2.338 10.52 0 28.44 0 28.44l18.041 3.35L19.26 3.908z' fill='%23000' mask='url(%23d)'/%3e%3c/g%3e%3cpath d='M127.408 14.14c-.311-.112-.793-.197-1.644-.197-3.913 0-6.975 4.329-7.003 8.573-.029 1.77.481 3.344 2.325 3.344 2.211 0 4.706-3.289 5.359-6.774l.963-4.945zm-1.814 12.506c-.029-.814.141-2.107.34-3.625h-.057c-1.559 2.98-3.289 3.907-5.075 3.907-2.07 0-3.317-1.687-3.317-4.103 0-4.61 3.317-9.95 8.59-9.95.965 0 2.042.141 2.75.394l-1.445 7.25c-.482 2.53-.652 4.694-.595 6.127h-1.191zM137.588 26.169c-.567.281-1.786.73-3.43.73-3.29 0-4.452-2.388-4.452-4.946 0-4.16 2.864-9.077 7.542-9.077 1.077 0 2.07.337 2.353.562l-.425 1.04A4.937 4.937 0 0 0 137.05 14c-3.8 0-6.068 4.328-6.068 7.813 0 2.332.964 4.019 3.43 4.019 1.191 0 2.212-.394 2.892-.731l.284 1.068zM149.526 14.14c-.312-.112-.794-.197-1.645-.197-3.913 0-6.975 4.329-7.003 8.573-.029 1.77.482 3.344 2.325 3.344 2.211 0 4.707-3.289 5.359-6.774l.964-4.945zm-1.815 12.506c-.028-.814.142-2.107.34-3.625h-.057c-1.559 2.98-3.288 3.907-5.075 3.907-2.07 0-3.317-1.687-3.317-4.103 0-4.61 3.317-9.95 8.591-9.95.964 0 2.042.141 2.75.394l-1.445 7.25c-.483 2.53-.653 4.694-.596 6.127h-1.19zM161.974 14.618c-.482-.393-1.248-.675-2.297-.675-3.573 0-6.238 4.413-6.238 8.291 0 1.687.454 3.626 2.61 3.626 1.87 0 4.252-2.193 4.876-5.565l1.049-5.677zm2.722-7.785L161.69 22.6c-.227 1.264-.482 2.894-.539 4.046h-1.162l.397-2.754h-.057c-1.077 1.827-2.665 3.036-4.621 3.036-2.439 0-3.544-2.109-3.544-4.553 0-4.75 3.289-9.5 7.683-9.5.907 0 1.872.225 2.41.563l1.22-6.605h1.219zM173.373 15.855c0-1.237-.85-1.911-2.126-1.911-2.099 0-3.97 2.248-4.82 5.17 3.544.03 6.946-.561 6.946-3.231v-.028zm-.539 10.033c-.709.478-2.013 1.011-3.714 1.011-3.176 0-4.282-2.473-4.282-5.058 0-3.878 2.75-8.965 6.635-8.965 2.24 0 3.176 1.433 3.176 2.95 0 3.43-3.97 4.385-8.42 4.357-.143.618-.171 2.388.112 3.372.483 1.518 1.531 2.277 2.977 2.277 1.503 0 2.524-.534 3.147-.9l.37.956zM175.358 26.647l1.787-9.528c.34-1.601.51-2.923.623-3.962h1.134l-.368 2.614h.057c1.247-1.94 2.835-2.895 4.451-2.895 1.872 0 2.779 1.265 2.864 3.063 1.19-2.023 2.807-3.035 4.678-3.063 1.333 0 2.949.927 2.949 3.203 0 .675-.085 1.462-.227 2.277l-1.588 8.29H190.5l1.587-8.318c.114-.562.2-1.265.2-1.94 0-1.49-.568-2.416-2.128-2.416-1.814 0-4.025 2.107-4.593 5.143l-1.417 7.532h-1.22l1.617-8.46a8.426 8.426 0 0 0 .198-1.855c0-1.18-.34-2.36-2.155-2.36-1.758 0-4.11 2.445-4.621 5.283l-1.39 7.392h-1.219zM197.05 13.157l1.361 8.15c.283 1.518.425 2.445.567 3.682h.057c.397-.984.879-2.024 1.53-3.401l3.885-8.431h1.304L200.68 23.92c-1.219 2.641-2.495 5.03-4.366 6.8-1.276 1.265-2.552 1.828-3.204 1.996l-.368-1.068c.538-.225 1.53-.646 2.466-1.434.907-.73 2.013-2.079 2.75-3.54.142-.253.114-.422.086-.675l-2.24-12.843h1.247z' fill='%23000'/%3e%3c/g%3e%3c/svg%3e")}.drawer{display:initial;visibility:visible}.mobile-nav__overlay{display:none}.js-drawer-open .mobile-nav__overlay{content:'';position:absolute;left:0;top:0;display:block;width:100%;height:100vh;z-index:999;background-color:rgba(0,0,0,0.7)}@font-face{font-family:'Messina Serif';src:url("https://cdn.shopify.com/shopify-marketing_assets/static/MessinaSerif-Regular.woff2") format("woff2"),url("https://cdn.shopify.com/shopify-marketing_assets/static/MessinaSerif-Regular.woff") format("woff");font-weight:400;font-style:normal}@font-face{font-family:'Messina Serif';src:url("https://cdn.shopify.com/shopify-marketing_assets/static/MessinaSerif-SemiBold.woff2") format("woff2"),url("https://cdn.shopify.com/shopify-marketing_assets/static/MessinaSerif-SemiBold.woff") format("woff");font-weight:600;font-style:normal}.heading--hero{font-size:3em;margin-bottom:15px}@media screen and (min-width: 46.875em){.heading--hero{font-size:5.25em}}.heading--course-title{font-family:Messina Serif, serif;font-size:2.5em}@media screen and (min-width: 67.5em){.heading--course-title{font-size:4.0625em}}.decorative-font{font-weight:600;font-family:Messina Serif, serif}.border-bottom{border-bottom:1px solid #dfe3e8}.border-top{border-top:1px solid #dfe3e8}.font-weight--bold{font-weight:700}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.uk-progress{background:#f4f5fa}.uk-progress-bar{background:#5c6ac4}.s1{font-size:1.125em}.page-wrapper::after{height:0}.progress-text{font-weight:600;margin-bottom:15px}.cover-outline-section-activities li::after{left:12px}.section-hero{padding:0}.course-cover-button{font-weight:700;color:#ffffff;padding:0.8125em 2.5em}@media screen and (min-width: 46.875em){.course-module__container{margin-bottom:60px}}.course-cover__background-image{background-size:cover;background-position:bottom}@media screen and (min-width: 46.875em){.course-cover__background-image{min-height:34.375em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;background-position:center}}@media screen and (min-width: 67.5em){.course-cover__background-image{min-height:90vh}}@media screen and (max-width: 46.8125em){.course-cover__background-image{height:auto;padding-bottom:100%}}@media screen and (max-width: 46.8125em){.course-cover__content{margin-top:60px}}.grid__item-about p{margin-bottom:30px}.grid__item-about ul{list-style:disc;margin-bottom:30px}.grid__item-about li{margin-left:45px}.course-cover__background-image--default{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--default{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--default{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-tablet.jpg")}}.course-cover__background-image--dropshipping{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-dropshipping-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--dropshipping{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-dropshipping-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--dropshipping{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-dropshipping-tablet.jpg")}}.course-cover__background-image--start{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-shopify-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--start{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-shopify-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--start{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-shopify-tablet.jpg")}}.course-cover__background-image--print{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-print-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--print{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-print-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--print{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-print-tablet.jpg")}}.course-cover__background-image--hobby{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--hobby{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--hobby{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-hobby-tablet.jpg")}}.course-cover__background-image--instagram{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-instagram-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--instagram{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-instagram-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--instagram{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-instagram-tablet.jpg")}}.course-cover__background-image--photography{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-photography-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--photography{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-photography-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--photography{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-photography-tablet.jpg")}}.course-cover__background-image--email{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-email-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--email{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-email-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--email{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-email-tablet.jpg")}}.course-cover__background-image--online-store{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-online-store-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--online-store{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-online-store-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--online-store{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-online-store-tablet.jpg")}}.course-cover__background-image--seo{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-seo-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--seo{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-seo-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--seo{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-seo-tablet.jpg")}}.course-cover__background-image--facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-facebook-advertising-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-facebook-advertising-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-facebook-advertising-tablet.jpg")}}.course-cover__background-image--google{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-google-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--google{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-google-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--google{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-google-tablet.jpg")}}.course-cover__background-image--daymond-john-goal-setting{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-daymond-john-goal-setting-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--daymond-john-goal-setting{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-daymond-john-goal-setting-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--daymond-john-goal-setting{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-daymond-john-goal-setting-tablet.jpg")}}.course-cover__background-image--advanced-facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-advanced-facebook-advertising-mobile.jpg")}@media screen and (min-width: 67.5em){.course-cover__background-image--advanced-facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-advanced-facebook-advertising-desktop.jpg")}}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.course-cover__background-image--advanced-facebook-advertising{background-image:url("https://cdn.shopify.com/shopify-marketing_assets/static/images/shopify-academy-advanced-facebook-advertising-tablet.jpg")}}@media screen and (max-width: 46.8125em){.course-cover__background-image--advanced-facebook-advertising{padding-bottom:108%}}@media screen and (min-width: 67.5em){.workshop-cover{padding-top:0;padding-bottom:0}}.workshop-cover__container{min-height:70vh;padding-right:0}@media screen and (max-width: 46.8125em){.workshop-cover__container{padding-left:0}}@media screen and (min-width: 67.5em){.workshop-cover__container{min-height:90vh;padding-top:3.125em;padding-bottom:3.125em}}.workshop-cover__image-container{padding-right:0}@media screen and (max-width: 46.8125em){.workshop-cover__heading{padding-left:5%;padding-right:5%}}@media screen and (min-width: 67.5em){.workshop-cover__heading{font-size:3.875em;margin-bottom:0.5em}}.workshop-cover__subhead{font-weight:400;font-size:1.5em;margin-bottom:45px;line-height:1.4}@media screen and (max-width: 46.8125em){.workshop-cover__subhead{padding-left:5%;padding-right:5%}}@media screen and (min-width: 46.875em){.workshop-cover__subhead{margin-bottom:3.125em}}.workshop-cover__button{background-color:#ffffff;color:#5c6ac4;font-weight:700;padding:0.8125em 2.5em}.workshop-cover__button:hover,.workshop-cover__button:focus,.workshop-cover__button:active{background-color:#5c6ac4;color:#ffffff}body{background:#eaeff3;max-width:1600px;margin:0 auto}.header-lines{position:absolute;height:460px;right:0;top:0;background:-webkit-repeating-linear-gradient(bottom, #f4f5fa, #f4f5fa 45px, #dfe3e8 45px, #dfe3e8 46px);background:repeating-linear-gradient(0deg, #f4f5fa, #f4f5fa 45px, #dfe3e8 45px, #dfe3e8 46px)}.styled-links{padding-bottom:0.3125em;display:inline-block;position:relative}.styled-links::before{content:'';position:absolute;bottom:0;display:block;width:0;height:2px;background:#5c6ac4}.styled-links::after{content:'';position:absolute;bottom:0;display:block;width:0;height:2px;background:#ffffff}.styled-links-container{font-weight:700}.styled-links-container:hover .styled-links::before{width:100%;-webkit-transition:width 0.3s;transition:width 0.3s}.styled-links-container:hover .styled-links::after{width:86%;-webkit-transition:width 0.3s;transition:width 0.3s;-webkit-transition-delay:0.2s;transition-delay:0.2s}.back-to-top__link{position:absolute;font-weight:700;top:0.875em;right:5.625em}.back-to-top__link .styled-links-container:hover .styled-links::after{width:85%;background:#f4f6f8}.back-to-top__arrow{margin-left:0.3125em;vertical-align:middle}.card__arrow{margin-left:0.625em;vertical-align:middle}.card-shadow{-webkit-box-shadow:0 90px 60px -40px rgba(0,0,0,0.4);box-shadow:0 90px 60px -40px rgba(0,0,0,0.4)}.section__hero{padding-top:0;padding-bottom:0;margin-top:30px}@media screen and (min-width: 67.5em){.section__hero{margin-top:30px}}.hero__image{height:34.375em;background-position:bottom;background-size:cover;background-image:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/images/hhHeaderV3.jpg")}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.hero__image{background-image:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/images/hhHeaderV3.jpg")}}@media screen and (min-width: 67.5em){.hero__image{height:auto;padding-bottom:25%;background-image:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/images/hhHeaderV3.jpg")}}@media screen and (max-width: 67.4375em){.hero__subhead{line-height:1.5}}.main-library__heading-container{margin-bottom:90px}.course-details__item{margin-bottom:120px}.course-details__image{margin-bottom:30px}.course-details__name{margin-bottom:0;min-height:3.625em}.course-details__desc{min-height:6em}.course-details__seperator{display:block;height:1px;border:0;border-top:1px solid #dfe3e8;margin:15px 0;padding:0}.course-details__progress-text{margin-left:15px}.wistia_click_to_play{display:inline}.workshops-header{position:relative;margin-bottom:7.5em}@media screen and (min-width: 67.5em){.workshops-header{margin-bottom:6.25em}}.workshops__featured{margin-bottom:45px}.workshop-details__image-container{position:relative}.workshop-details__date{position:absolute;background-color:#ffffff;padding:1.25em 1.5625em;bottom:0;left:0}.workshop-details__item{margin-bottom:60px}.workshop-details__content{padding:30px 1.5625em;min-height:13.75em}.workshop-details__link{border-top:1px solid #f4f6f8;padding:1.25em 1.5625em;background-color:#ffffff}.workshop__item{padding-top:1.25em;padding-bottom:1.25em}.workshop__item:hover{background-color:#ffffff}.workshop__table-heading-wrapper{padding-top:1.25em;padding-bottom:0.625em}.workshop__course-title-text{font-weight:700;color:#5c6ac4}@media screen and (max-width: 67.4375em){.workshop__course-title-text{max-width:80%;margin-bottom:0.625em}}.workshop__course-title-arrow{position:absolute;top:0;right:15px}@media screen and (min-width: 67.5em){.workshop__course-title-arrow{display:none}}@media only screen and (min-width: 750px) and (max-width: 1300px){.workshop__course-title-arrow{right:0}}.workshop__course-title-wrapper{position:relative}.workshop__course-title-wrapper:hover .workshop__course-title-arrow,.workshop__course-title-wrapper:active .workshop__course-title-arrow{display:block}.workshop__course-title-container{max-width:220px}.workshop__course-information{color:#454f5b}.workshop__course-information p{color:#454f5b}@media screen and (max-width: 67.4375em){.workshop__course-information{font-size:0.875em}}.workshop__course-kicker{font-size:0.625em;text-transform:uppercase;margin-bottom:0.625em}@media screen and (max-width: 46.8125em){.workshop__secondary-content{margin-top:0.625em}}.templates-header{position:relative;margin-bottom:6.25em}@media screen and (min-width: 46.875em) and (max-width: 67.4375em){.templates-header{margin-bottom:6.5625em}}.templates-card{margin-bottom:45px;-webkit-box-shadow:0 28px 54px -42px rgba(0,0,0,0.4);box-shadow:0 28px 54px -42px rgba(0,0,0,0.4)}.templates-card__content{padding:30px;min-height:12.5em}.templates-card__description{color:#454f5b}.templates-card__link-container{border-top:1px solid #f4f6f8;padding:1.25em 30px;font-weight:700;line-height:1.3;padding-right:0.3125em;background-color:#ffffff}.template-card__link-icon{margin-left:0.3125em}.templates-card__link-section .styled-links-container:hover .styled-links::after{width:calc(100% - 0.9375em)}.footer-bottom{background-color:#000639}.footer-bottom__academy-logo--light{height:4.0625em}@media screen and (min-width: 46.875em){.footer-bottom__academy-logo--light{height:2.8125em}}@media screen and (max-width: 46.8125em){.footer-bottom__academy-logo--light .shopify-academy__footer-svg{right:auto;width:11.0625em;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%)}}
+
+
+ @font-face {
+ font-family:"avenir";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir+Next.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-condensed";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/Avenir+Next+Condensed.ttc") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-bold";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Bold.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-cn-it";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-CnIt.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-demi";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Demi.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-heavy";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Heavy.ttf") format("truetype");
+ }
+
+ @font-face {
+ font-family:"avenir-next-lt-pro-regular";
+ src:url("https://s3-us-west-2.amazonaws.com/static.schoolkeep.com/fonts/AvenirNextLTPro-Regular.ttf") format("truetype");
+ }
+
+
+ body {
+ font-family: "avenir", sans-serif !important;
+ }
+
+ h1, h2, h3, h4, h5, h6 {
+ font-family: "avenir", sans-serif !important;
+ }
+
+ .uk-navbar-nav>li>a {
+ font-family: "avenir", sans-serif !important;
+ }
+ /*HH colors*/
+ .fa-stopwatch {
+ color: #FBCE20 !important;
+ }
+ .sess-view {
+ color: #0C653A !important;
+ border-color: #0C653A !important;
+ border: 3px solid !important;
+ font-weight: bolder;
+ }
+ .filled-button {
+ font-weight: bolder;
+ color: white !important;
+ background-color: #0C653A !important;
+ border-color: #0C653A !important;
+ border: 3px solid #0C653A !important;
+ }
+ .white-text {
+ color:white !important;
+ }
+ .more-sess {
+ color: lightgray !important;
+ border-color: transparent !important;
+ border: 0px solid !important;
+ font-weight: bolder;
+ }
+ footer {
+ background-color: #0C653A !important;
+ }
+
+ a:not(.uk-button) {
+ color: #0C653A;
+}
+.float-right{
+ float: right;
+}
+.gold-text {
+ color:#FBCE20 !important;
+}
+#mobile-search {
+ display:none;
+}
+body > div.main-content > div.uk-container.uk-container-center.uk-padding-horizontal > div > div.uk-width-large-4-10 > div > div.session-sidebar__content > div > div.dialog__body > div > div.uk-width-3-4 > p:nth-child(3) > a {
+ overflow-wrap: break-word;
+}
+.hh-search .search {
+ width: 150px !important;
+}
+#search_results_count {
+ display:none;
+}
+#q {
+ background-color: #DCDCDC
+}
+header {
+ position: fixed;
+ background-color: white;
+ width: 100%;
+ z-index: 1001;
+ left: 0;
+}
+.mobile-navbar-toggle {
+ z-index: 1000000;
+}
+.main-content {
+ padding-top: 30px;
+ min-height: 0 !important;
+}
+
+.main-content > .school-website-course-index-list > .school-website-course-index-results-container > .uk-padding-top{
+ padding-top: 30px !important;
+}
+
+.black-text {
+ color:black !important;
+ }
+
+#mobile-nav > div > ul {
+ z-index: 100000;
+ background-color: white;
+}
+::selection {
+ background-color: black !important;
+ color: white !important;
+}
diff --git a/Custom_Templates/customer_templates/Howard-Hanna/training_session_show.html.liquid b/Custom_Templates/customer_templates/Howard-Hanna/training_session_show.html.liquid
new file mode 100644
index 00000000..b604ce55
--- /dev/null
+++ b/Custom_Templates/customer_templates/Howard-Hanna/training_session_show.html.liquid
@@ -0,0 +1,205 @@
+
+
+
+
{{ training_session.session_name }}
+
+
+
+ {% t .belongs_to %}
+
+
+ {{ training_session.title }}
+
+
+
+
+ {% t .type %}
+
+
+ {{ training_session.event_type_title }}
+
+
+
+
+ {% if training_session.instructor_assigned? %}
+
+
+
+

+
+
+
+ {{ training_session.instructor_name }}
+
+
+ {{ training_session.instructor_title }}
+
+
+
+
+ {% endif %}
+
+
+
+
+
+
+ {{ training_session.description }}
+
+
+
+
+
+
+
+
+
+
+{% for group in current_person.groups %}
+ {% if group.enrollment_code == "1817d8c96780f13abbf0f2023e3b26b3bd43d248" %}
+
+ {% endif %}
+ {% if group.enrollment_code == "ccd2aa2f1e41ebbac8fa878f806e3ccc20ae3f38" or
+ group.enrollment_code == "aa6fe8d22ec1e75d2e8c54c6d5452dcd585e415d" or
+ group.enrollment_code == "176629fa82da1d03f3d58c81e751e61b9836a46d" %}
+
+ {% endif %}
+{% endfor %}
+
+
diff --git a/Scripts/API_Tests/get-group-ids.py b/Scripts/API_Tests/get-group-ids.py
index 5e0c6247..6319cf04 100644
--- a/Scripts/API_Tests/get-group-ids.py
+++ b/Scripts/API_Tests/get-group-ids.py
@@ -1,9 +1,10 @@
import pprint
+import csv
import json
import requests
import Apikeys
-APIKEY = Apikeys.ANTHOLOGY
+APIKEY = Apikeys.DATASNIPPER
groups_dict = {}
pp = pprint.PrettyPrinter(indent=4)
@@ -26,18 +27,19 @@ def get_groups(APIKEY):
group_id = response["id"]
group_name = response["attributes"]["name"]
# print(group_name)
- groups_dict = {
- group_name : group_id
- }
+ groups_dict = {group_name: group_id}
groups.append(groups_dict)
if "next" not in nextlink:
break
- pp.pprint(groups)
- print(len(groups))
- # with open('/Users/normrasmussen/Documents/Work/CustomerNotes/Anthology/antho-groups.json', 'w') as jsn:
- # json.dump(groups, jsn)
+ with open(
+ "/Users/normrasmussen/Downloads/Datasnipper-Groups.csv", "a+", newline='\n'
+ ) as csvfile:
+ for group in groups:
+ for key, value in group.items():
+ csvwriter = csv.writer(csvfile)
+ csvwriter.writerow([key, value])
if __name__ == "__main__":
diff --git a/Scripts/API_Tests/get_course_ids.py b/Scripts/API_Tests/get_course_ids.py
index 3adeffc8..ce7ebddf 100644
--- a/Scripts/API_Tests/get_course_ids.py
+++ b/Scripts/API_Tests/get_course_ids.py
@@ -6,6 +6,30 @@ HEADERS = {
"accept": "application/json",
"X-Api-Key": APIKEY,
}
+COURSES=[
+ "Build a Product Analytics Dashboard",
+ "FullStory 101",
+ "FullStory 201",
+ "FullStory Quick Wins",
+ "Integration and APIs",
+ "Page Flows & Pages",
+ "Private by Default",
+ "Privacy in FullStory",
+ "Product Analytics in FullStory",
+ "Using Page Flow Cards",
+ "Using Conversions",
+ "Using Dashboards",
+ "Using Defined Events",
+ "Using Metrics",
+ "Using Funnels",
+ "Using Segments and Funnels Together",
+ "FullStory for Marketers ",
+ "FullStory for Product Managers ",
+ "FullStory for Customer Support ",
+ "FullStory for Engineers ",
+ "FullStory for Account Management",
+ "Product Analytics in FullStory",
+ ]
def get_courses():
@@ -15,22 +39,25 @@ def get_courses():
count = 0
list_of_ids = []
- while True:
- count += 1
- url = f"https://api.northpass.com/v2/courses/?limit=100&page={count}"
+ # while True:
+ for course_name in COURSES
+ # count += 1
+ url = f"https://api.northpass.com/v2/courses/?limit=100&name={course_name}"
+ # url = f"https://api.northpass.com/v2/courses/?limit=100&page={count}"
response = requests.get(url, headers=HEADERS)
response = response.json()
nextlink = response["links"]
for item in response["data"]:
- idict = { item["attributes"]["name"] : item["id"] }
+ print(item["id"])
+ # idict = { item["attributes"]["name"] : item["id"] }
# id = item["id"]
# name = item["attributes"]["name"]
- list_of_ids.append(idict)
+ # list_of_ids.append(idict)
if "next" not in nextlink:
break
- print(list_of_ids)
+ # print(list_of_ids)
if __name__ == "__main__":
diff --git a/Scripts/clone_courses.js b/Scripts/clone_courses.js
index 041c346e..ab6dfbd8 100644
--- a/Scripts/clone_courses.js
+++ b/Scripts/clone_courses.js
@@ -8,9 +8,917 @@ const rl =
})
var userEmail= 'nrasmussen@northpass.com';
var userPassword= 'ecx5pmy!MAN2vgh2knc';
-var otp = '';
+var otp = '645795';
var schoolUUID = '52d19519-103f-45e3-9fa8-d21baa0f8aaa';
-var courseUUIDs =
+var courseUUIDs = [
+"320c7e25-0477-49fc-baf0-1b374b7eeabd",
+"2790ee3a-507d-405b-8ce7-d3cb1128f64a",
+"485b417b-c8e5-4034-943c-437e392e56d6",
+"5f671fa9-1eca-42e5-833d-30010481b669",
+"627aae1d-d35f-4cb4-82ac-a23cb9a59b97",
+"33c5e0a1-6b01-4566-bf72-bdd77ef3ebee",
+"e66a9a05-4aa5-4e2c-9dbd-246c6763eadc",
+"f870c9af-7185-46b1-9648-2e412d622cb1",
+"96576a68-9a61-466e-81bb-9a136e68aeaa",
+"42343d69-5de9-440a-8938-b77180b7548d",
+"bb1e60ec-7c00-4f09-985d-a7ac7dd3fd6f",
+"9533c7e8-aa55-40f6-b007-793ddb4cb65a",
+"3cd5f57b-da6e-400a-9f47-094bf08bcf89",
+"8dabb292-7554-44ae-aef4-d5feb838f8ac",
+"ac95b658-b525-4beb-b54d-6d7e94d44f04",
+"1699671d-eba3-44eb-9f52-777b4af99108",
+"b5fbe704-556e-472c-92e8-541f3a154491",
+"4921947a-8ec4-4d2d-ba05-335714ad648f",
+"6c8f70f1-8402-4b4b-aac0-2470d92616f9",
+"12d8acf5-2b88-4a3f-a3b1-88ec76dfd613",
+"6d859112-a036-4ebc-b6e9-b5aa1e690367",
+"1684b014-a66a-4580-827b-826afba7bc67",
+"d6de86ed-b578-4269-8939-cdc6e4828ac4",
+"1f9b7369-14f2-4bab-b92f-ca8d7da25641",
+"7d2abdf2-0285-48f2-9b3f-436c9ab51eb2",
+"81575e9b-be82-4fc6-ac97-a5380e7ac872",
+"840483fc-4c8a-448e-8290-2441fbc480ba",
+"c7e173ff-e5a7-4361-bfb9-f5ab03274c6d",
+"a30b6c76-94fb-46f9-b307-6493e98380f6",
+"a6c9fc4c-9475-4777-af27-e173dabd82ff",
+"c8ee42eb-218e-4109-b60b-e768d19dc03f",
+"e47ed5e0-1f3d-4a73-ad0e-f518a11c2d94",
+"0b7a0537-4ca2-44ee-b186-fee1e3f36373",
+"397a95c2-6c28-4ffb-97f5-550083a5bd6d",
+"82535e3c-288b-4431-abf7-f13ba6c7447b",
+"49fa6468-89ff-4834-b5e3-53dc095cb483",
+"5b0a0ef8-8875-45a7-bb41-d2cb8b969790",
+"783699e4-0e0a-4fef-8481-06f533a672de",
+"38fd8cf1-39a0-4124-b980-d03f927b35e1",
+"da90d425-b9db-48dc-a05b-50cb8f5ad426",
+"81b183da-c71f-4dee-ba53-76cda341ff27",
+"b72165bd-0900-4b73-928b-b6a3e779f9bb",
+"30542e21-02e3-4ae2-8b75-b2e5d4ab2c56",
+"c361273e-f61a-4f81-804c-052c5e1528b4",
+"8a010c07-2680-41b0-8170-f4e603326643",
+"ab8e87e6-e2d1-455b-888f-3bd5f92a1b07",
+"70062bde-4370-479e-8078-e38f218527d9",
+"0f70e318-4884-46e8-8182-0adab212f859",
+"c1215c90-da9e-4766-bbe3-9f592716d906",
+"5f167c9a-f9d0-40b1-9ddc-f88f3a5b7182",
+"e9f686f9-588f-458c-8c10-3d15a2f53bd2",
+"a9f2a34a-95e7-487f-b83c-5d2477875673",
+"26aed4b0-732c-4fb1-adfb-9d0665f465cb",
+"5e388843-5258-43f5-a818-52ddd3b71593",
+"890a35f8-66f0-4011-85fa-07eef9b4f716",
+"d61cf500-7458-4d2f-aff5-ed85bb18b486",
+"c21aa481-cf72-400f-a033-220a6ef0a683",
+"3de77578-992f-4c2c-9d65-3019819ea78a",
+"e6cb6bb5-059d-4d84-8c78-bd009a3866c5",
+"9f283134-1ae2-4b8e-b5da-df93964cb5b4",
+"c1c93238-17ef-4d2c-9b99-fbfcca65695a",
+"cc72bcae-5c0b-4d62-9963-459c1e8a2fae",
+"2e1db7d3-af93-4832-b465-74c28c382f17",
+"bca954dd-66f2-46b0-82ac-17fade2a8084",
+"edd503f7-bb1a-462f-b89f-17657a488c46",
+"ef8fc4ce-cea8-4d01-af3f-7beca39431dd",
+"d928a184-9553-46f3-82aa-ce616125216a",
+"ee622978-7144-4767-bfae-63d2edcb712c",
+"969190ac-63e9-4af8-bf20-016af2424de7",
+"e4e343ec-66a1-44e5-8d52-c9768678760c",
+"acdea6a3-f104-42c6-a9ea-b6ccb848a1df",
+"2df21dcc-2d56-488f-be22-97c6decbe67a",
+"d1193a67-96ab-4182-9710-e76b7eb81947",
+"7db78cb7-194e-4988-9f52-a90805cddc93",
+"2bf0f0da-da2b-4119-a939-a8a51b658255",
+"43ff589a-724b-434b-ad50-c7eedeace049",
+"b485b7a8-f572-4078-91bc-c6f83c831100",
+"e6343bce-8f5e-4d0e-83b8-8226b553cbbb",
+"3e1cc5e3-f002-4120-b121-7c9616a69958",
+"5fe0ad0c-c42f-4dc2-8168-eee485a0df45",
+"5fb0dccf-d830-4747-b461-fb5c7ffb9fa9",
+"3a2d049b-4877-48a8-b870-2d02db7449d4",
+"03314307-28ad-4617-a537-d5ffacc26a39",
+"17d99239-ca53-4348-9175-79fa47591b46",
+"ad4411e6-ca5b-4178-9500-7f3d43139b4c",
+"dca8122b-2a6e-4da1-a24c-45facf035326",
+"54fa7e72-99a4-4eff-a2b0-52f713aff9ec",
+"2a116c42-5726-4d16-9a39-f67c94d4b7af",
+"99c8dc03-1f8a-418f-afee-48277906cf74",
+"96cc5750-eaf1-4ac9-936e-62df7475d8c5",
+"417ed4e6-36d0-471f-80b9-9198069cb5b7",
+"324e59bb-aee9-4d26-8f66-224fd741c012",
+"cd07ac5f-1607-49e8-ab32-9ac92cab230d",
+"d8b394d6-5d90-4cf4-8d83-0b58210ba478",
+"cde68f2a-b331-45fe-b922-926a4f0b0fd3",
+"cbc30995-1fd2-459e-9e81-cfd2547ebaf4",
+"a06af57e-88ca-4a7f-9ccd-6fe39a806ba3",
+"73b88817-c375-45b1-ae30-3b8573d304ab",
+"15fbd385-6bba-45d8-bdee-782f6a0f2e47",
+"86e089ee-1a65-48b5-afef-b7e9ac919d1d",
+"7260ad4a-2dca-47b9-b43e-a8a873e680fa",
+"8abea736-0564-4fc5-82c1-ffbf1a371962",
+"d161c367-9d27-45aa-a5fc-960833c861b6",
+"e676ae32-bc09-4476-a38c-41873deb6512",
+"144df04f-7867-4b23-9ba0-77bfce3537fe",
+"3cf797f6-1843-4e82-8d86-4bae4bd4e3b7",
+"91237724-c307-4c3f-beb1-733a99c549ad",
+"301725e1-2ac7-4961-82cc-1b0ee7aecb6b",
+"96e5000d-fff4-49ff-bf21-834cae9ac508",
+"e9687bf5-9f6c-4b2e-a751-047555f9acda",
+"0450e883-2175-4275-ada4-4098fd956898",
+"4f786a1c-445f-45a9-823c-b351e81c017c",
+"2dfa854e-5e98-4a0a-8d30-c458d786707a",
+"75463dca-a588-46e9-946a-f53fee831887",
+"21c1f8ea-9c98-4161-8705-edc39d9576c0",
+"71d304de-bfbd-43db-a82e-e1fe8cc9d954",
+"6b9cfc26-8996-4a2f-96bb-8c244553da19",
+"3280f156-0520-4b6d-a4b2-b43b35b5d6bb",
+"a57b7dad-f2e1-4411-bccb-db8e07d733f3",
+"0dfcd074-77f1-4658-b4f9-318c4aaef8bd",
+"de37871d-1332-4281-bb13-22ccfd196dc7",
+"24152a6b-fda3-4b98-a73c-ad06b659c7b1",
+"80fddffa-6654-45f4-80d9-692ce0a05b65",
+"7197a95e-9336-48e4-a36f-2997e8a45618",
+"b29e1e43-047c-461d-8e62-a10264199055",
+"895d4077-82ac-400b-af48-eb77f6677217",
+"3ac6d3a0-d902-429d-9f0a-62201bc7ab1e",
+"d7597720-e5a9-48a1-9788-6820809747b7",
+"41e98b8b-097c-42c3-a8c1-208c7aec9e94",
+"13b9655f-87c9-400a-a85d-0f98d90d57da",
+"a0233c81-5056-4e37-9199-253fc5c71df8",
+"da04110e-dff6-49f3-9660-30ab0255c44d",
+"8b18ed18-7445-4551-9550-cd5865ff77b9",
+"801f109c-3191-4757-8d07-1fca56877c81",
+"59eaeaeb-5319-48ed-bf14-c8b2917cdc2e",
+"4f74b638-7715-45c8-9c78-3639f7a48cbf",
+"ef47d5e2-8af0-4a99-b6e7-19e6d0486bf6",
+"e75dd5a5-7e21-4977-8e0d-94737e6f7cb2",
+"d7e3a7c3-9c44-4097-baa2-8234e9898e7d",
+"18d47aa2-da95-40c8-8f0a-e155ce10813e",
+"a9db30a6-55f3-4a36-bf66-7e27c76860a3",
+"1af2e6a6-9f38-4401-a091-f065d0551cf6",
+"0889b292-174c-4685-9f05-522efd6f8282",
+"f62c03d0-f907-4b5c-8295-db628f2dc970",
+"5c2bcb1b-4c6b-4f71-a4fe-a4912e4a0959",
+"7928e51a-6f62-4a91-9021-0771ba5d8054",
+"daf4efd3-db70-4fa5-8961-ba0379949224",
+"7332e506-c556-4b8d-8926-0fe55c74f3fd",
+"dad7b7ec-8fbc-45db-bc66-315b7ee16029",
+"e9ac4344-a0a3-49ae-9f1d-019c20b56c6b",
+"2d268832-14a4-49b5-921e-1f8c65fe228d",
+"efa0aab5-c25c-4cfc-afd8-cde37af032d8",
+"e85236c0-e4ef-4e8f-8471-9b4329a8b9af",
+"33e027d8-107c-444b-aebb-c618db19c069",
+"7a6736c4-6f7c-4e25-b3b6-2257fad68475",
+"dc5b475a-406c-4355-b2d8-2218ba5ce46d",
+"2f72bc67-a787-48ca-ac5a-de16af3ce82f",
+"751b5b26-af08-4ee4-8343-6f0e4e9c4a56",
+"86a36105-2fed-4cf8-8e11-bdb9f054fc2e",
+"f97af92e-f5a5-402e-9f98-1dafba0a4ced",
+"8b25972b-3232-444b-be95-1e9c61f40443",
+"a3fcd355-a7fd-45ae-a3f0-e133a568b070",
+"9e0b0df5-f4c1-4fe4-ba00-b58289a42ca8",
+"2325b080-6ecf-40e4-a167-be2ffb87fcb3",
+"0215bc16-3179-4a46-bff3-3d6a3541a10d",
+"0318a824-ec06-44fe-bcc1-bb83d911dc06",
+"b69cfa75-8cdb-4cde-a8f3-cc5faa6208fc",
+"b8d1331d-8e53-4531-8224-4057ccd107c1",
+"d9b42557-6c90-4be5-adf0-6c6773e6194d",
+"8456f8e0-47c2-433d-b3d5-e4783f9d52b8",
+"48fc9f07-d5ae-4c00-b571-9a132ad006a7",
+"906c6bd3-c12b-4883-9417-9732b7efed40",
+"9a6f0ad6-8821-47ce-a5d7-ea63bb6994bc",
+"7210cbfc-bd25-4ebb-8fe4-f5416ebeadd5",
+"62a18cfe-bc44-462e-9fc8-e58fcb7c263c",
+"21c05d98-95bd-4d1b-aaec-e91fe1b5d61f",
+"9eda52e3-aa47-436b-a165-a5b40993c398",
+"4bd75f3d-505a-40b2-84ae-00a8fba86cbf",
+"231ebdd2-d424-495b-8216-0268f38e32c4",
+"a1d5a10b-6a4a-4ea9-9f17-9d35d54d2734",
+"9a54cbd8-2c19-4f6e-8b9d-90a53689dd36",
+"cbe3aea6-5bb5-479c-aecf-ecde3ed00c9a",
+"aea9e087-2649-4367-8d6e-7ebd292bedec",
+"b7b95d0f-8f0f-47a5-be73-630d3187dde4",
+"aa481cd9-f658-41bc-af46-59c6cc73cba2",
+"9ca695f2-a777-46d0-8b92-98f63d967179",
+"54f8b683-5322-4b64-a899-22bbe6aa61fc",
+"9a02e8f3-4244-4fa4-8d85-b8528751a04a",
+"f47dcf6e-1b1e-4654-8cba-a301b8901e39",
+"38d7f320-967b-49ef-a04e-497db3aa9ede",
+"c7060bbe-2d01-4010-976b-e64e66fc6203",
+"28b9a120-4b5c-49a3-8815-fd17ead90d24",
+"2560c331-1f69-4b76-ae45-08c611fc708c",
+"a278b64b-1417-4f20-b6df-ddbdee6df364",
+"1da1bce7-4454-4c28-b1e1-6ee5536dba13",
+"b2f38d8e-9262-4b30-8674-3c1e6a79bf54",
+"aa7d84cb-d2c6-475a-961e-19233ed01b40",
+"45e3aeba-3923-46f7-853a-a9317692339a",
+"55841904-8c6a-4676-a43f-b5cdd360973e",
+"12726370-7082-401f-b45f-c91bf03db79a",
+"7edfe3cf-db22-4476-9791-8fe066680733",
+"c19a3ced-d66b-4524-bc96-7a7aa7443151",
+"8f743b2c-d32e-462a-8a55-0c4e7bcf24f4",
+"9bcd07fa-9027-49e0-93bb-beb6b5170086",
+"a77f8e9f-230e-4729-ab53-bd8aede74653",
+"6d20dd98-99d1-4659-83d8-2354e096b90e",
+"27a3dd65-409e-4983-a2de-4269d3b490e3",
+"0a6fc36a-0399-4729-b397-77df906918ad",
+"07320a74-9af8-4ad3-820c-5e875238b8a3",
+"a583648b-a9a0-4bd8-bfb8-3889381e8790",
+"f03ffc3c-2519-4747-9fd6-5c2053b061a7",
+"0710b9bb-3d66-4a6b-9c76-42f7fcf1620d",
+"b967cd9b-bdcb-4ce1-bee3-96ede31452b1",
+"4810eadb-2bb7-4df7-ba87-444a18bc31b2",
+"52a7865f-e9e5-42ea-a683-8f13397871b0",
+"e0069917-8607-48e6-b740-d8a38e63f18b",
+"456320fd-1c1d-4adc-9fc5-3b3e367ba2c2",
+"ac616744-b43e-4973-bf49-e0da9824d22d",
+"35adc326-b113-4195-870a-5321f480901a",
+"8e1aaedd-875c-4bfc-913c-9aa566b2e0c8",
+"81de68a5-21ce-4dcb-8894-8129b8da4614",
+"93063e3b-0e73-42ac-b1ad-cbfbd27ea6bd",
+"361929c1-7849-4190-91da-a1c383e448a4",
+"8022f999-844e-4c44-91d7-c116d34efea8",
+"8dbc928e-5b84-4a67-a226-0fc11009a932",
+"0e17da60-2a6d-49d8-95e9-8f7f173a06e6",
+"995a2837-2848-45c8-861f-47b08a4c71f3",
+"1f36f421-8f67-485f-a88d-4196234f8004",
+"ed105613-068b-43e3-b6f0-9db514c5f599",
+"a76c2d5c-3e6a-4659-a0b5-28829ab72b81",
+"50b9fbfd-7422-4d78-bdb0-dd54792607de",
+"e60cd22f-e73f-4a9b-9c9f-830ef65a02d6",
+"632eb257-5420-4391-a77d-f207674933ea",
+"cb2a95c6-2787-4eed-96b3-44f572d71eb0",
+"3d4f0d13-e4d0-40cc-bfc5-92bc002346dc",
+"99470c3f-9f74-49d8-b0ba-5f9c467736e6",
+"bf401b76-ffad-4e58-9926-89b8ecca2618",
+"da4e05e3-df61-4231-9136-dc91b3dc7338",
+"8b4b5c85-b732-49fb-a051-87baddc81b29",
+"b53e9983-0ccf-4fde-945b-aec1ee86259c",
+"7b76fec5-17b4-4491-94c2-47f02eeae07e",
+"8bacf6e3-c238-45f7-90ab-969e7eea76e7",
+"df59440e-e532-41a4-9da8-aba7d0d6786f",
+"00236cd2-3c9c-44e5-b3f5-ae5322b2955b",
+"27b40281-acf8-497a-88fc-29fbcd734f48",
+"c00e3095-8dd6-4734-b5eb-068472d9fba8",
+"5a918d4b-3d5c-4bee-a615-78a301ad2bf8",
+"7ae0c123-cde1-45fe-89bc-1aefbda98fd2",
+"3bc88e52-dee5-4988-9dc1-36c44e13a932",
+"c2546ab8-f06b-4995-afd8-43f0579923bb",
+"db792448-5c17-4cfd-81c9-65263fbdba6a",
+"633844f5-dff4-4bde-be8d-7f3914376111",
+"cffedfef-e776-4ef8-89f1-19ecdd19e739",
+"c70e46a6-b844-400e-89b0-6a19a4dd8ee1",
+"1b7baad0-1e6f-45aa-8c2d-b2836197c9cc",
+"da6afa8f-9591-4052-994e-119a398a5557",
+"64be7edf-8dda-4ad8-9401-cd5ece0067e9",
+"90cdc265-7503-453a-b17b-1bf2c4eb95aa",
+"c95ca4e2-f75c-46ff-9913-c5545613cffa",
+"31cb63a1-c386-48ad-a9a9-9c4cf12ad773",
+"612466ea-f556-4b1d-b631-751bc08d14ca",
+"1c8bf041-b137-4359-a665-fb89fa43b9c1",
+"1b30762d-4913-4ffc-b106-aa5dedbef1cd",
+"91e0de20-00e9-44ee-9caa-3ec107345610",
+"7c4eb01f-d939-471b-9338-060d7ff504fa",
+"1af38526-2f35-45be-b221-dbf4dd5e4b2d",
+"1ad7948b-1111-4c55-b7f2-56dc14e03b91",
+"6ad88b70-8466-4100-8c07-a4dd2899989b",
+"6a6dd5d2-362f-465e-8ca3-f5a97eb2910f",
+"f774e64b-6870-4d37-a531-d1b84c3da06c",
+"f5b0554b-3884-418f-b61f-235151f79c9e",
+"a8af6474-2605-4522-a5a3-5d38d2938837",
+"a225a1f8-65e4-4db9-badf-f6af82673eee",
+"0f91a61b-7076-46ba-bfc9-b10b90213767",
+"0e4c67d5-7621-43f2-ab6e-fc969a6fa3a1",
+"48058025-e6a5-4884-a625-d614aee791ea",
+"450beaec-d92a-470c-a994-edc228e6a5fd",
+"6604c498-6ea0-4c59-b55d-77f68ba42ed9",
+"0eff70e6-07d9-4d80-b05c-be5d91c22a96",
+"634e2c83-174b-4259-9fc2-48162f4d2c19",
+"5ff6e5f2-3475-48b6-bbdd-dc3f7251c033",
+"30a415c2-0cbf-4a6d-a172-9712b938afcd",
+"f30bf898-576b-49c1-81dc-8fe2c6e8cd7e",
+"e614d83f-7302-42df-ad0b-22c691e9f9f0",
+"cc81cbd9-349e-48df-9873-a32ff12bc222",
+"d1e99c72-fcb1-43fe-9e4a-e46dff88eeba",
+"432c6456-f36c-49ba-b291-c6280c0d52e8",
+"5f78be50-190c-4285-b636-4e48858e5917",
+"914ed7bf-9ea7-460c-bf72-b7b1044243f9",
+"9e91f612-4765-4a5c-b6b6-5401a40ce5d1",
+"52e5c11b-2503-4226-8177-a87128f5ca6d",
+"f070b646-2d7e-44f8-bca4-7cce77e56cd7",
+"8579f9a4-ad00-4d45-9f38-19802ac3799f",
+"046ef056-0dc0-4e6b-9fb8-201174c3b7e5",
+"5537288e-8aa4-43da-948e-15c46d4bbf1d",
+"0cd41af5-fab1-4619-a985-81cce621ad59",
+"40e8034f-ffd6-43ce-868a-54a9f5ad22fe",
+"654726fc-b7f9-4c66-b2ac-6121dc81009d",
+"c32807f7-e452-465e-a493-0186bd86b75a",
+"b5e27a06-8417-40d6-9886-7e1e0236b1ad",
+"ea44f2b8-0bef-43d4-8e60-4145e018028b",
+"33c143bd-027d-4e00-a6b7-98a041aa302f",
+"f9e37835-6c0e-449c-87e1-bb85df141340",
+"1b1c80b9-ee54-4ee3-8177-91b357003205",
+"3bbf3c44-12e9-4779-b63c-5ed4fde41feb",
+"ba2cd552-e76d-4a8f-8579-31e0debe5c55",
+"fe6a25ed-73ec-4c67-8ebb-8d484f887e9e",
+"4b08bb82-58aa-4630-b4c6-b6661ec218c8",
+"c72b5e1b-c9a4-4170-a622-b8b6ec1d8677",
+"288bdabd-3441-4098-b394-2ccd2b6557a5",
+"fa1b7616-c45e-4940-80cd-4c70d6f56447",
+"396100d7-9545-4174-8274-d54971733dc8",
+"c387ec46-6599-4715-a802-8d05a2097daa",
+"61ad663b-b838-409c-890e-f79b79cf7d0f",
+"9ff90aa4-0008-4e37-bdec-09d28d4e6adf",
+"54269782-9012-4458-8a75-3d34cff77613",
+"3bfd977e-3d94-4e46-ad6f-5bb7350df301",
+"cc6bc40e-4535-4d5a-b0e3-f3ac99ffe003",
+"973e96e5-b13d-40ef-961c-af75a7d0e5e0",
+"375e6ce9-656e-420b-b7cf-3a457f310a24",
+"9860b45b-7600-4c85-9ab4-453427fc954d",
+"f2fd15e9-d9be-495b-86cf-7994fcf414f9",
+"259efdf4-1981-4129-ab0c-c3e5aa753a52",
+"2e039761-a658-4633-99d6-839b5ec1a0fa",
+"36c118e7-b11c-42e3-a620-e6789e42111c",
+"f63a66d9-cc4f-45d4-9d4c-58412675279f",
+"bfdcec73-9fa5-4ed6-baee-3cc673958255",
+"7ea29ba2-170f-4226-8237-a162c892c333",
+"98d6cc3d-c83f-47fa-8100-04b35c4d313f",
+"f0cc5465-c2c4-4e83-b402-3b6d9711f443",
+"e2981040-80d8-43d1-99b6-07d2738269e9",
+"31b826fb-15ee-419e-a338-7c6d6d8699b8",
+"f92a4545-56dd-4e06-9a28-f55049f32749",
+"3701259b-44bf-4e39-aa02-5d0c4d75ec9c",
+"011f69e7-4a96-4176-9863-d8be40c195cb",
+"faf5afe3-c9c6-4902-b0cf-bad79aab0c98",
+"4b7fd30f-74b5-4473-aa39-bb0454fc28b0",
+"3f2910d8-f334-479d-a87a-3f31bd1e9d28",
+"f10b41a1-b362-4e88-8864-27e6be714ef1",
+"9181dde6-2b59-43f8-9493-d13f7833e804",
+"6bbe31ac-05c9-4f38-823f-c79185321b68",
+"dc846bca-929a-4092-a3e7-38be2120e6f2",
+"cd0bdaad-c3f3-461f-a639-28f9d30fe70c",
+"0b7c5af3-07e3-4819-ba7a-46de41a58cd3",
+"2aca1757-bdab-464c-9bfb-a3351d2ef62c",
+"454d0a9e-d5bf-4fb0-8a33-3f03388ae941",
+"e129943e-dba4-4c8f-b9c0-442466d90fd4",
+"bb798e3d-ba72-4e45-8614-9338e7603206",
+"90eced81-ad71-4aed-8abe-b8a6fb969e42",
+"b7c7dd91-0123-43aa-acf9-a20bdd73d87b",
+"d4b3f99d-5fbb-4b72-8fed-ef35c50cf329",
+"027e7ebd-d986-4fe1-b4b9-3c003b2af30e",
+"7ba7bb12-e089-4867-9c62-37ce487ba11d",
+"fc8b0e92-6711-4733-b3a5-96aee6ee022d",
+"b49bc95d-fd11-489d-ab83-8307b83db665",
+"5abefe2a-2210-4307-92e4-b544d0858cb1",
+"f2828616-4d11-48b1-9028-130a8563659f",
+"0c773b20-9b1f-41b1-b576-2290d632f5cd",
+"efa34aed-e89e-4f45-b323-2e7f1f72e3ea",
+"813d4ad8-4a2a-45c5-b38d-ee2b8d1cce6f",
+"7d8fa749-b779-4b35-9b9b-cebc7fe1935a",
+"98d0ff3e-987a-4406-9f42-025c585c17a5",
+"28efab89-f1b7-4abe-b119-c0c91afd8a29",
+"2bfa79ff-989b-43f3-93be-3c2e6a3d24f0",
+"a86c7694-9654-42be-b932-03dcca06ecca",
+"7037f84d-c9a7-4ba4-9517-04d19de6127d",
+"4a0f93e8-2c70-4f52-9309-e0ec5b2e2b8d",
+"a3a9ec4d-4501-40da-9f31-d80b0e53aa56",
+"83ec5305-2903-4a1e-89da-ad290860284a",
+"31ea2b34-d951-476b-90b1-26f0263218d8",
+"cc8e5a29-4070-4345-a944-4740b26b4f70",
+"fd962d87-c368-4502-b173-511916f2ff6d",
+"b191b57d-ada0-45a0-95f5-bba0104733b9",
+"70d21a4a-b31f-45fc-b0e8-7cc979858c6d",
+"52b77849-b265-4286-9d0f-deeba62c42d5",
+"61e1d6fd-66ac-4666-9e38-22ed6604ab87",
+"088f8ef3-b7c9-458f-b2fa-d3bb94115ae2",
+"9d9db90e-f78a-4dbe-8f0d-f03fd07f1d01",
+"d069e347-35e9-4062-bd87-7423210f88aa",
+"569a6279-7c7c-460a-8ea9-e7302a8033e0",
+"63918b2f-b150-47df-8408-bb03fb354b00",
+"275b809b-916b-4677-a2ad-a39a6b45b4dd",
+"dba483dd-3dc1-4c49-8fbb-6caa957c99f0",
+"dc439333-4f2b-4578-8f25-b1b8448c3e80",
+"bc961f89-0bc7-4d11-a57a-4a289f103900",
+"c8352fd3-4520-4c12-8d24-b4f6abff585e",
+"30c52174-ddc0-4045-8f3d-7a288948afd1",
+"38d2309b-3190-4271-a2db-72de6648e70d",
+"6210207b-d09e-429e-a704-5fc3344ca0f4",
+"cf5dee17-5133-4a0c-bc70-7de9e228fdc5",
+"a4171c20-d39b-40cd-bcb2-3d6099d64058",
+"507556dd-5f8c-42d1-b587-2a69105287ad",
+"897af15a-8b8d-4e9b-885c-1cccf60e45b5",
+"05129870-5baa-47dd-a274-e0faef3d1a74",
+"92127262-72ea-45de-b0a7-8f9cd7c8675f",
+"f253decc-3270-4653-ace0-ee9b6fb2766c",
+"ea3862fb-3020-42fa-844e-1c8378b53c95",
+"067810a9-caf9-4aac-a6a1-6940b490ce08",
+"73c6c51a-f508-4822-9c75-32d59a3cf436",
+"eded18b6-31c3-4e18-b07e-e4de5060c6cb",
+"71ecd6fb-5943-4236-a242-6b0e0bfa8798",
+"becc4729-7942-4aa4-9c98-805602cae7ca",
+"d839b35e-f414-46f1-8f43-87154efff202",
+"b8e175ea-c2c3-47a7-ae39-8cc5845e5f29",
+"808a936c-dc3b-4d53-9136-65d23a92fc35",
+"35d8f6c6-c1a0-4909-bc2d-6538bf4f4592",
+"21e689d5-cf01-4dcb-ade5-a4c3451aa279",
+"86833ec9-f9d0-40d9-9819-bcc508ec84e4",
+"1d42d9a5-7906-4f4e-92bc-f9fc77b6a23c",
+"1f91ebaf-c671-4600-8b5d-b0a012eab142",
+"073ced9e-47c7-45e9-918e-73a958389f74",
+"94f707dd-731f-4df2-b58d-447f1465d7f5",
+"d3aa7dbd-742a-4e16-acb3-47485a083c43",
+"3964f6db-56f1-432c-81e2-e470d963f7a6",
+"a9cc32a0-ecaa-47bb-b5a5-378c8e45920f",
+"b04b6c80-08a3-4783-89ed-5314aede690d",
+"1527fb5a-8e2a-41c7-87ab-85907c8906f9",
+"1d38e0c3-9003-45e0-a800-1a2abd4228e3",
+"0273fff0-12be-4dd2-9898-92bf245720ef",
+"97903971-56ab-42d0-9f9a-3b0454866551",
+"c8706cfa-2362-48d0-a6b2-2b62e1a44c76",
+"35797fe6-5fa5-43a3-a672-730aba459cb4",
+"0d929110-4d30-472c-bc07-46d560823bae",
+"8859cbb3-72c2-4cce-abc3-f5b434b4c523",
+"25fa946f-2ba3-4a6c-984a-06c35201cbae",
+"1a291333-f77a-4eb8-934b-1749eafa9f8c",
+"fb0a9268-36da-493e-994d-04a366fc3f6b",
+"be0817e4-fcc5-4d57-9063-c7e0a76d2a3d",
+"56ac072d-4e56-4bf3-a415-09eee04d4a7c",
+"853aa3ec-c35f-4b09-a491-2ed3471f46a0",
+"9172322b-c420-4d5c-96e2-9e7932e699a0",
+"b8ce96a5-f895-4d5f-ad50-4e92912998c4",
+"1fb19801-5fc7-4d51-b2fc-fe05667812dd",
+"ddf88f38-2956-444e-a68b-62f8df0627d9",
+"836c6f50-6142-4433-b2cf-fbdd2d823808",
+"ef457ac9-3bf7-415f-87cd-edf86adef14d",
+"d91c3a85-80ab-41c1-85a7-462ab1b25d7e",
+"f9856c21-0b45-4b4d-b7f5-73b9477394f0",
+"dd66255e-3495-4002-959e-f8a2bc790b4d",
+"a0007e9f-9dd1-4e38-9659-c9d9aacb7846",
+"474fc555-bf43-4fb8-b7a6-279a1b94c4c5",
+"bb9c3f2a-f051-4a51-a8d7-d81d2947ddcb",
+"7a3fc895-11d0-4440-9ec4-30471a86ee64",
+"7010bfb3-121e-4c8a-b988-03f24c684068",
+"7304dbb8-481b-4c1f-bb0e-779417d4ea23",
+"bbd5bb1f-b3bf-45a2-a047-c4ee93af18f8",
+"73a4386a-6783-4425-9d80-f1da41da83fc",
+"66e4c297-2645-4e2f-94cb-92faaa5e74b4",
+"7fdc8e90-7e0c-4f63-afeb-72c26df1d528",
+"5913d308-8ebc-41ef-aeab-3e0c7e6c07bf",
+"17be26aa-0c84-4a4e-9fa1-33110843b5d4",
+"15af1c44-b4b3-49db-af6f-9b5960e4bf9e",
+"9bedb4d9-f8fd-4617-abbb-8c85db7c070f",
+"80d25d9d-fe55-430c-9041-3256b9fc877e",
+"06677647-c9b1-4aaf-ab6a-a3407020ce41",
+"778bcff0-db51-4b5c-9c3a-716fe5e3c024",
+"e862745f-0499-40f7-9227-4149ac74d96c",
+"802f616a-3d90-4070-ae23-16fa96c922f1",
+"dfc2f492-b28b-4ddd-83a2-881d4b23fa07",
+"de9979fe-ea09-4d54-8099-18d1ee85811f",
+"db9288e2-9eb2-47e2-8f96-4864cc47b060",
+"bbe175b9-9c44-4d72-be8d-2fc87488788d",
+"e12e48e2-fb96-49e1-9cac-f66e3f1dff0f",
+"5e8676e4-2528-43cd-ab5c-800c764258db",
+"f0db991e-04ab-4b7b-ac29-b5b56c8a5228",
+"706e5a2d-8733-4ef6-8448-cbd95eb9234b",
+"c5f755ae-399c-4592-99b9-66b9316f1f9e",
+"67287d5c-8893-464c-9c1a-41c7df87595c",
+"7a2a0e2b-63b0-4218-95ed-659fb0c723ea",
+"d4767db0-fd62-4878-b706-7a1b2b1038b5",
+"b3e43294-49e2-4623-8da5-e5f0139ba5ed",
+"0e691f64-47cb-4c6d-b0a7-9ab9d2721e04",
+"034601a1-ae63-46d4-8da6-d4be54a75205",
+"b4ef9116-fbfa-4f6e-9d79-7742ce7f18a0",
+"151a6e15-b6eb-4c5a-878d-a33f0bbff6f7",
+"337a3c6c-4a4c-47e7-b5a4-bb6905e6e61c",
+"db59c6ef-371f-4c92-8cf1-937b189dd917",
+"85019eff-fb71-4c21-9ffa-a699c9762671",
+"770b3680-9962-4f87-850d-1b779c68b39f",
+"7a8e0094-28d8-4645-aa51-3a3924a9f42b",
+"e4fd1bcc-af36-4e1e-bb9b-746f22ab974f",
+"f321a195-b6b9-40a3-b296-7b80f52f2909",
+"9e03ddbf-9587-4200-8b3f-35f023718a7e",
+"a26491db-4057-4f0c-bfc5-17be4ed06a79",
+"2aa0474d-93ba-4583-afa4-f298324ea947",
+"da022be3-af6a-4968-98ac-6ebcfb9b2987",
+"642851dc-a50a-4bf2-824b-2720ee2c59e5",
+"6456ae3a-0b5c-4722-a250-f3e319d30005",
+"04e9374f-5981-453c-9977-8cd2d284f01c",
+"c802bc4d-400a-421b-b847-132d5d593797",
+"99d6d0fa-a317-4aa9-b073-78933eb2ba86",
+"46360a31-6346-4704-bb1d-b043b95b9256",
+"4aefbe70-f741-46e9-94db-0186d70e9d84",
+"ee57ec1d-8217-4b9f-bf44-c7c3e472adfe",
+"ef55d6f1-12cf-4ef5-a1c7-66915f3844b3",
+"c4e96bff-dbc8-4522-8d04-6165eaff15f7",
+"673ccfaa-11b5-4de4-8ebc-d21c5547ac11",
+"834a774b-2aa1-42a0-9b23-04de2eb2d298",
+"c95f2838-3b9b-4c2c-95d6-0d2a903111b7",
+"2a1fadea-a5d0-4581-8589-727bf4e37a1c",
+"20f9585e-cd09-4647-aafa-7ec542ac48cb",
+"577b199b-5347-48e9-aa6a-998f366240fa",
+"0b1fb18e-d18b-4946-88c4-67f74700ccac",
+"464d2209-f330-46c7-a372-bd21c3f0df07",
+"8d8a8a96-f055-4377-82ed-eb66ecf18206",
+"049b182c-e1cf-44e4-a486-cf5fcc3fdac4",
+"13b75ec0-2813-4c30-bcb6-845ffcaf4a2e",
+"5408272f-84f1-4a76-97f1-a00a7731f4b9",
+"cb759c8e-7e91-493c-82ca-4efe2e7b16c2",
+"6832a4f8-e66c-44d9-b2a5-01ed235aabd4",
+"5b320de3-b87e-4c6c-a90a-9d906dd33925",
+"b2cab756-603a-4597-9e60-0b65508e211e",
+"599c93ad-99ad-4f1d-98af-af4324f9b845",
+"48898888-1fe1-4ce9-81d0-de9399811f4b",
+"7e7445c4-f914-404f-a403-d580bb856960",
+"77f59b23-78f0-4408-bce7-50c6d74c292d",
+"4acb7a12-0c0a-472c-8470-3e33acf93a57",
+"71bfe8ca-48eb-4e3b-93de-7222fa257fc0",
+"31285e0e-8e63-43de-a4e1-abed62c16289",
+"64914b3f-6446-49bd-9c24-7ef5868d851b",
+"024c7926-7ce6-4ccf-a02a-9fcdb42c181e",
+"e0ebe926-2afd-4c2b-b23d-0bc5bc30ec33",
+"a04c4591-163a-418e-b7ba-b9a5e6e427fe",
+"1bb1367d-cae5-41dd-bdf2-2829a12d9a61",
+"63445682-376b-4805-8430-61a9f360c8dd",
+"c22d12d2-8ad6-4bc5-962a-b98d9a6f9158",
+"d433af5e-7ef0-4a33-8ef4-e81ef8d04ba4",
+"da891d8a-bc4f-41d8-a934-e956b5ed822e",
+"04ad577e-474d-432a-b4f5-76f3f5b77f9a",
+"c125dc08-69f2-4b18-bcee-9cc6dc41d9c1",
+"cb2b7351-04ad-48e8-a426-9fd780044f3c",
+"cae75ac0-1e66-4450-b39a-bb2bfbd8037c",
+"986db51f-db15-41bb-8a5b-b16668b31d44",
+"af7126d7-3fb4-4712-bc01-ebd7ccf7e580",
+"12cae222-51d0-4c6f-9922-216436a4ea5c",
+"9b75d75d-1108-41f2-999b-0210031ec2dd",
+"bbdf1b6f-b19a-4470-bc9c-2c60ffb533de",
+"afafc5da-ce60-4bd0-87c7-80c77b3e9d69",
+"caa27155-fb3e-4b34-bc0b-2529cd34bf9b",
+"a6022002-ad87-4508-b4c9-a4252cea8916",
+"ed82754e-1f79-4e6d-bc03-fd84b4c2a411",
+"2acfd337-adc9-437b-a174-acf90c4309d3",
+"48831e70-42af-4373-883c-d00c77c7aa05",
+"94f80bdd-8f80-4b9a-82e3-69994da28cf9",
+"983e904f-3532-4843-8bbb-e8da8d17efd8",
+"abd58c3b-f6a7-431d-b520-c5aac67e7416",
+"ee12d1a6-ba80-4fbd-b290-0b0eca814f97",
+"c497c037-aea4-4461-8989-601f8ad686f4",
+"989b4c39-8200-4370-9ec2-5a0b38b36e0e",
+"631ef38e-b509-47b8-aa29-f89747996d5d",
+"5abce3e7-16b2-4513-bd26-3b6818015730",
+"f7ea88ae-028c-46b5-94b5-c6f2faebae2e",
+"c98e1870-5033-47ac-8e44-fd3575581560",
+"c2572a17-43cd-402c-8519-4e572b49b61a",
+"f822062c-4315-47b0-aef1-8929ba705380",
+"63897368-8a20-4964-9ec4-1bcaaefde6b0",
+"237363c2-df39-40e2-861f-8f0818a4d5e1",
+"40c85fd7-de2a-4df7-9aa0-5c4578bdc676",
+"7154f9b9-922d-4b1d-9368-53b32f3730ed",
+"2f26b351-05b8-473b-ad6b-8565a99d03f3",
+"0360db61-319f-49f1-b13f-82b96d0f6e1c",
+"661bec80-593b-4515-9c68-cb9b00c42ee3",
+"40edcf65-3134-4e47-90c3-93f6d12a8ac3",
+"ff5e90c7-1cda-4a0b-87fa-423614ef6abc",
+"1309ffea-32d4-47e0-a880-54833ce5a35c",
+"c3da2ea2-2a11-44b8-b9b8-841244400dd1",
+"4c594ab4-3b10-4d1d-bad6-a248c5eaf845",
+"f2f6ef1c-4f91-4b8c-8a6d-a1bc32a016a4",
+"04a7992b-5ee8-4960-9359-9da7131780e9",
+"c218d9d0-0141-4748-887c-9662cf1d1d68",
+"becae72e-17b5-4d1a-a665-d64a1e97a621",
+"cdf72771-eb06-49c6-8d23-a9322eb54ea1",
+"b8ad9f52-ee1b-4f3a-9adf-db3c91a2e467",
+"06fe0a1a-1423-4c1c-b914-6b3dfcff2551",
+"14ba7d99-e93d-4861-bdd6-c09ff8524ad1",
+"2a263ad1-0972-4697-907d-72b7c1e54b2c",
+"f7a3908a-0b61-471d-9b24-b34460b89fb1",
+"baea07cd-a547-45b5-bb64-4cbf0f171fa8",
+"fc38e3c8-faa6-43ac-a66c-afdfd461d810",
+"88ef86a9-7e00-4a6b-a8f1-2c507b4873ec",
+"120755e9-cb3b-4a3d-8f88-3cdb12625eed",
+"44dc48d5-6b87-48b8-8da7-0f681122390e",
+"1ed8358e-8460-48f4-9e27-b55bc6b4aacf",
+"aa9f3460-430c-4f61-8259-58ced3554351",
+"a9d1afb5-c16b-41f9-abcf-80f198246b79",
+"f6e5db86-596a-4475-9299-d32d26e23290",
+"c3889947-ffec-41e9-ade2-89dd7af379e0",
+"dd2fa865-894f-450e-904d-2f683fa55b00",
+"17053837-37f8-4efc-9bef-8bce7955f8f3",
+"b7e08c12-18e2-4197-8b9a-b0571735f437",
+"321efa08-4a1e-4a2a-b889-1cc4830f6453",
+"357facaa-d550-4e0a-9cb9-d8fff35dcb72",
+"ea8d4a8f-9b34-49df-b31c-ce7911c3f0cd",
+"f70836cc-9064-413d-84fa-6a831ee16c44",
+"b7678625-8a3d-4583-8126-1479c471c7a4",
+"0e32150a-9c6a-489e-a49f-39bef1563c9d",
+"5ba00e12-a6d4-44b3-b294-80f9fb46ce71",
+"5e8de2df-067f-4770-802b-ae586a8916e0",
+"68a884e6-168c-44fa-b639-f52c29c3e9de",
+"c2436044-c2e6-4b7b-ae5c-5ebb4c819efc",
+"6e466f09-cd67-4704-b79c-876d2735b124",
+"033e17be-73f8-475c-8f98-ab61fdc8a0b1",
+"1ec4c50e-f913-4fcd-a7d6-ca6cdff96f54",
+"b69806b8-45be-40a0-b33d-d8e6baaa87e5",
+"6de3870d-5acb-40e9-9f0e-0c6cea141f7b",
+"c7fb94de-9555-489d-a1ae-051d9125b2ff",
+"894a3fd7-9b26-4ccb-96e0-b4d4ef5e85c9",
+"ed3244c4-c2c1-4882-82fb-18a7d33ddc0f",
+"12989ff4-c941-48e0-b48d-cbb832349cdd",
+"40d7d2fe-dd1e-4da4-b497-17aff4e60b80",
+"9291ca87-df43-4573-a13d-a64c5d239040",
+"2c41bcf8-0c73-4d22-9d0b-b4eda261abeb",
+"91363651-9494-4b83-941f-a6ad63ad8087",
+"1ea6d029-fd1d-45b6-bbf2-673377ccd7ae",
+"f438cf02-6c57-4bed-b645-6b9889ce971b",
+"0b11c0fb-aaf3-4f27-844a-b3afb3cbe3ff",
+"69d43047-f5ac-49e1-85c8-b2cdccbed80c",
+"e234cdc6-a762-4462-a4d0-7425db4a0815",
+"de778ec3-ed10-4c4a-b7c7-aacc60829f24",
+"88afd4c8-1edd-4e37-9b80-69979c372190",
+"a249af33-4dca-440f-8919-6e3646e0eab4",
+"908a529c-b455-43eb-b1b6-2ff5218ed6a6",
+"1977da1d-678d-4885-bcbc-01a994049d09",
+"5a798732-d411-4f2b-88c0-a7b0b136063e",
+"4fa2ad8b-581f-486b-8bf2-3321fde00024",
+"2c4d8911-8ef6-4f63-9ecb-c93c0836bbda",
+"75623292-48fd-434f-a3f7-ccbb3873ace8",
+"4392da61-91bc-46f5-975f-5b05c7bec2b8",
+"ee9a621f-e318-40f5-b758-c314b6ea9345",
+"d3fa50e8-e4dd-4817-8e81-59c6b0dd1db6",
+"29c38294-d7b2-4724-96b2-8438419d61b5",
+"18090d42-27a5-49ba-80d7-9d24b94d21b1",
+"4c795957-e1c5-4c5e-83ff-c7892ac4f4a8",
+"ae6b7a70-dd33-42d6-a904-7f3b88a78d9f",
+"4f8acb9c-1df1-40ce-a437-b7d8ba66297e",
+"83df76b7-dd07-4fe9-be28-47d54ea92080",
+"d33d0379-4344-45c9-ad4f-702e52b333d7",
+"440a6527-1653-47e8-9001-9b5327d22718",
+"6100de98-af3b-4248-ba0d-cff44c41829a",
+"9558d6cf-ed70-4627-b37e-1b7ee537e377",
+"40f236c1-59cd-49f2-ba07-84efba70c9c3",
+"76f4497b-e288-4413-9345-49a6df163363",
+"05fdf013-ac05-4b83-84f5-939f043d9b10",
+"88b01b13-d443-4f12-8269-274f6be40b66",
+"91072796-27a5-4f9a-a07c-90bc45153c2b",
+"7bc72e69-1114-43e7-abf6-baf989b8a03d",
+"a9cfcc4a-c427-4fd8-b5f5-a035812c3be3",
+"f4330318-4aa4-43b6-87d8-407b943fdd25",
+"95eed3e4-0d07-4954-aba8-01ce0aa0fb36",
+"7f98d1f0-7c4f-46bd-9ddd-1682fe65e5e7",
+"3cb192f4-f254-4304-bde0-329f4086c8f7",
+"cba31afb-a1f3-4387-a6ec-bfb9007ac079",
+"a79021b0-b1d3-4300-9787-46d71232ccdc",
+"4c23686e-a3d1-4fa8-847d-c0977f64c683",
+"25845247-a412-41d1-9544-9fc263bac7bd",
+"22027dae-f4b3-44ae-b883-bc15e741beb4",
+"85666636-e467-4522-9b1e-d3db10effd6b",
+"a4baf6ab-ff82-45a7-b581-3917fd708585",
+"3d499a5e-a705-4567-846d-5b85396db576",
+"e621deda-3aa9-4935-bf7a-8cc113d85fa8",
+"ec4ef59d-91eb-4342-bf96-af70459aa7f9",
+"68f09e33-5342-4b52-ae00-75e4fc5522d2",
+"58dd849b-2cb0-44ca-a270-cf3b6e796fa0",
+"fd02e770-f998-416b-b16b-3c999901c69b",
+"d3614335-69b4-4a7c-8485-f2f04d953e2e",
+"f61ee63a-7aca-40fb-a93c-07fcb6ff7c60",
+"c5f1c923-e7db-4a91-a950-9e3929fff292",
+"0fbf005e-c5d8-4853-a5f3-6ea00caaf6ca",
+"37391325-c959-4de6-bcd0-4fc87707c284",
+"3e684b30-65de-41e8-9922-ff220113487a",
+"d78e5736-329a-414f-b791-30006a962862",
+"469c09ba-0ed0-4606-a505-9259ac9936f7",
+"0d7a61f6-8901-4b7c-be49-02a754b15013",
+"c467d110-7898-4fc4-8ac8-72d2f877b008",
+"31c2929e-3f58-4002-93cf-8c27fdd9f921",
+"0ff6ef2c-8805-4ef5-9c36-aa2d07af69e2",
+"e231adb2-7f1b-4a60-a417-4bd96540881d",
+"c63c316b-9278-4a70-9b9f-2af9d468c9e8",
+"399f8b2e-6b51-4668-8211-a13e6cc6f51c",
+"2e85ae6a-4ab3-481f-84ad-6702bed85a62",
+"d7460b55-033f-409d-882d-a8f99772b04a",
+"e5f5fa69-9814-4b74-8f3e-7191af4253bc",
+"83ea7f73-dbca-46c9-b970-7cab3dfe2bd9",
+"9ade0a87-28d0-4ae4-aede-dd94bc9f92cf",
+"12dd1ebd-9726-496f-a9a5-1ed60c9f6125",
+"55518aff-8502-4cf7-9bf2-cd9b80fc14ad",
+"899ebcd5-f45c-4213-b91b-be5689288b5d",
+"ed8149fc-e2ed-4716-b4fc-64f363bbc51a",
+"401f5d48-7602-4a16-8ce6-ba19204b4bd2",
+"730dcf32-27ee-404a-bd75-ebc7dc70129a",
+"e9a70ad2-3637-43e6-abb4-075c2d06b735",
+"9d996036-1fc7-44d3-99c0-6f56fdf5ee90",
+"79e2774f-3ca6-432b-8d3f-a68959501438",
+"cf282c58-2f0b-49c7-83a5-9d058378106d",
+"f100dc86-25b4-46d2-8983-8e03d4231462",
+"9ec2dd79-c4b2-4fe9-9888-307aa665762f",
+"c001df63-08b6-4582-bd5c-55555fbce6de",
+"034fde66-b33c-4a2d-8468-fa0cf7f468b5",
+"5bbc478e-821c-484d-ad21-ca3eac1028e7",
+"624b268c-686c-4515-80f0-05c89a19b134",
+"5cb08177-42a3-4d28-b34b-73dec1a72cf0",
+"a7a7c788-92a9-4cce-852e-3c11a80a558e",
+"b330e92f-16f0-479e-b3c8-5afbb6b0b472",
+"4b9fb6ec-ecb7-4e86-b926-283b1b17cae2",
+"4bcdb9dc-01ba-41af-961c-56e71c6cc9b5",
+"bfe5a502-9dba-48bf-a365-0f60e21ac25c",
+"c06663dd-15c6-4726-91c2-0a0d53de26b7",
+"ce7d0556-2577-480e-ac43-003c4f771861",
+"a1fb1c15-3724-49b6-bf27-a0fc5cb7ec47",
+"915f749e-1e06-4cde-b32f-1f6eced5b130",
+"fd17532c-94a0-44e8-b142-95590d522f7f",
+"f10ca810-edf2-4945-8c41-ddd0693da274",
+"18aa0db2-0c0c-45f7-b5db-3cd800151d21",
+"83a35da3-dc4c-4e20-b62d-739fe037039e",
+"33f0809a-4535-4adc-af9d-9dcf9fa3e17d",
+"0a50db76-ac51-4a85-ae5b-6579e1c88b00",
+"e6fc11fe-fa3a-41ab-bd98-cb351e20d247",
+"c0ff76ca-d284-4bd7-ba5f-abcf591709ba",
+"aa39386f-140e-4268-951e-716faa1a7ebd",
+"ced081f5-e6ba-437a-8b91-3a257ac748ba",
+"1c6805ba-0d2c-4195-94ee-ddc71dd56894",
+"edcdef23-76fa-4b3a-b500-50a8923b4781",
+"66046cb5-c66b-465b-8588-2bebc19cf841",
+"1a7788ac-e6ec-4820-834b-b5fe9d2f8f71",
+"e6612df6-1e0c-4328-b223-ab8e5e10720d",
+"0de555b8-2a69-47ae-b2c1-17529c7bd293",
+"456ddec7-5edf-4bb9-8e7d-6cbe0fb1762a",
+"e15e5a79-4167-4d7e-870e-b54082c5081f",
+"bb65cce0-1a6d-4d1a-9f4b-9f98697bc0d9",
+"b7337395-3335-4989-a230-0ba4d148abed",
+"489cb63b-a4eb-4d42-a98a-76046932cbed",
+"926f5272-5ce5-4c1d-9db9-a66afcaec98c",
+"593aab52-9b89-4252-b9ac-09de2b2d6e1e",
+"fc291774-c70d-489d-8986-0d53ffdd8d22",
+"ad93aa26-a135-4216-a2e2-59ea8d69ba46",
+"5a1f6ded-7a90-4114-a8e4-374d7a698fce",
+"a8e4c85b-539c-4dd2-b069-d9e90f943353",
+"9052e430-e48e-4688-8cfc-ab57e551abe2",
+"a75e33d3-ee64-42b4-a1b7-8df3244158be",
+"42fdb8e9-6366-45f0-a943-82a5e2b8fcb4",
+"db1597c0-a67b-4617-b527-461b5cdf2d65",
+"ba499906-c064-4491-9703-8b37e50d59e8",
+"9ccb6c93-6aa4-4357-a8c8-5189bad2253b",
+"6906ebcd-f16c-49ac-87a1-2f541f387a14",
+"bc90379b-67e1-41c7-ab8c-77a6af993c89",
+"7163e578-9e4f-4d5f-a0f3-a06eb301a086",
+"a251d360-8946-43af-a3f2-7c503aa8598c",
+"ee18e3c9-f1fb-4d31-a8c3-24aedf5935b6",
+"878e8c15-d96a-43ae-98aa-a46e7630d575",
+"d3338072-a2af-49b0-8fdd-cbc6fe0cb7ef",
+"c06cce78-812a-4e3b-b03b-608f55219491",
+"244cffff-c1ae-4032-be7f-18652b91cb9b",
+"d8d5fcc7-f51b-42ba-9842-0324e68be7ac",
+"5998e1c7-7abb-4ab9-8907-7467c691b883",
+"2f415b98-ad0f-45d6-9c92-6d1e945c17f9",
+"ff38986c-5089-49cb-83aa-8da8d657475b",
+"01c499ba-99db-4714-beeb-0b2bd58116dc",
+"b7ab9c45-fea3-43c0-842d-67e290cdea25",
+"36fa80c5-abde-45eb-be34-20fd2e96916d",
+"0c2b0d64-a607-4e7b-8618-cdfe2851ae65",
+"2ddfa89c-dc7e-4c5e-89a8-f6e2815c6f03",
+"fc99462f-703a-4ec5-9e36-606bf88d8aee",
+"1b13bd02-8dfd-4496-93ee-4d7cff3a5d81",
+"0b9ded34-3967-4635-815a-92d1c8f41141",
+"77a1d683-8750-459c-b290-196e16dfacf8",
+"8da4ee29-464a-4d2b-8af2-6b1539bbd71f",
+"a1b91edc-da60-4fb6-bfb3-4663d30b97fa",
+"ee8dc204-7f92-4311-8d90-cf95b3f735fa",
+"dceaab9a-d62a-44f5-95d4-09e04910ccd6",
+"9d329098-f1e2-4043-8c01-779b62575868",
+"3fe2f7cb-32b3-4037-b97b-3a09f5820d7d",
+"b7365e19-7c0c-4ed6-842a-658b76704510",
+"12a1cdf9-2506-4a22-827c-4904376cb0ac",
+"5971176b-cd78-441f-aa6f-e20428e72f26",
+"acc1e122-6b8b-42c3-8489-a34e6a81cd6f",
+"76991922-2a73-4df4-bfe1-62a140f1d5ad",
+"c2f83ca6-8308-4e86-9085-88f836b14eb0",
+"f5bbf1b1-ed82-4e86-8aaa-ebb8e67a5c16",
+"66e18ade-2042-4d22-9ad7-7e203090e85f",
+"ffb204d1-9e9e-4eba-96b1-57989e4b4f14",
+"3f577571-d384-45a0-9b0b-dcb2944ca2a9",
+"9e8148d7-cb69-49b2-a44a-b7b15c8796b6",
+"0e2120d4-972a-4b16-9be0-72ed9c366599",
+"45ef67f2-fec9-422f-b684-5abe9d8744de",
+"4036f050-8404-4bf5-95e9-0be2c0fb79a4",
+"f2d06c06-3ff8-4417-878d-aa5949cbe26a",
+"213c22c8-a757-40c6-bedc-15f78d4a5f73",
+"38982671-590f-4e91-9c7d-41d37b9adbff",
+"59a0087d-5dcb-4f88-98c0-a077a96575d9",
+"7d9a81f3-9d5b-4e05-ac99-fbfdda5980a5",
+"2f41111f-3571-489f-b782-01be43eb1b37",
+"0d92a532-aad0-4159-a8c9-fb259bfa04f1",
+"6c965109-00e7-4539-bd8b-40bb758b67e4",
+"a17d6848-4fa9-4c04-bb4d-44ea5d40ce37",
+"68146370-aa09-4cbf-8c5e-d43b016950cb",
+"4a1c9e4c-500f-44ac-9613-e1623ba3ee4c",
+"59c4e100-4845-4ccc-925f-8f7a1c32bb08",
+"8184e557-2aa5-450b-be2e-9d64aa686e90",
+"f00b5b03-df85-4db6-a753-61d599ceab8d",
+"d61ee5a3-c2fa-44e9-ba02-a8d33361b690",
+"e02b77b0-7866-4e8a-aaf0-1c401c045e1e",
+"e93240a4-ceac-4758-98fd-22fba406cdcf",
+"462e2684-4e39-4a9a-bb74-d10c1a1577a9",
+"9ced83b9-3181-4b51-884f-d7f507974d4b",
+"9e2e0d43-5a3f-4d0a-88f9-38a3ea588b1d",
+"f65d9ec1-d33b-44c4-b006-0277631ec425",
+"0f69873b-1173-4281-94c6-7448e2d4c6a0",
+"64eb148a-65e2-4ec2-bd32-d723cab41499",
+"bc14d0cf-eb3e-4181-b1f4-22b7bd4abead",
+"e63dfec3-e7a4-4e77-b1a3-ae38d2cacade",
+"09afa220-4509-4b03-b4a6-323d5f7cc972",
+"12cd8c3a-749d-45cc-a59a-4ce9f61b2a7a",
+"bf7b727a-e99b-4966-ad10-0c45f6d82833",
+"e239445a-32b5-42eb-b20c-362fea7e2e69",
+"9479cb66-f3af-43b5-a6a3-caef45e87bf0",
+"d616193e-f292-4a97-9de1-a96c7399fe0b",
+"a00332fa-4d1c-4b0f-8ac3-e118781724c8",
+"c45ab63d-57f0-49e5-976a-4477f2129bf7",
+"72db9ed2-2c25-4252-803f-ce292a6f93eb",
+"c6930c25-4bb6-427a-9b61-94e36ffd9f0b",
+"5ee94a15-1c2b-4791-84fb-54eca94f0966",
+"f0a00011-3b69-4d1e-9723-aff8d73a951b",
+"9bf90913-ab3e-448c-a701-df43bddd3c18",
+"7a3d04dd-c35a-43f4-86e8-de5c5b4e2802",
+"a5eb130c-171e-4b77-bd99-f738672ec1be",
+"3d3ccf84-2b33-427b-8df9-8c6de85f7b9c",
+"9b2195fd-4b86-4f63-9cb4-866a23ef9acc",
+"2c97bf8f-fd9e-4a99-8f33-0c006253453f",
+"86c3225b-bd2b-40a8-9a84-53cf4ef23848",
+"12f70fb2-637a-4190-91dd-b2172e6afc81",
+"c22789ae-841b-499d-ab0f-39d930809a81",
+"0890aae5-5ace-45a5-88ce-29435e559e00",
+"fbb2974a-4f80-4e7a-a90c-7d5a4e4a9a03",
+"f3fb8bcc-d5bb-48f4-a2dd-3eea51e9deb5",
+"e8215287-1849-401a-b6cc-b0367261ef3d",
+"365e2102-b4f5-479e-a2c1-cff6ed75ed7f",
+"dcd0ee9d-5ac4-4a5e-a833-9018e20427d7",
+"b681abcc-1cef-41b9-a936-043c26ae6bb9",
+"d16fa14a-8443-4c90-b4c3-e6e4200e0dbe",
+"4460adc3-3978-4020-a58e-c7fa5584600d",
+"e6188c76-0977-4cdd-98b9-520d80eb218a",
+"c304a73d-defa-4c9d-bac6-79f2a89e237c",
+"dcf6dc9d-9155-46e7-9e6b-239b61a24734",
+"5da1697f-7896-444c-9e84-5ba7318ec627",
+"a3eba79a-0c61-43bf-b3e3-43b9a8cbcc8a",
+"89a8c61b-3ca7-45e5-ba9b-f9daed1180fa",
+"fb15bc56-eb33-4d93-89ba-cf0fbaf1c651",
+"49426fb5-9e95-4e1f-ba3d-4134032945c1",
+"bdd60408-30f9-4a65-b14a-9b1bef42a7e7",
+"56af9543-cc8e-4d15-ab69-a286c4b84f02",
+"7de842d9-5482-4b3a-bffc-d01d8d683dfd",
+"4b9f55d5-448e-413b-842d-8922799099c7",
+"7c5720ba-40f7-4cf1-980e-50e608d84679",
+"363a8d96-38df-4c90-8c44-d6f6cb956c8f",
+"1bfd8d39-ef05-4161-a0e8-1f52f0ef6f00",
+"706093f4-090c-4238-9a07-ed187e158cd2",
+"b97ac18a-f6d6-4b1b-9e0f-f1059dadac91",
+"1c4b54f6-ee34-43e3-baf6-a83d3baef2c9",
+"b883069c-a41d-4274-b8a4-72bfb510b6a2",
+"f6fb2fc2-d5d9-4d9e-a448-bba616201ed5",
+"09cccc5f-c352-4245-9413-8deb63fe6bf4",
+"50771f13-55ab-4dac-a32e-60aad558504b",
+"ec7b060a-2e8a-496f-b6d4-71ea99dbf914",
+"40c509f9-5f1c-42b8-8dff-514611901ec7",
+"d97736b8-54c6-49b8-9db0-6d2616aa92ae",
+"a9a4e820-671a-458e-91b5-a1e760de06bb",
+"20567586-7216-43f7-bb8c-4dec9523d017",
+"9b1b0c1e-2ff9-4308-94a9-ff344ce5f03d",
+"298631ef-e020-470d-8fdf-96524796d453",
+"d8f4c95c-e63d-4d02-bb7a-fe881a5a980f",
+"06a9fff2-0867-4410-9f1f-26ab68f6eeb4",
+"1231beb6-f3fd-40f7-b88d-fac2106b57cf",
+"04ded7ef-a29d-4811-b95c-2c16c90813f4",
+"2cde02cc-8d0a-4a18-b237-48a163ad43be",
+"5aa04022-34db-456e-a6ea-2bf1eb3c4838",
+"3fd4d505-fd63-4d0c-9137-f74601faf99b",
+"1b040bde-fb88-46c9-abd8-374b064ed6e5",
+"14f774f3-fab5-4c1d-90fc-809c947e58d4",
+"1091ed20-4584-420e-aaba-f55a2a7a3284",
+"33b98f49-c665-42df-8b9b-82efff9a5feb",
+"5191373b-1064-446c-8377-9787c5e2894c",
+"30891ec6-2936-4261-9825-7dd3bbd49ca2",
+"57fde909-9f15-4c66-bac6-c96ae0f45c32",
+"b0022586-7c37-4818-a028-c811f79d0d4b",
+"68a5fc37-4f19-47ca-95f4-ae9f195acc85",
+"7c1e1cf7-206e-400b-819a-86cb12f8eb5c",
+"31ce6589-dceb-4511-b3ab-d2c0402c2373",
+"d1a617df-92f1-43b9-b745-dfa68aa939c4",
+"39ac0c77-6586-4d48-9c21-9624720b2c33",
+"1a72b1d9-3f8f-4a0b-bfe1-1b1d65011a4b",
+"663050fd-c8a5-4e80-875b-ed1e848ebe01",
+"0c41e358-4f8e-46c8-b3f3-1bc6021fd1e0",
+"a3c83b90-547f-40bf-91f7-a1ac85c139b4",
+"ab2fb4ba-3931-48a5-bce3-0b248b385474",
+"8fd5e74c-5792-4098-9010-7925403c2f7c",
+"b64bfa20-1027-4bc9-ad02-6fdca7f6a9c9",
+"fdd2672d-a93c-4041-ae3e-6a55cb7a0fe7",
+"2246653f-476e-40aa-a426-246658630938",
+"ec0fb2d6-d7c5-4fd7-b800-bd69eb0cc392",
+"2d17a598-7fec-47f2-afe0-9a2485ec3e79",
+"1d6cdf4e-539d-42fa-a65f-7ac0a5560a03",
+"76d46f6e-4a6c-41d9-a1c9-09c41682b548",
+"c151c75c-29d7-41b5-ad0d-fdd2818ba6d6",
+"f6944ab5-bcae-4bcd-8322-b96a5dbf1923",
+"8eedf5b7-fe46-4fce-b4f0-61e9cc0ec182",
+"6cc7897e-a14e-4d12-89b5-f575d5ae74d1",
+"12517a7b-ea13-4829-8c8c-e1ae235e9a39",
+]
var schoolNameToCloneTo = 'Anthology Internal';
function wait(ms) {
diff --git a/Scripts/node_modules/.bin/browsers b/Scripts/node_modules/.bin/browsers
new file mode 120000
index 00000000..645bb71a
--- /dev/null
+++ b/Scripts/node_modules/.bin/browsers
@@ -0,0 +1 @@
+../@puppeteer/browsers/lib/cjs/main-cli.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/escodegen b/Scripts/node_modules/.bin/escodegen
new file mode 120000
index 00000000..01a7c325
--- /dev/null
+++ b/Scripts/node_modules/.bin/escodegen
@@ -0,0 +1 @@
+../escodegen/bin/escodegen.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/esgenerate b/Scripts/node_modules/.bin/esgenerate
new file mode 120000
index 00000000..7d0293e6
--- /dev/null
+++ b/Scripts/node_modules/.bin/esgenerate
@@ -0,0 +1 @@
+../escodegen/bin/esgenerate.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/esparse b/Scripts/node_modules/.bin/esparse
new file mode 120000
index 00000000..7423b18b
--- /dev/null
+++ b/Scripts/node_modules/.bin/esparse
@@ -0,0 +1 @@
+../esprima/bin/esparse.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/esvalidate b/Scripts/node_modules/.bin/esvalidate
new file mode 120000
index 00000000..16069eff
--- /dev/null
+++ b/Scripts/node_modules/.bin/esvalidate
@@ -0,0 +1 @@
+../esprima/bin/esvalidate.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/extract-zip b/Scripts/node_modules/.bin/extract-zip
new file mode 120000
index 00000000..af9b5611
--- /dev/null
+++ b/Scripts/node_modules/.bin/extract-zip
@@ -0,0 +1 @@
+../extract-zip/cli.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/js-yaml b/Scripts/node_modules/.bin/js-yaml
new file mode 120000
index 00000000..9dbd010d
--- /dev/null
+++ b/Scripts/node_modules/.bin/js-yaml
@@ -0,0 +1 @@
+../js-yaml/bin/js-yaml.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.bin/puppeteer b/Scripts/node_modules/.bin/puppeteer
new file mode 120000
index 00000000..a5269bcd
--- /dev/null
+++ b/Scripts/node_modules/.bin/puppeteer
@@ -0,0 +1 @@
+../puppeteer/lib/esm/puppeteer/node/cli.js
\ No newline at end of file
diff --git a/Scripts/node_modules/.package-lock.json b/Scripts/node_modules/.package-lock.json
new file mode 100644
index 00000000..cecae184
--- /dev/null
+++ b/Scripts/node_modules/.package-lock.json
@@ -0,0 +1,1122 @@
+{
+ "name": "Scripts",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "node_modules/@babel/code-frame": {
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
+ "dependencies": {
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@puppeteer/browsers": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz",
+ "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==",
+ "dependencies": {
+ "debug": "4.3.4",
+ "extract-zip": "2.0.1",
+ "progress": "2.0.3",
+ "proxy-agent": "6.3.1",
+ "tar-fs": "3.0.4",
+ "unbzip2-stream": "1.4.3",
+ "yargs": "17.7.2"
+ },
+ "bin": {
+ "browsers": "lib/cjs/main-cli.js"
+ },
+ "engines": {
+ "node": ">=16.3.0"
+ }
+ },
+ "node_modules/@tootallnate/quickjs-emscripten": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz",
+ "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="
+ },
+ "node_modules/@types/node": {
+ "version": "20.10.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
+ "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
+ "optional": true,
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/yauzl": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz",
+ "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==",
+ "optional": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "node_modules/ast-types": {
+ "version": "0.13.4",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz",
+ "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==",
+ "dependencies": {
+ "tslib": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/b4a": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz",
+ "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw=="
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/basic-ftp": {
+ "version": "5.0.4",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.4.tgz",
+ "integrity": "sha512-8PzkB0arJFV4jJWSGOYR+OEic6aeKMu/osRhBULN6RY0ykby6LKhbmuQ5ublvaas5BOwboah5D87nrHyuh8PPA==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-crc32": {
+ "version": "0.2.13",
+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
+ "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chromium-bidi": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.2.tgz",
+ "integrity": "sha512-PbVOSddxgKyj+JByqavWMNqWPCoCaT6XK5Z1EFe168sxnB/BM51LnZEPXSbFcFAJv/+u2B4XNTs9uXxy4GW3cQ==",
+ "dependencies": {
+ "mitt": "3.0.1",
+ "urlpattern-polyfill": "9.0.0"
+ },
+ "peerDependencies": {
+ "devtools-protocol": "*"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "node_modules/cosmiconfig": {
+ "version": "8.3.6",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
+ "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
+ "dependencies": {
+ "import-fresh": "^3.3.0",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.2.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.9.5"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/cross-fetch": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz",
+ "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==",
+ "dependencies": {
+ "node-fetch": "^2.6.12"
+ }
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.1.tgz",
+ "integrity": "sha512-MZd3VlchQkp8rdend6vrx7MmVDJzSNTBvghvKjirLkD+WTChA3KUf0jkE68Q4UyctNqI11zZO9/x2Yx+ub5Cvg==",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/degenerator": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz",
+ "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==",
+ "dependencies": {
+ "ast-types": "^0.13.4",
+ "escodegen": "^2.1.0",
+ "esprima": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/devtools-protocol": {
+ "version": "0.0.1203626",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1203626.tgz",
+ "integrity": "sha512-nEzHZteIUZfGCZtTiS1fRpC8UZmsfD1SiyPvaUNvS13dvKf666OAm8YTi0+Ca3n1nLEyu49Cy4+dPWpaHFJk9g=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dependencies": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extract-zip": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "get-stream": "^5.1.0",
+ "yauzl": "^2.10.0"
+ },
+ "bin": {
+ "extract-zip": "cli.js"
+ },
+ "engines": {
+ "node": ">= 10.17.0"
+ },
+ "optionalDependencies": {
+ "@types/yauzl": "^2.9.1"
+ }
+ },
+ "node_modules/fast-fifo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+ "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
+ },
+ "node_modules/fd-slicer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
+ "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
+ "dependencies": {
+ "pend": "~1.2.0"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-stream": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "dependencies": {
+ "pump": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/get-uri": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz",
+ "integrity": "sha512-5KLucCJobh8vBY1K07EFV4+cPZH3mrV9YeAruUseCQKHB58SGjjT2l9/eA9LD082IiuMjSlFJEcdJ27TXvbZNw==",
+ "dependencies": {
+ "basic-ftp": "^5.0.2",
+ "data-uri-to-buffer": "^6.0.0",
+ "debug": "^4.3.4",
+ "fs-extra": "^8.1.0"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz",
+ "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==",
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ip": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg=="
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
+ },
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/netmask": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz",
+ "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==",
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/pac-proxy-agent": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz",
+ "integrity": "sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==",
+ "dependencies": {
+ "@tootallnate/quickjs-emscripten": "^0.23.0",
+ "agent-base": "^7.0.2",
+ "debug": "^4.3.4",
+ "get-uri": "^6.0.1",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.2",
+ "pac-resolver": "^7.0.0",
+ "socks-proxy-agent": "^8.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/pac-resolver": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.0.tgz",
+ "integrity": "sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==",
+ "dependencies": {
+ "degenerator": "^5.0.0",
+ "ip": "^1.1.8",
+ "netmask": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
+ },
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/proxy-agent": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz",
+ "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "^4.3.4",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.2",
+ "lru-cache": "^7.14.1",
+ "pac-proxy-agent": "^7.0.1",
+ "proxy-from-env": "^1.1.0",
+ "socks-proxy-agent": "^8.0.2"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
+ "node_modules/pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "node_modules/puppeteer": {
+ "version": "21.7.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.7.0.tgz",
+ "integrity": "sha512-Yy+UUy0b9siJezbhHO/heYUoZQUwyqDK1yOQgblTt0l97tspvDVFkcW9toBlnSvSfkDmMI3Dx9cZL6R8bDArHA==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@puppeteer/browsers": "1.9.1",
+ "cosmiconfig": "8.3.6",
+ "puppeteer-core": "21.7.0"
+ },
+ "bin": {
+ "puppeteer": "lib/esm/puppeteer/node/cli.js"
+ },
+ "engines": {
+ "node": ">=16.13.2"
+ }
+ },
+ "node_modules/puppeteer-core": {
+ "version": "21.7.0",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.7.0.tgz",
+ "integrity": "sha512-elPYPozrgiM3phSy7VDUJCVWQ07SPnOm78fpSaaSNFoQx5sur/MqhTSro9Wz8lOEjqCykGC6WRkwxDgmqcy1dQ==",
+ "dependencies": {
+ "@puppeteer/browsers": "1.9.1",
+ "chromium-bidi": "0.5.2",
+ "cross-fetch": "4.0.0",
+ "debug": "4.3.4",
+ "devtools-protocol": "0.0.1203626",
+ "ws": "8.16.0"
+ },
+ "engines": {
+ "node": ">=16.13.2"
+ }
+ },
+ "node_modules/queue-tick": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
+ "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks-proxy-agent": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz",
+ "integrity": "sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==",
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "^4.3.4",
+ "socks": "^2.7.1"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/socks/node_modules/ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "optional": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/streamx": {
+ "version": "2.15.6",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz",
+ "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==",
+ "dependencies": {
+ "fast-fifo": "^1.1.0",
+ "queue-tick": "^1.0.1"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/tar-fs": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz",
+ "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==",
+ "dependencies": {
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^3.1.5"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz",
+ "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==",
+ "dependencies": {
+ "b4a": "^1.6.4",
+ "fast-fifo": "^1.2.0",
+ "streamx": "^2.15.0"
+ }
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/unbzip2-stream": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
+ "dependencies": {
+ "buffer": "^5.2.1",
+ "through": "^2.3.8"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "optional": true
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/urlpattern-polyfill": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz",
+ "integrity": "sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g=="
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "node_modules/ws": {
+ "version": "8.16.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
+ "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yauzl": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
+ "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
+ "dependencies": {
+ "buffer-crc32": "~0.2.3",
+ "fd-slicer": "~1.1.0"
+ }
+ }
+ }
+}
diff --git a/Scripts/node_modules/@babel/code-frame/LICENSE b/Scripts/node_modules/@babel/code-frame/LICENSE
new file mode 100644
index 00000000..f31575ec
--- /dev/null
+++ b/Scripts/node_modules/@babel/code-frame/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Scripts/node_modules/@babel/code-frame/README.md b/Scripts/node_modules/@babel/code-frame/README.md
new file mode 100644
index 00000000..71607551
--- /dev/null
+++ b/Scripts/node_modules/@babel/code-frame/README.md
@@ -0,0 +1,19 @@
+# @babel/code-frame
+
+> Generate errors that contain a code frame that point to source locations.
+
+See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save-dev @babel/code-frame
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/code-frame --dev
+```
diff --git a/Scripts/node_modules/@babel/code-frame/lib/index.js b/Scripts/node_modules/@babel/code-frame/lib/index.js
new file mode 100644
index 00000000..2f900eba
--- /dev/null
+++ b/Scripts/node_modules/@babel/code-frame/lib/index.js
@@ -0,0 +1,157 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.codeFrameColumns = codeFrameColumns;
+exports.default = _default;
+var _highlight = require("@babel/highlight");
+var _chalk = _interopRequireWildcard(require("chalk"), true);
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+let chalkWithForcedColor = undefined;
+function getChalk(forceColor) {
+ if (forceColor) {
+ var _chalkWithForcedColor;
+ (_chalkWithForcedColor = chalkWithForcedColor) != null ? _chalkWithForcedColor : chalkWithForcedColor = new _chalk.default.constructor({
+ enabled: true,
+ level: 1
+ });
+ return chalkWithForcedColor;
+ }
+ return _chalk.default;
+}
+let deprecationWarningShown = false;
+function getDefs(chalk) {
+ return {
+ gutter: chalk.grey,
+ marker: chalk.red.bold,
+ message: chalk.red.bold
+ };
+}
+const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
+function getMarkerLines(loc, source, opts) {
+ const startLoc = Object.assign({
+ column: 0,
+ line: -1
+ }, loc.start);
+ const endLoc = Object.assign({}, startLoc, loc.end);
+ const {
+ linesAbove = 2,
+ linesBelow = 3
+ } = opts || {};
+ const startLine = startLoc.line;
+ const startColumn = startLoc.column;
+ const endLine = endLoc.line;
+ const endColumn = endLoc.column;
+ let start = Math.max(startLine - (linesAbove + 1), 0);
+ let end = Math.min(source.length, endLine + linesBelow);
+ if (startLine === -1) {
+ start = 0;
+ }
+ if (endLine === -1) {
+ end = source.length;
+ }
+ const lineDiff = endLine - startLine;
+ const markerLines = {};
+ if (lineDiff) {
+ for (let i = 0; i <= lineDiff; i++) {
+ const lineNumber = i + startLine;
+ if (!startColumn) {
+ markerLines[lineNumber] = true;
+ } else if (i === 0) {
+ const sourceLength = source[lineNumber - 1].length;
+ markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];
+ } else if (i === lineDiff) {
+ markerLines[lineNumber] = [0, endColumn];
+ } else {
+ const sourceLength = source[lineNumber - i].length;
+ markerLines[lineNumber] = [0, sourceLength];
+ }
+ }
+ } else {
+ if (startColumn === endColumn) {
+ if (startColumn) {
+ markerLines[startLine] = [startColumn, 0];
+ } else {
+ markerLines[startLine] = true;
+ }
+ } else {
+ markerLines[startLine] = [startColumn, endColumn - startColumn];
+ }
+ }
+ return {
+ start,
+ end,
+ markerLines
+ };
+}
+function codeFrameColumns(rawLines, loc, opts = {}) {
+ const highlighted = (opts.highlightCode || opts.forceColor) && (0, _highlight.shouldHighlight)(opts);
+ const chalk = getChalk(opts.forceColor);
+ const defs = getDefs(chalk);
+ const maybeHighlight = (chalkFn, string) => {
+ return highlighted ? chalkFn(string) : string;
+ };
+ const lines = rawLines.split(NEWLINE);
+ const {
+ start,
+ end,
+ markerLines
+ } = getMarkerLines(loc, lines, opts);
+ const hasColumns = loc.start && typeof loc.start.column === "number";
+ const numberMaxWidth = String(end).length;
+ const highlightedLines = highlighted ? (0, _highlight.default)(rawLines, opts) : rawLines;
+ let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => {
+ const number = start + 1 + index;
+ const paddedNumber = ` ${number}`.slice(-numberMaxWidth);
+ const gutter = ` ${paddedNumber} |`;
+ const hasMarker = markerLines[number];
+ const lastMarkerLine = !markerLines[number + 1];
+ if (hasMarker) {
+ let markerLine = "";
+ if (Array.isArray(hasMarker)) {
+ const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " ");
+ const numberOfMarkers = hasMarker[1] || 1;
+ markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), " ", markerSpacing, maybeHighlight(defs.marker, "^").repeat(numberOfMarkers)].join("");
+ if (lastMarkerLine && opts.message) {
+ markerLine += " " + maybeHighlight(defs.message, opts.message);
+ }
+ }
+ return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line.length > 0 ? ` ${line}` : "", markerLine].join("");
+ } else {
+ return ` ${maybeHighlight(defs.gutter, gutter)}${line.length > 0 ? ` ${line}` : ""}`;
+ }
+ }).join("\n");
+ if (opts.message && !hasColumns) {
+ frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`;
+ }
+ if (highlighted) {
+ return chalk.reset(frame);
+ } else {
+ return frame;
+ }
+}
+function _default(rawLines, lineNumber, colNumber, opts = {}) {
+ if (!deprecationWarningShown) {
+ deprecationWarningShown = true;
+ const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.";
+ if (process.emitWarning) {
+ process.emitWarning(message, "DeprecationWarning");
+ } else {
+ const deprecationError = new Error(message);
+ deprecationError.name = "DeprecationWarning";
+ console.warn(new Error(message));
+ }
+ }
+ colNumber = Math.max(colNumber, 0);
+ const location = {
+ start: {
+ column: colNumber,
+ line: lineNumber
+ }
+ };
+ return codeFrameColumns(rawLines, location, opts);
+}
+
+//# sourceMappingURL=index.js.map
diff --git a/Scripts/node_modules/@babel/code-frame/lib/index.js.map b/Scripts/node_modules/@babel/code-frame/lib/index.js.map
new file mode 100644
index 00000000..0882e00a
--- /dev/null
+++ b/Scripts/node_modules/@babel/code-frame/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_highlight","require","_chalk","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","chalkWithForcedColor","undefined","getChalk","forceColor","_chalkWithForcedColor","chalk","constructor","enabled","level","deprecationWarningShown","getDefs","gutter","grey","marker","red","bold","message","NEWLINE","getMarkerLines","loc","source","opts","startLoc","assign","column","line","start","endLoc","end","linesAbove","linesBelow","startLine","startColumn","endLine","endColumn","Math","max","min","length","lineDiff","markerLines","lineNumber","sourceLength","codeFrameColumns","rawLines","highlighted","highlightCode","shouldHighlight","defs","maybeHighlight","chalkFn","string","lines","split","hasColumns","numberMaxWidth","String","highlightedLines","highlight","frame","slice","map","index","number","paddedNumber","hasMarker","lastMarkerLine","markerLine","Array","isArray","markerSpacing","replace","numberOfMarkers","repeat","join","reset","_default","colNumber","process","emitWarning","deprecationError","Error","name","console","warn","location"],"sources":["../src/index.ts"],"sourcesContent":["import highlight, { shouldHighlight } from \"@babel/highlight\";\n\nimport chalk, { Chalk as ChalkClass, type ChalkInstance as Chalk } from \"chalk\";\n\nlet chalkWithForcedColor: Chalk = undefined;\nfunction getChalk(forceColor: boolean) {\n if (forceColor) {\n chalkWithForcedColor ??= process.env.BABEL_8_BREAKING\n ? new ChalkClass({ level: 1 })\n : // @ts-expect-error .Instance was .constructor in chalk 2\n new chalk.constructor({ enabled: true, level: 1 });\n return chalkWithForcedColor;\n }\n return chalk;\n}\n\nlet deprecationWarningShown = false;\n\ntype Location = {\n column: number;\n line: number;\n};\n\ntype NodeLocation = {\n end?: Location;\n start: Location;\n};\n\nexport interface Options {\n /** Syntax highlight the code as JavaScript for terminals. default: false */\n highlightCode?: boolean;\n /** The number of lines to show above the error. default: 2 */\n linesAbove?: number;\n /** The number of lines to show below the error. default: 3 */\n linesBelow?: number;\n /**\n * Forcibly syntax highlight the code as JavaScript (for non-terminals);\n * overrides highlightCode.\n * default: false\n */\n forceColor?: boolean;\n /**\n * Pass in a string to be displayed inline (if possible) next to the\n * highlighted location in the code. If it can't be positioned inline,\n * it will be placed above the code frame.\n * default: nothing\n */\n message?: string;\n}\n\n/**\n * Chalk styles for code frame token types.\n */\nfunction getDefs(chalk: Chalk) {\n return {\n gutter: chalk.grey,\n marker: chalk.red.bold,\n message: chalk.red.bold,\n };\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record
;\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array,\n opts: Options,\n): {\n start: number;\n end: number;\n markerLines: MarkerLines;\n} {\n const startLoc: Location = {\n column: 0,\n line: -1,\n ...loc.start,\n };\n const endLoc: Location = {\n ...startLoc,\n ...loc.end,\n };\n const { linesAbove = 2, linesBelow = 3 } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines: MarkerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return { start, end, markerLines };\n}\n\nexport function codeFrameColumns(\n rawLines: string,\n loc: NodeLocation,\n opts: Options = {},\n): string {\n const highlighted =\n (opts.highlightCode || opts.forceColor) && shouldHighlight(opts);\n const chalk = getChalk(opts.forceColor);\n const defs = getDefs(chalk);\n const maybeHighlight = (chalkFn: Chalk, string: string) => {\n return highlighted ? chalkFn(string) : string;\n };\n const lines = rawLines.split(NEWLINE);\n const { start, end, markerLines } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n\n const numberMaxWidth = String(end).length;\n\n const highlightedLines = highlighted ? highlight(rawLines, opts) : rawLines;\n\n let frame = highlightedLines\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n if (hasMarker) {\n let markerLine = \"\";\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line\n .slice(0, Math.max(hasMarker[0] - 1, 0))\n .replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n\n markerLine = [\n \"\\n \",\n maybeHighlight(defs.gutter, gutter.replace(/\\d/g, \" \")),\n \" \",\n markerSpacing,\n maybeHighlight(defs.marker, \"^\").repeat(numberOfMarkers),\n ].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + maybeHighlight(defs.message, opts.message);\n }\n }\n return [\n maybeHighlight(defs.marker, \">\"),\n maybeHighlight(defs.gutter, gutter),\n line.length > 0 ? ` ${line}` : \"\",\n markerLine,\n ].join(\"\");\n } else {\n return ` ${maybeHighlight(defs.gutter, gutter)}${\n line.length > 0 ? ` ${line}` : \"\"\n }`;\n }\n })\n .join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (highlighted) {\n return chalk.reset(frame);\n } else {\n return frame;\n }\n}\n\n/**\n * Create a code frame, adding line numbers, code highlighting, and pointing to a given position.\n */\n\nexport default function (\n rawLines: string,\n lineNumber: number,\n colNumber?: number | null,\n opts: Options = {},\n): string {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n\n const message =\n \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n // A string is directly supplied to emitWarning, because when supplying an\n // Error object node throws in the tests because of different contexts\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n\n const location: NodeLocation = {\n start: { column: colNumber, line: lineNumber },\n };\n\n return codeFrameColumns(rawLines, location, opts);\n}\n"],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/code-frame/package.json b/Scripts/node_modules/@babel/code-frame/package.json
new file mode 100644
index 00000000..46a9ba9d
--- /dev/null
+++ b/Scripts/node_modules/@babel/code-frame/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "@babel/code-frame",
+ "version": "7.23.5",
+ "description": "Generate errors that contain a code frame that point to source locations.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-code-frame",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-code-frame"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
+ },
+ "devDependencies": {
+ "import-meta-resolve": "^4.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/LICENSE b/Scripts/node_modules/@babel/helper-validator-identifier/LICENSE
new file mode 100644
index 00000000..f31575ec
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/README.md b/Scripts/node_modules/@babel/helper-validator-identifier/README.md
new file mode 100644
index 00000000..05c19e64
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/README.md
@@ -0,0 +1,19 @@
+# @babel/helper-validator-identifier
+
+> Validate identifier/keywords name
+
+See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save @babel/helper-validator-identifier
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/helper-validator-identifier
+```
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js b/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js
new file mode 100644
index 00000000..8ef83036
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js
@@ -0,0 +1,70 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isIdentifierChar = isIdentifierChar;
+exports.isIdentifierName = isIdentifierName;
+exports.isIdentifierStart = isIdentifierStart;
+let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
+let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
+const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
+const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
+nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
+const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
+const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
+function isInAstralSet(code, set) {
+ let pos = 0x10000;
+ for (let i = 0, length = set.length; i < length; i += 2) {
+ pos += set[i];
+ if (pos > code) return false;
+ pos += set[i + 1];
+ if (pos >= code) return true;
+ }
+ return false;
+}
+function isIdentifierStart(code) {
+ if (code < 65) return code === 36;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
+ }
+ return isInAstralSet(code, astralIdentifierStartCodes);
+}
+function isIdentifierChar(code) {
+ if (code < 48) return code === 36;
+ if (code < 58) return true;
+ if (code < 65) return false;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
+ }
+ return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
+}
+function isIdentifierName(name) {
+ let isFirst = true;
+ for (let i = 0; i < name.length; i++) {
+ let cp = name.charCodeAt(i);
+ if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {
+ const trail = name.charCodeAt(++i);
+ if ((trail & 0xfc00) === 0xdc00) {
+ cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
+ }
+ }
+ if (isFirst) {
+ isFirst = false;
+ if (!isIdentifierStart(cp)) {
+ return false;
+ }
+ } else if (!isIdentifierChar(cp)) {
+ return false;
+ }
+ }
+ return !isFirst;
+}
+
+//# sourceMappingURL=identifier.js.map
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map b/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
new file mode 100644
index 00000000..04370d4e
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","code","set","pos","i","length","isIdentifierStart","test","String","fromCharCode","isIdentifierChar","isIdentifierName","name","isFirst","cp","charCodeAt","trail"],"sources":["../src/identifier.ts"],"sourcesContent":["import * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.js`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.js`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n"],"mappings":";;;;;;;;AAWA,IAAIA,4BAA4B,GAAG,8qIAA8qI;AAEjtI,IAAIC,uBAAuB,GAAG,2lFAA2lF;AAEznF,MAAMC,uBAAuB,GAAG,IAAIC,MAAM,CACxC,GAAG,GAAGH,4BAA4B,GAAG,GACvC,CAAC;AACD,MAAMI,kBAAkB,GAAG,IAAID,MAAM,CACnC,GAAG,GAAGH,4BAA4B,GAAGC,uBAAuB,GAAG,GACjE,CAAC;AAEDD,4BAA4B,GAAGC,uBAAuB,GAAG,IAAI;AAQ7D,MAAMI,0BAA0B,GAAG,CAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,CAAC;AAEx+C,MAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,KAAK,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAA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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js b/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js
new file mode 100644
index 00000000..76b22822
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js
@@ -0,0 +1,57 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "isIdentifierChar", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierChar;
+ }
+});
+Object.defineProperty(exports, "isIdentifierName", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierName;
+ }
+});
+Object.defineProperty(exports, "isIdentifierStart", {
+ enumerable: true,
+ get: function () {
+ return _identifier.isIdentifierStart;
+ }
+});
+Object.defineProperty(exports, "isKeyword", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isKeyword;
+ }
+});
+Object.defineProperty(exports, "isReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictBindOnlyReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictBindOnlyReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictBindReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictBindReservedWord;
+ }
+});
+Object.defineProperty(exports, "isStrictReservedWord", {
+ enumerable: true,
+ get: function () {
+ return _keyword.isStrictReservedWord;
+ }
+});
+var _identifier = require("./identifier.js");
+var _keyword = require("./keyword.js");
+
+//# sourceMappingURL=index.js.map
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js.map b/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js.map
new file mode 100644
index 00000000..8f8a9134
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js b/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js
new file mode 100644
index 00000000..054cf847
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js
@@ -0,0 +1,35 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.isKeyword = isKeyword;
+exports.isReservedWord = isReservedWord;
+exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord;
+exports.isStrictBindReservedWord = isStrictBindReservedWord;
+exports.isStrictReservedWord = isStrictReservedWord;
+const reservedWords = {
+ keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
+ strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
+ strictBind: ["eval", "arguments"]
+};
+const keywords = new Set(reservedWords.keyword);
+const reservedWordsStrictSet = new Set(reservedWords.strict);
+const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
+function isReservedWord(word, inModule) {
+ return inModule && word === "await" || word === "enum";
+}
+function isStrictReservedWord(word, inModule) {
+ return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
+}
+function isStrictBindOnlyReservedWord(word) {
+ return reservedWordsStrictBindSet.has(word);
+}
+function isStrictBindReservedWord(word, inModule) {
+ return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
+}
+function isKeyword(word) {
+ return keywords.has(word);
+}
+
+//# sourceMappingURL=keyword.js.map
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map b/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
new file mode 100644
index 00000000..52a9e991
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/package.json b/Scripts/node_modules/@babel/helper-validator-identifier/package.json
new file mode 100644
index 00000000..67bddb4b
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "@babel/helper-validator-identifier",
+ "version": "7.22.20",
+ "description": "Validate identifier/keywords name",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-helper-validator-identifier"
+ },
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "main": "./lib/index.js",
+ "exports": {
+ ".": "./lib/index.js",
+ "./package.json": "./package.json"
+ },
+ "devDependencies": {
+ "@unicode/unicode-15.1.0": "^1.5.2",
+ "charcodes": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "author": "The Babel Team (https://babel.dev/team)",
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js b/Scripts/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
new file mode 100644
index 00000000..7f753a95
--- /dev/null
+++ b/Scripts/node_modules/@babel/helper-validator-identifier/scripts/generate-identifier-regex.js
@@ -0,0 +1,73 @@
+"use strict";
+
+// Always use the latest available version of Unicode!
+// https://tc39.github.io/ecma262/#sec-conformance
+const version = "15.1.0";
+
+const start = require(
+ "@unicode/unicode-" + version + "/Binary_Property/ID_Start/code-points.js"
+).filter(function (ch) {
+ return ch > 0x7f;
+});
+let last = -1;
+const cont = require(
+ "@unicode/unicode-" + version + "/Binary_Property/ID_Continue/code-points.js"
+).filter(function (ch) {
+ return ch > 0x7f && search(start, ch, last + 1) == -1;
+});
+
+function search(arr, ch, starting) {
+ for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) {
+ if (arr[i] === ch) return i;
+ }
+ return -1;
+}
+
+function pad(str, width) {
+ while (str.length < width) str = "0" + str;
+ return str;
+}
+
+function esc(code) {
+ const hex = code.toString(16);
+ if (hex.length <= 2) return "\\x" + pad(hex, 2);
+ else return "\\u" + pad(hex, 4);
+}
+
+function generate(chars) {
+ const astral = [];
+ let re = "";
+ for (let i = 0, at = 0x10000; i < chars.length; i++) {
+ const from = chars[i];
+ let to = from;
+ while (i < chars.length - 1 && chars[i + 1] == to + 1) {
+ i++;
+ to++;
+ }
+ if (to <= 0xffff) {
+ if (from == to) re += esc(from);
+ else if (from + 1 == to) re += esc(from) + esc(to);
+ else re += esc(from) + "-" + esc(to);
+ } else {
+ astral.push(from - at, to - from);
+ at = to;
+ }
+ }
+ return { nonASCII: re, astral: astral };
+}
+
+const startData = generate(start);
+const contData = generate(cont);
+
+console.log("/* prettier-ignore */");
+console.log('let nonASCIIidentifierStartChars = "' + startData.nonASCII + '";');
+console.log("/* prettier-ignore */");
+console.log('let nonASCIIidentifierChars = "' + contData.nonASCII + '";');
+console.log("/* prettier-ignore */");
+console.log(
+ "const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"
+);
+console.log("/* prettier-ignore */");
+console.log(
+ "const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"
+);
diff --git a/Scripts/node_modules/@babel/highlight/LICENSE b/Scripts/node_modules/@babel/highlight/LICENSE
new file mode 100644
index 00000000..f31575ec
--- /dev/null
+++ b/Scripts/node_modules/@babel/highlight/LICENSE
@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014-present Sebastian McKenzie and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/Scripts/node_modules/@babel/highlight/README.md b/Scripts/node_modules/@babel/highlight/README.md
new file mode 100644
index 00000000..4c2ec874
--- /dev/null
+++ b/Scripts/node_modules/@babel/highlight/README.md
@@ -0,0 +1,19 @@
+# @babel/highlight
+
+> Syntax highlight JavaScript strings for output in terminals.
+
+See our website [@babel/highlight](https://babeljs.io/docs/babel-highlight) for more information.
+
+## Install
+
+Using npm:
+
+```sh
+npm install --save-dev @babel/highlight
+```
+
+or using yarn:
+
+```sh
+yarn add @babel/highlight --dev
+```
diff --git a/Scripts/node_modules/@babel/highlight/lib/index.js b/Scripts/node_modules/@babel/highlight/lib/index.js
new file mode 100644
index 00000000..a45bc5a8
--- /dev/null
+++ b/Scripts/node_modules/@babel/highlight/lib/index.js
@@ -0,0 +1,105 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = highlight;
+exports.shouldHighlight = shouldHighlight;
+var _jsTokens = require("js-tokens");
+var _helperValidatorIdentifier = require("@babel/helper-validator-identifier");
+var _chalk = _interopRequireWildcard(require("chalk"), true);
+function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
+function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
+const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]);
+function getDefs(chalk) {
+ return {
+ keyword: chalk.cyan,
+ capitalized: chalk.yellow,
+ jsxIdentifier: chalk.yellow,
+ punctuator: chalk.yellow,
+ number: chalk.magenta,
+ string: chalk.green,
+ regex: chalk.magenta,
+ comment: chalk.grey,
+ invalid: chalk.white.bgRed.bold
+ };
+}
+const NEWLINE = /\r\n|[\n\r\u2028\u2029]/;
+const BRACKET = /^[()[\]{}]$/;
+let tokenize;
+{
+ const JSX_TAG = /^[a-z][\w-]*$/i;
+ const getTokenType = function (token, offset, text) {
+ if (token.type === "name") {
+ if ((0, _helperValidatorIdentifier.isKeyword)(token.value) || (0, _helperValidatorIdentifier.isStrictReservedWord)(token.value, true) || sometimesKeywords.has(token.value)) {
+ return "keyword";
+ }
+ if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) == "")) {
+ return "jsxIdentifier";
+ }
+ if (token.value[0] !== token.value[0].toLowerCase()) {
+ return "capitalized";
+ }
+ }
+ if (token.type === "punctuator" && BRACKET.test(token.value)) {
+ return "bracket";
+ }
+ if (token.type === "invalid" && (token.value === "@" || token.value === "#")) {
+ return "punctuator";
+ }
+ return token.type;
+ };
+ tokenize = function* (text) {
+ let match;
+ while (match = _jsTokens.default.exec(text)) {
+ const token = _jsTokens.matchToToken(match);
+ yield {
+ type: getTokenType(token, match.index, text),
+ value: token.value
+ };
+ }
+ };
+}
+function highlightTokens(defs, text) {
+ let highlighted = "";
+ for (const {
+ type,
+ value
+ } of tokenize(text)) {
+ const colorize = defs[type];
+ if (colorize) {
+ highlighted += value.split(NEWLINE).map(str => colorize(str)).join("\n");
+ } else {
+ highlighted += value;
+ }
+ }
+ return highlighted;
+}
+function shouldHighlight(options) {
+ return _chalk.default.level > 0 || options.forceColor;
+}
+let chalkWithForcedColor = undefined;
+function getChalk(forceColor) {
+ if (forceColor) {
+ var _chalkWithForcedColor;
+ (_chalkWithForcedColor = chalkWithForcedColor) != null ? _chalkWithForcedColor : chalkWithForcedColor = new _chalk.default.constructor({
+ enabled: true,
+ level: 1
+ });
+ return chalkWithForcedColor;
+ }
+ return _chalk.default;
+}
+{
+ exports.getChalk = options => getChalk(options.forceColor);
+}
+function highlight(code, options = {}) {
+ if (code !== "" && shouldHighlight(options)) {
+ const defs = getDefs(getChalk(options.forceColor));
+ return highlightTokens(defs, code);
+ } else {
+ return code;
+ }
+}
+
+//# sourceMappingURL=index.js.map
diff --git a/Scripts/node_modules/@babel/highlight/lib/index.js.map b/Scripts/node_modules/@babel/highlight/lib/index.js.map
new file mode 100644
index 00000000..5a178807
--- /dev/null
+++ b/Scripts/node_modules/@babel/highlight/lib/index.js.map
@@ -0,0 +1 @@
+{"version":3,"names":["_jsTokens","require","_helperValidatorIdentifier","_chalk","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","sometimesKeywords","Set","getDefs","chalk","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","number","magenta","string","green","regex","comment","grey","invalid","white","bgRed","bold","NEWLINE","BRACKET","tokenize","JSX_TAG","getTokenType","token","offset","text","type","isKeyword","value","isStrictReservedWord","test","slice","toLowerCase","match","jsTokens","exec","matchToToken","index","highlightTokens","defs","highlighted","colorize","split","map","str","join","shouldHighlight","options","level","forceColor","chalkWithForcedColor","undefined","getChalk","_chalkWithForcedColor","constructor","enabled","exports","highlight","code"],"sources":["../src/index.ts"],"sourcesContent":["/// \n\nimport type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport chalk, { Chalk as ChalkClass, type ChalkInstance as Chalk } from \"chalk\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n/**\n * Chalk styles for token types.\n */\nfunction getDefs(chalk: Chalk): Record {\n return {\n keyword: chalk.cyan,\n capitalized: chalk.yellow,\n jsxIdentifier: chalk.yellow,\n punctuator: chalk.yellow,\n number: chalk.magenta,\n string: chalk.green,\n regex: chalk.magenta,\n comment: chalk.grey,\n invalid: chalk.white.bgRed.bold,\n };\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) == \"\")\n ) {\n return \"jsxIdentifier\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"punctuator\" && BRACKET.test(token.value)) {\n return \"bracket\";\n }\n\n if (\n token.type === \"invalid\" &&\n (token.value === \"@\" || token.value === \"#\")\n ) {\n return \"punctuator\";\n }\n\n return token.type;\n };\n\n tokenize = function* (text: string) {\n let match;\n while ((match = (jsTokens as any).default.exec(text))) {\n const token = (jsTokens as any).matchToToken(match);\n\n yield {\n type: getTokenType(token, match.index, text),\n value: token.value,\n };\n }\n };\n}\n\n/**\n * Highlight `text` using the token definitions in `defs`.\n */\nfunction highlightTokens(defs: Record, text: string) {\n let highlighted = \"\";\n\n for (const { type, value } of tokenize(text)) {\n const colorize = defs[type];\n if (colorize) {\n highlighted += value\n .split(NEWLINE)\n .map(str => colorize(str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n\n/**\n * Highlight `text` using the token definitions in `defs`.\n */\n\ntype Options = {\n forceColor?: boolean;\n};\n\n/**\n * Whether the code should be highlighted given the passed options.\n */\nexport function shouldHighlight(options: Options): boolean {\n return chalk.level > 0 || options.forceColor;\n}\n\nlet chalkWithForcedColor: Chalk = undefined;\nfunction getChalk(forceColor: boolean) {\n if (forceColor) {\n chalkWithForcedColor ??= process.env.BABEL_8_BREAKING\n ? new ChalkClass({ level: 1 })\n : // @ts-expect-error .Instance was .constructor in chalk 2\n new chalk.constructor({ enabled: true, level: 1 });\n return chalkWithForcedColor;\n }\n return chalk;\n}\nif (!process.env.BABEL_8_BREAKING && !USE_ESM) {\n // eslint-disable-next-line no-restricted-globals\n exports.getChalk = (options: Options) => getChalk(options.forceColor);\n}\n\n/**\n * Highlight `code`.\n */\nexport default function highlight(code: string, options: Options = {}): string {\n if (code !== \"\" && shouldHighlight(options)) {\n const defs = getDefs(getChalk(options.forceColor));\n return highlightTokens(defs, code);\n } else {\n return code;\n }\n}\n"],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@babel/highlight/package.json b/Scripts/node_modules/@babel/highlight/package.json
new file mode 100644
index 00000000..640f8366
--- /dev/null
+++ b/Scripts/node_modules/@babel/highlight/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@babel/highlight",
+ "version": "7.23.4",
+ "description": "Syntax highlight JavaScript strings for output in terminals.",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-highlight",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-highlight"
+ },
+ "main": "./lib/index.js",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
+ "js-tokens": "^4.0.0"
+ },
+ "devDependencies": {
+ "strip-ansi": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/README.md b/Scripts/node_modules/@puppeteer/browsers/README.md
new file mode 100644
index 00000000..f5342126
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/README.md
@@ -0,0 +1,28 @@
+# @puppeteer/browsers
+
+Manage and launch browsers/drivers from a CLI or programmatically.
+
+## CLI
+
+Use `npx` to run the CLI:
+
+```bash
+npx @puppeteer/browsers --help
+```
+
+CLI help will provide all documentation you need to use the CLI.
+
+```bash
+npx @puppeteer/browsers --help # help for all commands
+npx @puppeteer/browsers install --help # help for the install command
+npx @puppeteer/browsers launch --help # help for the launch command
+```
+
+## Known limitations
+
+1. We support installing and running Firefox, Chrome and Chromium. The `latest`, `beta`, `dev`, `canary`, `stable` keywords are only supported for the install command. For the `launch` command you need to specify an exact build ID. The build ID is provided by the `install` command (see `npx @puppeteer/browsers install --help` for the format).
+2. Launching the system browsers is only possible for Chrome/Chromium.
+
+## API
+
+The programmatic API allows installing and launching browsers from your code. See the `test` folder for examples on how to use the `install`, `canInstall`, `launch`, `computeExecutablePath`, `computeSystemExecutablePath` and other methods.
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts
new file mode 100644
index 00000000..4c2d25b3
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts
@@ -0,0 +1,32 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+import * as readline from 'readline';
+import { type Browser } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare class CLI {
+ #private;
+ constructor(opts?: string | {
+ cachePath?: string;
+ scriptName?: string;
+ prefixCommand?: {
+ cmd: string;
+ description: string;
+ };
+ allowCachePathOverride?: boolean;
+ pinnedBrowsers?: Partial<{
+ [key in Browser]: string;
+ }>;
+ }, rl?: readline.Interface);
+ run(argv: string[]): Promise;
+}
+/**
+ * @public
+ */
+export declare function makeProgressCallback(browser: Browser, buildId: string): (downloadedBytes: number, totalBytes: number) => void;
+//# sourceMappingURL=CLI.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts.map
new file mode 100644
index 00000000..35044cf1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../src/CLI.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAGH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAOrC,OAAO,EAEL,KAAK,OAAO,EAGb,MAAM,gCAAgC,CAAC;AAmCxC;;GAEG;AACH,qBAAa,GAAG;;gBASZ,IAAI,CAAC,EACD,MAAM,GACN;QACE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC,CAAC;QACnD,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,cAAc,CAAC,EAAE,OAAO,CAAC;aAAE,GAAG,IAAI,OAAO,GAAG,MAAM;SAAC,CAAC,CAAC;KACtD,EACL,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS;IAwDnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA2OzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAqBvD"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js
new file mode 100644
index 00000000..0afcf2d7
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js
@@ -0,0 +1,276 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.makeProgressCallback = exports.CLI = void 0;
+const process_1 = require("process");
+const readline = __importStar(require("readline"));
+const progress_1 = __importDefault(require("progress"));
+const helpers_1 = require("yargs/helpers");
+const yargs_1 = __importDefault(require("yargs/yargs"));
+const browser_data_js_1 = require("./browser-data/browser-data.js");
+const Cache_js_1 = require("./Cache.js");
+const detectPlatform_js_1 = require("./detectPlatform.js");
+const install_js_1 = require("./install.js");
+const launch_js_1 = require("./launch.js");
+/**
+ * @public
+ */
+class CLI {
+ #cachePath;
+ #rl;
+ #scriptName = '';
+ #allowCachePathOverride = true;
+ #pinnedBrowsers;
+ #prefixCommand;
+ constructor(opts, rl) {
+ if (!opts) {
+ opts = {};
+ }
+ if (typeof opts === 'string') {
+ opts = {
+ cachePath: opts,
+ };
+ }
+ this.#cachePath = opts.cachePath ?? process.cwd();
+ this.#rl = rl;
+ this.#scriptName = opts.scriptName ?? '@puppeteer/browsers';
+ this.#allowCachePathOverride = opts.allowCachePathOverride ?? true;
+ this.#pinnedBrowsers = opts.pinnedBrowsers;
+ this.#prefixCommand = opts.prefixCommand;
+ }
+ #defineBrowserParameter(yargs) {
+ yargs.positional('browser', {
+ description: 'Which browser to install [@]. `latest` will try to find the latest available build. `buildId` is a browser-specific identifier such as a version or a revision.',
+ type: 'string',
+ coerce: (opt) => {
+ return {
+ name: this.#parseBrowser(opt),
+ buildId: this.#parseBuildId(opt),
+ };
+ },
+ });
+ }
+ #definePlatformParameter(yargs) {
+ yargs.option('platform', {
+ type: 'string',
+ desc: 'Platform that the binary needs to be compatible with.',
+ choices: Object.values(browser_data_js_1.BrowserPlatform),
+ defaultDescription: 'Auto-detected',
+ });
+ }
+ #definePathParameter(yargs, required = false) {
+ if (!this.#allowCachePathOverride) {
+ return;
+ }
+ yargs.option('path', {
+ type: 'string',
+ desc: 'Path to the root folder for the browser downloads and installation. The installation folder structure is compatible with the cache structure used by Puppeteer.',
+ defaultDescription: 'Current working directory',
+ ...(required ? {} : { default: process.cwd() }),
+ });
+ if (required) {
+ yargs.demandOption('path');
+ }
+ }
+ async run(argv) {
+ const yargsInstance = (0, yargs_1.default)((0, helpers_1.hideBin)(argv));
+ let target = yargsInstance.scriptName(this.#scriptName);
+ if (this.#prefixCommand) {
+ target = target.command(this.#prefixCommand.cmd, this.#prefixCommand.description, yargs => {
+ return this.#build(yargs);
+ });
+ }
+ else {
+ target = this.#build(target);
+ }
+ await target
+ .demandCommand(1)
+ .help()
+ .wrap(Math.min(120, yargsInstance.terminalWidth()))
+ .parse();
+ }
+ #build(yargs) {
+ const latestOrPinned = this.#pinnedBrowsers ? 'pinned' : 'latest';
+ return yargs
+ .command('install ', 'Download and install the specified browser. If successful, the command outputs the actual browser buildId that was installed and the absolute path to the browser executable (format: @ ).', yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('base-url', {
+ type: 'string',
+ desc: 'Base URL to download from',
+ });
+ yargs.example('$0 install chrome', `Install the ${latestOrPinned} available build of the Chrome browser.`);
+ yargs.example('$0 install chrome@latest', 'Install the latest available build for the Chrome browser.');
+ yargs.example('$0 install chrome@canary', 'Install the latest available build for the Chrome Canary browser.');
+ yargs.example('$0 install chrome@115', 'Install the latest available build for Chrome 115.');
+ yargs.example('$0 install chromedriver@canary', 'Install the latest available build for ChromeDriver Canary.');
+ yargs.example('$0 install chromedriver@115', 'Install the latest available build for ChromeDriver 115.');
+ yargs.example('$0 install chromedriver@115.0.5790', 'Install the latest available patch (115.0.5790.X) build for ChromeDriver.');
+ yargs.example('$0 install chrome-headless-shell', 'Install the latest available chrome-headless-shell build.');
+ yargs.example('$0 install chrome-headless-shell@beta', 'Install the latest available chrome-headless-shell build corresponding to the Beta channel.');
+ yargs.example('$0 install chrome-headless-shell@118', 'Install the latest available chrome-headless-shell 118 build.');
+ yargs.example('$0 install chromium@1083080', 'Install the revision 1083080 of the Chromium browser.');
+ yargs.example('$0 install firefox', 'Install the latest available build of the Firefox browser.');
+ yargs.example('$0 install firefox --platform mac', 'Install the latest Mac (Intel) build of the Firefox browser.');
+ if (this.#allowCachePathOverride) {
+ yargs.example('$0 install firefox --path /tmp/my-browser-cache', 'Install to the specified cache directory.');
+ }
+ }, async (argv) => {
+ const args = argv;
+ args.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ if (!args.platform) {
+ throw new Error(`Could not resolve the current platform`);
+ }
+ if (args.browser.buildId === 'pinned') {
+ const pinnedVersion = this.#pinnedBrowsers?.[args.browser.name];
+ if (!pinnedVersion) {
+ throw new Error(`No pinned version found for ${args.browser.name}`);
+ }
+ args.browser.buildId = pinnedVersion;
+ }
+ args.browser.buildId = await (0, browser_data_js_1.resolveBuildId)(args.browser.name, args.platform, args.browser.buildId);
+ await (0, install_js_1.install)({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ platform: args.platform,
+ cacheDir: args.path ?? this.#cachePath,
+ downloadProgressCallback: makeProgressCallback(args.browser.name, args.browser.buildId),
+ baseUrl: args.baseUrl,
+ });
+ console.log(`${args.browser.name}@${args.browser.buildId} ${(0, launch_js_1.computeExecutablePath)({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ })}`);
+ })
+ .command('launch ', 'Launch the specified browser', yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('detached', {
+ type: 'boolean',
+ desc: 'Detach the child process.',
+ default: false,
+ });
+ yargs.option('system', {
+ type: 'boolean',
+ desc: 'Search for a browser installed on the system instead of the cache folder.',
+ default: false,
+ });
+ yargs.example('$0 launch chrome@115.0.5790.170', 'Launch Chrome 115.0.5790.170');
+ yargs.example('$0 launch firefox@112.0a1', 'Launch the Firefox browser identified by the milestone 112.0a1.');
+ yargs.example('$0 launch chrome@115.0.5790.170 --detached', 'Launch the browser but detach the sub-processes.');
+ yargs.example('$0 launch chrome@canary --system', 'Try to locate the Canary build of Chrome installed on the system and launch it.');
+ }, async (argv) => {
+ const args = argv;
+ const executablePath = args.system
+ ? (0, launch_js_1.computeSystemExecutablePath)({
+ browser: args.browser.name,
+ // TODO: throw an error if not a ChromeReleaseChannel is provided.
+ channel: args.browser.buildId,
+ platform: args.platform,
+ })
+ : (0, launch_js_1.computeExecutablePath)({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ });
+ (0, launch_js_1.launch)({
+ executablePath,
+ detached: args.detached,
+ });
+ })
+ .command('clear', this.#allowCachePathOverride
+ ? 'Removes all installed browsers from the specified cache directory'
+ : `Removes all installed browsers from ${this.#cachePath}`, yargs => {
+ this.#definePathParameter(yargs, true);
+ }, async (argv) => {
+ const args = argv;
+ const cacheDir = args.path ?? this.#cachePath;
+ const rl = this.#rl ?? readline.createInterface({ input: process_1.stdin, output: process_1.stdout });
+ rl.question(`Do you want to permanently and recursively delete the content of ${cacheDir} (yes/No)? `, answer => {
+ rl.close();
+ if (!['y', 'yes'].includes(answer.toLowerCase().trim())) {
+ console.log('Cancelled.');
+ return;
+ }
+ const cache = new Cache_js_1.Cache(cacheDir);
+ cache.clear();
+ console.log(`${cacheDir} cleared.`);
+ });
+ })
+ .demandCommand(1)
+ .help();
+ }
+ #parseBrowser(version) {
+ return version.split('@').shift();
+ }
+ #parseBuildId(version) {
+ const parts = version.split('@');
+ return parts.length === 2
+ ? parts[1]
+ : this.#pinnedBrowsers
+ ? 'pinned'
+ : 'latest';
+ }
+}
+exports.CLI = CLI;
+/**
+ * @public
+ */
+function makeProgressCallback(browser, buildId) {
+ let progressBar;
+ let lastDownloadedBytes = 0;
+ return (downloadedBytes, totalBytes) => {
+ if (!progressBar) {
+ progressBar = new progress_1.default(`Downloading ${browser} r${buildId} - ${toMegabytes(totalBytes)} [:bar] :percent :etas `, {
+ complete: '=',
+ incomplete: ' ',
+ width: 20,
+ total: totalBytes,
+ });
+ }
+ const delta = downloadedBytes - lastDownloadedBytes;
+ lastDownloadedBytes = downloadedBytes;
+ progressBar.tick(delta);
+ };
+}
+exports.makeProgressCallback = makeProgressCallback;
+function toMegabytes(bytes) {
+ const mb = bytes / 1000 / 1000;
+ return `${Math.round(mb * 10) / 10} MB`;
+}
+//# sourceMappingURL=CLI.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js.map
new file mode 100644
index 00000000..6206e1da
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/CLI.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLI.js","sourceRoot":"","sources":["../../src/CLI.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts
new file mode 100644
index 00000000..50498139
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts
@@ -0,0 +1,74 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { Browser, type BrowserPlatform } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare class InstalledBrowser {
+ #private;
+ browser: Browser;
+ buildId: string;
+ platform: BrowserPlatform;
+ readonly executablePath: string;
+ /**
+ * @internal
+ */
+ constructor(cache: Cache, browser: Browser, buildId: string, platform: BrowserPlatform);
+ /**
+ * Path to the root of the installation folder. Use
+ * {@link computeExecutablePath} to get the path to the executable binary.
+ */
+ get path(): string;
+}
+/**
+ * @internal
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+/**
+ * The cache used by Puppeteer relies on the following structure:
+ *
+ * - rootDir
+ * -- | browserRoot(browser1)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * -- | browserRoot(browser2)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * @internal
+ */
+export declare class Cache {
+ #private;
+ constructor(rootDir: string);
+ /**
+ * @internal
+ */
+ get rootDir(): string;
+ browserRoot(browser: Browser): string;
+ installationDir(browser: Browser, platform: BrowserPlatform, buildId: string): string;
+ clear(): void;
+ uninstall(browser: Browser, platform: BrowserPlatform, buildId: string): void;
+ getInstalledBrowsers(): InstalledBrowser[];
+ computeExecutablePath(options: ComputeExecutablePathOptions): string;
+}
+//# sourceMappingURL=Cache.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts.map
new file mode 100644
index 00000000..3a1aea53
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EAErB,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,qBAAa,gBAAgB;;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAIhC;;OAEG;gBAED,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe;IAa3B;;;OAGG;IACH,IAAI,IAAI,IAAI,MAAM,CAMjB;CACF;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,KAAK;;gBAGJ,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAIrC,eAAe,CACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM;IAIT,KAAK,IAAI,IAAI;IASb,SAAS,CACP,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,IAAI;IASP,oBAAoB,IAAI,gBAAgB,EAAE;IA+B1C,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM;CAoBrE"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js
new file mode 100644
index 00000000..d0512c41
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js
@@ -0,0 +1,141 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Cache = exports.InstalledBrowser = void 0;
+const fs_1 = __importDefault(require("fs"));
+const os_1 = __importDefault(require("os"));
+const path_1 = __importDefault(require("path"));
+const browser_data_js_1 = require("./browser-data/browser-data.js");
+const detectPlatform_js_1 = require("./detectPlatform.js");
+/**
+ * @public
+ */
+class InstalledBrowser {
+ browser;
+ buildId;
+ platform;
+ executablePath;
+ #cache;
+ /**
+ * @internal
+ */
+ constructor(cache, browser, buildId, platform) {
+ this.#cache = cache;
+ this.browser = browser;
+ this.buildId = buildId;
+ this.platform = platform;
+ this.executablePath = cache.computeExecutablePath({
+ browser,
+ buildId,
+ platform,
+ });
+ }
+ /**
+ * Path to the root of the installation folder. Use
+ * {@link computeExecutablePath} to get the path to the executable binary.
+ */
+ get path() {
+ return this.#cache.installationDir(this.browser, this.platform, this.buildId);
+ }
+}
+exports.InstalledBrowser = InstalledBrowser;
+/**
+ * The cache used by Puppeteer relies on the following structure:
+ *
+ * - rootDir
+ * -- | browserRoot(browser1)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * -- | browserRoot(browser2)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * @internal
+ */
+class Cache {
+ #rootDir;
+ constructor(rootDir) {
+ this.#rootDir = rootDir;
+ }
+ /**
+ * @internal
+ */
+ get rootDir() {
+ return this.#rootDir;
+ }
+ browserRoot(browser) {
+ return path_1.default.join(this.#rootDir, browser);
+ }
+ installationDir(browser, platform, buildId) {
+ return path_1.default.join(this.browserRoot(browser), `${platform}-${buildId}`);
+ }
+ clear() {
+ fs_1.default.rmSync(this.#rootDir, {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+ uninstall(browser, platform, buildId) {
+ fs_1.default.rmSync(this.installationDir(browser, platform, buildId), {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+ getInstalledBrowsers() {
+ if (!fs_1.default.existsSync(this.#rootDir)) {
+ return [];
+ }
+ const types = fs_1.default.readdirSync(this.#rootDir);
+ const browsers = types.filter((t) => {
+ return Object.values(browser_data_js_1.Browser).includes(t);
+ });
+ return browsers.flatMap(browser => {
+ const files = fs_1.default.readdirSync(this.browserRoot(browser));
+ return files
+ .map(file => {
+ const result = parseFolderPath(path_1.default.join(this.browserRoot(browser), file));
+ if (!result) {
+ return null;
+ }
+ return new InstalledBrowser(this, browser, result.buildId, result.platform);
+ })
+ .filter((item) => {
+ return item !== null;
+ });
+ });
+ }
+ computeExecutablePath(options) {
+ options.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os_1.default.platform()} (${os_1.default.arch()})`);
+ }
+ const installationDir = this.installationDir(options.browser, options.platform, options.buildId);
+ return path_1.default.join(installationDir, browser_data_js_1.executablePathByBrowser[options.browser](options.platform, options.buildId));
+ }
+}
+exports.Cache = Cache;
+function parseFolderPath(folderPath) {
+ const name = path_1.default.basename(folderPath);
+ const splits = name.split('-');
+ if (splits.length !== 2) {
+ return;
+ }
+ const [platform, buildId] = splits;
+ if (!buildId || !platform) {
+ return;
+ }
+ return { platform, buildId };
+}
+//# sourceMappingURL=Cache.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js.map
new file mode 100644
index 00000000..bd8e4e80
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/Cache.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts
new file mode 100644
index 00000000..49f52fe4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts
@@ -0,0 +1,47 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import * as chromeHeadlessShell from './chrome-headless-shell.js';
+import * as chrome from './chrome.js';
+import * as chromedriver from './chromedriver.js';
+import * as chromium from './chromium.js';
+import * as firefox from './firefox.js';
+import { Browser, BrowserPlatform, ChromeReleaseChannel, type ProfileOptions } from './types.js';
+export type { ProfileOptions };
+export declare const downloadUrls: {
+ chromedriver: typeof chromedriver.resolveDownloadUrl;
+ "chrome-headless-shell": typeof chromeHeadlessShell.resolveDownloadUrl;
+ chrome: typeof chrome.resolveDownloadUrl;
+ chromium: typeof chromium.resolveDownloadUrl;
+ firefox: typeof firefox.resolveDownloadUrl;
+};
+export declare const downloadPaths: {
+ chromedriver: typeof chromedriver.resolveDownloadPath;
+ "chrome-headless-shell": typeof chromeHeadlessShell.resolveDownloadPath;
+ chrome: typeof chrome.resolveDownloadPath;
+ chromium: typeof chromium.resolveDownloadPath;
+ firefox: typeof firefox.resolveDownloadPath;
+};
+export declare const executablePathByBrowser: {
+ chromedriver: typeof chromedriver.relativeExecutablePath;
+ "chrome-headless-shell": typeof chromeHeadlessShell.relativeExecutablePath;
+ chrome: typeof chrome.relativeExecutablePath;
+ chromium: typeof chromium.relativeExecutablePath;
+ firefox: typeof firefox.relativeExecutablePath;
+};
+export { Browser, BrowserPlatform, ChromeReleaseChannel };
+/**
+ * @public
+ */
+export declare function resolveBuildId(browser: Browser, platform: BrowserPlatform, tag: string): Promise;
+/**
+ * @public
+ */
+export declare function createProfile(browser: Browser, opts: ProfileOptions): Promise;
+/**
+ * @public
+ */
+export declare function resolveSystemExecutablePath(browser: Browser, platform: BrowserPlatform, channel: ChromeReleaseChannel): string;
+//# sourceMappingURL=browser-data.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts.map
new file mode 100644
index 00000000..b1790b9a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser-data.d.ts","sourceRoot":"","sources":["../../../src/browser-data/browser-data.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,OAAO,EACP,eAAe,EAEf,oBAAoB,EACpB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAC,cAAc,EAAC,CAAC;AAE7B,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;CAMzB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAC,CAAC;AAExD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+FjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAYR"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js
new file mode 100644
index 00000000..9f02fafe
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js
@@ -0,0 +1,178 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveSystemExecutablePath = exports.createProfile = exports.resolveBuildId = exports.ChromeReleaseChannel = exports.BrowserPlatform = exports.Browser = exports.executablePathByBrowser = exports.downloadPaths = exports.downloadUrls = void 0;
+const chromeHeadlessShell = __importStar(require("./chrome-headless-shell.js"));
+const chrome = __importStar(require("./chrome.js"));
+const chromedriver = __importStar(require("./chromedriver.js"));
+const chromium = __importStar(require("./chromium.js"));
+const firefox = __importStar(require("./firefox.js"));
+const types_js_1 = require("./types.js");
+Object.defineProperty(exports, "Browser", { enumerable: true, get: function () { return types_js_1.Browser; } });
+Object.defineProperty(exports, "BrowserPlatform", { enumerable: true, get: function () { return types_js_1.BrowserPlatform; } });
+Object.defineProperty(exports, "ChromeReleaseChannel", { enumerable: true, get: function () { return types_js_1.ChromeReleaseChannel; } });
+exports.downloadUrls = {
+ [types_js_1.Browser.CHROMEDRIVER]: chromedriver.resolveDownloadUrl,
+ [types_js_1.Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadUrl,
+ [types_js_1.Browser.CHROME]: chrome.resolveDownloadUrl,
+ [types_js_1.Browser.CHROMIUM]: chromium.resolveDownloadUrl,
+ [types_js_1.Browser.FIREFOX]: firefox.resolveDownloadUrl,
+};
+exports.downloadPaths = {
+ [types_js_1.Browser.CHROMEDRIVER]: chromedriver.resolveDownloadPath,
+ [types_js_1.Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadPath,
+ [types_js_1.Browser.CHROME]: chrome.resolveDownloadPath,
+ [types_js_1.Browser.CHROMIUM]: chromium.resolveDownloadPath,
+ [types_js_1.Browser.FIREFOX]: firefox.resolveDownloadPath,
+};
+exports.executablePathByBrowser = {
+ [types_js_1.Browser.CHROMEDRIVER]: chromedriver.relativeExecutablePath,
+ [types_js_1.Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.relativeExecutablePath,
+ [types_js_1.Browser.CHROME]: chrome.relativeExecutablePath,
+ [types_js_1.Browser.CHROMIUM]: chromium.relativeExecutablePath,
+ [types_js_1.Browser.FIREFOX]: firefox.relativeExecutablePath,
+};
+/**
+ * @public
+ */
+async function resolveBuildId(browser, platform, tag) {
+ switch (browser) {
+ case types_js_1.Browser.FIREFOX:
+ switch (tag) {
+ case types_js_1.BrowserTag.LATEST:
+ return await firefox.resolveBuildId('FIREFOX_NIGHTLY');
+ case types_js_1.BrowserTag.BETA:
+ case types_js_1.BrowserTag.CANARY:
+ case types_js_1.BrowserTag.DEV:
+ case types_js_1.BrowserTag.STABLE:
+ throw new Error(`${tag} is not supported for ${browser}. Use 'latest' instead.`);
+ }
+ case types_js_1.Browser.CHROME: {
+ switch (tag) {
+ case types_js_1.BrowserTag.LATEST:
+ return await chrome.resolveBuildId(types_js_1.ChromeReleaseChannel.CANARY);
+ case types_js_1.BrowserTag.BETA:
+ return await chrome.resolveBuildId(types_js_1.ChromeReleaseChannel.BETA);
+ case types_js_1.BrowserTag.CANARY:
+ return await chrome.resolveBuildId(types_js_1.ChromeReleaseChannel.CANARY);
+ case types_js_1.BrowserTag.DEV:
+ return await chrome.resolveBuildId(types_js_1.ChromeReleaseChannel.DEV);
+ case types_js_1.BrowserTag.STABLE:
+ return await chrome.resolveBuildId(types_js_1.ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chrome.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case types_js_1.Browser.CHROMEDRIVER: {
+ switch (tag) {
+ case types_js_1.BrowserTag.LATEST:
+ case types_js_1.BrowserTag.CANARY:
+ return await chromedriver.resolveBuildId(types_js_1.ChromeReleaseChannel.CANARY);
+ case types_js_1.BrowserTag.BETA:
+ return await chromedriver.resolveBuildId(types_js_1.ChromeReleaseChannel.BETA);
+ case types_js_1.BrowserTag.DEV:
+ return await chromedriver.resolveBuildId(types_js_1.ChromeReleaseChannel.DEV);
+ case types_js_1.BrowserTag.STABLE:
+ return await chromedriver.resolveBuildId(types_js_1.ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chromedriver.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case types_js_1.Browser.CHROMEHEADLESSSHELL: {
+ switch (tag) {
+ case types_js_1.BrowserTag.LATEST:
+ case types_js_1.BrowserTag.CANARY:
+ return await chromeHeadlessShell.resolveBuildId(types_js_1.ChromeReleaseChannel.CANARY);
+ case types_js_1.BrowserTag.BETA:
+ return await chromeHeadlessShell.resolveBuildId(types_js_1.ChromeReleaseChannel.BETA);
+ case types_js_1.BrowserTag.DEV:
+ return await chromeHeadlessShell.resolveBuildId(types_js_1.ChromeReleaseChannel.DEV);
+ case types_js_1.BrowserTag.STABLE:
+ return await chromeHeadlessShell.resolveBuildId(types_js_1.ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chromeHeadlessShell.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case types_js_1.Browser.CHROMIUM:
+ switch (tag) {
+ case types_js_1.BrowserTag.LATEST:
+ return await chromium.resolveBuildId(platform);
+ case types_js_1.BrowserTag.BETA:
+ case types_js_1.BrowserTag.CANARY:
+ case types_js_1.BrowserTag.DEV:
+ case types_js_1.BrowserTag.STABLE:
+ throw new Error(`${tag} is not supported for ${browser}. Use 'latest' instead.`);
+ }
+ }
+ // We assume the tag is the buildId if it didn't match any keywords.
+ return tag;
+}
+exports.resolveBuildId = resolveBuildId;
+/**
+ * @public
+ */
+async function createProfile(browser, opts) {
+ switch (browser) {
+ case types_js_1.Browser.FIREFOX:
+ return await firefox.createProfile(opts);
+ case types_js_1.Browser.CHROME:
+ case types_js_1.Browser.CHROMIUM:
+ throw new Error(`Profile creation is not support for ${browser} yet`);
+ }
+}
+exports.createProfile = createProfile;
+/**
+ * @public
+ */
+function resolveSystemExecutablePath(browser, platform, channel) {
+ switch (browser) {
+ case types_js_1.Browser.CHROMEDRIVER:
+ case types_js_1.Browser.CHROMEHEADLESSSHELL:
+ case types_js_1.Browser.FIREFOX:
+ case types_js_1.Browser.CHROMIUM:
+ throw new Error(`System browser detection is not supported for ${browser} yet.`);
+ case types_js_1.Browser.CHROME:
+ return chrome.resolveSystemExecutablePath(platform, channel);
+ }
+}
+exports.resolveSystemExecutablePath = resolveSystemExecutablePath;
+//# sourceMappingURL=browser-data.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js.map
new file mode 100644
index 00000000..615ef640
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/browser-data.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser-data.js","sourceRoot":"","sources":["../../../src/browser-data/browser-data.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts
new file mode 100644
index 00000000..cbd385c4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts
@@ -0,0 +1,6 @@
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chrome-headless-shell.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts.map
new file mode 100644
index 00000000..884b0933
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome-headless-shell.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chrome-headless-shell.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAMV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAoBR;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js
new file mode 100644
index 00000000..d6f2136a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js
@@ -0,0 +1,55 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveBuildId = exports.relativeExecutablePath = exports.resolveDownloadPath = exports.resolveDownloadUrl = void 0;
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+const path_1 = __importDefault(require("path"));
+const types_js_1 = require("./types.js");
+function folder(platform) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return 'linux64';
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case types_js_1.BrowserPlatform.MAC:
+ return 'mac-x64';
+ case types_js_1.BrowserPlatform.WIN32:
+ return 'win32';
+ case types_js_1.BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+exports.resolveDownloadUrl = resolveDownloadUrl;
+function resolveDownloadPath(platform, buildId) {
+ return [
+ buildId,
+ folder(platform),
+ `chrome-headless-shell-${folder(platform)}.zip`,
+ ];
+}
+exports.resolveDownloadPath = resolveDownloadPath;
+function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.MAC:
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return path_1.default.join('chrome-headless-shell-' + folder(platform), 'chrome-headless-shell');
+ case types_js_1.BrowserPlatform.LINUX:
+ return path_1.default.join('chrome-headless-shell-linux64', 'chrome-headless-shell');
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return path_1.default.join('chrome-headless-shell-' + folder(platform), 'chrome-headless-shell.exe');
+ }
+}
+exports.relativeExecutablePath = relativeExecutablePath;
+var chrome_js_1 = require("./chrome.js");
+Object.defineProperty(exports, "resolveBuildId", { enumerable: true, get: function () { return chrome_js_1.resolveBuildId; } });
+//# sourceMappingURL=chrome-headless-shell.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js.map
new file mode 100644
index 00000000..a9e5c08c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome-headless-shell.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome-headless-shell.js","sourceRoot":"","sources":["../../../src/browser-data/chrome-headless-shell.ts"],"names":[],"mappings":";;;;;;AAAA;;;;GAIG;AACH,gDAAwB;AAExB,yCAA2C;AAE3C,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,WAAW,CAAC;QACrB,KAAK,0BAAe,CAAC,GAAG;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,6DAA6D;IAEvE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAND,gDAMC;AAED,SAAgB,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO;QACL,OAAO;QACP,MAAM,CAAC,QAAQ,CAAC;QAChB,yBAAyB,MAAM,CAAC,QAAQ,CAAC,MAAM;KAChD,CAAC;AACJ,CAAC;AATD,kDASC;AAED,SAAgB,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,GAAG,CAAC;QACzB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,cAAI,CAAC,IAAI,CACd,wBAAwB,GAAG,MAAM,CAAC,QAAQ,CAAC,EAC3C,uBAAuB,CACxB,CAAC;QACJ,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CACd,+BAA+B,EAC/B,uBAAuB,CACxB,CAAC;QACJ,KAAK,0BAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CACd,wBAAwB,GAAG,MAAM,CAAC,QAAQ,CAAC,EAC3C,2BAA2B,CAC5B,CAAC;IACN,CAAC;AACH,CAAC;AAvBD,wDAuBC;AAED,yCAA2C;AAAnC,2GAAA,cAAc,OAAA"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts
new file mode 100644
index 00000000..8cf3884b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts
@@ -0,0 +1,29 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform, ChromeReleaseChannel } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function getLastKnownGoodReleaseForChannel(channel: ChromeReleaseChannel): Promise<{
+ version: string;
+ revision: string;
+}>;
+export declare function getLastKnownGoodReleaseForMilestone(milestone: string): Promise<{
+ version: string;
+ revision: string;
+} | undefined>;
+export declare function getLastKnownGoodReleaseForBuild(
+/**
+ * @example `112.0.23`,
+ */
+buildPrefix: string): Promise<{
+ version: string;
+ revision: string;
+} | undefined>;
+export declare function resolveBuildId(channel: ChromeReleaseChannel): Promise;
+export declare function resolveBuildId(channel: string): Promise;
+export declare function resolveSystemExecutablePath(platform: BrowserPlatform, channel: ChromeReleaseChannel): string;
+//# sourceMappingURL=chrome.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts.map
new file mode 100644
index 00000000..347072fe
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chrome.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAiBjE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAiBR;AAED,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC,CAqB9C;AAED,wBAAsB,mCAAmC,CACvD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAAC,CAW1D;AAED,wBAAsB,+BAA+B;AACnD;;GAEG;AACH,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAAC,CAW1D;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAwB/B,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAwCR"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js
new file mode 100644
index 00000000..b642a7c5
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js
@@ -0,0 +1,127 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveSystemExecutablePath = exports.resolveBuildId = exports.getLastKnownGoodReleaseForBuild = exports.getLastKnownGoodReleaseForMilestone = exports.getLastKnownGoodReleaseForChannel = exports.relativeExecutablePath = exports.resolveDownloadPath = exports.resolveDownloadUrl = void 0;
+const path_1 = __importDefault(require("path"));
+const httpUtil_js_1 = require("../httpUtil.js");
+const types_js_1 = require("./types.js");
+function folder(platform) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return 'linux64';
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case types_js_1.BrowserPlatform.MAC:
+ return 'mac-x64';
+ case types_js_1.BrowserPlatform.WIN32:
+ return 'win32';
+ case types_js_1.BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+exports.resolveDownloadUrl = resolveDownloadUrl;
+function resolveDownloadPath(platform, buildId) {
+ return [buildId, folder(platform), `chrome-${folder(platform)}.zip`];
+}
+exports.resolveDownloadPath = resolveDownloadPath;
+function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.MAC:
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return path_1.default.join('chrome-' + folder(platform), 'Google Chrome for Testing.app', 'Contents', 'MacOS', 'Google Chrome for Testing');
+ case types_js_1.BrowserPlatform.LINUX:
+ return path_1.default.join('chrome-linux64', 'chrome');
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return path_1.default.join('chrome-' + folder(platform), 'chrome.exe');
+ }
+}
+exports.relativeExecutablePath = relativeExecutablePath;
+async function getLastKnownGoodReleaseForChannel(channel) {
+ const data = (await (0, httpUtil_js_1.getJSON)(new URL('https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json')));
+ for (const channel of Object.keys(data.channels)) {
+ data.channels[channel.toLowerCase()] = data.channels[channel];
+ delete data.channels[channel];
+ }
+ return data.channels[channel];
+}
+exports.getLastKnownGoodReleaseForChannel = getLastKnownGoodReleaseForChannel;
+async function getLastKnownGoodReleaseForMilestone(milestone) {
+ const data = (await (0, httpUtil_js_1.getJSON)(new URL('https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone.json')));
+ return data.milestones[milestone];
+}
+exports.getLastKnownGoodReleaseForMilestone = getLastKnownGoodReleaseForMilestone;
+async function getLastKnownGoodReleaseForBuild(
+/**
+ * @example `112.0.23`,
+ */
+buildPrefix) {
+ const data = (await (0, httpUtil_js_1.getJSON)(new URL('https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json')));
+ return data.builds[buildPrefix];
+}
+exports.getLastKnownGoodReleaseForBuild = getLastKnownGoodReleaseForBuild;
+async function resolveBuildId(channel) {
+ if (Object.values(types_js_1.ChromeReleaseChannel).includes(channel)) {
+ return (await getLastKnownGoodReleaseForChannel(channel)).version;
+ }
+ if (channel.match(/^\d+$/)) {
+ // Potentially a milestone.
+ return (await getLastKnownGoodReleaseForMilestone(channel))?.version;
+ }
+ if (channel.match(/^\d+\.\d+\.\d+$/)) {
+ // Potentially a build prefix without the patch version.
+ return (await getLastKnownGoodReleaseForBuild(channel))?.version;
+ }
+ return;
+}
+exports.resolveBuildId = resolveBuildId;
+function resolveSystemExecutablePath(platform, channel) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.WIN64:
+ case types_js_1.BrowserPlatform.WIN32:
+ switch (channel) {
+ case types_js_1.ChromeReleaseChannel.STABLE:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome\\Application\\chrome.exe`;
+ case types_js_1.ChromeReleaseChannel.BETA:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Beta\\Application\\chrome.exe`;
+ case types_js_1.ChromeReleaseChannel.CANARY:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome SxS\\Application\\chrome.exe`;
+ case types_js_1.ChromeReleaseChannel.DEV:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Dev\\Application\\chrome.exe`;
+ }
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ case types_js_1.BrowserPlatform.MAC:
+ switch (channel) {
+ case types_js_1.ChromeReleaseChannel.STABLE:
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
+ case types_js_1.ChromeReleaseChannel.BETA:
+ return '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta';
+ case types_js_1.ChromeReleaseChannel.CANARY:
+ return '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary';
+ case types_js_1.ChromeReleaseChannel.DEV:
+ return '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev';
+ }
+ case types_js_1.BrowserPlatform.LINUX:
+ switch (channel) {
+ case types_js_1.ChromeReleaseChannel.STABLE:
+ return '/opt/google/chrome/chrome';
+ case types_js_1.ChromeReleaseChannel.BETA:
+ return '/opt/google/chrome-beta/chrome';
+ case types_js_1.ChromeReleaseChannel.DEV:
+ return '/opt/google/chrome-unstable/chrome';
+ }
+ }
+ throw new Error(`Unable to detect browser executable path for '${channel}' on ${platform}.`);
+}
+exports.resolveSystemExecutablePath = resolveSystemExecutablePath;
+//# sourceMappingURL=chrome.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js.map
new file mode 100644
index 00000000..36d1b943
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chrome.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../../src/browser-data/chrome.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts
new file mode 100644
index 00000000..32a0ed1a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts
@@ -0,0 +1,6 @@
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chromedriver.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts.map
new file mode 100644
index 00000000..1fd16314
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromedriver.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chromedriver.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js
new file mode 100644
index 00000000..d3f2bd51
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js
@@ -0,0 +1,51 @@
+"use strict";
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveBuildId = exports.relativeExecutablePath = exports.resolveDownloadPath = exports.resolveDownloadUrl = void 0;
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+const path_1 = __importDefault(require("path"));
+const types_js_1 = require("./types.js");
+function folder(platform) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return 'linux64';
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case types_js_1.BrowserPlatform.MAC:
+ return 'mac-x64';
+ case types_js_1.BrowserPlatform.WIN32:
+ return 'win32';
+ case types_js_1.BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+exports.resolveDownloadUrl = resolveDownloadUrl;
+function resolveDownloadPath(platform, buildId) {
+ return [buildId, folder(platform), `chromedriver-${folder(platform)}.zip`];
+}
+exports.resolveDownloadPath = resolveDownloadPath;
+function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.MAC:
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return path_1.default.join('chromedriver-' + folder(platform), 'chromedriver');
+ case types_js_1.BrowserPlatform.LINUX:
+ return path_1.default.join('chromedriver-linux64', 'chromedriver');
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return path_1.default.join('chromedriver-' + folder(platform), 'chromedriver.exe');
+ }
+}
+exports.relativeExecutablePath = relativeExecutablePath;
+var chrome_js_1 = require("./chrome.js");
+Object.defineProperty(exports, "resolveBuildId", { enumerable: true, get: function () { return chrome_js_1.resolveBuildId; } });
+//# sourceMappingURL=chromedriver.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js.map
new file mode 100644
index 00000000..0ff06d0e
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromedriver.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromedriver.js","sourceRoot":"","sources":["../../../src/browser-data/chromedriver.ts"],"names":[],"mappings":";;;;;;AAAA;;;;GAIG;AACH,gDAAwB;AAExB,yCAA2C;AAE3C,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,WAAW,CAAC;QACrB,KAAK,0BAAe,CAAC,GAAG;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,6DAA6D;IAEvE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAND,gDAMC;AAED,SAAgB,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,gBAAgB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AALD,kDAKC;AAED,SAAgB,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,GAAG,CAAC;QACzB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,cAAI,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;QACvE,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;QAC3D,KAAK,0BAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAdD,wDAcC;AAED,yCAA2C;AAAnC,2GAAA,cAAc,OAAA"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts
new file mode 100644
index 00000000..4ff26999
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function resolveBuildId(platform: BrowserPlatform): Promise;
+//# sourceMappingURL=chromium.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts.map
new file mode 100644
index 00000000..701df7e7
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromium.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chromium.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AA+B3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAA8D,GACpE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAiBR;AACD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js
new file mode 100644
index 00000000..86b38ac6
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js
@@ -0,0 +1,67 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.resolveBuildId = exports.relativeExecutablePath = exports.resolveDownloadPath = exports.resolveDownloadUrl = void 0;
+const path_1 = __importDefault(require("path"));
+const httpUtil_js_1 = require("../httpUtil.js");
+const types_js_1 = require("./types.js");
+function archive(platform, buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return 'chrome-linux';
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ case types_js_1.BrowserPlatform.MAC:
+ return 'chrome-mac';
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ // Windows archive name changed at r591479.
+ return parseInt(buildId, 10) > 591479 ? 'chrome-win' : 'chrome-win32';
+ }
+}
+function folder(platform) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return 'Linux_x64';
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return 'Mac_Arm';
+ case types_js_1.BrowserPlatform.MAC:
+ return 'Mac';
+ case types_js_1.BrowserPlatform.WIN32:
+ return 'Win';
+ case types_js_1.BrowserPlatform.WIN64:
+ return 'Win_x64';
+ }
+}
+function resolveDownloadUrl(platform, buildId, baseUrl = 'https://storage.googleapis.com/chromium-browser-snapshots') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+exports.resolveDownloadUrl = resolveDownloadUrl;
+function resolveDownloadPath(platform, buildId) {
+ return [folder(platform), buildId, `${archive(platform, buildId)}.zip`];
+}
+exports.resolveDownloadPath = resolveDownloadPath;
+function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.MAC:
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ return path_1.default.join('chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
+ case types_js_1.BrowserPlatform.LINUX:
+ return path_1.default.join('chrome-linux', 'chrome');
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return path_1.default.join('chrome-win', 'chrome.exe');
+ }
+}
+exports.relativeExecutablePath = relativeExecutablePath;
+async function resolveBuildId(platform) {
+ return await (0, httpUtil_js_1.getText)(new URL(`https://storage.googleapis.com/chromium-browser-snapshots/${folder(platform)}/LAST_CHANGE`));
+}
+exports.resolveBuildId = resolveBuildId;
+//# sourceMappingURL=chromium.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js.map
new file mode 100644
index 00000000..9aea7003
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/chromium.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromium.js","sourceRoot":"","sources":["../../../src/browser-data/chromium.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,gDAAwB;AAExB,gDAAuC;AAEvC,yCAA2C;AAE3C,SAAS,OAAO,CAAC,QAAyB,EAAE,OAAe;IACzD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAc,CAAC;QACxB,KAAK,0BAAe,CAAC,OAAO,CAAC;QAC7B,KAAK,0BAAe,CAAC,GAAG;YACtB,OAAO,YAAY,CAAC;QACtB,KAAK,0BAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,0BAAe,CAAC,KAAK;YACxB,2CAA2C;YAC3C,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,WAAW,CAAC;QACrB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,SAAS,CAAC;QACnB,KAAK,0BAAe,CAAC,GAAG;YACtB,OAAO,KAAK,CAAC;QACf,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,KAAK,CAAC;QACf,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAgB,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,2DAA2D;IAErE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAND,gDAMC;AAED,SAAgB,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AALD,kDAKC;AAED,SAAgB,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,0BAAe,CAAC,GAAG,CAAC;QACzB,KAAK,0BAAe,CAAC,OAAO;YAC1B,OAAO,cAAI,CAAC,IAAI,CACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,CACX,CAAC;QACJ,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC7C,KAAK,0BAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,0BAAe,CAAC,KAAK;YACxB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AApBD,wDAoBC;AACM,KAAK,UAAU,cAAc,CAClC,QAAyB;IAEzB,OAAO,MAAM,IAAA,qBAAO,EAClB,IAAI,GAAG,CACL,6DAA6D,MAAM,CACjE,QAAQ,CACT,cAAc,CAChB,CACF,CAAC;AACJ,CAAC;AAVD,wCAUC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts
new file mode 100644
index 00000000..b24eb2fc
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts
@@ -0,0 +1,12 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform, type ProfileOptions } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function resolveBuildId(channel?: 'FIREFOX_NIGHTLY'): Promise;
+export declare function createProfile(options: ProfileOptions): Promise;
+//# sourceMappingURL=firefox.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts.map
new file mode 100644
index 00000000..93f43de2
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../../src/browser-data/firefox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAC,eAAe,EAAE,KAAK,cAAc,EAAC,MAAM,YAAY,CAAC;AAehE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAA2E,GACjF,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,wBAAsB,cAAc,CAClC,OAAO,GAAE,iBAAqC,GAC7C,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1E"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js
new file mode 100644
index 00000000..51202dfe
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js
@@ -0,0 +1,257 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.createProfile = exports.resolveBuildId = exports.relativeExecutablePath = exports.resolveDownloadPath = exports.resolveDownloadUrl = void 0;
+const fs_1 = __importDefault(require("fs"));
+const path_1 = __importDefault(require("path"));
+const httpUtil_js_1 = require("../httpUtil.js");
+const types_js_1 = require("./types.js");
+function archive(platform, buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.LINUX:
+ return `firefox-${buildId}.en-US.${platform}-x86_64.tar.bz2`;
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ case types_js_1.BrowserPlatform.MAC:
+ return `firefox-${buildId}.en-US.mac.dmg`;
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return `firefox-${buildId}.en-US.${platform}.zip`;
+ }
+}
+function resolveDownloadUrl(platform, buildId, baseUrl = 'https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+exports.resolveDownloadUrl = resolveDownloadUrl;
+function resolveDownloadPath(platform, buildId) {
+ return [archive(platform, buildId)];
+}
+exports.resolveDownloadPath = resolveDownloadPath;
+function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case types_js_1.BrowserPlatform.MAC_ARM:
+ case types_js_1.BrowserPlatform.MAC:
+ return path_1.default.join('Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
+ case types_js_1.BrowserPlatform.LINUX:
+ return path_1.default.join('firefox', 'firefox');
+ case types_js_1.BrowserPlatform.WIN32:
+ case types_js_1.BrowserPlatform.WIN64:
+ return path_1.default.join('firefox', 'firefox.exe');
+ }
+}
+exports.relativeExecutablePath = relativeExecutablePath;
+async function resolveBuildId(channel = 'FIREFOX_NIGHTLY') {
+ const versions = (await (0, httpUtil_js_1.getJSON)(new URL('https://product-details.mozilla.org/1.0/firefox_versions.json')));
+ const version = versions[channel];
+ if (!version) {
+ throw new Error(`Channel ${channel} is not found.`);
+ }
+ return version;
+}
+exports.resolveBuildId = resolveBuildId;
+async function createProfile(options) {
+ if (!fs_1.default.existsSync(options.path)) {
+ await fs_1.default.promises.mkdir(options.path, {
+ recursive: true,
+ });
+ }
+ await writePreferences({
+ preferences: {
+ ...defaultProfilePreferences(options.preferences),
+ ...options.preferences,
+ },
+ path: options.path,
+ });
+}
+exports.createProfile = createProfile;
+function defaultProfilePreferences(extraPrefs) {
+ const server = 'dummy.test';
+ const defaultPrefs = {
+ // Make sure Shield doesn't hit the network.
+ 'app.normandy.api_url': '',
+ // Disable Firefox old build background check
+ 'app.update.checkInstallTime': false,
+ // Disable automatically upgrading Firefox
+ 'app.update.disabledForTesting': true,
+ // Increase the APZ content response timeout to 1 minute
+ 'apz.content_response_timeout': 60000,
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'browser.contentblocking.features.standard': '-tp,tpPrivate,cookieBehavior0,-cm,-fp',
+ // Enable the dump function: which sends messages to the system
+ // console
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1543115
+ 'browser.dom.window.dump.enabled': true,
+ // Disable topstories
+ 'browser.newtabpage.activity-stream.feeds.system.topstories': false,
+ // Always display a blank page
+ 'browser.newtabpage.enabled': false,
+ // Background thumbnails in particular cause grief: and disabling
+ // thumbnails in general cannot hurt
+ 'browser.pagethumbnails.capturing_disabled': true,
+ // Disable safebrowsing components.
+ 'browser.safebrowsing.blockedURIs.enabled': false,
+ 'browser.safebrowsing.downloads.enabled': false,
+ 'browser.safebrowsing.malware.enabled': false,
+ 'browser.safebrowsing.phishing.enabled': false,
+ // Disable updates to search engines.
+ 'browser.search.update': false,
+ // Do not restore the last open set of tabs if the browser has crashed
+ 'browser.sessionstore.resume_from_crash': false,
+ // Skip check for default browser on startup
+ 'browser.shell.checkDefaultBrowser': false,
+ // Disable newtabpage
+ 'browser.startup.homepage': 'about:blank',
+ // Do not redirect user when a milstone upgrade of Firefox is detected
+ 'browser.startup.homepage_override.mstone': 'ignore',
+ // Start with a blank page about:blank
+ 'browser.startup.page': 0,
+ // Do not allow background tabs to be zombified on Android: otherwise for
+ // tests that open additional tabs: the test harness tab itself might get
+ // unloaded
+ 'browser.tabs.disableBackgroundZombification': false,
+ // Do not warn when closing all other open tabs
+ 'browser.tabs.warnOnCloseOtherTabs': false,
+ // Do not warn when multiple tabs will be opened
+ 'browser.tabs.warnOnOpen': false,
+ // Do not automatically offer translations, as tests do not expect this.
+ 'browser.translations.automaticallyPopup': false,
+ // Disable the UI tour.
+ 'browser.uitour.enabled': false,
+ // Turn off search suggestions in the location bar so as not to trigger
+ // network connections.
+ 'browser.urlbar.suggest.searches': false,
+ // Disable first run splash page on Windows 10
+ 'browser.usedOnWindows10.introURL': '',
+ // Do not warn on quitting Firefox
+ 'browser.warnOnQuit': false,
+ // Defensively disable data reporting systems
+ 'datareporting.healthreport.documentServerURI': `http://${server}/dummy/healthreport/`,
+ 'datareporting.healthreport.logging.consoleEnabled': false,
+ 'datareporting.healthreport.service.enabled': false,
+ 'datareporting.healthreport.service.firstRun': false,
+ 'datareporting.healthreport.uploadEnabled': false,
+ // Do not show datareporting policy notifications which can interfere with tests
+ 'datareporting.policy.dataSubmissionEnabled': false,
+ 'datareporting.policy.dataSubmissionPolicyBypassNotification': true,
+ // DevTools JSONViewer sometimes fails to load dependencies with its require.js.
+ // This doesn't affect Puppeteer but spams console (Bug 1424372)
+ 'devtools.jsonview.enabled': false,
+ // Disable popup-blocker
+ 'dom.disable_open_during_load': false,
+ // Enable the support for File object creation in the content process
+ // Required for |Page.setFileInputFiles| protocol method.
+ 'dom.file.createInChild': true,
+ // Disable the ProcessHangMonitor
+ 'dom.ipc.reportProcessHangs': false,
+ // Disable slow script dialogues
+ 'dom.max_chrome_script_run_time': 0,
+ 'dom.max_script_run_time': 0,
+ // Only load extensions from the application and user profile
+ // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
+ 'extensions.autoDisableScopes': 0,
+ 'extensions.enabledScopes': 5,
+ // Disable metadata caching for installed add-ons by default
+ 'extensions.getAddons.cache.enabled': false,
+ // Disable installing any distribution extensions or add-ons.
+ 'extensions.installDistroAddons': false,
+ // Disabled screenshots extension
+ 'extensions.screenshots.disabled': true,
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.enabled': false,
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.notifyUser': false,
+ // Make sure opening about:addons will not hit the network
+ 'extensions.webservice.discoverURL': `http://${server}/dummy/discoveryURL`,
+ // Allow the application to have focus even it runs in the background
+ 'focusmanager.testmode': true,
+ // Disable useragent updates
+ 'general.useragent.updates.enabled': false,
+ // Always use network provider for geolocation tests so we bypass the
+ // macOS dialog raised by the corelocation provider
+ 'geo.provider.testing': true,
+ // Do not scan Wifi
+ 'geo.wifi.scan': false,
+ // No hang monitor
+ 'hangmonitor.timeout': 0,
+ // Show chrome errors and warnings in the error console
+ 'javascript.options.showInConsole': true,
+ // Disable download and usage of OpenH264: and Widevine plugins
+ 'media.gmp-manager.updateEnabled': false,
+ // Disable the GFX sanity window
+ 'media.sanity-test.disabled': true,
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'network.cookie.cookieBehavior': 0,
+ // Disable experimental feature that is only available in Nightly
+ 'network.cookie.sameSite.laxByDefault': false,
+ // Do not prompt for temporary redirects
+ 'network.http.prompt-temp-redirect': false,
+ // Disable speculative connections so they are not reported as leaking
+ // when they are hanging around
+ 'network.http.speculative-parallel-limit': 0,
+ // Do not automatically switch between offline and online
+ 'network.manage-offline-status': false,
+ // Make sure SNTP requests do not hit the network
+ 'network.sntp.pools': server,
+ // Disable Flash.
+ 'plugin.state.flash': 0,
+ 'privacy.trackingprotection.enabled': false,
+ // Can be removed once Firefox 89 is no longer supported
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1710839
+ 'remote.enabled': true,
+ // Don't do network connections for mitm priming
+ 'security.certerrors.mitm.priming.enabled': false,
+ // Local documents have access to all other local documents,
+ // including directory listings
+ 'security.fileuri.strict_origin_policy': false,
+ // Do not wait for the notification button security delay
+ 'security.notification_enable_delay': 0,
+ // Ensure blocklist updates do not hit the network
+ 'services.settings.server': `http://${server}/dummy/blocklist/`,
+ // Do not automatically fill sign-in forms with known usernames and
+ // passwords
+ 'signon.autofillForms': false,
+ // Disable password capture, so that tests that include forms are not
+ // influenced by the presence of the persistent doorhanger notification
+ 'signon.rememberSignons': false,
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url': 'about:blank',
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url.additional': '',
+ // Disable browser animations (tabs, fullscreen, sliding alerts)
+ 'toolkit.cosmeticAnimations.enabled': false,
+ // Prevent starting into safe mode after application crashes
+ 'toolkit.startup.max_resumed_crashes': -1,
+ };
+ return Object.assign(defaultPrefs, extraPrefs);
+}
+/**
+ * Populates the user.js file with custom preferences as needed to allow
+ * Firefox's CDP support to properly function. These preferences will be
+ * automatically copied over to prefs.js during startup of Firefox. To be
+ * able to restore the original values of preferences a backup of prefs.js
+ * will be created.
+ *
+ * @param prefs - List of preferences to add.
+ * @param profilePath - Firefox profile to write the preferences to.
+ */
+async function writePreferences(options) {
+ const lines = Object.entries(options.preferences).map(([key, value]) => {
+ return `user_pref(${JSON.stringify(key)}, ${JSON.stringify(value)});`;
+ });
+ await fs_1.default.promises.writeFile(path_1.default.join(options.path, 'user.js'), lines.join('\n'));
+ // Create a backup of the preferences file if it already exitsts.
+ const prefsPath = path_1.default.join(options.path, 'prefs.js');
+ if (fs_1.default.existsSync(prefsPath)) {
+ const prefsBackupPath = path_1.default.join(options.path, 'prefs.js.puppeteer');
+ await fs_1.default.promises.copyFile(prefsPath, prefsBackupPath);
+ }
+}
+//# sourceMappingURL=firefox.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js.map
new file mode 100644
index 00000000..c96bdd6f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/firefox.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../../src/browser-data/firefox.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts
new file mode 100644
index 00000000..587efa4e
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts
@@ -0,0 +1,57 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/**
+ * Supported browsers.
+ *
+ * @public
+ */
+export declare enum Browser {
+ CHROME = "chrome",
+ CHROMEHEADLESSSHELL = "chrome-headless-shell",
+ CHROMIUM = "chromium",
+ FIREFOX = "firefox",
+ CHROMEDRIVER = "chromedriver"
+}
+/**
+ * Platform names used to identify a OS platform x architecture combination in the way
+ * that is relevant for the browser download.
+ *
+ * @public
+ */
+export declare enum BrowserPlatform {
+ LINUX = "linux",
+ MAC = "mac",
+ MAC_ARM = "mac_arm",
+ WIN32 = "win32",
+ WIN64 = "win64"
+}
+/**
+ * @public
+ */
+export declare enum BrowserTag {
+ CANARY = "canary",
+ BETA = "beta",
+ DEV = "dev",
+ STABLE = "stable",
+ LATEST = "latest"
+}
+/**
+ * @public
+ */
+export interface ProfileOptions {
+ preferences: Record;
+ path: string;
+}
+/**
+ * @public
+ */
+export declare enum ChromeReleaseChannel {
+ STABLE = "stable",
+ DEV = "dev",
+ CANARY = "canary",
+ BETA = "beta"
+}
+//# sourceMappingURL=types.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts.map
new file mode 100644
index 00000000..2d6b36a4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser-data/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,oBAAY,OAAO;IACjB,MAAM,WAAW;IACjB,mBAAmB,0BAA0B;IAC7C,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,YAAY,iBAAiB;CAC9B;AAED;;;;;GAKG;AACH,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;CACd"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js
new file mode 100644
index 00000000..c6619a9f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js
@@ -0,0 +1,57 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.ChromeReleaseChannel = exports.BrowserTag = exports.BrowserPlatform = exports.Browser = void 0;
+/**
+ * Supported browsers.
+ *
+ * @public
+ */
+var Browser;
+(function (Browser) {
+ Browser["CHROME"] = "chrome";
+ Browser["CHROMEHEADLESSSHELL"] = "chrome-headless-shell";
+ Browser["CHROMIUM"] = "chromium";
+ Browser["FIREFOX"] = "firefox";
+ Browser["CHROMEDRIVER"] = "chromedriver";
+})(Browser || (exports.Browser = Browser = {}));
+/**
+ * Platform names used to identify a OS platform x architecture combination in the way
+ * that is relevant for the browser download.
+ *
+ * @public
+ */
+var BrowserPlatform;
+(function (BrowserPlatform) {
+ BrowserPlatform["LINUX"] = "linux";
+ BrowserPlatform["MAC"] = "mac";
+ BrowserPlatform["MAC_ARM"] = "mac_arm";
+ BrowserPlatform["WIN32"] = "win32";
+ BrowserPlatform["WIN64"] = "win64";
+})(BrowserPlatform || (exports.BrowserPlatform = BrowserPlatform = {}));
+/**
+ * @public
+ */
+var BrowserTag;
+(function (BrowserTag) {
+ BrowserTag["CANARY"] = "canary";
+ BrowserTag["BETA"] = "beta";
+ BrowserTag["DEV"] = "dev";
+ BrowserTag["STABLE"] = "stable";
+ BrowserTag["LATEST"] = "latest";
+})(BrowserTag || (exports.BrowserTag = BrowserTag = {}));
+/**
+ * @public
+ */
+var ChromeReleaseChannel;
+(function (ChromeReleaseChannel) {
+ ChromeReleaseChannel["STABLE"] = "stable";
+ ChromeReleaseChannel["DEV"] = "dev";
+ ChromeReleaseChannel["CANARY"] = "canary";
+ ChromeReleaseChannel["BETA"] = "beta";
+})(ChromeReleaseChannel || (exports.ChromeReleaseChannel = ChromeReleaseChannel = {}));
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js.map
new file mode 100644
index 00000000..5f9063e1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/browser-data/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/browser-data/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH;;;;GAIG;AACH,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,4BAAiB,CAAA;IACjB,wDAA6C,CAAA;IAC7C,gCAAqB,CAAA;IACrB,8BAAmB,CAAA;IACnB,wCAA6B,CAAA;AAC/B,CAAC,EANW,OAAO,uBAAP,OAAO,QAMlB;AAED;;;;;GAKG;AACH,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,8BAAW,CAAA;IACX,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,kCAAe,CAAA;AACjB,CAAC,EANW,eAAe,+BAAf,eAAe,QAM1B;AAED;;GAEG;AACH,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;AACnB,CAAC,EANW,UAAU,0BAAV,UAAU,QAMrB;AAUD;;GAEG;AACH,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,mCAAW,CAAA;IACX,yCAAiB,CAAA;IACjB,qCAAa,CAAA;AACf,CAAC,EALW,oBAAoB,oCAApB,oBAAoB,QAK/B"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts
new file mode 100644
index 00000000..aa062da3
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts
@@ -0,0 +1,8 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import debug from 'debug';
+export { debug };
+//# sourceMappingURL=debug.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts.map
new file mode 100644
index 00000000..2f5f252d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,KAAK,EAAC,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js
new file mode 100644
index 00000000..754d7e2b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js
@@ -0,0 +1,14 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.debug = void 0;
+const debug_1 = __importDefault(require("debug"));
+exports.debug = debug_1.default;
+//# sourceMappingURL=debug.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js.map
new file mode 100644
index 00000000..e300130a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/debug.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/debug.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,kDAA0B;AAElB,gBAFD,eAAK,CAEC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts
new file mode 100644
index 00000000..3ed4758a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare function detectBrowserPlatform(): BrowserPlatform | undefined;
+//# sourceMappingURL=detectPlatform.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts.map
new file mode 100644
index 00000000..d6643762
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"detectPlatform.d.ts","sourceRoot":"","sources":["../../src/detectPlatform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,SAAS,CAkBnE"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js
new file mode 100644
index 00000000..4dc76698
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js
@@ -0,0 +1,53 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.detectBrowserPlatform = void 0;
+const os_1 = __importDefault(require("os"));
+const browser_data_js_1 = require("./browser-data/browser-data.js");
+/**
+ * @public
+ */
+function detectBrowserPlatform() {
+ const platform = os_1.default.platform();
+ switch (platform) {
+ case 'darwin':
+ return os_1.default.arch() === 'arm64'
+ ? browser_data_js_1.BrowserPlatform.MAC_ARM
+ : browser_data_js_1.BrowserPlatform.MAC;
+ case 'linux':
+ return browser_data_js_1.BrowserPlatform.LINUX;
+ case 'win32':
+ return os_1.default.arch() === 'x64' ||
+ // Windows 11 for ARM supports x64 emulation
+ (os_1.default.arch() === 'arm64' && isWindows11(os_1.default.release()))
+ ? browser_data_js_1.BrowserPlatform.WIN64
+ : browser_data_js_1.BrowserPlatform.WIN32;
+ default:
+ return undefined;
+ }
+}
+exports.detectBrowserPlatform = detectBrowserPlatform;
+/**
+ * Windows 11 is identified by the version 10.0.22000 or greater
+ * @internal
+ */
+function isWindows11(version) {
+ const parts = version.split('.');
+ if (parts.length > 2) {
+ const major = parseInt(parts[0], 10);
+ const minor = parseInt(parts[1], 10);
+ const patch = parseInt(parts[2], 10);
+ return (major > 10 ||
+ (major === 10 && minor > 0) ||
+ (major === 10 && minor === 0 && patch >= 22000));
+ }
+ return false;
+}
+//# sourceMappingURL=detectPlatform.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js.map
new file mode 100644
index 00000000..f12c9a76
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/detectPlatform.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"detectPlatform.js","sourceRoot":"","sources":["../../src/detectPlatform.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;AAEH,4CAAoB;AAEpB,oEAA+D;AAE/D;;GAEG;AACH,SAAgB,qBAAqB;IACnC,MAAM,QAAQ,GAAG,YAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,YAAE,CAAC,IAAI,EAAE,KAAK,OAAO;gBAC1B,CAAC,CAAC,iCAAe,CAAC,OAAO;gBACzB,CAAC,CAAC,iCAAe,CAAC,GAAG,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,iCAAe,CAAC,KAAK,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,YAAE,CAAC,IAAI,EAAE,KAAK,KAAK;gBACxB,4CAA4C;gBAC5C,CAAC,YAAE,CAAC,IAAI,EAAE,KAAK,OAAO,IAAI,WAAW,CAAC,YAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC,CAAC,iCAAe,CAAC,KAAK;gBACvB,CAAC,CAAC,iCAAe,CAAC,KAAK,CAAC;QAC5B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAlBD,sDAkBC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,CACL,KAAK,GAAG,EAAE;YACV,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;YAC3B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts
new file mode 100644
index 00000000..af56994c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/**
+ * @internal
+ */
+export declare function unpackArchive(archivePath: string, folderPath: string): Promise;
+//# sourceMappingURL=fileUtil.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts.map
new file mode 100644
index 00000000..bcf818b6
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"fileUtil.d.ts","sourceRoot":"","sources":["../../src/fileUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAWf"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js
new file mode 100644
index 00000000..725f8e59
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js
@@ -0,0 +1,100 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.unpackArchive = void 0;
+const child_process_1 = require("child_process");
+const fs_1 = require("fs");
+const promises_1 = require("fs/promises");
+const path = __importStar(require("path"));
+const util_1 = require("util");
+const extract_zip_1 = __importDefault(require("extract-zip"));
+const tar_fs_1 = __importDefault(require("tar-fs"));
+const unbzip2_stream_1 = __importDefault(require("unbzip2-stream"));
+const exec = (0, util_1.promisify)(child_process_1.exec);
+/**
+ * @internal
+ */
+async function unpackArchive(archivePath, folderPath) {
+ if (archivePath.endsWith('.zip')) {
+ await (0, extract_zip_1.default)(archivePath, { dir: folderPath });
+ }
+ else if (archivePath.endsWith('.tar.bz2')) {
+ await extractTar(archivePath, folderPath);
+ }
+ else if (archivePath.endsWith('.dmg')) {
+ await (0, promises_1.mkdir)(folderPath);
+ await installDMG(archivePath, folderPath);
+ }
+ else {
+ throw new Error(`Unsupported archive format: ${archivePath}`);
+ }
+}
+exports.unpackArchive = unpackArchive;
+/**
+ * @internal
+ */
+function extractTar(tarPath, folderPath) {
+ return new Promise((fulfill, reject) => {
+ const tarStream = tar_fs_1.default.extract(folderPath);
+ tarStream.on('error', reject);
+ tarStream.on('finish', fulfill);
+ const readStream = (0, fs_1.createReadStream)(tarPath);
+ readStream.pipe((0, unbzip2_stream_1.default)()).pipe(tarStream);
+ });
+}
+/**
+ * @internal
+ */
+async function installDMG(dmgPath, folderPath) {
+ const { stdout } = await exec(`hdiutil attach -nobrowse -noautoopen "${dmgPath}"`);
+ const volumes = stdout.match(/\/Volumes\/(.*)/m);
+ if (!volumes) {
+ throw new Error(`Could not find volume path in ${stdout}`);
+ }
+ const mountPath = volumes[0];
+ try {
+ const fileNames = await (0, promises_1.readdir)(mountPath);
+ const appName = fileNames.find(item => {
+ return typeof item === 'string' && item.endsWith('.app');
+ });
+ if (!appName) {
+ throw new Error(`Cannot find app in ${mountPath}`);
+ }
+ const mountedPath = path.join(mountPath, appName);
+ await exec(`cp -R "${mountedPath}" "${folderPath}"`);
+ }
+ finally {
+ await exec(`hdiutil detach "${mountPath}" -quiet`);
+ }
+}
+//# sourceMappingURL=fileUtil.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js.map
new file mode 100644
index 00000000..ecc079dd
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/fileUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fileUtil.js","sourceRoot":"","sources":["../../src/fileUtil.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts
new file mode 100644
index 00000000..48bfd376
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts
@@ -0,0 +1,18 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+///
+import * as http from 'http';
+import { URL } from 'url';
+export declare function headHttpRequest(url: URL): Promise;
+export declare function httpRequest(url: URL, method: string, response: (x: http.IncomingMessage) => void, keepAlive?: boolean): http.ClientRequest;
+/**
+ * @internal
+ */
+export declare function downloadFile(url: URL, destinationPath: string, progressCallback?: (downloadedBytes: number, totalBytes: number) => void): Promise;
+export declare function getJSON(url: URL): Promise;
+export declare function getText(url: URL): Promise;
+//# sourceMappingURL=httpUtil.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts.map
new file mode 100644
index 00000000..e7253d29
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"httpUtil.d.ts","sourceRoot":"","sources":["../../src/httpUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;AAGH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,GAAG,EAAmB,MAAM,KAAK,CAAC;AAI1C,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB1D;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,EAC3C,SAAS,UAAO,GACf,IAAI,CAAC,aAAa,CA8BpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,eAAe,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GACvE,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BjD"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js
new file mode 100644
index 00000000..baf50fc7
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js
@@ -0,0 +1,152 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getText = exports.getJSON = exports.downloadFile = exports.httpRequest = exports.headHttpRequest = void 0;
+const fs_1 = require("fs");
+const http = __importStar(require("http"));
+const https = __importStar(require("https"));
+const url_1 = require("url");
+const proxy_agent_1 = require("proxy-agent");
+function headHttpRequest(url) {
+ return new Promise(resolve => {
+ const request = httpRequest(url, 'HEAD', response => {
+ // consume response data free node process
+ response.resume();
+ resolve(response.statusCode === 200);
+ }, false);
+ request.on('error', () => {
+ resolve(false);
+ });
+ });
+}
+exports.headHttpRequest = headHttpRequest;
+function httpRequest(url, method, response, keepAlive = true) {
+ const options = {
+ protocol: url.protocol,
+ hostname: url.hostname,
+ port: url.port,
+ path: url.pathname + url.search,
+ method,
+ headers: keepAlive ? { Connection: 'keep-alive' } : undefined,
+ auth: (0, url_1.urlToHttpOptions)(url).auth,
+ agent: new proxy_agent_1.ProxyAgent(),
+ };
+ const requestCallback = (res) => {
+ if (res.statusCode &&
+ res.statusCode >= 300 &&
+ res.statusCode < 400 &&
+ res.headers.location) {
+ httpRequest(new url_1.URL(res.headers.location), method, response);
+ }
+ else {
+ response(res);
+ }
+ };
+ const request = options.protocol === 'https:'
+ ? https.request(options, requestCallback)
+ : http.request(options, requestCallback);
+ request.end();
+ return request;
+}
+exports.httpRequest = httpRequest;
+/**
+ * @internal
+ */
+function downloadFile(url, destinationPath, progressCallback) {
+ return new Promise((resolve, reject) => {
+ let downloadedBytes = 0;
+ let totalBytes = 0;
+ function onData(chunk) {
+ downloadedBytes += chunk.length;
+ progressCallback(downloadedBytes, totalBytes);
+ }
+ const request = httpRequest(url, 'GET', response => {
+ if (response.statusCode !== 200) {
+ const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`);
+ // consume response data to free up memory
+ response.resume();
+ reject(error);
+ return;
+ }
+ const file = (0, fs_1.createWriteStream)(destinationPath);
+ file.on('finish', () => {
+ return resolve();
+ });
+ file.on('error', error => {
+ return reject(error);
+ });
+ response.pipe(file);
+ totalBytes = parseInt(response.headers['content-length'], 10);
+ if (progressCallback) {
+ response.on('data', onData);
+ }
+ });
+ request.on('error', error => {
+ return reject(error);
+ });
+ });
+}
+exports.downloadFile = downloadFile;
+async function getJSON(url) {
+ const text = await getText(url);
+ try {
+ return JSON.parse(text);
+ }
+ catch {
+ throw new Error('Could not parse JSON from ' + url.toString());
+ }
+}
+exports.getJSON = getJSON;
+function getText(url) {
+ return new Promise((resolve, reject) => {
+ const request = httpRequest(url, 'GET', response => {
+ let data = '';
+ if (response.statusCode && response.statusCode >= 400) {
+ return reject(new Error(`Got status code ${response.statusCode}`));
+ }
+ response.on('data', chunk => {
+ data += chunk;
+ });
+ response.on('end', () => {
+ try {
+ return resolve(String(data));
+ }
+ catch {
+ return reject(new Error('Chrome version not found'));
+ }
+ });
+ }, false);
+ request.on('error', err => {
+ reject(err);
+ });
+ });
+}
+exports.getText = getText;
+//# sourceMappingURL=httpUtil.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js.map
new file mode 100644
index 00000000..3411599c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/httpUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"httpUtil.js","sourceRoot":"","sources":["../../src/httpUtil.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts
new file mode 100644
index 00000000..be538c54
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts
@@ -0,0 +1,111 @@
+/**
+ * @license
+ * Copyright 2017 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { type Browser, type BrowserPlatform } from './browser-data/browser-data.js';
+import { InstalledBrowser } from './Cache.js';
+/**
+ * @public
+ */
+export interface InstallOptions {
+ /**
+ * Determines the path to download browsers to.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to install.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+ /**
+ * Provides information about the progress of the download.
+ */
+ downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void;
+ /**
+ * Determines the host that will be used for downloading.
+ *
+ * @defaultValue Either
+ *
+ * - https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing or
+ * - https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central
+ *
+ */
+ baseUrl?: string;
+ /**
+ * Whether to unpack and install browser archives.
+ *
+ * @defaultValue `true`
+ */
+ unpack?: boolean;
+}
+/**
+ * @public
+ */
+export declare function install(options: InstallOptions & {
+ unpack?: true;
+}): Promise;
+/**
+ * @public
+ */
+export declare function install(options: InstallOptions & {
+ unpack: false;
+}): Promise;
+/**
+ * @public
+ */
+export interface UninstallOptions {
+ /**
+ * Determines the platform for the browser binary.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which browser to uninstall.
+ */
+ browser: Browser;
+ /**
+ * The browser build to uninstall
+ */
+ buildId: string;
+}
+/**
+ *
+ * @public
+ */
+export declare function uninstall(options: UninstallOptions): Promise;
+/**
+ * @public
+ */
+export interface GetInstalledBrowsersOptions {
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+}
+/**
+ * Returns metadata about browsers installed in the cache directory.
+ *
+ * @public
+ */
+export declare function getInstalledBrowsers(options: GetInstalledBrowsersOptions): Promise;
+/**
+ * @public
+ */
+export declare function canDownload(options: InstallOptions): Promise;
+//# sourceMappingURL=install.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts.map
new file mode 100644
index 00000000..8a635f03
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAQ,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAwBnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,GAAG;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAC,GACxC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7B;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,GAAG;IAAC,MAAM,EAAE,KAAK,CAAA;CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;AA+EnB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAaxE;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE7B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAe3E"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js
new file mode 100644
index 00000000..26881150
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js
@@ -0,0 +1,127 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2017 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.canDownload = exports.getInstalledBrowsers = exports.uninstall = exports.install = void 0;
+const assert_1 = __importDefault(require("assert"));
+const fs_1 = require("fs");
+const promises_1 = require("fs/promises");
+const os_1 = __importDefault(require("os"));
+const path_1 = __importDefault(require("path"));
+const browser_data_js_1 = require("./browser-data/browser-data.js");
+const Cache_js_1 = require("./Cache.js");
+const debug_js_1 = require("./debug.js");
+const detectPlatform_js_1 = require("./detectPlatform.js");
+const fileUtil_js_1 = require("./fileUtil.js");
+const httpUtil_js_1 = require("./httpUtil.js");
+const debugInstall = (0, debug_js_1.debug)('puppeteer:browsers:install');
+const times = new Map();
+function debugTime(label) {
+ times.set(label, process.hrtime());
+}
+function debugTimeEnd(label) {
+ const end = process.hrtime();
+ const start = times.get(label);
+ if (!start) {
+ return;
+ }
+ const duration = end[0] * 1000 + end[1] / 1e6 - (start[0] * 1000 + start[1] / 1e6); // calculate duration in milliseconds
+ debugInstall(`Duration for ${label}: ${duration}ms`);
+}
+async function install(options) {
+ options.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ options.unpack ??= true;
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os_1.default.platform()} (${os_1.default.arch()})`);
+ }
+ const url = getDownloadUrl(options.browser, options.platform, options.buildId, options.baseUrl);
+ const fileName = url.toString().split('/').pop();
+ (0, assert_1.default)(fileName, `A malformed download URL was found: ${url}.`);
+ const cache = new Cache_js_1.Cache(options.cacheDir);
+ const browserRoot = cache.browserRoot(options.browser);
+ const archivePath = path_1.default.join(browserRoot, `${options.buildId}-${fileName}`);
+ if (!(0, fs_1.existsSync)(browserRoot)) {
+ await (0, promises_1.mkdir)(browserRoot, { recursive: true });
+ }
+ if (!options.unpack) {
+ if ((0, fs_1.existsSync)(archivePath)) {
+ return archivePath;
+ }
+ debugInstall(`Downloading binary from ${url}`);
+ debugTime('download');
+ await (0, httpUtil_js_1.downloadFile)(url, archivePath, options.downloadProgressCallback);
+ debugTimeEnd('download');
+ return archivePath;
+ }
+ const outputPath = cache.installationDir(options.browser, options.platform, options.buildId);
+ if ((0, fs_1.existsSync)(outputPath)) {
+ return new Cache_js_1.InstalledBrowser(cache, options.browser, options.buildId, options.platform);
+ }
+ try {
+ debugInstall(`Downloading binary from ${url}`);
+ try {
+ debugTime('download');
+ await (0, httpUtil_js_1.downloadFile)(url, archivePath, options.downloadProgressCallback);
+ }
+ finally {
+ debugTimeEnd('download');
+ }
+ debugInstall(`Installing ${archivePath} to ${outputPath}`);
+ try {
+ debugTime('extract');
+ await (0, fileUtil_js_1.unpackArchive)(archivePath, outputPath);
+ }
+ finally {
+ debugTimeEnd('extract');
+ }
+ }
+ finally {
+ if ((0, fs_1.existsSync)(archivePath)) {
+ await (0, promises_1.unlink)(archivePath);
+ }
+ }
+ return new Cache_js_1.InstalledBrowser(cache, options.browser, options.buildId, options.platform);
+}
+exports.install = install;
+/**
+ *
+ * @public
+ */
+async function uninstall(options) {
+ options.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ if (!options.platform) {
+ throw new Error(`Cannot detect the browser platform for: ${os_1.default.platform()} (${os_1.default.arch()})`);
+ }
+ new Cache_js_1.Cache(options.cacheDir).uninstall(options.browser, options.platform, options.buildId);
+}
+exports.uninstall = uninstall;
+/**
+ * Returns metadata about browsers installed in the cache directory.
+ *
+ * @public
+ */
+async function getInstalledBrowsers(options) {
+ return new Cache_js_1.Cache(options.cacheDir).getInstalledBrowsers();
+}
+exports.getInstalledBrowsers = getInstalledBrowsers;
+/**
+ * @public
+ */
+async function canDownload(options) {
+ options.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os_1.default.platform()} (${os_1.default.arch()})`);
+ }
+ return await (0, httpUtil_js_1.headHttpRequest)(getDownloadUrl(options.browser, options.platform, options.buildId, options.baseUrl));
+}
+exports.canDownload = canDownload;
+function getDownloadUrl(browser, platform, buildId, baseUrl) {
+ return new URL(browser_data_js_1.downloadUrls[browser](platform, buildId, baseUrl));
+}
+//# sourceMappingURL=install.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js.map
new file mode 100644
index 00000000..7959ec1a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/install.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts
new file mode 100644
index 00000000..54335f7d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts
@@ -0,0 +1,124 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+///
+import childProcess from 'child_process';
+import { type Browser, type BrowserPlatform, type ChromeReleaseChannel } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Root path to the storage directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+/**
+ * @public
+ */
+export declare function computeExecutablePath(options: ComputeExecutablePathOptions): string;
+/**
+ * @public
+ */
+export interface SystemOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Release channel to look for on the system.
+ */
+ channel: ChromeReleaseChannel;
+}
+/**
+ * @public
+ */
+export declare function computeSystemExecutablePath(options: SystemOptions): string;
+/**
+ * @public
+ */
+export interface LaunchOptions {
+ executablePath: string;
+ pipe?: boolean;
+ dumpio?: boolean;
+ args?: string[];
+ env?: Record;
+ handleSIGINT?: boolean;
+ handleSIGTERM?: boolean;
+ handleSIGHUP?: boolean;
+ detached?: boolean;
+ onExit?: () => Promise;
+}
+/**
+ * @public
+ */
+export declare function launch(opts: LaunchOptions): Process;
+/**
+ * @public
+ */
+export declare const CDP_WEBSOCKET_ENDPOINT_REGEX: RegExp;
+/**
+ * @public
+ */
+export declare const WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX: RegExp;
+/**
+ * @public
+ */
+export declare class Process {
+ #private;
+ constructor(opts: LaunchOptions);
+ get nodeProcess(): childProcess.ChildProcess;
+ close(): Promise;
+ hasClosed(): Promise;
+ kill(): void;
+ waitForLineOutput(regex: RegExp, timeout?: number): Promise;
+}
+/**
+ * @internal
+ */
+export interface ErrorLike extends Error {
+ name: string;
+ message: string;
+}
+/**
+ * @internal
+ */
+export declare function isErrorLike(obj: unknown): obj is ErrorLike;
+/**
+ * @internal
+ */
+export declare function isErrnoException(obj: unknown): obj is NodeJS.ErrnoException;
+/**
+ * @public
+ */
+export declare class TimeoutError extends Error {
+ /**
+ * @internal
+ */
+ constructor(message?: string);
+}
+//# sourceMappingURL=launch.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts.map
new file mode 100644
index 00000000..5b26214f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/launch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AAKzC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,KAAK,oBAAoB,EAC1B,MAAM,gCAAgC,CAAC;AAOxC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,MAAM,CAER;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAoB1E;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,QACF,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,uCAAuC,QACP,CAAC;AAE9C;;GAEG;AACH,qBAAa,OAAO;;gBAYN,IAAI,EAAE,aAAa;IAwF/B,IAAI,WAAW,IAAI,YAAY,CAAC,YAAY,CAE3C;IA4CK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,IAAI,IAAI,IAAI;IAwDZ,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CA+D/D;AAuBD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAI1D;AACD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAK3E;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;gBACS,OAAO,CAAC,EAAE,MAAM;CAK7B"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js
new file mode 100644
index 00000000..45cbaf06
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js
@@ -0,0 +1,342 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.TimeoutError = exports.isErrnoException = exports.isErrorLike = exports.Process = exports.WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX = exports.CDP_WEBSOCKET_ENDPOINT_REGEX = exports.launch = exports.computeSystemExecutablePath = exports.computeExecutablePath = void 0;
+const child_process_1 = __importDefault(require("child_process"));
+const fs_1 = require("fs");
+const os_1 = __importDefault(require("os"));
+const readline_1 = __importDefault(require("readline"));
+const browser_data_js_1 = require("./browser-data/browser-data.js");
+const Cache_js_1 = require("./Cache.js");
+const debug_js_1 = require("./debug.js");
+const detectPlatform_js_1 = require("./detectPlatform.js");
+const debugLaunch = (0, debug_js_1.debug)('puppeteer:browsers:launcher');
+/**
+ * @public
+ */
+function computeExecutablePath(options) {
+ return new Cache_js_1.Cache(options.cacheDir).computeExecutablePath(options);
+}
+exports.computeExecutablePath = computeExecutablePath;
+/**
+ * @public
+ */
+function computeSystemExecutablePath(options) {
+ options.platform ??= (0, detectPlatform_js_1.detectBrowserPlatform)();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os_1.default.platform()} (${os_1.default.arch()})`);
+ }
+ const path = (0, browser_data_js_1.resolveSystemExecutablePath)(options.browser, options.platform, options.channel);
+ try {
+ (0, fs_1.accessSync)(path);
+ }
+ catch (error) {
+ throw new Error(`Could not find Google Chrome executable for channel '${options.channel}' at '${path}'.`);
+ }
+ return path;
+}
+exports.computeSystemExecutablePath = computeSystemExecutablePath;
+/**
+ * @public
+ */
+function launch(opts) {
+ return new Process(opts);
+}
+exports.launch = launch;
+/**
+ * @public
+ */
+exports.CDP_WEBSOCKET_ENDPOINT_REGEX = /^DevTools listening on (ws:\/\/.*)$/;
+/**
+ * @public
+ */
+exports.WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX = /^WebDriver BiDi listening on (ws:\/\/.*)$/;
+/**
+ * @public
+ */
+class Process {
+ #executablePath;
+ #args;
+ #browserProcess;
+ #exited = false;
+ // The browser process can be closed externally or from the driver process. We
+ // need to invoke the hooks only once though but we don't know how many times
+ // we will be invoked.
+ #hooksRan = false;
+ #onExitHook = async () => { };
+ #browserProcessExiting;
+ constructor(opts) {
+ this.#executablePath = opts.executablePath;
+ this.#args = opts.args ?? [];
+ opts.pipe ??= false;
+ opts.dumpio ??= false;
+ opts.handleSIGINT ??= true;
+ opts.handleSIGTERM ??= true;
+ opts.handleSIGHUP ??= true;
+ // On non-windows platforms, `detached: true` makes child process a
+ // leader of a new process group, making it possible to kill child
+ // process tree with `.kill(-pid)` command. @see
+ // https://nodejs.org/api/child_process.html#child_process_options_detached
+ opts.detached ??= process.platform !== 'win32';
+ const stdio = this.#configureStdio({
+ pipe: opts.pipe,
+ dumpio: opts.dumpio,
+ });
+ const env = opts.env || {};
+ debugLaunch(`Launching ${this.#executablePath} ${this.#args.join(' ')}`, {
+ detached: opts.detached,
+ env: Object.keys(env).reduce((res, key) => {
+ if (key.toLowerCase().startsWith('puppeteer_')) {
+ res[key] = env[key];
+ }
+ return res;
+ }, {}),
+ stdio,
+ });
+ this.#browserProcess = child_process_1.default.spawn(this.#executablePath, this.#args, {
+ detached: opts.detached,
+ env,
+ stdio,
+ });
+ debugLaunch(`Launched ${this.#browserProcess.pid}`);
+ if (opts.dumpio) {
+ this.#browserProcess.stderr?.pipe(process.stderr);
+ this.#browserProcess.stdout?.pipe(process.stdout);
+ }
+ process.on('exit', this.#onDriverProcessExit);
+ if (opts.handleSIGINT) {
+ process.on('SIGINT', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGTERM) {
+ process.on('SIGTERM', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGHUP) {
+ process.on('SIGHUP', this.#onDriverProcessSignal);
+ }
+ if (opts.onExit) {
+ this.#onExitHook = opts.onExit;
+ }
+ this.#browserProcessExiting = new Promise((resolve, reject) => {
+ this.#browserProcess.once('exit', async () => {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} onExit`);
+ this.#clearListeners();
+ this.#exited = true;
+ try {
+ await this.#runHooks();
+ }
+ catch (err) {
+ reject(err);
+ return;
+ }
+ resolve();
+ });
+ });
+ }
+ async #runHooks() {
+ if (this.#hooksRan) {
+ return;
+ }
+ this.#hooksRan = true;
+ await this.#onExitHook();
+ }
+ get nodeProcess() {
+ return this.#browserProcess;
+ }
+ #configureStdio(opts) {
+ if (opts.pipe) {
+ if (opts.dumpio) {
+ return ['ignore', 'pipe', 'pipe', 'pipe', 'pipe'];
+ }
+ else {
+ return ['ignore', 'ignore', 'ignore', 'pipe', 'pipe'];
+ }
+ }
+ else {
+ if (opts.dumpio) {
+ return ['pipe', 'pipe', 'pipe'];
+ }
+ else {
+ return ['pipe', 'ignore', 'pipe'];
+ }
+ }
+ }
+ #clearListeners() {
+ process.off('exit', this.#onDriverProcessExit);
+ process.off('SIGINT', this.#onDriverProcessSignal);
+ process.off('SIGTERM', this.#onDriverProcessSignal);
+ process.off('SIGHUP', this.#onDriverProcessSignal);
+ }
+ #onDriverProcessExit = (_code) => {
+ this.kill();
+ };
+ #onDriverProcessSignal = (signal) => {
+ switch (signal) {
+ case 'SIGINT':
+ this.kill();
+ process.exit(130);
+ case 'SIGTERM':
+ case 'SIGHUP':
+ void this.close();
+ break;
+ }
+ };
+ async close() {
+ await this.#runHooks();
+ if (!this.#exited) {
+ this.kill();
+ }
+ return await this.#browserProcessExiting;
+ }
+ hasClosed() {
+ return this.#browserProcessExiting;
+ }
+ kill() {
+ debugLaunch(`Trying to kill ${this.#browserProcess.pid}`);
+ // If the process failed to launch (for example if the browser executable path
+ // is invalid), then the process does not get a pid assigned. A call to
+ // `proc.kill` would error, as the `pid` to-be-killed can not be found.
+ if (this.#browserProcess &&
+ this.#browserProcess.pid &&
+ pidExists(this.#browserProcess.pid)) {
+ try {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} exists`);
+ if (process.platform === 'win32') {
+ try {
+ child_process_1.default.execSync(`taskkill /pid ${this.#browserProcess.pid} /T /F`);
+ }
+ catch (error) {
+ debugLaunch(`Killing ${this.#browserProcess.pid} using taskkill failed`, error);
+ // taskkill can fail to kill the process e.g. due to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill();
+ }
+ }
+ else {
+ // on linux the process group can be killed with the group id prefixed with
+ // a minus sign. The process group id is the group leader's pid.
+ const processGroupId = -this.#browserProcess.pid;
+ try {
+ process.kill(processGroupId, 'SIGKILL');
+ }
+ catch (error) {
+ debugLaunch(`Killing ${this.#browserProcess.pid} using process.kill failed`, error);
+ // Killing the process group can fail due e.g. to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill('SIGKILL');
+ }
+ }
+ }
+ catch (error) {
+ throw new Error(`${PROCESS_ERROR_EXPLANATION}\nError cause: ${isErrorLike(error) ? error.stack : error}`);
+ }
+ }
+ this.#clearListeners();
+ }
+ waitForLineOutput(regex, timeout = 0) {
+ if (!this.#browserProcess.stderr) {
+ throw new Error('`browserProcess` does not have stderr.');
+ }
+ const rl = readline_1.default.createInterface(this.#browserProcess.stderr);
+ let stderr = '';
+ return new Promise((resolve, reject) => {
+ rl.on('line', onLine);
+ rl.on('close', onClose);
+ this.#browserProcess.on('exit', onClose);
+ this.#browserProcess.on('error', onClose);
+ const timeoutId = timeout > 0 ? setTimeout(onTimeout, timeout) : undefined;
+ const cleanup = () => {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ rl.off('line', onLine);
+ rl.off('close', onClose);
+ this.#browserProcess.off('exit', onClose);
+ this.#browserProcess.off('error', onClose);
+ };
+ function onClose(error) {
+ cleanup();
+ reject(new Error([
+ `Failed to launch the browser process!${error ? ' ' + error.message : ''}`,
+ stderr,
+ '',
+ 'TROUBLESHOOTING: https://pptr.dev/troubleshooting',
+ '',
+ ].join('\n')));
+ }
+ function onTimeout() {
+ cleanup();
+ reject(new TimeoutError(`Timed out after ${timeout} ms while waiting for the WS endpoint URL to appear in stdout!`));
+ }
+ function onLine(line) {
+ stderr += line + '\n';
+ const match = line.match(regex);
+ if (!match) {
+ return;
+ }
+ cleanup();
+ // The RegExp matches, so this will obviously exist.
+ resolve(match[1]);
+ }
+ });
+ }
+}
+exports.Process = Process;
+const PROCESS_ERROR_EXPLANATION = `Puppeteer was unable to kill the process which ran the browser binary.
+This means that, on future Puppeteer launches, Puppeteer might not be able to launch the browser.
+Please check your open processes and ensure that the browser processes that Puppeteer launched have been killed.
+If you think this is a bug, please report it on the Puppeteer issue tracker.`;
+/**
+ * @internal
+ */
+function pidExists(pid) {
+ try {
+ return process.kill(pid, 0);
+ }
+ catch (error) {
+ if (isErrnoException(error)) {
+ if (error.code && error.code === 'ESRCH') {
+ return false;
+ }
+ }
+ throw error;
+ }
+}
+/**
+ * @internal
+ */
+function isErrorLike(obj) {
+ return (typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj);
+}
+exports.isErrorLike = isErrorLike;
+/**
+ * @internal
+ */
+function isErrnoException(obj) {
+ return (isErrorLike(obj) &&
+ ('errno' in obj || 'code' in obj || 'path' in obj || 'syscall' in obj));
+}
+exports.isErrnoException = isErrnoException;
+/**
+ * @public
+ */
+class TimeoutError extends Error {
+ /**
+ * @internal
+ */
+ constructor(message) {
+ super(message);
+ this.name = this.constructor.name;
+ Error.captureStackTrace(this, this.constructor);
+ }
+}
+exports.TimeoutError = TimeoutError;
+//# sourceMappingURL=launch.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js.map
new file mode 100644
index 00000000..48777a80
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/launch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/launch.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts
new file mode 100644
index 00000000..24f6aa59
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+export {};
+//# sourceMappingURL=main-cli.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts.map
new file mode 100644
index 00000000..97cfca76
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-cli.d.ts","sourceRoot":"","sources":["../../src/main-cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js
new file mode 100755
index 00000000..0671147f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js
@@ -0,0 +1,11 @@
+#!/usr/bin/env node
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+const CLI_js_1 = require("./CLI.js");
+void new CLI_js_1.CLI().run(process.argv);
+//# sourceMappingURL=main-cli.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js.map
new file mode 100644
index 00000000..e8ef40fc
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main-cli.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-cli.js","sourceRoot":"","sources":["../../src/main-cli.ts"],"names":[],"mappings":";;AAEA;;;;GAIG;;AAEH,qCAA6B;AAE7B,KAAK,IAAI,YAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts
new file mode 100644
index 00000000..6e4355d9
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts
@@ -0,0 +1,15 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+export type { LaunchOptions, ComputeExecutablePathOptions as Options, SystemOptions, } from './launch.js';
+export { launch, computeExecutablePath, computeSystemExecutablePath, TimeoutError, CDP_WEBSOCKET_ENDPOINT_REGEX, WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX, Process, } from './launch.js';
+export type { InstallOptions, GetInstalledBrowsersOptions, UninstallOptions, } from './install.js';
+export { install, getInstalledBrowsers, canDownload, uninstall, } from './install.js';
+export { detectBrowserPlatform } from './detectPlatform.js';
+export type { ProfileOptions } from './browser-data/browser-data.js';
+export { resolveBuildId, Browser, BrowserPlatform, ChromeReleaseChannel, createProfile, } from './browser-data/browser-data.js';
+export { CLI, makeProgressCallback } from './CLI.js';
+export { Cache, InstalledBrowser } from './Cache.js';
+//# sourceMappingURL=main.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts.map
new file mode 100644
index 00000000..74ebb541
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,aAAa,EACb,4BAA4B,IAAI,OAAO,EACvC,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACZ,4BAA4B,EAC5B,uCAAuC,EACvC,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,cAAc,EACd,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,GAAG,EAAE,oBAAoB,EAAC,MAAM,UAAU,CAAC;AACnD,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAC,MAAM,YAAY,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js
new file mode 100644
index 00000000..c0453ed9
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js
@@ -0,0 +1,36 @@
+"use strict";
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.InstalledBrowser = exports.Cache = exports.makeProgressCallback = exports.CLI = exports.createProfile = exports.ChromeReleaseChannel = exports.BrowserPlatform = exports.Browser = exports.resolveBuildId = exports.detectBrowserPlatform = exports.uninstall = exports.canDownload = exports.getInstalledBrowsers = exports.install = exports.Process = exports.WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX = exports.CDP_WEBSOCKET_ENDPOINT_REGEX = exports.TimeoutError = exports.computeSystemExecutablePath = exports.computeExecutablePath = exports.launch = void 0;
+var launch_js_1 = require("./launch.js");
+Object.defineProperty(exports, "launch", { enumerable: true, get: function () { return launch_js_1.launch; } });
+Object.defineProperty(exports, "computeExecutablePath", { enumerable: true, get: function () { return launch_js_1.computeExecutablePath; } });
+Object.defineProperty(exports, "computeSystemExecutablePath", { enumerable: true, get: function () { return launch_js_1.computeSystemExecutablePath; } });
+Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return launch_js_1.TimeoutError; } });
+Object.defineProperty(exports, "CDP_WEBSOCKET_ENDPOINT_REGEX", { enumerable: true, get: function () { return launch_js_1.CDP_WEBSOCKET_ENDPOINT_REGEX; } });
+Object.defineProperty(exports, "WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX", { enumerable: true, get: function () { return launch_js_1.WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX; } });
+Object.defineProperty(exports, "Process", { enumerable: true, get: function () { return launch_js_1.Process; } });
+var install_js_1 = require("./install.js");
+Object.defineProperty(exports, "install", { enumerable: true, get: function () { return install_js_1.install; } });
+Object.defineProperty(exports, "getInstalledBrowsers", { enumerable: true, get: function () { return install_js_1.getInstalledBrowsers; } });
+Object.defineProperty(exports, "canDownload", { enumerable: true, get: function () { return install_js_1.canDownload; } });
+Object.defineProperty(exports, "uninstall", { enumerable: true, get: function () { return install_js_1.uninstall; } });
+var detectPlatform_js_1 = require("./detectPlatform.js");
+Object.defineProperty(exports, "detectBrowserPlatform", { enumerable: true, get: function () { return detectPlatform_js_1.detectBrowserPlatform; } });
+var browser_data_js_1 = require("./browser-data/browser-data.js");
+Object.defineProperty(exports, "resolveBuildId", { enumerable: true, get: function () { return browser_data_js_1.resolveBuildId; } });
+Object.defineProperty(exports, "Browser", { enumerable: true, get: function () { return browser_data_js_1.Browser; } });
+Object.defineProperty(exports, "BrowserPlatform", { enumerable: true, get: function () { return browser_data_js_1.BrowserPlatform; } });
+Object.defineProperty(exports, "ChromeReleaseChannel", { enumerable: true, get: function () { return browser_data_js_1.ChromeReleaseChannel; } });
+Object.defineProperty(exports, "createProfile", { enumerable: true, get: function () { return browser_data_js_1.createProfile; } });
+var CLI_js_1 = require("./CLI.js");
+Object.defineProperty(exports, "CLI", { enumerable: true, get: function () { return CLI_js_1.CLI; } });
+Object.defineProperty(exports, "makeProgressCallback", { enumerable: true, get: function () { return CLI_js_1.makeProgressCallback; } });
+var Cache_js_1 = require("./Cache.js");
+Object.defineProperty(exports, "Cache", { enumerable: true, get: function () { return Cache_js_1.Cache; } });
+Object.defineProperty(exports, "InstalledBrowser", { enumerable: true, get: function () { return Cache_js_1.InstalledBrowser; } });
+//# sourceMappingURL=main.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js.map
new file mode 100644
index 00000000..9c14b389
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/cjs/main.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAOH,yCAQqB;AAPnB,mGAAA,MAAM,OAAA;AACN,kHAAA,qBAAqB,OAAA;AACrB,wHAAA,2BAA2B,OAAA;AAC3B,yGAAA,YAAY,OAAA;AACZ,yHAAA,4BAA4B,OAAA;AAC5B,oIAAA,uCAAuC,OAAA;AACvC,oGAAA,OAAO,OAAA;AAOT,2CAKsB;AAJpB,qGAAA,OAAO,OAAA;AACP,kHAAA,oBAAoB,OAAA;AACpB,yGAAA,WAAW,OAAA;AACX,uGAAA,SAAS,OAAA;AAEX,yDAA0D;AAAlD,0HAAA,qBAAqB,OAAA;AAE7B,kEAMwC;AALtC,iHAAA,cAAc,OAAA;AACd,0GAAA,OAAO,OAAA;AACP,kHAAA,eAAe,OAAA;AACf,uHAAA,oBAAoB,OAAA;AACpB,gHAAA,aAAa,OAAA;AAEf,mCAAmD;AAA3C,6FAAA,GAAG,OAAA;AAAE,8GAAA,oBAAoB,OAAA;AACjC,uCAAmD;AAA3C,iGAAA,KAAK,OAAA;AAAE,4GAAA,gBAAgB,OAAA"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts
new file mode 100644
index 00000000..4c2d25b3
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts
@@ -0,0 +1,32 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+import * as readline from 'readline';
+import { type Browser } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare class CLI {
+ #private;
+ constructor(opts?: string | {
+ cachePath?: string;
+ scriptName?: string;
+ prefixCommand?: {
+ cmd: string;
+ description: string;
+ };
+ allowCachePathOverride?: boolean;
+ pinnedBrowsers?: Partial<{
+ [key in Browser]: string;
+ }>;
+ }, rl?: readline.Interface);
+ run(argv: string[]): Promise;
+}
+/**
+ * @public
+ */
+export declare function makeProgressCallback(browser: Browser, buildId: string): (downloadedBytes: number, totalBytes: number) => void;
+//# sourceMappingURL=CLI.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts.map
new file mode 100644
index 00000000..35044cf1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../src/CLI.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAGH,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AAOrC,OAAO,EAEL,KAAK,OAAO,EAGb,MAAM,gCAAgC,CAAC;AAmCxC;;GAEG;AACH,qBAAa,GAAG;;gBASZ,IAAI,CAAC,EACD,MAAM,GACN;QACE,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAC,CAAC;QACnD,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,cAAc,CAAC,EAAE,OAAO,CAAC;aAAE,GAAG,IAAI,OAAO,GAAG,MAAM;SAAC,CAAC,CAAC;KACtD,EACL,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS;IAwDnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA2OzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAqBvD"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js
new file mode 100644
index 00000000..fc2a7254
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js
@@ -0,0 +1,245 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { stdin as input, stdout as output } from 'process';
+import * as readline from 'readline';
+import ProgressBar from 'progress';
+import { hideBin } from 'yargs/helpers';
+import yargs from 'yargs/yargs';
+import { resolveBuildId, BrowserPlatform, } from './browser-data/browser-data.js';
+import { Cache } from './Cache.js';
+import { detectBrowserPlatform } from './detectPlatform.js';
+import { install } from './install.js';
+import { computeExecutablePath, computeSystemExecutablePath, launch, } from './launch.js';
+/**
+ * @public
+ */
+export class CLI {
+ #cachePath;
+ #rl;
+ #scriptName = '';
+ #allowCachePathOverride = true;
+ #pinnedBrowsers;
+ #prefixCommand;
+ constructor(opts, rl) {
+ if (!opts) {
+ opts = {};
+ }
+ if (typeof opts === 'string') {
+ opts = {
+ cachePath: opts,
+ };
+ }
+ this.#cachePath = opts.cachePath ?? process.cwd();
+ this.#rl = rl;
+ this.#scriptName = opts.scriptName ?? '@puppeteer/browsers';
+ this.#allowCachePathOverride = opts.allowCachePathOverride ?? true;
+ this.#pinnedBrowsers = opts.pinnedBrowsers;
+ this.#prefixCommand = opts.prefixCommand;
+ }
+ #defineBrowserParameter(yargs) {
+ yargs.positional('browser', {
+ description: 'Which browser to install [@]. `latest` will try to find the latest available build. `buildId` is a browser-specific identifier such as a version or a revision.',
+ type: 'string',
+ coerce: (opt) => {
+ return {
+ name: this.#parseBrowser(opt),
+ buildId: this.#parseBuildId(opt),
+ };
+ },
+ });
+ }
+ #definePlatformParameter(yargs) {
+ yargs.option('platform', {
+ type: 'string',
+ desc: 'Platform that the binary needs to be compatible with.',
+ choices: Object.values(BrowserPlatform),
+ defaultDescription: 'Auto-detected',
+ });
+ }
+ #definePathParameter(yargs, required = false) {
+ if (!this.#allowCachePathOverride) {
+ return;
+ }
+ yargs.option('path', {
+ type: 'string',
+ desc: 'Path to the root folder for the browser downloads and installation. The installation folder structure is compatible with the cache structure used by Puppeteer.',
+ defaultDescription: 'Current working directory',
+ ...(required ? {} : { default: process.cwd() }),
+ });
+ if (required) {
+ yargs.demandOption('path');
+ }
+ }
+ async run(argv) {
+ const yargsInstance = yargs(hideBin(argv));
+ let target = yargsInstance.scriptName(this.#scriptName);
+ if (this.#prefixCommand) {
+ target = target.command(this.#prefixCommand.cmd, this.#prefixCommand.description, yargs => {
+ return this.#build(yargs);
+ });
+ }
+ else {
+ target = this.#build(target);
+ }
+ await target
+ .demandCommand(1)
+ .help()
+ .wrap(Math.min(120, yargsInstance.terminalWidth()))
+ .parse();
+ }
+ #build(yargs) {
+ const latestOrPinned = this.#pinnedBrowsers ? 'pinned' : 'latest';
+ return yargs
+ .command('install ', 'Download and install the specified browser. If successful, the command outputs the actual browser buildId that was installed and the absolute path to the browser executable (format: @ ).', yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('base-url', {
+ type: 'string',
+ desc: 'Base URL to download from',
+ });
+ yargs.example('$0 install chrome', `Install the ${latestOrPinned} available build of the Chrome browser.`);
+ yargs.example('$0 install chrome@latest', 'Install the latest available build for the Chrome browser.');
+ yargs.example('$0 install chrome@canary', 'Install the latest available build for the Chrome Canary browser.');
+ yargs.example('$0 install chrome@115', 'Install the latest available build for Chrome 115.');
+ yargs.example('$0 install chromedriver@canary', 'Install the latest available build for ChromeDriver Canary.');
+ yargs.example('$0 install chromedriver@115', 'Install the latest available build for ChromeDriver 115.');
+ yargs.example('$0 install chromedriver@115.0.5790', 'Install the latest available patch (115.0.5790.X) build for ChromeDriver.');
+ yargs.example('$0 install chrome-headless-shell', 'Install the latest available chrome-headless-shell build.');
+ yargs.example('$0 install chrome-headless-shell@beta', 'Install the latest available chrome-headless-shell build corresponding to the Beta channel.');
+ yargs.example('$0 install chrome-headless-shell@118', 'Install the latest available chrome-headless-shell 118 build.');
+ yargs.example('$0 install chromium@1083080', 'Install the revision 1083080 of the Chromium browser.');
+ yargs.example('$0 install firefox', 'Install the latest available build of the Firefox browser.');
+ yargs.example('$0 install firefox --platform mac', 'Install the latest Mac (Intel) build of the Firefox browser.');
+ if (this.#allowCachePathOverride) {
+ yargs.example('$0 install firefox --path /tmp/my-browser-cache', 'Install to the specified cache directory.');
+ }
+ }, async (argv) => {
+ const args = argv;
+ args.platform ??= detectBrowserPlatform();
+ if (!args.platform) {
+ throw new Error(`Could not resolve the current platform`);
+ }
+ if (args.browser.buildId === 'pinned') {
+ const pinnedVersion = this.#pinnedBrowsers?.[args.browser.name];
+ if (!pinnedVersion) {
+ throw new Error(`No pinned version found for ${args.browser.name}`);
+ }
+ args.browser.buildId = pinnedVersion;
+ }
+ args.browser.buildId = await resolveBuildId(args.browser.name, args.platform, args.browser.buildId);
+ await install({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ platform: args.platform,
+ cacheDir: args.path ?? this.#cachePath,
+ downloadProgressCallback: makeProgressCallback(args.browser.name, args.browser.buildId),
+ baseUrl: args.baseUrl,
+ });
+ console.log(`${args.browser.name}@${args.browser.buildId} ${computeExecutablePath({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ })}`);
+ })
+ .command('launch ', 'Launch the specified browser', yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('detached', {
+ type: 'boolean',
+ desc: 'Detach the child process.',
+ default: false,
+ });
+ yargs.option('system', {
+ type: 'boolean',
+ desc: 'Search for a browser installed on the system instead of the cache folder.',
+ default: false,
+ });
+ yargs.example('$0 launch chrome@115.0.5790.170', 'Launch Chrome 115.0.5790.170');
+ yargs.example('$0 launch firefox@112.0a1', 'Launch the Firefox browser identified by the milestone 112.0a1.');
+ yargs.example('$0 launch chrome@115.0.5790.170 --detached', 'Launch the browser but detach the sub-processes.');
+ yargs.example('$0 launch chrome@canary --system', 'Try to locate the Canary build of Chrome installed on the system and launch it.');
+ }, async (argv) => {
+ const args = argv;
+ const executablePath = args.system
+ ? computeSystemExecutablePath({
+ browser: args.browser.name,
+ // TODO: throw an error if not a ChromeReleaseChannel is provided.
+ channel: args.browser.buildId,
+ platform: args.platform,
+ })
+ : computeExecutablePath({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ });
+ launch({
+ executablePath,
+ detached: args.detached,
+ });
+ })
+ .command('clear', this.#allowCachePathOverride
+ ? 'Removes all installed browsers from the specified cache directory'
+ : `Removes all installed browsers from ${this.#cachePath}`, yargs => {
+ this.#definePathParameter(yargs, true);
+ }, async (argv) => {
+ const args = argv;
+ const cacheDir = args.path ?? this.#cachePath;
+ const rl = this.#rl ?? readline.createInterface({ input, output });
+ rl.question(`Do you want to permanently and recursively delete the content of ${cacheDir} (yes/No)? `, answer => {
+ rl.close();
+ if (!['y', 'yes'].includes(answer.toLowerCase().trim())) {
+ console.log('Cancelled.');
+ return;
+ }
+ const cache = new Cache(cacheDir);
+ cache.clear();
+ console.log(`${cacheDir} cleared.`);
+ });
+ })
+ .demandCommand(1)
+ .help();
+ }
+ #parseBrowser(version) {
+ return version.split('@').shift();
+ }
+ #parseBuildId(version) {
+ const parts = version.split('@');
+ return parts.length === 2
+ ? parts[1]
+ : this.#pinnedBrowsers
+ ? 'pinned'
+ : 'latest';
+ }
+}
+/**
+ * @public
+ */
+export function makeProgressCallback(browser, buildId) {
+ let progressBar;
+ let lastDownloadedBytes = 0;
+ return (downloadedBytes, totalBytes) => {
+ if (!progressBar) {
+ progressBar = new ProgressBar(`Downloading ${browser} r${buildId} - ${toMegabytes(totalBytes)} [:bar] :percent :etas `, {
+ complete: '=',
+ incomplete: ' ',
+ width: 20,
+ total: totalBytes,
+ });
+ }
+ const delta = downloadedBytes - lastDownloadedBytes;
+ lastDownloadedBytes = downloadedBytes;
+ progressBar.tick(delta);
+ };
+}
+function toMegabytes(bytes) {
+ const mb = bytes / 1000 / 1000;
+ return `${Math.round(mb * 10) / 10} MB`;
+}
+//# sourceMappingURL=CLI.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js.map
new file mode 100644
index 00000000..ab2ba8a2
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/CLI.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"CLI.js","sourceRoot":"","sources":["../../src/CLI.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts
new file mode 100644
index 00000000..50498139
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts
@@ -0,0 +1,74 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { Browser, type BrowserPlatform } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare class InstalledBrowser {
+ #private;
+ browser: Browser;
+ buildId: string;
+ platform: BrowserPlatform;
+ readonly executablePath: string;
+ /**
+ * @internal
+ */
+ constructor(cache: Cache, browser: Browser, buildId: string, platform: BrowserPlatform);
+ /**
+ * Path to the root of the installation folder. Use
+ * {@link computeExecutablePath} to get the path to the executable binary.
+ */
+ get path(): string;
+}
+/**
+ * @internal
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+/**
+ * The cache used by Puppeteer relies on the following structure:
+ *
+ * - rootDir
+ * -- | browserRoot(browser1)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * -- | browserRoot(browser2)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * @internal
+ */
+export declare class Cache {
+ #private;
+ constructor(rootDir: string);
+ /**
+ * @internal
+ */
+ get rootDir(): string;
+ browserRoot(browser: Browser): string;
+ installationDir(browser: Browser, platform: BrowserPlatform, buildId: string): string;
+ clear(): void;
+ uninstall(browser: Browser, platform: BrowserPlatform, buildId: string): void;
+ getInstalledBrowsers(): InstalledBrowser[];
+ computeExecutablePath(options: ComputeExecutablePathOptions): string;
+}
+//# sourceMappingURL=Cache.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts.map
new file mode 100644
index 00000000..3a1aea53
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"Cache.d.ts","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,OAAO,EACP,KAAK,eAAe,EAErB,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,qBAAa,gBAAgB;;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAIhC;;OAEG;gBAED,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe;IAa3B;;;OAGG;IACH,IAAI,IAAI,IAAI,MAAM,CAMjB;CACF;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,KAAK;;gBAGJ,OAAO,EAAE,MAAM;IAI3B;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAIrC,eAAe,CACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM;IAIT,KAAK,IAAI,IAAI;IASb,SAAS,CACP,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,IAAI;IASP,oBAAoB,IAAI,gBAAgB,EAAE;IA+B1C,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,MAAM;CAoBrE"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js
new file mode 100644
index 00000000..0af8720d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js
@@ -0,0 +1,133 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
+import { Browser, executablePathByBrowser, } from './browser-data/browser-data.js';
+import { detectBrowserPlatform } from './detectPlatform.js';
+/**
+ * @public
+ */
+export class InstalledBrowser {
+ browser;
+ buildId;
+ platform;
+ executablePath;
+ #cache;
+ /**
+ * @internal
+ */
+ constructor(cache, browser, buildId, platform) {
+ this.#cache = cache;
+ this.browser = browser;
+ this.buildId = buildId;
+ this.platform = platform;
+ this.executablePath = cache.computeExecutablePath({
+ browser,
+ buildId,
+ platform,
+ });
+ }
+ /**
+ * Path to the root of the installation folder. Use
+ * {@link computeExecutablePath} to get the path to the executable binary.
+ */
+ get path() {
+ return this.#cache.installationDir(this.browser, this.platform, this.buildId);
+ }
+}
+/**
+ * The cache used by Puppeteer relies on the following structure:
+ *
+ * - rootDir
+ * -- | browserRoot(browser1)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * -- | browserRoot(browser2)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * @internal
+ */
+export class Cache {
+ #rootDir;
+ constructor(rootDir) {
+ this.#rootDir = rootDir;
+ }
+ /**
+ * @internal
+ */
+ get rootDir() {
+ return this.#rootDir;
+ }
+ browserRoot(browser) {
+ return path.join(this.#rootDir, browser);
+ }
+ installationDir(browser, platform, buildId) {
+ return path.join(this.browserRoot(browser), `${platform}-${buildId}`);
+ }
+ clear() {
+ fs.rmSync(this.#rootDir, {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+ uninstall(browser, platform, buildId) {
+ fs.rmSync(this.installationDir(browser, platform, buildId), {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+ getInstalledBrowsers() {
+ if (!fs.existsSync(this.#rootDir)) {
+ return [];
+ }
+ const types = fs.readdirSync(this.#rootDir);
+ const browsers = types.filter((t) => {
+ return Object.values(Browser).includes(t);
+ });
+ return browsers.flatMap(browser => {
+ const files = fs.readdirSync(this.browserRoot(browser));
+ return files
+ .map(file => {
+ const result = parseFolderPath(path.join(this.browserRoot(browser), file));
+ if (!result) {
+ return null;
+ }
+ return new InstalledBrowser(this, browser, result.buildId, result.platform);
+ })
+ .filter((item) => {
+ return item !== null;
+ });
+ });
+ }
+ computeExecutablePath(options) {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`);
+ }
+ const installationDir = this.installationDir(options.browser, options.platform, options.buildId);
+ return path.join(installationDir, executablePathByBrowser[options.browser](options.platform, options.buildId));
+ }
+}
+function parseFolderPath(folderPath) {
+ const name = path.basename(folderPath);
+ const splits = name.split('-');
+ if (splits.length !== 2) {
+ return;
+ }
+ const [platform, buildId] = splits;
+ if (!buildId || !platform) {
+ return;
+ }
+ return { platform, buildId };
+}
+//# sourceMappingURL=Cache.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js.map
new file mode 100644
index 00000000..b1983102
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/Cache.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"Cache.js","sourceRoot":"","sources":["../../src/Cache.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts
new file mode 100644
index 00000000..49f52fe4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts
@@ -0,0 +1,47 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import * as chromeHeadlessShell from './chrome-headless-shell.js';
+import * as chrome from './chrome.js';
+import * as chromedriver from './chromedriver.js';
+import * as chromium from './chromium.js';
+import * as firefox from './firefox.js';
+import { Browser, BrowserPlatform, ChromeReleaseChannel, type ProfileOptions } from './types.js';
+export type { ProfileOptions };
+export declare const downloadUrls: {
+ chromedriver: typeof chromedriver.resolveDownloadUrl;
+ "chrome-headless-shell": typeof chromeHeadlessShell.resolveDownloadUrl;
+ chrome: typeof chrome.resolveDownloadUrl;
+ chromium: typeof chromium.resolveDownloadUrl;
+ firefox: typeof firefox.resolveDownloadUrl;
+};
+export declare const downloadPaths: {
+ chromedriver: typeof chromedriver.resolveDownloadPath;
+ "chrome-headless-shell": typeof chromeHeadlessShell.resolveDownloadPath;
+ chrome: typeof chrome.resolveDownloadPath;
+ chromium: typeof chromium.resolveDownloadPath;
+ firefox: typeof firefox.resolveDownloadPath;
+};
+export declare const executablePathByBrowser: {
+ chromedriver: typeof chromedriver.relativeExecutablePath;
+ "chrome-headless-shell": typeof chromeHeadlessShell.relativeExecutablePath;
+ chrome: typeof chrome.relativeExecutablePath;
+ chromium: typeof chromium.relativeExecutablePath;
+ firefox: typeof firefox.relativeExecutablePath;
+};
+export { Browser, BrowserPlatform, ChromeReleaseChannel };
+/**
+ * @public
+ */
+export declare function resolveBuildId(browser: Browser, platform: BrowserPlatform, tag: string): Promise;
+/**
+ * @public
+ */
+export declare function createProfile(browser: Browser, opts: ProfileOptions): Promise;
+/**
+ * @public
+ */
+export declare function resolveSystemExecutablePath(browser: Browser, platform: BrowserPlatform, channel: ChromeReleaseChannel): string;
+//# sourceMappingURL=browser-data.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts.map
new file mode 100644
index 00000000..b1790b9a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser-data.d.ts","sourceRoot":"","sources":["../../../src/browser-data/browser-data.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,mBAAmB,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,EACL,OAAO,EACP,eAAe,EAEf,oBAAoB,EACpB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAC,cAAc,EAAC,CAAC;AAE7B,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;CAMzB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;CAMnC,CAAC;AAEF,OAAO,EAAC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAC,CAAC;AAExD;;GAEG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CA+FjB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,GACnB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAYR"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js
new file mode 100644
index 00000000..1afc9c64
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js
@@ -0,0 +1,147 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import * as chromeHeadlessShell from './chrome-headless-shell.js';
+import * as chrome from './chrome.js';
+import * as chromedriver from './chromedriver.js';
+import * as chromium from './chromium.js';
+import * as firefox from './firefox.js';
+import { Browser, BrowserPlatform, BrowserTag, ChromeReleaseChannel, } from './types.js';
+export const downloadUrls = {
+ [Browser.CHROMEDRIVER]: chromedriver.resolveDownloadUrl,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadUrl,
+ [Browser.CHROME]: chrome.resolveDownloadUrl,
+ [Browser.CHROMIUM]: chromium.resolveDownloadUrl,
+ [Browser.FIREFOX]: firefox.resolveDownloadUrl,
+};
+export const downloadPaths = {
+ [Browser.CHROMEDRIVER]: chromedriver.resolveDownloadPath,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadPath,
+ [Browser.CHROME]: chrome.resolveDownloadPath,
+ [Browser.CHROMIUM]: chromium.resolveDownloadPath,
+ [Browser.FIREFOX]: firefox.resolveDownloadPath,
+};
+export const executablePathByBrowser = {
+ [Browser.CHROMEDRIVER]: chromedriver.relativeExecutablePath,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.relativeExecutablePath,
+ [Browser.CHROME]: chrome.relativeExecutablePath,
+ [Browser.CHROMIUM]: chromium.relativeExecutablePath,
+ [Browser.FIREFOX]: firefox.relativeExecutablePath,
+};
+export { Browser, BrowserPlatform, ChromeReleaseChannel };
+/**
+ * @public
+ */
+export async function resolveBuildId(browser, platform, tag) {
+ switch (browser) {
+ case Browser.FIREFOX:
+ switch (tag) {
+ case BrowserTag.LATEST:
+ return await firefox.resolveBuildId('FIREFOX_NIGHTLY');
+ case BrowserTag.BETA:
+ case BrowserTag.CANARY:
+ case BrowserTag.DEV:
+ case BrowserTag.STABLE:
+ throw new Error(`${tag} is not supported for ${browser}. Use 'latest' instead.`);
+ }
+ case Browser.CHROME: {
+ switch (tag) {
+ case BrowserTag.LATEST:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.BETA:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.BETA);
+ case BrowserTag.CANARY:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.DEV:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.DEV);
+ case BrowserTag.STABLE:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chrome.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMEDRIVER: {
+ switch (tag) {
+ case BrowserTag.LATEST:
+ case BrowserTag.CANARY:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.BETA:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.BETA);
+ case BrowserTag.DEV:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.DEV);
+ case BrowserTag.STABLE:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chromedriver.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMEHEADLESSSHELL: {
+ switch (tag) {
+ case BrowserTag.LATEST:
+ case BrowserTag.CANARY:
+ return await chromeHeadlessShell.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.BETA:
+ return await chromeHeadlessShell.resolveBuildId(ChromeReleaseChannel.BETA);
+ case BrowserTag.DEV:
+ return await chromeHeadlessShell.resolveBuildId(ChromeReleaseChannel.DEV);
+ case BrowserTag.STABLE:
+ return await chromeHeadlessShell.resolveBuildId(ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chromeHeadlessShell.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMIUM:
+ switch (tag) {
+ case BrowserTag.LATEST:
+ return await chromium.resolveBuildId(platform);
+ case BrowserTag.BETA:
+ case BrowserTag.CANARY:
+ case BrowserTag.DEV:
+ case BrowserTag.STABLE:
+ throw new Error(`${tag} is not supported for ${browser}. Use 'latest' instead.`);
+ }
+ }
+ // We assume the tag is the buildId if it didn't match any keywords.
+ return tag;
+}
+/**
+ * @public
+ */
+export async function createProfile(browser, opts) {
+ switch (browser) {
+ case Browser.FIREFOX:
+ return await firefox.createProfile(opts);
+ case Browser.CHROME:
+ case Browser.CHROMIUM:
+ throw new Error(`Profile creation is not support for ${browser} yet`);
+ }
+}
+/**
+ * @public
+ */
+export function resolveSystemExecutablePath(browser, platform, channel) {
+ switch (browser) {
+ case Browser.CHROMEDRIVER:
+ case Browser.CHROMEHEADLESSSHELL:
+ case Browser.FIREFOX:
+ case Browser.CHROMIUM:
+ throw new Error(`System browser detection is not supported for ${browser} yet.`);
+ case Browser.CHROME:
+ return chrome.resolveSystemExecutablePath(platform, channel);
+ }
+}
+//# sourceMappingURL=browser-data.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js.map
new file mode 100644
index 00000000..62412dfa
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/browser-data.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"browser-data.js","sourceRoot":"","sources":["../../../src/browser-data/browser-data.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts
new file mode 100644
index 00000000..cbd385c4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts
@@ -0,0 +1,6 @@
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chrome-headless-shell.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts.map
new file mode 100644
index 00000000..884b0933
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome-headless-shell.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chrome-headless-shell.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAMV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAoBR;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js
new file mode 100644
index 00000000..870b234f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js
@@ -0,0 +1,45 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+import { BrowserPlatform } from './types.js';
+function folder(platform) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+export function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+export function resolveDownloadPath(platform, buildId) {
+ return [
+ buildId,
+ folder(platform),
+ `chrome-headless-shell-${folder(platform)}.zip`,
+ ];
+}
+export function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join('chrome-headless-shell-' + folder(platform), 'chrome-headless-shell');
+ case BrowserPlatform.LINUX:
+ return path.join('chrome-headless-shell-linux64', 'chrome-headless-shell');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chrome-headless-shell-' + folder(platform), 'chrome-headless-shell.exe');
+ }
+}
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chrome-headless-shell.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js.map
new file mode 100644
index 00000000..c2460592
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome-headless-shell.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome-headless-shell.js","sourceRoot":"","sources":["../../../src/browser-data/chrome-headless-shell.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe,CAAC,GAAG;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,6DAA6D;IAEvE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO;QACL,OAAO;QACP,MAAM,CAAC,QAAQ,CAAC;QAChB,yBAAyB,MAAM,CAAC,QAAQ,CAAC,MAAM;KAChD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,GAAG,CAAC;QACzB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,IAAI,CAAC,IAAI,CACd,wBAAwB,GAAG,MAAM,CAAC,QAAQ,CAAC,EAC3C,uBAAuB,CACxB,CAAC;QACJ,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CACd,+BAA+B,EAC/B,uBAAuB,CACxB,CAAC;QACJ,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CACd,wBAAwB,GAAG,MAAM,CAAC,QAAQ,CAAC,EAC3C,2BAA2B,CAC5B,CAAC;IACN,CAAC;AACH,CAAC;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts
new file mode 100644
index 00000000..8cf3884b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts
@@ -0,0 +1,29 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform, ChromeReleaseChannel } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function getLastKnownGoodReleaseForChannel(channel: ChromeReleaseChannel): Promise<{
+ version: string;
+ revision: string;
+}>;
+export declare function getLastKnownGoodReleaseForMilestone(milestone: string): Promise<{
+ version: string;
+ revision: string;
+} | undefined>;
+export declare function getLastKnownGoodReleaseForBuild(
+/**
+ * @example `112.0.23`,
+ */
+buildPrefix: string): Promise<{
+ version: string;
+ revision: string;
+} | undefined>;
+export declare function resolveBuildId(channel: ChromeReleaseChannel): Promise;
+export declare function resolveBuildId(channel: string): Promise;
+export declare function resolveSystemExecutablePath(platform: BrowserPlatform, channel: ChromeReleaseChannel): string;
+//# sourceMappingURL=chrome.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts.map
new file mode 100644
index 00000000..347072fe
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chrome.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAiBjE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAiBR;AAED,wBAAsB,iCAAiC,CACrD,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,CAAC,CAqB9C;AAED,wBAAsB,mCAAmC,CACvD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAAC,CAW1D;AAED,wBAAsB,+BAA+B;AACnD;;GAEG;AACH,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAAC,CAW1D;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAwB/B,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CAwCR"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js
new file mode 100644
index 00000000..9de4c0d4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js
@@ -0,0 +1,113 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+import { getJSON } from '../httpUtil.js';
+import { BrowserPlatform, ChromeReleaseChannel } from './types.js';
+function folder(platform) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+export function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+export function resolveDownloadPath(platform, buildId) {
+ return [buildId, folder(platform), `chrome-${folder(platform)}.zip`];
+}
+export function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join('chrome-' + folder(platform), 'Google Chrome for Testing.app', 'Contents', 'MacOS', 'Google Chrome for Testing');
+ case BrowserPlatform.LINUX:
+ return path.join('chrome-linux64', 'chrome');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chrome-' + folder(platform), 'chrome.exe');
+ }
+}
+export async function getLastKnownGoodReleaseForChannel(channel) {
+ const data = (await getJSON(new URL('https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json')));
+ for (const channel of Object.keys(data.channels)) {
+ data.channels[channel.toLowerCase()] = data.channels[channel];
+ delete data.channels[channel];
+ }
+ return data.channels[channel];
+}
+export async function getLastKnownGoodReleaseForMilestone(milestone) {
+ const data = (await getJSON(new URL('https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone.json')));
+ return data.milestones[milestone];
+}
+export async function getLastKnownGoodReleaseForBuild(
+/**
+ * @example `112.0.23`,
+ */
+buildPrefix) {
+ const data = (await getJSON(new URL('https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json')));
+ return data.builds[buildPrefix];
+}
+export async function resolveBuildId(channel) {
+ if (Object.values(ChromeReleaseChannel).includes(channel)) {
+ return (await getLastKnownGoodReleaseForChannel(channel)).version;
+ }
+ if (channel.match(/^\d+$/)) {
+ // Potentially a milestone.
+ return (await getLastKnownGoodReleaseForMilestone(channel))?.version;
+ }
+ if (channel.match(/^\d+\.\d+\.\d+$/)) {
+ // Potentially a build prefix without the patch version.
+ return (await getLastKnownGoodReleaseForBuild(channel))?.version;
+ }
+ return;
+}
+export function resolveSystemExecutablePath(platform, channel) {
+ switch (platform) {
+ case BrowserPlatform.WIN64:
+ case BrowserPlatform.WIN32:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.BETA:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Beta\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.CANARY:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome SxS\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.DEV:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Dev\\Application\\chrome.exe`;
+ }
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
+ case ChromeReleaseChannel.BETA:
+ return '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta';
+ case ChromeReleaseChannel.CANARY:
+ return '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary';
+ case ChromeReleaseChannel.DEV:
+ return '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev';
+ }
+ case BrowserPlatform.LINUX:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return '/opt/google/chrome/chrome';
+ case ChromeReleaseChannel.BETA:
+ return '/opt/google/chrome-beta/chrome';
+ case ChromeReleaseChannel.DEV:
+ return '/opt/google/chrome-unstable/chrome';
+ }
+ }
+ throw new Error(`Unable to detect browser executable path for '${channel}' on ${platform}.`);
+}
+//# sourceMappingURL=chrome.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js.map
new file mode 100644
index 00000000..7926ff6b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chrome.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../../src/browser-data/chrome.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAC,eAAe,EAAE,oBAAoB,EAAC,MAAM,YAAY,CAAC;AAEjE,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe,CAAC,GAAG;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,6DAA6D;IAEvE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,UAAU,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,GAAG,CAAC;QACzB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,IAAI,CAAC,IAAI,CACd,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAC5B,+BAA+B,EAC/B,UAAU,EACV,OAAO,EACP,2BAA2B,CAC5B,CAAC;QACJ,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC/C,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,OAA6B;IAE7B,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CACzB,IAAI,GAAG,CACL,qFAAqF,CACtF,CACF,CAEA,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAE,CAAC;QAC/D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED,OACE,IAKD,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,SAAiB;IAEjB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CACzB,IAAI,GAAG,CACL,0FAA0F,CAC3F,CACF,CAEA,CAAC;IACF,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAEnB,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B;AACnD;;GAEG;AACH,WAAmB;IAEnB,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CACzB,IAAI,GAAG,CACL,4FAA4F,CAC7F,CACF,CAEA,CAAC;IACF,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAEjB,CAAC;AAChB,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAsC;IAEtC,IACE,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAC1C,OAA+B,CAChC,EACD,CAAC;QACD,OAAO,CACL,MAAM,iCAAiC,CAAC,OAA+B,CAAC,CACzE,CAAC,OAAO,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,2BAA2B;QAC3B,OAAO,CAAC,MAAM,mCAAmC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,wDAAwD;QACxD,OAAO,CAAC,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC;IACnE,CAAC;IACD,OAAO;AACT,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAAyB,EACzB,OAA6B;IAE7B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,oBAAoB,CAAC,MAAM;oBAC9B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,2CAA2C,CAAC;gBACnF,KAAK,oBAAoB,CAAC,IAAI;oBAC5B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,gDAAgD,CAAC;gBACxF,KAAK,oBAAoB,CAAC,MAAM;oBAC9B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,+CAA+C,CAAC;gBACvF,KAAK,oBAAoB,CAAC,GAAG;oBAC3B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,+CAA+C,CAAC;YACzF,CAAC;QACH,KAAK,eAAe,CAAC,OAAO,CAAC;QAC7B,KAAK,eAAe,CAAC,GAAG;YACtB,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,oBAAoB,CAAC,MAAM;oBAC9B,OAAO,8DAA8D,CAAC;gBACxE,KAAK,oBAAoB,CAAC,IAAI;oBAC5B,OAAO,wEAAwE,CAAC;gBAClF,KAAK,oBAAoB,CAAC,MAAM;oBAC9B,OAAO,4EAA4E,CAAC;gBACtF,KAAK,oBAAoB,CAAC,GAAG;oBAC3B,OAAO,sEAAsE,CAAC;YAClF,CAAC;QACH,KAAK,eAAe,CAAC,KAAK;YACxB,QAAQ,OAAO,EAAE,CAAC;gBAChB,KAAK,oBAAoB,CAAC,MAAM;oBAC9B,OAAO,2BAA2B,CAAC;gBACrC,KAAK,oBAAoB,CAAC,IAAI;oBAC5B,OAAO,gCAAgC,CAAC;gBAC1C,KAAK,oBAAoB,CAAC,GAAG;oBAC3B,OAAO,oCAAoC,CAAC;YAChD,CAAC;IACL,CAAC;IAED,MAAM,IAAI,KAAK,CACb,iDAAiD,OAAO,QAAQ,QAAQ,GAAG,CAC5E,CAAC;AACJ,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts
new file mode 100644
index 00000000..32a0ed1a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts
@@ -0,0 +1,6 @@
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chromedriver.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts.map
new file mode 100644
index 00000000..1fd16314
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromedriver.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chromedriver.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAiB3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAAgE,GACtE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js
new file mode 100644
index 00000000..d98891bd
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js
@@ -0,0 +1,41 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+import { BrowserPlatform } from './types.js';
+function folder(platform) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+export function resolveDownloadUrl(platform, buildId, baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+export function resolveDownloadPath(platform, buildId) {
+ return [buildId, folder(platform), `chromedriver-${folder(platform)}.zip`];
+}
+export function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join('chromedriver-' + folder(platform), 'chromedriver');
+ case BrowserPlatform.LINUX:
+ return path.join('chromedriver-linux64', 'chromedriver');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chromedriver-' + folder(platform), 'chromedriver.exe');
+ }
+}
+export { resolveBuildId } from './chrome.js';
+//# sourceMappingURL=chromedriver.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js.map
new file mode 100644
index 00000000..999bb69b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromedriver.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromedriver.js","sourceRoot":"","sources":["../../../src/browser-data/chromedriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe,CAAC,GAAG;YACtB,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,6DAA6D;IAEvE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,gBAAgB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,GAAG,CAAC;QACzB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;QACvE,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,cAAc,CAAC,CAAC;QAC3D,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts
new file mode 100644
index 00000000..4ff26999
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function resolveBuildId(platform: BrowserPlatform): Promise;
+//# sourceMappingURL=chromium.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts.map
new file mode 100644
index 00000000..701df7e7
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromium.d.ts","sourceRoot":"","sources":["../../../src/browser-data/chromium.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AA+B3C,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAA8D,GACpE,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAiBR;AACD,wBAAsB,cAAc,CAClC,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CAQjB"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js
new file mode 100644
index 00000000..a6627b9b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js
@@ -0,0 +1,57 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+import { getText } from '../httpUtil.js';
+import { BrowserPlatform } from './types.js';
+function archive(platform, buildId) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'chrome-linux';
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return 'chrome-mac';
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ // Windows archive name changed at r591479.
+ return parseInt(buildId, 10) > 591479 ? 'chrome-win' : 'chrome-win32';
+ }
+}
+function folder(platform) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'Linux_x64';
+ case BrowserPlatform.MAC_ARM:
+ return 'Mac_Arm';
+ case BrowserPlatform.MAC:
+ return 'Mac';
+ case BrowserPlatform.WIN32:
+ return 'Win';
+ case BrowserPlatform.WIN64:
+ return 'Win_x64';
+ }
+}
+export function resolveDownloadUrl(platform, buildId, baseUrl = 'https://storage.googleapis.com/chromium-browser-snapshots') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+export function resolveDownloadPath(platform, buildId) {
+ return [folder(platform), buildId, `${archive(platform, buildId)}.zip`];
+}
+export function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join('chrome-mac', 'Chromium.app', 'Contents', 'MacOS', 'Chromium');
+ case BrowserPlatform.LINUX:
+ return path.join('chrome-linux', 'chrome');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chrome-win', 'chrome.exe');
+ }
+}
+export async function resolveBuildId(platform) {
+ return await getText(new URL(`https://storage.googleapis.com/chromium-browser-snapshots/${folder(platform)}/LAST_CHANGE`));
+}
+//# sourceMappingURL=chromium.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js.map
new file mode 100644
index 00000000..bfee699b
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/chromium.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"chromium.js","sourceRoot":"","sources":["../../../src/browser-data/chromium.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAEvC,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAE3C,SAAS,OAAO,CAAC,QAAyB,EAAE,OAAe;IACzD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,cAAc,CAAC;QACxB,KAAK,eAAe,CAAC,OAAO,CAAC;QAC7B,KAAK,eAAe,CAAC,GAAG;YACtB,OAAO,YAAY,CAAC;QACtB,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,2CAA2C;YAC3C,OAAO,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;IAC1E,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,QAAyB;IACvC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,WAAW,CAAC;QACrB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe,CAAC,GAAG;YACtB,OAAO,KAAK,CAAC;QACf,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,KAAK,CAAC;QACf,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,QAAyB,EACzB,OAAe,EACf,OAAO,GAAG,2DAA2D;IAErE,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,QAAyB,EACzB,OAAe;IAEf,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,QAAgB;IAEhB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,eAAe,CAAC,GAAG,CAAC;QACzB,KAAK,eAAe,CAAC,OAAO;YAC1B,OAAO,IAAI,CAAC,IAAI,CACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,CACX,CAAC;QACJ,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;QAC7C,KAAK,eAAe,CAAC,KAAK,CAAC;QAC3B,KAAK,eAAe,CAAC,KAAK;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,QAAyB;IAEzB,OAAO,MAAM,OAAO,CAClB,IAAI,GAAG,CACL,6DAA6D,MAAM,CACjE,QAAQ,CACT,cAAc,CAChB,CACF,CAAC;AACJ,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts
new file mode 100644
index 00000000..b24eb2fc
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts
@@ -0,0 +1,12 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform, type ProfileOptions } from './types.js';
+export declare function resolveDownloadUrl(platform: BrowserPlatform, buildId: string, baseUrl?: string): string;
+export declare function resolveDownloadPath(platform: BrowserPlatform, buildId: string): string[];
+export declare function relativeExecutablePath(platform: BrowserPlatform, _buildId: string): string;
+export declare function resolveBuildId(channel?: 'FIREFOX_NIGHTLY'): Promise;
+export declare function createProfile(options: ProfileOptions): Promise;
+//# sourceMappingURL=firefox.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts.map
new file mode 100644
index 00000000..93f43de2
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"firefox.d.ts","sourceRoot":"","sources":["../../../src/browser-data/firefox.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAC,eAAe,EAAE,KAAK,cAAc,EAAC,MAAM,YAAY,CAAC;AAehE,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,EACf,OAAO,SAA2E,GACjF,MAAM,CAER;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAEV;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,eAAe,EACzB,QAAQ,EAAE,MAAM,GACf,MAAM,CAWR;AAED,wBAAsB,cAAc,CAClC,OAAO,GAAE,iBAAqC,GAC7C,OAAO,CAAC,MAAM,CAAC,CASjB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1E"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js
new file mode 100644
index 00000000..9e0d5e3c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js
@@ -0,0 +1,246 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import fs from 'fs';
+import path from 'path';
+import { getJSON } from '../httpUtil.js';
+import { BrowserPlatform } from './types.js';
+function archive(platform, buildId) {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return `firefox-${buildId}.en-US.${platform}-x86_64.tar.bz2`;
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return `firefox-${buildId}.en-US.mac.dmg`;
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return `firefox-${buildId}.en-US.${platform}.zip`;
+ }
+}
+export function resolveDownloadUrl(platform, buildId, baseUrl = 'https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central') {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+export function resolveDownloadPath(platform, buildId) {
+ return [archive(platform, buildId)];
+}
+export function relativeExecutablePath(platform, _buildId) {
+ switch (platform) {
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return path.join('Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
+ case BrowserPlatform.LINUX:
+ return path.join('firefox', 'firefox');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('firefox', 'firefox.exe');
+ }
+}
+export async function resolveBuildId(channel = 'FIREFOX_NIGHTLY') {
+ const versions = (await getJSON(new URL('https://product-details.mozilla.org/1.0/firefox_versions.json')));
+ const version = versions[channel];
+ if (!version) {
+ throw new Error(`Channel ${channel} is not found.`);
+ }
+ return version;
+}
+export async function createProfile(options) {
+ if (!fs.existsSync(options.path)) {
+ await fs.promises.mkdir(options.path, {
+ recursive: true,
+ });
+ }
+ await writePreferences({
+ preferences: {
+ ...defaultProfilePreferences(options.preferences),
+ ...options.preferences,
+ },
+ path: options.path,
+ });
+}
+function defaultProfilePreferences(extraPrefs) {
+ const server = 'dummy.test';
+ const defaultPrefs = {
+ // Make sure Shield doesn't hit the network.
+ 'app.normandy.api_url': '',
+ // Disable Firefox old build background check
+ 'app.update.checkInstallTime': false,
+ // Disable automatically upgrading Firefox
+ 'app.update.disabledForTesting': true,
+ // Increase the APZ content response timeout to 1 minute
+ 'apz.content_response_timeout': 60000,
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'browser.contentblocking.features.standard': '-tp,tpPrivate,cookieBehavior0,-cm,-fp',
+ // Enable the dump function: which sends messages to the system
+ // console
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1543115
+ 'browser.dom.window.dump.enabled': true,
+ // Disable topstories
+ 'browser.newtabpage.activity-stream.feeds.system.topstories': false,
+ // Always display a blank page
+ 'browser.newtabpage.enabled': false,
+ // Background thumbnails in particular cause grief: and disabling
+ // thumbnails in general cannot hurt
+ 'browser.pagethumbnails.capturing_disabled': true,
+ // Disable safebrowsing components.
+ 'browser.safebrowsing.blockedURIs.enabled': false,
+ 'browser.safebrowsing.downloads.enabled': false,
+ 'browser.safebrowsing.malware.enabled': false,
+ 'browser.safebrowsing.phishing.enabled': false,
+ // Disable updates to search engines.
+ 'browser.search.update': false,
+ // Do not restore the last open set of tabs if the browser has crashed
+ 'browser.sessionstore.resume_from_crash': false,
+ // Skip check for default browser on startup
+ 'browser.shell.checkDefaultBrowser': false,
+ // Disable newtabpage
+ 'browser.startup.homepage': 'about:blank',
+ // Do not redirect user when a milstone upgrade of Firefox is detected
+ 'browser.startup.homepage_override.mstone': 'ignore',
+ // Start with a blank page about:blank
+ 'browser.startup.page': 0,
+ // Do not allow background tabs to be zombified on Android: otherwise for
+ // tests that open additional tabs: the test harness tab itself might get
+ // unloaded
+ 'browser.tabs.disableBackgroundZombification': false,
+ // Do not warn when closing all other open tabs
+ 'browser.tabs.warnOnCloseOtherTabs': false,
+ // Do not warn when multiple tabs will be opened
+ 'browser.tabs.warnOnOpen': false,
+ // Do not automatically offer translations, as tests do not expect this.
+ 'browser.translations.automaticallyPopup': false,
+ // Disable the UI tour.
+ 'browser.uitour.enabled': false,
+ // Turn off search suggestions in the location bar so as not to trigger
+ // network connections.
+ 'browser.urlbar.suggest.searches': false,
+ // Disable first run splash page on Windows 10
+ 'browser.usedOnWindows10.introURL': '',
+ // Do not warn on quitting Firefox
+ 'browser.warnOnQuit': false,
+ // Defensively disable data reporting systems
+ 'datareporting.healthreport.documentServerURI': `http://${server}/dummy/healthreport/`,
+ 'datareporting.healthreport.logging.consoleEnabled': false,
+ 'datareporting.healthreport.service.enabled': false,
+ 'datareporting.healthreport.service.firstRun': false,
+ 'datareporting.healthreport.uploadEnabled': false,
+ // Do not show datareporting policy notifications which can interfere with tests
+ 'datareporting.policy.dataSubmissionEnabled': false,
+ 'datareporting.policy.dataSubmissionPolicyBypassNotification': true,
+ // DevTools JSONViewer sometimes fails to load dependencies with its require.js.
+ // This doesn't affect Puppeteer but spams console (Bug 1424372)
+ 'devtools.jsonview.enabled': false,
+ // Disable popup-blocker
+ 'dom.disable_open_during_load': false,
+ // Enable the support for File object creation in the content process
+ // Required for |Page.setFileInputFiles| protocol method.
+ 'dom.file.createInChild': true,
+ // Disable the ProcessHangMonitor
+ 'dom.ipc.reportProcessHangs': false,
+ // Disable slow script dialogues
+ 'dom.max_chrome_script_run_time': 0,
+ 'dom.max_script_run_time': 0,
+ // Only load extensions from the application and user profile
+ // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
+ 'extensions.autoDisableScopes': 0,
+ 'extensions.enabledScopes': 5,
+ // Disable metadata caching for installed add-ons by default
+ 'extensions.getAddons.cache.enabled': false,
+ // Disable installing any distribution extensions or add-ons.
+ 'extensions.installDistroAddons': false,
+ // Disabled screenshots extension
+ 'extensions.screenshots.disabled': true,
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.enabled': false,
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.notifyUser': false,
+ // Make sure opening about:addons will not hit the network
+ 'extensions.webservice.discoverURL': `http://${server}/dummy/discoveryURL`,
+ // Allow the application to have focus even it runs in the background
+ 'focusmanager.testmode': true,
+ // Disable useragent updates
+ 'general.useragent.updates.enabled': false,
+ // Always use network provider for geolocation tests so we bypass the
+ // macOS dialog raised by the corelocation provider
+ 'geo.provider.testing': true,
+ // Do not scan Wifi
+ 'geo.wifi.scan': false,
+ // No hang monitor
+ 'hangmonitor.timeout': 0,
+ // Show chrome errors and warnings in the error console
+ 'javascript.options.showInConsole': true,
+ // Disable download and usage of OpenH264: and Widevine plugins
+ 'media.gmp-manager.updateEnabled': false,
+ // Disable the GFX sanity window
+ 'media.sanity-test.disabled': true,
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'network.cookie.cookieBehavior': 0,
+ // Disable experimental feature that is only available in Nightly
+ 'network.cookie.sameSite.laxByDefault': false,
+ // Do not prompt for temporary redirects
+ 'network.http.prompt-temp-redirect': false,
+ // Disable speculative connections so they are not reported as leaking
+ // when they are hanging around
+ 'network.http.speculative-parallel-limit': 0,
+ // Do not automatically switch between offline and online
+ 'network.manage-offline-status': false,
+ // Make sure SNTP requests do not hit the network
+ 'network.sntp.pools': server,
+ // Disable Flash.
+ 'plugin.state.flash': 0,
+ 'privacy.trackingprotection.enabled': false,
+ // Can be removed once Firefox 89 is no longer supported
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1710839
+ 'remote.enabled': true,
+ // Don't do network connections for mitm priming
+ 'security.certerrors.mitm.priming.enabled': false,
+ // Local documents have access to all other local documents,
+ // including directory listings
+ 'security.fileuri.strict_origin_policy': false,
+ // Do not wait for the notification button security delay
+ 'security.notification_enable_delay': 0,
+ // Ensure blocklist updates do not hit the network
+ 'services.settings.server': `http://${server}/dummy/blocklist/`,
+ // Do not automatically fill sign-in forms with known usernames and
+ // passwords
+ 'signon.autofillForms': false,
+ // Disable password capture, so that tests that include forms are not
+ // influenced by the presence of the persistent doorhanger notification
+ 'signon.rememberSignons': false,
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url': 'about:blank',
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url.additional': '',
+ // Disable browser animations (tabs, fullscreen, sliding alerts)
+ 'toolkit.cosmeticAnimations.enabled': false,
+ // Prevent starting into safe mode after application crashes
+ 'toolkit.startup.max_resumed_crashes': -1,
+ };
+ return Object.assign(defaultPrefs, extraPrefs);
+}
+/**
+ * Populates the user.js file with custom preferences as needed to allow
+ * Firefox's CDP support to properly function. These preferences will be
+ * automatically copied over to prefs.js during startup of Firefox. To be
+ * able to restore the original values of preferences a backup of prefs.js
+ * will be created.
+ *
+ * @param prefs - List of preferences to add.
+ * @param profilePath - Firefox profile to write the preferences to.
+ */
+async function writePreferences(options) {
+ const lines = Object.entries(options.preferences).map(([key, value]) => {
+ return `user_pref(${JSON.stringify(key)}, ${JSON.stringify(value)});`;
+ });
+ await fs.promises.writeFile(path.join(options.path, 'user.js'), lines.join('\n'));
+ // Create a backup of the preferences file if it already exitsts.
+ const prefsPath = path.join(options.path, 'prefs.js');
+ if (fs.existsSync(prefsPath)) {
+ const prefsBackupPath = path.join(options.path, 'prefs.js.puppeteer');
+ await fs.promises.copyFile(prefsPath, prefsBackupPath);
+ }
+}
+//# sourceMappingURL=firefox.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js.map
new file mode 100644
index 00000000..0b919bc1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/firefox.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"firefox.js","sourceRoot":"","sources":["../../../src/browser-data/firefox.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts
new file mode 100644
index 00000000..587efa4e
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts
@@ -0,0 +1,57 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/**
+ * Supported browsers.
+ *
+ * @public
+ */
+export declare enum Browser {
+ CHROME = "chrome",
+ CHROMEHEADLESSSHELL = "chrome-headless-shell",
+ CHROMIUM = "chromium",
+ FIREFOX = "firefox",
+ CHROMEDRIVER = "chromedriver"
+}
+/**
+ * Platform names used to identify a OS platform x architecture combination in the way
+ * that is relevant for the browser download.
+ *
+ * @public
+ */
+export declare enum BrowserPlatform {
+ LINUX = "linux",
+ MAC = "mac",
+ MAC_ARM = "mac_arm",
+ WIN32 = "win32",
+ WIN64 = "win64"
+}
+/**
+ * @public
+ */
+export declare enum BrowserTag {
+ CANARY = "canary",
+ BETA = "beta",
+ DEV = "dev",
+ STABLE = "stable",
+ LATEST = "latest"
+}
+/**
+ * @public
+ */
+export interface ProfileOptions {
+ preferences: Record;
+ path: string;
+}
+/**
+ * @public
+ */
+export declare enum ChromeReleaseChannel {
+ STABLE = "stable",
+ DEV = "dev",
+ CANARY = "canary",
+ BETA = "beta"
+}
+//# sourceMappingURL=types.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts.map
new file mode 100644
index 00000000..2d6b36a4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/browser-data/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,oBAAY,OAAO;IACjB,MAAM,WAAW;IACjB,mBAAmB,0BAA0B;IAC7C,QAAQ,aAAa;IACrB,OAAO,YAAY;IACnB,YAAY,iBAAiB;CAC9B;AAED;;;;;GAKG;AACH,oBAAY,eAAe;IACzB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,oBAAY,UAAU;IACpB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;CACd"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js
new file mode 100644
index 00000000..9fab5337
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js
@@ -0,0 +1,54 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/**
+ * Supported browsers.
+ *
+ * @public
+ */
+export var Browser;
+(function (Browser) {
+ Browser["CHROME"] = "chrome";
+ Browser["CHROMEHEADLESSSHELL"] = "chrome-headless-shell";
+ Browser["CHROMIUM"] = "chromium";
+ Browser["FIREFOX"] = "firefox";
+ Browser["CHROMEDRIVER"] = "chromedriver";
+})(Browser || (Browser = {}));
+/**
+ * Platform names used to identify a OS platform x architecture combination in the way
+ * that is relevant for the browser download.
+ *
+ * @public
+ */
+export var BrowserPlatform;
+(function (BrowserPlatform) {
+ BrowserPlatform["LINUX"] = "linux";
+ BrowserPlatform["MAC"] = "mac";
+ BrowserPlatform["MAC_ARM"] = "mac_arm";
+ BrowserPlatform["WIN32"] = "win32";
+ BrowserPlatform["WIN64"] = "win64";
+})(BrowserPlatform || (BrowserPlatform = {}));
+/**
+ * @public
+ */
+export var BrowserTag;
+(function (BrowserTag) {
+ BrowserTag["CANARY"] = "canary";
+ BrowserTag["BETA"] = "beta";
+ BrowserTag["DEV"] = "dev";
+ BrowserTag["STABLE"] = "stable";
+ BrowserTag["LATEST"] = "latest";
+})(BrowserTag || (BrowserTag = {}));
+/**
+ * @public
+ */
+export var ChromeReleaseChannel;
+(function (ChromeReleaseChannel) {
+ ChromeReleaseChannel["STABLE"] = "stable";
+ ChromeReleaseChannel["DEV"] = "dev";
+ ChromeReleaseChannel["CANARY"] = "canary";
+ ChromeReleaseChannel["BETA"] = "beta";
+})(ChromeReleaseChannel || (ChromeReleaseChannel = {}));
+//# sourceMappingURL=types.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js.map
new file mode 100644
index 00000000..66003402
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/browser-data/types.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/browser-data/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAN,IAAY,OAMX;AAND,WAAY,OAAO;IACjB,4BAAiB,CAAA;IACjB,wDAA6C,CAAA;IAC7C,gCAAqB,CAAA;IACrB,8BAAmB,CAAA;IACnB,wCAA6B,CAAA;AAC/B,CAAC,EANW,OAAO,KAAP,OAAO,QAMlB;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,kCAAe,CAAA;IACf,8BAAW,CAAA;IACX,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,kCAAe,CAAA;AACjB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,+BAAiB,CAAA;IACjB,2BAAa,CAAA;IACb,yBAAW,CAAA;IACX,+BAAiB,CAAA;IACjB,+BAAiB,CAAA;AACnB,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB;AAUD;;GAEG;AACH,MAAM,CAAN,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,mCAAW,CAAA;IACX,yCAAiB,CAAA;IACjB,qCAAa,CAAA;AACf,CAAC,EALW,oBAAoB,KAApB,oBAAoB,QAK/B"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts
new file mode 100644
index 00000000..aa062da3
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts
@@ -0,0 +1,8 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import debug from 'debug';
+export { debug };
+//# sourceMappingURL=debug.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts.map
new file mode 100644
index 00000000..2f5f252d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,KAAK,EAAC,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js
new file mode 100644
index 00000000..6d7db6aa
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js
@@ -0,0 +1,8 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import debug from 'debug';
+export { debug };
+//# sourceMappingURL=debug.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js.map
new file mode 100644
index 00000000..93513490
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/debug.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/debug.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,KAAK,EAAC,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts
new file mode 100644
index 00000000..3ed4758a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts
@@ -0,0 +1,11 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { BrowserPlatform } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export declare function detectBrowserPlatform(): BrowserPlatform | undefined;
+//# sourceMappingURL=detectPlatform.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts.map
new file mode 100644
index 00000000..d6643762
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"detectPlatform.d.ts","sourceRoot":"","sources":["../../src/detectPlatform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,GAAG,SAAS,CAkBnE"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js
new file mode 100644
index 00000000..e155989a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js
@@ -0,0 +1,46 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import os from 'os';
+import { BrowserPlatform } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export function detectBrowserPlatform() {
+ const platform = os.platform();
+ switch (platform) {
+ case 'darwin':
+ return os.arch() === 'arm64'
+ ? BrowserPlatform.MAC_ARM
+ : BrowserPlatform.MAC;
+ case 'linux':
+ return BrowserPlatform.LINUX;
+ case 'win32':
+ return os.arch() === 'x64' ||
+ // Windows 11 for ARM supports x64 emulation
+ (os.arch() === 'arm64' && isWindows11(os.release()))
+ ? BrowserPlatform.WIN64
+ : BrowserPlatform.WIN32;
+ default:
+ return undefined;
+ }
+}
+/**
+ * Windows 11 is identified by the version 10.0.22000 or greater
+ * @internal
+ */
+function isWindows11(version) {
+ const parts = version.split('.');
+ if (parts.length > 2) {
+ const major = parseInt(parts[0], 10);
+ const minor = parseInt(parts[1], 10);
+ const patch = parseInt(parts[2], 10);
+ return (major > 10 ||
+ (major === 10 && minor > 0) ||
+ (major === 10 && minor === 0 && patch >= 22000));
+ }
+ return false;
+}
+//# sourceMappingURL=detectPlatform.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js.map
new file mode 100644
index 00000000..e34b7d4d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/detectPlatform.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"detectPlatform.js","sourceRoot":"","sources":["../../src/detectPlatform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAC,eAAe,EAAC,MAAM,gCAAgC,CAAC;AAE/D;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO;gBAC1B,CAAC,CAAC,eAAe,CAAC,OAAO;gBACzB,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC;QAC1B,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,KAAK,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;gBACxB,4CAA4C;gBAC5C,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC,CAAC,eAAe,CAAC,KAAK;gBACvB,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,OAAO,CACL,KAAK,GAAG,EAAE;YACV,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;YAC3B,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts
new file mode 100644
index 00000000..af56994c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts
@@ -0,0 +1,10 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+/**
+ * @internal
+ */
+export declare function unpackArchive(archivePath: string, folderPath: string): Promise;
+//# sourceMappingURL=fileUtil.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts.map
new file mode 100644
index 00000000..bcf818b6
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"fileUtil.d.ts","sourceRoot":"","sources":["../../src/fileUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAWf"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js
new file mode 100644
index 00000000..e2b2d601
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js
@@ -0,0 +1,70 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { exec as execChildProcess } from 'child_process';
+import { createReadStream } from 'fs';
+import { mkdir, readdir } from 'fs/promises';
+import * as path from 'path';
+import { promisify } from 'util';
+import extractZip from 'extract-zip';
+import tar from 'tar-fs';
+import bzip from 'unbzip2-stream';
+const exec = promisify(execChildProcess);
+/**
+ * @internal
+ */
+export async function unpackArchive(archivePath, folderPath) {
+ if (archivePath.endsWith('.zip')) {
+ await extractZip(archivePath, { dir: folderPath });
+ }
+ else if (archivePath.endsWith('.tar.bz2')) {
+ await extractTar(archivePath, folderPath);
+ }
+ else if (archivePath.endsWith('.dmg')) {
+ await mkdir(folderPath);
+ await installDMG(archivePath, folderPath);
+ }
+ else {
+ throw new Error(`Unsupported archive format: ${archivePath}`);
+ }
+}
+/**
+ * @internal
+ */
+function extractTar(tarPath, folderPath) {
+ return new Promise((fulfill, reject) => {
+ const tarStream = tar.extract(folderPath);
+ tarStream.on('error', reject);
+ tarStream.on('finish', fulfill);
+ const readStream = createReadStream(tarPath);
+ readStream.pipe(bzip()).pipe(tarStream);
+ });
+}
+/**
+ * @internal
+ */
+async function installDMG(dmgPath, folderPath) {
+ const { stdout } = await exec(`hdiutil attach -nobrowse -noautoopen "${dmgPath}"`);
+ const volumes = stdout.match(/\/Volumes\/(.*)/m);
+ if (!volumes) {
+ throw new Error(`Could not find volume path in ${stdout}`);
+ }
+ const mountPath = volumes[0];
+ try {
+ const fileNames = await readdir(mountPath);
+ const appName = fileNames.find(item => {
+ return typeof item === 'string' && item.endsWith('.app');
+ });
+ if (!appName) {
+ throw new Error(`Cannot find app in ${mountPath}`);
+ }
+ const mountedPath = path.join(mountPath, appName);
+ await exec(`cp -R "${mountedPath}" "${folderPath}"`);
+ }
+ finally {
+ await exec(`hdiutil detach "${mountPath}" -quiet`);
+ }
+}
+//# sourceMappingURL=fileUtil.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js.map
new file mode 100644
index 00000000..36b4578a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/fileUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"fileUtil.js","sourceRoot":"","sources":["../../src/fileUtil.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts
new file mode 100644
index 00000000..48bfd376
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts
@@ -0,0 +1,18 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+///
+import * as http from 'http';
+import { URL } from 'url';
+export declare function headHttpRequest(url: URL): Promise;
+export declare function httpRequest(url: URL, method: string, response: (x: http.IncomingMessage) => void, keepAlive?: boolean): http.ClientRequest;
+/**
+ * @internal
+ */
+export declare function downloadFile(url: URL, destinationPath: string, progressCallback?: (downloadedBytes: number, totalBytes: number) => void): Promise;
+export declare function getJSON(url: URL): Promise;
+export declare function getText(url: URL): Promise;
+//# sourceMappingURL=httpUtil.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts.map
new file mode 100644
index 00000000..e7253d29
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"httpUtil.d.ts","sourceRoot":"","sources":["../../src/httpUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;AAGH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,GAAG,EAAmB,MAAM,KAAK,CAAC;AAI1C,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB1D;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,KAAK,IAAI,EAC3C,SAAS,UAAO,GACf,IAAI,CAAC,aAAa,CA8BpB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,GAAG,EACR,eAAe,EAAE,MAAM,EACvB,gBAAgB,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GACvE,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAOxD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CA2BjD"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js
new file mode 100644
index 00000000..10640aff
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js
@@ -0,0 +1,121 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { createWriteStream } from 'fs';
+import * as http from 'http';
+import * as https from 'https';
+import { URL, urlToHttpOptions } from 'url';
+import { ProxyAgent } from 'proxy-agent';
+export function headHttpRequest(url) {
+ return new Promise(resolve => {
+ const request = httpRequest(url, 'HEAD', response => {
+ // consume response data free node process
+ response.resume();
+ resolve(response.statusCode === 200);
+ }, false);
+ request.on('error', () => {
+ resolve(false);
+ });
+ });
+}
+export function httpRequest(url, method, response, keepAlive = true) {
+ const options = {
+ protocol: url.protocol,
+ hostname: url.hostname,
+ port: url.port,
+ path: url.pathname + url.search,
+ method,
+ headers: keepAlive ? { Connection: 'keep-alive' } : undefined,
+ auth: urlToHttpOptions(url).auth,
+ agent: new ProxyAgent(),
+ };
+ const requestCallback = (res) => {
+ if (res.statusCode &&
+ res.statusCode >= 300 &&
+ res.statusCode < 400 &&
+ res.headers.location) {
+ httpRequest(new URL(res.headers.location), method, response);
+ }
+ else {
+ response(res);
+ }
+ };
+ const request = options.protocol === 'https:'
+ ? https.request(options, requestCallback)
+ : http.request(options, requestCallback);
+ request.end();
+ return request;
+}
+/**
+ * @internal
+ */
+export function downloadFile(url, destinationPath, progressCallback) {
+ return new Promise((resolve, reject) => {
+ let downloadedBytes = 0;
+ let totalBytes = 0;
+ function onData(chunk) {
+ downloadedBytes += chunk.length;
+ progressCallback(downloadedBytes, totalBytes);
+ }
+ const request = httpRequest(url, 'GET', response => {
+ if (response.statusCode !== 200) {
+ const error = new Error(`Download failed: server returned code ${response.statusCode}. URL: ${url}`);
+ // consume response data to free up memory
+ response.resume();
+ reject(error);
+ return;
+ }
+ const file = createWriteStream(destinationPath);
+ file.on('finish', () => {
+ return resolve();
+ });
+ file.on('error', error => {
+ return reject(error);
+ });
+ response.pipe(file);
+ totalBytes = parseInt(response.headers['content-length'], 10);
+ if (progressCallback) {
+ response.on('data', onData);
+ }
+ });
+ request.on('error', error => {
+ return reject(error);
+ });
+ });
+}
+export async function getJSON(url) {
+ const text = await getText(url);
+ try {
+ return JSON.parse(text);
+ }
+ catch {
+ throw new Error('Could not parse JSON from ' + url.toString());
+ }
+}
+export function getText(url) {
+ return new Promise((resolve, reject) => {
+ const request = httpRequest(url, 'GET', response => {
+ let data = '';
+ if (response.statusCode && response.statusCode >= 400) {
+ return reject(new Error(`Got status code ${response.statusCode}`));
+ }
+ response.on('data', chunk => {
+ data += chunk;
+ });
+ response.on('end', () => {
+ try {
+ return resolve(String(data));
+ }
+ catch {
+ return reject(new Error('Chrome version not found'));
+ }
+ });
+ }, false);
+ request.on('error', err => {
+ reject(err);
+ });
+ });
+}
+//# sourceMappingURL=httpUtil.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js.map
new file mode 100644
index 00000000..c7434309
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/httpUtil.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"httpUtil.js","sourceRoot":"","sources":["../../src/httpUtil.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,IAAI,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,GAAG,EAAE,gBAAgB,EAAC,MAAM,KAAK,CAAC;AAE1C,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AAEvC,MAAM,UAAU,eAAe,CAAC,GAAQ;IACtC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,OAAO,GAAG,WAAW,CACzB,GAAG,EACH,MAAM,EACN,QAAQ,CAAC,EAAE;YACT,0CAA0C;YAC1C,QAAQ,CAAC,MAAM,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC;QACvC,CAAC,EACD,KAAK,CACN,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACvB,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,GAAQ,EACR,MAAc,EACd,QAA2C,EAC3C,SAAS,GAAG,IAAI;IAEhB,MAAM,OAAO,GAAwB;QACnC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM;QAC/B,MAAM;QACN,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAC,UAAU,EAAE,YAAY,EAAC,CAAC,CAAC,CAAC,SAAS;QAC3D,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI;QAChC,KAAK,EAAE,IAAI,UAAU,EAAE;KACxB,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,GAAyB,EAAQ,EAAE;QAC1D,IACE,GAAG,CAAC,UAAU;YACd,GAAG,CAAC,UAAU,IAAI,GAAG;YACrB,GAAG,CAAC,UAAU,GAAG,GAAG;YACpB,GAAG,CAAC,OAAO,CAAC,QAAQ,EACpB,CAAC;YACD,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAQ,EACR,eAAuB,EACvB,gBAAwE;IAExE,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,SAAS,MAAM,CAAC,KAAa;YAC3B,eAAe,IAAI,KAAK,CAAC,MAAM,CAAC;YAChC,gBAAiB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE;YACjD,IAAI,QAAQ,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,yCAAyC,QAAQ,CAAC,UAAU,UAAU,GAAG,EAAE,CAC5E,CAAC;gBACF,0CAA0C;gBAC1C,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,CAAC,KAAK,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACrB,OAAO,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;gBACvB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAE,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,gBAAgB,EAAE,CAAC;gBACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAQ;IACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,WAAW,CACzB,GAAG,EACH,KAAK,EACL,QAAQ,CAAC,EAAE;YACT,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;gBACtD,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;YACD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC1B,IAAI,IAAI,KAAK,CAAC;YAChB,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC;oBACH,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBACvD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,EACD,KAAK,CACN,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts
new file mode 100644
index 00000000..be538c54
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts
@@ -0,0 +1,111 @@
+/**
+ * @license
+ * Copyright 2017 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { type Browser, type BrowserPlatform } from './browser-data/browser-data.js';
+import { InstalledBrowser } from './Cache.js';
+/**
+ * @public
+ */
+export interface InstallOptions {
+ /**
+ * Determines the path to download browsers to.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to install.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+ /**
+ * Provides information about the progress of the download.
+ */
+ downloadProgressCallback?: (downloadedBytes: number, totalBytes: number) => void;
+ /**
+ * Determines the host that will be used for downloading.
+ *
+ * @defaultValue Either
+ *
+ * - https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing or
+ * - https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central
+ *
+ */
+ baseUrl?: string;
+ /**
+ * Whether to unpack and install browser archives.
+ *
+ * @defaultValue `true`
+ */
+ unpack?: boolean;
+}
+/**
+ * @public
+ */
+export declare function install(options: InstallOptions & {
+ unpack?: true;
+}): Promise;
+/**
+ * @public
+ */
+export declare function install(options: InstallOptions & {
+ unpack: false;
+}): Promise;
+/**
+ * @public
+ */
+export interface UninstallOptions {
+ /**
+ * Determines the platform for the browser binary.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which browser to uninstall.
+ */
+ browser: Browser;
+ /**
+ * The browser build to uninstall
+ */
+ buildId: string;
+}
+/**
+ *
+ * @public
+ */
+export declare function uninstall(options: UninstallOptions): Promise;
+/**
+ * @public
+ */
+export interface GetInstalledBrowsersOptions {
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+}
+/**
+ * Returns metadata about browsers installed in the cache directory.
+ *
+ * @public
+ */
+export declare function getInstalledBrowsers(options: GetInstalledBrowsersOptions): Promise;
+/**
+ * @public
+ */
+export declare function canDownload(options: InstallOptions): Promise;
+//# sourceMappingURL=install.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts.map
new file mode 100644
index 00000000..8a635f03
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAQ,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAwBnD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,KACf,IAAI,CAAC;IACV;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,GAAG;IAAC,MAAM,CAAC,EAAE,IAAI,CAAA;CAAC,GACxC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7B;;GAEG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,GAAG;IAAC,MAAM,EAAE,KAAK,CAAA;CAAC,GACxC,OAAO,CAAC,MAAM,CAAC,CAAC;AA+EnB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAaxE;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAE7B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAe3E"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js
new file mode 100644
index 00000000..356ea37f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js
@@ -0,0 +1,117 @@
+/**
+ * @license
+ * Copyright 2017 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import assert from 'assert';
+import { existsSync } from 'fs';
+import { mkdir, unlink } from 'fs/promises';
+import os from 'os';
+import path from 'path';
+import { downloadUrls, } from './browser-data/browser-data.js';
+import { Cache, InstalledBrowser } from './Cache.js';
+import { debug } from './debug.js';
+import { detectBrowserPlatform } from './detectPlatform.js';
+import { unpackArchive } from './fileUtil.js';
+import { downloadFile, headHttpRequest } from './httpUtil.js';
+const debugInstall = debug('puppeteer:browsers:install');
+const times = new Map();
+function debugTime(label) {
+ times.set(label, process.hrtime());
+}
+function debugTimeEnd(label) {
+ const end = process.hrtime();
+ const start = times.get(label);
+ if (!start) {
+ return;
+ }
+ const duration = end[0] * 1000 + end[1] / 1e6 - (start[0] * 1000 + start[1] / 1e6); // calculate duration in milliseconds
+ debugInstall(`Duration for ${label}: ${duration}ms`);
+}
+export async function install(options) {
+ options.platform ??= detectBrowserPlatform();
+ options.unpack ??= true;
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`);
+ }
+ const url = getDownloadUrl(options.browser, options.platform, options.buildId, options.baseUrl);
+ const fileName = url.toString().split('/').pop();
+ assert(fileName, `A malformed download URL was found: ${url}.`);
+ const cache = new Cache(options.cacheDir);
+ const browserRoot = cache.browserRoot(options.browser);
+ const archivePath = path.join(browserRoot, `${options.buildId}-${fileName}`);
+ if (!existsSync(browserRoot)) {
+ await mkdir(browserRoot, { recursive: true });
+ }
+ if (!options.unpack) {
+ if (existsSync(archivePath)) {
+ return archivePath;
+ }
+ debugInstall(`Downloading binary from ${url}`);
+ debugTime('download');
+ await downloadFile(url, archivePath, options.downloadProgressCallback);
+ debugTimeEnd('download');
+ return archivePath;
+ }
+ const outputPath = cache.installationDir(options.browser, options.platform, options.buildId);
+ if (existsSync(outputPath)) {
+ return new InstalledBrowser(cache, options.browser, options.buildId, options.platform);
+ }
+ try {
+ debugInstall(`Downloading binary from ${url}`);
+ try {
+ debugTime('download');
+ await downloadFile(url, archivePath, options.downloadProgressCallback);
+ }
+ finally {
+ debugTimeEnd('download');
+ }
+ debugInstall(`Installing ${archivePath} to ${outputPath}`);
+ try {
+ debugTime('extract');
+ await unpackArchive(archivePath, outputPath);
+ }
+ finally {
+ debugTimeEnd('extract');
+ }
+ }
+ finally {
+ if (existsSync(archivePath)) {
+ await unlink(archivePath);
+ }
+ }
+ return new InstalledBrowser(cache, options.browser, options.buildId, options.platform);
+}
+/**
+ *
+ * @public
+ */
+export async function uninstall(options) {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(`Cannot detect the browser platform for: ${os.platform()} (${os.arch()})`);
+ }
+ new Cache(options.cacheDir).uninstall(options.browser, options.platform, options.buildId);
+}
+/**
+ * Returns metadata about browsers installed in the cache directory.
+ *
+ * @public
+ */
+export async function getInstalledBrowsers(options) {
+ return new Cache(options.cacheDir).getInstalledBrowsers();
+}
+/**
+ * @public
+ */
+export async function canDownload(options) {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`);
+ }
+ return await headHttpRequest(getDownloadUrl(options.browser, options.platform, options.buildId, options.baseUrl));
+}
+function getDownloadUrl(browser, platform, buildId, baseUrl) {
+ return new URL(downloadUrls[browser](platform, buildId, baseUrl));
+}
+//# sourceMappingURL=install.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js.map
new file mode 100644
index 00000000..ebf19051
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/install.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/install.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts
new file mode 100644
index 00000000..54335f7d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts
@@ -0,0 +1,124 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+///
+///
+import childProcess from 'child_process';
+import { type Browser, type BrowserPlatform, type ChromeReleaseChannel } from './browser-data/browser-data.js';
+/**
+ * @public
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Root path to the storage directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+/**
+ * @public
+ */
+export declare function computeExecutablePath(options: ComputeExecutablePathOptions): string;
+/**
+ * @public
+ */
+export interface SystemOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Release channel to look for on the system.
+ */
+ channel: ChromeReleaseChannel;
+}
+/**
+ * @public
+ */
+export declare function computeSystemExecutablePath(options: SystemOptions): string;
+/**
+ * @public
+ */
+export interface LaunchOptions {
+ executablePath: string;
+ pipe?: boolean;
+ dumpio?: boolean;
+ args?: string[];
+ env?: Record;
+ handleSIGINT?: boolean;
+ handleSIGTERM?: boolean;
+ handleSIGHUP?: boolean;
+ detached?: boolean;
+ onExit?: () => Promise;
+}
+/**
+ * @public
+ */
+export declare function launch(opts: LaunchOptions): Process;
+/**
+ * @public
+ */
+export declare const CDP_WEBSOCKET_ENDPOINT_REGEX: RegExp;
+/**
+ * @public
+ */
+export declare const WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX: RegExp;
+/**
+ * @public
+ */
+export declare class Process {
+ #private;
+ constructor(opts: LaunchOptions);
+ get nodeProcess(): childProcess.ChildProcess;
+ close(): Promise;
+ hasClosed(): Promise;
+ kill(): void;
+ waitForLineOutput(regex: RegExp, timeout?: number): Promise;
+}
+/**
+ * @internal
+ */
+export interface ErrorLike extends Error {
+ name: string;
+ message: string;
+}
+/**
+ * @internal
+ */
+export declare function isErrorLike(obj: unknown): obj is ErrorLike;
+/**
+ * @internal
+ */
+export declare function isErrnoException(obj: unknown): obj is NodeJS.ErrnoException;
+/**
+ * @public
+ */
+export declare class TimeoutError extends Error {
+ /**
+ * @internal
+ */
+ constructor(message?: string);
+}
+//# sourceMappingURL=launch.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts.map
new file mode 100644
index 00000000..5b26214f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/launch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AAKzC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,eAAe,EAEpB,KAAK,oBAAoB,EAC1B,MAAM,gCAAgC,CAAC;AAOxC;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,MAAM,CAER;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAoB1E;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,QACF,CAAC;AAExC;;GAEG;AACH,eAAO,MAAM,uCAAuC,QACP,CAAC;AAE9C;;GAEG;AACH,qBAAa,OAAO;;gBAYN,IAAI,EAAE,aAAa;IAwF/B,IAAI,WAAW,IAAI,YAAY,CAAC,YAAY,CAE3C;IA4CK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1B,IAAI,IAAI,IAAI;IAwDZ,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,MAAM,CAAC;CA+D/D;AAuBD;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAI1D;AACD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAK3E;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC;;OAEG;gBACS,OAAO,CAAC,EAAE,MAAM;CAK7B"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js
new file mode 100644
index 00000000..5f6cac9f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js
@@ -0,0 +1,329 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import childProcess from 'child_process';
+import { accessSync } from 'fs';
+import os from 'os';
+import readline from 'readline';
+import { resolveSystemExecutablePath, } from './browser-data/browser-data.js';
+import { Cache } from './Cache.js';
+import { debug } from './debug.js';
+import { detectBrowserPlatform } from './detectPlatform.js';
+const debugLaunch = debug('puppeteer:browsers:launcher');
+/**
+ * @public
+ */
+export function computeExecutablePath(options) {
+ return new Cache(options.cacheDir).computeExecutablePath(options);
+}
+/**
+ * @public
+ */
+export function computeSystemExecutablePath(options) {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(`Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`);
+ }
+ const path = resolveSystemExecutablePath(options.browser, options.platform, options.channel);
+ try {
+ accessSync(path);
+ }
+ catch (error) {
+ throw new Error(`Could not find Google Chrome executable for channel '${options.channel}' at '${path}'.`);
+ }
+ return path;
+}
+/**
+ * @public
+ */
+export function launch(opts) {
+ return new Process(opts);
+}
+/**
+ * @public
+ */
+export const CDP_WEBSOCKET_ENDPOINT_REGEX = /^DevTools listening on (ws:\/\/.*)$/;
+/**
+ * @public
+ */
+export const WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX = /^WebDriver BiDi listening on (ws:\/\/.*)$/;
+/**
+ * @public
+ */
+export class Process {
+ #executablePath;
+ #args;
+ #browserProcess;
+ #exited = false;
+ // The browser process can be closed externally or from the driver process. We
+ // need to invoke the hooks only once though but we don't know how many times
+ // we will be invoked.
+ #hooksRan = false;
+ #onExitHook = async () => { };
+ #browserProcessExiting;
+ constructor(opts) {
+ this.#executablePath = opts.executablePath;
+ this.#args = opts.args ?? [];
+ opts.pipe ??= false;
+ opts.dumpio ??= false;
+ opts.handleSIGINT ??= true;
+ opts.handleSIGTERM ??= true;
+ opts.handleSIGHUP ??= true;
+ // On non-windows platforms, `detached: true` makes child process a
+ // leader of a new process group, making it possible to kill child
+ // process tree with `.kill(-pid)` command. @see
+ // https://nodejs.org/api/child_process.html#child_process_options_detached
+ opts.detached ??= process.platform !== 'win32';
+ const stdio = this.#configureStdio({
+ pipe: opts.pipe,
+ dumpio: opts.dumpio,
+ });
+ const env = opts.env || {};
+ debugLaunch(`Launching ${this.#executablePath} ${this.#args.join(' ')}`, {
+ detached: opts.detached,
+ env: Object.keys(env).reduce((res, key) => {
+ if (key.toLowerCase().startsWith('puppeteer_')) {
+ res[key] = env[key];
+ }
+ return res;
+ }, {}),
+ stdio,
+ });
+ this.#browserProcess = childProcess.spawn(this.#executablePath, this.#args, {
+ detached: opts.detached,
+ env,
+ stdio,
+ });
+ debugLaunch(`Launched ${this.#browserProcess.pid}`);
+ if (opts.dumpio) {
+ this.#browserProcess.stderr?.pipe(process.stderr);
+ this.#browserProcess.stdout?.pipe(process.stdout);
+ }
+ process.on('exit', this.#onDriverProcessExit);
+ if (opts.handleSIGINT) {
+ process.on('SIGINT', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGTERM) {
+ process.on('SIGTERM', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGHUP) {
+ process.on('SIGHUP', this.#onDriverProcessSignal);
+ }
+ if (opts.onExit) {
+ this.#onExitHook = opts.onExit;
+ }
+ this.#browserProcessExiting = new Promise((resolve, reject) => {
+ this.#browserProcess.once('exit', async () => {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} onExit`);
+ this.#clearListeners();
+ this.#exited = true;
+ try {
+ await this.#runHooks();
+ }
+ catch (err) {
+ reject(err);
+ return;
+ }
+ resolve();
+ });
+ });
+ }
+ async #runHooks() {
+ if (this.#hooksRan) {
+ return;
+ }
+ this.#hooksRan = true;
+ await this.#onExitHook();
+ }
+ get nodeProcess() {
+ return this.#browserProcess;
+ }
+ #configureStdio(opts) {
+ if (opts.pipe) {
+ if (opts.dumpio) {
+ return ['ignore', 'pipe', 'pipe', 'pipe', 'pipe'];
+ }
+ else {
+ return ['ignore', 'ignore', 'ignore', 'pipe', 'pipe'];
+ }
+ }
+ else {
+ if (opts.dumpio) {
+ return ['pipe', 'pipe', 'pipe'];
+ }
+ else {
+ return ['pipe', 'ignore', 'pipe'];
+ }
+ }
+ }
+ #clearListeners() {
+ process.off('exit', this.#onDriverProcessExit);
+ process.off('SIGINT', this.#onDriverProcessSignal);
+ process.off('SIGTERM', this.#onDriverProcessSignal);
+ process.off('SIGHUP', this.#onDriverProcessSignal);
+ }
+ #onDriverProcessExit = (_code) => {
+ this.kill();
+ };
+ #onDriverProcessSignal = (signal) => {
+ switch (signal) {
+ case 'SIGINT':
+ this.kill();
+ process.exit(130);
+ case 'SIGTERM':
+ case 'SIGHUP':
+ void this.close();
+ break;
+ }
+ };
+ async close() {
+ await this.#runHooks();
+ if (!this.#exited) {
+ this.kill();
+ }
+ return await this.#browserProcessExiting;
+ }
+ hasClosed() {
+ return this.#browserProcessExiting;
+ }
+ kill() {
+ debugLaunch(`Trying to kill ${this.#browserProcess.pid}`);
+ // If the process failed to launch (for example if the browser executable path
+ // is invalid), then the process does not get a pid assigned. A call to
+ // `proc.kill` would error, as the `pid` to-be-killed can not be found.
+ if (this.#browserProcess &&
+ this.#browserProcess.pid &&
+ pidExists(this.#browserProcess.pid)) {
+ try {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} exists`);
+ if (process.platform === 'win32') {
+ try {
+ childProcess.execSync(`taskkill /pid ${this.#browserProcess.pid} /T /F`);
+ }
+ catch (error) {
+ debugLaunch(`Killing ${this.#browserProcess.pid} using taskkill failed`, error);
+ // taskkill can fail to kill the process e.g. due to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill();
+ }
+ }
+ else {
+ // on linux the process group can be killed with the group id prefixed with
+ // a minus sign. The process group id is the group leader's pid.
+ const processGroupId = -this.#browserProcess.pid;
+ try {
+ process.kill(processGroupId, 'SIGKILL');
+ }
+ catch (error) {
+ debugLaunch(`Killing ${this.#browserProcess.pid} using process.kill failed`, error);
+ // Killing the process group can fail due e.g. to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill('SIGKILL');
+ }
+ }
+ }
+ catch (error) {
+ throw new Error(`${PROCESS_ERROR_EXPLANATION}\nError cause: ${isErrorLike(error) ? error.stack : error}`);
+ }
+ }
+ this.#clearListeners();
+ }
+ waitForLineOutput(regex, timeout = 0) {
+ if (!this.#browserProcess.stderr) {
+ throw new Error('`browserProcess` does not have stderr.');
+ }
+ const rl = readline.createInterface(this.#browserProcess.stderr);
+ let stderr = '';
+ return new Promise((resolve, reject) => {
+ rl.on('line', onLine);
+ rl.on('close', onClose);
+ this.#browserProcess.on('exit', onClose);
+ this.#browserProcess.on('error', onClose);
+ const timeoutId = timeout > 0 ? setTimeout(onTimeout, timeout) : undefined;
+ const cleanup = () => {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ rl.off('line', onLine);
+ rl.off('close', onClose);
+ this.#browserProcess.off('exit', onClose);
+ this.#browserProcess.off('error', onClose);
+ };
+ function onClose(error) {
+ cleanup();
+ reject(new Error([
+ `Failed to launch the browser process!${error ? ' ' + error.message : ''}`,
+ stderr,
+ '',
+ 'TROUBLESHOOTING: https://pptr.dev/troubleshooting',
+ '',
+ ].join('\n')));
+ }
+ function onTimeout() {
+ cleanup();
+ reject(new TimeoutError(`Timed out after ${timeout} ms while waiting for the WS endpoint URL to appear in stdout!`));
+ }
+ function onLine(line) {
+ stderr += line + '\n';
+ const match = line.match(regex);
+ if (!match) {
+ return;
+ }
+ cleanup();
+ // The RegExp matches, so this will obviously exist.
+ resolve(match[1]);
+ }
+ });
+ }
+}
+const PROCESS_ERROR_EXPLANATION = `Puppeteer was unable to kill the process which ran the browser binary.
+This means that, on future Puppeteer launches, Puppeteer might not be able to launch the browser.
+Please check your open processes and ensure that the browser processes that Puppeteer launched have been killed.
+If you think this is a bug, please report it on the Puppeteer issue tracker.`;
+/**
+ * @internal
+ */
+function pidExists(pid) {
+ try {
+ return process.kill(pid, 0);
+ }
+ catch (error) {
+ if (isErrnoException(error)) {
+ if (error.code && error.code === 'ESRCH') {
+ return false;
+ }
+ }
+ throw error;
+ }
+}
+/**
+ * @internal
+ */
+export function isErrorLike(obj) {
+ return (typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj);
+}
+/**
+ * @internal
+ */
+export function isErrnoException(obj) {
+ return (isErrorLike(obj) &&
+ ('errno' in obj || 'code' in obj || 'path' in obj || 'syscall' in obj));
+}
+/**
+ * @public
+ */
+export class TimeoutError extends Error {
+ /**
+ * @internal
+ */
+ constructor(message) {
+ super(message);
+ this.name = this.constructor.name;
+ Error.captureStackTrace(this, this.constructor);
+ }
+}
+//# sourceMappingURL=launch.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js.map
new file mode 100644
index 00000000..d03645b9
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/launch.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/launch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,UAAU,EAAC,MAAM,IAAI,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,OAAO,EAGL,2BAA2B,GAE5B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;AA2BzD;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACpE,CAAC;AAsBD;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAsB;IAChE,OAAO,CAAC,QAAQ,KAAK,qBAAqB,EAAE,CAAC;IAC7C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,uDAAuD,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CACtF,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,2BAA2B,CACtC,OAAO,CAAC,OAAO,EACf,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,OAAO,CAChB,CAAC;IACF,IAAI,CAAC;QACH,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,wDAAwD,OAAO,CAAC,OAAO,SAAS,IAAI,IAAI,CACzF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAkBD;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,IAAmB;IACxC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GACvC,qCAAqC,CAAC;AAExC;;GAEG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAClD,2CAA2C,CAAC;AAE9C;;GAEG;AACH,MAAM,OAAO,OAAO;IAClB,eAAe,CAAC;IAChB,KAAK,CAAW;IAChB,eAAe,CAA4B;IAC3C,OAAO,GAAG,KAAK,CAAC;IAChB,8EAA8E;IAC9E,6EAA6E;IAC7E,sBAAsB;IACtB,SAAS,GAAG,KAAK,CAAC;IAClB,WAAW,GAAG,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;IAC7B,sBAAsB,CAAgB;IAEtC,YAAY,IAAmB;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC;QACtB,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;QAC3B,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;QAC3B,mEAAmE;QACnE,kEAAkE;QAClE,gDAAgD;QAChD,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;QAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QAE3B,WAAW,CAAC,aAAa,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;YACvE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAC1B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBACX,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;oBAC/C,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EACD,EAAE,CACH;YACD,KAAK;SACN,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC,KAAK,CACvC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,KAAK,EACV;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG;YACH,KAAK;SACN,CACF,CAAC;QAEF,WAAW,CAAC,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,sBAAsB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5D,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;gBAC3C,WAAW,CAAC,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,CAAC;gBAClE,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,GAAG,CAAC,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,eAAe,CAAC,IAGf;QACC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,eAAe;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrD,CAAC;IAED,oBAAoB,GAAG,CAAC,KAAa,EAAE,EAAE;QACvC,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,sBAAsB,GAAG,CAAC,MAAc,EAAQ,EAAE;QAChD,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM;QACV,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;QACD,OAAO,MAAM,IAAI,CAAC,sBAAsB,CAAC;IAC3C,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACrC,CAAC;IAED,IAAI;QACF,WAAW,CAAC,kBAAkB,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,8EAA8E;QAC9E,uEAAuE;QACvE,uEAAuE;QACvE,IACE,IAAI,CAAC,eAAe;YACpB,IAAI,CAAC,eAAe,CAAC,GAAG;YACxB,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EACnC,CAAC;YACD,IAAI,CAAC;gBACH,WAAW,CAAC,mBAAmB,IAAI,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,CAAC;gBAClE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACjC,IAAI,CAAC;wBACH,YAAY,CAAC,QAAQ,CACnB,iBAAiB,IAAI,CAAC,eAAe,CAAC,GAAG,QAAQ,CAClD,CAAC;oBACJ,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,WAAW,CACT,WAAW,IAAI,CAAC,eAAe,CAAC,GAAG,wBAAwB,EAC3D,KAAK,CACN,CAAC;wBACF,yEAAyE;wBACzE,wEAAwE;wBACxE,gEAAgE;wBAChE,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;oBAC9B,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,2EAA2E;oBAC3E,gEAAgE;oBAChE,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;oBAEjD,IAAI,CAAC;wBACH,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;oBAC1C,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,WAAW,CACT,WAAW,IAAI,CAAC,eAAe,CAAC,GAAG,4BAA4B,EAC/D,KAAK,CACN,CAAC;wBACF,sEAAsE;wBACtE,wEAAwE;wBACxE,gEAAgE;wBAChE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,GAAG,yBAAyB,kBAC1B,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KACrC,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,iBAAiB,CAAC,KAAa,EAAE,OAAO,GAAG,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACtB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1C,MAAM,SAAS,GACb,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE3D,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,IAAI,SAAS,EAAE,CAAC;oBACd,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC1B,CAAC;gBACD,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvB,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAC1C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC7C,CAAC,CAAC;YAEF,SAAS,OAAO,CAAC,KAAa;gBAC5B,OAAO,EAAE,CAAC;gBACV,MAAM,CACJ,IAAI,KAAK,CACP;oBACE,wCACE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAChC,EAAE;oBACF,MAAM;oBACN,EAAE;oBACF,mDAAmD;oBACnD,EAAE;iBACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CACF,CAAC;YACJ,CAAC;YAED,SAAS,SAAS;gBAChB,OAAO,EAAE,CAAC;gBACV,MAAM,CACJ,IAAI,YAAY,CACd,mBAAmB,OAAO,gEAAgE,CAC3F,CACF,CAAC;YACJ,CAAC;YAED,SAAS,MAAM,CAAC,IAAY;gBAC1B,MAAM,IAAI,IAAI,GAAG,IAAI,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;gBACT,CAAC;gBACD,OAAO,EAAE,CAAC;gBACV,oDAAoD;gBACpD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,yBAAyB,GAAG;;;6EAG2C,CAAC;AAE9E;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAUD;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAC7E,CAAC;AACJ,CAAC;AACD;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,OAAO,CACL,WAAW,CAAC,GAAG,CAAC;QAChB,CAAC,OAAO,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,SAAS,IAAI,GAAG,CAAC,CACvE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC;;OAEG;IACH,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;CACF"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts
new file mode 100644
index 00000000..24f6aa59
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts
@@ -0,0 +1,8 @@
+#!/usr/bin/env node
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+export {};
+//# sourceMappingURL=main-cli.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts.map
new file mode 100644
index 00000000..97cfca76
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-cli.d.ts","sourceRoot":"","sources":["../../src/main-cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js
new file mode 100755
index 00000000..7a9047ea
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js
@@ -0,0 +1,9 @@
+#!/usr/bin/env node
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import { CLI } from './CLI.js';
+void new CLI().run(process.argv);
+//# sourceMappingURL=main-cli.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js.map
new file mode 100644
index 00000000..d856a596
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main-cli.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main-cli.js","sourceRoot":"","sources":["../../src/main-cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AAEH,OAAO,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAE7B,KAAK,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts
new file mode 100644
index 00000000..6e4355d9
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts
@@ -0,0 +1,15 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+export type { LaunchOptions, ComputeExecutablePathOptions as Options, SystemOptions, } from './launch.js';
+export { launch, computeExecutablePath, computeSystemExecutablePath, TimeoutError, CDP_WEBSOCKET_ENDPOINT_REGEX, WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX, Process, } from './launch.js';
+export type { InstallOptions, GetInstalledBrowsersOptions, UninstallOptions, } from './install.js';
+export { install, getInstalledBrowsers, canDownload, uninstall, } from './install.js';
+export { detectBrowserPlatform } from './detectPlatform.js';
+export type { ProfileOptions } from './browser-data/browser-data.js';
+export { resolveBuildId, Browser, BrowserPlatform, ChromeReleaseChannel, createProfile, } from './browser-data/browser-data.js';
+export { CLI, makeProgressCallback } from './CLI.js';
+export { Cache, InstalledBrowser } from './Cache.js';
+//# sourceMappingURL=main.d.ts.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts.map
new file mode 100644
index 00000000..74ebb541
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EACV,aAAa,EACb,4BAA4B,IAAI,OAAO,EACvC,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACZ,4BAA4B,EAC5B,uCAAuC,EACvC,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,cAAc,EACd,2BAA2B,EAC3B,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAC,cAAc,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,cAAc,EACd,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,GAAG,EAAE,oBAAoB,EAAC,MAAM,UAAU,CAAC;AACnD,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAC,MAAM,YAAY,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js
new file mode 100644
index 00000000..a2f70080
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js
@@ -0,0 +1,12 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+export { launch, computeExecutablePath, computeSystemExecutablePath, TimeoutError, CDP_WEBSOCKET_ENDPOINT_REGEX, WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX, Process, } from './launch.js';
+export { install, getInstalledBrowsers, canDownload, uninstall, } from './install.js';
+export { detectBrowserPlatform } from './detectPlatform.js';
+export { resolveBuildId, Browser, BrowserPlatform, ChromeReleaseChannel, createProfile, } from './browser-data/browser-data.js';
+export { CLI, makeProgressCallback } from './CLI.js';
+export { Cache, InstalledBrowser } from './Cache.js';
+//# sourceMappingURL=main.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js.map b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js.map
new file mode 100644
index 00000000..d2d6bbd1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/main.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EACL,MAAM,EACN,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACZ,4BAA4B,EAC5B,uCAAuC,EACvC,OAAO,GACR,MAAM,aAAa,CAAC;AAMrB,OAAO,EACL,OAAO,EACP,oBAAoB,EACpB,WAAW,EACX,SAAS,GACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,qBAAqB,EAAC,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EACL,cAAc,EACd,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,aAAa,GACd,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAC,GAAG,EAAE,oBAAoB,EAAC,MAAM,UAAU,CAAC;AACnD,OAAO,EAAC,KAAK,EAAE,gBAAgB,EAAC,MAAM,YAAY,CAAC"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/lib/esm/package.json b/Scripts/node_modules/@puppeteer/browsers/lib/esm/package.json
new file mode 100644
index 00000000..1632c2c4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/lib/esm/package.json
@@ -0,0 +1 @@
+{"type": "module"}
\ No newline at end of file
diff --git a/Scripts/node_modules/@puppeteer/browsers/package.json b/Scripts/node_modules/@puppeteer/browsers/package.json
new file mode 100644
index 00000000..7c80404c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/package.json
@@ -0,0 +1,113 @@
+{
+ "name": "@puppeteer/browsers",
+ "version": "1.9.1",
+ "description": "Download and launch browsers",
+ "scripts": {
+ "build:docs": "wireit",
+ "build": "wireit",
+ "build:test": "wireit",
+ "clean": "../../tools/clean.js",
+ "test": "wireit"
+ },
+ "type": "commonjs",
+ "bin": "lib/cjs/main-cli.js",
+ "main": "./lib/cjs/main.js",
+ "exports": {
+ "import": "./lib/esm/main.js",
+ "require": "./lib/cjs/main.js"
+ },
+ "wireit": {
+ "build": {
+ "command": "tsc -b && tsx ../../tools/chmod.ts 755 lib/cjs/main-cli.js lib/esm/main-cli.js",
+ "files": [
+ "src/**/*.ts",
+ "tsconfig.json"
+ ],
+ "clean": "if-file-deleted",
+ "output": [
+ "lib/**",
+ "!lib/esm/package.json"
+ ],
+ "dependencies": [
+ "generate:package-json"
+ ]
+ },
+ "generate:package-json": {
+ "command": "tsx ../../tools/generate_module_package_json.ts lib/esm/package.json",
+ "files": [
+ "../../tools/generate_module_package_json.ts"
+ ],
+ "output": [
+ "lib/esm/package.json"
+ ]
+ },
+ "build:docs": {
+ "command": "api-extractor run --local --config \"./api-extractor.docs.json\"",
+ "files": [
+ "api-extractor.docs.json",
+ "lib/esm/main.d.ts",
+ "tsconfig.json"
+ ],
+ "dependencies": [
+ "build"
+ ]
+ },
+ "build:test": {
+ "command": "tsc -b test/src/tsconfig.json",
+ "files": [
+ "test/**/*.ts",
+ "test/src/tsconfig.json"
+ ],
+ "output": [
+ "test/build/**"
+ ],
+ "dependencies": [
+ "build",
+ "../testserver:build"
+ ]
+ },
+ "test": {
+ "command": "node tools/downloadTestBrowsers.mjs && cross-env DEBUG=puppeteer:* mocha",
+ "files": [
+ ".mocharc.cjs"
+ ],
+ "dependencies": [
+ "build:test"
+ ]
+ }
+ },
+ "keywords": [
+ "puppeteer",
+ "browsers"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/puppeteer/puppeteer/tree/main/packages/browsers"
+ },
+ "author": "The Chromium Authors",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=16.3.0"
+ },
+ "files": [
+ "lib",
+ "src",
+ "!*.tsbuildinfo"
+ ],
+ "dependencies": {
+ "debug": "4.3.4",
+ "extract-zip": "2.0.1",
+ "progress": "2.0.3",
+ "proxy-agent": "6.3.1",
+ "tar-fs": "3.0.4",
+ "unbzip2-stream": "1.4.3",
+ "yargs": "17.7.2"
+ },
+ "devDependencies": {
+ "@types/debug": "4.1.12",
+ "@types/progress": "2.0.7",
+ "@types/tar-fs": "2.0.4",
+ "@types/unbzip2-stream": "1.4.3",
+ "@types/yargs": "17.0.32"
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/CLI.ts b/Scripts/node_modules/@puppeteer/browsers/src/CLI.ts
new file mode 100644
index 00000000..255f5545
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/CLI.ts
@@ -0,0 +1,401 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {stdin as input, stdout as output} from 'process';
+import * as readline from 'readline';
+
+import ProgressBar from 'progress';
+import type * as Yargs from 'yargs';
+import {hideBin} from 'yargs/helpers';
+import yargs from 'yargs/yargs';
+
+import {
+ resolveBuildId,
+ type Browser,
+ BrowserPlatform,
+ type ChromeReleaseChannel,
+} from './browser-data/browser-data.js';
+import {Cache} from './Cache.js';
+import {detectBrowserPlatform} from './detectPlatform.js';
+import {install} from './install.js';
+import {
+ computeExecutablePath,
+ computeSystemExecutablePath,
+ launch,
+} from './launch.js';
+
+interface InstallArgs {
+ browser: {
+ name: Browser;
+ buildId: string;
+ };
+ path?: string;
+ platform?: BrowserPlatform;
+ baseUrl?: string;
+}
+
+interface LaunchArgs {
+ browser: {
+ name: Browser;
+ buildId: string;
+ };
+ path?: string;
+ platform?: BrowserPlatform;
+ detached: boolean;
+ system: boolean;
+}
+
+interface ClearArgs {
+ path?: string;
+}
+
+/**
+ * @public
+ */
+export class CLI {
+ #cachePath;
+ #rl?: readline.Interface;
+ #scriptName = '';
+ #allowCachePathOverride = true;
+ #pinnedBrowsers?: Partial<{[key in Browser]: string}>;
+ #prefixCommand?: {cmd: string; description: string};
+
+ constructor(
+ opts?:
+ | string
+ | {
+ cachePath?: string;
+ scriptName?: string;
+ prefixCommand?: {cmd: string; description: string};
+ allowCachePathOverride?: boolean;
+ pinnedBrowsers?: Partial<{[key in Browser]: string}>;
+ },
+ rl?: readline.Interface
+ ) {
+ if (!opts) {
+ opts = {};
+ }
+ if (typeof opts === 'string') {
+ opts = {
+ cachePath: opts,
+ };
+ }
+ this.#cachePath = opts.cachePath ?? process.cwd();
+ this.#rl = rl;
+ this.#scriptName = opts.scriptName ?? '@puppeteer/browsers';
+ this.#allowCachePathOverride = opts.allowCachePathOverride ?? true;
+ this.#pinnedBrowsers = opts.pinnedBrowsers;
+ this.#prefixCommand = opts.prefixCommand;
+ }
+
+ #defineBrowserParameter(yargs: Yargs.Argv): void {
+ yargs.positional('browser', {
+ description:
+ 'Which browser to install [@]. `latest` will try to find the latest available build. `buildId` is a browser-specific identifier such as a version or a revision.',
+ type: 'string',
+ coerce: (opt): InstallArgs['browser'] => {
+ return {
+ name: this.#parseBrowser(opt),
+ buildId: this.#parseBuildId(opt),
+ };
+ },
+ });
+ }
+
+ #definePlatformParameter(yargs: Yargs.Argv): void {
+ yargs.option('platform', {
+ type: 'string',
+ desc: 'Platform that the binary needs to be compatible with.',
+ choices: Object.values(BrowserPlatform),
+ defaultDescription: 'Auto-detected',
+ });
+ }
+
+ #definePathParameter(yargs: Yargs.Argv, required = false): void {
+ if (!this.#allowCachePathOverride) {
+ return;
+ }
+ yargs.option('path', {
+ type: 'string',
+ desc: 'Path to the root folder for the browser downloads and installation. The installation folder structure is compatible with the cache structure used by Puppeteer.',
+ defaultDescription: 'Current working directory',
+ ...(required ? {} : {default: process.cwd()}),
+ });
+ if (required) {
+ yargs.demandOption('path');
+ }
+ }
+
+ async run(argv: string[]): Promise {
+ const yargsInstance = yargs(hideBin(argv));
+ let target = yargsInstance.scriptName(this.#scriptName);
+ if (this.#prefixCommand) {
+ target = target.command(
+ this.#prefixCommand.cmd,
+ this.#prefixCommand.description,
+ yargs => {
+ return this.#build(yargs);
+ }
+ );
+ } else {
+ target = this.#build(target);
+ }
+ await target
+ .demandCommand(1)
+ .help()
+ .wrap(Math.min(120, yargsInstance.terminalWidth()))
+ .parse();
+ }
+
+ #build(yargs: Yargs.Argv): Yargs.Argv {
+ const latestOrPinned = this.#pinnedBrowsers ? 'pinned' : 'latest';
+ return yargs
+ .command(
+ 'install ',
+ 'Download and install the specified browser. If successful, the command outputs the actual browser buildId that was installed and the absolute path to the browser executable (format: @ ).',
+ yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('base-url', {
+ type: 'string',
+ desc: 'Base URL to download from',
+ });
+ yargs.example(
+ '$0 install chrome',
+ `Install the ${latestOrPinned} available build of the Chrome browser.`
+ );
+ yargs.example(
+ '$0 install chrome@latest',
+ 'Install the latest available build for the Chrome browser.'
+ );
+ yargs.example(
+ '$0 install chrome@canary',
+ 'Install the latest available build for the Chrome Canary browser.'
+ );
+ yargs.example(
+ '$0 install chrome@115',
+ 'Install the latest available build for Chrome 115.'
+ );
+ yargs.example(
+ '$0 install chromedriver@canary',
+ 'Install the latest available build for ChromeDriver Canary.'
+ );
+ yargs.example(
+ '$0 install chromedriver@115',
+ 'Install the latest available build for ChromeDriver 115.'
+ );
+ yargs.example(
+ '$0 install chromedriver@115.0.5790',
+ 'Install the latest available patch (115.0.5790.X) build for ChromeDriver.'
+ );
+ yargs.example(
+ '$0 install chrome-headless-shell',
+ 'Install the latest available chrome-headless-shell build.'
+ );
+ yargs.example(
+ '$0 install chrome-headless-shell@beta',
+ 'Install the latest available chrome-headless-shell build corresponding to the Beta channel.'
+ );
+ yargs.example(
+ '$0 install chrome-headless-shell@118',
+ 'Install the latest available chrome-headless-shell 118 build.'
+ );
+ yargs.example(
+ '$0 install chromium@1083080',
+ 'Install the revision 1083080 of the Chromium browser.'
+ );
+ yargs.example(
+ '$0 install firefox',
+ 'Install the latest available build of the Firefox browser.'
+ );
+ yargs.example(
+ '$0 install firefox --platform mac',
+ 'Install the latest Mac (Intel) build of the Firefox browser.'
+ );
+ if (this.#allowCachePathOverride) {
+ yargs.example(
+ '$0 install firefox --path /tmp/my-browser-cache',
+ 'Install to the specified cache directory.'
+ );
+ }
+ },
+ async argv => {
+ const args = argv as unknown as InstallArgs;
+ args.platform ??= detectBrowserPlatform();
+ if (!args.platform) {
+ throw new Error(`Could not resolve the current platform`);
+ }
+ if (args.browser.buildId === 'pinned') {
+ const pinnedVersion = this.#pinnedBrowsers?.[args.browser.name];
+ if (!pinnedVersion) {
+ throw new Error(
+ `No pinned version found for ${args.browser.name}`
+ );
+ }
+ args.browser.buildId = pinnedVersion;
+ }
+ args.browser.buildId = await resolveBuildId(
+ args.browser.name,
+ args.platform,
+ args.browser.buildId
+ );
+ await install({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ platform: args.platform,
+ cacheDir: args.path ?? this.#cachePath,
+ downloadProgressCallback: makeProgressCallback(
+ args.browser.name,
+ args.browser.buildId
+ ),
+ baseUrl: args.baseUrl,
+ });
+ console.log(
+ `${args.browser.name}@${
+ args.browser.buildId
+ } ${computeExecutablePath({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ })}`
+ );
+ }
+ )
+ .command(
+ 'launch ',
+ 'Launch the specified browser',
+ yargs => {
+ this.#defineBrowserParameter(yargs);
+ this.#definePlatformParameter(yargs);
+ this.#definePathParameter(yargs);
+ yargs.option('detached', {
+ type: 'boolean',
+ desc: 'Detach the child process.',
+ default: false,
+ });
+ yargs.option('system', {
+ type: 'boolean',
+ desc: 'Search for a browser installed on the system instead of the cache folder.',
+ default: false,
+ });
+ yargs.example(
+ '$0 launch chrome@115.0.5790.170',
+ 'Launch Chrome 115.0.5790.170'
+ );
+ yargs.example(
+ '$0 launch firefox@112.0a1',
+ 'Launch the Firefox browser identified by the milestone 112.0a1.'
+ );
+ yargs.example(
+ '$0 launch chrome@115.0.5790.170 --detached',
+ 'Launch the browser but detach the sub-processes.'
+ );
+ yargs.example(
+ '$0 launch chrome@canary --system',
+ 'Try to locate the Canary build of Chrome installed on the system and launch it.'
+ );
+ },
+ async argv => {
+ const args = argv as unknown as LaunchArgs;
+ const executablePath = args.system
+ ? computeSystemExecutablePath({
+ browser: args.browser.name,
+ // TODO: throw an error if not a ChromeReleaseChannel is provided.
+ channel: args.browser.buildId as ChromeReleaseChannel,
+ platform: args.platform,
+ })
+ : computeExecutablePath({
+ browser: args.browser.name,
+ buildId: args.browser.buildId,
+ cacheDir: args.path ?? this.#cachePath,
+ platform: args.platform,
+ });
+ launch({
+ executablePath,
+ detached: args.detached,
+ });
+ }
+ )
+ .command(
+ 'clear',
+ this.#allowCachePathOverride
+ ? 'Removes all installed browsers from the specified cache directory'
+ : `Removes all installed browsers from ${this.#cachePath}`,
+ yargs => {
+ this.#definePathParameter(yargs, true);
+ },
+ async argv => {
+ const args = argv as unknown as ClearArgs;
+ const cacheDir = args.path ?? this.#cachePath;
+ const rl = this.#rl ?? readline.createInterface({input, output});
+ rl.question(
+ `Do you want to permanently and recursively delete the content of ${cacheDir} (yes/No)? `,
+ answer => {
+ rl.close();
+ if (!['y', 'yes'].includes(answer.toLowerCase().trim())) {
+ console.log('Cancelled.');
+ return;
+ }
+ const cache = new Cache(cacheDir);
+ cache.clear();
+ console.log(`${cacheDir} cleared.`);
+ }
+ );
+ }
+ )
+ .demandCommand(1)
+ .help();
+ }
+
+ #parseBrowser(version: string): Browser {
+ return version.split('@').shift() as Browser;
+ }
+
+ #parseBuildId(version: string): string {
+ const parts = version.split('@');
+ return parts.length === 2
+ ? parts[1]!
+ : this.#pinnedBrowsers
+ ? 'pinned'
+ : 'latest';
+ }
+}
+
+/**
+ * @public
+ */
+export function makeProgressCallback(
+ browser: Browser,
+ buildId: string
+): (downloadedBytes: number, totalBytes: number) => void {
+ let progressBar: ProgressBar;
+ let lastDownloadedBytes = 0;
+ return (downloadedBytes: number, totalBytes: number) => {
+ if (!progressBar) {
+ progressBar = new ProgressBar(
+ `Downloading ${browser} r${buildId} - ${toMegabytes(
+ totalBytes
+ )} [:bar] :percent :etas `,
+ {
+ complete: '=',
+ incomplete: ' ',
+ width: 20,
+ total: totalBytes,
+ }
+ );
+ }
+ const delta = downloadedBytes - lastDownloadedBytes;
+ lastDownloadedBytes = downloadedBytes;
+ progressBar.tick(delta);
+ };
+}
+
+function toMegabytes(bytes: number) {
+ const mb = bytes / 1000 / 1000;
+ return `${Math.round(mb * 10) / 10} MB`;
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/Cache.ts b/Scripts/node_modules/@puppeteer/browsers/src/Cache.ts
new file mode 100644
index 00000000..13b46583
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/Cache.ts
@@ -0,0 +1,211 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import fs from 'fs';
+import os from 'os';
+import path from 'path';
+
+import {
+ Browser,
+ type BrowserPlatform,
+ executablePathByBrowser,
+} from './browser-data/browser-data.js';
+import {detectBrowserPlatform} from './detectPlatform.js';
+
+/**
+ * @public
+ */
+export class InstalledBrowser {
+ browser: Browser;
+ buildId: string;
+ platform: BrowserPlatform;
+ readonly executablePath: string;
+
+ #cache: Cache;
+
+ /**
+ * @internal
+ */
+ constructor(
+ cache: Cache,
+ browser: Browser,
+ buildId: string,
+ platform: BrowserPlatform
+ ) {
+ this.#cache = cache;
+ this.browser = browser;
+ this.buildId = buildId;
+ this.platform = platform;
+ this.executablePath = cache.computeExecutablePath({
+ browser,
+ buildId,
+ platform,
+ });
+ }
+
+ /**
+ * Path to the root of the installation folder. Use
+ * {@link computeExecutablePath} to get the path to the executable binary.
+ */
+ get path(): string {
+ return this.#cache.installationDir(
+ this.browser,
+ this.platform,
+ this.buildId
+ );
+ }
+}
+
+/**
+ * @internal
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+
+/**
+ * The cache used by Puppeteer relies on the following structure:
+ *
+ * - rootDir
+ * -- | browserRoot(browser1)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * -- | browserRoot(browser2)
+ * ---- - | installationDir()
+ * ------ the browser-platform-buildId
+ * ------ specific structure.
+ * @internal
+ */
+export class Cache {
+ #rootDir: string;
+
+ constructor(rootDir: string) {
+ this.#rootDir = rootDir;
+ }
+
+ /**
+ * @internal
+ */
+ get rootDir(): string {
+ return this.#rootDir;
+ }
+
+ browserRoot(browser: Browser): string {
+ return path.join(this.#rootDir, browser);
+ }
+
+ installationDir(
+ browser: Browser,
+ platform: BrowserPlatform,
+ buildId: string
+ ): string {
+ return path.join(this.browserRoot(browser), `${platform}-${buildId}`);
+ }
+
+ clear(): void {
+ fs.rmSync(this.#rootDir, {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+
+ uninstall(
+ browser: Browser,
+ platform: BrowserPlatform,
+ buildId: string
+ ): void {
+ fs.rmSync(this.installationDir(browser, platform, buildId), {
+ force: true,
+ recursive: true,
+ maxRetries: 10,
+ retryDelay: 500,
+ });
+ }
+
+ getInstalledBrowsers(): InstalledBrowser[] {
+ if (!fs.existsSync(this.#rootDir)) {
+ return [];
+ }
+ const types = fs.readdirSync(this.#rootDir);
+ const browsers = types.filter((t): t is Browser => {
+ return (Object.values(Browser) as string[]).includes(t);
+ });
+ return browsers.flatMap(browser => {
+ const files = fs.readdirSync(this.browserRoot(browser));
+ return files
+ .map(file => {
+ const result = parseFolderPath(
+ path.join(this.browserRoot(browser), file)
+ );
+ if (!result) {
+ return null;
+ }
+ return new InstalledBrowser(
+ this,
+ browser,
+ result.buildId,
+ result.platform as BrowserPlatform
+ );
+ })
+ .filter((item: InstalledBrowser | null): item is InstalledBrowser => {
+ return item !== null;
+ });
+ });
+ }
+
+ computeExecutablePath(options: ComputeExecutablePathOptions): string {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(
+ `Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`
+ );
+ }
+ const installationDir = this.installationDir(
+ options.browser,
+ options.platform,
+ options.buildId
+ );
+ return path.join(
+ installationDir,
+ executablePathByBrowser[options.browser](
+ options.platform,
+ options.buildId
+ )
+ );
+ }
+}
+
+function parseFolderPath(
+ folderPath: string
+): {platform: string; buildId: string} | undefined {
+ const name = path.basename(folderPath);
+ const splits = name.split('-');
+ if (splits.length !== 2) {
+ return;
+ }
+ const [platform, buildId] = splits;
+ if (!buildId || !platform) {
+ return;
+ }
+ return {platform, buildId};
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/browser-data.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/browser-data.ts
new file mode 100644
index 00000000..67bb4990
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/browser-data.ts
@@ -0,0 +1,187 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import * as chromeHeadlessShell from './chrome-headless-shell.js';
+import * as chrome from './chrome.js';
+import * as chromedriver from './chromedriver.js';
+import * as chromium from './chromium.js';
+import * as firefox from './firefox.js';
+import {
+ Browser,
+ BrowserPlatform,
+ BrowserTag,
+ ChromeReleaseChannel,
+ type ProfileOptions,
+} from './types.js';
+
+export type {ProfileOptions};
+
+export const downloadUrls = {
+ [Browser.CHROMEDRIVER]: chromedriver.resolveDownloadUrl,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadUrl,
+ [Browser.CHROME]: chrome.resolveDownloadUrl,
+ [Browser.CHROMIUM]: chromium.resolveDownloadUrl,
+ [Browser.FIREFOX]: firefox.resolveDownloadUrl,
+};
+
+export const downloadPaths = {
+ [Browser.CHROMEDRIVER]: chromedriver.resolveDownloadPath,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.resolveDownloadPath,
+ [Browser.CHROME]: chrome.resolveDownloadPath,
+ [Browser.CHROMIUM]: chromium.resolveDownloadPath,
+ [Browser.FIREFOX]: firefox.resolveDownloadPath,
+};
+
+export const executablePathByBrowser = {
+ [Browser.CHROMEDRIVER]: chromedriver.relativeExecutablePath,
+ [Browser.CHROMEHEADLESSSHELL]: chromeHeadlessShell.relativeExecutablePath,
+ [Browser.CHROME]: chrome.relativeExecutablePath,
+ [Browser.CHROMIUM]: chromium.relativeExecutablePath,
+ [Browser.FIREFOX]: firefox.relativeExecutablePath,
+};
+
+export {Browser, BrowserPlatform, ChromeReleaseChannel};
+
+/**
+ * @public
+ */
+export async function resolveBuildId(
+ browser: Browser,
+ platform: BrowserPlatform,
+ tag: string
+): Promise {
+ switch (browser) {
+ case Browser.FIREFOX:
+ switch (tag as BrowserTag) {
+ case BrowserTag.LATEST:
+ return await firefox.resolveBuildId('FIREFOX_NIGHTLY');
+ case BrowserTag.BETA:
+ case BrowserTag.CANARY:
+ case BrowserTag.DEV:
+ case BrowserTag.STABLE:
+ throw new Error(
+ `${tag} is not supported for ${browser}. Use 'latest' instead.`
+ );
+ }
+ case Browser.CHROME: {
+ switch (tag as BrowserTag) {
+ case BrowserTag.LATEST:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.BETA:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.BETA);
+ case BrowserTag.CANARY:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.DEV:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.DEV);
+ case BrowserTag.STABLE:
+ return await chrome.resolveBuildId(ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chrome.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMEDRIVER: {
+ switch (tag) {
+ case BrowserTag.LATEST:
+ case BrowserTag.CANARY:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.CANARY);
+ case BrowserTag.BETA:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.BETA);
+ case BrowserTag.DEV:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.DEV);
+ case BrowserTag.STABLE:
+ return await chromedriver.resolveBuildId(ChromeReleaseChannel.STABLE);
+ default:
+ const result = await chromedriver.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMEHEADLESSSHELL: {
+ switch (tag) {
+ case BrowserTag.LATEST:
+ case BrowserTag.CANARY:
+ return await chromeHeadlessShell.resolveBuildId(
+ ChromeReleaseChannel.CANARY
+ );
+ case BrowserTag.BETA:
+ return await chromeHeadlessShell.resolveBuildId(
+ ChromeReleaseChannel.BETA
+ );
+ case BrowserTag.DEV:
+ return await chromeHeadlessShell.resolveBuildId(
+ ChromeReleaseChannel.DEV
+ );
+ case BrowserTag.STABLE:
+ return await chromeHeadlessShell.resolveBuildId(
+ ChromeReleaseChannel.STABLE
+ );
+ default:
+ const result = await chromeHeadlessShell.resolveBuildId(tag);
+ if (result) {
+ return result;
+ }
+ }
+ return tag;
+ }
+ case Browser.CHROMIUM:
+ switch (tag as BrowserTag) {
+ case BrowserTag.LATEST:
+ return await chromium.resolveBuildId(platform);
+ case BrowserTag.BETA:
+ case BrowserTag.CANARY:
+ case BrowserTag.DEV:
+ case BrowserTag.STABLE:
+ throw new Error(
+ `${tag} is not supported for ${browser}. Use 'latest' instead.`
+ );
+ }
+ }
+ // We assume the tag is the buildId if it didn't match any keywords.
+ return tag;
+}
+
+/**
+ * @public
+ */
+export async function createProfile(
+ browser: Browser,
+ opts: ProfileOptions
+): Promise {
+ switch (browser) {
+ case Browser.FIREFOX:
+ return await firefox.createProfile(opts);
+ case Browser.CHROME:
+ case Browser.CHROMIUM:
+ throw new Error(`Profile creation is not support for ${browser} yet`);
+ }
+}
+
+/**
+ * @public
+ */
+export function resolveSystemExecutablePath(
+ browser: Browser,
+ platform: BrowserPlatform,
+ channel: ChromeReleaseChannel
+): string {
+ switch (browser) {
+ case Browser.CHROMEDRIVER:
+ case Browser.CHROMEHEADLESSSHELL:
+ case Browser.FIREFOX:
+ case Browser.CHROMIUM:
+ throw new Error(
+ `System browser detection is not supported for ${browser} yet.`
+ );
+ case Browser.CHROME:
+ return chrome.resolveSystemExecutablePath(platform, channel);
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome-headless-shell.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome-headless-shell.ts
new file mode 100644
index 00000000..b1c6178d
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome-headless-shell.ts
@@ -0,0 +1,69 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+
+import {BrowserPlatform} from './types.js';
+
+function folder(platform: BrowserPlatform): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+
+export function resolveDownloadUrl(
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing'
+): string {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+
+export function resolveDownloadPath(
+ platform: BrowserPlatform,
+ buildId: string
+): string[] {
+ return [
+ buildId,
+ folder(platform),
+ `chrome-headless-shell-${folder(platform)}.zip`,
+ ];
+}
+
+export function relativeExecutablePath(
+ platform: BrowserPlatform,
+ _buildId: string
+): string {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join(
+ 'chrome-headless-shell-' + folder(platform),
+ 'chrome-headless-shell'
+ );
+ case BrowserPlatform.LINUX:
+ return path.join(
+ 'chrome-headless-shell-linux64',
+ 'chrome-headless-shell'
+ );
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join(
+ 'chrome-headless-shell-' + folder(platform),
+ 'chrome-headless-shell.exe'
+ );
+ }
+}
+
+export {resolveBuildId} from './chrome.js';
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome.ts
new file mode 100644
index 00000000..c6329255
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chrome.ts
@@ -0,0 +1,195 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import path from 'path';
+
+import {getJSON} from '../httpUtil.js';
+
+import {BrowserPlatform, ChromeReleaseChannel} from './types.js';
+
+function folder(platform: BrowserPlatform): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+
+export function resolveDownloadUrl(
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing'
+): string {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+
+export function resolveDownloadPath(
+ platform: BrowserPlatform,
+ buildId: string
+): string[] {
+ return [buildId, folder(platform), `chrome-${folder(platform)}.zip`];
+}
+
+export function relativeExecutablePath(
+ platform: BrowserPlatform,
+ _buildId: string
+): string {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join(
+ 'chrome-' + folder(platform),
+ 'Google Chrome for Testing.app',
+ 'Contents',
+ 'MacOS',
+ 'Google Chrome for Testing'
+ );
+ case BrowserPlatform.LINUX:
+ return path.join('chrome-linux64', 'chrome');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chrome-' + folder(platform), 'chrome.exe');
+ }
+}
+
+export async function getLastKnownGoodReleaseForChannel(
+ channel: ChromeReleaseChannel
+): Promise<{version: string; revision: string}> {
+ const data = (await getJSON(
+ new URL(
+ 'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json'
+ )
+ )) as {
+ channels: Record;
+ };
+
+ for (const channel of Object.keys(data.channels)) {
+ data.channels[channel.toLowerCase()] = data.channels[channel]!;
+ delete data.channels[channel];
+ }
+
+ return (
+ data as {
+ channels: {
+ [channel in ChromeReleaseChannel]: {version: string; revision: string};
+ };
+ }
+ ).channels[channel];
+}
+
+export async function getLastKnownGoodReleaseForMilestone(
+ milestone: string
+): Promise<{version: string; revision: string} | undefined> {
+ const data = (await getJSON(
+ new URL(
+ 'https://googlechromelabs.github.io/chrome-for-testing/latest-versions-per-milestone.json'
+ )
+ )) as {
+ milestones: Record;
+ };
+ return data.milestones[milestone] as
+ | {version: string; revision: string}
+ | undefined;
+}
+
+export async function getLastKnownGoodReleaseForBuild(
+ /**
+ * @example `112.0.23`,
+ */
+ buildPrefix: string
+): Promise<{version: string; revision: string} | undefined> {
+ const data = (await getJSON(
+ new URL(
+ 'https://googlechromelabs.github.io/chrome-for-testing/latest-patch-versions-per-build.json'
+ )
+ )) as {
+ builds: Record;
+ };
+ return data.builds[buildPrefix] as
+ | {version: string; revision: string}
+ | undefined;
+}
+
+export async function resolveBuildId(
+ channel: ChromeReleaseChannel
+): Promise;
+export async function resolveBuildId(
+ channel: string
+): Promise;
+export async function resolveBuildId(
+ channel: ChromeReleaseChannel | string
+): Promise {
+ if (
+ Object.values(ChromeReleaseChannel).includes(
+ channel as ChromeReleaseChannel
+ )
+ ) {
+ return (
+ await getLastKnownGoodReleaseForChannel(channel as ChromeReleaseChannel)
+ ).version;
+ }
+ if (channel.match(/^\d+$/)) {
+ // Potentially a milestone.
+ return (await getLastKnownGoodReleaseForMilestone(channel))?.version;
+ }
+ if (channel.match(/^\d+\.\d+\.\d+$/)) {
+ // Potentially a build prefix without the patch version.
+ return (await getLastKnownGoodReleaseForBuild(channel))?.version;
+ }
+ return;
+}
+
+export function resolveSystemExecutablePath(
+ platform: BrowserPlatform,
+ channel: ChromeReleaseChannel
+): string {
+ switch (platform) {
+ case BrowserPlatform.WIN64:
+ case BrowserPlatform.WIN32:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.BETA:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Beta\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.CANARY:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome SxS\\Application\\chrome.exe`;
+ case ChromeReleaseChannel.DEV:
+ return `${process.env['PROGRAMFILES']}\\Google\\Chrome Dev\\Application\\chrome.exe`;
+ }
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome';
+ case ChromeReleaseChannel.BETA:
+ return '/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta';
+ case ChromeReleaseChannel.CANARY:
+ return '/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary';
+ case ChromeReleaseChannel.DEV:
+ return '/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev';
+ }
+ case BrowserPlatform.LINUX:
+ switch (channel) {
+ case ChromeReleaseChannel.STABLE:
+ return '/opt/google/chrome/chrome';
+ case ChromeReleaseChannel.BETA:
+ return '/opt/google/chrome-beta/chrome';
+ case ChromeReleaseChannel.DEV:
+ return '/opt/google/chrome-unstable/chrome';
+ }
+ }
+
+ throw new Error(
+ `Unable to detect browser executable path for '${channel}' on ${platform}.`
+ );
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromedriver.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromedriver.ts
new file mode 100644
index 00000000..290598d0
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromedriver.ts
@@ -0,0 +1,56 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+import path from 'path';
+
+import {BrowserPlatform} from './types.js';
+
+function folder(platform: BrowserPlatform): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'linux64';
+ case BrowserPlatform.MAC_ARM:
+ return 'mac-arm64';
+ case BrowserPlatform.MAC:
+ return 'mac-x64';
+ case BrowserPlatform.WIN32:
+ return 'win32';
+ case BrowserPlatform.WIN64:
+ return 'win64';
+ }
+}
+
+export function resolveDownloadUrl(
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl = 'https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing'
+): string {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+
+export function resolveDownloadPath(
+ platform: BrowserPlatform,
+ buildId: string
+): string[] {
+ return [buildId, folder(platform), `chromedriver-${folder(platform)}.zip`];
+}
+
+export function relativeExecutablePath(
+ platform: BrowserPlatform,
+ _buildId: string
+): string {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join('chromedriver-' + folder(platform), 'chromedriver');
+ case BrowserPlatform.LINUX:
+ return path.join('chromedriver-linux64', 'chromedriver');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chromedriver-' + folder(platform), 'chromedriver.exe');
+ }
+}
+
+export {resolveBuildId} from './chrome.js';
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromium.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromium.ts
new file mode 100644
index 00000000..09cfc987
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/chromium.ts
@@ -0,0 +1,88 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import path from 'path';
+
+import {getText} from '../httpUtil.js';
+
+import {BrowserPlatform} from './types.js';
+
+function archive(platform: BrowserPlatform, buildId: string): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'chrome-linux';
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return 'chrome-mac';
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ // Windows archive name changed at r591479.
+ return parseInt(buildId, 10) > 591479 ? 'chrome-win' : 'chrome-win32';
+ }
+}
+
+function folder(platform: BrowserPlatform): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return 'Linux_x64';
+ case BrowserPlatform.MAC_ARM:
+ return 'Mac_Arm';
+ case BrowserPlatform.MAC:
+ return 'Mac';
+ case BrowserPlatform.WIN32:
+ return 'Win';
+ case BrowserPlatform.WIN64:
+ return 'Win_x64';
+ }
+}
+
+export function resolveDownloadUrl(
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl = 'https://storage.googleapis.com/chromium-browser-snapshots'
+): string {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+
+export function resolveDownloadPath(
+ platform: BrowserPlatform,
+ buildId: string
+): string[] {
+ return [folder(platform), buildId, `${archive(platform, buildId)}.zip`];
+}
+
+export function relativeExecutablePath(
+ platform: BrowserPlatform,
+ _buildId: string
+): string {
+ switch (platform) {
+ case BrowserPlatform.MAC:
+ case BrowserPlatform.MAC_ARM:
+ return path.join(
+ 'chrome-mac',
+ 'Chromium.app',
+ 'Contents',
+ 'MacOS',
+ 'Chromium'
+ );
+ case BrowserPlatform.LINUX:
+ return path.join('chrome-linux', 'chrome');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('chrome-win', 'chrome.exe');
+ }
+}
+export async function resolveBuildId(
+ platform: BrowserPlatform
+): Promise {
+ return await getText(
+ new URL(
+ `https://storage.googleapis.com/chromium-browser-snapshots/${folder(
+ platform
+ )}/LAST_CHANGE`
+ )
+ );
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/firefox.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/firefox.ts
new file mode 100644
index 00000000..ccc30fa1
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/firefox.ts
@@ -0,0 +1,330 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import fs from 'fs';
+import path from 'path';
+
+import {getJSON} from '../httpUtil.js';
+
+import {BrowserPlatform, type ProfileOptions} from './types.js';
+
+function archive(platform: BrowserPlatform, buildId: string): string {
+ switch (platform) {
+ case BrowserPlatform.LINUX:
+ return `firefox-${buildId}.en-US.${platform}-x86_64.tar.bz2`;
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return `firefox-${buildId}.en-US.mac.dmg`;
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return `firefox-${buildId}.en-US.${platform}.zip`;
+ }
+}
+
+export function resolveDownloadUrl(
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl = 'https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central'
+): string {
+ return `${baseUrl}/${resolveDownloadPath(platform, buildId).join('/')}`;
+}
+
+export function resolveDownloadPath(
+ platform: BrowserPlatform,
+ buildId: string
+): string[] {
+ return [archive(platform, buildId)];
+}
+
+export function relativeExecutablePath(
+ platform: BrowserPlatform,
+ _buildId: string
+): string {
+ switch (platform) {
+ case BrowserPlatform.MAC_ARM:
+ case BrowserPlatform.MAC:
+ return path.join('Firefox Nightly.app', 'Contents', 'MacOS', 'firefox');
+ case BrowserPlatform.LINUX:
+ return path.join('firefox', 'firefox');
+ case BrowserPlatform.WIN32:
+ case BrowserPlatform.WIN64:
+ return path.join('firefox', 'firefox.exe');
+ }
+}
+
+export async function resolveBuildId(
+ channel: 'FIREFOX_NIGHTLY' = 'FIREFOX_NIGHTLY'
+): Promise {
+ const versions = (await getJSON(
+ new URL('https://product-details.mozilla.org/1.0/firefox_versions.json')
+ )) as Record;
+ const version = versions[channel];
+ if (!version) {
+ throw new Error(`Channel ${channel} is not found.`);
+ }
+ return version;
+}
+
+export async function createProfile(options: ProfileOptions): Promise {
+ if (!fs.existsSync(options.path)) {
+ await fs.promises.mkdir(options.path, {
+ recursive: true,
+ });
+ }
+ await writePreferences({
+ preferences: {
+ ...defaultProfilePreferences(options.preferences),
+ ...options.preferences,
+ },
+ path: options.path,
+ });
+}
+
+function defaultProfilePreferences(
+ extraPrefs: Record
+): Record {
+ const server = 'dummy.test';
+
+ const defaultPrefs = {
+ // Make sure Shield doesn't hit the network.
+ 'app.normandy.api_url': '',
+ // Disable Firefox old build background check
+ 'app.update.checkInstallTime': false,
+ // Disable automatically upgrading Firefox
+ 'app.update.disabledForTesting': true,
+
+ // Increase the APZ content response timeout to 1 minute
+ 'apz.content_response_timeout': 60000,
+
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'browser.contentblocking.features.standard':
+ '-tp,tpPrivate,cookieBehavior0,-cm,-fp',
+
+ // Enable the dump function: which sends messages to the system
+ // console
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1543115
+ 'browser.dom.window.dump.enabled': true,
+ // Disable topstories
+ 'browser.newtabpage.activity-stream.feeds.system.topstories': false,
+ // Always display a blank page
+ 'browser.newtabpage.enabled': false,
+ // Background thumbnails in particular cause grief: and disabling
+ // thumbnails in general cannot hurt
+ 'browser.pagethumbnails.capturing_disabled': true,
+
+ // Disable safebrowsing components.
+ 'browser.safebrowsing.blockedURIs.enabled': false,
+ 'browser.safebrowsing.downloads.enabled': false,
+ 'browser.safebrowsing.malware.enabled': false,
+ 'browser.safebrowsing.phishing.enabled': false,
+
+ // Disable updates to search engines.
+ 'browser.search.update': false,
+ // Do not restore the last open set of tabs if the browser has crashed
+ 'browser.sessionstore.resume_from_crash': false,
+ // Skip check for default browser on startup
+ 'browser.shell.checkDefaultBrowser': false,
+
+ // Disable newtabpage
+ 'browser.startup.homepage': 'about:blank',
+ // Do not redirect user when a milstone upgrade of Firefox is detected
+ 'browser.startup.homepage_override.mstone': 'ignore',
+ // Start with a blank page about:blank
+ 'browser.startup.page': 0,
+
+ // Do not allow background tabs to be zombified on Android: otherwise for
+ // tests that open additional tabs: the test harness tab itself might get
+ // unloaded
+ 'browser.tabs.disableBackgroundZombification': false,
+ // Do not warn when closing all other open tabs
+ 'browser.tabs.warnOnCloseOtherTabs': false,
+ // Do not warn when multiple tabs will be opened
+ 'browser.tabs.warnOnOpen': false,
+
+ // Do not automatically offer translations, as tests do not expect this.
+ 'browser.translations.automaticallyPopup': false,
+
+ // Disable the UI tour.
+ 'browser.uitour.enabled': false,
+ // Turn off search suggestions in the location bar so as not to trigger
+ // network connections.
+ 'browser.urlbar.suggest.searches': false,
+ // Disable first run splash page on Windows 10
+ 'browser.usedOnWindows10.introURL': '',
+ // Do not warn on quitting Firefox
+ 'browser.warnOnQuit': false,
+
+ // Defensively disable data reporting systems
+ 'datareporting.healthreport.documentServerURI': `http://${server}/dummy/healthreport/`,
+ 'datareporting.healthreport.logging.consoleEnabled': false,
+ 'datareporting.healthreport.service.enabled': false,
+ 'datareporting.healthreport.service.firstRun': false,
+ 'datareporting.healthreport.uploadEnabled': false,
+
+ // Do not show datareporting policy notifications which can interfere with tests
+ 'datareporting.policy.dataSubmissionEnabled': false,
+ 'datareporting.policy.dataSubmissionPolicyBypassNotification': true,
+
+ // DevTools JSONViewer sometimes fails to load dependencies with its require.js.
+ // This doesn't affect Puppeteer but spams console (Bug 1424372)
+ 'devtools.jsonview.enabled': false,
+
+ // Disable popup-blocker
+ 'dom.disable_open_during_load': false,
+
+ // Enable the support for File object creation in the content process
+ // Required for |Page.setFileInputFiles| protocol method.
+ 'dom.file.createInChild': true,
+
+ // Disable the ProcessHangMonitor
+ 'dom.ipc.reportProcessHangs': false,
+
+ // Disable slow script dialogues
+ 'dom.max_chrome_script_run_time': 0,
+ 'dom.max_script_run_time': 0,
+
+ // Only load extensions from the application and user profile
+ // AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_APPLICATION
+ 'extensions.autoDisableScopes': 0,
+ 'extensions.enabledScopes': 5,
+
+ // Disable metadata caching for installed add-ons by default
+ 'extensions.getAddons.cache.enabled': false,
+
+ // Disable installing any distribution extensions or add-ons.
+ 'extensions.installDistroAddons': false,
+
+ // Disabled screenshots extension
+ 'extensions.screenshots.disabled': true,
+
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.enabled': false,
+
+ // Turn off extension updates so they do not bother tests
+ 'extensions.update.notifyUser': false,
+
+ // Make sure opening about:addons will not hit the network
+ 'extensions.webservice.discoverURL': `http://${server}/dummy/discoveryURL`,
+
+ // Allow the application to have focus even it runs in the background
+ 'focusmanager.testmode': true,
+
+ // Disable useragent updates
+ 'general.useragent.updates.enabled': false,
+
+ // Always use network provider for geolocation tests so we bypass the
+ // macOS dialog raised by the corelocation provider
+ 'geo.provider.testing': true,
+
+ // Do not scan Wifi
+ 'geo.wifi.scan': false,
+
+ // No hang monitor
+ 'hangmonitor.timeout': 0,
+
+ // Show chrome errors and warnings in the error console
+ 'javascript.options.showInConsole': true,
+
+ // Disable download and usage of OpenH264: and Widevine plugins
+ 'media.gmp-manager.updateEnabled': false,
+
+ // Disable the GFX sanity window
+ 'media.sanity-test.disabled': true,
+
+ // Prevent various error message on the console
+ // jest-puppeteer asserts that no error message is emitted by the console
+ 'network.cookie.cookieBehavior': 0,
+
+ // Disable experimental feature that is only available in Nightly
+ 'network.cookie.sameSite.laxByDefault': false,
+
+ // Do not prompt for temporary redirects
+ 'network.http.prompt-temp-redirect': false,
+
+ // Disable speculative connections so they are not reported as leaking
+ // when they are hanging around
+ 'network.http.speculative-parallel-limit': 0,
+
+ // Do not automatically switch between offline and online
+ 'network.manage-offline-status': false,
+
+ // Make sure SNTP requests do not hit the network
+ 'network.sntp.pools': server,
+
+ // Disable Flash.
+ 'plugin.state.flash': 0,
+
+ 'privacy.trackingprotection.enabled': false,
+
+ // Can be removed once Firefox 89 is no longer supported
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1710839
+ 'remote.enabled': true,
+
+ // Don't do network connections for mitm priming
+ 'security.certerrors.mitm.priming.enabled': false,
+
+ // Local documents have access to all other local documents,
+ // including directory listings
+ 'security.fileuri.strict_origin_policy': false,
+
+ // Do not wait for the notification button security delay
+ 'security.notification_enable_delay': 0,
+
+ // Ensure blocklist updates do not hit the network
+ 'services.settings.server': `http://${server}/dummy/blocklist/`,
+
+ // Do not automatically fill sign-in forms with known usernames and
+ // passwords
+ 'signon.autofillForms': false,
+
+ // Disable password capture, so that tests that include forms are not
+ // influenced by the presence of the persistent doorhanger notification
+ 'signon.rememberSignons': false,
+
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url': 'about:blank',
+
+ // Disable first-run welcome page
+ 'startup.homepage_welcome_url.additional': '',
+
+ // Disable browser animations (tabs, fullscreen, sliding alerts)
+ 'toolkit.cosmeticAnimations.enabled': false,
+
+ // Prevent starting into safe mode after application crashes
+ 'toolkit.startup.max_resumed_crashes': -1,
+ };
+
+ return Object.assign(defaultPrefs, extraPrefs);
+}
+
+/**
+ * Populates the user.js file with custom preferences as needed to allow
+ * Firefox's CDP support to properly function. These preferences will be
+ * automatically copied over to prefs.js during startup of Firefox. To be
+ * able to restore the original values of preferences a backup of prefs.js
+ * will be created.
+ *
+ * @param prefs - List of preferences to add.
+ * @param profilePath - Firefox profile to write the preferences to.
+ */
+async function writePreferences(options: ProfileOptions): Promise {
+ const lines = Object.entries(options.preferences).map(([key, value]) => {
+ return `user_pref(${JSON.stringify(key)}, ${JSON.stringify(value)});`;
+ });
+
+ await fs.promises.writeFile(
+ path.join(options.path, 'user.js'),
+ lines.join('\n')
+ );
+
+ // Create a backup of the preferences file if it already exitsts.
+ const prefsPath = path.join(options.path, 'prefs.js');
+ if (fs.existsSync(prefsPath)) {
+ const prefsBackupPath = path.join(options.path, 'prefs.js.puppeteer');
+ await fs.promises.copyFile(prefsPath, prefsBackupPath);
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/browser-data/types.ts b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/types.ts
new file mode 100644
index 00000000..ac72661a
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/browser-data/types.ts
@@ -0,0 +1,61 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+/**
+ * Supported browsers.
+ *
+ * @public
+ */
+export enum Browser {
+ CHROME = 'chrome',
+ CHROMEHEADLESSSHELL = 'chrome-headless-shell',
+ CHROMIUM = 'chromium',
+ FIREFOX = 'firefox',
+ CHROMEDRIVER = 'chromedriver',
+}
+
+/**
+ * Platform names used to identify a OS platform x architecture combination in the way
+ * that is relevant for the browser download.
+ *
+ * @public
+ */
+export enum BrowserPlatform {
+ LINUX = 'linux',
+ MAC = 'mac',
+ MAC_ARM = 'mac_arm',
+ WIN32 = 'win32',
+ WIN64 = 'win64',
+}
+
+/**
+ * @public
+ */
+export enum BrowserTag {
+ CANARY = 'canary',
+ BETA = 'beta',
+ DEV = 'dev',
+ STABLE = 'stable',
+ LATEST = 'latest',
+}
+
+/**
+ * @public
+ */
+export interface ProfileOptions {
+ preferences: Record;
+ path: string;
+}
+
+/**
+ * @public
+ */
+export enum ChromeReleaseChannel {
+ STABLE = 'stable',
+ DEV = 'dev',
+ CANARY = 'canary',
+ BETA = 'beta',
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/debug.ts b/Scripts/node_modules/@puppeteer/browsers/src/debug.ts
new file mode 100644
index 00000000..491097f4
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/debug.ts
@@ -0,0 +1,9 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import debug from 'debug';
+
+export {debug};
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/detectPlatform.ts b/Scripts/node_modules/@puppeteer/browsers/src/detectPlatform.ts
new file mode 100644
index 00000000..df644c38
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/detectPlatform.ts
@@ -0,0 +1,51 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import os from 'os';
+
+import {BrowserPlatform} from './browser-data/browser-data.js';
+
+/**
+ * @public
+ */
+export function detectBrowserPlatform(): BrowserPlatform | undefined {
+ const platform = os.platform();
+ switch (platform) {
+ case 'darwin':
+ return os.arch() === 'arm64'
+ ? BrowserPlatform.MAC_ARM
+ : BrowserPlatform.MAC;
+ case 'linux':
+ return BrowserPlatform.LINUX;
+ case 'win32':
+ return os.arch() === 'x64' ||
+ // Windows 11 for ARM supports x64 emulation
+ (os.arch() === 'arm64' && isWindows11(os.release()))
+ ? BrowserPlatform.WIN64
+ : BrowserPlatform.WIN32;
+ default:
+ return undefined;
+ }
+}
+
+/**
+ * Windows 11 is identified by the version 10.0.22000 or greater
+ * @internal
+ */
+function isWindows11(version: string): boolean {
+ const parts = version.split('.');
+ if (parts.length > 2) {
+ const major = parseInt(parts[0] as string, 10);
+ const minor = parseInt(parts[1] as string, 10);
+ const patch = parseInt(parts[2] as string, 10);
+ return (
+ major > 10 ||
+ (major === 10 && minor > 0) ||
+ (major === 10 && minor === 0 && patch >= 22000)
+ );
+ }
+ return false;
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/fileUtil.ts b/Scripts/node_modules/@puppeteer/browsers/src/fileUtil.ts
new file mode 100644
index 00000000..50a68978
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/fileUtil.ts
@@ -0,0 +1,79 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {exec as execChildProcess} from 'child_process';
+import {createReadStream} from 'fs';
+import {mkdir, readdir} from 'fs/promises';
+import * as path from 'path';
+import {promisify} from 'util';
+
+import extractZip from 'extract-zip';
+import tar from 'tar-fs';
+import bzip from 'unbzip2-stream';
+
+const exec = promisify(execChildProcess);
+
+/**
+ * @internal
+ */
+export async function unpackArchive(
+ archivePath: string,
+ folderPath: string
+): Promise {
+ if (archivePath.endsWith('.zip')) {
+ await extractZip(archivePath, {dir: folderPath});
+ } else if (archivePath.endsWith('.tar.bz2')) {
+ await extractTar(archivePath, folderPath);
+ } else if (archivePath.endsWith('.dmg')) {
+ await mkdir(folderPath);
+ await installDMG(archivePath, folderPath);
+ } else {
+ throw new Error(`Unsupported archive format: ${archivePath}`);
+ }
+}
+
+/**
+ * @internal
+ */
+function extractTar(tarPath: string, folderPath: string): Promise {
+ return new Promise((fulfill, reject) => {
+ const tarStream = tar.extract(folderPath);
+ tarStream.on('error', reject);
+ tarStream.on('finish', fulfill);
+ const readStream = createReadStream(tarPath);
+ readStream.pipe(bzip()).pipe(tarStream);
+ });
+}
+
+/**
+ * @internal
+ */
+async function installDMG(dmgPath: string, folderPath: string): Promise {
+ const {stdout} = await exec(
+ `hdiutil attach -nobrowse -noautoopen "${dmgPath}"`
+ );
+
+ const volumes = stdout.match(/\/Volumes\/(.*)/m);
+ if (!volumes) {
+ throw new Error(`Could not find volume path in ${stdout}`);
+ }
+ const mountPath = volumes[0]!;
+
+ try {
+ const fileNames = await readdir(mountPath);
+ const appName = fileNames.find(item => {
+ return typeof item === 'string' && item.endsWith('.app');
+ });
+ if (!appName) {
+ throw new Error(`Cannot find app in ${mountPath}`);
+ }
+ const mountedPath = path.join(mountPath!, appName);
+
+ await exec(`cp -R "${mountedPath}" "${folderPath}"`);
+ } finally {
+ await exec(`hdiutil detach "${mountPath}" -quiet`);
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/httpUtil.ts b/Scripts/node_modules/@puppeteer/browsers/src/httpUtil.ts
new file mode 100644
index 00000000..96f7fc9f
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/httpUtil.ts
@@ -0,0 +1,151 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {createWriteStream} from 'fs';
+import * as http from 'http';
+import * as https from 'https';
+import {URL, urlToHttpOptions} from 'url';
+
+import {ProxyAgent} from 'proxy-agent';
+
+export function headHttpRequest(url: URL): Promise {
+ return new Promise(resolve => {
+ const request = httpRequest(
+ url,
+ 'HEAD',
+ response => {
+ // consume response data free node process
+ response.resume();
+ resolve(response.statusCode === 200);
+ },
+ false
+ );
+ request.on('error', () => {
+ resolve(false);
+ });
+ });
+}
+
+export function httpRequest(
+ url: URL,
+ method: string,
+ response: (x: http.IncomingMessage) => void,
+ keepAlive = true
+): http.ClientRequest {
+ const options: http.RequestOptions = {
+ protocol: url.protocol,
+ hostname: url.hostname,
+ port: url.port,
+ path: url.pathname + url.search,
+ method,
+ headers: keepAlive ? {Connection: 'keep-alive'} : undefined,
+ auth: urlToHttpOptions(url).auth,
+ agent: new ProxyAgent(),
+ };
+
+ const requestCallback = (res: http.IncomingMessage): void => {
+ if (
+ res.statusCode &&
+ res.statusCode >= 300 &&
+ res.statusCode < 400 &&
+ res.headers.location
+ ) {
+ httpRequest(new URL(res.headers.location), method, response);
+ } else {
+ response(res);
+ }
+ };
+ const request =
+ options.protocol === 'https:'
+ ? https.request(options, requestCallback)
+ : http.request(options, requestCallback);
+ request.end();
+ return request;
+}
+
+/**
+ * @internal
+ */
+export function downloadFile(
+ url: URL,
+ destinationPath: string,
+ progressCallback?: (downloadedBytes: number, totalBytes: number) => void
+): Promise {
+ return new Promise((resolve, reject) => {
+ let downloadedBytes = 0;
+ let totalBytes = 0;
+
+ function onData(chunk: string): void {
+ downloadedBytes += chunk.length;
+ progressCallback!(downloadedBytes, totalBytes);
+ }
+
+ const request = httpRequest(url, 'GET', response => {
+ if (response.statusCode !== 200) {
+ const error = new Error(
+ `Download failed: server returned code ${response.statusCode}. URL: ${url}`
+ );
+ // consume response data to free up memory
+ response.resume();
+ reject(error);
+ return;
+ }
+ const file = createWriteStream(destinationPath);
+ file.on('finish', () => {
+ return resolve();
+ });
+ file.on('error', error => {
+ return reject(error);
+ });
+ response.pipe(file);
+ totalBytes = parseInt(response.headers['content-length']!, 10);
+ if (progressCallback) {
+ response.on('data', onData);
+ }
+ });
+ request.on('error', error => {
+ return reject(error);
+ });
+ });
+}
+
+export async function getJSON(url: URL): Promise {
+ const text = await getText(url);
+ try {
+ return JSON.parse(text);
+ } catch {
+ throw new Error('Could not parse JSON from ' + url.toString());
+ }
+}
+
+export function getText(url: URL): Promise {
+ return new Promise((resolve, reject) => {
+ const request = httpRequest(
+ url,
+ 'GET',
+ response => {
+ let data = '';
+ if (response.statusCode && response.statusCode >= 400) {
+ return reject(new Error(`Got status code ${response.statusCode}`));
+ }
+ response.on('data', chunk => {
+ data += chunk;
+ });
+ response.on('end', () => {
+ try {
+ return resolve(String(data));
+ } catch {
+ return reject(new Error('Chrome version not found'));
+ }
+ });
+ },
+ false
+ );
+ request.on('error', err => {
+ reject(err);
+ });
+ });
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/install.ts b/Scripts/node_modules/@puppeteer/browsers/src/install.ts
new file mode 100644
index 00000000..375c75ba
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/install.ts
@@ -0,0 +1,271 @@
+/**
+ * @license
+ * Copyright 2017 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import assert from 'assert';
+import {existsSync} from 'fs';
+import {mkdir, unlink} from 'fs/promises';
+import os from 'os';
+import path from 'path';
+
+import {
+ type Browser,
+ type BrowserPlatform,
+ downloadUrls,
+} from './browser-data/browser-data.js';
+import {Cache, InstalledBrowser} from './Cache.js';
+import {debug} from './debug.js';
+import {detectBrowserPlatform} from './detectPlatform.js';
+import {unpackArchive} from './fileUtil.js';
+import {downloadFile, headHttpRequest} from './httpUtil.js';
+
+const debugInstall = debug('puppeteer:browsers:install');
+
+const times = new Map();
+function debugTime(label: string) {
+ times.set(label, process.hrtime());
+}
+
+function debugTimeEnd(label: string) {
+ const end = process.hrtime();
+ const start = times.get(label);
+ if (!start) {
+ return;
+ }
+ const duration =
+ end[0] * 1000 + end[1] / 1e6 - (start[0] * 1000 + start[1] / 1e6); // calculate duration in milliseconds
+ debugInstall(`Duration for ${label}: ${duration}ms`);
+}
+
+/**
+ * @public
+ */
+export interface InstallOptions {
+ /**
+ * Determines the path to download browsers to.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to install.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+ /**
+ * Provides information about the progress of the download.
+ */
+ downloadProgressCallback?: (
+ downloadedBytes: number,
+ totalBytes: number
+ ) => void;
+ /**
+ * Determines the host that will be used for downloading.
+ *
+ * @defaultValue Either
+ *
+ * - https://edgedl.me.gvt1.com/edgedl/chrome/chrome-for-testing or
+ * - https://archive.mozilla.org/pub/firefox/nightly/latest-mozilla-central
+ *
+ */
+ baseUrl?: string;
+ /**
+ * Whether to unpack and install browser archives.
+ *
+ * @defaultValue `true`
+ */
+ unpack?: boolean;
+}
+
+/**
+ * @public
+ */
+export function install(
+ options: InstallOptions & {unpack?: true}
+): Promise;
+/**
+ * @public
+ */
+export function install(
+ options: InstallOptions & {unpack: false}
+): Promise;
+export async function install(
+ options: InstallOptions
+): Promise {
+ options.platform ??= detectBrowserPlatform();
+ options.unpack ??= true;
+ if (!options.platform) {
+ throw new Error(
+ `Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`
+ );
+ }
+ const url = getDownloadUrl(
+ options.browser,
+ options.platform,
+ options.buildId,
+ options.baseUrl
+ );
+ const fileName = url.toString().split('/').pop();
+ assert(fileName, `A malformed download URL was found: ${url}.`);
+ const cache = new Cache(options.cacheDir);
+ const browserRoot = cache.browserRoot(options.browser);
+ const archivePath = path.join(browserRoot, `${options.buildId}-${fileName}`);
+ if (!existsSync(browserRoot)) {
+ await mkdir(browserRoot, {recursive: true});
+ }
+
+ if (!options.unpack) {
+ if (existsSync(archivePath)) {
+ return archivePath;
+ }
+ debugInstall(`Downloading binary from ${url}`);
+ debugTime('download');
+ await downloadFile(url, archivePath, options.downloadProgressCallback);
+ debugTimeEnd('download');
+ return archivePath;
+ }
+
+ const outputPath = cache.installationDir(
+ options.browser,
+ options.platform,
+ options.buildId
+ );
+ if (existsSync(outputPath)) {
+ return new InstalledBrowser(
+ cache,
+ options.browser,
+ options.buildId,
+ options.platform
+ );
+ }
+ try {
+ debugInstall(`Downloading binary from ${url}`);
+ try {
+ debugTime('download');
+ await downloadFile(url, archivePath, options.downloadProgressCallback);
+ } finally {
+ debugTimeEnd('download');
+ }
+
+ debugInstall(`Installing ${archivePath} to ${outputPath}`);
+ try {
+ debugTime('extract');
+ await unpackArchive(archivePath, outputPath);
+ } finally {
+ debugTimeEnd('extract');
+ }
+ } finally {
+ if (existsSync(archivePath)) {
+ await unlink(archivePath);
+ }
+ }
+ return new InstalledBrowser(
+ cache,
+ options.browser,
+ options.buildId,
+ options.platform
+ );
+}
+
+/**
+ * @public
+ */
+export interface UninstallOptions {
+ /**
+ * Determines the platform for the browser binary.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which browser to uninstall.
+ */
+ browser: Browser;
+ /**
+ * The browser build to uninstall
+ */
+ buildId: string;
+}
+
+/**
+ *
+ * @public
+ */
+export async function uninstall(options: UninstallOptions): Promise {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(
+ `Cannot detect the browser platform for: ${os.platform()} (${os.arch()})`
+ );
+ }
+
+ new Cache(options.cacheDir).uninstall(
+ options.browser,
+ options.platform,
+ options.buildId
+ );
+}
+
+/**
+ * @public
+ */
+export interface GetInstalledBrowsersOptions {
+ /**
+ * The path to the root of the cache directory.
+ */
+ cacheDir: string;
+}
+
+/**
+ * Returns metadata about browsers installed in the cache directory.
+ *
+ * @public
+ */
+export async function getInstalledBrowsers(
+ options: GetInstalledBrowsersOptions
+): Promise {
+ return new Cache(options.cacheDir).getInstalledBrowsers();
+}
+
+/**
+ * @public
+ */
+export async function canDownload(options: InstallOptions): Promise {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(
+ `Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`
+ );
+ }
+ return await headHttpRequest(
+ getDownloadUrl(
+ options.browser,
+ options.platform,
+ options.buildId,
+ options.baseUrl
+ )
+ );
+}
+
+function getDownloadUrl(
+ browser: Browser,
+ platform: BrowserPlatform,
+ buildId: string,
+ baseUrl?: string
+): URL {
+ return new URL(downloadUrls[browser](platform, buildId, baseUrl));
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/launch.ts b/Scripts/node_modules/@puppeteer/browsers/src/launch.ts
new file mode 100644
index 00000000..dfb0fbf6
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/launch.ts
@@ -0,0 +1,479 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import childProcess from 'child_process';
+import {accessSync} from 'fs';
+import os from 'os';
+import readline from 'readline';
+
+import {
+ type Browser,
+ type BrowserPlatform,
+ resolveSystemExecutablePath,
+ type ChromeReleaseChannel,
+} from './browser-data/browser-data.js';
+import {Cache} from './Cache.js';
+import {debug} from './debug.js';
+import {detectBrowserPlatform} from './detectPlatform.js';
+
+const debugLaunch = debug('puppeteer:browsers:launcher');
+
+/**
+ * @public
+ */
+export interface ComputeExecutablePathOptions {
+ /**
+ * Root path to the storage directory.
+ */
+ cacheDir: string;
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Determines which buildId to download. BuildId should uniquely identify
+ * binaries and they are used for caching.
+ */
+ buildId: string;
+}
+
+/**
+ * @public
+ */
+export function computeExecutablePath(
+ options: ComputeExecutablePathOptions
+): string {
+ return new Cache(options.cacheDir).computeExecutablePath(options);
+}
+
+/**
+ * @public
+ */
+export interface SystemOptions {
+ /**
+ * Determines which platform the browser will be suited for.
+ *
+ * @defaultValue **Auto-detected.**
+ */
+ platform?: BrowserPlatform;
+ /**
+ * Determines which browser to launch.
+ */
+ browser: Browser;
+ /**
+ * Release channel to look for on the system.
+ */
+ channel: ChromeReleaseChannel;
+}
+
+/**
+ * @public
+ */
+export function computeSystemExecutablePath(options: SystemOptions): string {
+ options.platform ??= detectBrowserPlatform();
+ if (!options.platform) {
+ throw new Error(
+ `Cannot download a binary for the provided platform: ${os.platform()} (${os.arch()})`
+ );
+ }
+ const path = resolveSystemExecutablePath(
+ options.browser,
+ options.platform,
+ options.channel
+ );
+ try {
+ accessSync(path);
+ } catch (error) {
+ throw new Error(
+ `Could not find Google Chrome executable for channel '${options.channel}' at '${path}'.`
+ );
+ }
+ return path;
+}
+
+/**
+ * @public
+ */
+export interface LaunchOptions {
+ executablePath: string;
+ pipe?: boolean;
+ dumpio?: boolean;
+ args?: string[];
+ env?: Record;
+ handleSIGINT?: boolean;
+ handleSIGTERM?: boolean;
+ handleSIGHUP?: boolean;
+ detached?: boolean;
+ onExit?: () => Promise;
+}
+
+/**
+ * @public
+ */
+export function launch(opts: LaunchOptions): Process {
+ return new Process(opts);
+}
+
+/**
+ * @public
+ */
+export const CDP_WEBSOCKET_ENDPOINT_REGEX =
+ /^DevTools listening on (ws:\/\/.*)$/;
+
+/**
+ * @public
+ */
+export const WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX =
+ /^WebDriver BiDi listening on (ws:\/\/.*)$/;
+
+/**
+ * @public
+ */
+export class Process {
+ #executablePath;
+ #args: string[];
+ #browserProcess: childProcess.ChildProcess;
+ #exited = false;
+ // The browser process can be closed externally or from the driver process. We
+ // need to invoke the hooks only once though but we don't know how many times
+ // we will be invoked.
+ #hooksRan = false;
+ #onExitHook = async () => {};
+ #browserProcessExiting: Promise;
+
+ constructor(opts: LaunchOptions) {
+ this.#executablePath = opts.executablePath;
+ this.#args = opts.args ?? [];
+
+ opts.pipe ??= false;
+ opts.dumpio ??= false;
+ opts.handleSIGINT ??= true;
+ opts.handleSIGTERM ??= true;
+ opts.handleSIGHUP ??= true;
+ // On non-windows platforms, `detached: true` makes child process a
+ // leader of a new process group, making it possible to kill child
+ // process tree with `.kill(-pid)` command. @see
+ // https://nodejs.org/api/child_process.html#child_process_options_detached
+ opts.detached ??= process.platform !== 'win32';
+
+ const stdio = this.#configureStdio({
+ pipe: opts.pipe,
+ dumpio: opts.dumpio,
+ });
+
+ const env = opts.env || {};
+
+ debugLaunch(`Launching ${this.#executablePath} ${this.#args.join(' ')}`, {
+ detached: opts.detached,
+ env: Object.keys(env).reduce>(
+ (res, key) => {
+ if (key.toLowerCase().startsWith('puppeteer_')) {
+ res[key] = env[key];
+ }
+ return res;
+ },
+ {}
+ ),
+ stdio,
+ });
+
+ this.#browserProcess = childProcess.spawn(
+ this.#executablePath,
+ this.#args,
+ {
+ detached: opts.detached,
+ env,
+ stdio,
+ }
+ );
+
+ debugLaunch(`Launched ${this.#browserProcess.pid}`);
+ if (opts.dumpio) {
+ this.#browserProcess.stderr?.pipe(process.stderr);
+ this.#browserProcess.stdout?.pipe(process.stdout);
+ }
+ process.on('exit', this.#onDriverProcessExit);
+ if (opts.handleSIGINT) {
+ process.on('SIGINT', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGTERM) {
+ process.on('SIGTERM', this.#onDriverProcessSignal);
+ }
+ if (opts.handleSIGHUP) {
+ process.on('SIGHUP', this.#onDriverProcessSignal);
+ }
+ if (opts.onExit) {
+ this.#onExitHook = opts.onExit;
+ }
+ this.#browserProcessExiting = new Promise((resolve, reject) => {
+ this.#browserProcess.once('exit', async () => {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} onExit`);
+ this.#clearListeners();
+ this.#exited = true;
+ try {
+ await this.#runHooks();
+ } catch (err) {
+ reject(err);
+ return;
+ }
+ resolve();
+ });
+ });
+ }
+
+ async #runHooks() {
+ if (this.#hooksRan) {
+ return;
+ }
+ this.#hooksRan = true;
+ await this.#onExitHook();
+ }
+
+ get nodeProcess(): childProcess.ChildProcess {
+ return this.#browserProcess;
+ }
+
+ #configureStdio(opts: {
+ pipe: boolean;
+ dumpio: boolean;
+ }): Array<'ignore' | 'pipe'> {
+ if (opts.pipe) {
+ if (opts.dumpio) {
+ return ['ignore', 'pipe', 'pipe', 'pipe', 'pipe'];
+ } else {
+ return ['ignore', 'ignore', 'ignore', 'pipe', 'pipe'];
+ }
+ } else {
+ if (opts.dumpio) {
+ return ['pipe', 'pipe', 'pipe'];
+ } else {
+ return ['pipe', 'ignore', 'pipe'];
+ }
+ }
+ }
+
+ #clearListeners(): void {
+ process.off('exit', this.#onDriverProcessExit);
+ process.off('SIGINT', this.#onDriverProcessSignal);
+ process.off('SIGTERM', this.#onDriverProcessSignal);
+ process.off('SIGHUP', this.#onDriverProcessSignal);
+ }
+
+ #onDriverProcessExit = (_code: number) => {
+ this.kill();
+ };
+
+ #onDriverProcessSignal = (signal: string): void => {
+ switch (signal) {
+ case 'SIGINT':
+ this.kill();
+ process.exit(130);
+ case 'SIGTERM':
+ case 'SIGHUP':
+ void this.close();
+ break;
+ }
+ };
+
+ async close(): Promise {
+ await this.#runHooks();
+ if (!this.#exited) {
+ this.kill();
+ }
+ return await this.#browserProcessExiting;
+ }
+
+ hasClosed(): Promise {
+ return this.#browserProcessExiting;
+ }
+
+ kill(): void {
+ debugLaunch(`Trying to kill ${this.#browserProcess.pid}`);
+ // If the process failed to launch (for example if the browser executable path
+ // is invalid), then the process does not get a pid assigned. A call to
+ // `proc.kill` would error, as the `pid` to-be-killed can not be found.
+ if (
+ this.#browserProcess &&
+ this.#browserProcess.pid &&
+ pidExists(this.#browserProcess.pid)
+ ) {
+ try {
+ debugLaunch(`Browser process ${this.#browserProcess.pid} exists`);
+ if (process.platform === 'win32') {
+ try {
+ childProcess.execSync(
+ `taskkill /pid ${this.#browserProcess.pid} /T /F`
+ );
+ } catch (error) {
+ debugLaunch(
+ `Killing ${this.#browserProcess.pid} using taskkill failed`,
+ error
+ );
+ // taskkill can fail to kill the process e.g. due to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill();
+ }
+ } else {
+ // on linux the process group can be killed with the group id prefixed with
+ // a minus sign. The process group id is the group leader's pid.
+ const processGroupId = -this.#browserProcess.pid;
+
+ try {
+ process.kill(processGroupId, 'SIGKILL');
+ } catch (error) {
+ debugLaunch(
+ `Killing ${this.#browserProcess.pid} using process.kill failed`,
+ error
+ );
+ // Killing the process group can fail due e.g. to missing permissions.
+ // Let's kill the process via Node API. This delays killing of all child
+ // processes of `this.proc` until the main Node.js process dies.
+ this.#browserProcess.kill('SIGKILL');
+ }
+ }
+ } catch (error) {
+ throw new Error(
+ `${PROCESS_ERROR_EXPLANATION}\nError cause: ${
+ isErrorLike(error) ? error.stack : error
+ }`
+ );
+ }
+ }
+ this.#clearListeners();
+ }
+
+ waitForLineOutput(regex: RegExp, timeout = 0): Promise {
+ if (!this.#browserProcess.stderr) {
+ throw new Error('`browserProcess` does not have stderr.');
+ }
+ const rl = readline.createInterface(this.#browserProcess.stderr);
+ let stderr = '';
+
+ return new Promise((resolve, reject) => {
+ rl.on('line', onLine);
+ rl.on('close', onClose);
+ this.#browserProcess.on('exit', onClose);
+ this.#browserProcess.on('error', onClose);
+ const timeoutId =
+ timeout > 0 ? setTimeout(onTimeout, timeout) : undefined;
+
+ const cleanup = (): void => {
+ if (timeoutId) {
+ clearTimeout(timeoutId);
+ }
+ rl.off('line', onLine);
+ rl.off('close', onClose);
+ this.#browserProcess.off('exit', onClose);
+ this.#browserProcess.off('error', onClose);
+ };
+
+ function onClose(error?: Error): void {
+ cleanup();
+ reject(
+ new Error(
+ [
+ `Failed to launch the browser process!${
+ error ? ' ' + error.message : ''
+ }`,
+ stderr,
+ '',
+ 'TROUBLESHOOTING: https://pptr.dev/troubleshooting',
+ '',
+ ].join('\n')
+ )
+ );
+ }
+
+ function onTimeout(): void {
+ cleanup();
+ reject(
+ new TimeoutError(
+ `Timed out after ${timeout} ms while waiting for the WS endpoint URL to appear in stdout!`
+ )
+ );
+ }
+
+ function onLine(line: string): void {
+ stderr += line + '\n';
+ const match = line.match(regex);
+ if (!match) {
+ return;
+ }
+ cleanup();
+ // The RegExp matches, so this will obviously exist.
+ resolve(match[1]!);
+ }
+ });
+ }
+}
+
+const PROCESS_ERROR_EXPLANATION = `Puppeteer was unable to kill the process which ran the browser binary.
+This means that, on future Puppeteer launches, Puppeteer might not be able to launch the browser.
+Please check your open processes and ensure that the browser processes that Puppeteer launched have been killed.
+If you think this is a bug, please report it on the Puppeteer issue tracker.`;
+
+/**
+ * @internal
+ */
+function pidExists(pid: number): boolean {
+ try {
+ return process.kill(pid, 0);
+ } catch (error) {
+ if (isErrnoException(error)) {
+ if (error.code && error.code === 'ESRCH') {
+ return false;
+ }
+ }
+ throw error;
+ }
+}
+
+/**
+ * @internal
+ */
+export interface ErrorLike extends Error {
+ name: string;
+ message: string;
+}
+
+/**
+ * @internal
+ */
+export function isErrorLike(obj: unknown): obj is ErrorLike {
+ return (
+ typeof obj === 'object' && obj !== null && 'name' in obj && 'message' in obj
+ );
+}
+/**
+ * @internal
+ */
+export function isErrnoException(obj: unknown): obj is NodeJS.ErrnoException {
+ return (
+ isErrorLike(obj) &&
+ ('errno' in obj || 'code' in obj || 'path' in obj || 'syscall' in obj)
+ );
+}
+
+/**
+ * @public
+ */
+export class TimeoutError extends Error {
+ /**
+ * @internal
+ */
+ constructor(message?: string) {
+ super(message);
+ this.name = this.constructor.name;
+ Error.captureStackTrace(this, this.constructor);
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/main-cli.ts b/Scripts/node_modules/@puppeteer/browsers/src/main-cli.ts
new file mode 100644
index 00000000..9919a4df
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/main-cli.ts
@@ -0,0 +1,11 @@
+#!/usr/bin/env node
+
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import {CLI} from './CLI.js';
+
+void new CLI().run(process.argv);
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/main.ts b/Scripts/node_modules/@puppeteer/browsers/src/main.ts
new file mode 100644
index 00000000..df93de53
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/main.ts
@@ -0,0 +1,42 @@
+/**
+ * @license
+ * Copyright 2023 Google Inc.
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+export type {
+ LaunchOptions,
+ ComputeExecutablePathOptions as Options,
+ SystemOptions,
+} from './launch.js';
+export {
+ launch,
+ computeExecutablePath,
+ computeSystemExecutablePath,
+ TimeoutError,
+ CDP_WEBSOCKET_ENDPOINT_REGEX,
+ WEBDRIVER_BIDI_WEBSOCKET_ENDPOINT_REGEX,
+ Process,
+} from './launch.js';
+export type {
+ InstallOptions,
+ GetInstalledBrowsersOptions,
+ UninstallOptions,
+} from './install.js';
+export {
+ install,
+ getInstalledBrowsers,
+ canDownload,
+ uninstall,
+} from './install.js';
+export {detectBrowserPlatform} from './detectPlatform.js';
+export type {ProfileOptions} from './browser-data/browser-data.js';
+export {
+ resolveBuildId,
+ Browser,
+ BrowserPlatform,
+ ChromeReleaseChannel,
+ createProfile,
+} from './browser-data/browser-data.js';
+export {CLI, makeProgressCallback} from './CLI.js';
+export {Cache, InstalledBrowser} from './Cache.js';
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.cjs.json b/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.cjs.json
new file mode 100644
index 00000000..acb19688
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.cjs.json
@@ -0,0 +1,8 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "outDir": "../lib/cjs"
+ }
+}
diff --git a/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.esm.json b/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.esm.json
new file mode 100644
index 00000000..a824bc8c
--- /dev/null
+++ b/Scripts/node_modules/@puppeteer/browsers/src/tsconfig.esm.json
@@ -0,0 +1,6 @@
+{
+ "extends": "../../../tsconfig.base.json",
+ "compilerOptions": {
+ "outDir": "../lib/esm"
+ }
+}
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/LICENSE b/Scripts/node_modules/@tootallnate/quickjs-emscripten/LICENSE
new file mode 100644
index 00000000..07499f66
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+quickjs-emscripten copyright (c) 2019 Jake Teton-Landis
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/README.md b/Scripts/node_modules/@tootallnate/quickjs-emscripten/README.md
new file mode 100644
index 00000000..70658a55
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/README.md
@@ -0,0 +1,597 @@
+# quickjs-emscripten
+
+Javascript/Typescript bindings for QuickJS, a modern Javascript interpreter,
+compiled to WebAssembly.
+
+- Safely evaluate untrusted Javascript (up to ES2020).
+- Create and manipulate values inside the QuickJS runtime ([more][values]).
+- Expose host functions to the QuickJS runtime ([more][functions]).
+- Execute synchronous code that uses asynchronous functions, with [asyncify][asyncify].
+
+[Github] | [NPM] | [API Documentation][api] | [Examples][tests]
+
+```typescript
+import { getQuickJS } from "quickjs-emscripten"
+
+async function main() {
+ const QuickJS = await getQuickJS()
+ const vm = QuickJS.newContext()
+
+ const world = vm.newString("world")
+ vm.setProp(vm.global, "NAME", world)
+ world.dispose()
+
+ const result = vm.evalCode(`"Hello " + NAME + "!"`)
+ if (result.error) {
+ console.log("Execution failed:", vm.dump(result.error))
+ result.error.dispose()
+ } else {
+ console.log("Success:", vm.dump(result.value))
+ result.value.dispose()
+ }
+
+ vm.dispose()
+}
+
+main()
+```
+
+[github]: https://github.com/justjake/quickjs-emscripten
+[npm]: https://www.npmjs.com/package/quickjs-emscripten
+[api]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/modules.md
+[tests]: https://github.com/justjake/quickjs-emscripten/blob/main/ts/quickjs.test.ts
+[values]: #interfacing-with-the-interpreter
+[asyncify]: #asyncify
+[functions]: #exposing-apis
+
+## Usage
+
+Install from `npm`: `npm install --save quickjs-emscripten` or `yarn add quickjs-emscripten`.
+
+The root entrypoint of this library is the `getQuickJS` function, which returns
+a promise that resolves to a [QuickJS singleton](./doc/classes/quickjs.md) when
+the QuickJS WASM module is ready.
+
+Once `getQuickJS` has been awaited at least once, you also can use the `getQuickJSSync`
+function to directly access the singleton engine in your synchronous code.
+
+### Safely evaluate Javascript code
+
+See [QuickJS.evalCode](https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/quickjs.md#evalcode)
+
+```typescript
+import { getQuickJS, shouldInterruptAfterDeadline } from "quickjs-emscripten"
+
+getQuickJS().then((QuickJS) => {
+ const result = QuickJS.evalCode("1 + 1", {
+ shouldInterrupt: shouldInterruptAfterDeadline(Date.now() + 1000),
+ memoryLimitBytes: 1024 * 1024,
+ })
+ console.log(result)
+})
+```
+
+### Interfacing with the interpreter
+
+You can use [QuickJSContext](https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/QuickJSContext.md)
+to build a scripting environment by modifying globals and exposing functions
+into the QuickJS interpreter.
+
+Each `QuickJSContext` instance has its own environment -- globals, built-in
+classes -- and actions from one context won't leak into other contexts or
+runtimes (with one exception, see [Asyncify][asyncify]).
+
+Every context is created inside a
+[QuickJSRuntime](https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/QuickJSRuntime.md).
+A runtime represents a Javascript heap, and you can even share values between
+contexts in the same runtime.
+
+```typescript
+const vm = QuickJS.newContext()
+let state = 0
+
+const fnHandle = vm.newFunction("nextId", () => {
+ return vm.newNumber(++state)
+})
+
+vm.setProp(vm.global, "nextId", fnHandle)
+fnHandle.dispose()
+
+const nextId = vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`))
+console.log("vm result:", vm.getNumber(nextId), "native state:", state)
+
+nextId.dispose()
+vm.dispose()
+```
+
+When you create a context from a top-level API like in the example above,
+instead of by calling `runtime.newContext()`, a runtime is automatically created
+for the lifetime of the context, and disposed of when you dispose the context.
+
+#### Runtime
+
+The runtime has APIs for CPU and memory limits that apply to all contexts within
+the runtime in aggregate. You can also use the runtime to configure EcmaScript
+module loading.
+
+```typescript
+const runtime = QuickJS.newRuntime()
+// "Should be enough for everyone" -- attributed to B. Gates
+runtime.setMemoryLimit(1024 * 640)
+// Limit stack size
+runtime.setMaxStackSize(1024 * 320)
+// Interrupt computation after 1024 calls to the interrupt handler
+let interruptCycles = 0
+runtime.setInterruptHandler(() => ++interruptCycles > 1024)
+// Toy module system that always returns the module name
+// as the default export
+runtime.setModuleLoader((moduleName) => `export default '${moduleName}'`)
+const context = runtime.newContext()
+const ok = context.evalCode(`
+import fooName from './foo.js'
+globalThis.result = fooName
+`)
+context.unwrapResult(ok).dispose()
+// logs "foo.js"
+console.log(context.getProp(context.global, "result").consume(context.dump))
+context.dispose()
+runtime.dispose()
+```
+
+### Memory Management
+
+Many methods in this library return handles to memory allocated inside the
+WebAssembly heap. These types cannot be garbage-collected as usual in
+Javascript. Instead, you must manually manage their memory by calling a
+`.dispose()` method to free the underlying resources. Once a handle has been
+disposed, it cannot be used anymore. Note that in the example above, we call
+`.dispose()` on each handle once it is no longer needed.
+
+Calling `QuickJSContext.dispose()` will throw a RuntimeError if you've forgotten to
+dispose any handles associated with that VM, so it's good practice to create a
+new VM instance for each of your tests, and to call `vm.dispose()` at the end
+of every test.
+
+```typescript
+const vm = QuickJS.newContext()
+const numberHandle = vm.newNumber(42)
+// Note: numberHandle not disposed, so it leaks memory.
+vm.dispose()
+// throws RuntimeError: abort(Assertion failed: list_empty(&rt->gc_obj_list), at: quickjs/quickjs.c,1963,JS_FreeRuntime)
+```
+
+Here are some strategies to reduce the toil of calling `.dispose()` on each
+handle you create:
+
+#### Scope
+
+A
+[`Scope`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/scope.md#class-scope)
+instance manages a set of disposables and calls their `.dispose()`
+method in the reverse order in which they're added to the scope. Here's the
+"Interfacing with the interpreter" example re-written using `Scope`:
+
+```typescript
+Scope.withScope((scope) => {
+ const vm = scope.manage(QuickJS.newContext())
+ let state = 0
+
+ const fnHandle = scope.manage(
+ vm.newFunction("nextId", () => {
+ return vm.newNumber(++state)
+ })
+ )
+
+ vm.setProp(vm.global, "nextId", fnHandle)
+
+ const nextId = scope.manage(vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)))
+ console.log("vm result:", vm.getNumber(nextId), "native state:", state)
+
+ // When the withScope block exits, it calls scope.dispose(), which in turn calls
+ // the .dispose() methods of all the disposables managed by the scope.
+})
+```
+
+You can also create `Scope` instances with `new Scope()` if you want to manage
+calling `scope.dispose()` yourself.
+
+#### `Lifetime.consume(fn)`
+
+[`Lifetime.consume`](https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/lifetime.md#consume)
+is sugar for the common pattern of using a handle and then
+immediately disposing of it. `Lifetime.consume` takes a `map` function that
+produces a result of any type. The `map` fuction is called with the handle,
+then the handle is disposed, then the result is returned.
+
+Here's the "Interfacing with interpreter" example re-written using `.consume()`:
+
+```typescript
+const vm = QuickJS.newContext()
+let state = 0
+
+vm.newFunction("nextId", () => {
+ return vm.newNumber(++state)
+}).consume((fnHandle) => vm.setProp(vm.global, "nextId", fnHandle))
+
+vm.unwrapResult(vm.evalCode(`nextId(); nextId(); nextId()`)).consume((nextId) =>
+ console.log("vm result:", vm.getNumber(nextId), "native state:", state)
+)
+
+vm.dispose()
+```
+
+Generally working with `Scope` leads to more straight-forward code, but
+`Lifetime.consume` can be handy sugar as part of a method call chain.
+
+### Exposing APIs
+
+To add APIs inside the QuickJS environment, you'll need to create objects to
+define the shape of your API, and add properties and functions to those objects
+to allow code inside QuickJS to call code on the host.
+
+By default, no host functionality is exposed to code running inside QuickJS.
+
+```typescript
+const vm = QuickJS.newContext()
+// `console.log`
+const logHandle = vm.newFunction("log", (...args) => {
+ const nativeArgs = args.map(vm.dump)
+ console.log("QuickJS:", ...nativeArgs)
+})
+// Partially implement `console` object
+const consoleHandle = vm.newObject()
+vm.setProp(consoleHandle, "log", logHandle)
+vm.setProp(vm.global, "console", consoleHandle)
+consoleHandle.dispose()
+logHandle.dispose()
+
+vm.unwrapResult(vm.evalCode(`console.log("Hello from QuickJS!")`)).dispose()
+```
+
+#### Promises
+
+To expose an asynchronous function that _returns a promise_ to callers within
+QuickJS, your function can return the handle of a `QuickJSDeferredPromise`
+created via `context.newPromise()`.
+
+When you resolve a `QuickJSDeferredPromise` -- and generally whenever async
+behavior completes for the VM -- pending listeners inside QuickJS may not
+execute immediately. Your code needs to explicitly call
+`runtime.executePendingJobs()` to resume execution inside QuickJS. This API
+gives your code maximum control to _schedule_ when QuickJS will block the host's
+event loop by resuming execution.
+
+To work with QuickJS handles that contain a promise inside the environment, you
+can convert the QuickJSHandle into a native promise using
+`context.resolvePromise()`. Take care with this API to avoid 'deadlocks' where
+the host awaits a guest promise, but the guest cannot make progress until the
+host calls `runtime.executePendingJobs()`. The simplest way to avoid this kind
+of deadlock is to always schedule `executePendingJobs` after any promise is
+settled.
+
+```typescript
+const vm = QuickJS.newContext()
+const fakeFileSystem = new Map([["example.txt", "Example file content"]])
+
+// Function that simulates reading data asynchronously
+const readFileHandle = vm.newFunction("readFile", (pathHandle) => {
+ const path = vm.getString(pathHandle)
+ const promise = vm.newPromise()
+ setTimeout(() => {
+ const content = fakeFileSystem.get(path)
+ promise.resolve(vm.newString(content || ""))
+ }, 100)
+ // IMPORTANT: Once you resolve an async action inside QuickJS,
+ // call runtime.executePendingJobs() to run any code that was
+ // waiting on the promise or callback.
+ promise.settled.then(vm.runtime.executePendingJobs)
+ return promise.handle
+})
+readFileHandle.consume((handle) => vm.setProp(vm.global, "readFile", handle))
+
+// Evaluate code that uses `readFile`, which returns a promise
+const result = vm.evalCode(`(async () => {
+ const content = await readFile('example.txt')
+ return content.toUpperCase()
+})()`)
+const promiseHandle = vm.unwrapResult(result)
+
+// Convert the promise handle into a native promise and await it.
+// If code like this deadlocks, make sure you are calling
+// runtime.executePendingJobs appropriately.
+const resolvedResult = await vm.resolvePromise(promiseHandle)
+promiseHandle.dispose()
+const resolvedHandle = vm.unwrapResult(resolvedResult)
+console.log("Result:", vm.getString(resolvedHandle))
+resolvedHandle.dispose()
+```
+
+#### Asyncify
+
+Sometimes, we want to create a function that's synchronous from the perspective
+of QuickJS, but prefer to implement that function _asynchronously_ in your host
+code. The most obvious use-case is for EcmaScript module loading. The underlying
+QuickJS C library expects the module loader function to return synchronously,
+but loading data synchronously in the browser or server is somewhere between "a
+bad idea" and "impossible". QuickJS also doesn't expose an API to "pause" the
+execution of a runtime, and adding such an API is tricky due to the VM's
+implementation.
+
+As a work-around, we provide an alternate build of QuickJS processed by
+Emscripten/Binaryen's [ASYNCIFY](https://emscripten.org/docs/porting/asyncify.html)
+compiler transform. Here's how Emscripten's documentation describes Asyncify:
+
+> Asyncify lets synchronous C or C++ code interact with asynchronous \[host] JavaScript. This allows things like:
+>
+> - A synchronous call in C that yields to the event loop, which allows browser events to be handled.
+>
+> - A synchronous call in C that waits for an asynchronous operation in \[host] JS to complete.
+>
+> Asyncify automatically transforms ... code into a form that can be paused and
+> resumed ..., so that it is asynchronous (hence the name “Asyncify”) even though
+> \[it is written] in a normal synchronous way.
+
+This means we can suspend an _entire WebAssembly module_ (which could contain
+multiple runtimes and contexts) while our host Javascript loads data
+asynchronously, and then resume execution once the data load completes. This is
+a very handy superpower, but it comes with a couple of major limitations:
+
+1. _An asyncified WebAssembly module can only suspend to wait for a single
+ asynchronous call at a time_. You may call back into a suspended WebAssembly
+ module eg. to create a QuickJS value to return a result, but the system will
+ crash if this call tries to suspend again. Take a look at Emscripten's documentation
+ on [reentrancy](https://emscripten.org/docs/porting/asyncify.html#reentrancy).
+
+2. _Asyncified code is bigger and runs slower_. The asyncified build of
+ Quickjs-emscripten library is 1M, 2x larger than the 500K of the default
+ version. There may be room for further
+ [optimization](https://emscripten.org/docs/porting/asyncify.html#optimizing)
+ Of our build in the future.
+
+To use asyncify features, use the following functions:
+
+- [newAsyncRuntime][]: create a runtime inside a new WebAssembly module.
+- [newAsyncContext][]: create runtime and context together inside a new
+ WebAssembly module.
+- [newQuickJSAsyncWASMModule][]: create an empty WebAssembly module.
+
+[newasyncruntime]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/modules.md#newasyncruntime
+[newasynccontext]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/modules.md#newasynccontext
+[newquickjsasyncwasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/modules.md#newquickjsasyncwasmmodule
+
+These functions are asynchronous because they always create a new underlying
+WebAssembly module so that each instance can suspend and resume independently,
+and instantiating a WebAssembly module is an async operation. This also adds
+substantial overhead compared to creating a runtime or context inside an
+existing module; if you only need to wait for a single async action at a time,
+you can create a single top-level module and create runtimes or contexts inside
+of it.
+
+##### Async module loader
+
+Here's an example of valuating a script that loads React asynchronously as an ES
+module. In our example, we're loading from the filesystem for reproducibility,
+but you can use this technique to load using `fetch`.
+
+```typescript
+const module = await newQuickJSAsyncWASMModule()
+const runtime = module.newRuntime()
+const path = await import("path")
+const { promises: fs } = await import("fs")
+
+const importsPath = path.join(__dirname, "../examples/imports") + "/"
+// Module loaders can return promises.
+// Execution will suspend until the promise resolves.
+runtime.setModuleLoader((moduleName) => {
+ const modulePath = path.join(importsPath, moduleName)
+ if (!modulePath.startsWith(importsPath)) {
+ throw new Error("out of bounds")
+ }
+ console.log("loading", moduleName, "from", modulePath)
+ return fs.readFile(modulePath, "utf-8")
+})
+
+// evalCodeAsync is required when execution may suspend.
+const context = runtime.newContext()
+const result = await context.evalCodeAsync(`
+import * as React from 'esm.sh/react@17'
+import * as ReactDOMServer from 'esm.sh/react-dom@17/server'
+const e = React.createElement
+globalThis.html = ReactDOMServer.renderToStaticMarkup(
+ e('div', null, e('strong', null, 'Hello world!'))
+)
+`)
+context.unwrapResult(result).dispose()
+const html = context.getProp(context.global, "html").consume(context.getString)
+console.log(html) // Hello world!
+```
+
+##### Async on host, sync in QuickJS
+
+Here's an example of turning an async function into a sync function inside the
+VM.
+
+```typescript
+const context = await newAsyncContext()
+const path = await import("path")
+const { promises: fs } = await import("fs")
+
+const importsPath = path.join(__dirname, "../examples/imports") + "/"
+const readFileHandle = context.newAsyncifiedFunction("readFile", async (pathHandle) => {
+ const pathString = path.join(importsPath, context.getString(pathHandle))
+ if (!pathString.startsWith(importsPath)) {
+ throw new Error("out of bounds")
+ }
+ const data = await fs.readFile(pathString, "utf-8")
+ return context.newString(data)
+})
+readFileHandle.consume((fn) => context.setProp(context.global, "readFile", fn))
+
+// evalCodeAsync is required when execution may suspend.
+const result = await context.evalCodeAsync(`
+// Not a promise! Sync! vvvvvvvvvvvvvvvvvvvv
+const data = JSON.parse(readFile('data.json'))
+data.map(x => x.toUpperCase()).join(' ')
+`)
+const upperCaseData = context.unwrapResult(result).consume(context.getString)
+console.log(upperCaseData) // 'VERY USEFUL DATA'
+```
+
+### Testing your code
+
+This library is complicated to use, so please consider automated testing your
+implementation. We highly writing your test suite to run with both the "release"
+build variant of quickjs-emscripten, and also the [DEBUG_SYNC] build variant.
+The debug sync build variant has extra instrumentation code for detecting memory
+leaks.
+
+The class [TestQuickJSWASMModule] exposes the memory leak detection API, although
+this API is only accurate when using `DEBUG_SYNC` variant.
+
+```typescript
+// Define your test suite in a function, so that you can test against
+// different module loaders.
+function myTests(moduleLoader: () => Promise) {
+ let QuickJS: TestQuickJSWASMModule
+ beforeEach(async () => {
+ // Get a unique TestQuickJSWASMModule instance for each test.
+ const wasmModule = await moduleLoader()
+ QuickJS = new TestQuickJSWASMModule(wasmModule)
+ })
+ afterEach(() => {
+ // Assert that the test disposed all handles. The DEBUG_SYNC build
+ // variant will show detailed traces for each leak.
+ QuickJS.assertNoMemoryAllocated()
+ })
+
+ it("works well", () => {
+ // TODO: write a test using QuickJS
+ const context = QuickJS.newContext()
+ context.unwrapResult(context.evalCode("1 + 1")).dispose()
+ context.dispose()
+ })
+}
+
+// Run the test suite against a matrix of module loaders.
+describe("Check for memory leaks with QuickJS DEBUG build", () => {
+ const moduleLoader = memoizePromiseFactory(() => newQuickJSWASMModule(DEBUG_SYNC))
+ myTests(moduleLoader)
+})
+
+describe("Realistic test with QuickJS RELEASE build", () => {
+ myTests(getQuickJS)
+})
+```
+
+For more testing examples, please explore the typescript source of [quickjs-emscripten][ts] repository.
+
+[ts]: https://github.com/justjake/quickjs-emscripten/blob/main/ts
+[debug_sync]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/modules.md#debug_sync
+[testquickjswasmmodule]: https://github.com/justjake/quickjs-emscripten/blob/main/doc/classes/TestQuickJSWASMModule.md
+
+### Debugging
+
+- Switch to a DEBUG build variant of the WebAssembly module to see debug log messages from the C part of this library.
+- Set `process.env.QTS_DEBUG` to see debug log messages from the Javascript part of this library.
+
+### More Documentation
+
+[Github] | [NPM] | [API Documentation][api] | [Examples][tests]
+
+## Background
+
+This was inspired by seeing https://github.com/maple3142/duktape-eval
+[on Hacker News](https://news.ycombinator.com/item?id=21946565) and Figma's
+blogposts about using building a Javascript plugin runtime:
+
+- [How Figma built the Figma plugin system](https://www.figma.com/blog/how-we-built-the-figma-plugin-system/): Describes the LowLevelJavascriptVm interface.
+- [An update on plugin security](https://www.figma.com/blog/an-update-on-plugin-security/): Figma switches to QuickJS.
+
+## Status & Roadmap
+
+**Stability**: Because the version number of this project is below `1.0.0`,
+\*expect occasional breaking API changes.
+
+**Security**: This project makes every effort to be secure, but has not been
+audited. Please use with care in production settings.
+
+**Roadmap**: I work on this project in my free time, for fun. Here's I'm
+thinking comes next. Last updated 2022-03-18.
+
+1. Further work on module loading APIs:
+
+ - Create modules via Javascript, instead of source text.
+ - Scan source text for imports, for ahead of time or concurrent loading.
+ (This is possible with third-party tools, so lower priority.)
+
+2. Higher-level tools for reading QuickJS values:
+
+ - Type guard functions: `context.isArray(handle)`, `context.isPromise(handle)`, etc.
+ - Iteration utilities: `context.getIterable(handle)`, `context.iterateObjectEntries(handle)`.
+ This better supports user-level code to deserialize complex handle objects.
+
+3. Higher-level tools for creating QuickJS values:
+
+ - Devise a way to avoid needing to mess around with handles when setting up
+ the environment.
+ - Consider integrating
+ [quickjs-emscripten-sync](https://github.com/reearth/quickjs-emscripten-sync)
+ for automatic translation.
+ - Consider class-based or interface-type-based marshalling.
+
+4. EcmaScript Modules / WebAssembly files / Deno support. This requires me to
+ learn a lot of new things, but should be interesting for modern browser usage.
+
+5. SQLite integration.
+
+## Related
+
+- Duktape wrapped in Wasm: https://github.com/maple3142/duktape-eval/blob/main/src/Makefile
+- QuickJS wrapped in C++: https://github.com/ftk/quickjspp
+
+## Developing
+
+This library is implemented in two languages: C (compiled to WASM with
+Emscripten), and Typescript.
+
+### The C parts
+
+The ./c directory contains C code that wraps the QuickJS C library (in ./quickjs).
+Public functions (those starting with `QTS_`) in ./c/interface.c are
+automatically exported to native code (via a generated header) and to
+Typescript (via a generated FFI class). See ./generate.ts for how this works.
+
+The C code builds as both with `emscripten` (using `emcc`), to produce WASM (or
+ASM.js) and with `clang`. Build outputs are checked in, so you can iterate on
+the Javascript parts of the library without setting up the Emscripten toolchain.
+
+Intermediate object files from QuickJS end up in ./build/quickjs/.
+
+This project uses `emscripten 3.1.32`.
+
+- On ARM64, you should install `emscripten` on your machine. For example on macOS, `brew install emscripten`.
+- If _the correct version of emcc_ is not in your PATH, compilation falls back to using Docker.
+ On ARM64, this is 10-50x slower than native compilation, but it's just fine on x64.
+
+Related NPM scripts:
+
+- `yarn update-quickjs` will sync the ./quickjs folder with a
+ github repo tracking the upstream QuickJS.
+- `yarn make-debug` will rebuild C outputs into ./build/wrapper
+- `yarn make-release` will rebuild C outputs in release mode, which is the mode
+ that should be checked into the repo.
+
+### The Typescript parts
+
+The ./ts directory contains Typescript types and wraps the generated Emscripten
+FFI in a more usable interface.
+
+You'll need `node` and `yarn`. Install dependencies with `yarn install`.
+
+- `yarn build` produces ./dist.
+- `yarn test` runs the tests.
+- `yarn test --watch` watches for changes and re-runs the tests.
+
+### Yarn updates
+
+Just run `yarn set version from sources` to upgrade the Yarn release.
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/c/interface.c b/Scripts/node_modules/@tootallnate/quickjs-emscripten/c/interface.c
new file mode 100644
index 00000000..0126cff2
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/c/interface.c
@@ -0,0 +1,819 @@
+/**
+ * interface.c
+ *
+ * We primarily use JSValue* (pointer to JSValue) when communicating with the
+ * host javascript environment, because pointers are trivial to use for calls
+ * into emscripten because they're just a number!
+ *
+ * As with the quickjs.h API, a JSValueConst* value is "borrowed" and should
+ * not be freed. A JSValue* is "owned" and should be freed by the owner.
+ *
+ * Functions starting with "QTS_" are exported by generate.ts to:
+ * - interface.h for native C code.
+ * - ffi.ts for emscripten.
+ *
+ * We support building the following build outputs:
+ *
+ * ## 1. Native machine code
+ * For internal development testing purposes.
+ *
+ * ## 2. WASM via Emscripten
+ * For general production use.
+ *
+ * ## 3. Experimental: Asyncified WASM via Emscripten with -s ASYNCIFY=1.
+ * This variant supports treating async host Javascript calls as synchronous
+ * from the perspective of the WASM c code.
+ *
+ * The way this works is described here:
+ * https://emscripten.org/docs/porting/asyncify.html
+ *
+ * In this variant, any call into our C code could return a promise if it ended
+ * up suspended. We mark the methods we suspect might suspend due to users' code
+ * as returning MaybeAsync(T). This information is ignored for the regular
+ * build.
+ */
+
+#ifdef __EMSCRIPTEN__
+#include
+#endif
+
+#include // For NAN
+#include
+#include
+#include
+#ifdef QTS_SANITIZE_LEAK
+#include
+#endif
+
+#include "../quickjs/cutils.h"
+#include "../quickjs/quickjs-libc.h"
+#include "../quickjs/quickjs.h"
+
+#define PKG "quickjs-emscripten: "
+
+#ifdef QTS_DEBUG_MODE
+#define QTS_DEBUG(msg) qts_log(msg);
+#define QTS_DUMP(value) qts_dump(ctx, value);
+#else
+#define QTS_DEBUG(msg) ;
+#define QTS_DUMP(value) ;
+#endif
+
+/**
+ * Signal to our FFI code generator that this string argument should be passed as a pointer
+ * allocated by the caller on the heap, not a JS string on the stack.
+ * https://github.com/emscripten-core/emscripten/issues/6860#issuecomment-405818401
+ */
+#define BorrowedHeapChar const char
+#define OwnedHeapChar char
+#define JSBorrowedChar const char
+
+/**
+ * Signal to our FFI code generator that this function should be called
+ * asynchronously when compiled with ASYNCIFY.
+ */
+#define MaybeAsync(T) T
+
+/**
+ * Signal to our FFI code generator that this function is only available in
+ * ASYNCIFY builds.
+ */
+#define AsyncifyOnly(T) T
+
+#define JSVoid void
+
+#define EvalFlags int
+#define EvalDetectModule int
+
+void qts_log(char *msg) {
+ fputs(PKG, stderr);
+ fputs(msg, stderr);
+ fputs("\n", stderr);
+}
+
+void qts_dump(JSContext *ctx, JSValueConst value) {
+ const char *str = JS_ToCString(ctx, value);
+ if (!str) {
+ QTS_DEBUG("QTS_DUMP: can't dump");
+ return;
+ }
+ fputs(str, stderr);
+ JS_FreeCString(ctx, str);
+ putchar('\n');
+}
+
+void copy_prop_if_needed(JSContext *ctx, JSValueConst dest, JSValueConst src, const char *prop_name) {
+ JSAtom prop_atom = JS_NewAtom(ctx, prop_name);
+ JSValue dest_prop = JS_GetProperty(ctx, dest, prop_atom);
+ if (JS_IsUndefined(dest_prop)) {
+ JSValue src_prop = JS_GetProperty(ctx, src, prop_atom);
+ if (!JS_IsUndefined(src_prop) && !JS_IsException(src_prop)) {
+ JS_SetProperty(ctx, dest, prop_atom, src_prop);
+ }
+ } else {
+ JS_FreeValue(ctx, dest_prop);
+ }
+ JS_FreeAtom(ctx, prop_atom);
+}
+
+JSValue *jsvalue_to_heap(JSValueConst value) {
+ JSValue *result = malloc(sizeof(JSValue));
+ if (result) {
+ // Could be better optimized, but at -0z / -ftlo, it
+ // appears to produce the same binary code as a memcpy.
+ *result = value;
+ }
+ return result;
+}
+
+JSValue *QTS_Throw(JSContext *ctx, JSValueConst *error) {
+ JSValue copy = JS_DupValue(ctx, *error);
+ return jsvalue_to_heap(JS_Throw(ctx, copy));
+}
+
+JSValue *QTS_NewError(JSContext *ctx) {
+ return jsvalue_to_heap(JS_NewError(ctx));
+}
+
+/**
+ * Limits.
+ */
+
+/**
+ * Memory limit. Set to -1 to disable.
+ */
+void QTS_RuntimeSetMemoryLimit(JSRuntime *rt, size_t limit) {
+ JS_SetMemoryLimit(rt, limit);
+}
+
+/**
+ * Memory diagnostics
+ */
+
+JSValue *QTS_RuntimeComputeMemoryUsage(JSRuntime *rt, JSContext *ctx) {
+ JSMemoryUsage s;
+ JS_ComputeMemoryUsage(rt, &s);
+
+ // Note that we're going to allocate more memory just to report the memory usage.
+ // A more sound approach would be to bind JSMemoryUsage struct directly - but that's
+ // a lot of work. This should be okay in the mean time.
+ JSValue result = JS_NewObject(ctx);
+
+ // Manually generated via editor-fu from JSMemoryUsage struct definition in quickjs.h
+ JS_SetPropertyStr(ctx, result, "malloc_limit", JS_NewInt64(ctx, s.malloc_limit));
+ JS_SetPropertyStr(ctx, result, "memory_used_size", JS_NewInt64(ctx, s.memory_used_size));
+ JS_SetPropertyStr(ctx, result, "malloc_count", JS_NewInt64(ctx, s.malloc_count));
+ JS_SetPropertyStr(ctx, result, "memory_used_count", JS_NewInt64(ctx, s.memory_used_count));
+ JS_SetPropertyStr(ctx, result, "atom_count", JS_NewInt64(ctx, s.atom_count));
+ JS_SetPropertyStr(ctx, result, "atom_size", JS_NewInt64(ctx, s.atom_size));
+ JS_SetPropertyStr(ctx, result, "str_count", JS_NewInt64(ctx, s.str_count));
+ JS_SetPropertyStr(ctx, result, "str_size", JS_NewInt64(ctx, s.str_size));
+ JS_SetPropertyStr(ctx, result, "obj_count", JS_NewInt64(ctx, s.obj_count));
+ JS_SetPropertyStr(ctx, result, "obj_size", JS_NewInt64(ctx, s.obj_size));
+ JS_SetPropertyStr(ctx, result, "prop_count", JS_NewInt64(ctx, s.prop_count));
+ JS_SetPropertyStr(ctx, result, "prop_size", JS_NewInt64(ctx, s.prop_size));
+ JS_SetPropertyStr(ctx, result, "shape_count", JS_NewInt64(ctx, s.shape_count));
+ JS_SetPropertyStr(ctx, result, "shape_size", JS_NewInt64(ctx, s.shape_size));
+ JS_SetPropertyStr(ctx, result, "js_func_count", JS_NewInt64(ctx, s.js_func_count));
+ JS_SetPropertyStr(ctx, result, "js_func_size", JS_NewInt64(ctx, s.js_func_size));
+ JS_SetPropertyStr(ctx, result, "js_func_code_size", JS_NewInt64(ctx, s.js_func_code_size));
+ JS_SetPropertyStr(ctx, result, "js_func_pc2line_count", JS_NewInt64(ctx, s.js_func_pc2line_count));
+ JS_SetPropertyStr(ctx, result, "js_func_pc2line_size", JS_NewInt64(ctx, s.js_func_pc2line_size));
+ JS_SetPropertyStr(ctx, result, "c_func_count", JS_NewInt64(ctx, s.c_func_count));
+ JS_SetPropertyStr(ctx, result, "array_count", JS_NewInt64(ctx, s.array_count));
+ JS_SetPropertyStr(ctx, result, "fast_array_count", JS_NewInt64(ctx, s.fast_array_count));
+ JS_SetPropertyStr(ctx, result, "fast_array_elements", JS_NewInt64(ctx, s.fast_array_elements));
+ JS_SetPropertyStr(ctx, result, "binary_object_count", JS_NewInt64(ctx, s.binary_object_count));
+ JS_SetPropertyStr(ctx, result, "binary_object_size", JS_NewInt64(ctx, s.binary_object_size));
+
+ return jsvalue_to_heap(result);
+}
+
+OwnedHeapChar *QTS_RuntimeDumpMemoryUsage(JSRuntime *rt) {
+ char *result = malloc(sizeof(char) * 1024);
+ FILE *memfile = fmemopen(result, 1024, "w");
+ JSMemoryUsage s;
+ JS_ComputeMemoryUsage(rt, &s);
+ JS_DumpMemoryUsage(memfile, &s, rt);
+ fclose(memfile);
+ return result;
+}
+
+int QTS_RecoverableLeakCheck() {
+#ifdef QTS_SANITIZE_LEAK
+ return __lsan_do_recoverable_leak_check();
+#else
+ return 0;
+#endif
+}
+
+int QTS_BuildIsSanitizeLeak() {
+#ifdef QTS_SANITIZE_LEAK
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+#ifdef QTS_ASYNCIFY
+EM_JS(void, set_asyncify_stack_size, (size_t size), {
+ Asyncify.StackSize = size || 81920;
+});
+#endif
+
+/**
+ * Set the stack size limit, in bytes. Set to 0 to disable.
+ */
+void QTS_RuntimeSetMaxStackSize(JSRuntime *rt, size_t stack_size) {
+#ifdef QTS_ASYNCIFY
+ set_asyncify_stack_size(stack_size);
+#endif
+ JS_SetMaxStackSize(rt, stack_size);
+}
+
+/**
+ * Constant pointers. Because we always use JSValue* from the host Javascript environment,
+ * we need helper fuctions to return pointers to these constants.
+ */
+
+JSValueConst QTS_Undefined = JS_UNDEFINED;
+JSValueConst *QTS_GetUndefined() {
+ return &QTS_Undefined;
+}
+
+JSValueConst QTS_Null = JS_NULL;
+JSValueConst *QTS_GetNull() {
+ return &QTS_Null;
+}
+
+JSValueConst QTS_False = JS_FALSE;
+JSValueConst *QTS_GetFalse() {
+ return &QTS_False;
+}
+
+JSValueConst QTS_True = JS_TRUE;
+JSValueConst *QTS_GetTrue() {
+ return &QTS_True;
+}
+
+/**
+ * Standard FFI functions
+ */
+
+JSRuntime *QTS_NewRuntime() {
+ return JS_NewRuntime();
+}
+
+void QTS_FreeRuntime(JSRuntime *rt) {
+ JS_FreeRuntime(rt);
+}
+
+JSContext *QTS_NewContext(JSRuntime *rt) {
+ return JS_NewContext(rt);
+}
+
+void QTS_FreeContext(JSContext *ctx) {
+ JS_FreeContext(ctx);
+}
+
+void QTS_FreeValuePointer(JSContext *ctx, JSValue *value) {
+ JS_FreeValue(ctx, *value);
+ free(value);
+}
+
+void QTS_FreeValuePointerRuntime(JSRuntime *rt, JSValue *value) {
+ JS_FreeValueRT(rt, *value);
+ free(value);
+}
+
+void QTS_FreeVoidPointer(JSContext *ctx, JSVoid *ptr) {
+ js_free(ctx, ptr);
+}
+
+void QTS_FreeCString(JSContext *ctx, JSBorrowedChar *str) {
+ JS_FreeCString(ctx, str);
+}
+
+JSValue *QTS_DupValuePointer(JSContext *ctx, JSValueConst *val) {
+ return jsvalue_to_heap(JS_DupValue(ctx, *val));
+}
+
+JSValue *QTS_NewObject(JSContext *ctx) {
+ return jsvalue_to_heap(JS_NewObject(ctx));
+}
+
+JSValue *QTS_NewObjectProto(JSContext *ctx, JSValueConst *proto) {
+ return jsvalue_to_heap(JS_NewObjectProto(ctx, *proto));
+}
+
+JSValue *QTS_NewArray(JSContext *ctx) {
+ return jsvalue_to_heap(JS_NewArray(ctx));
+}
+
+JSValue *QTS_NewFloat64(JSContext *ctx, double num) {
+ return jsvalue_to_heap(JS_NewFloat64(ctx, num));
+}
+
+double QTS_GetFloat64(JSContext *ctx, JSValueConst *value) {
+ double result = NAN;
+ JS_ToFloat64(ctx, &result, *value);
+ return result;
+}
+
+JSValue *QTS_NewString(JSContext *ctx, BorrowedHeapChar *string) {
+ return jsvalue_to_heap(JS_NewString(ctx, string));
+}
+
+JSBorrowedChar *QTS_GetString(JSContext *ctx, JSValueConst *value) {
+ return JS_ToCString(ctx, *value);
+}
+
+JSValue qts_get_symbol_key(JSContext *ctx, JSValueConst *value) {
+ JSValue global = JS_GetGlobalObject(ctx);
+ JSValue Symbol = JS_GetPropertyStr(ctx, global, "Symbol");
+ JS_FreeValue(ctx, global);
+
+ JSValue Symbol_keyFor = JS_GetPropertyStr(ctx, Symbol, "keyFor");
+ JSValue key = JS_Call(ctx, Symbol_keyFor, Symbol, 1, value);
+ JS_FreeValue(ctx, Symbol_keyFor);
+ JS_FreeValue(ctx, Symbol);
+ return key;
+}
+
+JSValue *QTS_NewSymbol(JSContext *ctx, BorrowedHeapChar *description, int isGlobal) {
+ JSValue global = JS_GetGlobalObject(ctx);
+ JSValue Symbol = JS_GetPropertyStr(ctx, global, "Symbol");
+ JS_FreeValue(ctx, global);
+ JSValue descriptionValue = JS_NewString(ctx, description);
+ JSValue symbol;
+
+ if (isGlobal != 0) {
+ JSValue Symbol_for = JS_GetPropertyStr(ctx, Symbol, "for");
+ symbol = JS_Call(ctx, Symbol_for, Symbol, 1, &descriptionValue);
+ JS_FreeValue(ctx, descriptionValue);
+ JS_FreeValue(ctx, Symbol_for);
+ JS_FreeValue(ctx, Symbol);
+ return jsvalue_to_heap(symbol);
+ }
+
+ symbol = JS_Call(ctx, Symbol, JS_UNDEFINED, 1, &descriptionValue);
+ JS_FreeValue(ctx, descriptionValue);
+ JS_FreeValue(ctx, Symbol);
+
+ return jsvalue_to_heap(symbol);
+}
+
+MaybeAsync(JSBorrowedChar *) QTS_GetSymbolDescriptionOrKey(JSContext *ctx, JSValueConst *value) {
+ JSBorrowedChar *result;
+
+ JSValue key = qts_get_symbol_key(ctx, value);
+ if (!JS_IsUndefined(key)) {
+ result = JS_ToCString(ctx, key);
+ JS_FreeValue(ctx, key);
+ return result;
+ }
+
+ JSValue description = JS_GetPropertyStr(ctx, *value, "description");
+ result = JS_ToCString(ctx, description);
+ JS_FreeValue(ctx, description);
+ return result;
+}
+
+int QTS_IsGlobalSymbol(JSContext *ctx, JSValueConst *value) {
+ JSValue key = qts_get_symbol_key(ctx, value);
+ int undefined = JS_IsUndefined(key);
+ JS_FreeValue(ctx, key);
+
+ if (undefined) {
+ return 0;
+ } else {
+ return 1;
+ }
+}
+
+int QTS_IsJobPending(JSRuntime *rt) {
+ return JS_IsJobPending(rt);
+}
+
+/*
+ runs pending jobs (Promises/async functions) until it encounters
+ an exception or it executed the passed maxJobsToExecute jobs.
+
+ Passing a negative value will run the loop until there are no more
+ pending jobs or an exception happened
+
+ Returns the executed number of jobs or the exception encountered
+*/
+MaybeAsync(JSValue *) QTS_ExecutePendingJob(JSRuntime *rt, int maxJobsToExecute, JSContext **lastJobContext) {
+ JSContext *pctx;
+ int status = 1;
+ int executed = 0;
+ while (executed != maxJobsToExecute && status == 1) {
+ status = JS_ExecutePendingJob(rt, &pctx);
+ if (status == -1) {
+ *lastJobContext = pctx;
+ return jsvalue_to_heap(JS_GetException(pctx));
+ } else if (status == 1) {
+ *lastJobContext = pctx;
+ executed++;
+ }
+ }
+#ifdef QTS_DEBUG_MODE
+ char msg[500];
+ sprintf(msg, "QTS_ExecutePendingJob(executed: %d, pctx: %p, lastJobExecuted: %p)", executed, pctx, *lastJobContext);
+ QTS_DEBUG(msg)
+#endif
+ return jsvalue_to_heap(JS_NewFloat64(pctx, executed));
+}
+
+MaybeAsync(JSValue *) QTS_GetProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name) {
+ JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name);
+ JSValue prop_val = JS_GetProperty(ctx, *this_val, prop_atom);
+ JS_FreeAtom(ctx, prop_atom);
+ return jsvalue_to_heap(prop_val);
+}
+
+MaybeAsync(void) QTS_SetProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name, JSValueConst *prop_value) {
+ JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name);
+ JSValue extra_prop_value = JS_DupValue(ctx, *prop_value);
+ // TODO: should we use DefineProperty internally if this object doesn't have the property yet?
+ JS_SetProperty(ctx, *this_val, prop_atom, extra_prop_value); // consumes extra_prop_value
+ JS_FreeAtom(ctx, prop_atom);
+}
+
+void QTS_DefineProp(JSContext *ctx, JSValueConst *this_val, JSValueConst *prop_name, JSValueConst *prop_value, JSValueConst *get, JSValueConst *set, bool configurable, bool enumerable, bool has_value) {
+ JSAtom prop_atom = JS_ValueToAtom(ctx, *prop_name);
+
+ int flags = 0;
+ if (configurable) {
+ flags = flags | JS_PROP_CONFIGURABLE;
+ if (has_value) {
+ flags = flags | JS_PROP_HAS_CONFIGURABLE;
+ }
+ }
+ if (enumerable) {
+ flags = flags | JS_PROP_ENUMERABLE;
+ if (has_value) {
+ flags = flags | JS_PROP_HAS_ENUMERABLE;
+ }
+ }
+ if (!JS_IsUndefined(*get)) {
+ flags = flags | JS_PROP_HAS_GET;
+ }
+ if (!JS_IsUndefined(*set)) {
+ flags = flags | JS_PROP_HAS_SET;
+ }
+ if (has_value) {
+ flags = flags | JS_PROP_HAS_VALUE;
+ }
+
+ JS_DefineProperty(ctx, *this_val, prop_atom, *prop_value, *get, *set, flags);
+ JS_FreeAtom(ctx, prop_atom);
+}
+
+MaybeAsync(JSValue *) QTS_Call(JSContext *ctx, JSValueConst *func_obj, JSValueConst *this_obj, int argc, JSValueConst **argv_ptrs) {
+ // convert array of pointers to array of values
+ JSValueConst argv[argc];
+ int i;
+ for (i = 0; i < argc; i++) {
+ argv[i] = *(argv_ptrs[i]);
+ }
+
+ return jsvalue_to_heap(JS_Call(ctx, *func_obj, *this_obj, argc, argv));
+}
+
+/**
+ * If maybe_exception is an exception, get the error.
+ * Otherwise, return NULL.
+ */
+JSValue *QTS_ResolveException(JSContext *ctx, JSValue *maybe_exception) {
+ if (JS_IsException(*maybe_exception)) {
+ return jsvalue_to_heap(JS_GetException(ctx));
+ }
+
+ return NULL;
+}
+
+MaybeAsync(JSBorrowedChar *) QTS_Dump(JSContext *ctx, JSValueConst *obj) {
+ JSValue obj_json_value = JS_JSONStringify(ctx, *obj, JS_UNDEFINED, JS_UNDEFINED);
+ if (!JS_IsException(obj_json_value)) {
+ const char *obj_json_chars = JS_ToCString(ctx, obj_json_value);
+ JS_FreeValue(ctx, obj_json_value);
+ if (obj_json_chars != NULL) {
+ JSValue enumerable_props = JS_ParseJSON(ctx, obj_json_chars, strlen(obj_json_chars), "");
+ JS_FreeCString(ctx, obj_json_chars);
+ if (!JS_IsException(enumerable_props)) {
+ // Copy common non-enumerable props for different object types.
+ // Errors:
+ copy_prop_if_needed(ctx, enumerable_props, *obj, "name");
+ copy_prop_if_needed(ctx, enumerable_props, *obj, "message");
+ copy_prop_if_needed(ctx, enumerable_props, *obj, "stack");
+
+ // Serialize again.
+ JSValue enumerable_json = JS_JSONStringify(ctx, enumerable_props, JS_UNDEFINED, JS_UNDEFINED);
+ JS_FreeValue(ctx, enumerable_props);
+
+ JSBorrowedChar *result = QTS_GetString(ctx, &enumerable_json);
+ JS_FreeValue(ctx, enumerable_json);
+ return result;
+ }
+ }
+ }
+
+#ifdef QTS_DEBUG_MODE
+ qts_log("Error dumping JSON:");
+ js_std_dump_error(ctx);
+#endif
+
+ // Fallback: convert to string
+ return QTS_GetString(ctx, obj);
+}
+
+MaybeAsync(JSValue *) QTS_Eval(JSContext *ctx, BorrowedHeapChar *js_code, const char *filename, EvalDetectModule detectModule, EvalFlags evalFlags) {
+ size_t js_code_len = strlen(js_code);
+
+ if (detectModule) {
+ if (JS_DetectModule((const char *)js_code, js_code_len)) {
+ QTS_DEBUG("QTS_Eval: Detected module = true");
+ evalFlags |= JS_EVAL_TYPE_MODULE;
+ } else {
+ QTS_DEBUG("QTS_Eval: Detected module = false");
+ }
+ } else {
+ QTS_DEBUG("QTS_Eval: do not detect module");
+ }
+
+ return jsvalue_to_heap(JS_Eval(ctx, js_code, strlen(js_code), filename, evalFlags));
+}
+
+OwnedHeapChar *QTS_Typeof(JSContext *ctx, JSValueConst *value) {
+ const char *result = "unknown";
+ uint32_t tag = JS_VALUE_GET_TAG(*value);
+
+ if (JS_IsNumber(*value)) {
+ result = "number";
+ } else if (JS_IsBigInt(ctx, *value)) {
+ result = "bigint";
+ } else if (JS_IsBigFloat(*value)) {
+ result = "bigfloat";
+ } else if (JS_IsBigDecimal(*value)) {
+ result = "bigdecimal";
+ } else if (JS_IsFunction(ctx, *value)) {
+ result = "function";
+ } else if (JS_IsBool(*value)) {
+ result = "boolean";
+ } else if (JS_IsNull(*value)) {
+ result = "object";
+ } else if (JS_IsUndefined(*value)) {
+ result = "undefined";
+ } else if (JS_IsUninitialized(*value)) {
+ result = "undefined";
+ } else if (JS_IsString(*value)) {
+ result = "string";
+ } else if (JS_IsSymbol(*value)) {
+ result = "symbol";
+ } else if (JS_IsObject(*value)) {
+ result = "object";
+ }
+
+ char *out = strdup(result);
+ return out;
+}
+
+JSValue *QTS_GetGlobalObject(JSContext *ctx) {
+ return jsvalue_to_heap(JS_GetGlobalObject(ctx));
+}
+
+JSValue *QTS_NewPromiseCapability(JSContext *ctx, JSValue **resolve_funcs_out) {
+ JSValue resolve_funcs[2];
+ JSValue promise = JS_NewPromiseCapability(ctx, resolve_funcs);
+ resolve_funcs_out[0] = jsvalue_to_heap(resolve_funcs[0]);
+ resolve_funcs_out[1] = jsvalue_to_heap(resolve_funcs[1]);
+ return jsvalue_to_heap(promise);
+}
+
+void QTS_TestStringArg(const char *string) {
+ // pass
+}
+
+int QTS_BuildIsDebug() {
+#ifdef QTS_DEBUG_MODE
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+int QTS_BuildIsAsyncify() {
+#ifdef QTS_ASYNCIFY
+ return 1;
+#else
+ return 0;
+#endif
+}
+
+// ----------------------------------------------------------------------------
+// Module loading helpers
+
+// ----------------------------------------------------------------------------
+// C -> Host Callbacks
+// Note: inside EM_JS, we need to use ['...'] subscript syntax for accessing JS
+// objects, because in optimized builds, Closure compiler will mangle all the
+// names.
+
+// -------------------
+// function: C -> Host
+#ifdef __EMSCRIPTEN__
+EM_JS(MaybeAsync(JSValue *), qts_host_call_function, (JSContext * ctx, JSValueConst *this_ptr, int argc, JSValueConst *argv, uint32_t magic_func_id), {
+#ifdef QTS_ASYNCIFY
+ const asyncify = {['handleSleep'] : Asyncify.handleSleep};
+#else
+ const asyncify = undefined;
+#endif
+ return Module['callbacks']['callFunction'](asyncify, ctx, this_ptr, argc, argv, magic_func_id);
+});
+#endif
+
+// Function: QuickJS -> C
+JSValue qts_call_function(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv, int magic) {
+ JSValue *result_ptr = qts_host_call_function(ctx, &this_val, argc, argv, magic);
+ if (result_ptr == NULL) {
+ return JS_UNDEFINED;
+ }
+ JSValue result = *result_ptr;
+ free(result_ptr);
+ return result;
+}
+
+// Function: Host -> QuickJS
+JSValue *QTS_NewFunction(JSContext *ctx, uint32_t func_id, const char *name) {
+#ifdef QTS_DEBUG_MODE
+ char msg[500];
+ sprintf(msg, "new_function(name: %s, magic: %d)", name, func_id);
+ QTS_DEBUG(msg)
+#endif
+ JSValue func_obj = JS_NewCFunctionMagic(
+ /* context */ ctx,
+ /* JSCFunctionMagic* */ &qts_call_function,
+ /* name */ name,
+ /* min argc */ 0,
+ /* function type */ JS_CFUNC_generic_magic,
+ /* magic: fn id */ func_id);
+ return jsvalue_to_heap(func_obj);
+}
+
+JSValueConst *QTS_ArgvGetJSValueConstPointer(JSValueConst *argv, int index) {
+ return &argv[index];
+}
+
+// --------------------
+// interrupt: C -> Host
+#ifdef __EMSCRIPTEN__
+EM_JS(int, qts_host_interrupt_handler, (JSRuntime * rt), {
+ // Async not supported here.
+ // #ifdef QTS_ASYNCIFY
+ // const asyncify = Asyncify;
+ // #else
+ const asyncify = undefined;
+ // #endif
+ return Module['callbacks']['shouldInterrupt'](asyncify, rt);
+});
+#endif
+
+// interrupt: QuickJS -> C
+int qts_interrupt_handler(JSRuntime *rt, void *_unused) {
+ return qts_host_interrupt_handler(rt);
+}
+
+// interrupt: Host -> QuickJS
+void QTS_RuntimeEnableInterruptHandler(JSRuntime *rt) {
+ JS_SetInterruptHandler(rt, &qts_interrupt_handler, NULL);
+}
+
+void QTS_RuntimeDisableInterruptHandler(JSRuntime *rt) {
+ JS_SetInterruptHandler(rt, NULL, NULL);
+}
+
+// --------------------
+// load module: C -> Host
+// TODO: a future version can support host returning JSModuleDef* directly;
+// for now we only support loading module source code.
+
+/*
+The module loading model under ASYNCIFY is convoluted. We need to make sure we
+never have an async request running concurrently for loading modules.
+
+The first implemenation looked like this:
+
+C HOST SUSPENDED
+qts_host_load_module(name) ------> false
+ call rt.loadModule(name) false
+ Start async load module false
+ Suspend C true
+ Async load complete true
+ < --------------- QTS_CompileModule(source) true
+QTS_Eval(source, COMPILE_ONLY) true
+Loaded module has import true
+qts_host_load_module(dep) -------> true
+ call rt.loadModule(dep) true
+ Start async load module true
+ ALREADY SUSPENDED, CRASH
+
+We can solve this in two different ways:
+
+1. Return to C as soon as we async load the module source.
+ That way, we unsuspend before calling QTS_CompileModule.
+2. Once we load the module, use a new API to detect and async
+ load the module's downstream dependencies. This way
+ they're loaded synchronously so we don't need to suspend "again".
+
+Probably we could optimize (2) to make it more performant, eg with parallel
+loading, but (1) seems much easier to implement in the sort run.
+*/
+
+JSModuleDef *qts_compile_module(JSContext *ctx, const char *module_name, BorrowedHeapChar *module_body) {
+#ifdef QTS_DEBUG_MODE
+ char msg[500];
+ sprintf(msg, "QTS_CompileModule(ctx: %p, name: %s, bodyLength: %lu)", ctx, module_name, strlen(module_body));
+ QTS_DEBUG(msg)
+#endif
+ JSValue func_val = JS_Eval(ctx, module_body, strlen(module_body), module_name, JS_EVAL_TYPE_MODULE | JS_EVAL_FLAG_COMPILE_ONLY);
+ if (JS_IsException(func_val)) {
+ return NULL;
+ }
+ // TODO: Is exception ok?
+ // TODO: set import.meta?
+ JSModuleDef *module = JS_VALUE_GET_PTR(func_val);
+ JS_FreeValue(ctx, func_val);
+ return module;
+}
+
+#ifdef __EMSCRIPTEN__
+EM_JS(MaybeAsync(char *), qts_host_load_module_source, (JSRuntime * rt, JSContext *ctx, const char *module_name), {
+#ifdef QTS_ASYNCIFY
+ const asyncify = {['handleSleep'] : Asyncify.handleSleep};
+#else
+ const asyncify = undefined;
+#endif
+ // https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString
+ const moduleNameString = UTF8ToString(module_name);
+ return Module['callbacks']['loadModuleSource'](asyncify, rt, ctx, moduleNameString);
+});
+
+EM_JS(MaybeAsync(char *), qts_host_normalize_module, (JSRuntime * rt, JSContext *ctx, const char *module_base_name, const char *module_name), {
+#ifdef QTS_ASYNCIFY
+ const asyncify = {['handleSleep'] : Asyncify.handleSleep};
+#else
+ const asyncify = undefined;
+#endif
+ // https://emscripten.org/docs/api_reference/preamble.js.html#UTF8ToString
+ const moduleBaseNameString = UTF8ToString(module_base_name);
+ const moduleNameString = UTF8ToString(module_name);
+ return Module['callbacks']['normalizeModule'](asyncify, rt, ctx, moduleBaseNameString, moduleNameString);
+});
+#endif
+
+// load module: QuickJS -> C
+// See js_module_loader in quickjs/quickjs-libc.c:567
+JSModuleDef *qts_load_module(JSContext *ctx, const char *module_name, void *_unused) {
+ JSRuntime *rt = JS_GetRuntime(ctx);
+#ifdef QTS_DEBUG_MODE
+ char msg[500];
+ sprintf(msg, "qts_load_module(rt: %p, ctx: %p, name: %s)", rt, ctx, module_name);
+ QTS_DEBUG(msg)
+#endif
+ char *module_source = qts_host_load_module_source(rt, ctx, module_name);
+ if (module_source == NULL) {
+ return NULL;
+ }
+
+ JSModuleDef *module = qts_compile_module(ctx, module_name, module_source);
+ free(module_source);
+ return module;
+}
+
+char *qts_normalize_module(JSContext *ctx, const char *module_base_name, const char *module_name, void *_unused) {
+ JSRuntime *rt = JS_GetRuntime(ctx);
+#ifdef QTS_DEBUG_MODE
+ char msg[500];
+ sprintf(msg, "qts_normalize_module(rt: %p, ctx: %p, base_name: %s, name: %s)", rt, ctx, module_base_name, module_name);
+ QTS_DEBUG(msg)
+#endif
+ char *em_module_name = qts_host_normalize_module(rt, ctx, module_base_name, module_name);
+ char *js_module_name = js_strdup(ctx, em_module_name);
+ free(em_module_name);
+ return js_module_name;
+}
+
+// Load module: Host -> QuickJS
+void QTS_RuntimeEnableModuleLoader(JSRuntime *rt, int use_custom_normalize) {
+ JSModuleNormalizeFunc *module_normalize = NULL; /* use default name normalizer */
+ if (use_custom_normalize) {
+ module_normalize = &qts_normalize_module;
+ }
+ JS_SetModuleLoaderFunc(rt, module_normalize, &qts_load_module, NULL);
+}
+
+void QTS_RuntimeDisableModuleLoader(JSRuntime *rt) {
+ JS_SetModuleLoaderFunc(rt, NULL, NULL, NULL);
+}
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.d.ts b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.d.ts
new file mode 100644
index 00000000..f3bb5990
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.d.ts
@@ -0,0 +1,24 @@
+declare function awaitYield(value: T | Promise): Generator, T, T>;
+declare function awaitYieldOf(generator: Generator, T, Yielded>): Generator, T, T>;
+export type AwaitYield = typeof awaitYield & {
+ of: typeof awaitYieldOf;
+};
+/**
+ * Create a function that may or may not be async, using a generator
+ *
+ * Within the generator, call `yield* awaited(maybePromise)` to await a value
+ * that may or may not be a promise.
+ *
+ * If the inner function never yields a promise, it will return synchronously.
+ */
+export declare function maybeAsyncFn<
+/** Function arguments */
+Args extends any[], This,
+/** Function return type */
+Return,
+/** Yields to unwrap */
+Yielded>(that: This, fn: (this: This, awaited: AwaitYield, ...args: Args) => Generator, Return, Yielded>): (...args: Args) => Return | Promise;
+export type MaybeAsyncBlock = (this: This, awaited: AwaitYield, ...args: Args) => Generator, Return, Yielded>;
+export declare function maybeAsync(that: This, startGenerator: (this: This, await: AwaitYield) => Generator, Return, Yielded>): Return | Promise;
+export declare function awaitEachYieldedPromise(gen: Generator, Returned, Yielded>): Returned | Promise;
+export {};
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js
new file mode 100644
index 00000000..c140dded
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js
@@ -0,0 +1,53 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.awaitEachYieldedPromise = exports.maybeAsync = exports.maybeAsyncFn = void 0;
+function* awaitYield(value) {
+ return (yield value);
+}
+function awaitYieldOf(generator) {
+ return awaitYield(awaitEachYieldedPromise(generator));
+}
+const AwaitYield = awaitYield;
+AwaitYield.of = awaitYieldOf;
+/**
+ * Create a function that may or may not be async, using a generator
+ *
+ * Within the generator, call `yield* awaited(maybePromise)` to await a value
+ * that may or may not be a promise.
+ *
+ * If the inner function never yields a promise, it will return synchronously.
+ */
+function maybeAsyncFn(that, fn) {
+ return (...args) => {
+ const generator = fn.call(that, AwaitYield, ...args);
+ return awaitEachYieldedPromise(generator);
+ };
+}
+exports.maybeAsyncFn = maybeAsyncFn;
+class Example {
+ constructor() {
+ this.maybeAsyncMethod = maybeAsyncFn(this, function* (awaited, a) {
+ yield* awaited(new Promise((resolve) => setTimeout(resolve, a)));
+ return 5;
+ });
+ }
+}
+function maybeAsync(that, startGenerator) {
+ const generator = startGenerator.call(that, AwaitYield);
+ return awaitEachYieldedPromise(generator);
+}
+exports.maybeAsync = maybeAsync;
+function awaitEachYieldedPromise(gen) {
+ function handleNextStep(step) {
+ if (step.done) {
+ return step.value;
+ }
+ if (step.value instanceof Promise) {
+ return step.value.then((value) => handleNextStep(gen.next(value)), (error) => handleNextStep(gen.throw(error)));
+ }
+ return handleNextStep(gen.next(step.value));
+ }
+ return handleNextStep(gen.next());
+}
+exports.awaitEachYieldedPromise = awaitEachYieldedPromise;
+//# sourceMappingURL=asyncify-helpers.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js.map b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js.map
new file mode 100644
index 00000000..10dcc46b
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/asyncify-helpers.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"asyncify-helpers.js","sourceRoot":"","sources":["../ts/asyncify-helpers.ts"],"names":[],"mappings":";;;AAAA,QAAQ,CAAC,CAAC,UAAU,CAAI,KAAqB;IAC3C,OAAO,CAAC,MAAM,KAAK,CAAM,CAAA;AAC3B,CAAC;AAED,SAAS,YAAY,CACnB,SAA4D;IAE5D,OAAO,UAAU,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC,CAAA;AACvD,CAAC;AAMD,MAAM,UAAU,GAAe,UAAwB,CAAA;AACvD,UAAU,CAAC,EAAE,GAAG,YAAY,CAAA;AAE5B;;;;;;;GAOG;AACH,SAAgB,YAAY,CAS1B,IAAU,EACV,EAI2D;IAE3D,OAAO,CAAC,GAAG,IAAU,EAAE,EAAE;QACvB,MAAM,SAAS,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,CAAA;QACpD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAA;IAC3C,CAAC,CAAA;AACH,CAAC;AApBD,oCAoBC;AAED,MAAM,OAAO;IAAb;QACU,qBAAgB,GAAG,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAS;YACzE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAChE,OAAO,CAAC,CAAA;QACV,CAAC,CAAC,CAAA;IACJ,CAAC;CAAA;AAQD,SAAgB,UAAU,CACxB,IAAU,EACV,cAG2D;IAE3D,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IACvD,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAA;AAC3C,CAAC;AATD,gCASC;AAED,SAAgB,uBAAuB,CACrC,GAA6D;IAI7D,SAAS,cAAc,CAAC,IAAgB;QACtC,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,KAAK,CAAA;SAClB;QAED,IAAI,IAAI,CAAC,KAAK,YAAY,OAAO,EAAE;YACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CACpB,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC1C,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAC5C,CAAA;SACF;QAED,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;AACnC,CAAC;AArBD,0DAqBC","sourcesContent":["function* awaitYield(value: T | Promise) {\n return (yield value) as T\n}\n\nfunction awaitYieldOf(\n generator: Generator, T, Yielded>\n): Generator, T, T> {\n return awaitYield(awaitEachYieldedPromise(generator))\n}\n\nexport type AwaitYield = typeof awaitYield & {\n of: typeof awaitYieldOf\n}\n\nconst AwaitYield: AwaitYield = awaitYield as AwaitYield\nAwaitYield.of = awaitYieldOf\n\n/**\n * Create a function that may or may not be async, using a generator\n *\n * Within the generator, call `yield* awaited(maybePromise)` to await a value\n * that may or may not be a promise.\n *\n * If the inner function never yields a promise, it will return synchronously.\n */\nexport function maybeAsyncFn<\n /** Function arguments */\n Args extends any[],\n This,\n /** Function return type */\n Return,\n /** Yields to unwrap */\n Yielded\n>(\n that: This,\n fn: (\n this: This,\n awaited: AwaitYield,\n ...args: Args\n ) => Generator, Return, Yielded>\n): (...args: Args) => Return | Promise {\n return (...args: Args) => {\n const generator = fn.call(that, AwaitYield, ...args)\n return awaitEachYieldedPromise(generator)\n }\n}\n\nclass Example {\n private maybeAsyncMethod = maybeAsyncFn(this, function* (awaited, a: number) {\n yield* awaited(new Promise((resolve) => setTimeout(resolve, a)))\n return 5\n })\n}\n\nexport type MaybeAsyncBlock = (\n this: This,\n awaited: AwaitYield,\n ...args: Args\n) => Generator, Return, Yielded>\n\nexport function maybeAsync(\n that: This,\n startGenerator: (\n this: This,\n await: AwaitYield\n ) => Generator, Return, Yielded>\n): Return | Promise {\n const generator = startGenerator.call(that, AwaitYield)\n return awaitEachYieldedPromise(generator)\n}\n\nexport function awaitEachYieldedPromise(\n gen: Generator, Returned, Yielded>\n): Returned | Promise {\n type NextResult = ReturnType\n\n function handleNextStep(step: NextResult): Returned | Promise {\n if (step.done) {\n return step.value\n }\n\n if (step.value instanceof Promise) {\n return step.value.then(\n (value) => handleNextStep(gen.next(value)),\n (error) => handleNextStep(gen.throw(error))\n )\n }\n\n return handleNextStep(gen.next(step.value))\n }\n\n return handleNextStep(gen.next())\n}\n"]}
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.d.ts b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.d.ts
new file mode 100644
index 00000000..290a9ec5
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.d.ts
@@ -0,0 +1,48 @@
+import { QuickJSContext } from "./context";
+import { QuickJSAsyncEmscriptenModule } from "./emscripten-types";
+import { QuickJSAsyncFFI } from "./variants";
+import { JSRuntimePointer } from "./types-ffi";
+import { Lifetime } from "./lifetime";
+import { QuickJSModuleCallbacks } from "./module";
+import { QuickJSAsyncRuntime } from "./runtime-asyncify";
+import { ContextEvalOptions, QuickJSHandle } from "./types";
+import { VmCallResult } from "./vm-interface";
+export type AsyncFunctionImplementation = (this: QuickJSHandle, ...args: QuickJSHandle[]) => Promise | void>;
+/**
+ * Asyncified version of [[QuickJSContext]].
+ *
+ * *Asyncify* allows normally synchronous code to wait for asynchronous Promises
+ * or callbacks. The asyncified version of QuickJSContext can wait for async
+ * host functions as though they were synchronous.
+ */
+export declare class QuickJSAsyncContext extends QuickJSContext {
+ runtime: QuickJSAsyncRuntime;
+ /** @private */
+ protected module: QuickJSAsyncEmscriptenModule;
+ /** @private */
+ protected ffi: QuickJSAsyncFFI;
+ /** @private */
+ protected rt: Lifetime;
+ /** @private */
+ protected callbacks: QuickJSModuleCallbacks;
+ /**
+ * Asyncified version of [[evalCode]].
+ */
+ evalCodeAsync(code: string, filename?: string,
+ /** See [[EvalFlags]] for number semantics */
+ options?: number | ContextEvalOptions): Promise>;
+ /**
+ * Similar to [[newFunction]].
+ * Convert an async host Javascript function into a synchronous QuickJS function value.
+ *
+ * Whenever QuickJS calls this function, the VM's stack will be unwound while
+ * waiting the async function to complete, and then restored when the returned
+ * promise resolves.
+ *
+ * Asyncified functions must never call other asyncified functions or
+ * `import`, even indirectly, because the stack cannot be unwound twice.
+ *
+ * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html).
+ */
+ newAsyncifiedFunction(name: string, fn: AsyncFunctionImplementation): QuickJSHandle;
+}
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js
new file mode 100644
index 00000000..7b3fe560
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js
@@ -0,0 +1,58 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.QuickJSAsyncContext = void 0;
+const context_1 = require("./context");
+const debug_1 = require("./debug");
+const types_1 = require("./types");
+/**
+ * Asyncified version of [[QuickJSContext]].
+ *
+ * *Asyncify* allows normally synchronous code to wait for asynchronous Promises
+ * or callbacks. The asyncified version of QuickJSContext can wait for async
+ * host functions as though they were synchronous.
+ */
+class QuickJSAsyncContext extends context_1.QuickJSContext {
+ /**
+ * Asyncified version of [[evalCode]].
+ */
+ async evalCodeAsync(code, filename = "eval.js",
+ /** See [[EvalFlags]] for number semantics */
+ options) {
+ const detectModule = (options === undefined ? 1 : 0);
+ const flags = (0, types_1.evalOptionsToFlags)(options);
+ let resultPtr = 0;
+ try {
+ resultPtr = await this.memory
+ .newHeapCharPointer(code)
+ .consume((charHandle) => this.ffi.QTS_Eval_MaybeAsync(this.ctx.value, charHandle.value, filename, detectModule, flags));
+ }
+ catch (error) {
+ (0, debug_1.debugLog)("QTS_Eval_MaybeAsync threw", error);
+ throw error;
+ }
+ const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
+ if (errorPtr) {
+ this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
+ return { error: this.memory.heapValueHandle(errorPtr) };
+ }
+ return { value: this.memory.heapValueHandle(resultPtr) };
+ }
+ /**
+ * Similar to [[newFunction]].
+ * Convert an async host Javascript function into a synchronous QuickJS function value.
+ *
+ * Whenever QuickJS calls this function, the VM's stack will be unwound while
+ * waiting the async function to complete, and then restored when the returned
+ * promise resolves.
+ *
+ * Asyncified functions must never call other asyncified functions or
+ * `import`, even indirectly, because the stack cannot be unwound twice.
+ *
+ * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html).
+ */
+ newAsyncifiedFunction(name, fn) {
+ return this.newFunction(name, fn);
+ }
+}
+exports.QuickJSAsyncContext = QuickJSAsyncContext;
+//# sourceMappingURL=context-asyncify.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js.map b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js.map
new file mode 100644
index 00000000..93695e27
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context-asyncify.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"context-asyncify.js","sourceRoot":"","sources":["../ts/context-asyncify.ts"],"names":[],"mappings":";;;AAAA,uCAA0C;AAC1C,mCAAkC;AAOlC,mCAA+E;AAQ/E;;;;;;GAMG;AACH,MAAa,mBAAoB,SAAQ,wBAAc;IAWrD;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,IAAY,EACZ,WAAmB,SAAS;IAC5B,6CAA6C;IAC7C,OAAqC;QAErC,MAAM,YAAY,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAqB,CAAA;QACxE,MAAM,KAAK,GAAG,IAAA,0BAAkB,EAAC,OAAO,CAAc,CAAA;QACtD,IAAI,SAAS,GAAG,CAAmB,CAAA;QACnC,IAAI;YACF,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM;iBAC1B,kBAAkB,CAAC,IAAI,CAAC;iBACxB,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,EACd,UAAU,CAAC,KAAK,EAChB,QAAQ,EACR,YAAY,EACZ,KAAK,CACN,CACF,CAAA;SACJ;QAAC,OAAO,KAAK,EAAE;YACd,IAAA,gBAAQ,EAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;YAC5C,MAAM,KAAK,CAAA;SACZ;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACzE,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;YACxD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAA;SACxD;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAA;IAC1D,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,qBAAqB,CAAC,IAAY,EAAE,EAA+B;QACjE,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC1C,CAAC;CACF;AA/DD,kDA+DC","sourcesContent":["import { QuickJSContext } from \"./context\"\nimport { debugLog } from \"./debug\"\nimport { QuickJSAsyncEmscriptenModule } from \"./emscripten-types\"\nimport { QuickJSAsyncFFI } from \"./variants\"\nimport { EvalDetectModule, EvalFlags, JSRuntimePointer, JSValuePointer } from \"./types-ffi\"\nimport { Lifetime } from \"./lifetime\"\nimport { QuickJSModuleCallbacks } from \"./module\"\nimport { QuickJSAsyncRuntime } from \"./runtime-asyncify\"\nimport { ContextEvalOptions, evalOptionsToFlags, QuickJSHandle } from \"./types\"\nimport { VmCallResult } from \"./vm-interface\"\n\nexport type AsyncFunctionImplementation = (\n this: QuickJSHandle,\n ...args: QuickJSHandle[]\n) => Promise | void>\n\n/**\n * Asyncified version of [[QuickJSContext]].\n *\n * *Asyncify* allows normally synchronous code to wait for asynchronous Promises\n * or callbacks. The asyncified version of QuickJSContext can wait for async\n * host functions as though they were synchronous.\n */\nexport class QuickJSAsyncContext extends QuickJSContext {\n public declare runtime: QuickJSAsyncRuntime\n /** @private */\n protected declare module: QuickJSAsyncEmscriptenModule\n /** @private */\n protected declare ffi: QuickJSAsyncFFI\n /** @private */\n protected declare rt: Lifetime\n /** @private */\n protected declare callbacks: QuickJSModuleCallbacks\n\n /**\n * Asyncified version of [[evalCode]].\n */\n async evalCodeAsync(\n code: string,\n filename: string = \"eval.js\",\n /** See [[EvalFlags]] for number semantics */\n options?: number | ContextEvalOptions\n ): Promise> {\n const detectModule = (options === undefined ? 1 : 0) as EvalDetectModule\n const flags = evalOptionsToFlags(options) as EvalFlags\n let resultPtr = 0 as JSValuePointer\n try {\n resultPtr = await this.memory\n .newHeapCharPointer(code)\n .consume((charHandle) =>\n this.ffi.QTS_Eval_MaybeAsync(\n this.ctx.value,\n charHandle.value,\n filename,\n detectModule,\n flags\n )\n )\n } catch (error) {\n debugLog(\"QTS_Eval_MaybeAsync threw\", error)\n throw error\n }\n const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr)\n if (errorPtr) {\n this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr)\n return { error: this.memory.heapValueHandle(errorPtr) }\n }\n return { value: this.memory.heapValueHandle(resultPtr) }\n }\n\n /**\n * Similar to [[newFunction]].\n * Convert an async host Javascript function into a synchronous QuickJS function value.\n *\n * Whenever QuickJS calls this function, the VM's stack will be unwound while\n * waiting the async function to complete, and then restored when the returned\n * promise resolves.\n *\n * Asyncified functions must never call other asyncified functions or\n * `import`, even indirectly, because the stack cannot be unwound twice.\n *\n * See [Emscripten's docs on Asyncify](https://emscripten.org/docs/porting/asyncify.html).\n */\n newAsyncifiedFunction(name: string, fn: AsyncFunctionImplementation): QuickJSHandle {\n return this.newFunction(name, fn as any)\n }\n}\n"]}
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.d.ts b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.d.ts
new file mode 100644
index 00000000..d30d1999
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.d.ts
@@ -0,0 +1,371 @@
+import { QuickJSDeferredPromise } from "./deferred-promise";
+import type { EitherModule } from "./emscripten-types";
+import { JSBorrowedCharPointer, JSContextPointer, JSRuntimePointer, JSValueConstPointer, JSValuePointer } from "./types-ffi";
+import { Disposable, Lifetime, Scope } from "./lifetime";
+import { ModuleMemory } from "./memory";
+import { QuickJSModuleCallbacks } from "./module";
+import { QuickJSRuntime } from "./runtime";
+import { ContextEvalOptions, EitherFFI, JSValue, PromiseExecutor, QuickJSHandle } from "./types";
+import { LowLevelJavascriptVm, SuccessOrFail, VmCallResult, VmFunctionImplementation, VmPropertyDescriptor } from "./vm-interface";
+/**
+ * Property key for getting or setting a property on a handle with
+ * [[QuickJSContext.getProp]], [[QuickJSContext.setProp]], or [[QuickJSContext.defineProp]].
+ */
+export type QuickJSPropertyKey = number | string | QuickJSHandle;
+/**
+ * @private
+ */
+declare class ContextMemory extends ModuleMemory implements Disposable {
+ readonly owner: QuickJSRuntime;
+ readonly ctx: Lifetime;
+ readonly rt: Lifetime;
+ readonly module: EitherModule;
+ readonly ffi: EitherFFI;
+ readonly scope: Scope;
+ /** @private */
+ constructor(args: {
+ owner: QuickJSRuntime;
+ module: EitherModule;
+ ffi: EitherFFI;
+ ctx: Lifetime;
+ rt: Lifetime;
+ ownedLifetimes?: Disposable[];
+ });
+ get alive(): boolean;
+ dispose(): void;
+ /**
+ * Track `lifetime` so that it is disposed when this scope is disposed.
+ */
+ manage(lifetime: T): T;
+ copyJSValue: (ptr: JSValuePointer | JSValueConstPointer) => any;
+ freeJSValue: (ptr: JSValuePointer) => void;
+ consumeJSCharPointer(ptr: JSBorrowedCharPointer): string;
+ heapValueHandle(ptr: JSValuePointer): JSValue;
+}
+/**
+ * QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a
+ * runtime. The contexts within the same runtime may exchange objects freely.
+ * You can think of separate runtimes like different domains in a browser, and
+ * the contexts within a runtime like the different windows open to the same
+ * domain. The {@link runtime} references the context's runtime.
+ *
+ * This class's methods return {@link QuickJSHandle}, which wrap C pointers (JSValue*).
+ * It's the caller's responsibility to call `.dispose()` on any
+ * handles you create to free memory once you're done with the handle.
+ *
+ * Use {@link QuickJSRuntime.newContext} or {@link QuickJSWASMModule.newContext}
+ * to create a new QuickJSContext.
+ *
+ * Create QuickJS values inside the interpreter with methods like
+ * [[newNumber]], [[newString]], [[newArray]], [[newObject]],
+ * [[newFunction]], and [[newPromise]].
+ *
+ * Call [[setProp]] or [[defineProp]] to customize objects. Use those methods
+ * with [[global]] to expose the values you create to the interior of the
+ * interpreter, so they can be used in [[evalCode]].
+ *
+ * Use [[evalCode]] or [[callFunction]] to execute Javascript inside the VM. If
+ * you're using asynchronous code inside the QuickJSContext, you may need to also
+ * call [[executePendingJobs]]. Executing code inside the runtime returns a
+ * result object representing successful execution or an error. You must dispose
+ * of any such results to avoid leaking memory inside the VM.
+ *
+ * Implement memory and CPU constraints at the runtime level, using [[runtime]].
+ * See {@link QuickJSRuntime} for more information.
+ *
+ */
+export declare class QuickJSContext implements LowLevelJavascriptVm, Disposable {
+ /**
+ * The runtime that created this context.
+ */
+ readonly runtime: QuickJSRuntime;
+ /** @private */
+ protected readonly ctx: Lifetime;
+ /** @private */
+ protected readonly rt: Lifetime;
+ /** @private */
+ protected readonly module: EitherModule;
+ /** @private */
+ protected readonly ffi: EitherFFI;
+ /** @private */
+ protected memory: ContextMemory;
+ /** @private */
+ protected _undefined: QuickJSHandle | undefined;
+ /** @private */
+ protected _null: QuickJSHandle | undefined;
+ /** @private */
+ protected _false: QuickJSHandle | undefined;
+ /** @private */
+ protected _true: QuickJSHandle | undefined;
+ /** @private */
+ protected _global: QuickJSHandle | undefined;
+ /** @private */
+ protected _BigInt: QuickJSHandle | undefined;
+ /**
+ * Use {@link QuickJS.createVm} to create a QuickJSContext instance.
+ */
+ constructor(args: {
+ module: EitherModule;
+ ffi: EitherFFI;
+ ctx: Lifetime;
+ rt: Lifetime;
+ runtime: QuickJSRuntime;
+ ownedLifetimes?: Disposable[];
+ callbacks: QuickJSModuleCallbacks;
+ });
+ get alive(): boolean;
+ /**
+ * Dispose of this VM's underlying resources.
+ *
+ * @throws Calling this method without disposing of all created handles
+ * will result in an error.
+ */
+ dispose(): void;
+ /**
+ * [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined).
+ */
+ get undefined(): QuickJSHandle;
+ /**
+ * [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null).
+ */
+ get null(): QuickJSHandle;
+ /**
+ * [`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true).
+ */
+ get true(): QuickJSHandle;
+ /**
+ * [`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false).
+ */
+ get false(): QuickJSHandle;
+ /**
+ * [`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects).
+ * A handle to the global object inside the interpreter.
+ * You can set properties to create global variables.
+ */
+ get global(): QuickJSHandle;
+ /**
+ * Converts a Javascript number into a QuickJS value.
+ */
+ newNumber(num: number): QuickJSHandle;
+ /**
+ * Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value.
+ */
+ newString(str: string): QuickJSHandle;
+ /**
+ * Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value.
+ * No two symbols created with this function will be the same value.
+ */
+ newUniqueSymbol(description: string | symbol): QuickJSHandle;
+ /**
+ * Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key.
+ * All symbols created with the same key will be the same value.
+ */
+ newSymbolFor(key: string | symbol): QuickJSHandle;
+ /**
+ * Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value.
+ */
+ newBigInt(num: bigint): QuickJSHandle;
+ /**
+ * `{}`.
+ * Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer).
+ *
+ * @param prototype - Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create).
+ */
+ newObject(prototype?: QuickJSHandle): QuickJSHandle;
+ /**
+ * `[]`.
+ * Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
+ */
+ newArray(): QuickJSHandle;
+ /**
+ * Create a new [[QuickJSDeferredPromise]]. Use `deferred.resolve(handle)` and
+ * `deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`.
+ * Note that you are responsible for calling `deferred.dispose()` to free the underlying
+ * resources; see the documentation on [[QuickJSDeferredPromise]] for details.
+ */
+ newPromise(): QuickJSDeferredPromise;
+ /**
+ * Create a new [[QuickJSDeferredPromise]] that resolves when the
+ * given native Promise resolves. Rejections will be coerced
+ * to a QuickJS error.
+ *
+ * You can still resolve/reject the created promise "early" using its methods.
+ */
+ newPromise(promise: Promise): QuickJSDeferredPromise;
+ /**
+ * Construct a new native Promise, and then convert it into a
+ * [[QuickJSDeferredPromise]].
+ *
+ * You can still resolve/reject the created promise "early" using its methods.
+ */
+ newPromise(newPromiseFn: PromiseExecutor): QuickJSDeferredPromise;
+ /**
+ * Convert a Javascript function into a QuickJS function value.
+ * See [[VmFunctionImplementation]] for more details.
+ *
+ * A [[VmFunctionImplementation]] should not free its arguments or its return
+ * value. A VmFunctionImplementation should also not retain any references to
+ * its return value.
+ *
+ * To implement an async function, create a promise with [[newPromise]], then
+ * return the deferred promise handle from `deferred.handle` from your
+ * function implementation:
+ *
+ * ```
+ * const deferred = vm.newPromise()
+ * someNativeAsyncFunction().then(deferred.resolve)
+ * return deferred.handle
+ * ```
+ */
+ newFunction(name: string, fn: VmFunctionImplementation): QuickJSHandle;
+ newError(error: {
+ name: string;
+ message: string;
+ }): QuickJSHandle;
+ newError(message: string): QuickJSHandle;
+ newError(): QuickJSHandle;
+ /**
+ * `typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).
+ *
+ * @remarks
+ * Does not support BigInt values correctly.
+ */
+ typeof(handle: QuickJSHandle): string;
+ /**
+ * Converts `handle` into a Javascript number.
+ * @returns `NaN` on error, otherwise a `number`.
+ */
+ getNumber(handle: QuickJSHandle): number;
+ /**
+ * Converts `handle` to a Javascript string.
+ */
+ getString(handle: QuickJSHandle): string;
+ /**
+ * Converts `handle` into a Javascript symbol. If the symbol is in the global
+ * registry in the guest, it will be created with Symbol.for on the host.
+ */
+ getSymbol(handle: QuickJSHandle): symbol;
+ /**
+ * Converts `handle` to a Javascript bigint.
+ */
+ getBigInt(handle: QuickJSHandle): bigint;
+ /**
+ * `Promise.resolve(value)`.
+ * Convert a handle containing a Promise-like value inside the VM into an
+ * actual promise on the host.
+ *
+ * @remarks
+ * You may need to call [[executePendingJobs]] to ensure that the promise is resolved.
+ *
+ * @param promiseLikeHandle - A handle to a Promise-like value with a `.then(onSuccess, onError)` method.
+ */
+ resolvePromise(promiseLikeHandle: QuickJSHandle): Promise>;
+ /**
+ * `handle[key]`.
+ * Get a property from a JSValue.
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string (which will be converted automatically).
+ */
+ getProp(handle: QuickJSHandle, key: QuickJSPropertyKey): QuickJSHandle;
+ /**
+ * `handle[key] = value`.
+ * Set a property on a JSValue.
+ *
+ * @remarks
+ * Note that the QuickJS authors recommend using [[defineProp]] to define new
+ * properties.
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string or number (which will be converted automatically to a JSValue).
+ */
+ setProp(handle: QuickJSHandle, key: QuickJSPropertyKey, value: QuickJSHandle): void;
+ /**
+ * [`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty).
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string or number (which will be converted automatically to a JSValue).
+ */
+ defineProp(handle: QuickJSHandle, key: QuickJSPropertyKey, descriptor: VmPropertyDescriptor): void;
+ /**
+ * [`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call).
+ * Call a JSValue as a function.
+ *
+ * See [[unwrapResult]], which will throw if the function returned an error, or
+ * return the result handle directly. If evaluation returned a handle containing
+ * a promise, use [[resolvePromise]] to convert it to a native promise and
+ * [[executePendingJobs]] to finish evaluating the promise.
+ *
+ * @returns A result. If the function threw synchronously, `result.error` be a
+ * handle to the exception. Otherwise `result.value` will be a handle to the
+ * value.
+ */
+ callFunction(func: QuickJSHandle, thisVal: QuickJSHandle, ...args: QuickJSHandle[]): VmCallResult;
+ /**
+ * Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description).
+ * Evaluates the Javascript source `code` in the global scope of this VM.
+ * When working with async code, you many need to call [[executePendingJobs]]
+ * to execute callbacks pending after synchronous evaluation returns.
+ *
+ * See [[unwrapResult]], which will throw if the function returned an error, or
+ * return the result handle directly. If evaluation returned a handle containing
+ * a promise, use [[resolvePromise]] to convert it to a native promise and
+ * [[executePendingJobs]] to finish evaluating the promise.
+ *
+ * *Note*: to protect against infinite loops, provide an interrupt handler to
+ * [[setInterruptHandler]]. You can use [[shouldInterruptAfterDeadline]] to
+ * create a time-based deadline.
+ *
+ * @returns The last statement's value. If the code threw synchronously,
+ * `result.error` will be a handle to the exception. If execution was
+ * interrupted, the error will have name `InternalError` and message
+ * `interrupted`.
+ */
+ evalCode(code: string, filename?: string,
+ /**
+ * If no options are passed, a heuristic will be used to detect if `code` is
+ * an ES module.
+ *
+ * See [[EvalFlags]] for number semantics.
+ */
+ options?: number | ContextEvalOptions): VmCallResult;
+ /**
+ * Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes.
+ * @experimental
+ */
+ throw(error: Error | QuickJSHandle): any;
+ /**
+ * @private
+ */
+ protected borrowPropertyKey(key: QuickJSPropertyKey): QuickJSHandle;
+ /**
+ * @private
+ */
+ getMemory(rt: JSRuntimePointer): ContextMemory;
+ /**
+ * Dump a JSValue to Javascript in a best-effort fashion.
+ * Returns `handle.toString()` if it cannot be serialized to JSON.
+ */
+ dump(handle: QuickJSHandle): any;
+ /**
+ * Unwrap a SuccessOrFail result such as a [[VmCallResult]] or a
+ * [[ExecutePendingJobsResult]], where the fail branch contains a handle to a QuickJS error value.
+ * If the result is a success, returns the value.
+ * If the result is an error, converts the error to a native object and throws the error.
+ */
+ unwrapResult(result: SuccessOrFail): T;
+ /** @private */
+ protected fnNextId: number;
+ /** @private */
+ protected fnMaps: Map>>;
+ /** @private */
+ protected getFunction(fn_id: number): VmFunctionImplementation | undefined;
+ /** @private */
+ protected setFunction(fn_id: number, handle: VmFunctionImplementation): Map>;
+ /**
+ * @hidden
+ */
+ private cToHostCallbacks;
+ private errorToHandle;
+}
+export {};
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js
new file mode 100644
index 00000000..e65258d2
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js
@@ -0,0 +1,691 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.QuickJSContext = void 0;
+const debug_1 = require("./debug");
+const deferred_promise_1 = require("./deferred-promise");
+const errors_1 = require("./errors");
+const lifetime_1 = require("./lifetime");
+const memory_1 = require("./memory");
+const types_1 = require("./types");
+/**
+ * @private
+ */
+class ContextMemory extends memory_1.ModuleMemory {
+ /** @private */
+ constructor(args) {
+ super(args.module);
+ this.scope = new lifetime_1.Scope();
+ this.copyJSValue = (ptr) => {
+ return this.ffi.QTS_DupValuePointer(this.ctx.value, ptr);
+ };
+ this.freeJSValue = (ptr) => {
+ this.ffi.QTS_FreeValuePointer(this.ctx.value, ptr);
+ };
+ args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime));
+ this.owner = args.owner;
+ this.module = args.module;
+ this.ffi = args.ffi;
+ this.rt = args.rt;
+ this.ctx = this.scope.manage(args.ctx);
+ }
+ get alive() {
+ return this.scope.alive;
+ }
+ dispose() {
+ return this.scope.dispose();
+ }
+ /**
+ * Track `lifetime` so that it is disposed when this scope is disposed.
+ */
+ manage(lifetime) {
+ return this.scope.manage(lifetime);
+ }
+ consumeJSCharPointer(ptr) {
+ const str = this.module.UTF8ToString(ptr);
+ this.ffi.QTS_FreeCString(this.ctx.value, ptr);
+ return str;
+ }
+ heapValueHandle(ptr) {
+ return new lifetime_1.Lifetime(ptr, this.copyJSValue, this.freeJSValue, this.owner);
+ }
+}
+/**
+ * QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a
+ * runtime. The contexts within the same runtime may exchange objects freely.
+ * You can think of separate runtimes like different domains in a browser, and
+ * the contexts within a runtime like the different windows open to the same
+ * domain. The {@link runtime} references the context's runtime.
+ *
+ * This class's methods return {@link QuickJSHandle}, which wrap C pointers (JSValue*).
+ * It's the caller's responsibility to call `.dispose()` on any
+ * handles you create to free memory once you're done with the handle.
+ *
+ * Use {@link QuickJSRuntime.newContext} or {@link QuickJSWASMModule.newContext}
+ * to create a new QuickJSContext.
+ *
+ * Create QuickJS values inside the interpreter with methods like
+ * [[newNumber]], [[newString]], [[newArray]], [[newObject]],
+ * [[newFunction]], and [[newPromise]].
+ *
+ * Call [[setProp]] or [[defineProp]] to customize objects. Use those methods
+ * with [[global]] to expose the values you create to the interior of the
+ * interpreter, so they can be used in [[evalCode]].
+ *
+ * Use [[evalCode]] or [[callFunction]] to execute Javascript inside the VM. If
+ * you're using asynchronous code inside the QuickJSContext, you may need to also
+ * call [[executePendingJobs]]. Executing code inside the runtime returns a
+ * result object representing successful execution or an error. You must dispose
+ * of any such results to avoid leaking memory inside the VM.
+ *
+ * Implement memory and CPU constraints at the runtime level, using [[runtime]].
+ * See {@link QuickJSRuntime} for more information.
+ *
+ */
+// TODO: Manage own callback registration
+class QuickJSContext {
+ /**
+ * Use {@link QuickJS.createVm} to create a QuickJSContext instance.
+ */
+ constructor(args) {
+ /** @private */
+ this._undefined = undefined;
+ /** @private */
+ this._null = undefined;
+ /** @private */
+ this._false = undefined;
+ /** @private */
+ this._true = undefined;
+ /** @private */
+ this._global = undefined;
+ /** @private */
+ this._BigInt = undefined;
+ /** @private */
+ this.fnNextId = -32768; // min value of signed 16bit int used by Quickjs
+ /** @private */
+ this.fnMaps = new Map();
+ /**
+ * @hidden
+ */
+ this.cToHostCallbacks = {
+ callFunction: (ctx, this_ptr, argc, argv, fn_id) => {
+ if (ctx !== this.ctx.value) {
+ throw new Error("QuickJSContext instance received C -> JS call with mismatched ctx");
+ }
+ const fn = this.getFunction(fn_id);
+ if (!fn) {
+ // this "throw" is not catch-able from the TS side. could we somehow handle this higher up?
+ throw new Error(`QuickJSContext had no callback with id ${fn_id}`);
+ }
+ return lifetime_1.Scope.withScopeMaybeAsync(this, function* (awaited, scope) {
+ const thisHandle = scope.manage(new lifetime_1.WeakLifetime(this_ptr, this.memory.copyJSValue, this.memory.freeJSValue, this.runtime));
+ const argHandles = new Array(argc);
+ for (let i = 0; i < argc; i++) {
+ const ptr = this.ffi.QTS_ArgvGetJSValueConstPointer(argv, i);
+ argHandles[i] = scope.manage(new lifetime_1.WeakLifetime(ptr, this.memory.copyJSValue, this.memory.freeJSValue, this.runtime));
+ }
+ try {
+ const result = yield* awaited(fn.apply(thisHandle, argHandles));
+ if (result) {
+ if ("error" in result && result.error) {
+ (0, debug_1.debugLog)("throw error", result.error);
+ throw result.error;
+ }
+ const handle = scope.manage(result instanceof lifetime_1.Lifetime ? result : result.value);
+ return this.ffi.QTS_DupValuePointer(this.ctx.value, handle.value);
+ }
+ return 0;
+ }
+ catch (error) {
+ return this.errorToHandle(error).consume((errorHandle) => this.ffi.QTS_Throw(this.ctx.value, errorHandle.value));
+ }
+ });
+ },
+ };
+ this.runtime = args.runtime;
+ this.module = args.module;
+ this.ffi = args.ffi;
+ this.rt = args.rt;
+ this.ctx = args.ctx;
+ this.memory = new ContextMemory({
+ ...args,
+ owner: this.runtime,
+ });
+ args.callbacks.setContextCallbacks(this.ctx.value, this.cToHostCallbacks);
+ this.dump = this.dump.bind(this);
+ this.getString = this.getString.bind(this);
+ this.getNumber = this.getNumber.bind(this);
+ this.resolvePromise = this.resolvePromise.bind(this);
+ }
+ // @implement Disposable ----------------------------------------------------
+ get alive() {
+ return this.memory.alive;
+ }
+ /**
+ * Dispose of this VM's underlying resources.
+ *
+ * @throws Calling this method without disposing of all created handles
+ * will result in an error.
+ */
+ dispose() {
+ this.memory.dispose();
+ }
+ // Globals ------------------------------------------------------------------
+ /**
+ * [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined).
+ */
+ get undefined() {
+ if (this._undefined) {
+ return this._undefined;
+ }
+ // Undefined is a constant, immutable value in QuickJS.
+ const ptr = this.ffi.QTS_GetUndefined();
+ return (this._undefined = new lifetime_1.StaticLifetime(ptr));
+ }
+ /**
+ * [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null).
+ */
+ get null() {
+ if (this._null) {
+ return this._null;
+ }
+ // Null is a constant, immutable value in QuickJS.
+ const ptr = this.ffi.QTS_GetNull();
+ return (this._null = new lifetime_1.StaticLifetime(ptr));
+ }
+ /**
+ * [`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true).
+ */
+ get true() {
+ if (this._true) {
+ return this._true;
+ }
+ // True is a constant, immutable value in QuickJS.
+ const ptr = this.ffi.QTS_GetTrue();
+ return (this._true = new lifetime_1.StaticLifetime(ptr));
+ }
+ /**
+ * [`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false).
+ */
+ get false() {
+ if (this._false) {
+ return this._false;
+ }
+ // False is a constant, immutable value in QuickJS.
+ const ptr = this.ffi.QTS_GetFalse();
+ return (this._false = new lifetime_1.StaticLifetime(ptr));
+ }
+ /**
+ * [`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects).
+ * A handle to the global object inside the interpreter.
+ * You can set properties to create global variables.
+ */
+ get global() {
+ if (this._global) {
+ return this._global;
+ }
+ // The global is a JSValue, but since it's lifetime is as long as the VM's,
+ // we should manage it.
+ const ptr = this.ffi.QTS_GetGlobalObject(this.ctx.value);
+ // Automatically clean up this reference when we dispose
+ this.memory.manage(this.memory.heapValueHandle(ptr));
+ // This isn't technically a static lifetime, but since it has the same
+ // lifetime as the VM, it's okay to fake one since when the VM is
+ // disposed, no other functions will accept the value.
+ this._global = new lifetime_1.StaticLifetime(ptr, this.runtime);
+ return this._global;
+ }
+ // New values ---------------------------------------------------------------
+ /**
+ * Converts a Javascript number into a QuickJS value.
+ */
+ newNumber(num) {
+ return this.memory.heapValueHandle(this.ffi.QTS_NewFloat64(this.ctx.value, num));
+ }
+ /**
+ * Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value.
+ */
+ newString(str) {
+ const ptr = this.memory
+ .newHeapCharPointer(str)
+ .consume((charHandle) => this.ffi.QTS_NewString(this.ctx.value, charHandle.value));
+ return this.memory.heapValueHandle(ptr);
+ }
+ /**
+ * Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value.
+ * No two symbols created with this function will be the same value.
+ */
+ newUniqueSymbol(description) {
+ const key = (typeof description === "symbol" ? description.description : description) ?? "";
+ const ptr = this.memory
+ .newHeapCharPointer(key)
+ .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 0));
+ return this.memory.heapValueHandle(ptr);
+ }
+ /**
+ * Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key.
+ * All symbols created with the same key will be the same value.
+ */
+ newSymbolFor(key) {
+ const description = (typeof key === "symbol" ? key.description : key) ?? "";
+ const ptr = this.memory
+ .newHeapCharPointer(description)
+ .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 1));
+ return this.memory.heapValueHandle(ptr);
+ }
+ /**
+ * Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value.
+ */
+ newBigInt(num) {
+ if (!this._BigInt) {
+ const bigIntHandle = this.getProp(this.global, "BigInt");
+ this.memory.manage(bigIntHandle);
+ this._BigInt = new lifetime_1.StaticLifetime(bigIntHandle.value, this.runtime);
+ }
+ const bigIntHandle = this._BigInt;
+ const asString = String(num);
+ return this.newString(asString).consume((handle) => this.unwrapResult(this.callFunction(bigIntHandle, this.undefined, handle)));
+ }
+ /**
+ * `{}`.
+ * Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer).
+ *
+ * @param prototype - Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create).
+ */
+ newObject(prototype) {
+ if (prototype) {
+ this.runtime.assertOwned(prototype);
+ }
+ const ptr = prototype
+ ? this.ffi.QTS_NewObjectProto(this.ctx.value, prototype.value)
+ : this.ffi.QTS_NewObject(this.ctx.value);
+ return this.memory.heapValueHandle(ptr);
+ }
+ /**
+ * `[]`.
+ * Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
+ */
+ newArray() {
+ const ptr = this.ffi.QTS_NewArray(this.ctx.value);
+ return this.memory.heapValueHandle(ptr);
+ }
+ newPromise(value) {
+ const deferredPromise = lifetime_1.Scope.withScope((scope) => {
+ const mutablePointerArray = scope.manage(this.memory.newMutablePointerArray(2));
+ const promisePtr = this.ffi.QTS_NewPromiseCapability(this.ctx.value, mutablePointerArray.value.ptr);
+ const promiseHandle = this.memory.heapValueHandle(promisePtr);
+ const [resolveHandle, rejectHandle] = Array.from(mutablePointerArray.value.typedArray).map((jsvaluePtr) => this.memory.heapValueHandle(jsvaluePtr));
+ return new deferred_promise_1.QuickJSDeferredPromise({
+ context: this,
+ promiseHandle,
+ resolveHandle,
+ rejectHandle,
+ });
+ });
+ if (value && typeof value === "function") {
+ value = new Promise(value);
+ }
+ if (value) {
+ Promise.resolve(value).then(deferredPromise.resolve, (error) => error instanceof lifetime_1.Lifetime
+ ? deferredPromise.reject(error)
+ : this.newError(error).consume(deferredPromise.reject));
+ }
+ return deferredPromise;
+ }
+ /**
+ * Convert a Javascript function into a QuickJS function value.
+ * See [[VmFunctionImplementation]] for more details.
+ *
+ * A [[VmFunctionImplementation]] should not free its arguments or its return
+ * value. A VmFunctionImplementation should also not retain any references to
+ * its return value.
+ *
+ * To implement an async function, create a promise with [[newPromise]], then
+ * return the deferred promise handle from `deferred.handle` from your
+ * function implementation:
+ *
+ * ```
+ * const deferred = vm.newPromise()
+ * someNativeAsyncFunction().then(deferred.resolve)
+ * return deferred.handle
+ * ```
+ */
+ newFunction(name, fn) {
+ const fnId = ++this.fnNextId;
+ this.setFunction(fnId, fn);
+ return this.memory.heapValueHandle(this.ffi.QTS_NewFunction(this.ctx.value, fnId, name));
+ }
+ newError(error) {
+ const errorHandle = this.memory.heapValueHandle(this.ffi.QTS_NewError(this.ctx.value));
+ if (error && typeof error === "object") {
+ if (error.name !== undefined) {
+ this.newString(error.name).consume((handle) => this.setProp(errorHandle, "name", handle));
+ }
+ if (error.message !== undefined) {
+ this.newString(error.message).consume((handle) => this.setProp(errorHandle, "message", handle));
+ }
+ }
+ else if (typeof error === "string") {
+ this.newString(error).consume((handle) => this.setProp(errorHandle, "message", handle));
+ }
+ else if (error !== undefined) {
+ // This isn't supported in the type signature but maybe it will make life easier.
+ this.newString(String(error)).consume((handle) => this.setProp(errorHandle, "message", handle));
+ }
+ return errorHandle;
+ }
+ // Read values --------------------------------------------------------------
+ /**
+ * `typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).
+ *
+ * @remarks
+ * Does not support BigInt values correctly.
+ */
+ typeof(handle) {
+ this.runtime.assertOwned(handle);
+ return this.memory.consumeHeapCharPointer(this.ffi.QTS_Typeof(this.ctx.value, handle.value));
+ }
+ /**
+ * Converts `handle` into a Javascript number.
+ * @returns `NaN` on error, otherwise a `number`.
+ */
+ getNumber(handle) {
+ this.runtime.assertOwned(handle);
+ return this.ffi.QTS_GetFloat64(this.ctx.value, handle.value);
+ }
+ /**
+ * Converts `handle` to a Javascript string.
+ */
+ getString(handle) {
+ this.runtime.assertOwned(handle);
+ return this.memory.consumeJSCharPointer(this.ffi.QTS_GetString(this.ctx.value, handle.value));
+ }
+ /**
+ * Converts `handle` into a Javascript symbol. If the symbol is in the global
+ * registry in the guest, it will be created with Symbol.for on the host.
+ */
+ getSymbol(handle) {
+ this.runtime.assertOwned(handle);
+ const key = this.memory.consumeJSCharPointer(this.ffi.QTS_GetSymbolDescriptionOrKey(this.ctx.value, handle.value));
+ const isGlobal = this.ffi.QTS_IsGlobalSymbol(this.ctx.value, handle.value);
+ return isGlobal ? Symbol.for(key) : Symbol(key);
+ }
+ /**
+ * Converts `handle` to a Javascript bigint.
+ */
+ getBigInt(handle) {
+ this.runtime.assertOwned(handle);
+ const asString = this.getString(handle);
+ return BigInt(asString);
+ }
+ /**
+ * `Promise.resolve(value)`.
+ * Convert a handle containing a Promise-like value inside the VM into an
+ * actual promise on the host.
+ *
+ * @remarks
+ * You may need to call [[executePendingJobs]] to ensure that the promise is resolved.
+ *
+ * @param promiseLikeHandle - A handle to a Promise-like value with a `.then(onSuccess, onError)` method.
+ */
+ resolvePromise(promiseLikeHandle) {
+ this.runtime.assertOwned(promiseLikeHandle);
+ const vmResolveResult = lifetime_1.Scope.withScope((scope) => {
+ const vmPromise = scope.manage(this.getProp(this.global, "Promise"));
+ const vmPromiseResolve = scope.manage(this.getProp(vmPromise, "resolve"));
+ return this.callFunction(vmPromiseResolve, vmPromise, promiseLikeHandle);
+ });
+ if (vmResolveResult.error) {
+ return Promise.resolve(vmResolveResult);
+ }
+ return new Promise((resolve) => {
+ lifetime_1.Scope.withScope((scope) => {
+ const resolveHandle = scope.manage(this.newFunction("resolve", (value) => {
+ resolve({ value: value && value.dup() });
+ }));
+ const rejectHandle = scope.manage(this.newFunction("reject", (error) => {
+ resolve({ error: error && error.dup() });
+ }));
+ const promiseHandle = scope.manage(vmResolveResult.value);
+ const promiseThenHandle = scope.manage(this.getProp(promiseHandle, "then"));
+ this.unwrapResult(this.callFunction(promiseThenHandle, promiseHandle, resolveHandle, rejectHandle)).dispose();
+ });
+ });
+ }
+ // Properties ---------------------------------------------------------------
+ /**
+ * `handle[key]`.
+ * Get a property from a JSValue.
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string (which will be converted automatically).
+ */
+ getProp(handle, key) {
+ this.runtime.assertOwned(handle);
+ const ptr = this.borrowPropertyKey(key).consume((quickJSKey) => this.ffi.QTS_GetProp(this.ctx.value, handle.value, quickJSKey.value));
+ const result = this.memory.heapValueHandle(ptr);
+ return result;
+ }
+ /**
+ * `handle[key] = value`.
+ * Set a property on a JSValue.
+ *
+ * @remarks
+ * Note that the QuickJS authors recommend using [[defineProp]] to define new
+ * properties.
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string or number (which will be converted automatically to a JSValue).
+ */
+ setProp(handle, key, value) {
+ this.runtime.assertOwned(handle);
+ // free newly allocated value if key was a string or number. No-op if string was already
+ // a QuickJS handle.
+ this.borrowPropertyKey(key).consume((quickJSKey) => this.ffi.QTS_SetProp(this.ctx.value, handle.value, quickJSKey.value, value.value));
+ }
+ /**
+ * [`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty).
+ *
+ * @param key - The property may be specified as a JSValue handle, or as a
+ * Javascript string or number (which will be converted automatically to a JSValue).
+ */
+ defineProp(handle, key, descriptor) {
+ this.runtime.assertOwned(handle);
+ lifetime_1.Scope.withScope((scope) => {
+ const quickJSKey = scope.manage(this.borrowPropertyKey(key));
+ const value = descriptor.value || this.undefined;
+ const configurable = Boolean(descriptor.configurable);
+ const enumerable = Boolean(descriptor.enumerable);
+ const hasValue = Boolean(descriptor.value);
+ const get = descriptor.get
+ ? scope.manage(this.newFunction(descriptor.get.name, descriptor.get))
+ : this.undefined;
+ const set = descriptor.set
+ ? scope.manage(this.newFunction(descriptor.set.name, descriptor.set))
+ : this.undefined;
+ this.ffi.QTS_DefineProp(this.ctx.value, handle.value, quickJSKey.value, value.value, get.value, set.value, configurable, enumerable, hasValue);
+ });
+ }
+ // Evaluation ---------------------------------------------------------------
+ /**
+ * [`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call).
+ * Call a JSValue as a function.
+ *
+ * See [[unwrapResult]], which will throw if the function returned an error, or
+ * return the result handle directly. If evaluation returned a handle containing
+ * a promise, use [[resolvePromise]] to convert it to a native promise and
+ * [[executePendingJobs]] to finish evaluating the promise.
+ *
+ * @returns A result. If the function threw synchronously, `result.error` be a
+ * handle to the exception. Otherwise `result.value` will be a handle to the
+ * value.
+ */
+ callFunction(func, thisVal, ...args) {
+ this.runtime.assertOwned(func);
+ const resultPtr = this.memory
+ .toPointerArray(args)
+ .consume((argsArrayPtr) => this.ffi.QTS_Call(this.ctx.value, func.value, thisVal.value, args.length, argsArrayPtr.value));
+ const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
+ if (errorPtr) {
+ this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
+ return { error: this.memory.heapValueHandle(errorPtr) };
+ }
+ return { value: this.memory.heapValueHandle(resultPtr) };
+ }
+ /**
+ * Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description).
+ * Evaluates the Javascript source `code` in the global scope of this VM.
+ * When working with async code, you many need to call [[executePendingJobs]]
+ * to execute callbacks pending after synchronous evaluation returns.
+ *
+ * See [[unwrapResult]], which will throw if the function returned an error, or
+ * return the result handle directly. If evaluation returned a handle containing
+ * a promise, use [[resolvePromise]] to convert it to a native promise and
+ * [[executePendingJobs]] to finish evaluating the promise.
+ *
+ * *Note*: to protect against infinite loops, provide an interrupt handler to
+ * [[setInterruptHandler]]. You can use [[shouldInterruptAfterDeadline]] to
+ * create a time-based deadline.
+ *
+ * @returns The last statement's value. If the code threw synchronously,
+ * `result.error` will be a handle to the exception. If execution was
+ * interrupted, the error will have name `InternalError` and message
+ * `interrupted`.
+ */
+ evalCode(code, filename = "eval.js",
+ /**
+ * If no options are passed, a heuristic will be used to detect if `code` is
+ * an ES module.
+ *
+ * See [[EvalFlags]] for number semantics.
+ */
+ options) {
+ const detectModule = (options === undefined ? 1 : 0);
+ const flags = (0, types_1.evalOptionsToFlags)(options);
+ const resultPtr = this.memory
+ .newHeapCharPointer(code)
+ .consume((charHandle) => this.ffi.QTS_Eval(this.ctx.value, charHandle.value, filename, detectModule, flags));
+ const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr);
+ if (errorPtr) {
+ this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr);
+ return { error: this.memory.heapValueHandle(errorPtr) };
+ }
+ return { value: this.memory.heapValueHandle(resultPtr) };
+ }
+ /**
+ * Throw an error in the VM, interrupted whatever current execution is in progress when execution resumes.
+ * @experimental
+ */
+ throw(error) {
+ return this.errorToHandle(error).consume((handle) => this.ffi.QTS_Throw(this.ctx.value, handle.value));
+ }
+ /**
+ * @private
+ */
+ borrowPropertyKey(key) {
+ if (typeof key === "number") {
+ return this.newNumber(key);
+ }
+ if (typeof key === "string") {
+ return this.newString(key);
+ }
+ // key is already a JSValue, but we're borrowing it. Return a static handle
+ // for internal use only.
+ return new lifetime_1.StaticLifetime(key.value, this.runtime);
+ }
+ /**
+ * @private
+ */
+ getMemory(rt) {
+ if (rt === this.rt.value) {
+ return this.memory;
+ }
+ else {
+ throw new Error("Private API. Cannot get memory from a different runtime");
+ }
+ }
+ // Utilities ----------------------------------------------------------------
+ /**
+ * Dump a JSValue to Javascript in a best-effort fashion.
+ * Returns `handle.toString()` if it cannot be serialized to JSON.
+ */
+ dump(handle) {
+ this.runtime.assertOwned(handle);
+ const type = this.typeof(handle);
+ if (type === "string") {
+ return this.getString(handle);
+ }
+ else if (type === "number") {
+ return this.getNumber(handle);
+ }
+ else if (type === "bigint") {
+ return this.getBigInt(handle);
+ }
+ else if (type === "undefined") {
+ return undefined;
+ }
+ else if (type === "symbol") {
+ return this.getSymbol(handle);
+ }
+ const str = this.memory.consumeJSCharPointer(this.ffi.QTS_Dump(this.ctx.value, handle.value));
+ try {
+ return JSON.parse(str);
+ }
+ catch (err) {
+ return str;
+ }
+ }
+ /**
+ * Unwrap a SuccessOrFail result such as a [[VmCallResult]] or a
+ * [[ExecutePendingJobsResult]], where the fail branch contains a handle to a QuickJS error value.
+ * If the result is a success, returns the value.
+ * If the result is an error, converts the error to a native object and throws the error.
+ */
+ unwrapResult(result) {
+ if (result.error) {
+ const context = "context" in result.error ? result.error.context : this;
+ const cause = result.error.consume((error) => this.dump(error));
+ if (cause && typeof cause === "object" && typeof cause.message === "string") {
+ const { message, name, stack } = cause;
+ const exception = new errors_1.QuickJSUnwrapError("");
+ const hostStack = exception.stack;
+ if (typeof name === "string") {
+ exception.name = cause.name;
+ }
+ if (typeof stack === "string") {
+ exception.stack = `${name}: ${message}\n${cause.stack}Host: ${hostStack}`;
+ }
+ Object.assign(exception, { cause, context, message });
+ throw exception;
+ }
+ throw new errors_1.QuickJSUnwrapError(cause, context);
+ }
+ return result.value;
+ }
+ /** @private */
+ getFunction(fn_id) {
+ const map_id = fn_id >> 8;
+ const fnMap = this.fnMaps.get(map_id);
+ if (!fnMap) {
+ return undefined;
+ }
+ return fnMap.get(fn_id);
+ }
+ /** @private */
+ setFunction(fn_id, handle) {
+ const map_id = fn_id >> 8;
+ let fnMap = this.fnMaps.get(map_id);
+ if (!fnMap) {
+ fnMap = new Map();
+ this.fnMaps.set(map_id, fnMap);
+ }
+ return fnMap.set(fn_id, handle);
+ }
+ errorToHandle(error) {
+ if (error instanceof lifetime_1.Lifetime) {
+ return error;
+ }
+ return this.newError(error);
+ }
+}
+exports.QuickJSContext = QuickJSContext;
+//# sourceMappingURL=context.js.map
\ No newline at end of file
diff --git a/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js.map b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js.map
new file mode 100644
index 00000000..1398a539
--- /dev/null
+++ b/Scripts/node_modules/@tootallnate/quickjs-emscripten/dist/context.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"context.js","sourceRoot":"","sources":["../ts/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { debugLog } from \"./debug\"\nimport { QuickJSDeferredPromise } from \"./deferred-promise\"\nimport type { EitherModule } from \"./emscripten-types\"\nimport { QuickJSUnwrapError } from \"./errors\"\nimport {\n EvalDetectModule,\n EvalFlags,\n JSBorrowedCharPointer,\n JSContextPointer,\n JSModuleDefPointer,\n JSRuntimePointer,\n JSValueConstPointer,\n JSValuePointer,\n JSValuePointerPointer,\n JSVoidPointer,\n} from \"./types-ffi\"\nimport { Disposable, Lifetime, Scope, StaticLifetime, WeakLifetime } from \"./lifetime\"\nimport { ModuleMemory } from \"./memory\"\nimport { ContextCallbacks, QuickJSModuleCallbacks } from \"./module\"\nimport { QuickJSRuntime } from \"./runtime\"\nimport {\n ContextEvalOptions,\n EitherFFI,\n evalOptionsToFlags,\n JSValue,\n PromiseExecutor,\n QuickJSHandle,\n} from \"./types\"\nimport {\n LowLevelJavascriptVm,\n SuccessOrFail,\n VmCallResult,\n VmFunctionImplementation,\n VmPropertyDescriptor,\n} from \"./vm-interface\"\n\n/**\n * Property key for getting or setting a property on a handle with\n * [[QuickJSContext.getProp]], [[QuickJSContext.setProp]], or [[QuickJSContext.defineProp]].\n */\nexport type QuickJSPropertyKey = number | string | QuickJSHandle\n\n/**\n * @private\n */\nclass ContextMemory extends ModuleMemory implements Disposable {\n readonly owner: QuickJSRuntime\n readonly ctx: Lifetime\n readonly rt: Lifetime\n readonly module: EitherModule\n readonly ffi: EitherFFI\n readonly scope = new Scope()\n\n /** @private */\n constructor(args: {\n owner: QuickJSRuntime\n module: EitherModule\n ffi: EitherFFI\n ctx: Lifetime\n rt: Lifetime\n ownedLifetimes?: Disposable[]\n }) {\n super(args.module)\n args.ownedLifetimes?.forEach((lifetime) => this.scope.manage(lifetime))\n this.owner = args.owner\n this.module = args.module\n this.ffi = args.ffi\n this.rt = args.rt\n this.ctx = this.scope.manage(args.ctx)\n }\n\n get alive() {\n return this.scope.alive\n }\n\n dispose() {\n return this.scope.dispose()\n }\n\n /**\n * Track `lifetime` so that it is disposed when this scope is disposed.\n */\n manage(lifetime: T): T {\n return this.scope.manage(lifetime)\n }\n\n copyJSValue = (ptr: JSValuePointer | JSValueConstPointer) => {\n return this.ffi.QTS_DupValuePointer(this.ctx.value, ptr)\n }\n\n freeJSValue = (ptr: JSValuePointer) => {\n this.ffi.QTS_FreeValuePointer(this.ctx.value, ptr)\n }\n\n consumeJSCharPointer(ptr: JSBorrowedCharPointer): string {\n const str = this.module.UTF8ToString(ptr)\n this.ffi.QTS_FreeCString(this.ctx.value, ptr)\n return str\n }\n\n heapValueHandle(ptr: JSValuePointer): JSValue {\n return new Lifetime(ptr, this.copyJSValue, this.freeJSValue, this.owner)\n }\n}\n\n/**\n * QuickJSContext wraps a QuickJS Javascript context (JSContext*) within a\n * runtime. The contexts within the same runtime may exchange objects freely.\n * You can think of separate runtimes like different domains in a browser, and\n * the contexts within a runtime like the different windows open to the same\n * domain. The {@link runtime} references the context's runtime.\n *\n * This class's methods return {@link QuickJSHandle}, which wrap C pointers (JSValue*).\n * It's the caller's responsibility to call `.dispose()` on any\n * handles you create to free memory once you're done with the handle.\n *\n * Use {@link QuickJSRuntime.newContext} or {@link QuickJSWASMModule.newContext}\n * to create a new QuickJSContext.\n *\n * Create QuickJS values inside the interpreter with methods like\n * [[newNumber]], [[newString]], [[newArray]], [[newObject]],\n * [[newFunction]], and [[newPromise]].\n *\n * Call [[setProp]] or [[defineProp]] to customize objects. Use those methods\n * with [[global]] to expose the values you create to the interior of the\n * interpreter, so they can be used in [[evalCode]].\n *\n * Use [[evalCode]] or [[callFunction]] to execute Javascript inside the VM. If\n * you're using asynchronous code inside the QuickJSContext, you may need to also\n * call [[executePendingJobs]]. Executing code inside the runtime returns a\n * result object representing successful execution or an error. You must dispose\n * of any such results to avoid leaking memory inside the VM.\n *\n * Implement memory and CPU constraints at the runtime level, using [[runtime]].\n * See {@link QuickJSRuntime} for more information.\n *\n */\n// TODO: Manage own callback registration\nexport class QuickJSContext implements LowLevelJavascriptVm, Disposable {\n /**\n * The runtime that created this context.\n */\n public readonly runtime: QuickJSRuntime\n\n /** @private */\n protected readonly ctx: Lifetime\n /** @private */\n protected readonly rt: Lifetime\n /** @private */\n protected readonly module: EitherModule\n /** @private */\n protected readonly ffi: EitherFFI\n /** @private */\n protected memory: ContextMemory\n\n /** @private */\n protected _undefined: QuickJSHandle | undefined = undefined\n /** @private */\n protected _null: QuickJSHandle | undefined = undefined\n /** @private */\n protected _false: QuickJSHandle | undefined = undefined\n /** @private */\n protected _true: QuickJSHandle | undefined = undefined\n /** @private */\n protected _global: QuickJSHandle | undefined = undefined\n /** @private */\n protected _BigInt: QuickJSHandle | undefined = undefined\n\n /**\n * Use {@link QuickJS.createVm} to create a QuickJSContext instance.\n */\n constructor(args: {\n module: EitherModule\n ffi: EitherFFI\n ctx: Lifetime\n rt: Lifetime\n runtime: QuickJSRuntime\n ownedLifetimes?: Disposable[]\n callbacks: QuickJSModuleCallbacks\n }) {\n this.runtime = args.runtime\n this.module = args.module\n this.ffi = args.ffi\n this.rt = args.rt\n this.ctx = args.ctx\n this.memory = new ContextMemory({\n ...args,\n owner: this.runtime,\n })\n args.callbacks.setContextCallbacks(this.ctx.value, this.cToHostCallbacks)\n this.dump = this.dump.bind(this)\n this.getString = this.getString.bind(this)\n this.getNumber = this.getNumber.bind(this)\n this.resolvePromise = this.resolvePromise.bind(this)\n }\n\n // @implement Disposable ----------------------------------------------------\n\n get alive() {\n return this.memory.alive\n }\n\n /**\n * Dispose of this VM's underlying resources.\n *\n * @throws Calling this method without disposing of all created handles\n * will result in an error.\n */\n dispose() {\n this.memory.dispose()\n }\n\n // Globals ------------------------------------------------------------------\n\n /**\n * [`undefined`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined).\n */\n get undefined(): QuickJSHandle {\n if (this._undefined) {\n return this._undefined\n }\n\n // Undefined is a constant, immutable value in QuickJS.\n const ptr = this.ffi.QTS_GetUndefined()\n return (this._undefined = new StaticLifetime(ptr))\n }\n\n /**\n * [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null).\n */\n get null(): QuickJSHandle {\n if (this._null) {\n return this._null\n }\n\n // Null is a constant, immutable value in QuickJS.\n const ptr = this.ffi.QTS_GetNull()\n return (this._null = new StaticLifetime(ptr))\n }\n\n /**\n * [`true`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/true).\n */\n get true(): QuickJSHandle {\n if (this._true) {\n return this._true\n }\n\n // True is a constant, immutable value in QuickJS.\n const ptr = this.ffi.QTS_GetTrue()\n return (this._true = new StaticLifetime(ptr))\n }\n\n /**\n * [`false`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/false).\n */\n get false(): QuickJSHandle {\n if (this._false) {\n return this._false\n }\n\n // False is a constant, immutable value in QuickJS.\n const ptr = this.ffi.QTS_GetFalse()\n return (this._false = new StaticLifetime(ptr))\n }\n\n /**\n * [`global`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects).\n * A handle to the global object inside the interpreter.\n * You can set properties to create global variables.\n */\n get global(): QuickJSHandle {\n if (this._global) {\n return this._global\n }\n\n // The global is a JSValue, but since it's lifetime is as long as the VM's,\n // we should manage it.\n const ptr = this.ffi.QTS_GetGlobalObject(this.ctx.value)\n\n // Automatically clean up this reference when we dispose\n this.memory.manage(this.memory.heapValueHandle(ptr))\n\n // This isn't technically a static lifetime, but since it has the same\n // lifetime as the VM, it's okay to fake one since when the VM is\n // disposed, no other functions will accept the value.\n this._global = new StaticLifetime(ptr, this.runtime)\n return this._global\n }\n\n // New values ---------------------------------------------------------------\n\n /**\n * Converts a Javascript number into a QuickJS value.\n */\n newNumber(num: number): QuickJSHandle {\n return this.memory.heapValueHandle(this.ffi.QTS_NewFloat64(this.ctx.value, num))\n }\n\n /**\n * Create a QuickJS [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String) value.\n */\n newString(str: string): QuickJSHandle {\n const ptr = this.memory\n .newHeapCharPointer(str)\n .consume((charHandle) => this.ffi.QTS_NewString(this.ctx.value, charHandle.value))\n return this.memory.heapValueHandle(ptr)\n }\n\n /**\n * Create a QuickJS [symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) value.\n * No two symbols created with this function will be the same value.\n */\n newUniqueSymbol(description: string | symbol): QuickJSHandle {\n const key = (typeof description === \"symbol\" ? description.description : description) ?? \"\"\n const ptr = this.memory\n .newHeapCharPointer(key)\n .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 0))\n return this.memory.heapValueHandle(ptr)\n }\n\n /**\n * Get a symbol from the [global registry](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol#shared_symbols_in_the_global_symbol_registry) for the given key.\n * All symbols created with the same key will be the same value.\n */\n newSymbolFor(key: string | symbol): QuickJSHandle {\n const description = (typeof key === \"symbol\" ? key.description : key) ?? \"\"\n const ptr = this.memory\n .newHeapCharPointer(description)\n .consume((charHandle) => this.ffi.QTS_NewSymbol(this.ctx.value, charHandle.value, 1))\n return this.memory.heapValueHandle(ptr)\n }\n\n /**\n * Create a QuickJS [bigint](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt) value.\n */\n newBigInt(num: bigint): QuickJSHandle {\n if (!this._BigInt) {\n const bigIntHandle = this.getProp(this.global, \"BigInt\")\n this.memory.manage(bigIntHandle)\n this._BigInt = new StaticLifetime(bigIntHandle.value as JSValueConstPointer, this.runtime)\n }\n\n const bigIntHandle = this._BigInt\n const asString = String(num)\n return this.newString(asString).consume((handle) =>\n this.unwrapResult(this.callFunction(bigIntHandle, this.undefined, handle))\n )\n }\n\n /**\n * `{}`.\n * Create a new QuickJS [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer).\n *\n * @param prototype - Like [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create).\n */\n newObject(prototype?: QuickJSHandle): QuickJSHandle {\n if (prototype) {\n this.runtime.assertOwned(prototype)\n }\n const ptr = prototype\n ? this.ffi.QTS_NewObjectProto(this.ctx.value, prototype.value)\n : this.ffi.QTS_NewObject(this.ctx.value)\n return this.memory.heapValueHandle(ptr)\n }\n\n /**\n * `[]`.\n * Create a new QuickJS [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).\n */\n newArray(): QuickJSHandle {\n const ptr = this.ffi.QTS_NewArray(this.ctx.value)\n return this.memory.heapValueHandle(ptr)\n }\n\n /**\n * Create a new [[QuickJSDeferredPromise]]. Use `deferred.resolve(handle)` and\n * `deferred.reject(handle)` to fulfill the promise handle available at `deferred.handle`.\n * Note that you are responsible for calling `deferred.dispose()` to free the underlying\n * resources; see the documentation on [[QuickJSDeferredPromise]] for details.\n */\n newPromise(): QuickJSDeferredPromise\n /**\n * Create a new [[QuickJSDeferredPromise]] that resolves when the\n * given native Promise resolves. Rejections will be coerced\n * to a QuickJS error.\n *\n * You can still resolve/reject the created promise \"early\" using its methods.\n */\n newPromise(promise: Promise): QuickJSDeferredPromise\n /**\n * Construct a new native Promise, and then convert it into a\n * [[QuickJSDeferredPromise]].\n *\n * You can still resolve/reject the created promise \"early\" using its methods.\n */\n newPromise(\n newPromiseFn: PromiseExecutor\n ): QuickJSDeferredPromise\n newPromise(\n value?: PromiseExecutor | Promise\n ): QuickJSDeferredPromise {\n const deferredPromise = Scope.withScope((scope) => {\n const mutablePointerArray = scope.manage(\n this.memory.newMutablePointerArray(2)\n )\n const promisePtr = this.ffi.QTS_NewPromiseCapability(\n this.ctx.value,\n mutablePointerArray.value.ptr\n )\n const promiseHandle = this.memory.heapValueHandle(promisePtr)\n const [resolveHandle, rejectHandle] = Array.from(mutablePointerArray.value.typedArray).map(\n (jsvaluePtr) => this.memory.heapValueHandle(jsvaluePtr as any)\n )\n return new QuickJSDeferredPromise({\n context: this,\n promiseHandle,\n resolveHandle,\n rejectHandle,\n })\n })\n\n if (value && typeof value === \"function\") {\n value = new Promise(value)\n }\n\n if (value) {\n Promise.resolve(value).then(deferredPromise.resolve, (error) =>\n error instanceof Lifetime\n ? deferredPromise.reject(error)\n : this.newError(error).consume(deferredPromise.reject)\n )\n }\n\n return deferredPromise\n }\n\n /**\n * Convert a Javascript function into a QuickJS function value.\n * See [[VmFunctionImplementation]] for more details.\n *\n * A [[VmFunctionImplementation]] should not free its arguments or its return\n * value. A VmFunctionImplementation should also not retain any references to\n * its return value.\n *\n * To implement an async function, create a promise with [[newPromise]], then\n * return the deferred promise handle from `deferred.handle` from your\n * function implementation:\n *\n * ```\n * const deferred = vm.newPromise()\n * someNativeAsyncFunction().then(deferred.resolve)\n * return deferred.handle\n * ```\n */\n newFunction(name: string, fn: VmFunctionImplementation): QuickJSHandle {\n const fnId = ++this.fnNextId\n this.setFunction(fnId, fn)\n return this.memory.heapValueHandle(this.ffi.QTS_NewFunction(this.ctx.value, fnId, name))\n }\n\n newError(error: { name: string; message: string }): QuickJSHandle\n newError(message: string): QuickJSHandle\n newError(): QuickJSHandle\n newError(error?: string | { name: string; message: string }): QuickJSHandle {\n const errorHandle = this.memory.heapValueHandle(this.ffi.QTS_NewError(this.ctx.value))\n\n if (error && typeof error === \"object\") {\n if (error.name !== undefined) {\n this.newString(error.name).consume((handle) => this.setProp(errorHandle, \"name\", handle))\n }\n\n if (error.message !== undefined) {\n this.newString(error.message).consume((handle) =>\n this.setProp(errorHandle, \"message\", handle)\n )\n }\n } else if (typeof error === \"string\") {\n this.newString(error).consume((handle) => this.setProp(errorHandle, \"message\", handle))\n } else if (error !== undefined) {\n // This isn't supported in the type signature but maybe it will make life easier.\n this.newString(String(error)).consume((handle) =>\n this.setProp(errorHandle, \"message\", handle)\n )\n }\n\n return errorHandle\n }\n\n // Read values --------------------------------------------------------------\n\n /**\n * `typeof` operator. **Not** [standards compliant](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof).\n *\n * @remarks\n * Does not support BigInt values correctly.\n */\n typeof(handle: QuickJSHandle) {\n this.runtime.assertOwned(handle)\n return this.memory.consumeHeapCharPointer(this.ffi.QTS_Typeof(this.ctx.value, handle.value))\n }\n\n /**\n * Converts `handle` into a Javascript number.\n * @returns `NaN` on error, otherwise a `number`.\n */\n getNumber(handle: QuickJSHandle): number {\n this.runtime.assertOwned(handle)\n return this.ffi.QTS_GetFloat64(this.ctx.value, handle.value)\n }\n\n /**\n * Converts `handle` to a Javascript string.\n */\n getString(handle: QuickJSHandle): string {\n this.runtime.assertOwned(handle)\n return this.memory.consumeJSCharPointer(this.ffi.QTS_GetString(this.ctx.value, handle.value))\n }\n\n /**\n * Converts `handle` into a Javascript symbol. If the symbol is in the global\n * registry in the guest, it will be created with Symbol.for on the host.\n */\n getSymbol(handle: QuickJSHandle): symbol {\n this.runtime.assertOwned(handle)\n const key = this.memory.consumeJSCharPointer(\n this.ffi.QTS_GetSymbolDescriptionOrKey(this.ctx.value, handle.value)\n )\n const isGlobal = this.ffi.QTS_IsGlobalSymbol(this.ctx.value, handle.value)\n return isGlobal ? Symbol.for(key) : Symbol(key)\n }\n\n /**\n * Converts `handle` to a Javascript bigint.\n */\n getBigInt(handle: QuickJSHandle): bigint {\n this.runtime.assertOwned(handle)\n const asString = this.getString(handle)\n return BigInt(asString)\n }\n\n /**\n * `Promise.resolve(value)`.\n * Convert a handle containing a Promise-like value inside the VM into an\n * actual promise on the host.\n *\n * @remarks\n * You may need to call [[executePendingJobs]] to ensure that the promise is resolved.\n *\n * @param promiseLikeHandle - A handle to a Promise-like value with a `.then(onSuccess, onError)` method.\n */\n resolvePromise(promiseLikeHandle: QuickJSHandle): Promise> {\n this.runtime.assertOwned(promiseLikeHandle)\n const vmResolveResult = Scope.withScope((scope) => {\n const vmPromise = scope.manage(this.getProp(this.global, \"Promise\"))\n const vmPromiseResolve = scope.manage(this.getProp(vmPromise, \"resolve\"))\n return this.callFunction(vmPromiseResolve, vmPromise, promiseLikeHandle)\n })\n if (vmResolveResult.error) {\n return Promise.resolve(vmResolveResult)\n }\n\n return new Promise>((resolve) => {\n Scope.withScope((scope) => {\n const resolveHandle = scope.manage(\n this.newFunction(\"resolve\", (value) => {\n resolve({ value: value && value.dup() })\n })\n )\n\n const rejectHandle = scope.manage(\n this.newFunction(\"reject\", (error) => {\n resolve({ error: error && error.dup() })\n })\n )\n\n const promiseHandle = scope.manage(vmResolveResult.value)\n const promiseThenHandle = scope.manage(this.getProp(promiseHandle, \"then\"))\n this.unwrapResult(\n this.callFunction(promiseThenHandle, promiseHandle, resolveHandle, rejectHandle)\n ).dispose()\n })\n })\n }\n\n // Properties ---------------------------------------------------------------\n\n /**\n * `handle[key]`.\n * Get a property from a JSValue.\n *\n * @param key - The property may be specified as a JSValue handle, or as a\n * Javascript string (which will be converted automatically).\n */\n getProp(handle: QuickJSHandle, key: QuickJSPropertyKey): QuickJSHandle {\n this.runtime.assertOwned(handle)\n const ptr = this.borrowPropertyKey(key).consume((quickJSKey) =>\n this.ffi.QTS_GetProp(this.ctx.value, handle.value, quickJSKey.value)\n )\n const result = this.memory.heapValueHandle(ptr)\n\n return result\n }\n\n /**\n * `handle[key] = value`.\n * Set a property on a JSValue.\n *\n * @remarks\n * Note that the QuickJS authors recommend using [[defineProp]] to define new\n * properties.\n *\n * @param key - The property may be specified as a JSValue handle, or as a\n * Javascript string or number (which will be converted automatically to a JSValue).\n */\n setProp(handle: QuickJSHandle, key: QuickJSPropertyKey, value: QuickJSHandle) {\n this.runtime.assertOwned(handle)\n // free newly allocated value if key was a string or number. No-op if string was already\n // a QuickJS handle.\n this.borrowPropertyKey(key).consume((quickJSKey) =>\n this.ffi.QTS_SetProp(this.ctx.value, handle.value, quickJSKey.value, value.value)\n )\n }\n\n /**\n * [`Object.defineProperty(handle, key, descriptor)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty).\n *\n * @param key - The property may be specified as a JSValue handle, or as a\n * Javascript string or number (which will be converted automatically to a JSValue).\n */\n defineProp(\n handle: QuickJSHandle,\n key: QuickJSPropertyKey,\n descriptor: VmPropertyDescriptor\n ): void {\n this.runtime.assertOwned(handle)\n Scope.withScope((scope) => {\n const quickJSKey = scope.manage(this.borrowPropertyKey(key))\n\n const value = descriptor.value || this.undefined\n const configurable = Boolean(descriptor.configurable)\n const enumerable = Boolean(descriptor.enumerable)\n const hasValue = Boolean(descriptor.value)\n const get = descriptor.get\n ? scope.manage(this.newFunction(descriptor.get.name, descriptor.get))\n : this.undefined\n const set = descriptor.set\n ? scope.manage(this.newFunction(descriptor.set.name, descriptor.set))\n : this.undefined\n\n this.ffi.QTS_DefineProp(\n this.ctx.value,\n handle.value,\n quickJSKey.value,\n value.value,\n get.value,\n set.value,\n configurable,\n enumerable,\n hasValue\n )\n })\n }\n\n // Evaluation ---------------------------------------------------------------\n\n /**\n * [`func.call(thisVal, ...args)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call).\n * Call a JSValue as a function.\n *\n * See [[unwrapResult]], which will throw if the function returned an error, or\n * return the result handle directly. If evaluation returned a handle containing\n * a promise, use [[resolvePromise]] to convert it to a native promise and\n * [[executePendingJobs]] to finish evaluating the promise.\n *\n * @returns A result. If the function threw synchronously, `result.error` be a\n * handle to the exception. Otherwise `result.value` will be a handle to the\n * value.\n */\n callFunction(\n func: QuickJSHandle,\n thisVal: QuickJSHandle,\n ...args: QuickJSHandle[]\n ): VmCallResult {\n this.runtime.assertOwned(func)\n const resultPtr = this.memory\n .toPointerArray(args)\n .consume((argsArrayPtr) =>\n this.ffi.QTS_Call(\n this.ctx.value,\n func.value,\n thisVal.value,\n args.length,\n argsArrayPtr.value\n )\n )\n\n const errorPtr = this.ffi.QTS_ResolveException(this.ctx.value, resultPtr)\n if (errorPtr) {\n this.ffi.QTS_FreeValuePointer(this.ctx.value, resultPtr)\n return { error: this.memory.heapValueHandle(errorPtr) }\n }\n\n return { value: this.memory.heapValueHandle(resultPtr) }\n }\n\n /**\n * Like [`eval(code)`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Description).\n * Evaluates the Javascript source `code` in the global scope of this VM.\n * When working with async code, you many need to call [[executePendingJobs]]\n * to execute callbacks pending after synchronous evaluation returns.\n *\n * See [[unwrapResult]], which will throw if the function returned an error, or\n * return the result handle directly. If evaluation returned a handle containing\n * a promise, use [[resolvePromise]] to convert it to a native promise and\n * [[executePendingJobs]] to finish evaluating the promise.\n *\n * *Note*: to protect against infinite loops, provide an interrupt handler to\n * [[setInterruptHandler]]. You can use [[shouldInterruptAfterDeadline]] to\n * create a time-based deadline.\n *\n * @returns The last statement's value. If the code threw synchronously,\n * `result.error` will be a handle to the exception. If execution was\n * interrupted, the error will have name `InternalError` and message\n * `interrupted`.\n */\n evalCode(\n code: string,\n filename: string = \"eval.js\",\n /**\n * If no options are passed, a heuristic will be used to detect if `code` is\n * an ES module.\n *\n * See [[EvalFlags]] for number semantics.\n */\n options?: number | ContextEvalOptions\n ): VmCallResult